mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
* Adding Vue components for Charts and Multi Select * List Views * Improve UI of datatable * Refactor Vue Datatable for reusability
39651 lines
1.2 MiB
Vendored
39651 lines
1.2 MiB
Vendored
/******/ (function(modules) { // webpackBootstrap
|
||
/******/ // The module cache
|
||
/******/ var installedModules = {};
|
||
/******/
|
||
/******/ // The require function
|
||
/******/ function __webpack_require__(moduleId) {
|
||
/******/
|
||
/******/ // Check if module is in cache
|
||
/******/ if(installedModules[moduleId]) {
|
||
/******/ return installedModules[moduleId].exports;
|
||
/******/ }
|
||
/******/ // Create a new module (and put it into the cache)
|
||
/******/ var module = installedModules[moduleId] = {
|
||
/******/ i: moduleId,
|
||
/******/ l: false,
|
||
/******/ exports: {}
|
||
/******/ };
|
||
/******/
|
||
/******/ // Execute the module function
|
||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||
/******/
|
||
/******/ // Flag the module as loaded
|
||
/******/ module.l = true;
|
||
/******/
|
||
/******/ // Return the exports of the module
|
||
/******/ return module.exports;
|
||
/******/ }
|
||
/******/
|
||
/******/
|
||
/******/ // expose the modules object (__webpack_modules__)
|
||
/******/ __webpack_require__.m = modules;
|
||
/******/
|
||
/******/ // expose the module cache
|
||
/******/ __webpack_require__.c = installedModules;
|
||
/******/
|
||
/******/ // define getter function for harmony exports
|
||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||
/******/ if(!__webpack_require__.o(exports, name)) {
|
||
/******/ Object.defineProperty(exports, name, {
|
||
/******/ configurable: false,
|
||
/******/ enumerable: true,
|
||
/******/ get: getter
|
||
/******/ });
|
||
/******/ }
|
||
/******/ };
|
||
/******/
|
||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||
/******/ __webpack_require__.n = function(module) {
|
||
/******/ var getter = module && module.__esModule ?
|
||
/******/ function getDefault() { return module['default']; } :
|
||
/******/ function getModuleExports() { return module; };
|
||
/******/ __webpack_require__.d(getter, 'a', getter);
|
||
/******/ return getter;
|
||
/******/ };
|
||
/******/
|
||
/******/ // Object.prototype.hasOwnProperty.call
|
||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||
/******/
|
||
/******/ // __webpack_public_path__
|
||
/******/ __webpack_require__.p = "/";
|
||
/******/
|
||
/******/ // Load entry module and return exports
|
||
/******/ return __webpack_require__(__webpack_require__.s = 2);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ({
|
||
|
||
/***/ "./node_modules/axios/index.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__("./node_modules/axios/lib/axios.js");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/adapters/xhr.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
var settle = __webpack_require__("./node_modules/axios/lib/core/settle.js");
|
||
var buildURL = __webpack_require__("./node_modules/axios/lib/helpers/buildURL.js");
|
||
var parseHeaders = __webpack_require__("./node_modules/axios/lib/helpers/parseHeaders.js");
|
||
var isURLSameOrigin = __webpack_require__("./node_modules/axios/lib/helpers/isURLSameOrigin.js");
|
||
var createError = __webpack_require__("./node_modules/axios/lib/core/createError.js");
|
||
var btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__("./node_modules/axios/lib/helpers/btoa.js");
|
||
|
||
module.exports = function xhrAdapter(config) {
|
||
return new Promise(function dispatchXhrRequest(resolve, reject) {
|
||
var requestData = config.data;
|
||
var requestHeaders = config.headers;
|
||
|
||
if (utils.isFormData(requestData)) {
|
||
delete requestHeaders['Content-Type']; // Let the browser set it
|
||
}
|
||
|
||
var request = new XMLHttpRequest();
|
||
var loadEvent = 'onreadystatechange';
|
||
var xDomain = false;
|
||
|
||
// For IE 8/9 CORS support
|
||
// Only supports POST and GET calls and doesn't returns the response headers.
|
||
// DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.
|
||
if ("development" !== 'test' &&
|
||
typeof window !== 'undefined' &&
|
||
window.XDomainRequest && !('withCredentials' in request) &&
|
||
!isURLSameOrigin(config.url)) {
|
||
request = new window.XDomainRequest();
|
||
loadEvent = 'onload';
|
||
xDomain = true;
|
||
request.onprogress = function handleProgress() {};
|
||
request.ontimeout = function handleTimeout() {};
|
||
}
|
||
|
||
// HTTP basic authentication
|
||
if (config.auth) {
|
||
var username = config.auth.username || '';
|
||
var password = config.auth.password || '';
|
||
requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
|
||
}
|
||
|
||
request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);
|
||
|
||
// Set the request timeout in MS
|
||
request.timeout = config.timeout;
|
||
|
||
// Listen for ready state
|
||
request[loadEvent] = function handleLoad() {
|
||
if (!request || (request.readyState !== 4 && !xDomain)) {
|
||
return;
|
||
}
|
||
|
||
// The request errored out and we didn't get a response, this will be
|
||
// handled by onerror instead
|
||
// With one exception: request that using file: protocol, most browsers
|
||
// will return status as 0 even though it's a successful request
|
||
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
|
||
return;
|
||
}
|
||
|
||
// Prepare the response
|
||
var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
|
||
var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
|
||
var response = {
|
||
data: responseData,
|
||
// IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)
|
||
status: request.status === 1223 ? 204 : request.status,
|
||
statusText: request.status === 1223 ? 'No Content' : request.statusText,
|
||
headers: responseHeaders,
|
||
config: config,
|
||
request: request
|
||
};
|
||
|
||
settle(resolve, reject, response);
|
||
|
||
// Clean up request
|
||
request = null;
|
||
};
|
||
|
||
// Handle low level network errors
|
||
request.onerror = function handleError() {
|
||
// Real errors are hidden from us by the browser
|
||
// onerror should only fire if it's a network error
|
||
reject(createError('Network Error', config, null, request));
|
||
|
||
// Clean up request
|
||
request = null;
|
||
};
|
||
|
||
// Handle timeout
|
||
request.ontimeout = function handleTimeout() {
|
||
reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',
|
||
request));
|
||
|
||
// Clean up request
|
||
request = null;
|
||
};
|
||
|
||
// Add xsrf header
|
||
// This is only done if running in a standard browser environment.
|
||
// Specifically not if we're in a web worker, or react-native.
|
||
if (utils.isStandardBrowserEnv()) {
|
||
var cookies = __webpack_require__("./node_modules/axios/lib/helpers/cookies.js");
|
||
|
||
// Add xsrf header
|
||
var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?
|
||
cookies.read(config.xsrfCookieName) :
|
||
undefined;
|
||
|
||
if (xsrfValue) {
|
||
requestHeaders[config.xsrfHeaderName] = xsrfValue;
|
||
}
|
||
}
|
||
|
||
// Add headers to the request
|
||
if ('setRequestHeader' in request) {
|
||
utils.forEach(requestHeaders, function setRequestHeader(val, key) {
|
||
if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
|
||
// Remove Content-Type if data is undefined
|
||
delete requestHeaders[key];
|
||
} else {
|
||
// Otherwise add header to the request
|
||
request.setRequestHeader(key, val);
|
||
}
|
||
});
|
||
}
|
||
|
||
// Add withCredentials to request if needed
|
||
if (config.withCredentials) {
|
||
request.withCredentials = true;
|
||
}
|
||
|
||
// Add responseType to request if needed
|
||
if (config.responseType) {
|
||
try {
|
||
request.responseType = config.responseType;
|
||
} catch (e) {
|
||
// Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
|
||
// But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
|
||
if (config.responseType !== 'json') {
|
||
throw e;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Handle progress if needed
|
||
if (typeof config.onDownloadProgress === 'function') {
|
||
request.addEventListener('progress', config.onDownloadProgress);
|
||
}
|
||
|
||
// Not all browsers support upload events
|
||
if (typeof config.onUploadProgress === 'function' && request.upload) {
|
||
request.upload.addEventListener('progress', config.onUploadProgress);
|
||
}
|
||
|
||
if (config.cancelToken) {
|
||
// Handle cancellation
|
||
config.cancelToken.promise.then(function onCanceled(cancel) {
|
||
if (!request) {
|
||
return;
|
||
}
|
||
|
||
request.abort();
|
||
reject(cancel);
|
||
// Clean up request
|
||
request = null;
|
||
});
|
||
}
|
||
|
||
if (requestData === undefined) {
|
||
requestData = null;
|
||
}
|
||
|
||
// Send the request
|
||
request.send(requestData);
|
||
});
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/axios.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
var bind = __webpack_require__("./node_modules/axios/lib/helpers/bind.js");
|
||
var Axios = __webpack_require__("./node_modules/axios/lib/core/Axios.js");
|
||
var defaults = __webpack_require__("./node_modules/axios/lib/defaults.js");
|
||
|
||
/**
|
||
* Create an instance of Axios
|
||
*
|
||
* @param {Object} defaultConfig The default config for the instance
|
||
* @return {Axios} A new instance of Axios
|
||
*/
|
||
function createInstance(defaultConfig) {
|
||
var context = new Axios(defaultConfig);
|
||
var instance = bind(Axios.prototype.request, context);
|
||
|
||
// Copy axios.prototype to instance
|
||
utils.extend(instance, Axios.prototype, context);
|
||
|
||
// Copy context to instance
|
||
utils.extend(instance, context);
|
||
|
||
return instance;
|
||
}
|
||
|
||
// Create the default instance to be exported
|
||
var axios = createInstance(defaults);
|
||
|
||
// Expose Axios class to allow class inheritance
|
||
axios.Axios = Axios;
|
||
|
||
// Factory for creating new instances
|
||
axios.create = function create(instanceConfig) {
|
||
return createInstance(utils.merge(defaults, instanceConfig));
|
||
};
|
||
|
||
// Expose Cancel & CancelToken
|
||
axios.Cancel = __webpack_require__("./node_modules/axios/lib/cancel/Cancel.js");
|
||
axios.CancelToken = __webpack_require__("./node_modules/axios/lib/cancel/CancelToken.js");
|
||
axios.isCancel = __webpack_require__("./node_modules/axios/lib/cancel/isCancel.js");
|
||
|
||
// Expose all/spread
|
||
axios.all = function all(promises) {
|
||
return Promise.all(promises);
|
||
};
|
||
axios.spread = __webpack_require__("./node_modules/axios/lib/helpers/spread.js");
|
||
|
||
module.exports = axios;
|
||
|
||
// Allow use of default import syntax in TypeScript
|
||
module.exports.default = axios;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/cancel/Cancel.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* A `Cancel` is an object that is thrown when an operation is canceled.
|
||
*
|
||
* @class
|
||
* @param {string=} message The message.
|
||
*/
|
||
function Cancel(message) {
|
||
this.message = message;
|
||
}
|
||
|
||
Cancel.prototype.toString = function toString() {
|
||
return 'Cancel' + (this.message ? ': ' + this.message : '');
|
||
};
|
||
|
||
Cancel.prototype.__CANCEL__ = true;
|
||
|
||
module.exports = Cancel;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var Cancel = __webpack_require__("./node_modules/axios/lib/cancel/Cancel.js");
|
||
|
||
/**
|
||
* A `CancelToken` is an object that can be used to request cancellation of an operation.
|
||
*
|
||
* @class
|
||
* @param {Function} executor The executor function.
|
||
*/
|
||
function CancelToken(executor) {
|
||
if (typeof executor !== 'function') {
|
||
throw new TypeError('executor must be a function.');
|
||
}
|
||
|
||
var resolvePromise;
|
||
this.promise = new Promise(function promiseExecutor(resolve) {
|
||
resolvePromise = resolve;
|
||
});
|
||
|
||
var token = this;
|
||
executor(function cancel(message) {
|
||
if (token.reason) {
|
||
// Cancellation has already been requested
|
||
return;
|
||
}
|
||
|
||
token.reason = new Cancel(message);
|
||
resolvePromise(token.reason);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Throws a `Cancel` if cancellation has been requested.
|
||
*/
|
||
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
|
||
if (this.reason) {
|
||
throw this.reason;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Returns an object that contains a new `CancelToken` and a function that, when called,
|
||
* cancels the `CancelToken`.
|
||
*/
|
||
CancelToken.source = function source() {
|
||
var cancel;
|
||
var token = new CancelToken(function executor(c) {
|
||
cancel = c;
|
||
});
|
||
return {
|
||
token: token,
|
||
cancel: cancel
|
||
};
|
||
};
|
||
|
||
module.exports = CancelToken;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/cancel/isCancel.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
module.exports = function isCancel(value) {
|
||
return !!(value && value.__CANCEL__);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/core/Axios.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var defaults = __webpack_require__("./node_modules/axios/lib/defaults.js");
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
var InterceptorManager = __webpack_require__("./node_modules/axios/lib/core/InterceptorManager.js");
|
||
var dispatchRequest = __webpack_require__("./node_modules/axios/lib/core/dispatchRequest.js");
|
||
|
||
/**
|
||
* Create a new instance of Axios
|
||
*
|
||
* @param {Object} instanceConfig The default config for the instance
|
||
*/
|
||
function Axios(instanceConfig) {
|
||
this.defaults = instanceConfig;
|
||
this.interceptors = {
|
||
request: new InterceptorManager(),
|
||
response: new InterceptorManager()
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Dispatch a request
|
||
*
|
||
* @param {Object} config The config specific for this request (merged with this.defaults)
|
||
*/
|
||
Axios.prototype.request = function request(config) {
|
||
/*eslint no-param-reassign:0*/
|
||
// Allow for axios('example/url'[, config]) a la fetch API
|
||
if (typeof config === 'string') {
|
||
config = utils.merge({
|
||
url: arguments[0]
|
||
}, arguments[1]);
|
||
}
|
||
|
||
config = utils.merge(defaults, {method: 'get'}, this.defaults, config);
|
||
config.method = config.method.toLowerCase();
|
||
|
||
// Hook up interceptors middleware
|
||
var chain = [dispatchRequest, undefined];
|
||
var promise = Promise.resolve(config);
|
||
|
||
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
|
||
chain.unshift(interceptor.fulfilled, interceptor.rejected);
|
||
});
|
||
|
||
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
|
||
chain.push(interceptor.fulfilled, interceptor.rejected);
|
||
});
|
||
|
||
while (chain.length) {
|
||
promise = promise.then(chain.shift(), chain.shift());
|
||
}
|
||
|
||
return promise;
|
||
};
|
||
|
||
// Provide aliases for supported request methods
|
||
utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
|
||
/*eslint func-names:0*/
|
||
Axios.prototype[method] = function(url, config) {
|
||
return this.request(utils.merge(config || {}, {
|
||
method: method,
|
||
url: url
|
||
}));
|
||
};
|
||
});
|
||
|
||
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
|
||
/*eslint func-names:0*/
|
||
Axios.prototype[method] = function(url, data, config) {
|
||
return this.request(utils.merge(config || {}, {
|
||
method: method,
|
||
url: url,
|
||
data: data
|
||
}));
|
||
};
|
||
});
|
||
|
||
module.exports = Axios;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
|
||
function InterceptorManager() {
|
||
this.handlers = [];
|
||
}
|
||
|
||
/**
|
||
* Add a new interceptor to the stack
|
||
*
|
||
* @param {Function} fulfilled The function to handle `then` for a `Promise`
|
||
* @param {Function} rejected The function to handle `reject` for a `Promise`
|
||
*
|
||
* @return {Number} An ID used to remove interceptor later
|
||
*/
|
||
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
|
||
this.handlers.push({
|
||
fulfilled: fulfilled,
|
||
rejected: rejected
|
||
});
|
||
return this.handlers.length - 1;
|
||
};
|
||
|
||
/**
|
||
* Remove an interceptor from the stack
|
||
*
|
||
* @param {Number} id The ID that was returned by `use`
|
||
*/
|
||
InterceptorManager.prototype.eject = function eject(id) {
|
||
if (this.handlers[id]) {
|
||
this.handlers[id] = null;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Iterate over all the registered interceptors
|
||
*
|
||
* This method is particularly useful for skipping over any
|
||
* interceptors that may have become `null` calling `eject`.
|
||
*
|
||
* @param {Function} fn The function to call for each interceptor
|
||
*/
|
||
InterceptorManager.prototype.forEach = function forEach(fn) {
|
||
utils.forEach(this.handlers, function forEachHandler(h) {
|
||
if (h !== null) {
|
||
fn(h);
|
||
}
|
||
});
|
||
};
|
||
|
||
module.exports = InterceptorManager;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/core/createError.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var enhanceError = __webpack_require__("./node_modules/axios/lib/core/enhanceError.js");
|
||
|
||
/**
|
||
* Create an Error with the specified message, config, error code, request and response.
|
||
*
|
||
* @param {string} message The error message.
|
||
* @param {Object} config The config.
|
||
* @param {string} [code] The error code (for example, 'ECONNABORTED').
|
||
* @param {Object} [request] The request.
|
||
* @param {Object} [response] The response.
|
||
* @returns {Error} The created error.
|
||
*/
|
||
module.exports = function createError(message, config, code, request, response) {
|
||
var error = new Error(message);
|
||
return enhanceError(error, config, code, request, response);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
var transformData = __webpack_require__("./node_modules/axios/lib/core/transformData.js");
|
||
var isCancel = __webpack_require__("./node_modules/axios/lib/cancel/isCancel.js");
|
||
var defaults = __webpack_require__("./node_modules/axios/lib/defaults.js");
|
||
var isAbsoluteURL = __webpack_require__("./node_modules/axios/lib/helpers/isAbsoluteURL.js");
|
||
var combineURLs = __webpack_require__("./node_modules/axios/lib/helpers/combineURLs.js");
|
||
|
||
/**
|
||
* Throws a `Cancel` if cancellation has been requested.
|
||
*/
|
||
function throwIfCancellationRequested(config) {
|
||
if (config.cancelToken) {
|
||
config.cancelToken.throwIfRequested();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Dispatch a request to the server using the configured adapter.
|
||
*
|
||
* @param {object} config The config that is to be used for the request
|
||
* @returns {Promise} The Promise to be fulfilled
|
||
*/
|
||
module.exports = function dispatchRequest(config) {
|
||
throwIfCancellationRequested(config);
|
||
|
||
// Support baseURL config
|
||
if (config.baseURL && !isAbsoluteURL(config.url)) {
|
||
config.url = combineURLs(config.baseURL, config.url);
|
||
}
|
||
|
||
// Ensure headers exist
|
||
config.headers = config.headers || {};
|
||
|
||
// Transform request data
|
||
config.data = transformData(
|
||
config.data,
|
||
config.headers,
|
||
config.transformRequest
|
||
);
|
||
|
||
// Flatten headers
|
||
config.headers = utils.merge(
|
||
config.headers.common || {},
|
||
config.headers[config.method] || {},
|
||
config.headers || {}
|
||
);
|
||
|
||
utils.forEach(
|
||
['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
|
||
function cleanHeaderConfig(method) {
|
||
delete config.headers[method];
|
||
}
|
||
);
|
||
|
||
var adapter = config.adapter || defaults.adapter;
|
||
|
||
return adapter(config).then(function onAdapterResolution(response) {
|
||
throwIfCancellationRequested(config);
|
||
|
||
// Transform response data
|
||
response.data = transformData(
|
||
response.data,
|
||
response.headers,
|
||
config.transformResponse
|
||
);
|
||
|
||
return response;
|
||
}, function onAdapterRejection(reason) {
|
||
if (!isCancel(reason)) {
|
||
throwIfCancellationRequested(config);
|
||
|
||
// Transform response data
|
||
if (reason && reason.response) {
|
||
reason.response.data = transformData(
|
||
reason.response.data,
|
||
reason.response.headers,
|
||
config.transformResponse
|
||
);
|
||
}
|
||
}
|
||
|
||
return Promise.reject(reason);
|
||
});
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/core/enhanceError.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* Update an Error with the specified config, error code, and response.
|
||
*
|
||
* @param {Error} error The error to update.
|
||
* @param {Object} config The config.
|
||
* @param {string} [code] The error code (for example, 'ECONNABORTED').
|
||
* @param {Object} [request] The request.
|
||
* @param {Object} [response] The response.
|
||
* @returns {Error} The error.
|
||
*/
|
||
module.exports = function enhanceError(error, config, code, request, response) {
|
||
error.config = config;
|
||
if (code) {
|
||
error.code = code;
|
||
}
|
||
error.request = request;
|
||
error.response = response;
|
||
return error;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/core/settle.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var createError = __webpack_require__("./node_modules/axios/lib/core/createError.js");
|
||
|
||
/**
|
||
* Resolve or reject a Promise based on response status.
|
||
*
|
||
* @param {Function} resolve A function that resolves the promise.
|
||
* @param {Function} reject A function that rejects the promise.
|
||
* @param {object} response The response.
|
||
*/
|
||
module.exports = function settle(resolve, reject, response) {
|
||
var validateStatus = response.config.validateStatus;
|
||
// Note: status is not exposed by XDomainRequest
|
||
if (!response.status || !validateStatus || validateStatus(response.status)) {
|
||
resolve(response);
|
||
} else {
|
||
reject(createError(
|
||
'Request failed with status code ' + response.status,
|
||
response.config,
|
||
null,
|
||
response.request,
|
||
response
|
||
));
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/core/transformData.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
|
||
/**
|
||
* Transform the data for a request or a response
|
||
*
|
||
* @param {Object|String} data The data to be transformed
|
||
* @param {Array} headers The headers for the request or response
|
||
* @param {Array|Function} fns A single function or Array of functions
|
||
* @returns {*} The resulting transformed data
|
||
*/
|
||
module.exports = function transformData(data, headers, fns) {
|
||
/*eslint no-param-reassign:0*/
|
||
utils.forEach(fns, function transform(fn) {
|
||
data = fn(data, headers);
|
||
});
|
||
|
||
return data;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/defaults.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* WEBPACK VAR INJECTION */(function(process) {
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
var normalizeHeaderName = __webpack_require__("./node_modules/axios/lib/helpers/normalizeHeaderName.js");
|
||
|
||
var DEFAULT_CONTENT_TYPE = {
|
||
'Content-Type': 'application/x-www-form-urlencoded'
|
||
};
|
||
|
||
function setContentTypeIfUnset(headers, value) {
|
||
if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
|
||
headers['Content-Type'] = value;
|
||
}
|
||
}
|
||
|
||
function getDefaultAdapter() {
|
||
var adapter;
|
||
if (typeof XMLHttpRequest !== 'undefined') {
|
||
// For browsers use XHR adapter
|
||
adapter = __webpack_require__("./node_modules/axios/lib/adapters/xhr.js");
|
||
} else if (typeof process !== 'undefined') {
|
||
// For node use HTTP adapter
|
||
adapter = __webpack_require__("./node_modules/axios/lib/adapters/xhr.js");
|
||
}
|
||
return adapter;
|
||
}
|
||
|
||
var defaults = {
|
||
adapter: getDefaultAdapter(),
|
||
|
||
transformRequest: [function transformRequest(data, headers) {
|
||
normalizeHeaderName(headers, 'Content-Type');
|
||
if (utils.isFormData(data) ||
|
||
utils.isArrayBuffer(data) ||
|
||
utils.isBuffer(data) ||
|
||
utils.isStream(data) ||
|
||
utils.isFile(data) ||
|
||
utils.isBlob(data)
|
||
) {
|
||
return data;
|
||
}
|
||
if (utils.isArrayBufferView(data)) {
|
||
return data.buffer;
|
||
}
|
||
if (utils.isURLSearchParams(data)) {
|
||
setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
|
||
return data.toString();
|
||
}
|
||
if (utils.isObject(data)) {
|
||
setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
|
||
return JSON.stringify(data);
|
||
}
|
||
return data;
|
||
}],
|
||
|
||
transformResponse: [function transformResponse(data) {
|
||
/*eslint no-param-reassign:0*/
|
||
if (typeof data === 'string') {
|
||
try {
|
||
data = JSON.parse(data);
|
||
} catch (e) { /* Ignore */ }
|
||
}
|
||
return data;
|
||
}],
|
||
|
||
/**
|
||
* A timeout in milliseconds to abort a request. If set to 0 (default) a
|
||
* timeout is not created.
|
||
*/
|
||
timeout: 0,
|
||
|
||
xsrfCookieName: 'XSRF-TOKEN',
|
||
xsrfHeaderName: 'X-XSRF-TOKEN',
|
||
|
||
maxContentLength: -1,
|
||
|
||
validateStatus: function validateStatus(status) {
|
||
return status >= 200 && status < 300;
|
||
}
|
||
};
|
||
|
||
defaults.headers = {
|
||
common: {
|
||
'Accept': 'application/json, text/plain, */*'
|
||
}
|
||
};
|
||
|
||
utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
|
||
defaults.headers[method] = {};
|
||
});
|
||
|
||
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
|
||
defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
|
||
});
|
||
|
||
module.exports = defaults;
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/process/browser.js")))
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/bind.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
module.exports = function bind(fn, thisArg) {
|
||
return function wrap() {
|
||
var args = new Array(arguments.length);
|
||
for (var i = 0; i < args.length; i++) {
|
||
args[i] = arguments[i];
|
||
}
|
||
return fn.apply(thisArg, args);
|
||
};
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/btoa.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js
|
||
|
||
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
||
|
||
function E() {
|
||
this.message = 'String contains an invalid character';
|
||
}
|
||
E.prototype = new Error;
|
||
E.prototype.code = 5;
|
||
E.prototype.name = 'InvalidCharacterError';
|
||
|
||
function btoa(input) {
|
||
var str = String(input);
|
||
var output = '';
|
||
for (
|
||
// initialize result and counter
|
||
var block, charCode, idx = 0, map = chars;
|
||
// if the next str index does not exist:
|
||
// change the mapping table to "="
|
||
// check if d has no fractional digits
|
||
str.charAt(idx | 0) || (map = '=', idx % 1);
|
||
// "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
|
||
output += map.charAt(63 & block >> 8 - idx % 1 * 8)
|
||
) {
|
||
charCode = str.charCodeAt(idx += 3 / 4);
|
||
if (charCode > 0xFF) {
|
||
throw new E();
|
||
}
|
||
block = block << 8 | charCode;
|
||
}
|
||
return output;
|
||
}
|
||
|
||
module.exports = btoa;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/buildURL.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
|
||
function encode(val) {
|
||
return encodeURIComponent(val).
|
||
replace(/%40/gi, '@').
|
||
replace(/%3A/gi, ':').
|
||
replace(/%24/g, '$').
|
||
replace(/%2C/gi, ',').
|
||
replace(/%20/g, '+').
|
||
replace(/%5B/gi, '[').
|
||
replace(/%5D/gi, ']');
|
||
}
|
||
|
||
/**
|
||
* Build a URL by appending params to the end
|
||
*
|
||
* @param {string} url The base of the url (e.g., http://www.google.com)
|
||
* @param {object} [params] The params to be appended
|
||
* @returns {string} The formatted url
|
||
*/
|
||
module.exports = function buildURL(url, params, paramsSerializer) {
|
||
/*eslint no-param-reassign:0*/
|
||
if (!params) {
|
||
return url;
|
||
}
|
||
|
||
var serializedParams;
|
||
if (paramsSerializer) {
|
||
serializedParams = paramsSerializer(params);
|
||
} else if (utils.isURLSearchParams(params)) {
|
||
serializedParams = params.toString();
|
||
} else {
|
||
var parts = [];
|
||
|
||
utils.forEach(params, function serialize(val, key) {
|
||
if (val === null || typeof val === 'undefined') {
|
||
return;
|
||
}
|
||
|
||
if (utils.isArray(val)) {
|
||
key = key + '[]';
|
||
} else {
|
||
val = [val];
|
||
}
|
||
|
||
utils.forEach(val, function parseValue(v) {
|
||
if (utils.isDate(v)) {
|
||
v = v.toISOString();
|
||
} else if (utils.isObject(v)) {
|
||
v = JSON.stringify(v);
|
||
}
|
||
parts.push(encode(key) + '=' + encode(v));
|
||
});
|
||
});
|
||
|
||
serializedParams = parts.join('&');
|
||
}
|
||
|
||
if (serializedParams) {
|
||
url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
|
||
}
|
||
|
||
return url;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* Creates a new URL by combining the specified URLs
|
||
*
|
||
* @param {string} baseURL The base URL
|
||
* @param {string} relativeURL The relative URL
|
||
* @returns {string} The combined URL
|
||
*/
|
||
module.exports = function combineURLs(baseURL, relativeURL) {
|
||
return relativeURL
|
||
? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
|
||
: baseURL;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/cookies.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
|
||
module.exports = (
|
||
utils.isStandardBrowserEnv() ?
|
||
|
||
// Standard browser envs support document.cookie
|
||
(function standardBrowserEnv() {
|
||
return {
|
||
write: function write(name, value, expires, path, domain, secure) {
|
||
var cookie = [];
|
||
cookie.push(name + '=' + encodeURIComponent(value));
|
||
|
||
if (utils.isNumber(expires)) {
|
||
cookie.push('expires=' + new Date(expires).toGMTString());
|
||
}
|
||
|
||
if (utils.isString(path)) {
|
||
cookie.push('path=' + path);
|
||
}
|
||
|
||
if (utils.isString(domain)) {
|
||
cookie.push('domain=' + domain);
|
||
}
|
||
|
||
if (secure === true) {
|
||
cookie.push('secure');
|
||
}
|
||
|
||
document.cookie = cookie.join('; ');
|
||
},
|
||
|
||
read: function read(name) {
|
||
var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
|
||
return (match ? decodeURIComponent(match[3]) : null);
|
||
},
|
||
|
||
remove: function remove(name) {
|
||
this.write(name, '', Date.now() - 86400000);
|
||
}
|
||
};
|
||
})() :
|
||
|
||
// Non standard browser env (web workers, react-native) lack needed support.
|
||
(function nonStandardBrowserEnv() {
|
||
return {
|
||
write: function write() {},
|
||
read: function read() { return null; },
|
||
remove: function remove() {}
|
||
};
|
||
})()
|
||
);
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* Determines whether the specified URL is absolute
|
||
*
|
||
* @param {string} url The URL to test
|
||
* @returns {boolean} True if the specified URL is absolute, otherwise false
|
||
*/
|
||
module.exports = function isAbsoluteURL(url) {
|
||
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
|
||
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
|
||
// by any combination of letters, digits, plus, period, or hyphen.
|
||
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
|
||
module.exports = (
|
||
utils.isStandardBrowserEnv() ?
|
||
|
||
// Standard browser envs have full support of the APIs needed to test
|
||
// whether the request URL is of the same origin as current location.
|
||
(function standardBrowserEnv() {
|
||
var msie = /(msie|trident)/i.test(navigator.userAgent);
|
||
var urlParsingNode = document.createElement('a');
|
||
var originURL;
|
||
|
||
/**
|
||
* Parse a URL to discover it's components
|
||
*
|
||
* @param {String} url The URL to be parsed
|
||
* @returns {Object}
|
||
*/
|
||
function resolveURL(url) {
|
||
var href = url;
|
||
|
||
if (msie) {
|
||
// IE needs attribute set twice to normalize properties
|
||
urlParsingNode.setAttribute('href', href);
|
||
href = urlParsingNode.href;
|
||
}
|
||
|
||
urlParsingNode.setAttribute('href', href);
|
||
|
||
// urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
|
||
return {
|
||
href: urlParsingNode.href,
|
||
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
|
||
host: urlParsingNode.host,
|
||
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
|
||
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
|
||
hostname: urlParsingNode.hostname,
|
||
port: urlParsingNode.port,
|
||
pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
|
||
urlParsingNode.pathname :
|
||
'/' + urlParsingNode.pathname
|
||
};
|
||
}
|
||
|
||
originURL = resolveURL(window.location.href);
|
||
|
||
/**
|
||
* Determine if a URL shares the same origin as the current location
|
||
*
|
||
* @param {String} requestURL The URL to test
|
||
* @returns {boolean} True if URL shares the same origin, otherwise false
|
||
*/
|
||
return function isURLSameOrigin(requestURL) {
|
||
var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
|
||
return (parsed.protocol === originURL.protocol &&
|
||
parsed.host === originURL.host);
|
||
};
|
||
})() :
|
||
|
||
// Non standard browser envs (web workers, react-native) lack needed support.
|
||
(function nonStandardBrowserEnv() {
|
||
return function isURLSameOrigin() {
|
||
return true;
|
||
};
|
||
})()
|
||
);
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
|
||
module.exports = function normalizeHeaderName(headers, normalizedName) {
|
||
utils.forEach(headers, function processHeader(value, name) {
|
||
if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
|
||
headers[normalizedName] = value;
|
||
delete headers[name];
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/axios/lib/utils.js");
|
||
|
||
// Headers whose duplicates are ignored by node
|
||
// c.f. https://nodejs.org/api/http.html#http_message_headers
|
||
var ignoreDuplicateOf = [
|
||
'age', 'authorization', 'content-length', 'content-type', 'etag',
|
||
'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
|
||
'last-modified', 'location', 'max-forwards', 'proxy-authorization',
|
||
'referer', 'retry-after', 'user-agent'
|
||
];
|
||
|
||
/**
|
||
* Parse headers into an object
|
||
*
|
||
* ```
|
||
* Date: Wed, 27 Aug 2014 08:58:49 GMT
|
||
* Content-Type: application/json
|
||
* Connection: keep-alive
|
||
* Transfer-Encoding: chunked
|
||
* ```
|
||
*
|
||
* @param {String} headers Headers needing to be parsed
|
||
* @returns {Object} Headers parsed into an object
|
||
*/
|
||
module.exports = function parseHeaders(headers) {
|
||
var parsed = {};
|
||
var key;
|
||
var val;
|
||
var i;
|
||
|
||
if (!headers) { return parsed; }
|
||
|
||
utils.forEach(headers.split('\n'), function parser(line) {
|
||
i = line.indexOf(':');
|
||
key = utils.trim(line.substr(0, i)).toLowerCase();
|
||
val = utils.trim(line.substr(i + 1));
|
||
|
||
if (key) {
|
||
if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
|
||
return;
|
||
}
|
||
if (key === 'set-cookie') {
|
||
parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
|
||
} else {
|
||
parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
|
||
}
|
||
}
|
||
});
|
||
|
||
return parsed;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/helpers/spread.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* Syntactic sugar for invoking a function and expanding an array for arguments.
|
||
*
|
||
* Common use case would be to use `Function.prototype.apply`.
|
||
*
|
||
* ```js
|
||
* function f(x, y, z) {}
|
||
* var args = [1, 2, 3];
|
||
* f.apply(null, args);
|
||
* ```
|
||
*
|
||
* With `spread` this example can be re-written.
|
||
*
|
||
* ```js
|
||
* spread(function(x, y, z) {})([1, 2, 3]);
|
||
* ```
|
||
*
|
||
* @param {Function} callback
|
||
* @returns {Function}
|
||
*/
|
||
module.exports = function spread(callback) {
|
||
return function wrap(arr) {
|
||
return callback.apply(null, arr);
|
||
};
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/axios/lib/utils.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var bind = __webpack_require__("./node_modules/axios/lib/helpers/bind.js");
|
||
var isBuffer = __webpack_require__("./node_modules/is-buffer/index.js");
|
||
|
||
/*global toString:true*/
|
||
|
||
// utils is a library of generic helper functions non-specific to axios
|
||
|
||
var toString = Object.prototype.toString;
|
||
|
||
/**
|
||
* Determine if a value is an Array
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is an Array, otherwise false
|
||
*/
|
||
function isArray(val) {
|
||
return toString.call(val) === '[object Array]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is an ArrayBuffer
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is an ArrayBuffer, otherwise false
|
||
*/
|
||
function isArrayBuffer(val) {
|
||
return toString.call(val) === '[object ArrayBuffer]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a FormData
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is an FormData, otherwise false
|
||
*/
|
||
function isFormData(val) {
|
||
return (typeof FormData !== 'undefined') && (val instanceof FormData);
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a view on an ArrayBuffer
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
|
||
*/
|
||
function isArrayBufferView(val) {
|
||
var result;
|
||
if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
|
||
result = ArrayBuffer.isView(val);
|
||
} else {
|
||
result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a String
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a String, otherwise false
|
||
*/
|
||
function isString(val) {
|
||
return typeof val === 'string';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Number
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Number, otherwise false
|
||
*/
|
||
function isNumber(val) {
|
||
return typeof val === 'number';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is undefined
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if the value is undefined, otherwise false
|
||
*/
|
||
function isUndefined(val) {
|
||
return typeof val === 'undefined';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is an Object
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is an Object, otherwise false
|
||
*/
|
||
function isObject(val) {
|
||
return val !== null && typeof val === 'object';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Date
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Date, otherwise false
|
||
*/
|
||
function isDate(val) {
|
||
return toString.call(val) === '[object Date]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a File
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a File, otherwise false
|
||
*/
|
||
function isFile(val) {
|
||
return toString.call(val) === '[object File]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Blob
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Blob, otherwise false
|
||
*/
|
||
function isBlob(val) {
|
||
return toString.call(val) === '[object Blob]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Function
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Function, otherwise false
|
||
*/
|
||
function isFunction(val) {
|
||
return toString.call(val) === '[object Function]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Stream
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Stream, otherwise false
|
||
*/
|
||
function isStream(val) {
|
||
return isObject(val) && isFunction(val.pipe);
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a URLSearchParams object
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a URLSearchParams object, otherwise false
|
||
*/
|
||
function isURLSearchParams(val) {
|
||
return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
|
||
}
|
||
|
||
/**
|
||
* Trim excess whitespace off the beginning and end of a string
|
||
*
|
||
* @param {String} str The String to trim
|
||
* @returns {String} The String freed of excess whitespace
|
||
*/
|
||
function trim(str) {
|
||
return str.replace(/^\s*/, '').replace(/\s*$/, '');
|
||
}
|
||
|
||
/**
|
||
* Determine if we're running in a standard browser environment
|
||
*
|
||
* This allows axios to run in a web worker, and react-native.
|
||
* Both environments support XMLHttpRequest, but not fully standard globals.
|
||
*
|
||
* web workers:
|
||
* typeof window -> undefined
|
||
* typeof document -> undefined
|
||
*
|
||
* react-native:
|
||
* navigator.product -> 'ReactNative'
|
||
*/
|
||
function isStandardBrowserEnv() {
|
||
if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
|
||
return false;
|
||
}
|
||
return (
|
||
typeof window !== 'undefined' &&
|
||
typeof document !== 'undefined'
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Iterate over an Array or an Object invoking a function for each item.
|
||
*
|
||
* If `obj` is an Array callback will be called passing
|
||
* the value, index, and complete array for each item.
|
||
*
|
||
* If 'obj' is an Object callback will be called passing
|
||
* the value, key, and complete object for each property.
|
||
*
|
||
* @param {Object|Array} obj The object to iterate
|
||
* @param {Function} fn The callback to invoke for each item
|
||
*/
|
||
function forEach(obj, fn) {
|
||
// Don't bother if no value provided
|
||
if (obj === null || typeof obj === 'undefined') {
|
||
return;
|
||
}
|
||
|
||
// Force an array if not already something iterable
|
||
if (typeof obj !== 'object') {
|
||
/*eslint no-param-reassign:0*/
|
||
obj = [obj];
|
||
}
|
||
|
||
if (isArray(obj)) {
|
||
// Iterate over array values
|
||
for (var i = 0, l = obj.length; i < l; i++) {
|
||
fn.call(null, obj[i], i, obj);
|
||
}
|
||
} else {
|
||
// Iterate over object keys
|
||
for (var key in obj) {
|
||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||
fn.call(null, obj[key], key, obj);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Accepts varargs expecting each argument to be an object, then
|
||
* immutably merges the properties of each object and returns result.
|
||
*
|
||
* When multiple objects contain the same key the later object in
|
||
* the arguments list will take precedence.
|
||
*
|
||
* Example:
|
||
*
|
||
* ```js
|
||
* var result = merge({foo: 123}, {foo: 456});
|
||
* console.log(result.foo); // outputs 456
|
||
* ```
|
||
*
|
||
* @param {Object} obj1 Object to merge
|
||
* @returns {Object} Result of all merge properties
|
||
*/
|
||
function merge(/* obj1, obj2, obj3, ... */) {
|
||
var result = {};
|
||
function assignValue(val, key) {
|
||
if (typeof result[key] === 'object' && typeof val === 'object') {
|
||
result[key] = merge(result[key], val);
|
||
} else {
|
||
result[key] = val;
|
||
}
|
||
}
|
||
|
||
for (var i = 0, l = arguments.length; i < l; i++) {
|
||
forEach(arguments[i], assignValue);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Extends object a by mutably adding to it the properties of object b.
|
||
*
|
||
* @param {Object} a The object to be extended
|
||
* @param {Object} b The object to copy properties from
|
||
* @param {Object} thisArg The object to bind function to
|
||
* @return {Object} The resulting value of object a
|
||
*/
|
||
function extend(a, b, thisArg) {
|
||
forEach(b, function assignValue(val, key) {
|
||
if (thisArg && typeof val === 'function') {
|
||
a[key] = bind(val, thisArg);
|
||
} else {
|
||
a[key] = val;
|
||
}
|
||
});
|
||
return a;
|
||
}
|
||
|
||
module.exports = {
|
||
isArray: isArray,
|
||
isArrayBuffer: isArrayBuffer,
|
||
isBuffer: isBuffer,
|
||
isFormData: isFormData,
|
||
isArrayBufferView: isArrayBufferView,
|
||
isString: isString,
|
||
isNumber: isNumber,
|
||
isObject: isObject,
|
||
isUndefined: isUndefined,
|
||
isDate: isDate,
|
||
isFile: isFile,
|
||
isBlob: isBlob,
|
||
isFunction: isFunction,
|
||
isStream: isStream,
|
||
isURLSearchParams: isURLSearchParams,
|
||
isStandardBrowserEnv: isStandardBrowserEnv,
|
||
forEach: forEach,
|
||
merge: merge,
|
||
extend: extend,
|
||
trim: trim
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/Vuetable.vue":
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof__ = __webpack_require__("./node_modules/babel-runtime/helpers/typeof.js");
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof__);
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_axios__ = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/index.js");
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_axios___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_axios__);
|
||
|
||
|
||
|
||
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
props: {
|
||
fields: {
|
||
type: Array,
|
||
required: true
|
||
},
|
||
loadOnStart: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
apiUrl: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
httpMethod: {
|
||
type: String,
|
||
default: 'get',
|
||
validator: function validator(value) {
|
||
return ['get', 'post'].indexOf(value) > -1;
|
||
}
|
||
},
|
||
reactiveApiUrl: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
apiMode: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
data: {
|
||
type: [Array, Object],
|
||
default: null
|
||
},
|
||
dataTotal: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
dataManager: {
|
||
type: Function,
|
||
default: null
|
||
},
|
||
dataPath: {
|
||
type: String,
|
||
default: 'data'
|
||
},
|
||
paginationPath: {
|
||
type: [String],
|
||
default: 'links.pagination'
|
||
},
|
||
queryParams: {
|
||
type: [Object, Function],
|
||
default: function _default() {
|
||
return {
|
||
sort: 'sort',
|
||
page: 'page',
|
||
perPage: 'per_page'
|
||
};
|
||
}
|
||
},
|
||
appendParams: {
|
||
type: Object,
|
||
default: function _default() {
|
||
return {};
|
||
}
|
||
},
|
||
httpOptions: {
|
||
type: Object,
|
||
default: function _default() {
|
||
return {};
|
||
}
|
||
},
|
||
httpFetch: {
|
||
type: Function,
|
||
default: null
|
||
},
|
||
perPage: {
|
||
type: Number,
|
||
default: 10
|
||
},
|
||
initialPage: {
|
||
type: Number,
|
||
default: 1
|
||
},
|
||
sortOrder: {
|
||
type: Array,
|
||
default: function _default() {
|
||
return [];
|
||
}
|
||
},
|
||
multiSort: {
|
||
type: Boolean,
|
||
default: function _default() {
|
||
return false;
|
||
}
|
||
},
|
||
tableHeight: {
|
||
type: String,
|
||
default: null
|
||
},
|
||
|
||
multiSortKey: {
|
||
type: String,
|
||
default: 'alt'
|
||
},
|
||
|
||
rowClassCallback: {
|
||
type: [String, Function],
|
||
default: ''
|
||
},
|
||
rowClass: {
|
||
type: [String, Function],
|
||
default: ''
|
||
},
|
||
detailRowComponent: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
detailRowTransition: {
|
||
type: String,
|
||
default: ''
|
||
},
|
||
trackBy: {
|
||
type: String,
|
||
default: 'id'
|
||
},
|
||
css: {
|
||
type: Object,
|
||
default: function _default() {
|
||
return {
|
||
tableClass: 'ui blue selectable celled stackable attached table',
|
||
loadingClass: 'loading',
|
||
ascendingIcon: 'blue chevron up icon',
|
||
descendingIcon: 'blue chevron down icon',
|
||
ascendingClass: 'sorted-asc',
|
||
descendingClass: 'sorted-desc',
|
||
sortableIcon: '',
|
||
detailRowClass: 'vuetable-detail-row',
|
||
handleIcon: 'grey sidebar icon',
|
||
tableBodyClass: 'vuetable-semantic-no-top vuetable-fixed-layout',
|
||
tableHeaderClass: 'vuetable-fixed-layout'
|
||
};
|
||
}
|
||
},
|
||
minRows: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
silent: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
noDataTemplate: {
|
||
type: String,
|
||
default: function _default() {
|
||
return 'No Data Available';
|
||
}
|
||
},
|
||
showSortIcons: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
},
|
||
data: function data() {
|
||
return {
|
||
eventPrefix: 'vuetable:',
|
||
tableFields: [],
|
||
tableData: null,
|
||
tablePagination: null,
|
||
currentPage: this.initialPage,
|
||
selectedTo: [],
|
||
visibleDetailRows: [],
|
||
lastScrollPosition: 0,
|
||
scrollBarWidth: '17px',
|
||
scrollVisible: false
|
||
};
|
||
},
|
||
mounted: function mounted() {
|
||
this.normalizeFields();
|
||
this.normalizeSortOrder();
|
||
if (this.isFixedHeader) {
|
||
this.scrollBarWidth = this.getScrollBarWidth() + 'px';
|
||
}
|
||
this.$nextTick(function () {
|
||
this.fireEvent('initialized', this.tableFields);
|
||
});
|
||
|
||
if (this.loadOnStart) {
|
||
this.loadData();
|
||
}
|
||
if (this.isFixedHeader) {
|
||
var elem = this.$el.getElementsByClassName('vuetable-body-wrapper')[0];
|
||
if (elem != null) {
|
||
elem.addEventListener('scroll', this.handleScroll);
|
||
}
|
||
}
|
||
},
|
||
destroyed: function destroyed() {
|
||
var elem = this.$el.getElementsByClassName('vuetable-body-wrapper')[0];
|
||
if (elem != null) {
|
||
elem.removeEventListener('scroll', this.handleScroll);
|
||
}
|
||
},
|
||
|
||
computed: {
|
||
version: function version() {
|
||
return VERSION;
|
||
},
|
||
useDetailRow: function useDetailRow() {
|
||
if (this.tableData && this.tableData[0] && this.detailRowComponent !== '' && typeof this.tableData[0][this.trackBy] === 'undefined') {
|
||
this.warn('You need to define unique row identifier in order for detail-row feature to work. Use `track-by` prop to define one!');
|
||
return false;
|
||
}
|
||
|
||
return this.detailRowComponent !== '';
|
||
},
|
||
countVisibleFields: function countVisibleFields() {
|
||
return this.tableFields.filter(function (field) {
|
||
return field.visible;
|
||
}).length;
|
||
},
|
||
countTableData: function countTableData() {
|
||
if (this.tableData === null) {
|
||
return 0;
|
||
}
|
||
return this.tableData.length;
|
||
},
|
||
displayEmptyDataRow: function displayEmptyDataRow() {
|
||
return this.countTableData === 0 && this.noDataTemplate.length > 0;
|
||
},
|
||
lessThanMinRows: function lessThanMinRows() {
|
||
if (this.tableData === null || this.tableData.length === 0) {
|
||
return true;
|
||
}
|
||
return this.tableData.length < this.minRows;
|
||
},
|
||
blankRows: function blankRows() {
|
||
if (this.tableData === null || this.tableData.length === 0) {
|
||
return this.minRows;
|
||
}
|
||
if (this.tableData.length >= this.minRows) {
|
||
return 0;
|
||
}
|
||
|
||
return this.minRows - this.tableData.length;
|
||
},
|
||
isApiMode: function isApiMode() {
|
||
return this.apiMode;
|
||
},
|
||
isDataMode: function isDataMode() {
|
||
return !this.apiMode;
|
||
},
|
||
isFixedHeader: function isFixedHeader() {
|
||
return this.tableHeight != null;
|
||
}
|
||
},
|
||
methods: {
|
||
getScrollBarWidth: function getScrollBarWidth() {
|
||
var outer = document.createElement('div');
|
||
var inner = document.createElement('div');
|
||
|
||
outer.style.visibility = 'hidden';
|
||
outer.style.width = '100px';
|
||
|
||
inner.style.width = '100%';
|
||
|
||
outer.appendChild(inner);
|
||
document.body.appendChild(outer);
|
||
|
||
var widthWithoutScrollbar = outer.offsetWidth;
|
||
|
||
outer.style.overflow = 'scroll';
|
||
|
||
var widthWithScrollbar = inner.offsetWidth;
|
||
|
||
document.body.removeChild(outer);
|
||
|
||
return widthWithoutScrollbar - widthWithScrollbar;
|
||
},
|
||
handleScroll: function handleScroll(e) {
|
||
var horizontal = e.currentTarget.scrollLeft;
|
||
if (horizontal != this.lastScrollPosition) {
|
||
var header = this.$el.getElementsByClassName('vuetable-head-wrapper')[0];
|
||
if (header != null) {
|
||
header.scrollLeft = horizontal;
|
||
}
|
||
this.lastScrollPosition = horizontal;
|
||
}
|
||
},
|
||
normalizeFields: function normalizeFields() {
|
||
if (typeof this.fields === 'undefined') {
|
||
this.warn('You need to provide "fields" prop.');
|
||
return;
|
||
}
|
||
|
||
this.tableFields = [];
|
||
var self = this;
|
||
var obj = void 0;
|
||
this.fields.forEach(function (field, i) {
|
||
if (typeof field === 'string') {
|
||
obj = {
|
||
name: field,
|
||
title: self.setTitle(field),
|
||
titleClass: '',
|
||
dataClass: '',
|
||
callback: null,
|
||
visible: true
|
||
};
|
||
} else {
|
||
obj = {
|
||
name: field.name,
|
||
width: field.width,
|
||
title: field.title === undefined ? self.setTitle(field.name) : field.title,
|
||
sortField: field.sortField,
|
||
titleClass: field.titleClass === undefined ? '' : field.titleClass,
|
||
dataClass: field.dataClass === undefined ? '' : field.dataClass,
|
||
callback: field.callback === undefined ? '' : field.callback,
|
||
visible: field.visible === undefined ? true : field.visible
|
||
};
|
||
}
|
||
self.tableFields.push(obj);
|
||
});
|
||
},
|
||
setData: function setData(data) {
|
||
if (data === null || typeof data === 'undefined') return;
|
||
|
||
this.fireEvent('loading');
|
||
|
||
if (Array.isArray(data)) {
|
||
this.tableData = data;
|
||
this.fireEvent('loaded');
|
||
return;
|
||
}
|
||
|
||
this.tableData = this.getObjectValue(data, this.dataPath, null);
|
||
this.tablePagination = this.getObjectValue(data, this.paginationPath, null);
|
||
|
||
this.$nextTick(function () {
|
||
this.fixHeader();
|
||
this.fireEvent('pagination-data', this.tablePagination);
|
||
this.fireEvent('loaded');
|
||
});
|
||
},
|
||
setTitle: function setTitle(str) {
|
||
if (this.isSpecialField(str)) {
|
||
return '';
|
||
}
|
||
|
||
return this.titleCase(str);
|
||
},
|
||
getTitle: function getTitle(field) {
|
||
if (typeof field.title === 'function') return field.title();
|
||
|
||
return typeof field.title === 'undefined' ? field.name.replace('.', ' ') : field.title;
|
||
},
|
||
renderTitle: function renderTitle(field) {
|
||
var title = this.getTitle(field);
|
||
|
||
if (title.length > 0 && this.isInCurrentSortGroup(field) || this.hasSortableIcon(field)) {
|
||
var style = 'opacity:' + this.sortIconOpacity(field) + ';position:relative;float:right';
|
||
var iconTag = this.showSortIcons ? this.renderIconTag(['sort-icon', this.sortIcon(field)], 'style="' + style + '"') : '';
|
||
return title + ' ' + iconTag;
|
||
}
|
||
|
||
return title;
|
||
},
|
||
renderSequence: function renderSequence(index) {
|
||
return this.tablePagination ? this.tablePagination.from + index : index;
|
||
},
|
||
renderNormalField: function renderNormalField(field, item) {
|
||
return this.hasCallback(field) ? this.callCallback(field, item) : this.getObjectValue(item, field.name, '');
|
||
},
|
||
isSpecialField: function isSpecialField(fieldName) {
|
||
return fieldName.slice(0, 2) === '__';
|
||
},
|
||
titleCase: function titleCase(str) {
|
||
return str.replace(/\w+/g, function (txt) {
|
||
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
|
||
});
|
||
},
|
||
camelCase: function camelCase(str) {
|
||
var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '_';
|
||
|
||
var self = this;
|
||
return str.split(delimiter).map(function (item) {
|
||
return self.titleCase(item);
|
||
}).join('');
|
||
},
|
||
notIn: function notIn(str, arr) {
|
||
return arr.indexOf(str) === -1;
|
||
},
|
||
loadData: function loadData() {
|
||
var success = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.loadSuccess;
|
||
var failed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.loadFailed;
|
||
|
||
if (this.isDataMode) {
|
||
this.callDataManager();
|
||
return;
|
||
}
|
||
|
||
this.fireEvent('loading');
|
||
|
||
this.httpOptions['params'] = this.getAppendParams(this.getAllQueryParams());
|
||
|
||
return this.fetch(this.apiUrl, this.httpOptions).then(success, failed).catch(function () {
|
||
return failed();
|
||
});
|
||
},
|
||
fetch: function fetch(apiUrl, httpOptions) {
|
||
return this.httpFetch ? this.httpFetch(apiUrl, httpOptions) : __WEBPACK_IMPORTED_MODULE_1_axios___default.a[this.httpMethod](apiUrl, httpOptions);
|
||
},
|
||
loadSuccess: function loadSuccess(response) {
|
||
this.fireEvent('load-success', response);
|
||
|
||
var body = this.transform(response.data);
|
||
|
||
this.tableData = this.getObjectValue(body, this.dataPath, null);
|
||
this.tablePagination = this.getObjectValue(body, this.paginationPath, null);
|
||
|
||
if (this.tablePagination === null) {
|
||
this.warn('vuetable: pagination-path "' + this.paginationPath + '" not found. ' + 'It looks like the data returned from the sever does not have pagination information ' + "or you may have set it incorrectly.\n" + 'You can explicitly suppress this warning by setting pagination-path="".');
|
||
}
|
||
|
||
this.$nextTick(function () {
|
||
this.fixHeader();
|
||
this.fireEvent('pagination-data', this.tablePagination);
|
||
this.fireEvent('loaded');
|
||
});
|
||
},
|
||
fixHeader: function fixHeader() {
|
||
if (!this.isFixedHeader) {
|
||
return;
|
||
}
|
||
|
||
var elem = this.$el.getElementsByClassName('vuetable-body-wrapper')[0];
|
||
if (elem != null) {
|
||
if (elem.scrollHeight > elem.clientHeight) {
|
||
this.scrollVisible = true;
|
||
} else {
|
||
this.scrollVisible = false;
|
||
}
|
||
}
|
||
},
|
||
loadFailed: function loadFailed(response) {
|
||
console.error('load-error', response);
|
||
this.fireEvent('load-error', response);
|
||
this.fireEvent('loaded');
|
||
},
|
||
transform: function transform(data) {
|
||
var func = 'transform';
|
||
|
||
if (this.parentFunctionExists(func)) {
|
||
return this.$parent[func].call(this.$parent, data);
|
||
}
|
||
|
||
return data;
|
||
},
|
||
parentFunctionExists: function parentFunctionExists(func) {
|
||
return func !== '' && typeof this.$parent[func] === 'function';
|
||
},
|
||
callParentFunction: function callParentFunction(func, args) {
|
||
var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||
|
||
if (this.parentFunctionExists(func)) {
|
||
return this.$parent[func].call(this.$parent, args);
|
||
}
|
||
|
||
return defaultValue;
|
||
},
|
||
fireEvent: function fireEvent(eventName, args) {
|
||
this.$emit(this.eventPrefix + eventName, args);
|
||
},
|
||
warn: function warn(msg) {
|
||
if (!this.silent) {
|
||
console.warn(msg);
|
||
}
|
||
},
|
||
getAllQueryParams: function getAllQueryParams() {
|
||
var params = {};
|
||
|
||
if (typeof this.queryParams === 'function') {
|
||
params = this.queryParams(this.sortOrder, this.currentPage, this.perPage);
|
||
return (typeof params === 'undefined' ? 'undefined' : __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_typeof___default()(params)) !== 'object' ? {} : params;
|
||
}
|
||
|
||
params[this.queryParams.sort] = this.getSortParam();
|
||
params[this.queryParams.page] = this.currentPage;
|
||
params[this.queryParams.perPage] = this.perPage;
|
||
|
||
return params;
|
||
},
|
||
getSortParam: function getSortParam() {
|
||
if (!this.sortOrder || this.sortOrder.field == '') {
|
||
return '';
|
||
}
|
||
|
||
if (typeof this.$parent['getSortParam'] === 'function') {
|
||
return this.$parent['getSortParam'].call(this.$parent, this.sortOrder);
|
||
}
|
||
|
||
return this.getDefaultSortParam();
|
||
},
|
||
getDefaultSortParam: function getDefaultSortParam() {
|
||
var result = '';
|
||
|
||
for (var i = 0; i < this.sortOrder.length; i++) {
|
||
var fieldName = typeof this.sortOrder[i].sortField === 'undefined' ? this.sortOrder[i].field : this.sortOrder[i].sortField;
|
||
|
||
result += fieldName + '|' + this.sortOrder[i].direction + (i + 1 < this.sortOrder.length ? ',' : '');
|
||
}
|
||
return result;
|
||
},
|
||
getAppendParams: function getAppendParams(params) {
|
||
for (var x in this.appendParams) {
|
||
params[x] = this.appendParams[x];
|
||
}
|
||
|
||
return params;
|
||
},
|
||
extractName: function extractName(string) {
|
||
return string.split(':')[0].trim();
|
||
},
|
||
extractArgs: function extractArgs(string) {
|
||
return string.split(':')[1];
|
||
},
|
||
isSortable: function isSortable(field) {
|
||
return !(typeof field.sortField === 'undefined');
|
||
},
|
||
isInCurrentSortGroup: function isInCurrentSortGroup(field) {
|
||
return this.currentSortOrderPosition(field) !== false;
|
||
},
|
||
hasSortableIcon: function hasSortableIcon(field) {
|
||
return this.isSortable(field) && this.css.sortableIcon != '';
|
||
},
|
||
currentSortOrderPosition: function currentSortOrderPosition(field) {
|
||
if (!this.isSortable(field)) {
|
||
return false;
|
||
}
|
||
|
||
for (var i = 0; i < this.sortOrder.length; i++) {
|
||
if (this.fieldIsInSortOrderPosition(field, i)) {
|
||
return i;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
},
|
||
fieldIsInSortOrderPosition: function fieldIsInSortOrderPosition(field, i) {
|
||
return this.sortOrder[i].field === field.name && this.sortOrder[i].sortField === field.sortField;
|
||
},
|
||
orderBy: function orderBy(field, event) {
|
||
if (!this.isSortable(field)) return;
|
||
|
||
var key = this.multiSortKey.toLowerCase() + 'Key';
|
||
|
||
if (this.multiSort && event[key]) {
|
||
this.multiColumnSort(field);
|
||
} else {
|
||
this.singleColumnSort(field);
|
||
}
|
||
|
||
this.currentPage = 1;
|
||
if (this.apiMode || this.dataManager) {
|
||
this.loadData();
|
||
}
|
||
},
|
||
multiColumnSort: function multiColumnSort(field) {
|
||
var i = this.currentSortOrderPosition(field);
|
||
|
||
if (i === false) {
|
||
this.sortOrder.push({
|
||
field: field.name,
|
||
sortField: field.sortField,
|
||
direction: 'asc'
|
||
});
|
||
} else {
|
||
if (this.sortOrder[i].direction === 'asc') {
|
||
this.sortOrder[i].direction = 'desc';
|
||
} else {
|
||
this.sortOrder.splice(i, 1);
|
||
}
|
||
}
|
||
},
|
||
singleColumnSort: function singleColumnSort(field) {
|
||
if (this.sortOrder.length === 0) {
|
||
this.clearSortOrder();
|
||
}
|
||
|
||
this.sortOrder.splice(1);
|
||
|
||
if (this.fieldIsInSortOrderPosition(field, 0)) {
|
||
this.sortOrder[0].direction = this.sortOrder[0].direction === 'asc' ? 'desc' : 'asc';
|
||
} else {
|
||
this.sortOrder[0].direction = 'asc';
|
||
}
|
||
this.sortOrder[0].field = field.name;
|
||
this.sortOrder[0].sortField = field.sortField;
|
||
},
|
||
clearSortOrder: function clearSortOrder() {
|
||
this.sortOrder.push({
|
||
field: '',
|
||
sortField: '',
|
||
direction: 'asc'
|
||
});
|
||
},
|
||
sortClass: function sortClass(field) {
|
||
var cls = '';
|
||
var i = this.currentSortOrderPosition(field);
|
||
|
||
if (i !== false) {
|
||
cls = this.sortOrder[i].direction == 'asc' ? this.css.ascendingClass : this.css.descendingClass;
|
||
}
|
||
|
||
return cls;
|
||
},
|
||
sortIcon: function sortIcon(field) {
|
||
var cls = this.css.sortableIcon;
|
||
var i = this.currentSortOrderPosition(field);
|
||
|
||
if (i !== false) {
|
||
cls = this.sortOrder[i].direction == 'asc' ? this.css.ascendingIcon : this.css.descendingIcon;
|
||
}
|
||
|
||
return cls;
|
||
},
|
||
sortIconOpacity: function sortIconOpacity(field) {
|
||
var max = 1.0,
|
||
min = 0.3,
|
||
step = 0.3;
|
||
|
||
var count = this.sortOrder.length;
|
||
var current = this.currentSortOrderPosition(field);
|
||
|
||
if (max - count * step < min) {
|
||
step = (max - min) / (count - 1);
|
||
}
|
||
|
||
var opacity = max - current * step;
|
||
|
||
return opacity;
|
||
},
|
||
hasCallback: function hasCallback(item) {
|
||
return item.callback ? true : false;
|
||
},
|
||
callCallback: function callCallback(field, item) {
|
||
if (!this.hasCallback(field)) return;
|
||
|
||
if (typeof field.callback == 'function') {
|
||
return field.callback(this.getObjectValue(item, field.name));
|
||
}
|
||
|
||
var args = field.callback.split('|');
|
||
var func = args.shift();
|
||
|
||
if (typeof this.$parent[func] === 'function') {
|
||
var value = this.getObjectValue(item, field.name);
|
||
|
||
return args.length > 0 ? this.$parent[func].apply(this.$parent, [value].concat(args)) : this.$parent[func].call(this.$parent, value);
|
||
}
|
||
|
||
return null;
|
||
},
|
||
getObjectValue: function getObjectValue(object, path, defaultValue) {
|
||
defaultValue = typeof defaultValue === 'undefined' ? null : defaultValue;
|
||
|
||
var obj = object;
|
||
if (path.trim() != '') {
|
||
var keys = path.split('.');
|
||
keys.forEach(function (key) {
|
||
if (obj !== null && typeof obj[key] !== 'undefined' && obj[key] !== null) {
|
||
obj = obj[key];
|
||
} else {
|
||
obj = defaultValue;
|
||
return;
|
||
}
|
||
});
|
||
}
|
||
return obj;
|
||
},
|
||
toggleCheckbox: function toggleCheckbox(dataItem, fieldName, event) {
|
||
var isChecked = event.target.checked;
|
||
var idColumn = this.trackBy;
|
||
|
||
if (dataItem[idColumn] === undefined) {
|
||
this.warn('__checkbox field: The "' + this.trackBy + '" field does not exist! Make sure the field you specify in "track-by" prop does exist.');
|
||
return;
|
||
}
|
||
|
||
var key = dataItem[idColumn];
|
||
if (isChecked) {
|
||
this.selectId(key);
|
||
} else {
|
||
this.unselectId(key);
|
||
}
|
||
this.$emit('vuetable:checkbox-toggled', isChecked, dataItem);
|
||
},
|
||
selectId: function selectId(key) {
|
||
if (!this.isSelectedRow(key)) {
|
||
this.selectedTo.push(key);
|
||
}
|
||
},
|
||
unselectId: function unselectId(key) {
|
||
this.selectedTo = this.selectedTo.filter(function (item) {
|
||
return item !== key;
|
||
});
|
||
},
|
||
isSelectedRow: function isSelectedRow(key) {
|
||
return this.selectedTo.indexOf(key) >= 0;
|
||
},
|
||
rowSelected: function rowSelected(dataItem, fieldName) {
|
||
var idColumn = this.trackBy;
|
||
var key = dataItem[idColumn];
|
||
|
||
return this.isSelectedRow(key);
|
||
},
|
||
checkCheckboxesState: function checkCheckboxesState(fieldName) {
|
||
if (!this.tableData) return;
|
||
|
||
var self = this;
|
||
var idColumn = this.trackBy;
|
||
var selector = 'th.vuetable-th-checkbox-' + idColumn + ' input[type=checkbox]';
|
||
var els = document.querySelectorAll(selector);
|
||
|
||
if (els.forEach === undefined) els.forEach = function (cb) {
|
||
[].forEach.call(els, cb);
|
||
};
|
||
|
||
var selected = this.tableData.filter(function (item) {
|
||
return self.selectedTo.indexOf(item[idColumn]) >= 0;
|
||
});
|
||
|
||
if (selected.length <= 0) {
|
||
els.forEach(function (el) {
|
||
el.indeterminate = false;
|
||
});
|
||
return false;
|
||
} else if (selected.length < this.perPage) {
|
||
els.forEach(function (el) {
|
||
el.indeterminate = true;
|
||
});
|
||
return true;
|
||
} else {
|
||
els.forEach(function (el) {
|
||
el.indeterminate = false;
|
||
});
|
||
return true;
|
||
}
|
||
},
|
||
toggleAllCheckboxes: function toggleAllCheckboxes(fieldName, event) {
|
||
var self = this;
|
||
var isChecked = event.target.checked;
|
||
var idColumn = this.trackBy;
|
||
|
||
if (isChecked) {
|
||
this.tableData.forEach(function (dataItem) {
|
||
self.selectId(dataItem[idColumn]);
|
||
});
|
||
} else {
|
||
this.tableData.forEach(function (dataItem) {
|
||
self.unselectId(dataItem[idColumn]);
|
||
});
|
||
}
|
||
this.$emit('vuetable:checkbox-toggled-all', isChecked);
|
||
},
|
||
gotoPreviousPage: function gotoPreviousPage() {
|
||
if (this.currentPage > 1) {
|
||
this.currentPage--;
|
||
this.loadData();
|
||
}
|
||
},
|
||
gotoNextPage: function gotoNextPage() {
|
||
if (this.currentPage < this.tablePagination.last_page) {
|
||
this.currentPage++;
|
||
this.loadData();
|
||
}
|
||
},
|
||
gotoPage: function gotoPage(page) {
|
||
if (page != this.currentPage && page > 0 && page <= this.tablePagination.last_page) {
|
||
this.currentPage = page;
|
||
this.loadData();
|
||
}
|
||
},
|
||
isVisibleDetailRow: function isVisibleDetailRow(rowId) {
|
||
return this.visibleDetailRows.indexOf(rowId) >= 0;
|
||
},
|
||
showDetailRow: function showDetailRow(rowId) {
|
||
if (!this.isVisibleDetailRow(rowId)) {
|
||
this.visibleDetailRows.push(rowId);
|
||
}
|
||
},
|
||
hideDetailRow: function hideDetailRow(rowId) {
|
||
if (this.isVisibleDetailRow(rowId)) {
|
||
this.visibleDetailRows.splice(this.visibleDetailRows.indexOf(rowId), 1);
|
||
}
|
||
},
|
||
toggleDetailRow: function toggleDetailRow(rowId) {
|
||
if (this.isVisibleDetailRow(rowId)) {
|
||
this.hideDetailRow(rowId);
|
||
} else {
|
||
this.showDetailRow(rowId);
|
||
}
|
||
},
|
||
showField: function showField(index) {
|
||
if (index < 0 || index > this.tableFields.length) return;
|
||
|
||
this.tableFields[index].visible = true;
|
||
},
|
||
hideField: function hideField(index) {
|
||
if (index < 0 || index > this.tableFields.length) return;
|
||
|
||
this.tableFields[index].visible = false;
|
||
},
|
||
toggleField: function toggleField(index) {
|
||
if (index < 0 || index > this.tableFields.length) return;
|
||
|
||
this.tableFields[index].visible = !this.tableFields[index].visible;
|
||
},
|
||
renderIconTag: function renderIconTag(classes) {
|
||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
||
|
||
return typeof this.css.renderIcon === 'undefined' ? '<i class="' + classes.join(' ') + '" ' + options + '></i>' : this.css.renderIcon(classes, options);
|
||
},
|
||
makePagination: function makePagination() {
|
||
var total = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
||
var perPage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
||
var currentPage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||
|
||
var pagination = {};
|
||
total = total === null ? this.dataTotal : total;
|
||
perPage = perPage === null ? this.perPage : perPage;
|
||
currentPage = currentPage === null ? this.currentPage : currentPage;
|
||
|
||
return {
|
||
'total': total,
|
||
'per_page': perPage,
|
||
'current_page': currentPage,
|
||
'last_page': Math.ceil(total / perPage) || 0,
|
||
'next_page_url': '',
|
||
'prev_page_url': '',
|
||
'from': (currentPage - 1) * perPage + 1,
|
||
'to': Math.min(currentPage * perPage, total)
|
||
};
|
||
},
|
||
normalizeSortOrder: function normalizeSortOrder() {
|
||
this.sortOrder.forEach(function (item) {
|
||
item.sortField = item.sortField || item.field;
|
||
});
|
||
},
|
||
callDataManager: function callDataManager() {
|
||
if (this.dataManager === null && this.data === null) return;
|
||
|
||
if (Array.isArray(this.data)) {
|
||
return this.setData(this.data);
|
||
}
|
||
|
||
this.normalizeSortOrder();
|
||
|
||
return this.setData(this.dataManager ? this.dataManager(this.sortOrder, this.makePagination()) : this.data);
|
||
},
|
||
onRowClass: function onRowClass(dataItem, index) {
|
||
if (this.rowClassCallback !== '') {
|
||
this.warn('"row-class-callback" prop is deprecated, please use "row-class" prop instead.');
|
||
return;
|
||
}
|
||
|
||
if (typeof this.rowClass === 'function') {
|
||
return this.rowClass(dataItem, index);
|
||
}
|
||
|
||
return this.rowClass;
|
||
},
|
||
onRowChanged: function onRowChanged(dataItem) {
|
||
this.fireEvent('row-changed', dataItem);
|
||
return true;
|
||
},
|
||
onRowClicked: function onRowClicked(dataItem, event) {
|
||
this.$emit(this.eventPrefix + 'row-clicked', dataItem, event);
|
||
return true;
|
||
},
|
||
onRowDoubleClicked: function onRowDoubleClicked(dataItem, event) {
|
||
this.$emit(this.eventPrefix + 'row-dblclicked', dataItem, event);
|
||
},
|
||
onDetailRowClick: function onDetailRowClick(dataItem, event) {
|
||
this.$emit(this.eventPrefix + 'detail-row-clicked', dataItem, event);
|
||
},
|
||
onCellClicked: function onCellClicked(dataItem, field, event) {
|
||
this.$emit(this.eventPrefix + 'cell-clicked', dataItem, field, event);
|
||
},
|
||
onCellDoubleClicked: function onCellDoubleClicked(dataItem, field, event) {
|
||
this.$emit(this.eventPrefix + 'cell-dblclicked', dataItem, field, event);
|
||
},
|
||
onCellRightClicked: function onCellRightClicked(dataItem, field, event) {
|
||
this.$emit(this.eventPrefix + 'cell-rightclicked', dataItem, field, event);
|
||
},
|
||
changePage: function changePage(page) {
|
||
if (page === 'prev') {
|
||
this.gotoPreviousPage();
|
||
} else if (page === 'next') {
|
||
this.gotoNextPage();
|
||
} else {
|
||
this.gotoPage(page);
|
||
}
|
||
},
|
||
reload: function reload() {
|
||
return this.loadData();
|
||
},
|
||
refresh: function refresh() {
|
||
this.currentPage = 1;
|
||
return this.loadData();
|
||
},
|
||
resetData: function resetData() {
|
||
this.tableData = null;
|
||
this.tablePagination = null;
|
||
this.fireEvent('data-reset');
|
||
}
|
||
},
|
||
watch: {
|
||
'multiSort': function multiSort(newVal, oldVal) {
|
||
if (newVal === false && this.sortOrder.length > 1) {
|
||
this.sortOrder.splice(1);
|
||
this.loadData();
|
||
}
|
||
},
|
||
'apiUrl': function apiUrl(newVal, oldVal) {
|
||
if (this.reactiveApiUrl && newVal !== oldVal) this.refresh();
|
||
},
|
||
'data': function data(newVal, oldVal) {
|
||
this.setData(newVal);
|
||
},
|
||
'tableHeight': function tableHeight(newVal, oldVal) {
|
||
this.fixHeader();
|
||
}
|
||
}
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/VuetablePagination.vue":
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__VuetablePaginationMixin_vue__ = __webpack_require__("./node_modules/vuetable-2/src/components/VuetablePaginationMixin.vue");
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__VuetablePaginationMixin_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__VuetablePaginationMixin_vue__);
|
||
|
||
|
||
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
mixins: [__WEBPACK_IMPORTED_MODULE_0__VuetablePaginationMixin_vue___default.a]
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue":
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__VuetablePaginationInfoMixin_vue__ = __webpack_require__("./node_modules/vuetable-2/src/components/VuetablePaginationInfoMixin.vue");
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__VuetablePaginationInfoMixin_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__VuetablePaginationInfoMixin_vue__);
|
||
|
||
|
||
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
mixins: [__WEBPACK_IMPORTED_MODULE_0__VuetablePaginationInfoMixin_vue___default.a]
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/VuetablePaginationInfoMixin.vue":
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
props: {
|
||
css: {
|
||
type: Object,
|
||
default: function _default() {
|
||
return {
|
||
infoClass: 'left floated left aligned six wide column'
|
||
};
|
||
}
|
||
},
|
||
infoTemplate: {
|
||
type: String,
|
||
default: function _default() {
|
||
return "Displaying {from} to {to} of {total} items";
|
||
}
|
||
},
|
||
noDataTemplate: {
|
||
type: String,
|
||
default: function _default() {
|
||
return 'No relevant data';
|
||
}
|
||
}
|
||
},
|
||
data: function data() {
|
||
return {
|
||
tablePagination: null
|
||
};
|
||
},
|
||
computed: {
|
||
paginationInfo: function paginationInfo() {
|
||
if (this.tablePagination == null || this.tablePagination.total == 0) {
|
||
return this.noDataTemplate;
|
||
}
|
||
|
||
return this.infoTemplate.replace('{from}', this.tablePagination.from || 0).replace('{to}', this.tablePagination.to || 0).replace('{total}', this.tablePagination.total || 0);
|
||
}
|
||
},
|
||
methods: {
|
||
setPaginationData: function setPaginationData(tablePagination) {
|
||
this.tablePagination = tablePagination;
|
||
},
|
||
resetData: function resetData() {
|
||
this.tablePagination = null;
|
||
}
|
||
}
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/VuetablePaginationMixin.vue":
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
props: {
|
||
css: {
|
||
type: Object,
|
||
default: function _default() {
|
||
return {
|
||
wrapperClass: 'ui right floated pagination menu',
|
||
activeClass: 'active large',
|
||
disabledClass: 'disabled',
|
||
pageClass: 'item',
|
||
linkClass: 'icon item',
|
||
paginationClass: 'ui bottom attached segment grid',
|
||
paginationInfoClass: 'left floated left aligned six wide column',
|
||
dropdownClass: 'ui search dropdown',
|
||
icons: {
|
||
first: 'angle double left icon',
|
||
prev: 'left chevron icon',
|
||
next: 'right chevron icon',
|
||
last: 'angle double right icon'
|
||
}
|
||
};
|
||
}
|
||
},
|
||
onEachSide: {
|
||
type: Number,
|
||
default: function _default() {
|
||
return 2;
|
||
}
|
||
}
|
||
},
|
||
data: function data() {
|
||
return {
|
||
eventPrefix: 'vuetable-pagination:',
|
||
tablePagination: null
|
||
};
|
||
},
|
||
computed: {
|
||
totalPage: function totalPage() {
|
||
return this.tablePagination === null ? 0 : this.tablePagination.last_page;
|
||
},
|
||
isOnFirstPage: function isOnFirstPage() {
|
||
return this.tablePagination === null ? false : this.tablePagination.current_page === 1;
|
||
},
|
||
isOnLastPage: function isOnLastPage() {
|
||
return this.tablePagination === null ? false : this.tablePagination.current_page === this.tablePagination.last_page;
|
||
},
|
||
notEnoughPages: function notEnoughPages() {
|
||
return this.totalPage < this.onEachSide * 2 + 4;
|
||
},
|
||
windowSize: function windowSize() {
|
||
return this.onEachSide * 2 + 1;
|
||
},
|
||
windowStart: function windowStart() {
|
||
if (!this.tablePagination || this.tablePagination.current_page <= this.onEachSide) {
|
||
return 1;
|
||
} else if (this.tablePagination.current_page >= this.totalPage - this.onEachSide) {
|
||
return this.totalPage - this.onEachSide * 2;
|
||
}
|
||
|
||
return this.tablePagination.current_page - this.onEachSide;
|
||
}
|
||
},
|
||
methods: {
|
||
loadPage: function loadPage(page) {
|
||
this.$emit(this.eventPrefix + 'change-page', page);
|
||
},
|
||
isCurrentPage: function isCurrentPage(page) {
|
||
return page === this.tablePagination.current_page;
|
||
},
|
||
setPaginationData: function setPaginationData(tablePagination) {
|
||
this.tablePagination = tablePagination;
|
||
},
|
||
resetData: function resetData() {
|
||
this.tablePagination = null;
|
||
}
|
||
}
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/client/ClientActions.vue":
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
props: {
|
||
rowData: {
|
||
type: Object,
|
||
required: true
|
||
},
|
||
rowIndex: {
|
||
type: Number
|
||
}
|
||
},
|
||
methods: {
|
||
itemAction: function itemAction(action, data, index) {
|
||
console.log('custom-actions: ' + action, data.name, index);
|
||
}
|
||
}
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/util/VuetablePaginationBootstrap.vue":
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vuetable_2_src_components_VuetablePaginationMixin__ = __webpack_require__("./node_modules/vuetable-2/src/components/VuetablePaginationMixin.vue");
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vuetable_2_src_components_VuetablePaginationMixin___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_vuetable_2_src_components_VuetablePaginationMixin__);
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//
|
||
|
||
|
||
/* harmony default export */ __webpack_exports__["default"] = ({
|
||
mixins: [__WEBPACK_IMPORTED_MODULE_0_vuetable_2_src_components_VuetablePaginationMixin___default.a]
|
||
});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-runtime/core-js/symbol.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = { "default": __webpack_require__("./node_modules/core-js/library/fn/symbol/index.js"), __esModule: true };
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-runtime/core-js/symbol/iterator.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = { "default": __webpack_require__("./node_modules/core-js/library/fn/symbol/iterator.js"), __esModule: true };
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/babel-runtime/helpers/typeof.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
exports.__esModule = true;
|
||
|
||
var _iterator = __webpack_require__("./node_modules/babel-runtime/core-js/symbol/iterator.js");
|
||
|
||
var _iterator2 = _interopRequireDefault(_iterator);
|
||
|
||
var _symbol = __webpack_require__("./node_modules/babel-runtime/core-js/symbol.js");
|
||
|
||
var _symbol2 = _interopRequireDefault(_symbol);
|
||
|
||
var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
|
||
return typeof obj === "undefined" ? "undefined" : _typeof(obj);
|
||
} : function (obj) {
|
||
return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
|
||
};
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/fn/symbol/index.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
__webpack_require__("./node_modules/core-js/library/modules/es6.symbol.js");
|
||
__webpack_require__("./node_modules/core-js/library/modules/es6.object.to-string.js");
|
||
__webpack_require__("./node_modules/core-js/library/modules/es7.symbol.async-iterator.js");
|
||
__webpack_require__("./node_modules/core-js/library/modules/es7.symbol.observable.js");
|
||
module.exports = __webpack_require__("./node_modules/core-js/library/modules/_core.js").Symbol;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/fn/symbol/iterator.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
__webpack_require__("./node_modules/core-js/library/modules/es6.string.iterator.js");
|
||
__webpack_require__("./node_modules/core-js/library/modules/web.dom.iterable.js");
|
||
module.exports = __webpack_require__("./node_modules/core-js/library/modules/_wks-ext.js").f('iterator');
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_a-function.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function (it) {
|
||
if (typeof it != 'function') throw TypeError(it + ' is not a function!');
|
||
return it;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_add-to-unscopables.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function () { /* empty */ };
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_an-object.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var isObject = __webpack_require__("./node_modules/core-js/library/modules/_is-object.js");
|
||
module.exports = function (it) {
|
||
if (!isObject(it)) throw TypeError(it + ' is not an object!');
|
||
return it;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_array-includes.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// false -> Array#indexOf
|
||
// true -> Array#includes
|
||
var toIObject = __webpack_require__("./node_modules/core-js/library/modules/_to-iobject.js");
|
||
var toLength = __webpack_require__("./node_modules/core-js/library/modules/_to-length.js");
|
||
var toAbsoluteIndex = __webpack_require__("./node_modules/core-js/library/modules/_to-absolute-index.js");
|
||
module.exports = function (IS_INCLUDES) {
|
||
return function ($this, el, fromIndex) {
|
||
var O = toIObject($this);
|
||
var length = toLength(O.length);
|
||
var index = toAbsoluteIndex(fromIndex, length);
|
||
var value;
|
||
// Array#includes uses SameValueZero equality algorithm
|
||
// eslint-disable-next-line no-self-compare
|
||
if (IS_INCLUDES && el != el) while (length > index) {
|
||
value = O[index++];
|
||
// eslint-disable-next-line no-self-compare
|
||
if (value != value) return true;
|
||
// Array#indexOf ignores holes, Array#includes - not
|
||
} else for (;length > index; index++) if (IS_INCLUDES || index in O) {
|
||
if (O[index] === el) return IS_INCLUDES || index || 0;
|
||
} return !IS_INCLUDES && -1;
|
||
};
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_cof.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
var toString = {}.toString;
|
||
|
||
module.exports = function (it) {
|
||
return toString.call(it).slice(8, -1);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_core.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
var core = module.exports = { version: '2.5.7' };
|
||
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_ctx.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// optional / simple context binding
|
||
var aFunction = __webpack_require__("./node_modules/core-js/library/modules/_a-function.js");
|
||
module.exports = function (fn, that, length) {
|
||
aFunction(fn);
|
||
if (that === undefined) return fn;
|
||
switch (length) {
|
||
case 1: return function (a) {
|
||
return fn.call(that, a);
|
||
};
|
||
case 2: return function (a, b) {
|
||
return fn.call(that, a, b);
|
||
};
|
||
case 3: return function (a, b, c) {
|
||
return fn.call(that, a, b, c);
|
||
};
|
||
}
|
||
return function (/* ...args */) {
|
||
return fn.apply(that, arguments);
|
||
};
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_defined.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
// 7.2.1 RequireObjectCoercible(argument)
|
||
module.exports = function (it) {
|
||
if (it == undefined) throw TypeError("Can't call method on " + it);
|
||
return it;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_descriptors.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// Thank's IE8 for his funny defineProperty
|
||
module.exports = !__webpack_require__("./node_modules/core-js/library/modules/_fails.js")(function () {
|
||
return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
|
||
});
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_dom-create.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var isObject = __webpack_require__("./node_modules/core-js/library/modules/_is-object.js");
|
||
var document = __webpack_require__("./node_modules/core-js/library/modules/_global.js").document;
|
||
// typeof document.createElement is 'object' in old IE
|
||
var is = isObject(document) && isObject(document.createElement);
|
||
module.exports = function (it) {
|
||
return is ? document.createElement(it) : {};
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_enum-bug-keys.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
// IE 8- don't enum bug keys
|
||
module.exports = (
|
||
'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
|
||
).split(',');
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_enum-keys.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// all enumerable object keys, includes symbols
|
||
var getKeys = __webpack_require__("./node_modules/core-js/library/modules/_object-keys.js");
|
||
var gOPS = __webpack_require__("./node_modules/core-js/library/modules/_object-gops.js");
|
||
var pIE = __webpack_require__("./node_modules/core-js/library/modules/_object-pie.js");
|
||
module.exports = function (it) {
|
||
var result = getKeys(it);
|
||
var getSymbols = gOPS.f;
|
||
if (getSymbols) {
|
||
var symbols = getSymbols(it);
|
||
var isEnum = pIE.f;
|
||
var i = 0;
|
||
var key;
|
||
while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
|
||
} return result;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_export.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var global = __webpack_require__("./node_modules/core-js/library/modules/_global.js");
|
||
var core = __webpack_require__("./node_modules/core-js/library/modules/_core.js");
|
||
var ctx = __webpack_require__("./node_modules/core-js/library/modules/_ctx.js");
|
||
var hide = __webpack_require__("./node_modules/core-js/library/modules/_hide.js");
|
||
var has = __webpack_require__("./node_modules/core-js/library/modules/_has.js");
|
||
var PROTOTYPE = 'prototype';
|
||
|
||
var $export = function (type, name, source) {
|
||
var IS_FORCED = type & $export.F;
|
||
var IS_GLOBAL = type & $export.G;
|
||
var IS_STATIC = type & $export.S;
|
||
var IS_PROTO = type & $export.P;
|
||
var IS_BIND = type & $export.B;
|
||
var IS_WRAP = type & $export.W;
|
||
var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
|
||
var expProto = exports[PROTOTYPE];
|
||
var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
|
||
var key, own, out;
|
||
if (IS_GLOBAL) source = name;
|
||
for (key in source) {
|
||
// contains in native
|
||
own = !IS_FORCED && target && target[key] !== undefined;
|
||
if (own && has(exports, key)) continue;
|
||
// export native or passed
|
||
out = own ? target[key] : source[key];
|
||
// prevent global pollution for namespaces
|
||
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
|
||
// bind timers to global for call from export context
|
||
: IS_BIND && own ? ctx(out, global)
|
||
// wrap global constructors for prevent change them in library
|
||
: IS_WRAP && target[key] == out ? (function (C) {
|
||
var F = function (a, b, c) {
|
||
if (this instanceof C) {
|
||
switch (arguments.length) {
|
||
case 0: return new C();
|
||
case 1: return new C(a);
|
||
case 2: return new C(a, b);
|
||
} return new C(a, b, c);
|
||
} return C.apply(this, arguments);
|
||
};
|
||
F[PROTOTYPE] = C[PROTOTYPE];
|
||
return F;
|
||
// make static versions for prototype methods
|
||
})(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
|
||
// export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
|
||
if (IS_PROTO) {
|
||
(exports.virtual || (exports.virtual = {}))[key] = out;
|
||
// export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
|
||
if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
|
||
}
|
||
}
|
||
};
|
||
// type bitmap
|
||
$export.F = 1; // forced
|
||
$export.G = 2; // global
|
||
$export.S = 4; // static
|
||
$export.P = 8; // proto
|
||
$export.B = 16; // bind
|
||
$export.W = 32; // wrap
|
||
$export.U = 64; // safe
|
||
$export.R = 128; // real proto method for `library`
|
||
module.exports = $export;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_fails.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function (exec) {
|
||
try {
|
||
return !!exec();
|
||
} catch (e) {
|
||
return true;
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_global.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
|
||
var global = module.exports = typeof window != 'undefined' && window.Math == Math
|
||
? window : typeof self != 'undefined' && self.Math == Math ? self
|
||
// eslint-disable-next-line no-new-func
|
||
: Function('return this')();
|
||
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_has.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
var hasOwnProperty = {}.hasOwnProperty;
|
||
module.exports = function (it, key) {
|
||
return hasOwnProperty.call(it, key);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_hide.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var dP = __webpack_require__("./node_modules/core-js/library/modules/_object-dp.js");
|
||
var createDesc = __webpack_require__("./node_modules/core-js/library/modules/_property-desc.js");
|
||
module.exports = __webpack_require__("./node_modules/core-js/library/modules/_descriptors.js") ? function (object, key, value) {
|
||
return dP.f(object, key, createDesc(1, value));
|
||
} : function (object, key, value) {
|
||
object[key] = value;
|
||
return object;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_html.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var document = __webpack_require__("./node_modules/core-js/library/modules/_global.js").document;
|
||
module.exports = document && document.documentElement;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_ie8-dom-define.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = !__webpack_require__("./node_modules/core-js/library/modules/_descriptors.js") && !__webpack_require__("./node_modules/core-js/library/modules/_fails.js")(function () {
|
||
return Object.defineProperty(__webpack_require__("./node_modules/core-js/library/modules/_dom-create.js")('div'), 'a', { get: function () { return 7; } }).a != 7;
|
||
});
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_iobject.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// fallback for non-array-like ES3 and non-enumerable old V8 strings
|
||
var cof = __webpack_require__("./node_modules/core-js/library/modules/_cof.js");
|
||
// eslint-disable-next-line no-prototype-builtins
|
||
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
|
||
return cof(it) == 'String' ? it.split('') : Object(it);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_is-array.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 7.2.2 IsArray(argument)
|
||
var cof = __webpack_require__("./node_modules/core-js/library/modules/_cof.js");
|
||
module.exports = Array.isArray || function isArray(arg) {
|
||
return cof(arg) == 'Array';
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_is-object.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function (it) {
|
||
return typeof it === 'object' ? it !== null : typeof it === 'function';
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_iter-create.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var create = __webpack_require__("./node_modules/core-js/library/modules/_object-create.js");
|
||
var descriptor = __webpack_require__("./node_modules/core-js/library/modules/_property-desc.js");
|
||
var setToStringTag = __webpack_require__("./node_modules/core-js/library/modules/_set-to-string-tag.js");
|
||
var IteratorPrototype = {};
|
||
|
||
// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
|
||
__webpack_require__("./node_modules/core-js/library/modules/_hide.js")(IteratorPrototype, __webpack_require__("./node_modules/core-js/library/modules/_wks.js")('iterator'), function () { return this; });
|
||
|
||
module.exports = function (Constructor, NAME, next) {
|
||
Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
|
||
setToStringTag(Constructor, NAME + ' Iterator');
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_iter-define.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var LIBRARY = __webpack_require__("./node_modules/core-js/library/modules/_library.js");
|
||
var $export = __webpack_require__("./node_modules/core-js/library/modules/_export.js");
|
||
var redefine = __webpack_require__("./node_modules/core-js/library/modules/_redefine.js");
|
||
var hide = __webpack_require__("./node_modules/core-js/library/modules/_hide.js");
|
||
var Iterators = __webpack_require__("./node_modules/core-js/library/modules/_iterators.js");
|
||
var $iterCreate = __webpack_require__("./node_modules/core-js/library/modules/_iter-create.js");
|
||
var setToStringTag = __webpack_require__("./node_modules/core-js/library/modules/_set-to-string-tag.js");
|
||
var getPrototypeOf = __webpack_require__("./node_modules/core-js/library/modules/_object-gpo.js");
|
||
var ITERATOR = __webpack_require__("./node_modules/core-js/library/modules/_wks.js")('iterator');
|
||
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
|
||
var FF_ITERATOR = '@@iterator';
|
||
var KEYS = 'keys';
|
||
var VALUES = 'values';
|
||
|
||
var returnThis = function () { return this; };
|
||
|
||
module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
|
||
$iterCreate(Constructor, NAME, next);
|
||
var getMethod = function (kind) {
|
||
if (!BUGGY && kind in proto) return proto[kind];
|
||
switch (kind) {
|
||
case KEYS: return function keys() { return new Constructor(this, kind); };
|
||
case VALUES: return function values() { return new Constructor(this, kind); };
|
||
} return function entries() { return new Constructor(this, kind); };
|
||
};
|
||
var TAG = NAME + ' Iterator';
|
||
var DEF_VALUES = DEFAULT == VALUES;
|
||
var VALUES_BUG = false;
|
||
var proto = Base.prototype;
|
||
var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
|
||
var $default = $native || getMethod(DEFAULT);
|
||
var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
|
||
var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
|
||
var methods, key, IteratorPrototype;
|
||
// Fix native
|
||
if ($anyNative) {
|
||
IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
|
||
if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
|
||
// Set @@toStringTag to native iterators
|
||
setToStringTag(IteratorPrototype, TAG, true);
|
||
// fix for some old engines
|
||
if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
|
||
}
|
||
}
|
||
// fix Array#{values, @@iterator}.name in V8 / FF
|
||
if (DEF_VALUES && $native && $native.name !== VALUES) {
|
||
VALUES_BUG = true;
|
||
$default = function values() { return $native.call(this); };
|
||
}
|
||
// Define iterator
|
||
if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
|
||
hide(proto, ITERATOR, $default);
|
||
}
|
||
// Plug for library
|
||
Iterators[NAME] = $default;
|
||
Iterators[TAG] = returnThis;
|
||
if (DEFAULT) {
|
||
methods = {
|
||
values: DEF_VALUES ? $default : getMethod(VALUES),
|
||
keys: IS_SET ? $default : getMethod(KEYS),
|
||
entries: $entries
|
||
};
|
||
if (FORCED) for (key in methods) {
|
||
if (!(key in proto)) redefine(proto, key, methods[key]);
|
||
} else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
|
||
}
|
||
return methods;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_iter-step.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function (done, value) {
|
||
return { value: value, done: !!done };
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_iterators.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = {};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_library.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = true;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_meta.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var META = __webpack_require__("./node_modules/core-js/library/modules/_uid.js")('meta');
|
||
var isObject = __webpack_require__("./node_modules/core-js/library/modules/_is-object.js");
|
||
var has = __webpack_require__("./node_modules/core-js/library/modules/_has.js");
|
||
var setDesc = __webpack_require__("./node_modules/core-js/library/modules/_object-dp.js").f;
|
||
var id = 0;
|
||
var isExtensible = Object.isExtensible || function () {
|
||
return true;
|
||
};
|
||
var FREEZE = !__webpack_require__("./node_modules/core-js/library/modules/_fails.js")(function () {
|
||
return isExtensible(Object.preventExtensions({}));
|
||
});
|
||
var setMeta = function (it) {
|
||
setDesc(it, META, { value: {
|
||
i: 'O' + ++id, // object ID
|
||
w: {} // weak collections IDs
|
||
} });
|
||
};
|
||
var fastKey = function (it, create) {
|
||
// return primitive with prefix
|
||
if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
|
||
if (!has(it, META)) {
|
||
// can't set metadata to uncaught frozen object
|
||
if (!isExtensible(it)) return 'F';
|
||
// not necessary to add metadata
|
||
if (!create) return 'E';
|
||
// add missing metadata
|
||
setMeta(it);
|
||
// return object ID
|
||
} return it[META].i;
|
||
};
|
||
var getWeak = function (it, create) {
|
||
if (!has(it, META)) {
|
||
// can't set metadata to uncaught frozen object
|
||
if (!isExtensible(it)) return true;
|
||
// not necessary to add metadata
|
||
if (!create) return false;
|
||
// add missing metadata
|
||
setMeta(it);
|
||
// return hash weak collections IDs
|
||
} return it[META].w;
|
||
};
|
||
// add metadata on freeze-family methods calling
|
||
var onFreeze = function (it) {
|
||
if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
|
||
return it;
|
||
};
|
||
var meta = module.exports = {
|
||
KEY: META,
|
||
NEED: false,
|
||
fastKey: fastKey,
|
||
getWeak: getWeak,
|
||
onFreeze: onFreeze
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-create.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
|
||
var anObject = __webpack_require__("./node_modules/core-js/library/modules/_an-object.js");
|
||
var dPs = __webpack_require__("./node_modules/core-js/library/modules/_object-dps.js");
|
||
var enumBugKeys = __webpack_require__("./node_modules/core-js/library/modules/_enum-bug-keys.js");
|
||
var IE_PROTO = __webpack_require__("./node_modules/core-js/library/modules/_shared-key.js")('IE_PROTO');
|
||
var Empty = function () { /* empty */ };
|
||
var PROTOTYPE = 'prototype';
|
||
|
||
// Create object with fake `null` prototype: use iframe Object with cleared prototype
|
||
var createDict = function () {
|
||
// Thrash, waste and sodomy: IE GC bug
|
||
var iframe = __webpack_require__("./node_modules/core-js/library/modules/_dom-create.js")('iframe');
|
||
var i = enumBugKeys.length;
|
||
var lt = '<';
|
||
var gt = '>';
|
||
var iframeDocument;
|
||
iframe.style.display = 'none';
|
||
__webpack_require__("./node_modules/core-js/library/modules/_html.js").appendChild(iframe);
|
||
iframe.src = 'javascript:'; // eslint-disable-line no-script-url
|
||
// createDict = iframe.contentWindow.Object;
|
||
// html.removeChild(iframe);
|
||
iframeDocument = iframe.contentWindow.document;
|
||
iframeDocument.open();
|
||
iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
|
||
iframeDocument.close();
|
||
createDict = iframeDocument.F;
|
||
while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
|
||
return createDict();
|
||
};
|
||
|
||
module.exports = Object.create || function create(O, Properties) {
|
||
var result;
|
||
if (O !== null) {
|
||
Empty[PROTOTYPE] = anObject(O);
|
||
result = new Empty();
|
||
Empty[PROTOTYPE] = null;
|
||
// add "__proto__" for Object.getPrototypeOf polyfill
|
||
result[IE_PROTO] = O;
|
||
} else result = createDict();
|
||
return Properties === undefined ? result : dPs(result, Properties);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-dp.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var anObject = __webpack_require__("./node_modules/core-js/library/modules/_an-object.js");
|
||
var IE8_DOM_DEFINE = __webpack_require__("./node_modules/core-js/library/modules/_ie8-dom-define.js");
|
||
var toPrimitive = __webpack_require__("./node_modules/core-js/library/modules/_to-primitive.js");
|
||
var dP = Object.defineProperty;
|
||
|
||
exports.f = __webpack_require__("./node_modules/core-js/library/modules/_descriptors.js") ? Object.defineProperty : function defineProperty(O, P, Attributes) {
|
||
anObject(O);
|
||
P = toPrimitive(P, true);
|
||
anObject(Attributes);
|
||
if (IE8_DOM_DEFINE) try {
|
||
return dP(O, P, Attributes);
|
||
} catch (e) { /* empty */ }
|
||
if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
|
||
if ('value' in Attributes) O[P] = Attributes.value;
|
||
return O;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-dps.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var dP = __webpack_require__("./node_modules/core-js/library/modules/_object-dp.js");
|
||
var anObject = __webpack_require__("./node_modules/core-js/library/modules/_an-object.js");
|
||
var getKeys = __webpack_require__("./node_modules/core-js/library/modules/_object-keys.js");
|
||
|
||
module.exports = __webpack_require__("./node_modules/core-js/library/modules/_descriptors.js") ? Object.defineProperties : function defineProperties(O, Properties) {
|
||
anObject(O);
|
||
var keys = getKeys(Properties);
|
||
var length = keys.length;
|
||
var i = 0;
|
||
var P;
|
||
while (length > i) dP.f(O, P = keys[i++], Properties[P]);
|
||
return O;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-gopd.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var pIE = __webpack_require__("./node_modules/core-js/library/modules/_object-pie.js");
|
||
var createDesc = __webpack_require__("./node_modules/core-js/library/modules/_property-desc.js");
|
||
var toIObject = __webpack_require__("./node_modules/core-js/library/modules/_to-iobject.js");
|
||
var toPrimitive = __webpack_require__("./node_modules/core-js/library/modules/_to-primitive.js");
|
||
var has = __webpack_require__("./node_modules/core-js/library/modules/_has.js");
|
||
var IE8_DOM_DEFINE = __webpack_require__("./node_modules/core-js/library/modules/_ie8-dom-define.js");
|
||
var gOPD = Object.getOwnPropertyDescriptor;
|
||
|
||
exports.f = __webpack_require__("./node_modules/core-js/library/modules/_descriptors.js") ? gOPD : function getOwnPropertyDescriptor(O, P) {
|
||
O = toIObject(O);
|
||
P = toPrimitive(P, true);
|
||
if (IE8_DOM_DEFINE) try {
|
||
return gOPD(O, P);
|
||
} catch (e) { /* empty */ }
|
||
if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-gopn-ext.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
|
||
var toIObject = __webpack_require__("./node_modules/core-js/library/modules/_to-iobject.js");
|
||
var gOPN = __webpack_require__("./node_modules/core-js/library/modules/_object-gopn.js").f;
|
||
var toString = {}.toString;
|
||
|
||
var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
|
||
? Object.getOwnPropertyNames(window) : [];
|
||
|
||
var getWindowNames = function (it) {
|
||
try {
|
||
return gOPN(it);
|
||
} catch (e) {
|
||
return windowNames.slice();
|
||
}
|
||
};
|
||
|
||
module.exports.f = function getOwnPropertyNames(it) {
|
||
return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-gopn.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
|
||
var $keys = __webpack_require__("./node_modules/core-js/library/modules/_object-keys-internal.js");
|
||
var hiddenKeys = __webpack_require__("./node_modules/core-js/library/modules/_enum-bug-keys.js").concat('length', 'prototype');
|
||
|
||
exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
|
||
return $keys(O, hiddenKeys);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-gops.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
exports.f = Object.getOwnPropertySymbols;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-gpo.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
|
||
var has = __webpack_require__("./node_modules/core-js/library/modules/_has.js");
|
||
var toObject = __webpack_require__("./node_modules/core-js/library/modules/_to-object.js");
|
||
var IE_PROTO = __webpack_require__("./node_modules/core-js/library/modules/_shared-key.js")('IE_PROTO');
|
||
var ObjectProto = Object.prototype;
|
||
|
||
module.exports = Object.getPrototypeOf || function (O) {
|
||
O = toObject(O);
|
||
if (has(O, IE_PROTO)) return O[IE_PROTO];
|
||
if (typeof O.constructor == 'function' && O instanceof O.constructor) {
|
||
return O.constructor.prototype;
|
||
} return O instanceof Object ? ObjectProto : null;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-keys-internal.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var has = __webpack_require__("./node_modules/core-js/library/modules/_has.js");
|
||
var toIObject = __webpack_require__("./node_modules/core-js/library/modules/_to-iobject.js");
|
||
var arrayIndexOf = __webpack_require__("./node_modules/core-js/library/modules/_array-includes.js")(false);
|
||
var IE_PROTO = __webpack_require__("./node_modules/core-js/library/modules/_shared-key.js")('IE_PROTO');
|
||
|
||
module.exports = function (object, names) {
|
||
var O = toIObject(object);
|
||
var i = 0;
|
||
var result = [];
|
||
var key;
|
||
for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
|
||
// Don't enum bug & hidden keys
|
||
while (names.length > i) if (has(O, key = names[i++])) {
|
||
~arrayIndexOf(result, key) || result.push(key);
|
||
}
|
||
return result;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-keys.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 19.1.2.14 / 15.2.3.14 Object.keys(O)
|
||
var $keys = __webpack_require__("./node_modules/core-js/library/modules/_object-keys-internal.js");
|
||
var enumBugKeys = __webpack_require__("./node_modules/core-js/library/modules/_enum-bug-keys.js");
|
||
|
||
module.exports = Object.keys || function keys(O) {
|
||
return $keys(O, enumBugKeys);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_object-pie.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
exports.f = {}.propertyIsEnumerable;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_property-desc.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function (bitmap, value) {
|
||
return {
|
||
enumerable: !(bitmap & 1),
|
||
configurable: !(bitmap & 2),
|
||
writable: !(bitmap & 4),
|
||
value: value
|
||
};
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_redefine.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__("./node_modules/core-js/library/modules/_hide.js");
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_set-to-string-tag.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var def = __webpack_require__("./node_modules/core-js/library/modules/_object-dp.js").f;
|
||
var has = __webpack_require__("./node_modules/core-js/library/modules/_has.js");
|
||
var TAG = __webpack_require__("./node_modules/core-js/library/modules/_wks.js")('toStringTag');
|
||
|
||
module.exports = function (it, tag, stat) {
|
||
if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_shared-key.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var shared = __webpack_require__("./node_modules/core-js/library/modules/_shared.js")('keys');
|
||
var uid = __webpack_require__("./node_modules/core-js/library/modules/_uid.js");
|
||
module.exports = function (key) {
|
||
return shared[key] || (shared[key] = uid(key));
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_shared.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var core = __webpack_require__("./node_modules/core-js/library/modules/_core.js");
|
||
var global = __webpack_require__("./node_modules/core-js/library/modules/_global.js");
|
||
var SHARED = '__core-js_shared__';
|
||
var store = global[SHARED] || (global[SHARED] = {});
|
||
|
||
(module.exports = function (key, value) {
|
||
return store[key] || (store[key] = value !== undefined ? value : {});
|
||
})('versions', []).push({
|
||
version: core.version,
|
||
mode: __webpack_require__("./node_modules/core-js/library/modules/_library.js") ? 'pure' : 'global',
|
||
copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
|
||
});
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_string-at.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var toInteger = __webpack_require__("./node_modules/core-js/library/modules/_to-integer.js");
|
||
var defined = __webpack_require__("./node_modules/core-js/library/modules/_defined.js");
|
||
// true -> String#at
|
||
// false -> String#codePointAt
|
||
module.exports = function (TO_STRING) {
|
||
return function (that, pos) {
|
||
var s = String(defined(that));
|
||
var i = toInteger(pos);
|
||
var l = s.length;
|
||
var a, b;
|
||
if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
|
||
a = s.charCodeAt(i);
|
||
return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
|
||
? TO_STRING ? s.charAt(i) : a
|
||
: TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
|
||
};
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_to-absolute-index.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var toInteger = __webpack_require__("./node_modules/core-js/library/modules/_to-integer.js");
|
||
var max = Math.max;
|
||
var min = Math.min;
|
||
module.exports = function (index, length) {
|
||
index = toInteger(index);
|
||
return index < 0 ? max(index + length, 0) : min(index, length);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_to-integer.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
// 7.1.4 ToInteger
|
||
var ceil = Math.ceil;
|
||
var floor = Math.floor;
|
||
module.exports = function (it) {
|
||
return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_to-iobject.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// to indexed object, toObject with fallback for non-array-like ES3 strings
|
||
var IObject = __webpack_require__("./node_modules/core-js/library/modules/_iobject.js");
|
||
var defined = __webpack_require__("./node_modules/core-js/library/modules/_defined.js");
|
||
module.exports = function (it) {
|
||
return IObject(defined(it));
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_to-length.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 7.1.15 ToLength
|
||
var toInteger = __webpack_require__("./node_modules/core-js/library/modules/_to-integer.js");
|
||
var min = Math.min;
|
||
module.exports = function (it) {
|
||
return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_to-object.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 7.1.13 ToObject(argument)
|
||
var defined = __webpack_require__("./node_modules/core-js/library/modules/_defined.js");
|
||
module.exports = function (it) {
|
||
return Object(defined(it));
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_to-primitive.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 7.1.1 ToPrimitive(input [, PreferredType])
|
||
var isObject = __webpack_require__("./node_modules/core-js/library/modules/_is-object.js");
|
||
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
|
||
// and the second argument - flag - preferred type is a string
|
||
module.exports = function (it, S) {
|
||
if (!isObject(it)) return it;
|
||
var fn, val;
|
||
if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
|
||
if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
|
||
if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
|
||
throw TypeError("Can't convert object to primitive value");
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_uid.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
var id = 0;
|
||
var px = Math.random();
|
||
module.exports = function (key) {
|
||
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_wks-define.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var global = __webpack_require__("./node_modules/core-js/library/modules/_global.js");
|
||
var core = __webpack_require__("./node_modules/core-js/library/modules/_core.js");
|
||
var LIBRARY = __webpack_require__("./node_modules/core-js/library/modules/_library.js");
|
||
var wksExt = __webpack_require__("./node_modules/core-js/library/modules/_wks-ext.js");
|
||
var defineProperty = __webpack_require__("./node_modules/core-js/library/modules/_object-dp.js").f;
|
||
module.exports = function (name) {
|
||
var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
|
||
if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_wks-ext.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports.f = __webpack_require__("./node_modules/core-js/library/modules/_wks.js");
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/_wks.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var store = __webpack_require__("./node_modules/core-js/library/modules/_shared.js")('wks');
|
||
var uid = __webpack_require__("./node_modules/core-js/library/modules/_uid.js");
|
||
var Symbol = __webpack_require__("./node_modules/core-js/library/modules/_global.js").Symbol;
|
||
var USE_SYMBOL = typeof Symbol == 'function';
|
||
|
||
var $exports = module.exports = function (name) {
|
||
return store[name] || (store[name] =
|
||
USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
|
||
};
|
||
|
||
$exports.store = store;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/es6.array.iterator.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var addToUnscopables = __webpack_require__("./node_modules/core-js/library/modules/_add-to-unscopables.js");
|
||
var step = __webpack_require__("./node_modules/core-js/library/modules/_iter-step.js");
|
||
var Iterators = __webpack_require__("./node_modules/core-js/library/modules/_iterators.js");
|
||
var toIObject = __webpack_require__("./node_modules/core-js/library/modules/_to-iobject.js");
|
||
|
||
// 22.1.3.4 Array.prototype.entries()
|
||
// 22.1.3.13 Array.prototype.keys()
|
||
// 22.1.3.29 Array.prototype.values()
|
||
// 22.1.3.30 Array.prototype[@@iterator]()
|
||
module.exports = __webpack_require__("./node_modules/core-js/library/modules/_iter-define.js")(Array, 'Array', function (iterated, kind) {
|
||
this._t = toIObject(iterated); // target
|
||
this._i = 0; // next index
|
||
this._k = kind; // kind
|
||
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
|
||
}, function () {
|
||
var O = this._t;
|
||
var kind = this._k;
|
||
var index = this._i++;
|
||
if (!O || index >= O.length) {
|
||
this._t = undefined;
|
||
return step(1);
|
||
}
|
||
if (kind == 'keys') return step(0, index);
|
||
if (kind == 'values') return step(0, O[index]);
|
||
return step(0, [index, O[index]]);
|
||
}, 'values');
|
||
|
||
// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
|
||
Iterators.Arguments = Iterators.Array;
|
||
|
||
addToUnscopables('keys');
|
||
addToUnscopables('values');
|
||
addToUnscopables('entries');
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/es6.object.to-string.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/es6.string.iterator.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var $at = __webpack_require__("./node_modules/core-js/library/modules/_string-at.js")(true);
|
||
|
||
// 21.1.3.27 String.prototype[@@iterator]()
|
||
__webpack_require__("./node_modules/core-js/library/modules/_iter-define.js")(String, 'String', function (iterated) {
|
||
this._t = String(iterated); // target
|
||
this._i = 0; // next index
|
||
// 21.1.5.2.1 %StringIteratorPrototype%.next()
|
||
}, function () {
|
||
var O = this._t;
|
||
var index = this._i;
|
||
var point;
|
||
if (index >= O.length) return { value: undefined, done: true };
|
||
point = $at(O, index);
|
||
this._i += point.length;
|
||
return { value: point, done: false };
|
||
});
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/es6.symbol.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
// ECMAScript 6 symbols shim
|
||
var global = __webpack_require__("./node_modules/core-js/library/modules/_global.js");
|
||
var has = __webpack_require__("./node_modules/core-js/library/modules/_has.js");
|
||
var DESCRIPTORS = __webpack_require__("./node_modules/core-js/library/modules/_descriptors.js");
|
||
var $export = __webpack_require__("./node_modules/core-js/library/modules/_export.js");
|
||
var redefine = __webpack_require__("./node_modules/core-js/library/modules/_redefine.js");
|
||
var META = __webpack_require__("./node_modules/core-js/library/modules/_meta.js").KEY;
|
||
var $fails = __webpack_require__("./node_modules/core-js/library/modules/_fails.js");
|
||
var shared = __webpack_require__("./node_modules/core-js/library/modules/_shared.js");
|
||
var setToStringTag = __webpack_require__("./node_modules/core-js/library/modules/_set-to-string-tag.js");
|
||
var uid = __webpack_require__("./node_modules/core-js/library/modules/_uid.js");
|
||
var wks = __webpack_require__("./node_modules/core-js/library/modules/_wks.js");
|
||
var wksExt = __webpack_require__("./node_modules/core-js/library/modules/_wks-ext.js");
|
||
var wksDefine = __webpack_require__("./node_modules/core-js/library/modules/_wks-define.js");
|
||
var enumKeys = __webpack_require__("./node_modules/core-js/library/modules/_enum-keys.js");
|
||
var isArray = __webpack_require__("./node_modules/core-js/library/modules/_is-array.js");
|
||
var anObject = __webpack_require__("./node_modules/core-js/library/modules/_an-object.js");
|
||
var isObject = __webpack_require__("./node_modules/core-js/library/modules/_is-object.js");
|
||
var toIObject = __webpack_require__("./node_modules/core-js/library/modules/_to-iobject.js");
|
||
var toPrimitive = __webpack_require__("./node_modules/core-js/library/modules/_to-primitive.js");
|
||
var createDesc = __webpack_require__("./node_modules/core-js/library/modules/_property-desc.js");
|
||
var _create = __webpack_require__("./node_modules/core-js/library/modules/_object-create.js");
|
||
var gOPNExt = __webpack_require__("./node_modules/core-js/library/modules/_object-gopn-ext.js");
|
||
var $GOPD = __webpack_require__("./node_modules/core-js/library/modules/_object-gopd.js");
|
||
var $DP = __webpack_require__("./node_modules/core-js/library/modules/_object-dp.js");
|
||
var $keys = __webpack_require__("./node_modules/core-js/library/modules/_object-keys.js");
|
||
var gOPD = $GOPD.f;
|
||
var dP = $DP.f;
|
||
var gOPN = gOPNExt.f;
|
||
var $Symbol = global.Symbol;
|
||
var $JSON = global.JSON;
|
||
var _stringify = $JSON && $JSON.stringify;
|
||
var PROTOTYPE = 'prototype';
|
||
var HIDDEN = wks('_hidden');
|
||
var TO_PRIMITIVE = wks('toPrimitive');
|
||
var isEnum = {}.propertyIsEnumerable;
|
||
var SymbolRegistry = shared('symbol-registry');
|
||
var AllSymbols = shared('symbols');
|
||
var OPSymbols = shared('op-symbols');
|
||
var ObjectProto = Object[PROTOTYPE];
|
||
var USE_NATIVE = typeof $Symbol == 'function';
|
||
var QObject = global.QObject;
|
||
// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
|
||
var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
|
||
|
||
// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
|
||
var setSymbolDesc = DESCRIPTORS && $fails(function () {
|
||
return _create(dP({}, 'a', {
|
||
get: function () { return dP(this, 'a', { value: 7 }).a; }
|
||
})).a != 7;
|
||
}) ? function (it, key, D) {
|
||
var protoDesc = gOPD(ObjectProto, key);
|
||
if (protoDesc) delete ObjectProto[key];
|
||
dP(it, key, D);
|
||
if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
|
||
} : dP;
|
||
|
||
var wrap = function (tag) {
|
||
var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
|
||
sym._k = tag;
|
||
return sym;
|
||
};
|
||
|
||
var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
|
||
return typeof it == 'symbol';
|
||
} : function (it) {
|
||
return it instanceof $Symbol;
|
||
};
|
||
|
||
var $defineProperty = function defineProperty(it, key, D) {
|
||
if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
|
||
anObject(it);
|
||
key = toPrimitive(key, true);
|
||
anObject(D);
|
||
if (has(AllSymbols, key)) {
|
||
if (!D.enumerable) {
|
||
if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
|
||
it[HIDDEN][key] = true;
|
||
} else {
|
||
if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
|
||
D = _create(D, { enumerable: createDesc(0, false) });
|
||
} return setSymbolDesc(it, key, D);
|
||
} return dP(it, key, D);
|
||
};
|
||
var $defineProperties = function defineProperties(it, P) {
|
||
anObject(it);
|
||
var keys = enumKeys(P = toIObject(P));
|
||
var i = 0;
|
||
var l = keys.length;
|
||
var key;
|
||
while (l > i) $defineProperty(it, key = keys[i++], P[key]);
|
||
return it;
|
||
};
|
||
var $create = function create(it, P) {
|
||
return P === undefined ? _create(it) : $defineProperties(_create(it), P);
|
||
};
|
||
var $propertyIsEnumerable = function propertyIsEnumerable(key) {
|
||
var E = isEnum.call(this, key = toPrimitive(key, true));
|
||
if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
|
||
return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
|
||
};
|
||
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
|
||
it = toIObject(it);
|
||
key = toPrimitive(key, true);
|
||
if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
|
||
var D = gOPD(it, key);
|
||
if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
|
||
return D;
|
||
};
|
||
var $getOwnPropertyNames = function getOwnPropertyNames(it) {
|
||
var names = gOPN(toIObject(it));
|
||
var result = [];
|
||
var i = 0;
|
||
var key;
|
||
while (names.length > i) {
|
||
if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
|
||
} return result;
|
||
};
|
||
var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
|
||
var IS_OP = it === ObjectProto;
|
||
var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
|
||
var result = [];
|
||
var i = 0;
|
||
var key;
|
||
while (names.length > i) {
|
||
if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
|
||
} return result;
|
||
};
|
||
|
||
// 19.4.1.1 Symbol([description])
|
||
if (!USE_NATIVE) {
|
||
$Symbol = function Symbol() {
|
||
if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
|
||
var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
|
||
var $set = function (value) {
|
||
if (this === ObjectProto) $set.call(OPSymbols, value);
|
||
if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
|
||
setSymbolDesc(this, tag, createDesc(1, value));
|
||
};
|
||
if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
|
||
return wrap(tag);
|
||
};
|
||
redefine($Symbol[PROTOTYPE], 'toString', function toString() {
|
||
return this._k;
|
||
});
|
||
|
||
$GOPD.f = $getOwnPropertyDescriptor;
|
||
$DP.f = $defineProperty;
|
||
__webpack_require__("./node_modules/core-js/library/modules/_object-gopn.js").f = gOPNExt.f = $getOwnPropertyNames;
|
||
__webpack_require__("./node_modules/core-js/library/modules/_object-pie.js").f = $propertyIsEnumerable;
|
||
__webpack_require__("./node_modules/core-js/library/modules/_object-gops.js").f = $getOwnPropertySymbols;
|
||
|
||
if (DESCRIPTORS && !__webpack_require__("./node_modules/core-js/library/modules/_library.js")) {
|
||
redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
|
||
}
|
||
|
||
wksExt.f = function (name) {
|
||
return wrap(wks(name));
|
||
};
|
||
}
|
||
|
||
$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
|
||
|
||
for (var es6Symbols = (
|
||
// 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
|
||
'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
|
||
).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
|
||
|
||
for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
|
||
|
||
$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
|
||
// 19.4.2.1 Symbol.for(key)
|
||
'for': function (key) {
|
||
return has(SymbolRegistry, key += '')
|
||
? SymbolRegistry[key]
|
||
: SymbolRegistry[key] = $Symbol(key);
|
||
},
|
||
// 19.4.2.5 Symbol.keyFor(sym)
|
||
keyFor: function keyFor(sym) {
|
||
if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
|
||
for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
|
||
},
|
||
useSetter: function () { setter = true; },
|
||
useSimple: function () { setter = false; }
|
||
});
|
||
|
||
$export($export.S + $export.F * !USE_NATIVE, 'Object', {
|
||
// 19.1.2.2 Object.create(O [, Properties])
|
||
create: $create,
|
||
// 19.1.2.4 Object.defineProperty(O, P, Attributes)
|
||
defineProperty: $defineProperty,
|
||
// 19.1.2.3 Object.defineProperties(O, Properties)
|
||
defineProperties: $defineProperties,
|
||
// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
|
||
getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
|
||
// 19.1.2.7 Object.getOwnPropertyNames(O)
|
||
getOwnPropertyNames: $getOwnPropertyNames,
|
||
// 19.1.2.8 Object.getOwnPropertySymbols(O)
|
||
getOwnPropertySymbols: $getOwnPropertySymbols
|
||
});
|
||
|
||
// 24.3.2 JSON.stringify(value [, replacer [, space]])
|
||
$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
|
||
var S = $Symbol();
|
||
// MS Edge converts symbol values to JSON as {}
|
||
// WebKit converts symbol values to JSON as null
|
||
// V8 throws on boxed symbols
|
||
return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
|
||
})), 'JSON', {
|
||
stringify: function stringify(it) {
|
||
var args = [it];
|
||
var i = 1;
|
||
var replacer, $replacer;
|
||
while (arguments.length > i) args.push(arguments[i++]);
|
||
$replacer = replacer = args[1];
|
||
if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
|
||
if (!isArray(replacer)) replacer = function (key, value) {
|
||
if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
|
||
if (!isSymbol(value)) return value;
|
||
};
|
||
args[1] = replacer;
|
||
return _stringify.apply($JSON, args);
|
||
}
|
||
});
|
||
|
||
// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
|
||
$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__("./node_modules/core-js/library/modules/_hide.js")($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
|
||
// 19.4.3.5 Symbol.prototype[@@toStringTag]
|
||
setToStringTag($Symbol, 'Symbol');
|
||
// 20.2.1.9 Math[@@toStringTag]
|
||
setToStringTag(Math, 'Math', true);
|
||
// 24.3.3 JSON[@@toStringTag]
|
||
setToStringTag(global.JSON, 'JSON', true);
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/es7.symbol.async-iterator.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
__webpack_require__("./node_modules/core-js/library/modules/_wks-define.js")('asyncIterator');
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/es7.symbol.observable.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
__webpack_require__("./node_modules/core-js/library/modules/_wks-define.js")('observable');
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/core-js/library/modules/web.dom.iterable.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
__webpack_require__("./node_modules/core-js/library/modules/es6.array.iterator.js");
|
||
var global = __webpack_require__("./node_modules/core-js/library/modules/_global.js");
|
||
var hide = __webpack_require__("./node_modules/core-js/library/modules/_hide.js");
|
||
var Iterators = __webpack_require__("./node_modules/core-js/library/modules/_iterators.js");
|
||
var TO_STRING_TAG = __webpack_require__("./node_modules/core-js/library/modules/_wks.js")('toStringTag');
|
||
|
||
var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
|
||
'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
|
||
'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
|
||
'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
|
||
'TextTrackList,TouchList').split(',');
|
||
|
||
for (var i = 0; i < DOMIterables.length; i++) {
|
||
var NAME = DOMIterables[i];
|
||
var Collection = global[NAME];
|
||
var proto = Collection && Collection.prototype;
|
||
if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
|
||
Iterators[NAME] = Iterators.Array;
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/index.js!./node_modules/sass-loader/lib/loader.js!./node_modules/vue-toastr/src/vue-toastr.scss":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(false);
|
||
// imports
|
||
|
||
|
||
// module
|
||
exports.push([module.i, ".toast-title {\n font-weight: bold; }\n\n.toast-message {\n -ms-word-wrap: break-word;\n word-wrap: break-word; }\n .toast-message a,\n .toast-message label {\n color: #FFFFFF; }\n .toast-message a:hover {\n color: #CCCCCC;\n text-decoration: none; }\n\n.toast-close-button {\n position: relative;\n right: -0.3em;\n top: -0.3em;\n float: right;\n font-size: 20px;\n font-weight: bold;\n color: #FFFFFF;\n -webkit-text-shadow: 0 1px 0 white;\n text-shadow: 0 1px 0 white;\n opacity: 0.8; }\n .toast-close-button:hover, .toast-close-button:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.4; }\n\n/*Additional properties for button version\n iOS requires the button element instead of an anchor tag.\n If you want the anchor version, it requires `href=\"#\"`.*/\nbutton.toast-close-button {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none; }\n\n.toast-top-center {\n top: 0;\n right: 0;\n width: 100%; }\n\n.toast-bottom-center {\n bottom: 0;\n right: 0;\n width: 100%; }\n\n.toast-top-full-width {\n top: 0;\n right: 0;\n width: 100%; }\n\n.toast-bottom-full-width {\n bottom: 0;\n right: 0;\n width: 100%; }\n\n.toast-top-left {\n top: 12px;\n left: 12px; }\n\n.toast-top-right {\n top: 12px;\n right: 12px; }\n\n.toast-bottom-right {\n right: 12px;\n bottom: 12px; }\n\n.toast-bottom-left {\n bottom: 12px;\n left: 12px; }\n\n.toast-container {\n position: fixed;\n z-index: 999999;\n pointer-events: none;\n /*overrides*/ }\n .toast-container * {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n .toast-container > div {\n position: relative;\n pointer-events: auto;\n overflow: hidden;\n margin: 0 0 6px;\n padding: 15px 15px 15px 50px;\n width: 300px;\n -moz-border-radius: 3px 3px 3px 3px;\n -webkit-border-radius: 3px 3px 3px 3px;\n border-radius: 3px 3px 3px 3px;\n background-position: 15px center;\n background-repeat: no-repeat;\n -moz-box-shadow: 0 0 12px #999999;\n -webkit-box-shadow: 0 0 12px #999999;\n box-shadow: 0 0 12px #999999;\n color: #FFFFFF;\n opacity: 0.8; }\n .toast-container > :hover {\n -moz-box-shadow: 0 0 12px #000000;\n -webkit-box-shadow: 0 0 12px #000000;\n box-shadow: 0 0 12px #000000;\n opacity: 1;\n cursor: pointer; }\n .toast-container > .toast-info {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=\") !important; }\n .toast-container > .toast-error {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=\") !important; }\n .toast-container > .toast-success {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==\") !important; }\n .toast-container > .toast-warning {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=\") !important; }\n .toast-container.toast-top-center > div,\n .toast-container.toast-bottom-center > div {\n width: 300px;\n margin-left: auto;\n margin-right: auto; }\n .toast-container.toast-top-full-width > div,\n .toast-container.toast-bottom-full-width > div {\n width: 96%;\n margin-left: auto;\n margin-right: auto; }\n\n.toast {\n background-color: #030303; }\n\n.toast-success {\n background-color: #51A351; }\n\n.toast-error {\n background-color: #BD362F; }\n\n.toast-info {\n background-color: #2F96B4; }\n\n.toast-warning {\n background-color: #F89406; }\n\n.toast-progress {\n position: absolute;\n left: 0;\n bottom: 0;\n height: 4px;\n background-color: #000000;\n opacity: 0.4; }\n\n/*Responsive Design*/\n@media all and (max-width: 240px) {\n .toast-container > div {\n padding: 8px 8px 8px 50px;\n width: 11em; }\n .toast-container .toast-close-button {\n right: -0.2em;\n top: -0.2em; } }\n\n@media all and (min-width: 241px) and (max-width: 480px) {\n .toast-container > div {\n padding: 8px 8px 8px 50px;\n width: 18em; }\n .toast-container .toast-close-button {\n right: -0.2em;\n top: -0.2em; } }\n\n@media all and (min-width: 481px) and (max-width: 768px) {\n .toast-container > div {\n padding: 15px 15px 15px 50px;\n width: 25em; } }\n", ""]);
|
||
|
||
// exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-0086b528\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientFilters.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(false);
|
||
// imports
|
||
|
||
|
||
// module
|
||
exports.push([module.i, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ""]);
|
||
|
||
// exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-15965e3b\",\"scoped\":true,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./node_modules/vuetable-2/src/components/Vuetable.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(false);
|
||
// imports
|
||
|
||
|
||
// module
|
||
exports.push([module.i, "\n[v-cloak][data-v-15965e3b] {\n display: none;\n}\n.vuetable th.sortable[data-v-15965e3b]:hover {\n color: #2185d0;\n cursor: pointer;\n}\n.vuetable-body-wrapper[data-v-15965e3b] {\n position:relative;\n overflow-y:auto;\n}\n.vuetable-head-wrapper[data-v-15965e3b] {\n overflow-x: hidden;\n}\n.vuetable-actions[data-v-15965e3b] {\n width: 15%;\n padding: 12px 0px;\n text-align: center;\n}\n.vuetable-pagination[data-v-15965e3b] {\n background: #f9fafb !important;\n}\n.vuetable-pagination-info[data-v-15965e3b] {\n margin-top: auto;\n margin-bottom: auto;\n}\n.vuetable-empty-result[data-v-15965e3b] {\n text-align: center;\n}\n.vuetable-clip-text[data-v-15965e3b] {\n white-space: pre-wrap;\n text-overflow: ellipsis;\n overflow: hidden;\n display: block;\n}\n.vuetable-semantic-no-top[data-v-15965e3b] {\n border-top:none !important;\n margin-top:0 !important;\n}\n.vuetable-fixed-layout[data-v-15965e3b] {\n table-layout: fixed;\n}\n.vuetable-gutter-col[data-v-15965e3b] {\n padding: 0 !important;\n border-left: none !important;\n border-right: none !important;\n}\n", ""]);
|
||
|
||
// exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-1a665214\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/util/VueListActions.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(false);
|
||
// imports
|
||
|
||
|
||
// module
|
||
exports.push([module.i, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ""]);
|
||
|
||
// exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-3cd1b306\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientList.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(false);
|
||
// imports
|
||
|
||
|
||
// module
|
||
exports.push([module.i, "\n.pagination {\n margin: 0;\n float: right;\n}\n.pagination a.page {\n border: 1px solid lightgray;\n border-radius: 3px;\n padding: 5px 10px;\n margin-right: 2px;\n}\n.pagination a.page.active {\n color: white;\n background-color: #337ab7;\n border: 1px solid lightgray;\n border-radius: 3px;\n padding: 5px 10px;\n margin-right: 2px;\n}\n.pagination a.btn-nav {\n border: 1px solid lightgray;\n border-radius: 3px;\n padding: 5px 7px;\n margin-right: 2px;\n}\n.pagination a.btn-nav.disabled {\n color: lightgray;\n border: 1px solid lightgray;\n border-radius: 3px;\n padding: 5px 7px;\n margin-right: 2px;\n cursor: not-allowed;\n}\n.pagination-info {\n float: left;\n}\nth {\n background: #777777;\n color: #fff;\n}\n.sortable th i:hover {\n color: #fff;\n}\n\n", ""]);
|
||
|
||
// exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=1!./resources/js/src/components/util/VuetableMultiSelect.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(false);
|
||
// imports
|
||
|
||
|
||
// module
|
||
exports.push([module.i, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", ""]);
|
||
|
||
// exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-multiselect/dist/vue-multiselect.min.css":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(false);
|
||
// imports
|
||
|
||
|
||
// module
|
||
exports.push([module.i, "\nfieldset[disabled] .multiselect{pointer-events:none\n}\n.multiselect__spinner{position:absolute;right:1px;top:1px;width:48px;height:35px;background:#fff;display:block\n}\n.multiselect__spinner:after,.multiselect__spinner:before{position:absolute;content:\"\";top:50%;left:50%;margin:-8px 0 0 -8px;width:16px;height:16px;border-radius:100%;border-color:#41b883 transparent transparent;border-style:solid;border-width:2px;box-shadow:0 0 0 1px transparent\n}\n.multiselect__spinner:before{animation:a 2.4s cubic-bezier(.41,.26,.2,.62);animation-iteration-count:infinite\n}\n.multiselect__spinner:after{animation:a 2.4s cubic-bezier(.51,.09,.21,.8);animation-iteration-count:infinite\n}\n.multiselect__loading-enter-active,.multiselect__loading-leave-active{transition:opacity .4s ease-in-out;opacity:1\n}\n.multiselect__loading-enter,.multiselect__loading-leave-active{opacity:0\n}\n.multiselect,.multiselect__input,.multiselect__single{font-family:inherit;font-size:16px;-ms-touch-action:manipulation;touch-action:manipulation\n}\n.multiselect{box-sizing:content-box;display:block;position:relative;width:100%;min-height:40px;text-align:left;color:#35495e\n}\n.multiselect *{box-sizing:border-box\n}\n.multiselect:focus{outline:none\n}\n.multiselect--disabled{opacity:.6\n}\n.multiselect--active{z-index:1\n}\n.multiselect--active:not(.multiselect--above) .multiselect__current,.multiselect--active:not(.multiselect--above) .multiselect__input,.multiselect--active:not(.multiselect--above) .multiselect__tags{border-bottom-left-radius:0;border-bottom-right-radius:0\n}\n.multiselect--active .multiselect__select{transform:rotate(180deg)\n}\n.multiselect--above.multiselect--active .multiselect__current,.multiselect--above.multiselect--active .multiselect__input,.multiselect--above.multiselect--active .multiselect__tags{border-top-left-radius:0;border-top-right-radius:0\n}\n.multiselect__input,.multiselect__single{position:relative;display:inline-block;min-height:20px;line-height:20px;border:none;border-radius:5px;background:#fff;padding:0 0 0 5px;width:100%;transition:border .1s ease;box-sizing:border-box;margin-bottom:8px;vertical-align:top\n}\n.multiselect__input:-ms-input-placeholder{color:#35495e\n}\n.multiselect__input::placeholder{color:#35495e\n}\n.multiselect__tag~.multiselect__input,.multiselect__tag~.multiselect__single{width:auto\n}\n.multiselect__input:hover,.multiselect__single:hover{border-color:#cfcfcf\n}\n.multiselect__input:focus,.multiselect__single:focus{border-color:#a8a8a8;outline:none\n}\n.multiselect__single{padding-left:5px;margin-bottom:8px\n}\n.multiselect__tags-wrap{display:inline\n}\n.multiselect__tags{min-height:40px;display:block;padding:8px 40px 0 8px;border-radius:5px;border:1px solid #e8e8e8;background:#fff;font-size:14px\n}\n.multiselect__tag{position:relative;display:inline-block;padding:4px 26px 4px 10px;border-radius:5px;margin-right:10px;color:#fff;line-height:1;background:#41b883;margin-bottom:5px;white-space:nowrap;overflow:hidden;max-width:100%;text-overflow:ellipsis\n}\n.multiselect__tag-icon{cursor:pointer;margin-left:7px;position:absolute;right:0;top:0;bottom:0;font-weight:700;font-style:normal;width:22px;text-align:center;line-height:22px;transition:all .2s ease;border-radius:5px\n}\n.multiselect__tag-icon:after{content:\"\\D7\";color:#266d4d;font-size:14px\n}\n.multiselect__tag-icon:focus,.multiselect__tag-icon:hover{background:#369a6e\n}\n.multiselect__tag-icon:focus:after,.multiselect__tag-icon:hover:after{color:#fff\n}\n.multiselect__current{min-height:40px;overflow:hidden;padding:8px 12px 0;padding-right:30px;white-space:nowrap;border-radius:5px;border:1px solid #e8e8e8\n}\n.multiselect__current,.multiselect__select{line-height:16px;box-sizing:border-box;display:block;margin:0;text-decoration:none;cursor:pointer\n}\n.multiselect__select{position:absolute;width:40px;height:38px;right:1px;top:1px;padding:4px 8px;text-align:center;transition:transform .2s ease\n}\n.multiselect__select:before{position:relative;right:0;top:65%;color:#999;margin-top:4px;border-style:solid;border-width:5px 5px 0;border-color:#999 transparent transparent;content:\"\"\n}\n.multiselect__placeholder{color:#adadad;display:inline-block;margin-bottom:10px;padding-top:2px\n}\n.multiselect--active .multiselect__placeholder{display:none\n}\n.multiselect__content-wrapper{position:absolute;display:block;background:#fff;width:100%;max-height:240px;overflow:auto;border:1px solid #e8e8e8;border-top:none;border-bottom-left-radius:5px;border-bottom-right-radius:5px;z-index:1;-webkit-overflow-scrolling:touch\n}\n.multiselect__content{list-style:none;display:inline-block;padding:0;margin:0;min-width:100%;vertical-align:top\n}\n.multiselect--above .multiselect__content-wrapper{bottom:100%;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom:none;border-top:1px solid #e8e8e8\n}\n.multiselect__content::webkit-scrollbar{display:none\n}\n.multiselect__element{display:block\n}\n.multiselect__option{display:block;padding:12px;min-height:40px;line-height:16px;text-decoration:none;text-transform:none;vertical-align:middle;position:relative;cursor:pointer;white-space:nowrap\n}\n.multiselect__option:after{top:0;right:0;position:absolute;line-height:40px;padding-right:12px;padding-left:20px;font-size:13px\n}\n.multiselect__option--highlight{background:#41b883;outline:none;color:#fff\n}\n.multiselect__option--highlight:after{content:attr(data-select);background:#41b883;color:#fff\n}\n.multiselect__option--selected{background:#f3f3f3;color:#35495e;font-weight:700\n}\n.multiselect__option--selected:after{content:attr(data-selected);color:silver\n}\n.multiselect__option--selected.multiselect__option--highlight{background:#ff6a6a;color:#fff\n}\n.multiselect__option--selected.multiselect__option--highlight:after{background:#ff6a6a;content:attr(data-deselect);color:#fff\n}\n.multiselect--disabled{background:#ededed;pointer-events:none\n}\n.multiselect--disabled .multiselect__current,.multiselect--disabled .multiselect__select{background:#ededed;color:#a6a6a6\n}\n.multiselect__option--disabled{background:#ededed!important;color:#a6a6a6!important;cursor:text;pointer-events:none\n}\n.multiselect__option--group{background:#ededed;color:#35495e\n}\n.multiselect__option--group.multiselect__option--highlight{background:#35495e;color:#fff\n}\n.multiselect__option--group.multiselect__option--highlight:after{background:#35495e\n}\n.multiselect__option--disabled.multiselect__option--highlight{background:#dedede\n}\n.multiselect__option--group-selected.multiselect__option--highlight{background:#ff6a6a;color:#fff\n}\n.multiselect__option--group-selected.multiselect__option--highlight:after{background:#ff6a6a;content:attr(data-deselect);color:#fff\n}\n.multiselect-enter-active,.multiselect-leave-active{transition:all .15s ease\n}\n.multiselect-enter,.multiselect-leave-active{opacity:0\n}\n.multiselect__strong{margin-bottom:8px;line-height:20px;display:inline-block;vertical-align:top\n}\n[dir=rtl] .multiselect{text-align:right\n}\n[dir=rtl] .multiselect__select{right:auto;left:1px\n}\n[dir=rtl] .multiselect__tags{padding:8px 8px 0 40px\n}\n[dir=rtl] .multiselect__content{text-align:right\n}\n[dir=rtl] .multiselect__option:after{right:auto;left:0\n}\n[dir=rtl] .multiselect__clear{right:auto;left:12px\n}\n[dir=rtl] .multiselect__spinner{right:auto;left:1px\n}\n@keyframes a{\n0%{transform:rotate(0)\n}\nto{transform:rotate(2turn)\n}\n}", ""]);
|
||
|
||
// exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-be66a0f4\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/util/VuetableFilterBar.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(false);
|
||
// imports
|
||
|
||
|
||
// module
|
||
exports.push([module.i, "\n.form-inline > * {\n margin:5px 10px;\n}\n.form-control {\n min-height: 40px;\n}\n", ""]);
|
||
|
||
// exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-d9a40d24\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientActions.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
exports = module.exports = __webpack_require__("./node_modules/css-loader/lib/css-base.js")(false);
|
||
// imports
|
||
|
||
|
||
// module
|
||
exports.push([module.i, "\n.custom-actions button.ui.button {\n padding: 8px 8px;\n}\n.custom-actions button.ui.button > i.icon {\n margin: auto !important;\n}\n", ""]);
|
||
|
||
// exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/css-loader/lib/css-base.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
/*
|
||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||
Author Tobias Koppers @sokra
|
||
*/
|
||
// css base code, injected by the css-loader
|
||
module.exports = function(useSourceMap) {
|
||
var list = [];
|
||
|
||
// return the list of modules as css string
|
||
list.toString = function toString() {
|
||
return this.map(function (item) {
|
||
var content = cssWithMappingToString(item, useSourceMap);
|
||
if(item[2]) {
|
||
return "@media " + item[2] + "{" + content + "}";
|
||
} else {
|
||
return content;
|
||
}
|
||
}).join("");
|
||
};
|
||
|
||
// import a list of modules into the list
|
||
list.i = function(modules, mediaQuery) {
|
||
if(typeof modules === "string")
|
||
modules = [[null, modules, ""]];
|
||
var alreadyImportedModules = {};
|
||
for(var i = 0; i < this.length; i++) {
|
||
var id = this[i][0];
|
||
if(typeof id === "number")
|
||
alreadyImportedModules[id] = true;
|
||
}
|
||
for(i = 0; i < modules.length; i++) {
|
||
var item = modules[i];
|
||
// skip already imported module
|
||
// this implementation is not 100% perfect for weird media query combinations
|
||
// when a module is imported multiple times with different media queries.
|
||
// I hope this will never occur (Hey this way we have smaller bundles)
|
||
if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
|
||
if(mediaQuery && !item[2]) {
|
||
item[2] = mediaQuery;
|
||
} else if(mediaQuery) {
|
||
item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
|
||
}
|
||
list.push(item);
|
||
}
|
||
}
|
||
};
|
||
return list;
|
||
};
|
||
|
||
function cssWithMappingToString(item, useSourceMap) {
|
||
var content = item[1] || '';
|
||
var cssMapping = item[3];
|
||
if (!cssMapping) {
|
||
return content;
|
||
}
|
||
|
||
if (useSourceMap && typeof btoa === 'function') {
|
||
var sourceMapping = toComment(cssMapping);
|
||
var sourceURLs = cssMapping.sources.map(function (source) {
|
||
return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'
|
||
});
|
||
|
||
return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
|
||
}
|
||
|
||
return [content].join('\n');
|
||
}
|
||
|
||
// Adapted from convert-source-map (MIT)
|
||
function toComment(sourceMap) {
|
||
// eslint-disable-next-line no-undef
|
||
var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
|
||
var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;
|
||
|
||
return '/*# ' + data + ' */';
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/is-buffer/index.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
/*!
|
||
* Determine if an object is a Buffer
|
||
*
|
||
* @author Feross Aboukhadijeh <https://feross.org>
|
||
* @license MIT
|
||
*/
|
||
|
||
// The _isBuffer check is for Safari 5-7 support, because it's missing
|
||
// Object.prototype.constructor. Remove this eventually
|
||
module.exports = function (obj) {
|
||
return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
|
||
}
|
||
|
||
function isBuffer (obj) {
|
||
return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
|
||
}
|
||
|
||
// For Node v0.10 support. Remove this eventually.
|
||
function isSlowBuffer (obj) {
|
||
return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/lodash/lodash.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**
|
||
* @license
|
||
* Lodash <https://lodash.com/>
|
||
* Copyright JS Foundation and other contributors <https://js.foundation/>
|
||
* Released under MIT license <https://lodash.com/license>
|
||
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
||
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
||
*/
|
||
;(function() {
|
||
|
||
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
|
||
var undefined;
|
||
|
||
/** Used as the semantic version number. */
|
||
var VERSION = '4.17.11';
|
||
|
||
/** Used as the size to enable large array optimizations. */
|
||
var LARGE_ARRAY_SIZE = 200;
|
||
|
||
/** Error message constants. */
|
||
var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
|
||
FUNC_ERROR_TEXT = 'Expected a function';
|
||
|
||
/** Used to stand-in for `undefined` hash values. */
|
||
var HASH_UNDEFINED = '__lodash_hash_undefined__';
|
||
|
||
/** Used as the maximum memoize cache size. */
|
||
var MAX_MEMOIZE_SIZE = 500;
|
||
|
||
/** Used as the internal argument placeholder. */
|
||
var PLACEHOLDER = '__lodash_placeholder__';
|
||
|
||
/** Used to compose bitmasks for cloning. */
|
||
var CLONE_DEEP_FLAG = 1,
|
||
CLONE_FLAT_FLAG = 2,
|
||
CLONE_SYMBOLS_FLAG = 4;
|
||
|
||
/** Used to compose bitmasks for value comparisons. */
|
||
var COMPARE_PARTIAL_FLAG = 1,
|
||
COMPARE_UNORDERED_FLAG = 2;
|
||
|
||
/** Used to compose bitmasks for function metadata. */
|
||
var WRAP_BIND_FLAG = 1,
|
||
WRAP_BIND_KEY_FLAG = 2,
|
||
WRAP_CURRY_BOUND_FLAG = 4,
|
||
WRAP_CURRY_FLAG = 8,
|
||
WRAP_CURRY_RIGHT_FLAG = 16,
|
||
WRAP_PARTIAL_FLAG = 32,
|
||
WRAP_PARTIAL_RIGHT_FLAG = 64,
|
||
WRAP_ARY_FLAG = 128,
|
||
WRAP_REARG_FLAG = 256,
|
||
WRAP_FLIP_FLAG = 512;
|
||
|
||
/** Used as default options for `_.truncate`. */
|
||
var DEFAULT_TRUNC_LENGTH = 30,
|
||
DEFAULT_TRUNC_OMISSION = '...';
|
||
|
||
/** Used to detect hot functions by number of calls within a span of milliseconds. */
|
||
var HOT_COUNT = 800,
|
||
HOT_SPAN = 16;
|
||
|
||
/** Used to indicate the type of lazy iteratees. */
|
||
var LAZY_FILTER_FLAG = 1,
|
||
LAZY_MAP_FLAG = 2,
|
||
LAZY_WHILE_FLAG = 3;
|
||
|
||
/** Used as references for various `Number` constants. */
|
||
var INFINITY = 1 / 0,
|
||
MAX_SAFE_INTEGER = 9007199254740991,
|
||
MAX_INTEGER = 1.7976931348623157e+308,
|
||
NAN = 0 / 0;
|
||
|
||
/** Used as references for the maximum length and index of an array. */
|
||
var MAX_ARRAY_LENGTH = 4294967295,
|
||
MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
|
||
HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
|
||
|
||
/** Used to associate wrap methods with their bit flags. */
|
||
var wrapFlags = [
|
||
['ary', WRAP_ARY_FLAG],
|
||
['bind', WRAP_BIND_FLAG],
|
||
['bindKey', WRAP_BIND_KEY_FLAG],
|
||
['curry', WRAP_CURRY_FLAG],
|
||
['curryRight', WRAP_CURRY_RIGHT_FLAG],
|
||
['flip', WRAP_FLIP_FLAG],
|
||
['partial', WRAP_PARTIAL_FLAG],
|
||
['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
|
||
['rearg', WRAP_REARG_FLAG]
|
||
];
|
||
|
||
/** `Object#toString` result references. */
|
||
var argsTag = '[object Arguments]',
|
||
arrayTag = '[object Array]',
|
||
asyncTag = '[object AsyncFunction]',
|
||
boolTag = '[object Boolean]',
|
||
dateTag = '[object Date]',
|
||
domExcTag = '[object DOMException]',
|
||
errorTag = '[object Error]',
|
||
funcTag = '[object Function]',
|
||
genTag = '[object GeneratorFunction]',
|
||
mapTag = '[object Map]',
|
||
numberTag = '[object Number]',
|
||
nullTag = '[object Null]',
|
||
objectTag = '[object Object]',
|
||
promiseTag = '[object Promise]',
|
||
proxyTag = '[object Proxy]',
|
||
regexpTag = '[object RegExp]',
|
||
setTag = '[object Set]',
|
||
stringTag = '[object String]',
|
||
symbolTag = '[object Symbol]',
|
||
undefinedTag = '[object Undefined]',
|
||
weakMapTag = '[object WeakMap]',
|
||
weakSetTag = '[object WeakSet]';
|
||
|
||
var arrayBufferTag = '[object ArrayBuffer]',
|
||
dataViewTag = '[object DataView]',
|
||
float32Tag = '[object Float32Array]',
|
||
float64Tag = '[object Float64Array]',
|
||
int8Tag = '[object Int8Array]',
|
||
int16Tag = '[object Int16Array]',
|
||
int32Tag = '[object Int32Array]',
|
||
uint8Tag = '[object Uint8Array]',
|
||
uint8ClampedTag = '[object Uint8ClampedArray]',
|
||
uint16Tag = '[object Uint16Array]',
|
||
uint32Tag = '[object Uint32Array]';
|
||
|
||
/** Used to match empty string literals in compiled template source. */
|
||
var reEmptyStringLeading = /\b__p \+= '';/g,
|
||
reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
|
||
reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
|
||
|
||
/** Used to match HTML entities and HTML characters. */
|
||
var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
|
||
reUnescapedHtml = /[&<>"']/g,
|
||
reHasEscapedHtml = RegExp(reEscapedHtml.source),
|
||
reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
|
||
|
||
/** Used to match template delimiters. */
|
||
var reEscape = /<%-([\s\S]+?)%>/g,
|
||
reEvaluate = /<%([\s\S]+?)%>/g,
|
||
reInterpolate = /<%=([\s\S]+?)%>/g;
|
||
|
||
/** Used to match property names within property paths. */
|
||
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
|
||
reIsPlainProp = /^\w*$/,
|
||
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
|
||
|
||
/**
|
||
* Used to match `RegExp`
|
||
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
|
||
*/
|
||
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
|
||
reHasRegExpChar = RegExp(reRegExpChar.source);
|
||
|
||
/** Used to match leading and trailing whitespace. */
|
||
var reTrim = /^\s+|\s+$/g,
|
||
reTrimStart = /^\s+/,
|
||
reTrimEnd = /\s+$/;
|
||
|
||
/** Used to match wrap detail comments. */
|
||
var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
|
||
reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
|
||
reSplitDetails = /,? & /;
|
||
|
||
/** Used to match words composed of alphanumeric characters. */
|
||
var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
|
||
|
||
/** Used to match backslashes in property paths. */
|
||
var reEscapeChar = /\\(\\)?/g;
|
||
|
||
/**
|
||
* Used to match
|
||
* [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
|
||
*/
|
||
var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
|
||
|
||
/** Used to match `RegExp` flags from their coerced string values. */
|
||
var reFlags = /\w*$/;
|
||
|
||
/** Used to detect bad signed hexadecimal string values. */
|
||
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
|
||
|
||
/** Used to detect binary string values. */
|
||
var reIsBinary = /^0b[01]+$/i;
|
||
|
||
/** Used to detect host constructors (Safari). */
|
||
var reIsHostCtor = /^\[object .+?Constructor\]$/;
|
||
|
||
/** Used to detect octal string values. */
|
||
var reIsOctal = /^0o[0-7]+$/i;
|
||
|
||
/** Used to detect unsigned integer values. */
|
||
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
||
|
||
/** Used to match Latin Unicode letters (excluding mathematical operators). */
|
||
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
|
||
|
||
/** Used to ensure capturing order of template delimiters. */
|
||
var reNoMatch = /($^)/;
|
||
|
||
/** Used to match unescaped characters in compiled string literals. */
|
||
var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
|
||
|
||
/** Used to compose unicode character classes. */
|
||
var rsAstralRange = '\\ud800-\\udfff',
|
||
rsComboMarksRange = '\\u0300-\\u036f',
|
||
reComboHalfMarksRange = '\\ufe20-\\ufe2f',
|
||
rsComboSymbolsRange = '\\u20d0-\\u20ff',
|
||
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
|
||
rsDingbatRange = '\\u2700-\\u27bf',
|
||
rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
|
||
rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
|
||
rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
|
||
rsPunctuationRange = '\\u2000-\\u206f',
|
||
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',
|
||
rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
|
||
rsVarRange = '\\ufe0e\\ufe0f',
|
||
rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
|
||
|
||
/** Used to compose unicode capture groups. */
|
||
var rsApos = "['\u2019]",
|
||
rsAstral = '[' + rsAstralRange + ']',
|
||
rsBreak = '[' + rsBreakRange + ']',
|
||
rsCombo = '[' + rsComboRange + ']',
|
||
rsDigits = '\\d+',
|
||
rsDingbat = '[' + rsDingbatRange + ']',
|
||
rsLower = '[' + rsLowerRange + ']',
|
||
rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
|
||
rsFitz = '\\ud83c[\\udffb-\\udfff]',
|
||
rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
|
||
rsNonAstral = '[^' + rsAstralRange + ']',
|
||
rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
|
||
rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
|
||
rsUpper = '[' + rsUpperRange + ']',
|
||
rsZWJ = '\\u200d';
|
||
|
||
/** Used to compose unicode regexes. */
|
||
var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
|
||
rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
|
||
rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
|
||
rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
|
||
reOptMod = rsModifier + '?',
|
||
rsOptVar = '[' + rsVarRange + ']?',
|
||
rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
|
||
rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
|
||
rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
|
||
rsSeq = rsOptVar + reOptMod + rsOptJoin,
|
||
rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
|
||
rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
|
||
|
||
/** Used to match apostrophes. */
|
||
var reApos = RegExp(rsApos, 'g');
|
||
|
||
/**
|
||
* Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
|
||
* [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
|
||
*/
|
||
var reComboMark = RegExp(rsCombo, 'g');
|
||
|
||
/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
|
||
var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
|
||
|
||
/** Used to match complex or compound words. */
|
||
var reUnicodeWord = RegExp([
|
||
rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
|
||
rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
|
||
rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
|
||
rsUpper + '+' + rsOptContrUpper,
|
||
rsOrdUpper,
|
||
rsOrdLower,
|
||
rsDigits,
|
||
rsEmoji
|
||
].join('|'), 'g');
|
||
|
||
/** 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/). */
|
||
var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
|
||
|
||
/** Used to detect strings that need a more robust regexp to match words. */
|
||
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 ]/;
|
||
|
||
/** Used to assign default `context` object properties. */
|
||
var contextProps = [
|
||
'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
|
||
'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
|
||
'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
|
||
'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
|
||
'_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
|
||
];
|
||
|
||
/** Used to make template sourceURLs easier to identify. */
|
||
var templateCounter = -1;
|
||
|
||
/** Used to identify `toStringTag` values of typed arrays. */
|
||
var typedArrayTags = {};
|
||
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
|
||
typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
|
||
typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
|
||
typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
|
||
typedArrayTags[uint32Tag] = true;
|
||
typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
|
||
typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
|
||
typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
|
||
typedArrayTags[errorTag] = typedArrayTags[funcTag] =
|
||
typedArrayTags[mapTag] = typedArrayTags[numberTag] =
|
||
typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
|
||
typedArrayTags[setTag] = typedArrayTags[stringTag] =
|
||
typedArrayTags[weakMapTag] = false;
|
||
|
||
/** Used to identify `toStringTag` values supported by `_.clone`. */
|
||
var cloneableTags = {};
|
||
cloneableTags[argsTag] = cloneableTags[arrayTag] =
|
||
cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
|
||
cloneableTags[boolTag] = cloneableTags[dateTag] =
|
||
cloneableTags[float32Tag] = cloneableTags[float64Tag] =
|
||
cloneableTags[int8Tag] = cloneableTags[int16Tag] =
|
||
cloneableTags[int32Tag] = cloneableTags[mapTag] =
|
||
cloneableTags[numberTag] = cloneableTags[objectTag] =
|
||
cloneableTags[regexpTag] = cloneableTags[setTag] =
|
||
cloneableTags[stringTag] = cloneableTags[symbolTag] =
|
||
cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
|
||
cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
|
||
cloneableTags[errorTag] = cloneableTags[funcTag] =
|
||
cloneableTags[weakMapTag] = false;
|
||
|
||
/** Used to map Latin Unicode letters to basic Latin letters. */
|
||
var deburredLetters = {
|
||
// Latin-1 Supplement block.
|
||
'\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
|
||
'\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
|
||
'\xc7': 'C', '\xe7': 'c',
|
||
'\xd0': 'D', '\xf0': 'd',
|
||
'\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
|
||
'\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
|
||
'\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
|
||
'\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
|
||
'\xd1': 'N', '\xf1': 'n',
|
||
'\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
|
||
'\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
|
||
'\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
|
||
'\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
|
||
'\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
|
||
'\xc6': 'Ae', '\xe6': 'ae',
|
||
'\xde': 'Th', '\xfe': 'th',
|
||
'\xdf': 'ss',
|
||
// Latin Extended-A block.
|
||
'\u0100': 'A', '\u0102': 'A', '\u0104': 'A',
|
||
'\u0101': 'a', '\u0103': 'a', '\u0105': 'a',
|
||
'\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
|
||
'\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
|
||
'\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
|
||
'\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
|
||
'\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
|
||
'\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
|
||
'\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
|
||
'\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
|
||
'\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
|
||
'\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
|
||
'\u0134': 'J', '\u0135': 'j',
|
||
'\u0136': 'K', '\u0137': 'k', '\u0138': 'k',
|
||
'\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
|
||
'\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
|
||
'\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
|
||
'\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
|
||
'\u014c': 'O', '\u014e': 'O', '\u0150': 'O',
|
||
'\u014d': 'o', '\u014f': 'o', '\u0151': 'o',
|
||
'\u0154': 'R', '\u0156': 'R', '\u0158': 'R',
|
||
'\u0155': 'r', '\u0157': 'r', '\u0159': 'r',
|
||
'\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
|
||
'\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's',
|
||
'\u0162': 'T', '\u0164': 'T', '\u0166': 'T',
|
||
'\u0163': 't', '\u0165': 't', '\u0167': 't',
|
||
'\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
|
||
'\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
|
||
'\u0174': 'W', '\u0175': 'w',
|
||
'\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y',
|
||
'\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z',
|
||
'\u017a': 'z', '\u017c': 'z', '\u017e': 'z',
|
||
'\u0132': 'IJ', '\u0133': 'ij',
|
||
'\u0152': 'Oe', '\u0153': 'oe',
|
||
'\u0149': "'n", '\u017f': 's'
|
||
};
|
||
|
||
/** Used to map characters to HTML entities. */
|
||
var htmlEscapes = {
|
||
'&': '&',
|
||
'<': '<',
|
||
'>': '>',
|
||
'"': '"',
|
||
"'": '''
|
||
};
|
||
|
||
/** Used to map HTML entities to characters. */
|
||
var htmlUnescapes = {
|
||
'&': '&',
|
||
'<': '<',
|
||
'>': '>',
|
||
'"': '"',
|
||
''': "'"
|
||
};
|
||
|
||
/** Used to escape characters for inclusion in compiled string literals. */
|
||
var stringEscapes = {
|
||
'\\': '\\',
|
||
"'": "'",
|
||
'\n': 'n',
|
||
'\r': 'r',
|
||
'\u2028': 'u2028',
|
||
'\u2029': 'u2029'
|
||
};
|
||
|
||
/** Built-in method references without a dependency on `root`. */
|
||
var freeParseFloat = parseFloat,
|
||
freeParseInt = parseInt;
|
||
|
||
/** Detect free variable `global` from Node.js. */
|
||
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
|
||
|
||
/** Detect free variable `self`. */
|
||
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
|
||
|
||
/** Used as a reference to the global object. */
|
||
var root = freeGlobal || freeSelf || Function('return this')();
|
||
|
||
/** Detect free variable `exports`. */
|
||
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
|
||
|
||
/** Detect free variable `module`. */
|
||
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
|
||
|
||
/** Detect the popular CommonJS extension `module.exports`. */
|
||
var moduleExports = freeModule && freeModule.exports === freeExports;
|
||
|
||
/** Detect free variable `process` from Node.js. */
|
||
var freeProcess = moduleExports && freeGlobal.process;
|
||
|
||
/** Used to access faster Node.js helpers. */
|
||
var nodeUtil = (function() {
|
||
try {
|
||
// Use `util.types` for Node.js 10+.
|
||
var types = freeModule && freeModule.require && freeModule.require('util').types;
|
||
|
||
if (types) {
|
||
return types;
|
||
}
|
||
|
||
// Legacy `process.binding('util')` for Node.js < 10.
|
||
return freeProcess && freeProcess.binding && freeProcess.binding('util');
|
||
} catch (e) {}
|
||
}());
|
||
|
||
/* Node.js helper references. */
|
||
var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
|
||
nodeIsDate = nodeUtil && nodeUtil.isDate,
|
||
nodeIsMap = nodeUtil && nodeUtil.isMap,
|
||
nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
|
||
nodeIsSet = nodeUtil && nodeUtil.isSet,
|
||
nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* A faster alternative to `Function#apply`, this function invokes `func`
|
||
* with the `this` binding of `thisArg` and the arguments of `args`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to invoke.
|
||
* @param {*} thisArg The `this` binding of `func`.
|
||
* @param {Array} args The arguments to invoke `func` with.
|
||
* @returns {*} Returns the result of `func`.
|
||
*/
|
||
function apply(func, thisArg, args) {
|
||
switch (args.length) {
|
||
case 0: return func.call(thisArg);
|
||
case 1: return func.call(thisArg, args[0]);
|
||
case 2: return func.call(thisArg, args[0], args[1]);
|
||
case 3: return func.call(thisArg, args[0], args[1], args[2]);
|
||
}
|
||
return func.apply(thisArg, args);
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseAggregator` for arrays.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} setter The function to set `accumulator` values.
|
||
* @param {Function} iteratee The iteratee to transform keys.
|
||
* @param {Object} accumulator The initial aggregated object.
|
||
* @returns {Function} Returns `accumulator`.
|
||
*/
|
||
function arrayAggregator(array, setter, iteratee, accumulator) {
|
||
var index = -1,
|
||
length = array == null ? 0 : array.length;
|
||
|
||
while (++index < length) {
|
||
var value = array[index];
|
||
setter(accumulator, value, iteratee(value), array);
|
||
}
|
||
return accumulator;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.forEach` for arrays without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function arrayEach(array, iteratee) {
|
||
var index = -1,
|
||
length = array == null ? 0 : array.length;
|
||
|
||
while (++index < length) {
|
||
if (iteratee(array[index], index, array) === false) {
|
||
break;
|
||
}
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.forEachRight` for arrays without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function arrayEachRight(array, iteratee) {
|
||
var length = array == null ? 0 : array.length;
|
||
|
||
while (length--) {
|
||
if (iteratee(array[length], length, array) === false) {
|
||
break;
|
||
}
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.every` for arrays without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} predicate The function invoked per iteration.
|
||
* @returns {boolean} Returns `true` if all elements pass the predicate check,
|
||
* else `false`.
|
||
*/
|
||
function arrayEvery(array, predicate) {
|
||
var index = -1,
|
||
length = array == null ? 0 : array.length;
|
||
|
||
while (++index < length) {
|
||
if (!predicate(array[index], index, array)) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.filter` for arrays without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} predicate The function invoked per iteration.
|
||
* @returns {Array} Returns the new filtered array.
|
||
*/
|
||
function arrayFilter(array, predicate) {
|
||
var index = -1,
|
||
length = array == null ? 0 : array.length,
|
||
resIndex = 0,
|
||
result = [];
|
||
|
||
while (++index < length) {
|
||
var value = array[index];
|
||
if (predicate(value, index, array)) {
|
||
result[resIndex++] = value;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.includes` for arrays without support for
|
||
* specifying an index to search from.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to inspect.
|
||
* @param {*} target The value to search for.
|
||
* @returns {boolean} Returns `true` if `target` is found, else `false`.
|
||
*/
|
||
function arrayIncludes(array, value) {
|
||
var length = array == null ? 0 : array.length;
|
||
return !!length && baseIndexOf(array, value, 0) > -1;
|
||
}
|
||
|
||
/**
|
||
* This function is like `arrayIncludes` except that it accepts a comparator.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to inspect.
|
||
* @param {*} target The value to search for.
|
||
* @param {Function} comparator The comparator invoked per element.
|
||
* @returns {boolean} Returns `true` if `target` is found, else `false`.
|
||
*/
|
||
function arrayIncludesWith(array, value, comparator) {
|
||
var index = -1,
|
||
length = array == null ? 0 : array.length;
|
||
|
||
while (++index < length) {
|
||
if (comparator(value, array[index])) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.map` for arrays without support for iteratee
|
||
* shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Array} Returns the new mapped array.
|
||
*/
|
||
function arrayMap(array, iteratee) {
|
||
var index = -1,
|
||
length = array == null ? 0 : array.length,
|
||
result = Array(length);
|
||
|
||
while (++index < length) {
|
||
result[index] = iteratee(array[index], index, array);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Appends the elements of `values` to `array`.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to modify.
|
||
* @param {Array} values The values to append.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function arrayPush(array, values) {
|
||
var index = -1,
|
||
length = values.length,
|
||
offset = array.length;
|
||
|
||
while (++index < length) {
|
||
array[offset + index] = values[index];
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.reduce` for arrays without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @param {*} [accumulator] The initial value.
|
||
* @param {boolean} [initAccum] Specify using the first element of `array` as
|
||
* the initial value.
|
||
* @returns {*} Returns the accumulated value.
|
||
*/
|
||
function arrayReduce(array, iteratee, accumulator, initAccum) {
|
||
var index = -1,
|
||
length = array == null ? 0 : array.length;
|
||
|
||
if (initAccum && length) {
|
||
accumulator = array[++index];
|
||
}
|
||
while (++index < length) {
|
||
accumulator = iteratee(accumulator, array[index], index, array);
|
||
}
|
||
return accumulator;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.reduceRight` for arrays without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @param {*} [accumulator] The initial value.
|
||
* @param {boolean} [initAccum] Specify using the last element of `array` as
|
||
* the initial value.
|
||
* @returns {*} Returns the accumulated value.
|
||
*/
|
||
function arrayReduceRight(array, iteratee, accumulator, initAccum) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (initAccum && length) {
|
||
accumulator = array[--length];
|
||
}
|
||
while (length--) {
|
||
accumulator = iteratee(accumulator, array[length], length, array);
|
||
}
|
||
return accumulator;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.some` for arrays without support for iteratee
|
||
* shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} [array] The array to iterate over.
|
||
* @param {Function} predicate The function invoked per iteration.
|
||
* @returns {boolean} Returns `true` if any element passes the predicate check,
|
||
* else `false`.
|
||
*/
|
||
function arraySome(array, predicate) {
|
||
var index = -1,
|
||
length = array == null ? 0 : array.length;
|
||
|
||
while (++index < length) {
|
||
if (predicate(array[index], index, array)) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Gets the size of an ASCII `string`.
|
||
*
|
||
* @private
|
||
* @param {string} string The string inspect.
|
||
* @returns {number} Returns the string size.
|
||
*/
|
||
var asciiSize = baseProperty('length');
|
||
|
||
/**
|
||
* Converts an ASCII `string` to an array.
|
||
*
|
||
* @private
|
||
* @param {string} string The string to convert.
|
||
* @returns {Array} Returns the converted array.
|
||
*/
|
||
function asciiToArray(string) {
|
||
return string.split('');
|
||
}
|
||
|
||
/**
|
||
* Splits an ASCII `string` into an array of its words.
|
||
*
|
||
* @private
|
||
* @param {string} The string to inspect.
|
||
* @returns {Array} Returns the words of `string`.
|
||
*/
|
||
function asciiWords(string) {
|
||
return string.match(reAsciiWord) || [];
|
||
}
|
||
|
||
/**
|
||
* The base implementation of methods like `_.findKey` and `_.findLastKey`,
|
||
* without support for iteratee shorthands, which iterates over `collection`
|
||
* using `eachFunc`.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to inspect.
|
||
* @param {Function} predicate The function invoked per iteration.
|
||
* @param {Function} eachFunc The function to iterate over `collection`.
|
||
* @returns {*} Returns the found element or its key, else `undefined`.
|
||
*/
|
||
function baseFindKey(collection, predicate, eachFunc) {
|
||
var result;
|
||
eachFunc(collection, function(value, key, collection) {
|
||
if (predicate(value, key, collection)) {
|
||
result = key;
|
||
return false;
|
||
}
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.findIndex` and `_.findLastIndex` without
|
||
* support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {Function} predicate The function invoked per iteration.
|
||
* @param {number} fromIndex The index to search from.
|
||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
*/
|
||
function baseFindIndex(array, predicate, fromIndex, fromRight) {
|
||
var length = array.length,
|
||
index = fromIndex + (fromRight ? 1 : -1);
|
||
|
||
while ((fromRight ? index-- : ++index < length)) {
|
||
if (predicate(array[index], index, array)) {
|
||
return index;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.indexOf` without `fromIndex` bounds checks.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} value The value to search for.
|
||
* @param {number} fromIndex The index to search from.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
*/
|
||
function baseIndexOf(array, value, fromIndex) {
|
||
return value === value
|
||
? strictIndexOf(array, value, fromIndex)
|
||
: baseFindIndex(array, baseIsNaN, fromIndex);
|
||
}
|
||
|
||
/**
|
||
* This function is like `baseIndexOf` except that it accepts a comparator.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} value The value to search for.
|
||
* @param {number} fromIndex The index to search from.
|
||
* @param {Function} comparator The comparator invoked per element.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
*/
|
||
function baseIndexOfWith(array, value, fromIndex, comparator) {
|
||
var index = fromIndex - 1,
|
||
length = array.length;
|
||
|
||
while (++index < length) {
|
||
if (comparator(array[index], value)) {
|
||
return index;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isNaN` without support for number objects.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
|
||
*/
|
||
function baseIsNaN(value) {
|
||
return value !== value;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.mean` and `_.meanBy` without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {number} Returns the mean.
|
||
*/
|
||
function baseMean(array, iteratee) {
|
||
var length = array == null ? 0 : array.length;
|
||
return length ? (baseSum(array, iteratee) / length) : NAN;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.property` without support for deep paths.
|
||
*
|
||
* @private
|
||
* @param {string} key The key of the property to get.
|
||
* @returns {Function} Returns the new accessor function.
|
||
*/
|
||
function baseProperty(key) {
|
||
return function(object) {
|
||
return object == null ? undefined : object[key];
|
||
};
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.propertyOf` without support for deep paths.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Function} Returns the new accessor function.
|
||
*/
|
||
function basePropertyOf(object) {
|
||
return function(key) {
|
||
return object == null ? undefined : object[key];
|
||
};
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.reduce` and `_.reduceRight`, without support
|
||
* for iteratee shorthands, which iterates over `collection` using `eachFunc`.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @param {*} accumulator The initial value.
|
||
* @param {boolean} initAccum Specify using the first or last element of
|
||
* `collection` as the initial value.
|
||
* @param {Function} eachFunc The function to iterate over `collection`.
|
||
* @returns {*} Returns the accumulated value.
|
||
*/
|
||
function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
|
||
eachFunc(collection, function(value, index, collection) {
|
||
accumulator = initAccum
|
||
? (initAccum = false, value)
|
||
: iteratee(accumulator, value, index, collection);
|
||
});
|
||
return accumulator;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.sortBy` which uses `comparer` to define the
|
||
* sort order of `array` and replaces criteria objects with their corresponding
|
||
* values.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to sort.
|
||
* @param {Function} comparer The function to define sort order.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function baseSortBy(array, comparer) {
|
||
var length = array.length;
|
||
|
||
array.sort(comparer);
|
||
while (length--) {
|
||
array[length] = array[length].value;
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.sum` and `_.sumBy` without support for
|
||
* iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {number} Returns the sum.
|
||
*/
|
||
function baseSum(array, iteratee) {
|
||
var result,
|
||
index = -1,
|
||
length = array.length;
|
||
|
||
while (++index < length) {
|
||
var current = iteratee(array[index]);
|
||
if (current !== undefined) {
|
||
result = result === undefined ? current : (result + current);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.times` without support for iteratee shorthands
|
||
* or max array length checks.
|
||
*
|
||
* @private
|
||
* @param {number} n The number of times to invoke `iteratee`.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Array} Returns the array of results.
|
||
*/
|
||
function baseTimes(n, iteratee) {
|
||
var index = -1,
|
||
result = Array(n);
|
||
|
||
while (++index < n) {
|
||
result[index] = iteratee(index);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
|
||
* of key-value pairs for `object` corresponding to the property names of `props`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {Array} props The property names to get values for.
|
||
* @returns {Object} Returns the key-value pairs.
|
||
*/
|
||
function baseToPairs(object, props) {
|
||
return arrayMap(props, function(key) {
|
||
return [key, object[key]];
|
||
});
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.unary` without support for storing metadata.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to cap arguments for.
|
||
* @returns {Function} Returns the new capped function.
|
||
*/
|
||
function baseUnary(func) {
|
||
return function(value) {
|
||
return func(value);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.values` and `_.valuesIn` which creates an
|
||
* array of `object` property values corresponding to the property names
|
||
* of `props`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {Array} props The property names to get values for.
|
||
* @returns {Object} Returns the array of property values.
|
||
*/
|
||
function baseValues(object, props) {
|
||
return arrayMap(props, function(key) {
|
||
return object[key];
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Checks if a `cache` value for `key` exists.
|
||
*
|
||
* @private
|
||
* @param {Object} cache The cache to query.
|
||
* @param {string} key The key of the entry to check.
|
||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||
*/
|
||
function cacheHas(cache, key) {
|
||
return cache.has(key);
|
||
}
|
||
|
||
/**
|
||
* Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
|
||
* that is not found in the character symbols.
|
||
*
|
||
* @private
|
||
* @param {Array} strSymbols The string symbols to inspect.
|
||
* @param {Array} chrSymbols The character symbols to find.
|
||
* @returns {number} Returns the index of the first unmatched string symbol.
|
||
*/
|
||
function charsStartIndex(strSymbols, chrSymbols) {
|
||
var index = -1,
|
||
length = strSymbols.length;
|
||
|
||
while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
|
||
return index;
|
||
}
|
||
|
||
/**
|
||
* Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
|
||
* that is not found in the character symbols.
|
||
*
|
||
* @private
|
||
* @param {Array} strSymbols The string symbols to inspect.
|
||
* @param {Array} chrSymbols The character symbols to find.
|
||
* @returns {number} Returns the index of the last unmatched string symbol.
|
||
*/
|
||
function charsEndIndex(strSymbols, chrSymbols) {
|
||
var index = strSymbols.length;
|
||
|
||
while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
|
||
return index;
|
||
}
|
||
|
||
/**
|
||
* Gets the number of `placeholder` occurrences in `array`.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} placeholder The placeholder to search for.
|
||
* @returns {number} Returns the placeholder count.
|
||
*/
|
||
function countHolders(array, placeholder) {
|
||
var length = array.length,
|
||
result = 0;
|
||
|
||
while (length--) {
|
||
if (array[length] === placeholder) {
|
||
++result;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
|
||
* letters to basic Latin letters.
|
||
*
|
||
* @private
|
||
* @param {string} letter The matched letter to deburr.
|
||
* @returns {string} Returns the deburred letter.
|
||
*/
|
||
var deburrLetter = basePropertyOf(deburredLetters);
|
||
|
||
/**
|
||
* Used by `_.escape` to convert characters to HTML entities.
|
||
*
|
||
* @private
|
||
* @param {string} chr The matched character to escape.
|
||
* @returns {string} Returns the escaped character.
|
||
*/
|
||
var escapeHtmlChar = basePropertyOf(htmlEscapes);
|
||
|
||
/**
|
||
* Used by `_.template` to escape characters for inclusion in compiled string literals.
|
||
*
|
||
* @private
|
||
* @param {string} chr The matched character to escape.
|
||
* @returns {string} Returns the escaped character.
|
||
*/
|
||
function escapeStringChar(chr) {
|
||
return '\\' + stringEscapes[chr];
|
||
}
|
||
|
||
/**
|
||
* Gets the value at `key` of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} [object] The object to query.
|
||
* @param {string} key The key of the property to get.
|
||
* @returns {*} Returns the property value.
|
||
*/
|
||
function getValue(object, key) {
|
||
return object == null ? undefined : object[key];
|
||
}
|
||
|
||
/**
|
||
* Checks if `string` contains Unicode symbols.
|
||
*
|
||
* @private
|
||
* @param {string} string The string to inspect.
|
||
* @returns {boolean} Returns `true` if a symbol is found, else `false`.
|
||
*/
|
||
function hasUnicode(string) {
|
||
return reHasUnicode.test(string);
|
||
}
|
||
|
||
/**
|
||
* Checks if `string` contains a word composed of Unicode symbols.
|
||
*
|
||
* @private
|
||
* @param {string} string The string to inspect.
|
||
* @returns {boolean} Returns `true` if a word is found, else `false`.
|
||
*/
|
||
function hasUnicodeWord(string) {
|
||
return reHasUnicodeWord.test(string);
|
||
}
|
||
|
||
/**
|
||
* Converts `iterator` to an array.
|
||
*
|
||
* @private
|
||
* @param {Object} iterator The iterator to convert.
|
||
* @returns {Array} Returns the converted array.
|
||
*/
|
||
function iteratorToArray(iterator) {
|
||
var data,
|
||
result = [];
|
||
|
||
while (!(data = iterator.next()).done) {
|
||
result.push(data.value);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Converts `map` to its key-value pairs.
|
||
*
|
||
* @private
|
||
* @param {Object} map The map to convert.
|
||
* @returns {Array} Returns the key-value pairs.
|
||
*/
|
||
function mapToArray(map) {
|
||
var index = -1,
|
||
result = Array(map.size);
|
||
|
||
map.forEach(function(value, key) {
|
||
result[++index] = [key, value];
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a unary function that invokes `func` with its argument transformed.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to wrap.
|
||
* @param {Function} transform The argument transform.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function overArg(func, transform) {
|
||
return function(arg) {
|
||
return func(transform(arg));
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Replaces all `placeholder` elements in `array` with an internal placeholder
|
||
* and returns an array of their indexes.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to modify.
|
||
* @param {*} placeholder The placeholder to replace.
|
||
* @returns {Array} Returns the new array of placeholder indexes.
|
||
*/
|
||
function replaceHolders(array, placeholder) {
|
||
var index = -1,
|
||
length = array.length,
|
||
resIndex = 0,
|
||
result = [];
|
||
|
||
while (++index < length) {
|
||
var value = array[index];
|
||
if (value === placeholder || value === PLACEHOLDER) {
|
||
array[index] = PLACEHOLDER;
|
||
result[resIndex++] = index;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Converts `set` to an array of its values.
|
||
*
|
||
* @private
|
||
* @param {Object} set The set to convert.
|
||
* @returns {Array} Returns the values.
|
||
*/
|
||
function setToArray(set) {
|
||
var index = -1,
|
||
result = Array(set.size);
|
||
|
||
set.forEach(function(value) {
|
||
result[++index] = value;
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Converts `set` to its value-value pairs.
|
||
*
|
||
* @private
|
||
* @param {Object} set The set to convert.
|
||
* @returns {Array} Returns the value-value pairs.
|
||
*/
|
||
function setToPairs(set) {
|
||
var index = -1,
|
||
result = Array(set.size);
|
||
|
||
set.forEach(function(value) {
|
||
result[++index] = [value, value];
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.indexOf` which performs strict equality
|
||
* comparisons of values, i.e. `===`.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} value The value to search for.
|
||
* @param {number} fromIndex The index to search from.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
*/
|
||
function strictIndexOf(array, value, fromIndex) {
|
||
var index = fromIndex - 1,
|
||
length = array.length;
|
||
|
||
while (++index < length) {
|
||
if (array[index] === value) {
|
||
return index;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.lastIndexOf` which performs strict equality
|
||
* comparisons of values, i.e. `===`.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} value The value to search for.
|
||
* @param {number} fromIndex The index to search from.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
*/
|
||
function strictLastIndexOf(array, value, fromIndex) {
|
||
var index = fromIndex + 1;
|
||
while (index--) {
|
||
if (array[index] === value) {
|
||
return index;
|
||
}
|
||
}
|
||
return index;
|
||
}
|
||
|
||
/**
|
||
* Gets the number of symbols in `string`.
|
||
*
|
||
* @private
|
||
* @param {string} string The string to inspect.
|
||
* @returns {number} Returns the string size.
|
||
*/
|
||
function stringSize(string) {
|
||
return hasUnicode(string)
|
||
? unicodeSize(string)
|
||
: asciiSize(string);
|
||
}
|
||
|
||
/**
|
||
* Converts `string` to an array.
|
||
*
|
||
* @private
|
||
* @param {string} string The string to convert.
|
||
* @returns {Array} Returns the converted array.
|
||
*/
|
||
function stringToArray(string) {
|
||
return hasUnicode(string)
|
||
? unicodeToArray(string)
|
||
: asciiToArray(string);
|
||
}
|
||
|
||
/**
|
||
* Used by `_.unescape` to convert HTML entities to characters.
|
||
*
|
||
* @private
|
||
* @param {string} chr The matched character to unescape.
|
||
* @returns {string} Returns the unescaped character.
|
||
*/
|
||
var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
|
||
|
||
/**
|
||
* Gets the size of a Unicode `string`.
|
||
*
|
||
* @private
|
||
* @param {string} string The string inspect.
|
||
* @returns {number} Returns the string size.
|
||
*/
|
||
function unicodeSize(string) {
|
||
var result = reUnicode.lastIndex = 0;
|
||
while (reUnicode.test(string)) {
|
||
++result;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Converts a Unicode `string` to an array.
|
||
*
|
||
* @private
|
||
* @param {string} string The string to convert.
|
||
* @returns {Array} Returns the converted array.
|
||
*/
|
||
function unicodeToArray(string) {
|
||
return string.match(reUnicode) || [];
|
||
}
|
||
|
||
/**
|
||
* Splits a Unicode `string` into an array of its words.
|
||
*
|
||
* @private
|
||
* @param {string} The string to inspect.
|
||
* @returns {Array} Returns the words of `string`.
|
||
*/
|
||
function unicodeWords(string) {
|
||
return string.match(reUnicodeWord) || [];
|
||
}
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Create a new pristine `lodash` function using the `context` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.1.0
|
||
* @category Util
|
||
* @param {Object} [context=root] The context object.
|
||
* @returns {Function} Returns a new `lodash` function.
|
||
* @example
|
||
*
|
||
* _.mixin({ 'foo': _.constant('foo') });
|
||
*
|
||
* var lodash = _.runInContext();
|
||
* lodash.mixin({ 'bar': lodash.constant('bar') });
|
||
*
|
||
* _.isFunction(_.foo);
|
||
* // => true
|
||
* _.isFunction(_.bar);
|
||
* // => false
|
||
*
|
||
* lodash.isFunction(lodash.foo);
|
||
* // => false
|
||
* lodash.isFunction(lodash.bar);
|
||
* // => true
|
||
*
|
||
* // Create a suped-up `defer` in Node.js.
|
||
* var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
|
||
*/
|
||
var runInContext = (function runInContext(context) {
|
||
context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));
|
||
|
||
/** Built-in constructor references. */
|
||
var Array = context.Array,
|
||
Date = context.Date,
|
||
Error = context.Error,
|
||
Function = context.Function,
|
||
Math = context.Math,
|
||
Object = context.Object,
|
||
RegExp = context.RegExp,
|
||
String = context.String,
|
||
TypeError = context.TypeError;
|
||
|
||
/** Used for built-in method references. */
|
||
var arrayProto = Array.prototype,
|
||
funcProto = Function.prototype,
|
||
objectProto = Object.prototype;
|
||
|
||
/** Used to detect overreaching core-js shims. */
|
||
var coreJsData = context['__core-js_shared__'];
|
||
|
||
/** Used to resolve the decompiled source of functions. */
|
||
var funcToString = funcProto.toString;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/** Used to generate unique IDs. */
|
||
var idCounter = 0;
|
||
|
||
/** Used to detect methods masquerading as native. */
|
||
var maskSrcKey = (function() {
|
||
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
|
||
return uid ? ('Symbol(src)_1.' + uid) : '';
|
||
}());
|
||
|
||
/**
|
||
* Used to resolve the
|
||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||
* of values.
|
||
*/
|
||
var nativeObjectToString = objectProto.toString;
|
||
|
||
/** Used to infer the `Object` constructor. */
|
||
var objectCtorString = funcToString.call(Object);
|
||
|
||
/** Used to restore the original `_` reference in `_.noConflict`. */
|
||
var oldDash = root._;
|
||
|
||
/** Used to detect if a method is native. */
|
||
var reIsNative = RegExp('^' +
|
||
funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
|
||
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
|
||
);
|
||
|
||
/** Built-in value references. */
|
||
var Buffer = moduleExports ? context.Buffer : undefined,
|
||
Symbol = context.Symbol,
|
||
Uint8Array = context.Uint8Array,
|
||
allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
|
||
getPrototype = overArg(Object.getPrototypeOf, Object),
|
||
objectCreate = Object.create,
|
||
propertyIsEnumerable = objectProto.propertyIsEnumerable,
|
||
splice = arrayProto.splice,
|
||
spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
|
||
symIterator = Symbol ? Symbol.iterator : undefined,
|
||
symToStringTag = Symbol ? Symbol.toStringTag : undefined;
|
||
|
||
var defineProperty = (function() {
|
||
try {
|
||
var func = getNative(Object, 'defineProperty');
|
||
func({}, '', {});
|
||
return func;
|
||
} catch (e) {}
|
||
}());
|
||
|
||
/** Mocked built-ins. */
|
||
var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
|
||
ctxNow = Date && Date.now !== root.Date.now && Date.now,
|
||
ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeCeil = Math.ceil,
|
||
nativeFloor = Math.floor,
|
||
nativeGetSymbols = Object.getOwnPropertySymbols,
|
||
nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
|
||
nativeIsFinite = context.isFinite,
|
||
nativeJoin = arrayProto.join,
|
||
nativeKeys = overArg(Object.keys, Object),
|
||
nativeMax = Math.max,
|
||
nativeMin = Math.min,
|
||
nativeNow = Date.now,
|
||
nativeParseInt = context.parseInt,
|
||
nativeRandom = Math.random,
|
||
nativeReverse = arrayProto.reverse;
|
||
|
||
/* Built-in method references that are verified to be native. */
|
||
var DataView = getNative(context, 'DataView'),
|
||
Map = getNative(context, 'Map'),
|
||
Promise = getNative(context, 'Promise'),
|
||
Set = getNative(context, 'Set'),
|
||
WeakMap = getNative(context, 'WeakMap'),
|
||
nativeCreate = getNative(Object, 'create');
|
||
|
||
/** Used to store function metadata. */
|
||
var metaMap = WeakMap && new WeakMap;
|
||
|
||
/** Used to lookup unminified function names. */
|
||
var realNames = {};
|
||
|
||
/** Used to detect maps, sets, and weakmaps. */
|
||
var dataViewCtorString = toSource(DataView),
|
||
mapCtorString = toSource(Map),
|
||
promiseCtorString = toSource(Promise),
|
||
setCtorString = toSource(Set),
|
||
weakMapCtorString = toSource(WeakMap);
|
||
|
||
/** Used to convert symbols to primitives and strings. */
|
||
var symbolProto = Symbol ? Symbol.prototype : undefined,
|
||
symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
|
||
symbolToString = symbolProto ? symbolProto.toString : undefined;
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates a `lodash` object which wraps `value` to enable implicit method
|
||
* chain sequences. Methods that operate on and return arrays, collections,
|
||
* and functions can be chained together. Methods that retrieve a single value
|
||
* or may return a primitive value will automatically end the chain sequence
|
||
* and return the unwrapped value. Otherwise, the value must be unwrapped
|
||
* with `_#value`.
|
||
*
|
||
* Explicit chain sequences, which must be unwrapped with `_#value`, may be
|
||
* enabled using `_.chain`.
|
||
*
|
||
* The execution of chained methods is lazy, that is, it's deferred until
|
||
* `_#value` is implicitly or explicitly called.
|
||
*
|
||
* Lazy evaluation allows several methods to support shortcut fusion.
|
||
* Shortcut fusion is an optimization to merge iteratee calls; this avoids
|
||
* the creation of intermediate arrays and can greatly reduce the number of
|
||
* iteratee executions. Sections of a chain sequence qualify for shortcut
|
||
* fusion if the section is applied to an array and iteratees accept only
|
||
* one argument. The heuristic for whether a section qualifies for shortcut
|
||
* fusion is subject to change.
|
||
*
|
||
* Chaining is supported in custom builds as long as the `_#value` method is
|
||
* directly or indirectly included in the build.
|
||
*
|
||
* In addition to lodash methods, wrappers have `Array` and `String` methods.
|
||
*
|
||
* The wrapper `Array` methods are:
|
||
* `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
|
||
*
|
||
* The wrapper `String` methods are:
|
||
* `replace` and `split`
|
||
*
|
||
* The wrapper methods that support shortcut fusion are:
|
||
* `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
|
||
* `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
|
||
* `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
|
||
*
|
||
* The chainable wrapper methods are:
|
||
* `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
|
||
* `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
|
||
* `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
|
||
* `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
|
||
* `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
|
||
* `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
|
||
* `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
|
||
* `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
|
||
* `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
|
||
* `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
|
||
* `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
|
||
* `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
|
||
* `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
|
||
* `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
|
||
* `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
|
||
* `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
|
||
* `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
|
||
* `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
|
||
* `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
|
||
* `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
|
||
* `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
|
||
* `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
|
||
* `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
|
||
* `zipObject`, `zipObjectDeep`, and `zipWith`
|
||
*
|
||
* The wrapper methods that are **not** chainable by default are:
|
||
* `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
|
||
* `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
|
||
* `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
|
||
* `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
|
||
* `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
|
||
* `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
|
||
* `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
|
||
* `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
|
||
* `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
|
||
* `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
|
||
* `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
|
||
* `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
|
||
* `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
|
||
* `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
|
||
* `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
|
||
* `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
|
||
* `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
|
||
* `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
|
||
* `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
|
||
* `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
|
||
* `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
|
||
* `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
|
||
* `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
|
||
* `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
|
||
* `upperFirst`, `value`, and `words`
|
||
*
|
||
* @name _
|
||
* @constructor
|
||
* @category Seq
|
||
* @param {*} value The value to wrap in a `lodash` instance.
|
||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||
* @example
|
||
*
|
||
* function square(n) {
|
||
* return n * n;
|
||
* }
|
||
*
|
||
* var wrapped = _([1, 2, 3]);
|
||
*
|
||
* // Returns an unwrapped value.
|
||
* wrapped.reduce(_.add);
|
||
* // => 6
|
||
*
|
||
* // Returns a wrapped value.
|
||
* var squares = wrapped.map(square);
|
||
*
|
||
* _.isArray(squares);
|
||
* // => false
|
||
*
|
||
* _.isArray(squares.value());
|
||
* // => true
|
||
*/
|
||
function lodash(value) {
|
||
if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
|
||
if (value instanceof LodashWrapper) {
|
||
return value;
|
||
}
|
||
if (hasOwnProperty.call(value, '__wrapped__')) {
|
||
return wrapperClone(value);
|
||
}
|
||
}
|
||
return new LodashWrapper(value);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.create` without support for assigning
|
||
* properties to the created object.
|
||
*
|
||
* @private
|
||
* @param {Object} proto The object to inherit from.
|
||
* @returns {Object} Returns the new object.
|
||
*/
|
||
var baseCreate = (function() {
|
||
function object() {}
|
||
return function(proto) {
|
||
if (!isObject(proto)) {
|
||
return {};
|
||
}
|
||
if (objectCreate) {
|
||
return objectCreate(proto);
|
||
}
|
||
object.prototype = proto;
|
||
var result = new object;
|
||
object.prototype = undefined;
|
||
return result;
|
||
};
|
||
}());
|
||
|
||
/**
|
||
* The function whose prototype chain sequence wrappers inherit from.
|
||
*
|
||
* @private
|
||
*/
|
||
function baseLodash() {
|
||
// No operation performed.
|
||
}
|
||
|
||
/**
|
||
* The base constructor for creating `lodash` wrapper objects.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to wrap.
|
||
* @param {boolean} [chainAll] Enable explicit method chain sequences.
|
||
*/
|
||
function LodashWrapper(value, chainAll) {
|
||
this.__wrapped__ = value;
|
||
this.__actions__ = [];
|
||
this.__chain__ = !!chainAll;
|
||
this.__index__ = 0;
|
||
this.__values__ = undefined;
|
||
}
|
||
|
||
/**
|
||
* By default, the template delimiters used by lodash are like those in
|
||
* embedded Ruby (ERB) as well as ES2015 template strings. Change the
|
||
* following template settings to use alternative delimiters.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @type {Object}
|
||
*/
|
||
lodash.templateSettings = {
|
||
|
||
/**
|
||
* Used to detect `data` property values to be HTML-escaped.
|
||
*
|
||
* @memberOf _.templateSettings
|
||
* @type {RegExp}
|
||
*/
|
||
'escape': reEscape,
|
||
|
||
/**
|
||
* Used to detect code to be evaluated.
|
||
*
|
||
* @memberOf _.templateSettings
|
||
* @type {RegExp}
|
||
*/
|
||
'evaluate': reEvaluate,
|
||
|
||
/**
|
||
* Used to detect `data` property values to inject.
|
||
*
|
||
* @memberOf _.templateSettings
|
||
* @type {RegExp}
|
||
*/
|
||
'interpolate': reInterpolate,
|
||
|
||
/**
|
||
* Used to reference the data object in the template text.
|
||
*
|
||
* @memberOf _.templateSettings
|
||
* @type {string}
|
||
*/
|
||
'variable': '',
|
||
|
||
/**
|
||
* Used to import variables into the compiled template.
|
||
*
|
||
* @memberOf _.templateSettings
|
||
* @type {Object}
|
||
*/
|
||
'imports': {
|
||
|
||
/**
|
||
* A reference to the `lodash` function.
|
||
*
|
||
* @memberOf _.templateSettings.imports
|
||
* @type {Function}
|
||
*/
|
||
'_': lodash
|
||
}
|
||
};
|
||
|
||
// Ensure wrappers are instances of `baseLodash`.
|
||
lodash.prototype = baseLodash.prototype;
|
||
lodash.prototype.constructor = lodash;
|
||
|
||
LodashWrapper.prototype = baseCreate(baseLodash.prototype);
|
||
LodashWrapper.prototype.constructor = LodashWrapper;
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {*} value The value to wrap.
|
||
*/
|
||
function LazyWrapper(value) {
|
||
this.__wrapped__ = value;
|
||
this.__actions__ = [];
|
||
this.__dir__ = 1;
|
||
this.__filtered__ = false;
|
||
this.__iteratees__ = [];
|
||
this.__takeCount__ = MAX_ARRAY_LENGTH;
|
||
this.__views__ = [];
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of the lazy wrapper object.
|
||
*
|
||
* @private
|
||
* @name clone
|
||
* @memberOf LazyWrapper
|
||
* @returns {Object} Returns the cloned `LazyWrapper` object.
|
||
*/
|
||
function lazyClone() {
|
||
var result = new LazyWrapper(this.__wrapped__);
|
||
result.__actions__ = copyArray(this.__actions__);
|
||
result.__dir__ = this.__dir__;
|
||
result.__filtered__ = this.__filtered__;
|
||
result.__iteratees__ = copyArray(this.__iteratees__);
|
||
result.__takeCount__ = this.__takeCount__;
|
||
result.__views__ = copyArray(this.__views__);
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Reverses the direction of lazy iteration.
|
||
*
|
||
* @private
|
||
* @name reverse
|
||
* @memberOf LazyWrapper
|
||
* @returns {Object} Returns the new reversed `LazyWrapper` object.
|
||
*/
|
||
function lazyReverse() {
|
||
if (this.__filtered__) {
|
||
var result = new LazyWrapper(this);
|
||
result.__dir__ = -1;
|
||
result.__filtered__ = true;
|
||
} else {
|
||
result = this.clone();
|
||
result.__dir__ *= -1;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Extracts the unwrapped value from its lazy wrapper.
|
||
*
|
||
* @private
|
||
* @name value
|
||
* @memberOf LazyWrapper
|
||
* @returns {*} Returns the unwrapped value.
|
||
*/
|
||
function lazyValue() {
|
||
var array = this.__wrapped__.value(),
|
||
dir = this.__dir__,
|
||
isArr = isArray(array),
|
||
isRight = dir < 0,
|
||
arrLength = isArr ? array.length : 0,
|
||
view = getView(0, arrLength, this.__views__),
|
||
start = view.start,
|
||
end = view.end,
|
||
length = end - start,
|
||
index = isRight ? end : (start - 1),
|
||
iteratees = this.__iteratees__,
|
||
iterLength = iteratees.length,
|
||
resIndex = 0,
|
||
takeCount = nativeMin(length, this.__takeCount__);
|
||
|
||
if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
|
||
return baseWrapperValue(array, this.__actions__);
|
||
}
|
||
var result = [];
|
||
|
||
outer:
|
||
while (length-- && resIndex < takeCount) {
|
||
index += dir;
|
||
|
||
var iterIndex = -1,
|
||
value = array[index];
|
||
|
||
while (++iterIndex < iterLength) {
|
||
var data = iteratees[iterIndex],
|
||
iteratee = data.iteratee,
|
||
type = data.type,
|
||
computed = iteratee(value);
|
||
|
||
if (type == LAZY_MAP_FLAG) {
|
||
value = computed;
|
||
} else if (!computed) {
|
||
if (type == LAZY_FILTER_FLAG) {
|
||
continue outer;
|
||
} else {
|
||
break outer;
|
||
}
|
||
}
|
||
}
|
||
result[resIndex++] = value;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
// Ensure `LazyWrapper` is an instance of `baseLodash`.
|
||
LazyWrapper.prototype = baseCreate(baseLodash.prototype);
|
||
LazyWrapper.prototype.constructor = LazyWrapper;
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates a hash object.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {Array} [entries] The key-value pairs to cache.
|
||
*/
|
||
function Hash(entries) {
|
||
var index = -1,
|
||
length = entries == null ? 0 : entries.length;
|
||
|
||
this.clear();
|
||
while (++index < length) {
|
||
var entry = entries[index];
|
||
this.set(entry[0], entry[1]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Removes all key-value entries from the hash.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf Hash
|
||
*/
|
||
function hashClear() {
|
||
this.__data__ = nativeCreate ? nativeCreate(null) : {};
|
||
this.size = 0;
|
||
}
|
||
|
||
/**
|
||
* Removes `key` and its value from the hash.
|
||
*
|
||
* @private
|
||
* @name delete
|
||
* @memberOf Hash
|
||
* @param {Object} hash The hash to modify.
|
||
* @param {string} key The key of the value to remove.
|
||
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
||
*/
|
||
function hashDelete(key) {
|
||
var result = this.has(key) && delete this.__data__[key];
|
||
this.size -= result ? 1 : 0;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Gets the hash value for `key`.
|
||
*
|
||
* @private
|
||
* @name get
|
||
* @memberOf Hash
|
||
* @param {string} key The key of the value to get.
|
||
* @returns {*} Returns the entry value.
|
||
*/
|
||
function hashGet(key) {
|
||
var data = this.__data__;
|
||
if (nativeCreate) {
|
||
var result = data[key];
|
||
return result === HASH_UNDEFINED ? undefined : result;
|
||
}
|
||
return hasOwnProperty.call(data, key) ? data[key] : undefined;
|
||
}
|
||
|
||
/**
|
||
* Checks if a hash value for `key` exists.
|
||
*
|
||
* @private
|
||
* @name has
|
||
* @memberOf Hash
|
||
* @param {string} key The key of the entry to check.
|
||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||
*/
|
||
function hashHas(key) {
|
||
var data = this.__data__;
|
||
return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
|
||
}
|
||
|
||
/**
|
||
* Sets the hash `key` to `value`.
|
||
*
|
||
* @private
|
||
* @name set
|
||
* @memberOf Hash
|
||
* @param {string} key The key of the value to set.
|
||
* @param {*} value The value to set.
|
||
* @returns {Object} Returns the hash instance.
|
||
*/
|
||
function hashSet(key, value) {
|
||
var data = this.__data__;
|
||
this.size += this.has(key) ? 0 : 1;
|
||
data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
|
||
return this;
|
||
}
|
||
|
||
// Add methods to `Hash`.
|
||
Hash.prototype.clear = hashClear;
|
||
Hash.prototype['delete'] = hashDelete;
|
||
Hash.prototype.get = hashGet;
|
||
Hash.prototype.has = hashHas;
|
||
Hash.prototype.set = hashSet;
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates an list cache object.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {Array} [entries] The key-value pairs to cache.
|
||
*/
|
||
function ListCache(entries) {
|
||
var index = -1,
|
||
length = entries == null ? 0 : entries.length;
|
||
|
||
this.clear();
|
||
while (++index < length) {
|
||
var entry = entries[index];
|
||
this.set(entry[0], entry[1]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Removes all key-value entries from the list cache.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf ListCache
|
||
*/
|
||
function listCacheClear() {
|
||
this.__data__ = [];
|
||
this.size = 0;
|
||
}
|
||
|
||
/**
|
||
* Removes `key` and its value from the list cache.
|
||
*
|
||
* @private
|
||
* @name delete
|
||
* @memberOf ListCache
|
||
* @param {string} key The key of the value to remove.
|
||
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
||
*/
|
||
function listCacheDelete(key) {
|
||
var data = this.__data__,
|
||
index = assocIndexOf(data, key);
|
||
|
||
if (index < 0) {
|
||
return false;
|
||
}
|
||
var lastIndex = data.length - 1;
|
||
if (index == lastIndex) {
|
||
data.pop();
|
||
} else {
|
||
splice.call(data, index, 1);
|
||
}
|
||
--this.size;
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Gets the list cache value for `key`.
|
||
*
|
||
* @private
|
||
* @name get
|
||
* @memberOf ListCache
|
||
* @param {string} key The key of the value to get.
|
||
* @returns {*} Returns the entry value.
|
||
*/
|
||
function listCacheGet(key) {
|
||
var data = this.__data__,
|
||
index = assocIndexOf(data, key);
|
||
|
||
return index < 0 ? undefined : data[index][1];
|
||
}
|
||
|
||
/**
|
||
* Checks if a list cache value for `key` exists.
|
||
*
|
||
* @private
|
||
* @name has
|
||
* @memberOf ListCache
|
||
* @param {string} key The key of the entry to check.
|
||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||
*/
|
||
function listCacheHas(key) {
|
||
return assocIndexOf(this.__data__, key) > -1;
|
||
}
|
||
|
||
/**
|
||
* Sets the list cache `key` to `value`.
|
||
*
|
||
* @private
|
||
* @name set
|
||
* @memberOf ListCache
|
||
* @param {string} key The key of the value to set.
|
||
* @param {*} value The value to set.
|
||
* @returns {Object} Returns the list cache instance.
|
||
*/
|
||
function listCacheSet(key, value) {
|
||
var data = this.__data__,
|
||
index = assocIndexOf(data, key);
|
||
|
||
if (index < 0) {
|
||
++this.size;
|
||
data.push([key, value]);
|
||
} else {
|
||
data[index][1] = value;
|
||
}
|
||
return this;
|
||
}
|
||
|
||
// Add methods to `ListCache`.
|
||
ListCache.prototype.clear = listCacheClear;
|
||
ListCache.prototype['delete'] = listCacheDelete;
|
||
ListCache.prototype.get = listCacheGet;
|
||
ListCache.prototype.has = listCacheHas;
|
||
ListCache.prototype.set = listCacheSet;
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates a map cache object to store key-value pairs.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {Array} [entries] The key-value pairs to cache.
|
||
*/
|
||
function MapCache(entries) {
|
||
var index = -1,
|
||
length = entries == null ? 0 : entries.length;
|
||
|
||
this.clear();
|
||
while (++index < length) {
|
||
var entry = entries[index];
|
||
this.set(entry[0], entry[1]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Removes all key-value entries from the map.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf MapCache
|
||
*/
|
||
function mapCacheClear() {
|
||
this.size = 0;
|
||
this.__data__ = {
|
||
'hash': new Hash,
|
||
'map': new (Map || ListCache),
|
||
'string': new Hash
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Removes `key` and its value from the map.
|
||
*
|
||
* @private
|
||
* @name delete
|
||
* @memberOf MapCache
|
||
* @param {string} key The key of the value to remove.
|
||
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
||
*/
|
||
function mapCacheDelete(key) {
|
||
var result = getMapData(this, key)['delete'](key);
|
||
this.size -= result ? 1 : 0;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Gets the map value for `key`.
|
||
*
|
||
* @private
|
||
* @name get
|
||
* @memberOf MapCache
|
||
* @param {string} key The key of the value to get.
|
||
* @returns {*} Returns the entry value.
|
||
*/
|
||
function mapCacheGet(key) {
|
||
return getMapData(this, key).get(key);
|
||
}
|
||
|
||
/**
|
||
* Checks if a map value for `key` exists.
|
||
*
|
||
* @private
|
||
* @name has
|
||
* @memberOf MapCache
|
||
* @param {string} key The key of the entry to check.
|
||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||
*/
|
||
function mapCacheHas(key) {
|
||
return getMapData(this, key).has(key);
|
||
}
|
||
|
||
/**
|
||
* Sets the map `key` to `value`.
|
||
*
|
||
* @private
|
||
* @name set
|
||
* @memberOf MapCache
|
||
* @param {string} key The key of the value to set.
|
||
* @param {*} value The value to set.
|
||
* @returns {Object} Returns the map cache instance.
|
||
*/
|
||
function mapCacheSet(key, value) {
|
||
var data = getMapData(this, key),
|
||
size = data.size;
|
||
|
||
data.set(key, value);
|
||
this.size += data.size == size ? 0 : 1;
|
||
return this;
|
||
}
|
||
|
||
// Add methods to `MapCache`.
|
||
MapCache.prototype.clear = mapCacheClear;
|
||
MapCache.prototype['delete'] = mapCacheDelete;
|
||
MapCache.prototype.get = mapCacheGet;
|
||
MapCache.prototype.has = mapCacheHas;
|
||
MapCache.prototype.set = mapCacheSet;
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
*
|
||
* Creates an array cache object to store unique values.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {Array} [values] The values to cache.
|
||
*/
|
||
function SetCache(values) {
|
||
var index = -1,
|
||
length = values == null ? 0 : values.length;
|
||
|
||
this.__data__ = new MapCache;
|
||
while (++index < length) {
|
||
this.add(values[index]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Adds `value` to the array cache.
|
||
*
|
||
* @private
|
||
* @name add
|
||
* @memberOf SetCache
|
||
* @alias push
|
||
* @param {*} value The value to cache.
|
||
* @returns {Object} Returns the cache instance.
|
||
*/
|
||
function setCacheAdd(value) {
|
||
this.__data__.set(value, HASH_UNDEFINED);
|
||
return this;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is in the array cache.
|
||
*
|
||
* @private
|
||
* @name has
|
||
* @memberOf SetCache
|
||
* @param {*} value The value to search for.
|
||
* @returns {number} Returns `true` if `value` is found, else `false`.
|
||
*/
|
||
function setCacheHas(value) {
|
||
return this.__data__.has(value);
|
||
}
|
||
|
||
// Add methods to `SetCache`.
|
||
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
|
||
SetCache.prototype.has = setCacheHas;
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates a stack cache object to store key-value pairs.
|
||
*
|
||
* @private
|
||
* @constructor
|
||
* @param {Array} [entries] The key-value pairs to cache.
|
||
*/
|
||
function Stack(entries) {
|
||
var data = this.__data__ = new ListCache(entries);
|
||
this.size = data.size;
|
||
}
|
||
|
||
/**
|
||
* Removes all key-value entries from the stack.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf Stack
|
||
*/
|
||
function stackClear() {
|
||
this.__data__ = new ListCache;
|
||
this.size = 0;
|
||
}
|
||
|
||
/**
|
||
* Removes `key` and its value from the stack.
|
||
*
|
||
* @private
|
||
* @name delete
|
||
* @memberOf Stack
|
||
* @param {string} key The key of the value to remove.
|
||
* @returns {boolean} Returns `true` if the entry was removed, else `false`.
|
||
*/
|
||
function stackDelete(key) {
|
||
var data = this.__data__,
|
||
result = data['delete'](key);
|
||
|
||
this.size = data.size;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Gets the stack value for `key`.
|
||
*
|
||
* @private
|
||
* @name get
|
||
* @memberOf Stack
|
||
* @param {string} key The key of the value to get.
|
||
* @returns {*} Returns the entry value.
|
||
*/
|
||
function stackGet(key) {
|
||
return this.__data__.get(key);
|
||
}
|
||
|
||
/**
|
||
* Checks if a stack value for `key` exists.
|
||
*
|
||
* @private
|
||
* @name has
|
||
* @memberOf Stack
|
||
* @param {string} key The key of the entry to check.
|
||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||
*/
|
||
function stackHas(key) {
|
||
return this.__data__.has(key);
|
||
}
|
||
|
||
/**
|
||
* Sets the stack `key` to `value`.
|
||
*
|
||
* @private
|
||
* @name set
|
||
* @memberOf Stack
|
||
* @param {string} key The key of the value to set.
|
||
* @param {*} value The value to set.
|
||
* @returns {Object} Returns the stack cache instance.
|
||
*/
|
||
function stackSet(key, value) {
|
||
var data = this.__data__;
|
||
if (data instanceof ListCache) {
|
||
var pairs = data.__data__;
|
||
if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
|
||
pairs.push([key, value]);
|
||
this.size = ++data.size;
|
||
return this;
|
||
}
|
||
data = this.__data__ = new MapCache(pairs);
|
||
}
|
||
data.set(key, value);
|
||
this.size = data.size;
|
||
return this;
|
||
}
|
||
|
||
// Add methods to `Stack`.
|
||
Stack.prototype.clear = stackClear;
|
||
Stack.prototype['delete'] = stackDelete;
|
||
Stack.prototype.get = stackGet;
|
||
Stack.prototype.has = stackHas;
|
||
Stack.prototype.set = stackSet;
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates an array of the enumerable property names of the array-like `value`.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to query.
|
||
* @param {boolean} inherited Specify returning inherited property names.
|
||
* @returns {Array} Returns the array of property names.
|
||
*/
|
||
function arrayLikeKeys(value, inherited) {
|
||
var isArr = isArray(value),
|
||
isArg = !isArr && isArguments(value),
|
||
isBuff = !isArr && !isArg && isBuffer(value),
|
||
isType = !isArr && !isArg && !isBuff && isTypedArray(value),
|
||
skipIndexes = isArr || isArg || isBuff || isType,
|
||
result = skipIndexes ? baseTimes(value.length, String) : [],
|
||
length = result.length;
|
||
|
||
for (var key in value) {
|
||
if ((inherited || hasOwnProperty.call(value, key)) &&
|
||
!(skipIndexes && (
|
||
// Safari 9 has enumerable `arguments.length` in strict mode.
|
||
key == 'length' ||
|
||
// Node.js 0.10 has enumerable non-index properties on buffers.
|
||
(isBuff && (key == 'offset' || key == 'parent')) ||
|
||
// PhantomJS 2 has enumerable non-index properties on typed arrays.
|
||
(isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
|
||
// Skip index properties.
|
||
isIndex(key, length)
|
||
))) {
|
||
result.push(key);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.sample` for arrays.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to sample.
|
||
* @returns {*} Returns the random element.
|
||
*/
|
||
function arraySample(array) {
|
||
var length = array.length;
|
||
return length ? array[baseRandom(0, length - 1)] : undefined;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.sampleSize` for arrays.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to sample.
|
||
* @param {number} n The number of elements to sample.
|
||
* @returns {Array} Returns the random elements.
|
||
*/
|
||
function arraySampleSize(array, n) {
|
||
return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.shuffle` for arrays.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to shuffle.
|
||
* @returns {Array} Returns the new shuffled array.
|
||
*/
|
||
function arrayShuffle(array) {
|
||
return shuffleSelf(copyArray(array));
|
||
}
|
||
|
||
/**
|
||
* This function is like `assignValue` except that it doesn't assign
|
||
* `undefined` values.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to modify.
|
||
* @param {string} key The key of the property to assign.
|
||
* @param {*} value The value to assign.
|
||
*/
|
||
function assignMergeValue(object, key, value) {
|
||
if ((value !== undefined && !eq(object[key], value)) ||
|
||
(value === undefined && !(key in object))) {
|
||
baseAssignValue(object, key, value);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Assigns `value` to `key` of `object` if the existing value is not equivalent
|
||
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* for equality comparisons.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to modify.
|
||
* @param {string} key The key of the property to assign.
|
||
* @param {*} value The value to assign.
|
||
*/
|
||
function assignValue(object, key, value) {
|
||
var objValue = object[key];
|
||
if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
|
||
(value === undefined && !(key in object))) {
|
||
baseAssignValue(object, key, value);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Gets the index at which the `key` is found in `array` of key-value pairs.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} key The key to search for.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
*/
|
||
function assocIndexOf(array, key) {
|
||
var length = array.length;
|
||
while (length--) {
|
||
if (eq(array[length][0], key)) {
|
||
return length;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* Aggregates elements of `collection` on `accumulator` with keys transformed
|
||
* by `iteratee` and values set by `setter`.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} setter The function to set `accumulator` values.
|
||
* @param {Function} iteratee The iteratee to transform keys.
|
||
* @param {Object} accumulator The initial aggregated object.
|
||
* @returns {Function} Returns `accumulator`.
|
||
*/
|
||
function baseAggregator(collection, setter, iteratee, accumulator) {
|
||
baseEach(collection, function(value, key, collection) {
|
||
setter(accumulator, value, iteratee(value), collection);
|
||
});
|
||
return accumulator;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.assign` without support for multiple sources
|
||
* or `customizer` functions.
|
||
*
|
||
* @private
|
||
* @param {Object} object The destination object.
|
||
* @param {Object} source The source object.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function baseAssign(object, source) {
|
||
return object && copyObject(source, keys(source), object);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.assignIn` without support for multiple sources
|
||
* or `customizer` functions.
|
||
*
|
||
* @private
|
||
* @param {Object} object The destination object.
|
||
* @param {Object} source The source object.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function baseAssignIn(object, source) {
|
||
return object && copyObject(source, keysIn(source), object);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `assignValue` and `assignMergeValue` without
|
||
* value checks.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to modify.
|
||
* @param {string} key The key of the property to assign.
|
||
* @param {*} value The value to assign.
|
||
*/
|
||
function baseAssignValue(object, key, value) {
|
||
if (key == '__proto__' && defineProperty) {
|
||
defineProperty(object, key, {
|
||
'configurable': true,
|
||
'enumerable': true,
|
||
'value': value,
|
||
'writable': true
|
||
});
|
||
} else {
|
||
object[key] = value;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.at` without support for individual paths.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {string[]} paths The property paths to pick.
|
||
* @returns {Array} Returns the picked elements.
|
||
*/
|
||
function baseAt(object, paths) {
|
||
var index = -1,
|
||
length = paths.length,
|
||
result = Array(length),
|
||
skip = object == null;
|
||
|
||
while (++index < length) {
|
||
result[index] = skip ? undefined : get(object, paths[index]);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.clamp` which doesn't coerce arguments.
|
||
*
|
||
* @private
|
||
* @param {number} number The number to clamp.
|
||
* @param {number} [lower] The lower bound.
|
||
* @param {number} upper The upper bound.
|
||
* @returns {number} Returns the clamped number.
|
||
*/
|
||
function baseClamp(number, lower, upper) {
|
||
if (number === number) {
|
||
if (upper !== undefined) {
|
||
number = number <= upper ? number : upper;
|
||
}
|
||
if (lower !== undefined) {
|
||
number = number >= lower ? number : lower;
|
||
}
|
||
}
|
||
return number;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.clone` and `_.cloneDeep` which tracks
|
||
* traversed objects.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to clone.
|
||
* @param {boolean} bitmask The bitmask flags.
|
||
* 1 - Deep clone
|
||
* 2 - Flatten inherited properties
|
||
* 4 - Clone symbols
|
||
* @param {Function} [customizer] The function to customize cloning.
|
||
* @param {string} [key] The key of `value`.
|
||
* @param {Object} [object] The parent object of `value`.
|
||
* @param {Object} [stack] Tracks traversed objects and their clone counterparts.
|
||
* @returns {*} Returns the cloned value.
|
||
*/
|
||
function baseClone(value, bitmask, customizer, key, object, stack) {
|
||
var result,
|
||
isDeep = bitmask & CLONE_DEEP_FLAG,
|
||
isFlat = bitmask & CLONE_FLAT_FLAG,
|
||
isFull = bitmask & CLONE_SYMBOLS_FLAG;
|
||
|
||
if (customizer) {
|
||
result = object ? customizer(value, key, object, stack) : customizer(value);
|
||
}
|
||
if (result !== undefined) {
|
||
return result;
|
||
}
|
||
if (!isObject(value)) {
|
||
return value;
|
||
}
|
||
var isArr = isArray(value);
|
||
if (isArr) {
|
||
result = initCloneArray(value);
|
||
if (!isDeep) {
|
||
return copyArray(value, result);
|
||
}
|
||
} else {
|
||
var tag = getTag(value),
|
||
isFunc = tag == funcTag || tag == genTag;
|
||
|
||
if (isBuffer(value)) {
|
||
return cloneBuffer(value, isDeep);
|
||
}
|
||
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
|
||
result = (isFlat || isFunc) ? {} : initCloneObject(value);
|
||
if (!isDeep) {
|
||
return isFlat
|
||
? copySymbolsIn(value, baseAssignIn(result, value))
|
||
: copySymbols(value, baseAssign(result, value));
|
||
}
|
||
} else {
|
||
if (!cloneableTags[tag]) {
|
||
return object ? value : {};
|
||
}
|
||
result = initCloneByTag(value, tag, isDeep);
|
||
}
|
||
}
|
||
// Check for circular references and return its corresponding clone.
|
||
stack || (stack = new Stack);
|
||
var stacked = stack.get(value);
|
||
if (stacked) {
|
||
return stacked;
|
||
}
|
||
stack.set(value, result);
|
||
|
||
if (isSet(value)) {
|
||
value.forEach(function(subValue) {
|
||
result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
|
||
});
|
||
|
||
return result;
|
||
}
|
||
|
||
if (isMap(value)) {
|
||
value.forEach(function(subValue, key) {
|
||
result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
|
||
});
|
||
|
||
return result;
|
||
}
|
||
|
||
var keysFunc = isFull
|
||
? (isFlat ? getAllKeysIn : getAllKeys)
|
||
: (isFlat ? keysIn : keys);
|
||
|
||
var props = isArr ? undefined : keysFunc(value);
|
||
arrayEach(props || value, function(subValue, key) {
|
||
if (props) {
|
||
key = subValue;
|
||
subValue = value[key];
|
||
}
|
||
// Recursively populate clone (susceptible to call stack limits).
|
||
assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.conforms` which doesn't clone `source`.
|
||
*
|
||
* @private
|
||
* @param {Object} source The object of property predicates to conform to.
|
||
* @returns {Function} Returns the new spec function.
|
||
*/
|
||
function baseConforms(source) {
|
||
var props = keys(source);
|
||
return function(object) {
|
||
return baseConformsTo(object, source, props);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.conformsTo` which accepts `props` to check.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to inspect.
|
||
* @param {Object} source The object of property predicates to conform to.
|
||
* @returns {boolean} Returns `true` if `object` conforms, else `false`.
|
||
*/
|
||
function baseConformsTo(object, source, props) {
|
||
var length = props.length;
|
||
if (object == null) {
|
||
return !length;
|
||
}
|
||
object = Object(object);
|
||
while (length--) {
|
||
var key = props[length],
|
||
predicate = source[key],
|
||
value = object[key];
|
||
|
||
if ((value === undefined && !(key in object)) || !predicate(value)) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.delay` and `_.defer` which accepts `args`
|
||
* to provide to `func`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to delay.
|
||
* @param {number} wait The number of milliseconds to delay invocation.
|
||
* @param {Array} args The arguments to provide to `func`.
|
||
* @returns {number|Object} Returns the timer id or timeout object.
|
||
*/
|
||
function baseDelay(func, wait, args) {
|
||
if (typeof func != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
return setTimeout(function() { func.apply(undefined, args); }, wait);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of methods like `_.difference` without support
|
||
* for excluding multiple arrays or iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {Array} values The values to exclude.
|
||
* @param {Function} [iteratee] The iteratee invoked per element.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns the new array of filtered values.
|
||
*/
|
||
function baseDifference(array, values, iteratee, comparator) {
|
||
var index = -1,
|
||
includes = arrayIncludes,
|
||
isCommon = true,
|
||
length = array.length,
|
||
result = [],
|
||
valuesLength = values.length;
|
||
|
||
if (!length) {
|
||
return result;
|
||
}
|
||
if (iteratee) {
|
||
values = arrayMap(values, baseUnary(iteratee));
|
||
}
|
||
if (comparator) {
|
||
includes = arrayIncludesWith;
|
||
isCommon = false;
|
||
}
|
||
else if (values.length >= LARGE_ARRAY_SIZE) {
|
||
includes = cacheHas;
|
||
isCommon = false;
|
||
values = new SetCache(values);
|
||
}
|
||
outer:
|
||
while (++index < length) {
|
||
var value = array[index],
|
||
computed = iteratee == null ? value : iteratee(value);
|
||
|
||
value = (comparator || value !== 0) ? value : 0;
|
||
if (isCommon && computed === computed) {
|
||
var valuesIndex = valuesLength;
|
||
while (valuesIndex--) {
|
||
if (values[valuesIndex] === computed) {
|
||
continue outer;
|
||
}
|
||
}
|
||
result.push(value);
|
||
}
|
||
else if (!includes(values, computed, comparator)) {
|
||
result.push(value);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.forEach` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Array|Object} Returns `collection`.
|
||
*/
|
||
var baseEach = createBaseEach(baseForOwn);
|
||
|
||
/**
|
||
* The base implementation of `_.forEachRight` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Array|Object} Returns `collection`.
|
||
*/
|
||
var baseEachRight = createBaseEach(baseForOwnRight, true);
|
||
|
||
/**
|
||
* The base implementation of `_.every` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} predicate The function invoked per iteration.
|
||
* @returns {boolean} Returns `true` if all elements pass the predicate check,
|
||
* else `false`
|
||
*/
|
||
function baseEvery(collection, predicate) {
|
||
var result = true;
|
||
baseEach(collection, function(value, index, collection) {
|
||
result = !!predicate(value, index, collection);
|
||
return result;
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of methods like `_.max` and `_.min` which accepts a
|
||
* `comparator` to determine the extremum value.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to iterate over.
|
||
* @param {Function} iteratee The iteratee invoked per iteration.
|
||
* @param {Function} comparator The comparator used to compare values.
|
||
* @returns {*} Returns the extremum value.
|
||
*/
|
||
function baseExtremum(array, iteratee, comparator) {
|
||
var index = -1,
|
||
length = array.length;
|
||
|
||
while (++index < length) {
|
||
var value = array[index],
|
||
current = iteratee(value);
|
||
|
||
if (current != null && (computed === undefined
|
||
? (current === current && !isSymbol(current))
|
||
: comparator(current, computed)
|
||
)) {
|
||
var computed = current,
|
||
result = value;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.fill` without an iteratee call guard.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to fill.
|
||
* @param {*} value The value to fill `array` with.
|
||
* @param {number} [start=0] The start position.
|
||
* @param {number} [end=array.length] The end position.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function baseFill(array, value, start, end) {
|
||
var length = array.length;
|
||
|
||
start = toInteger(start);
|
||
if (start < 0) {
|
||
start = -start > length ? 0 : (length + start);
|
||
}
|
||
end = (end === undefined || end > length) ? length : toInteger(end);
|
||
if (end < 0) {
|
||
end += length;
|
||
}
|
||
end = start > end ? 0 : toLength(end);
|
||
while (start < end) {
|
||
array[start++] = value;
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.filter` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} predicate The function invoked per iteration.
|
||
* @returns {Array} Returns the new filtered array.
|
||
*/
|
||
function baseFilter(collection, predicate) {
|
||
var result = [];
|
||
baseEach(collection, function(value, index, collection) {
|
||
if (predicate(value, index, collection)) {
|
||
result.push(value);
|
||
}
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.flatten` with support for restricting flattening.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to flatten.
|
||
* @param {number} depth The maximum recursion depth.
|
||
* @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
|
||
* @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
|
||
* @param {Array} [result=[]] The initial result value.
|
||
* @returns {Array} Returns the new flattened array.
|
||
*/
|
||
function baseFlatten(array, depth, predicate, isStrict, result) {
|
||
var index = -1,
|
||
length = array.length;
|
||
|
||
predicate || (predicate = isFlattenable);
|
||
result || (result = []);
|
||
|
||
while (++index < length) {
|
||
var value = array[index];
|
||
if (depth > 0 && predicate(value)) {
|
||
if (depth > 1) {
|
||
// Recursively flatten arrays (susceptible to call stack limits).
|
||
baseFlatten(value, depth - 1, predicate, isStrict, result);
|
||
} else {
|
||
arrayPush(result, value);
|
||
}
|
||
} else if (!isStrict) {
|
||
result[result.length] = value;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `baseForOwn` which iterates over `object`
|
||
* properties returned by `keysFunc` and invokes `iteratee` for each property.
|
||
* Iteratee functions may exit iteration early by explicitly returning `false`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @param {Function} keysFunc The function to get the keys of `object`.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
var baseFor = createBaseFor();
|
||
|
||
/**
|
||
* This function is like `baseFor` except that it iterates over properties
|
||
* in the opposite order.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @param {Function} keysFunc The function to get the keys of `object`.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
var baseForRight = createBaseFor(true);
|
||
|
||
/**
|
||
* The base implementation of `_.forOwn` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function baseForOwn(object, iteratee) {
|
||
return object && baseFor(object, iteratee, keys);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.forOwnRight` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function baseForOwnRight(object, iteratee) {
|
||
return object && baseForRight(object, iteratee, keys);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.functions` which creates an array of
|
||
* `object` function property names filtered from `props`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to inspect.
|
||
* @param {Array} props The property names to filter.
|
||
* @returns {Array} Returns the function names.
|
||
*/
|
||
function baseFunctions(object, props) {
|
||
return arrayFilter(props, function(key) {
|
||
return isFunction(object[key]);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.get` without support for default values.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {Array|string} path The path of the property to get.
|
||
* @returns {*} Returns the resolved value.
|
||
*/
|
||
function baseGet(object, path) {
|
||
path = castPath(path, object);
|
||
|
||
var index = 0,
|
||
length = path.length;
|
||
|
||
while (object != null && index < length) {
|
||
object = object[toKey(path[index++])];
|
||
}
|
||
return (index && index == length) ? object : undefined;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `getAllKeys` and `getAllKeysIn` which uses
|
||
* `keysFunc` and `symbolsFunc` to get the enumerable property names and
|
||
* symbols of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {Function} keysFunc The function to get the keys of `object`.
|
||
* @param {Function} symbolsFunc The function to get the symbols of `object`.
|
||
* @returns {Array} Returns the array of property names and symbols.
|
||
*/
|
||
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
|
||
var result = keysFunc(object);
|
||
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `getTag` without fallbacks for buggy environments.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to query.
|
||
* @returns {string} Returns the `toStringTag`.
|
||
*/
|
||
function baseGetTag(value) {
|
||
if (value == null) {
|
||
return value === undefined ? undefinedTag : nullTag;
|
||
}
|
||
return (symToStringTag && symToStringTag in Object(value))
|
||
? getRawTag(value)
|
||
: objectToString(value);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.gt` which doesn't coerce arguments.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {boolean} Returns `true` if `value` is greater than `other`,
|
||
* else `false`.
|
||
*/
|
||
function baseGt(value, other) {
|
||
return value > other;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.has` without support for deep paths.
|
||
*
|
||
* @private
|
||
* @param {Object} [object] The object to query.
|
||
* @param {Array|string} key The key to check.
|
||
* @returns {boolean} Returns `true` if `key` exists, else `false`.
|
||
*/
|
||
function baseHas(object, key) {
|
||
return object != null && hasOwnProperty.call(object, key);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.hasIn` without support for deep paths.
|
||
*
|
||
* @private
|
||
* @param {Object} [object] The object to query.
|
||
* @param {Array|string} key The key to check.
|
||
* @returns {boolean} Returns `true` if `key` exists, else `false`.
|
||
*/
|
||
function baseHasIn(object, key) {
|
||
return object != null && key in Object(object);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.inRange` which doesn't coerce arguments.
|
||
*
|
||
* @private
|
||
* @param {number} number The number to check.
|
||
* @param {number} start The start of the range.
|
||
* @param {number} end The end of the range.
|
||
* @returns {boolean} Returns `true` if `number` is in the range, else `false`.
|
||
*/
|
||
function baseInRange(number, start, end) {
|
||
return number >= nativeMin(start, end) && number < nativeMax(start, end);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of methods like `_.intersection`, without support
|
||
* for iteratee shorthands, that accepts an array of arrays to inspect.
|
||
*
|
||
* @private
|
||
* @param {Array} arrays The arrays to inspect.
|
||
* @param {Function} [iteratee] The iteratee invoked per element.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns the new array of shared values.
|
||
*/
|
||
function baseIntersection(arrays, iteratee, comparator) {
|
||
var includes = comparator ? arrayIncludesWith : arrayIncludes,
|
||
length = arrays[0].length,
|
||
othLength = arrays.length,
|
||
othIndex = othLength,
|
||
caches = Array(othLength),
|
||
maxLength = Infinity,
|
||
result = [];
|
||
|
||
while (othIndex--) {
|
||
var array = arrays[othIndex];
|
||
if (othIndex && iteratee) {
|
||
array = arrayMap(array, baseUnary(iteratee));
|
||
}
|
||
maxLength = nativeMin(array.length, maxLength);
|
||
caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
|
||
? new SetCache(othIndex && array)
|
||
: undefined;
|
||
}
|
||
array = arrays[0];
|
||
|
||
var index = -1,
|
||
seen = caches[0];
|
||
|
||
outer:
|
||
while (++index < length && result.length < maxLength) {
|
||
var value = array[index],
|
||
computed = iteratee ? iteratee(value) : value;
|
||
|
||
value = (comparator || value !== 0) ? value : 0;
|
||
if (!(seen
|
||
? cacheHas(seen, computed)
|
||
: includes(result, computed, comparator)
|
||
)) {
|
||
othIndex = othLength;
|
||
while (--othIndex) {
|
||
var cache = caches[othIndex];
|
||
if (!(cache
|
||
? cacheHas(cache, computed)
|
||
: includes(arrays[othIndex], computed, comparator))
|
||
) {
|
||
continue outer;
|
||
}
|
||
}
|
||
if (seen) {
|
||
seen.push(computed);
|
||
}
|
||
result.push(value);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.invert` and `_.invertBy` which inverts
|
||
* `object` with values transformed by `iteratee` and set by `setter`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} setter The function to set `accumulator` values.
|
||
* @param {Function} iteratee The iteratee to transform values.
|
||
* @param {Object} accumulator The initial inverted object.
|
||
* @returns {Function} Returns `accumulator`.
|
||
*/
|
||
function baseInverter(object, setter, iteratee, accumulator) {
|
||
baseForOwn(object, function(value, key, object) {
|
||
setter(accumulator, iteratee(value), key, object);
|
||
});
|
||
return accumulator;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.invoke` without support for individual
|
||
* method arguments.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {Array|string} path The path of the method to invoke.
|
||
* @param {Array} args The arguments to invoke the method with.
|
||
* @returns {*} Returns the result of the invoked method.
|
||
*/
|
||
function baseInvoke(object, path, args) {
|
||
path = castPath(path, object);
|
||
object = parent(object, path);
|
||
var func = object == null ? object : object[toKey(last(path))];
|
||
return func == null ? undefined : apply(func, object, args);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isArguments`.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
|
||
*/
|
||
function baseIsArguments(value) {
|
||
return isObjectLike(value) && baseGetTag(value) == argsTag;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isArrayBuffer` without Node.js optimizations.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
|
||
*/
|
||
function baseIsArrayBuffer(value) {
|
||
return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isDate` without Node.js optimizations.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a date object, else `false`.
|
||
*/
|
||
function baseIsDate(value) {
|
||
return isObjectLike(value) && baseGetTag(value) == dateTag;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isEqual` which supports partial comparisons
|
||
* and tracks traversed objects.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @param {boolean} bitmask The bitmask flags.
|
||
* 1 - Unordered comparison
|
||
* 2 - Partial comparison
|
||
* @param {Function} [customizer] The function to customize comparisons.
|
||
* @param {Object} [stack] Tracks traversed `value` and `other` objects.
|
||
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
||
*/
|
||
function baseIsEqual(value, other, bitmask, customizer, stack) {
|
||
if (value === other) {
|
||
return true;
|
||
}
|
||
if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
|
||
return value !== value && other !== other;
|
||
}
|
||
return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseIsEqual` for arrays and objects which performs
|
||
* deep comparisons and tracks traversed objects enabling objects with circular
|
||
* references to be compared.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to compare.
|
||
* @param {Object} other The other object to compare.
|
||
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
|
||
* @param {Function} customizer The function to customize comparisons.
|
||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||
* @param {Object} [stack] Tracks traversed `object` and `other` objects.
|
||
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
||
*/
|
||
function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
|
||
var objIsArr = isArray(object),
|
||
othIsArr = isArray(other),
|
||
objTag = objIsArr ? arrayTag : getTag(object),
|
||
othTag = othIsArr ? arrayTag : getTag(other);
|
||
|
||
objTag = objTag == argsTag ? objectTag : objTag;
|
||
othTag = othTag == argsTag ? objectTag : othTag;
|
||
|
||
var objIsObj = objTag == objectTag,
|
||
othIsObj = othTag == objectTag,
|
||
isSameTag = objTag == othTag;
|
||
|
||
if (isSameTag && isBuffer(object)) {
|
||
if (!isBuffer(other)) {
|
||
return false;
|
||
}
|
||
objIsArr = true;
|
||
objIsObj = false;
|
||
}
|
||
if (isSameTag && !objIsObj) {
|
||
stack || (stack = new Stack);
|
||
return (objIsArr || isTypedArray(object))
|
||
? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
|
||
: equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
|
||
}
|
||
if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
|
||
var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
|
||
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
|
||
|
||
if (objIsWrapped || othIsWrapped) {
|
||
var objUnwrapped = objIsWrapped ? object.value() : object,
|
||
othUnwrapped = othIsWrapped ? other.value() : other;
|
||
|
||
stack || (stack = new Stack);
|
||
return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
|
||
}
|
||
}
|
||
if (!isSameTag) {
|
||
return false;
|
||
}
|
||
stack || (stack = new Stack);
|
||
return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isMap` without Node.js optimizations.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a map, else `false`.
|
||
*/
|
||
function baseIsMap(value) {
|
||
return isObjectLike(value) && getTag(value) == mapTag;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isMatch` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to inspect.
|
||
* @param {Object} source The object of property values to match.
|
||
* @param {Array} matchData The property names, values, and compare flags to match.
|
||
* @param {Function} [customizer] The function to customize comparisons.
|
||
* @returns {boolean} Returns `true` if `object` is a match, else `false`.
|
||
*/
|
||
function baseIsMatch(object, source, matchData, customizer) {
|
||
var index = matchData.length,
|
||
length = index,
|
||
noCustomizer = !customizer;
|
||
|
||
if (object == null) {
|
||
return !length;
|
||
}
|
||
object = Object(object);
|
||
while (index--) {
|
||
var data = matchData[index];
|
||
if ((noCustomizer && data[2])
|
||
? data[1] !== object[data[0]]
|
||
: !(data[0] in object)
|
||
) {
|
||
return false;
|
||
}
|
||
}
|
||
while (++index < length) {
|
||
data = matchData[index];
|
||
var key = data[0],
|
||
objValue = object[key],
|
||
srcValue = data[1];
|
||
|
||
if (noCustomizer && data[2]) {
|
||
if (objValue === undefined && !(key in object)) {
|
||
return false;
|
||
}
|
||
} else {
|
||
var stack = new Stack;
|
||
if (customizer) {
|
||
var result = customizer(objValue, srcValue, key, object, source, stack);
|
||
}
|
||
if (!(result === undefined
|
||
? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
|
||
: result
|
||
)) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isNative` without bad shim checks.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a native function,
|
||
* else `false`.
|
||
*/
|
||
function baseIsNative(value) {
|
||
if (!isObject(value) || isMasked(value)) {
|
||
return false;
|
||
}
|
||
var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
|
||
return pattern.test(toSource(value));
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isRegExp` without Node.js optimizations.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
|
||
*/
|
||
function baseIsRegExp(value) {
|
||
return isObjectLike(value) && baseGetTag(value) == regexpTag;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isSet` without Node.js optimizations.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a set, else `false`.
|
||
*/
|
||
function baseIsSet(value) {
|
||
return isObjectLike(value) && getTag(value) == setTag;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.isTypedArray` without Node.js optimizations.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
|
||
*/
|
||
function baseIsTypedArray(value) {
|
||
return isObjectLike(value) &&
|
||
isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.iteratee`.
|
||
*
|
||
* @private
|
||
* @param {*} [value=_.identity] The value to convert to an iteratee.
|
||
* @returns {Function} Returns the iteratee.
|
||
*/
|
||
function baseIteratee(value) {
|
||
// Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
|
||
// See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
|
||
if (typeof value == 'function') {
|
||
return value;
|
||
}
|
||
if (value == null) {
|
||
return identity;
|
||
}
|
||
if (typeof value == 'object') {
|
||
return isArray(value)
|
||
? baseMatchesProperty(value[0], value[1])
|
||
: baseMatches(value);
|
||
}
|
||
return property(value);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names.
|
||
*/
|
||
function baseKeys(object) {
|
||
if (!isPrototype(object)) {
|
||
return nativeKeys(object);
|
||
}
|
||
var result = [];
|
||
for (var key in Object(object)) {
|
||
if (hasOwnProperty.call(object, key) && key != 'constructor') {
|
||
result.push(key);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names.
|
||
*/
|
||
function baseKeysIn(object) {
|
||
if (!isObject(object)) {
|
||
return nativeKeysIn(object);
|
||
}
|
||
var isProto = isPrototype(object),
|
||
result = [];
|
||
|
||
for (var key in object) {
|
||
if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
|
||
result.push(key);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.lt` which doesn't coerce arguments.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {boolean} Returns `true` if `value` is less than `other`,
|
||
* else `false`.
|
||
*/
|
||
function baseLt(value, other) {
|
||
return value < other;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.map` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} iteratee The function invoked per iteration.
|
||
* @returns {Array} Returns the new mapped array.
|
||
*/
|
||
function baseMap(collection, iteratee) {
|
||
var index = -1,
|
||
result = isArrayLike(collection) ? Array(collection.length) : [];
|
||
|
||
baseEach(collection, function(value, key, collection) {
|
||
result[++index] = iteratee(value, key, collection);
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.matches` which doesn't clone `source`.
|
||
*
|
||
* @private
|
||
* @param {Object} source The object of property values to match.
|
||
* @returns {Function} Returns the new spec function.
|
||
*/
|
||
function baseMatches(source) {
|
||
var matchData = getMatchData(source);
|
||
if (matchData.length == 1 && matchData[0][2]) {
|
||
return matchesStrictComparable(matchData[0][0], matchData[0][1]);
|
||
}
|
||
return function(object) {
|
||
return object === source || baseIsMatch(object, source, matchData);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
|
||
*
|
||
* @private
|
||
* @param {string} path The path of the property to get.
|
||
* @param {*} srcValue The value to match.
|
||
* @returns {Function} Returns the new spec function.
|
||
*/
|
||
function baseMatchesProperty(path, srcValue) {
|
||
if (isKey(path) && isStrictComparable(srcValue)) {
|
||
return matchesStrictComparable(toKey(path), srcValue);
|
||
}
|
||
return function(object) {
|
||
var objValue = get(object, path);
|
||
return (objValue === undefined && objValue === srcValue)
|
||
? hasIn(object, path)
|
||
: baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.merge` without support for multiple sources.
|
||
*
|
||
* @private
|
||
* @param {Object} object The destination object.
|
||
* @param {Object} source The source object.
|
||
* @param {number} srcIndex The index of `source`.
|
||
* @param {Function} [customizer] The function to customize merged values.
|
||
* @param {Object} [stack] Tracks traversed source values and their merged
|
||
* counterparts.
|
||
*/
|
||
function baseMerge(object, source, srcIndex, customizer, stack) {
|
||
if (object === source) {
|
||
return;
|
||
}
|
||
baseFor(source, function(srcValue, key) {
|
||
if (isObject(srcValue)) {
|
||
stack || (stack = new Stack);
|
||
baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
|
||
}
|
||
else {
|
||
var newValue = customizer
|
||
? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
|
||
: undefined;
|
||
|
||
if (newValue === undefined) {
|
||
newValue = srcValue;
|
||
}
|
||
assignMergeValue(object, key, newValue);
|
||
}
|
||
}, keysIn);
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseMerge` for arrays and objects which performs
|
||
* deep merges and tracks traversed objects enabling objects with circular
|
||
* references to be merged.
|
||
*
|
||
* @private
|
||
* @param {Object} object The destination object.
|
||
* @param {Object} source The source object.
|
||
* @param {string} key The key of the value to merge.
|
||
* @param {number} srcIndex The index of `source`.
|
||
* @param {Function} mergeFunc The function to merge values.
|
||
* @param {Function} [customizer] The function to customize assigned values.
|
||
* @param {Object} [stack] Tracks traversed source values and their merged
|
||
* counterparts.
|
||
*/
|
||
function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
|
||
var objValue = safeGet(object, key),
|
||
srcValue = safeGet(source, key),
|
||
stacked = stack.get(srcValue);
|
||
|
||
if (stacked) {
|
||
assignMergeValue(object, key, stacked);
|
||
return;
|
||
}
|
||
var newValue = customizer
|
||
? customizer(objValue, srcValue, (key + ''), object, source, stack)
|
||
: undefined;
|
||
|
||
var isCommon = newValue === undefined;
|
||
|
||
if (isCommon) {
|
||
var isArr = isArray(srcValue),
|
||
isBuff = !isArr && isBuffer(srcValue),
|
||
isTyped = !isArr && !isBuff && isTypedArray(srcValue);
|
||
|
||
newValue = srcValue;
|
||
if (isArr || isBuff || isTyped) {
|
||
if (isArray(objValue)) {
|
||
newValue = objValue;
|
||
}
|
||
else if (isArrayLikeObject(objValue)) {
|
||
newValue = copyArray(objValue);
|
||
}
|
||
else if (isBuff) {
|
||
isCommon = false;
|
||
newValue = cloneBuffer(srcValue, true);
|
||
}
|
||
else if (isTyped) {
|
||
isCommon = false;
|
||
newValue = cloneTypedArray(srcValue, true);
|
||
}
|
||
else {
|
||
newValue = [];
|
||
}
|
||
}
|
||
else if (isPlainObject(srcValue) || isArguments(srcValue)) {
|
||
newValue = objValue;
|
||
if (isArguments(objValue)) {
|
||
newValue = toPlainObject(objValue);
|
||
}
|
||
else if (!isObject(objValue) || isFunction(objValue)) {
|
||
newValue = initCloneObject(srcValue);
|
||
}
|
||
}
|
||
else {
|
||
isCommon = false;
|
||
}
|
||
}
|
||
if (isCommon) {
|
||
// Recursively merge objects and arrays (susceptible to call stack limits).
|
||
stack.set(srcValue, newValue);
|
||
mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
|
||
stack['delete'](srcValue);
|
||
}
|
||
assignMergeValue(object, key, newValue);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.nth` which doesn't coerce arguments.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to query.
|
||
* @param {number} n The index of the element to return.
|
||
* @returns {*} Returns the nth element of `array`.
|
||
*/
|
||
function baseNth(array, n) {
|
||
var length = array.length;
|
||
if (!length) {
|
||
return;
|
||
}
|
||
n += n < 0 ? length : 0;
|
||
return isIndex(n, length) ? array[n] : undefined;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.orderBy` without param guards.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
|
||
* @param {string[]} orders The sort orders of `iteratees`.
|
||
* @returns {Array} Returns the new sorted array.
|
||
*/
|
||
function baseOrderBy(collection, iteratees, orders) {
|
||
var index = -1;
|
||
iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));
|
||
|
||
var result = baseMap(collection, function(value, key, collection) {
|
||
var criteria = arrayMap(iteratees, function(iteratee) {
|
||
return iteratee(value);
|
||
});
|
||
return { 'criteria': criteria, 'index': ++index, 'value': value };
|
||
});
|
||
|
||
return baseSortBy(result, function(object, other) {
|
||
return compareMultiple(object, other, orders);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.pick` without support for individual
|
||
* property identifiers.
|
||
*
|
||
* @private
|
||
* @param {Object} object The source object.
|
||
* @param {string[]} paths The property paths to pick.
|
||
* @returns {Object} Returns the new object.
|
||
*/
|
||
function basePick(object, paths) {
|
||
return basePickBy(object, paths, function(value, path) {
|
||
return hasIn(object, path);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.pickBy` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Object} object The source object.
|
||
* @param {string[]} paths The property paths to pick.
|
||
* @param {Function} predicate The function invoked per property.
|
||
* @returns {Object} Returns the new object.
|
||
*/
|
||
function basePickBy(object, paths, predicate) {
|
||
var index = -1,
|
||
length = paths.length,
|
||
result = {};
|
||
|
||
while (++index < length) {
|
||
var path = paths[index],
|
||
value = baseGet(object, path);
|
||
|
||
if (predicate(value, path)) {
|
||
baseSet(result, castPath(path, object), value);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseProperty` which supports deep paths.
|
||
*
|
||
* @private
|
||
* @param {Array|string} path The path of the property to get.
|
||
* @returns {Function} Returns the new accessor function.
|
||
*/
|
||
function basePropertyDeep(path) {
|
||
return function(object) {
|
||
return baseGet(object, path);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.pullAllBy` without support for iteratee
|
||
* shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to modify.
|
||
* @param {Array} values The values to remove.
|
||
* @param {Function} [iteratee] The iteratee invoked per element.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function basePullAll(array, values, iteratee, comparator) {
|
||
var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
|
||
index = -1,
|
||
length = values.length,
|
||
seen = array;
|
||
|
||
if (array === values) {
|
||
values = copyArray(values);
|
||
}
|
||
if (iteratee) {
|
||
seen = arrayMap(array, baseUnary(iteratee));
|
||
}
|
||
while (++index < length) {
|
||
var fromIndex = 0,
|
||
value = values[index],
|
||
computed = iteratee ? iteratee(value) : value;
|
||
|
||
while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
|
||
if (seen !== array) {
|
||
splice.call(seen, fromIndex, 1);
|
||
}
|
||
splice.call(array, fromIndex, 1);
|
||
}
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.pullAt` without support for individual
|
||
* indexes or capturing the removed elements.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to modify.
|
||
* @param {number[]} indexes The indexes of elements to remove.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function basePullAt(array, indexes) {
|
||
var length = array ? indexes.length : 0,
|
||
lastIndex = length - 1;
|
||
|
||
while (length--) {
|
||
var index = indexes[length];
|
||
if (length == lastIndex || index !== previous) {
|
||
var previous = index;
|
||
if (isIndex(index)) {
|
||
splice.call(array, index, 1);
|
||
} else {
|
||
baseUnset(array, index);
|
||
}
|
||
}
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.random` without support for returning
|
||
* floating-point numbers.
|
||
*
|
||
* @private
|
||
* @param {number} lower The lower bound.
|
||
* @param {number} upper The upper bound.
|
||
* @returns {number} Returns the random number.
|
||
*/
|
||
function baseRandom(lower, upper) {
|
||
return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.range` and `_.rangeRight` which doesn't
|
||
* coerce arguments.
|
||
*
|
||
* @private
|
||
* @param {number} start The start of the range.
|
||
* @param {number} end The end of the range.
|
||
* @param {number} step The value to increment or decrement by.
|
||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||
* @returns {Array} Returns the range of numbers.
|
||
*/
|
||
function baseRange(start, end, step, fromRight) {
|
||
var index = -1,
|
||
length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
|
||
result = Array(length);
|
||
|
||
while (length--) {
|
||
result[fromRight ? length : ++index] = start;
|
||
start += step;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.repeat` which doesn't coerce arguments.
|
||
*
|
||
* @private
|
||
* @param {string} string The string to repeat.
|
||
* @param {number} n The number of times to repeat the string.
|
||
* @returns {string} Returns the repeated string.
|
||
*/
|
||
function baseRepeat(string, n) {
|
||
var result = '';
|
||
if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
|
||
return result;
|
||
}
|
||
// Leverage the exponentiation by squaring algorithm for a faster repeat.
|
||
// See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
|
||
do {
|
||
if (n % 2) {
|
||
result += string;
|
||
}
|
||
n = nativeFloor(n / 2);
|
||
if (n) {
|
||
string += string;
|
||
}
|
||
} while (n);
|
||
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.rest` which doesn't validate or coerce arguments.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to apply a rest parameter to.
|
||
* @param {number} [start=func.length-1] The start position of the rest parameter.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function baseRest(func, start) {
|
||
return setToString(overRest(func, start, identity), func + '');
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.sample`.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to sample.
|
||
* @returns {*} Returns the random element.
|
||
*/
|
||
function baseSample(collection) {
|
||
return arraySample(values(collection));
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.sampleSize` without param guards.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to sample.
|
||
* @param {number} n The number of elements to sample.
|
||
* @returns {Array} Returns the random elements.
|
||
*/
|
||
function baseSampleSize(collection, n) {
|
||
var array = values(collection);
|
||
return shuffleSelf(array, baseClamp(n, 0, array.length));
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.set`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to modify.
|
||
* @param {Array|string} path The path of the property to set.
|
||
* @param {*} value The value to set.
|
||
* @param {Function} [customizer] The function to customize path creation.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function baseSet(object, path, value, customizer) {
|
||
if (!isObject(object)) {
|
||
return object;
|
||
}
|
||
path = castPath(path, object);
|
||
|
||
var index = -1,
|
||
length = path.length,
|
||
lastIndex = length - 1,
|
||
nested = object;
|
||
|
||
while (nested != null && ++index < length) {
|
||
var key = toKey(path[index]),
|
||
newValue = value;
|
||
|
||
if (index != lastIndex) {
|
||
var objValue = nested[key];
|
||
newValue = customizer ? customizer(objValue, key, nested) : undefined;
|
||
if (newValue === undefined) {
|
||
newValue = isObject(objValue)
|
||
? objValue
|
||
: (isIndex(path[index + 1]) ? [] : {});
|
||
}
|
||
}
|
||
assignValue(nested, key, newValue);
|
||
nested = nested[key];
|
||
}
|
||
return object;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `setData` without support for hot loop shorting.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to associate metadata with.
|
||
* @param {*} data The metadata.
|
||
* @returns {Function} Returns `func`.
|
||
*/
|
||
var baseSetData = !metaMap ? identity : function(func, data) {
|
||
metaMap.set(func, data);
|
||
return func;
|
||
};
|
||
|
||
/**
|
||
* The base implementation of `setToString` without support for hot loop shorting.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to modify.
|
||
* @param {Function} string The `toString` result.
|
||
* @returns {Function} Returns `func`.
|
||
*/
|
||
var baseSetToString = !defineProperty ? identity : function(func, string) {
|
||
return defineProperty(func, 'toString', {
|
||
'configurable': true,
|
||
'enumerable': false,
|
||
'value': constant(string),
|
||
'writable': true
|
||
});
|
||
};
|
||
|
||
/**
|
||
* The base implementation of `_.shuffle`.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to shuffle.
|
||
* @returns {Array} Returns the new shuffled array.
|
||
*/
|
||
function baseShuffle(collection) {
|
||
return shuffleSelf(values(collection));
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.slice` without an iteratee call guard.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to slice.
|
||
* @param {number} [start=0] The start position.
|
||
* @param {number} [end=array.length] The end position.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
*/
|
||
function baseSlice(array, start, end) {
|
||
var index = -1,
|
||
length = array.length;
|
||
|
||
if (start < 0) {
|
||
start = -start > length ? 0 : (length + start);
|
||
}
|
||
end = end > length ? length : end;
|
||
if (end < 0) {
|
||
end += length;
|
||
}
|
||
length = start > end ? 0 : ((end - start) >>> 0);
|
||
start >>>= 0;
|
||
|
||
var result = Array(length);
|
||
while (++index < length) {
|
||
result[index] = array[index + start];
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.some` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} predicate The function invoked per iteration.
|
||
* @returns {boolean} Returns `true` if any element passes the predicate check,
|
||
* else `false`.
|
||
*/
|
||
function baseSome(collection, predicate) {
|
||
var result;
|
||
|
||
baseEach(collection, function(value, index, collection) {
|
||
result = predicate(value, index, collection);
|
||
return !result;
|
||
});
|
||
return !!result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
|
||
* performs a binary search of `array` to determine the index at which `value`
|
||
* should be inserted into `array` in order to maintain its sort order.
|
||
*
|
||
* @private
|
||
* @param {Array} array The sorted array to inspect.
|
||
* @param {*} value The value to evaluate.
|
||
* @param {boolean} [retHighest] Specify returning the highest qualified index.
|
||
* @returns {number} Returns the index at which `value` should be inserted
|
||
* into `array`.
|
||
*/
|
||
function baseSortedIndex(array, value, retHighest) {
|
||
var low = 0,
|
||
high = array == null ? low : array.length;
|
||
|
||
if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
|
||
while (low < high) {
|
||
var mid = (low + high) >>> 1,
|
||
computed = array[mid];
|
||
|
||
if (computed !== null && !isSymbol(computed) &&
|
||
(retHighest ? (computed <= value) : (computed < value))) {
|
||
low = mid + 1;
|
||
} else {
|
||
high = mid;
|
||
}
|
||
}
|
||
return high;
|
||
}
|
||
return baseSortedIndexBy(array, value, identity, retHighest);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
|
||
* which invokes `iteratee` for `value` and each element of `array` to compute
|
||
* their sort ranking. The iteratee is invoked with one argument; (value).
|
||
*
|
||
* @private
|
||
* @param {Array} array The sorted array to inspect.
|
||
* @param {*} value The value to evaluate.
|
||
* @param {Function} iteratee The iteratee invoked per element.
|
||
* @param {boolean} [retHighest] Specify returning the highest qualified index.
|
||
* @returns {number} Returns the index at which `value` should be inserted
|
||
* into `array`.
|
||
*/
|
||
function baseSortedIndexBy(array, value, iteratee, retHighest) {
|
||
value = iteratee(value);
|
||
|
||
var low = 0,
|
||
high = array == null ? 0 : array.length,
|
||
valIsNaN = value !== value,
|
||
valIsNull = value === null,
|
||
valIsSymbol = isSymbol(value),
|
||
valIsUndefined = value === undefined;
|
||
|
||
while (low < high) {
|
||
var mid = nativeFloor((low + high) / 2),
|
||
computed = iteratee(array[mid]),
|
||
othIsDefined = computed !== undefined,
|
||
othIsNull = computed === null,
|
||
othIsReflexive = computed === computed,
|
||
othIsSymbol = isSymbol(computed);
|
||
|
||
if (valIsNaN) {
|
||
var setLow = retHighest || othIsReflexive;
|
||
} else if (valIsUndefined) {
|
||
setLow = othIsReflexive && (retHighest || othIsDefined);
|
||
} else if (valIsNull) {
|
||
setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
|
||
} else if (valIsSymbol) {
|
||
setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
|
||
} else if (othIsNull || othIsSymbol) {
|
||
setLow = false;
|
||
} else {
|
||
setLow = retHighest ? (computed <= value) : (computed < value);
|
||
}
|
||
if (setLow) {
|
||
low = mid + 1;
|
||
} else {
|
||
high = mid;
|
||
}
|
||
}
|
||
return nativeMin(high, MAX_ARRAY_INDEX);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
|
||
* support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {Function} [iteratee] The iteratee invoked per element.
|
||
* @returns {Array} Returns the new duplicate free array.
|
||
*/
|
||
function baseSortedUniq(array, iteratee) {
|
||
var index = -1,
|
||
length = array.length,
|
||
resIndex = 0,
|
||
result = [];
|
||
|
||
while (++index < length) {
|
||
var value = array[index],
|
||
computed = iteratee ? iteratee(value) : value;
|
||
|
||
if (!index || !eq(computed, seen)) {
|
||
var seen = computed;
|
||
result[resIndex++] = value === 0 ? 0 : value;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.toNumber` which doesn't ensure correct
|
||
* conversions of binary, hexadecimal, or octal string values.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to process.
|
||
* @returns {number} Returns the number.
|
||
*/
|
||
function baseToNumber(value) {
|
||
if (typeof value == 'number') {
|
||
return value;
|
||
}
|
||
if (isSymbol(value)) {
|
||
return NAN;
|
||
}
|
||
return +value;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.toString` which doesn't convert nullish
|
||
* values to empty strings.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to process.
|
||
* @returns {string} Returns the string.
|
||
*/
|
||
function baseToString(value) {
|
||
// Exit early for strings to avoid a performance hit in some environments.
|
||
if (typeof value == 'string') {
|
||
return value;
|
||
}
|
||
if (isArray(value)) {
|
||
// Recursively convert values (susceptible to call stack limits).
|
||
return arrayMap(value, baseToString) + '';
|
||
}
|
||
if (isSymbol(value)) {
|
||
return symbolToString ? symbolToString.call(value) : '';
|
||
}
|
||
var result = (value + '');
|
||
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.uniqBy` without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {Function} [iteratee] The iteratee invoked per element.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns the new duplicate free array.
|
||
*/
|
||
function baseUniq(array, iteratee, comparator) {
|
||
var index = -1,
|
||
includes = arrayIncludes,
|
||
length = array.length,
|
||
isCommon = true,
|
||
result = [],
|
||
seen = result;
|
||
|
||
if (comparator) {
|
||
isCommon = false;
|
||
includes = arrayIncludesWith;
|
||
}
|
||
else if (length >= LARGE_ARRAY_SIZE) {
|
||
var set = iteratee ? null : createSet(array);
|
||
if (set) {
|
||
return setToArray(set);
|
||
}
|
||
isCommon = false;
|
||
includes = cacheHas;
|
||
seen = new SetCache;
|
||
}
|
||
else {
|
||
seen = iteratee ? [] : result;
|
||
}
|
||
outer:
|
||
while (++index < length) {
|
||
var value = array[index],
|
||
computed = iteratee ? iteratee(value) : value;
|
||
|
||
value = (comparator || value !== 0) ? value : 0;
|
||
if (isCommon && computed === computed) {
|
||
var seenIndex = seen.length;
|
||
while (seenIndex--) {
|
||
if (seen[seenIndex] === computed) {
|
||
continue outer;
|
||
}
|
||
}
|
||
if (iteratee) {
|
||
seen.push(computed);
|
||
}
|
||
result.push(value);
|
||
}
|
||
else if (!includes(seen, computed, comparator)) {
|
||
if (seen !== result) {
|
||
seen.push(computed);
|
||
}
|
||
result.push(value);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.unset`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to modify.
|
||
* @param {Array|string} path The property path to unset.
|
||
* @returns {boolean} Returns `true` if the property is deleted, else `false`.
|
||
*/
|
||
function baseUnset(object, path) {
|
||
path = castPath(path, object);
|
||
object = parent(object, path);
|
||
return object == null || delete object[toKey(last(path))];
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `_.update`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to modify.
|
||
* @param {Array|string} path The path of the property to update.
|
||
* @param {Function} updater The function to produce the updated value.
|
||
* @param {Function} [customizer] The function to customize path creation.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function baseUpdate(object, path, updater, customizer) {
|
||
return baseSet(object, path, updater(baseGet(object, path)), customizer);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of methods like `_.dropWhile` and `_.takeWhile`
|
||
* without support for iteratee shorthands.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to query.
|
||
* @param {Function} predicate The function invoked per iteration.
|
||
* @param {boolean} [isDrop] Specify dropping elements instead of taking them.
|
||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
*/
|
||
function baseWhile(array, predicate, isDrop, fromRight) {
|
||
var length = array.length,
|
||
index = fromRight ? length : -1;
|
||
|
||
while ((fromRight ? index-- : ++index < length) &&
|
||
predicate(array[index], index, array)) {}
|
||
|
||
return isDrop
|
||
? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
|
||
: baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `wrapperValue` which returns the result of
|
||
* performing a sequence of actions on the unwrapped `value`, where each
|
||
* successive action is supplied the return value of the previous.
|
||
*
|
||
* @private
|
||
* @param {*} value The unwrapped value.
|
||
* @param {Array} actions Actions to perform to resolve the unwrapped value.
|
||
* @returns {*} Returns the resolved value.
|
||
*/
|
||
function baseWrapperValue(value, actions) {
|
||
var result = value;
|
||
if (result instanceof LazyWrapper) {
|
||
result = result.value();
|
||
}
|
||
return arrayReduce(actions, function(result, action) {
|
||
return action.func.apply(action.thisArg, arrayPush([result], action.args));
|
||
}, result);
|
||
}
|
||
|
||
/**
|
||
* The base implementation of methods like `_.xor`, without support for
|
||
* iteratee shorthands, that accepts an array of arrays to inspect.
|
||
*
|
||
* @private
|
||
* @param {Array} arrays The arrays to inspect.
|
||
* @param {Function} [iteratee] The iteratee invoked per element.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns the new array of values.
|
||
*/
|
||
function baseXor(arrays, iteratee, comparator) {
|
||
var length = arrays.length;
|
||
if (length < 2) {
|
||
return length ? baseUniq(arrays[0]) : [];
|
||
}
|
||
var index = -1,
|
||
result = Array(length);
|
||
|
||
while (++index < length) {
|
||
var array = arrays[index],
|
||
othIndex = -1;
|
||
|
||
while (++othIndex < length) {
|
||
if (othIndex != index) {
|
||
result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
|
||
}
|
||
}
|
||
}
|
||
return baseUniq(baseFlatten(result, 1), iteratee, comparator);
|
||
}
|
||
|
||
/**
|
||
* This base implementation of `_.zipObject` which assigns values using `assignFunc`.
|
||
*
|
||
* @private
|
||
* @param {Array} props The property identifiers.
|
||
* @param {Array} values The property values.
|
||
* @param {Function} assignFunc The function to assign values.
|
||
* @returns {Object} Returns the new object.
|
||
*/
|
||
function baseZipObject(props, values, assignFunc) {
|
||
var index = -1,
|
||
length = props.length,
|
||
valsLength = values.length,
|
||
result = {};
|
||
|
||
while (++index < length) {
|
||
var value = index < valsLength ? values[index] : undefined;
|
||
assignFunc(result, props[index], value);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Casts `value` to an empty array if it's not an array like object.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to inspect.
|
||
* @returns {Array|Object} Returns the cast array-like object.
|
||
*/
|
||
function castArrayLikeObject(value) {
|
||
return isArrayLikeObject(value) ? value : [];
|
||
}
|
||
|
||
/**
|
||
* Casts `value` to `identity` if it's not a function.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to inspect.
|
||
* @returns {Function} Returns cast function.
|
||
*/
|
||
function castFunction(value) {
|
||
return typeof value == 'function' ? value : identity;
|
||
}
|
||
|
||
/**
|
||
* Casts `value` to a path array if it's not one.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to inspect.
|
||
* @param {Object} [object] The object to query keys on.
|
||
* @returns {Array} Returns the cast property path array.
|
||
*/
|
||
function castPath(value, object) {
|
||
if (isArray(value)) {
|
||
return value;
|
||
}
|
||
return isKey(value, object) ? [value] : stringToPath(toString(value));
|
||
}
|
||
|
||
/**
|
||
* A `baseRest` alias which can be replaced with `identity` by module
|
||
* replacement plugins.
|
||
*
|
||
* @private
|
||
* @type {Function}
|
||
* @param {Function} func The function to apply a rest parameter to.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
var castRest = baseRest;
|
||
|
||
/**
|
||
* Casts `array` to a slice if it's needed.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to inspect.
|
||
* @param {number} start The start position.
|
||
* @param {number} [end=array.length] The end position.
|
||
* @returns {Array} Returns the cast slice.
|
||
*/
|
||
function castSlice(array, start, end) {
|
||
var length = array.length;
|
||
end = end === undefined ? length : end;
|
||
return (!start && end >= length) ? array : baseSlice(array, start, end);
|
||
}
|
||
|
||
/**
|
||
* A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
|
||
*
|
||
* @private
|
||
* @param {number|Object} id The timer id or timeout object of the timer to clear.
|
||
*/
|
||
var clearTimeout = ctxClearTimeout || function(id) {
|
||
return root.clearTimeout(id);
|
||
};
|
||
|
||
/**
|
||
* Creates a clone of `buffer`.
|
||
*
|
||
* @private
|
||
* @param {Buffer} buffer The buffer to clone.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Buffer} Returns the cloned buffer.
|
||
*/
|
||
function cloneBuffer(buffer, isDeep) {
|
||
if (isDeep) {
|
||
return buffer.slice();
|
||
}
|
||
var length = buffer.length,
|
||
result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
|
||
|
||
buffer.copy(result);
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `arrayBuffer`.
|
||
*
|
||
* @private
|
||
* @param {ArrayBuffer} arrayBuffer The array buffer to clone.
|
||
* @returns {ArrayBuffer} Returns the cloned array buffer.
|
||
*/
|
||
function cloneArrayBuffer(arrayBuffer) {
|
||
var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
|
||
new Uint8Array(result).set(new Uint8Array(arrayBuffer));
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `dataView`.
|
||
*
|
||
* @private
|
||
* @param {Object} dataView The data view to clone.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the cloned data view.
|
||
*/
|
||
function cloneDataView(dataView, isDeep) {
|
||
var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
|
||
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `regexp`.
|
||
*
|
||
* @private
|
||
* @param {Object} regexp The regexp to clone.
|
||
* @returns {Object} Returns the cloned regexp.
|
||
*/
|
||
function cloneRegExp(regexp) {
|
||
var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
|
||
result.lastIndex = regexp.lastIndex;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of the `symbol` object.
|
||
*
|
||
* @private
|
||
* @param {Object} symbol The symbol object to clone.
|
||
* @returns {Object} Returns the cloned symbol object.
|
||
*/
|
||
function cloneSymbol(symbol) {
|
||
return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `typedArray`.
|
||
*
|
||
* @private
|
||
* @param {Object} typedArray The typed array to clone.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the cloned typed array.
|
||
*/
|
||
function cloneTypedArray(typedArray, isDeep) {
|
||
var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
|
||
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
|
||
}
|
||
|
||
/**
|
||
* Compares values to sort them in ascending order.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {number} Returns the sort order indicator for `value`.
|
||
*/
|
||
function compareAscending(value, other) {
|
||
if (value !== other) {
|
||
var valIsDefined = value !== undefined,
|
||
valIsNull = value === null,
|
||
valIsReflexive = value === value,
|
||
valIsSymbol = isSymbol(value);
|
||
|
||
var othIsDefined = other !== undefined,
|
||
othIsNull = other === null,
|
||
othIsReflexive = other === other,
|
||
othIsSymbol = isSymbol(other);
|
||
|
||
if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
|
||
(valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
|
||
(valIsNull && othIsDefined && othIsReflexive) ||
|
||
(!valIsDefined && othIsReflexive) ||
|
||
!valIsReflexive) {
|
||
return 1;
|
||
}
|
||
if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
|
||
(othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
|
||
(othIsNull && valIsDefined && valIsReflexive) ||
|
||
(!othIsDefined && valIsReflexive) ||
|
||
!othIsReflexive) {
|
||
return -1;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* Used by `_.orderBy` to compare multiple properties of a value to another
|
||
* and stable sort them.
|
||
*
|
||
* If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
|
||
* specify an order of "desc" for descending or "asc" for ascending sort order
|
||
* of corresponding values.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to compare.
|
||
* @param {Object} other The other object to compare.
|
||
* @param {boolean[]|string[]} orders The order to sort by for each property.
|
||
* @returns {number} Returns the sort order indicator for `object`.
|
||
*/
|
||
function compareMultiple(object, other, orders) {
|
||
var index = -1,
|
||
objCriteria = object.criteria,
|
||
othCriteria = other.criteria,
|
||
length = objCriteria.length,
|
||
ordersLength = orders.length;
|
||
|
||
while (++index < length) {
|
||
var result = compareAscending(objCriteria[index], othCriteria[index]);
|
||
if (result) {
|
||
if (index >= ordersLength) {
|
||
return result;
|
||
}
|
||
var order = orders[index];
|
||
return result * (order == 'desc' ? -1 : 1);
|
||
}
|
||
}
|
||
// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
|
||
// that causes it, under certain circumstances, to provide the same value for
|
||
// `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
|
||
// for more details.
|
||
//
|
||
// This also ensures a stable sort in V8 and other engines.
|
||
// See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
|
||
return object.index - other.index;
|
||
}
|
||
|
||
/**
|
||
* Creates an array that is the composition of partially applied arguments,
|
||
* placeholders, and provided arguments into a single array of arguments.
|
||
*
|
||
* @private
|
||
* @param {Array} args The provided arguments.
|
||
* @param {Array} partials The arguments to prepend to those provided.
|
||
* @param {Array} holders The `partials` placeholder indexes.
|
||
* @params {boolean} [isCurried] Specify composing for a curried function.
|
||
* @returns {Array} Returns the new array of composed arguments.
|
||
*/
|
||
function composeArgs(args, partials, holders, isCurried) {
|
||
var argsIndex = -1,
|
||
argsLength = args.length,
|
||
holdersLength = holders.length,
|
||
leftIndex = -1,
|
||
leftLength = partials.length,
|
||
rangeLength = nativeMax(argsLength - holdersLength, 0),
|
||
result = Array(leftLength + rangeLength),
|
||
isUncurried = !isCurried;
|
||
|
||
while (++leftIndex < leftLength) {
|
||
result[leftIndex] = partials[leftIndex];
|
||
}
|
||
while (++argsIndex < holdersLength) {
|
||
if (isUncurried || argsIndex < argsLength) {
|
||
result[holders[argsIndex]] = args[argsIndex];
|
||
}
|
||
}
|
||
while (rangeLength--) {
|
||
result[leftIndex++] = args[argsIndex++];
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* This function is like `composeArgs` except that the arguments composition
|
||
* is tailored for `_.partialRight`.
|
||
*
|
||
* @private
|
||
* @param {Array} args The provided arguments.
|
||
* @param {Array} partials The arguments to append to those provided.
|
||
* @param {Array} holders The `partials` placeholder indexes.
|
||
* @params {boolean} [isCurried] Specify composing for a curried function.
|
||
* @returns {Array} Returns the new array of composed arguments.
|
||
*/
|
||
function composeArgsRight(args, partials, holders, isCurried) {
|
||
var argsIndex = -1,
|
||
argsLength = args.length,
|
||
holdersIndex = -1,
|
||
holdersLength = holders.length,
|
||
rightIndex = -1,
|
||
rightLength = partials.length,
|
||
rangeLength = nativeMax(argsLength - holdersLength, 0),
|
||
result = Array(rangeLength + rightLength),
|
||
isUncurried = !isCurried;
|
||
|
||
while (++argsIndex < rangeLength) {
|
||
result[argsIndex] = args[argsIndex];
|
||
}
|
||
var offset = argsIndex;
|
||
while (++rightIndex < rightLength) {
|
||
result[offset + rightIndex] = partials[rightIndex];
|
||
}
|
||
while (++holdersIndex < holdersLength) {
|
||
if (isUncurried || argsIndex < argsLength) {
|
||
result[offset + holders[holdersIndex]] = args[argsIndex++];
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Copies the values of `source` to `array`.
|
||
*
|
||
* @private
|
||
* @param {Array} source The array to copy values from.
|
||
* @param {Array} [array=[]] The array to copy values to.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function copyArray(source, array) {
|
||
var index = -1,
|
||
length = source.length;
|
||
|
||
array || (array = Array(length));
|
||
while (++index < length) {
|
||
array[index] = source[index];
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* Copies properties of `source` to `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} source The object to copy properties from.
|
||
* @param {Array} props The property identifiers to copy.
|
||
* @param {Object} [object={}] The object to copy properties to.
|
||
* @param {Function} [customizer] The function to customize copied values.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function copyObject(source, props, object, customizer) {
|
||
var isNew = !object;
|
||
object || (object = {});
|
||
|
||
var index = -1,
|
||
length = props.length;
|
||
|
||
while (++index < length) {
|
||
var key = props[index];
|
||
|
||
var newValue = customizer
|
||
? customizer(object[key], source[key], key, object, source)
|
||
: undefined;
|
||
|
||
if (newValue === undefined) {
|
||
newValue = source[key];
|
||
}
|
||
if (isNew) {
|
||
baseAssignValue(object, key, newValue);
|
||
} else {
|
||
assignValue(object, key, newValue);
|
||
}
|
||
}
|
||
return object;
|
||
}
|
||
|
||
/**
|
||
* Copies own symbols of `source` to `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} source The object to copy symbols from.
|
||
* @param {Object} [object={}] The object to copy symbols to.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function copySymbols(source, object) {
|
||
return copyObject(source, getSymbols(source), object);
|
||
}
|
||
|
||
/**
|
||
* Copies own and inherited symbols of `source` to `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} source The object to copy symbols from.
|
||
* @param {Object} [object={}] The object to copy symbols to.
|
||
* @returns {Object} Returns `object`.
|
||
*/
|
||
function copySymbolsIn(source, object) {
|
||
return copyObject(source, getSymbolsIn(source), object);
|
||
}
|
||
|
||
/**
|
||
* Creates a function like `_.groupBy`.
|
||
*
|
||
* @private
|
||
* @param {Function} setter The function to set accumulator values.
|
||
* @param {Function} [initializer] The accumulator object initializer.
|
||
* @returns {Function} Returns the new aggregator function.
|
||
*/
|
||
function createAggregator(setter, initializer) {
|
||
return function(collection, iteratee) {
|
||
var func = isArray(collection) ? arrayAggregator : baseAggregator,
|
||
accumulator = initializer ? initializer() : {};
|
||
|
||
return func(collection, setter, getIteratee(iteratee, 2), accumulator);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function like `_.assign`.
|
||
*
|
||
* @private
|
||
* @param {Function} assigner The function to assign values.
|
||
* @returns {Function} Returns the new assigner function.
|
||
*/
|
||
function createAssigner(assigner) {
|
||
return baseRest(function(object, sources) {
|
||
var index = -1,
|
||
length = sources.length,
|
||
customizer = length > 1 ? sources[length - 1] : undefined,
|
||
guard = length > 2 ? sources[2] : undefined;
|
||
|
||
customizer = (assigner.length > 3 && typeof customizer == 'function')
|
||
? (length--, customizer)
|
||
: undefined;
|
||
|
||
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
|
||
customizer = length < 3 ? undefined : customizer;
|
||
length = 1;
|
||
}
|
||
object = Object(object);
|
||
while (++index < length) {
|
||
var source = sources[index];
|
||
if (source) {
|
||
assigner(object, source, index, customizer);
|
||
}
|
||
}
|
||
return object;
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates a `baseEach` or `baseEachRight` function.
|
||
*
|
||
* @private
|
||
* @param {Function} eachFunc The function to iterate over a collection.
|
||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||
* @returns {Function} Returns the new base function.
|
||
*/
|
||
function createBaseEach(eachFunc, fromRight) {
|
||
return function(collection, iteratee) {
|
||
if (collection == null) {
|
||
return collection;
|
||
}
|
||
if (!isArrayLike(collection)) {
|
||
return eachFunc(collection, iteratee);
|
||
}
|
||
var length = collection.length,
|
||
index = fromRight ? length : -1,
|
||
iterable = Object(collection);
|
||
|
||
while ((fromRight ? index-- : ++index < length)) {
|
||
if (iteratee(iterable[index], index, iterable) === false) {
|
||
break;
|
||
}
|
||
}
|
||
return collection;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a base function for methods like `_.forIn` and `_.forOwn`.
|
||
*
|
||
* @private
|
||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||
* @returns {Function} Returns the new base function.
|
||
*/
|
||
function createBaseFor(fromRight) {
|
||
return function(object, iteratee, keysFunc) {
|
||
var index = -1,
|
||
iterable = Object(object),
|
||
props = keysFunc(object),
|
||
length = props.length;
|
||
|
||
while (length--) {
|
||
var key = props[fromRight ? length : ++index];
|
||
if (iteratee(iterable[key], key, iterable) === false) {
|
||
break;
|
||
}
|
||
}
|
||
return object;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that wraps `func` to invoke it with the optional `this`
|
||
* binding of `thisArg`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to wrap.
|
||
* @param {number} bitmask The bitmask flags. See `createWrap` for more details.
|
||
* @param {*} [thisArg] The `this` binding of `func`.
|
||
* @returns {Function} Returns the new wrapped function.
|
||
*/
|
||
function createBind(func, bitmask, thisArg) {
|
||
var isBind = bitmask & WRAP_BIND_FLAG,
|
||
Ctor = createCtor(func);
|
||
|
||
function wrapper() {
|
||
var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
|
||
return fn.apply(isBind ? thisArg : this, arguments);
|
||
}
|
||
return wrapper;
|
||
}
|
||
|
||
/**
|
||
* Creates a function like `_.lowerFirst`.
|
||
*
|
||
* @private
|
||
* @param {string} methodName The name of the `String` case method to use.
|
||
* @returns {Function} Returns the new case function.
|
||
*/
|
||
function createCaseFirst(methodName) {
|
||
return function(string) {
|
||
string = toString(string);
|
||
|
||
var strSymbols = hasUnicode(string)
|
||
? stringToArray(string)
|
||
: undefined;
|
||
|
||
var chr = strSymbols
|
||
? strSymbols[0]
|
||
: string.charAt(0);
|
||
|
||
var trailing = strSymbols
|
||
? castSlice(strSymbols, 1).join('')
|
||
: string.slice(1);
|
||
|
||
return chr[methodName]() + trailing;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function like `_.camelCase`.
|
||
*
|
||
* @private
|
||
* @param {Function} callback The function to combine each word.
|
||
* @returns {Function} Returns the new compounder function.
|
||
*/
|
||
function createCompounder(callback) {
|
||
return function(string) {
|
||
return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that produces an instance of `Ctor` regardless of
|
||
* whether it was invoked as part of a `new` expression or by `call` or `apply`.
|
||
*
|
||
* @private
|
||
* @param {Function} Ctor The constructor to wrap.
|
||
* @returns {Function} Returns the new wrapped function.
|
||
*/
|
||
function createCtor(Ctor) {
|
||
return function() {
|
||
// Use a `switch` statement to work with class constructors. See
|
||
// http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
|
||
// for more details.
|
||
var args = arguments;
|
||
switch (args.length) {
|
||
case 0: return new Ctor;
|
||
case 1: return new Ctor(args[0]);
|
||
case 2: return new Ctor(args[0], args[1]);
|
||
case 3: return new Ctor(args[0], args[1], args[2]);
|
||
case 4: return new Ctor(args[0], args[1], args[2], args[3]);
|
||
case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
|
||
case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
|
||
case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
|
||
}
|
||
var thisBinding = baseCreate(Ctor.prototype),
|
||
result = Ctor.apply(thisBinding, args);
|
||
|
||
// Mimic the constructor's `return` behavior.
|
||
// See https://es5.github.io/#x13.2.2 for more details.
|
||
return isObject(result) ? result : thisBinding;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that wraps `func` to enable currying.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to wrap.
|
||
* @param {number} bitmask The bitmask flags. See `createWrap` for more details.
|
||
* @param {number} arity The arity of `func`.
|
||
* @returns {Function} Returns the new wrapped function.
|
||
*/
|
||
function createCurry(func, bitmask, arity) {
|
||
var Ctor = createCtor(func);
|
||
|
||
function wrapper() {
|
||
var length = arguments.length,
|
||
args = Array(length),
|
||
index = length,
|
||
placeholder = getHolder(wrapper);
|
||
|
||
while (index--) {
|
||
args[index] = arguments[index];
|
||
}
|
||
var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
|
||
? []
|
||
: replaceHolders(args, placeholder);
|
||
|
||
length -= holders.length;
|
||
if (length < arity) {
|
||
return createRecurry(
|
||
func, bitmask, createHybrid, wrapper.placeholder, undefined,
|
||
args, holders, undefined, undefined, arity - length);
|
||
}
|
||
var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
|
||
return apply(fn, this, args);
|
||
}
|
||
return wrapper;
|
||
}
|
||
|
||
/**
|
||
* Creates a `_.find` or `_.findLast` function.
|
||
*
|
||
* @private
|
||
* @param {Function} findIndexFunc The function to find the collection index.
|
||
* @returns {Function} Returns the new find function.
|
||
*/
|
||
function createFind(findIndexFunc) {
|
||
return function(collection, predicate, fromIndex) {
|
||
var iterable = Object(collection);
|
||
if (!isArrayLike(collection)) {
|
||
var iteratee = getIteratee(predicate, 3);
|
||
collection = keys(collection);
|
||
predicate = function(key) { return iteratee(iterable[key], key, iterable); };
|
||
}
|
||
var index = findIndexFunc(collection, predicate, fromIndex);
|
||
return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a `_.flow` or `_.flowRight` function.
|
||
*
|
||
* @private
|
||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||
* @returns {Function} Returns the new flow function.
|
||
*/
|
||
function createFlow(fromRight) {
|
||
return flatRest(function(funcs) {
|
||
var length = funcs.length,
|
||
index = length,
|
||
prereq = LodashWrapper.prototype.thru;
|
||
|
||
if (fromRight) {
|
||
funcs.reverse();
|
||
}
|
||
while (index--) {
|
||
var func = funcs[index];
|
||
if (typeof func != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
|
||
var wrapper = new LodashWrapper([], true);
|
||
}
|
||
}
|
||
index = wrapper ? index : length;
|
||
while (++index < length) {
|
||
func = funcs[index];
|
||
|
||
var funcName = getFuncName(func),
|
||
data = funcName == 'wrapper' ? getData(func) : undefined;
|
||
|
||
if (data && isLaziable(data[0]) &&
|
||
data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
|
||
!data[4].length && data[9] == 1
|
||
) {
|
||
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
|
||
} else {
|
||
wrapper = (func.length == 1 && isLaziable(func))
|
||
? wrapper[funcName]()
|
||
: wrapper.thru(func);
|
||
}
|
||
}
|
||
return function() {
|
||
var args = arguments,
|
||
value = args[0];
|
||
|
||
if (wrapper && args.length == 1 && isArray(value)) {
|
||
return wrapper.plant(value).value();
|
||
}
|
||
var index = 0,
|
||
result = length ? funcs[index].apply(this, args) : value;
|
||
|
||
while (++index < length) {
|
||
result = funcs[index].call(this, result);
|
||
}
|
||
return result;
|
||
};
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates a function that wraps `func` to invoke it with optional `this`
|
||
* binding of `thisArg`, partial application, and currying.
|
||
*
|
||
* @private
|
||
* @param {Function|string} func The function or method name to wrap.
|
||
* @param {number} bitmask The bitmask flags. See `createWrap` for more details.
|
||
* @param {*} [thisArg] The `this` binding of `func`.
|
||
* @param {Array} [partials] The arguments to prepend to those provided to
|
||
* the new function.
|
||
* @param {Array} [holders] The `partials` placeholder indexes.
|
||
* @param {Array} [partialsRight] The arguments to append to those provided
|
||
* to the new function.
|
||
* @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
|
||
* @param {Array} [argPos] The argument positions of the new function.
|
||
* @param {number} [ary] The arity cap of `func`.
|
||
* @param {number} [arity] The arity of `func`.
|
||
* @returns {Function} Returns the new wrapped function.
|
||
*/
|
||
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
|
||
var isAry = bitmask & WRAP_ARY_FLAG,
|
||
isBind = bitmask & WRAP_BIND_FLAG,
|
||
isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
|
||
isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
|
||
isFlip = bitmask & WRAP_FLIP_FLAG,
|
||
Ctor = isBindKey ? undefined : createCtor(func);
|
||
|
||
function wrapper() {
|
||
var length = arguments.length,
|
||
args = Array(length),
|
||
index = length;
|
||
|
||
while (index--) {
|
||
args[index] = arguments[index];
|
||
}
|
||
if (isCurried) {
|
||
var placeholder = getHolder(wrapper),
|
||
holdersCount = countHolders(args, placeholder);
|
||
}
|
||
if (partials) {
|
||
args = composeArgs(args, partials, holders, isCurried);
|
||
}
|
||
if (partialsRight) {
|
||
args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
|
||
}
|
||
length -= holdersCount;
|
||
if (isCurried && length < arity) {
|
||
var newHolders = replaceHolders(args, placeholder);
|
||
return createRecurry(
|
||
func, bitmask, createHybrid, wrapper.placeholder, thisArg,
|
||
args, newHolders, argPos, ary, arity - length
|
||
);
|
||
}
|
||
var thisBinding = isBind ? thisArg : this,
|
||
fn = isBindKey ? thisBinding[func] : func;
|
||
|
||
length = args.length;
|
||
if (argPos) {
|
||
args = reorder(args, argPos);
|
||
} else if (isFlip && length > 1) {
|
||
args.reverse();
|
||
}
|
||
if (isAry && ary < length) {
|
||
args.length = ary;
|
||
}
|
||
if (this && this !== root && this instanceof wrapper) {
|
||
fn = Ctor || createCtor(fn);
|
||
}
|
||
return fn.apply(thisBinding, args);
|
||
}
|
||
return wrapper;
|
||
}
|
||
|
||
/**
|
||
* Creates a function like `_.invertBy`.
|
||
*
|
||
* @private
|
||
* @param {Function} setter The function to set accumulator values.
|
||
* @param {Function} toIteratee The function to resolve iteratees.
|
||
* @returns {Function} Returns the new inverter function.
|
||
*/
|
||
function createInverter(setter, toIteratee) {
|
||
return function(object, iteratee) {
|
||
return baseInverter(object, setter, toIteratee(iteratee), {});
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that performs a mathematical operation on two values.
|
||
*
|
||
* @private
|
||
* @param {Function} operator The function to perform the operation.
|
||
* @param {number} [defaultValue] The value used for `undefined` arguments.
|
||
* @returns {Function} Returns the new mathematical operation function.
|
||
*/
|
||
function createMathOperation(operator, defaultValue) {
|
||
return function(value, other) {
|
||
var result;
|
||
if (value === undefined && other === undefined) {
|
||
return defaultValue;
|
||
}
|
||
if (value !== undefined) {
|
||
result = value;
|
||
}
|
||
if (other !== undefined) {
|
||
if (result === undefined) {
|
||
return other;
|
||
}
|
||
if (typeof value == 'string' || typeof other == 'string') {
|
||
value = baseToString(value);
|
||
other = baseToString(other);
|
||
} else {
|
||
value = baseToNumber(value);
|
||
other = baseToNumber(other);
|
||
}
|
||
result = operator(value, other);
|
||
}
|
||
return result;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function like `_.over`.
|
||
*
|
||
* @private
|
||
* @param {Function} arrayFunc The function to iterate over iteratees.
|
||
* @returns {Function} Returns the new over function.
|
||
*/
|
||
function createOver(arrayFunc) {
|
||
return flatRest(function(iteratees) {
|
||
iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
|
||
return baseRest(function(args) {
|
||
var thisArg = this;
|
||
return arrayFunc(iteratees, function(iteratee) {
|
||
return apply(iteratee, thisArg, args);
|
||
});
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates the padding for `string` based on `length`. The `chars` string
|
||
* is truncated if the number of characters exceeds `length`.
|
||
*
|
||
* @private
|
||
* @param {number} length The padding length.
|
||
* @param {string} [chars=' '] The string used as padding.
|
||
* @returns {string} Returns the padding for `string`.
|
||
*/
|
||
function createPadding(length, chars) {
|
||
chars = chars === undefined ? ' ' : baseToString(chars);
|
||
|
||
var charsLength = chars.length;
|
||
if (charsLength < 2) {
|
||
return charsLength ? baseRepeat(chars, length) : chars;
|
||
}
|
||
var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
|
||
return hasUnicode(chars)
|
||
? castSlice(stringToArray(result), 0, length).join('')
|
||
: result.slice(0, length);
|
||
}
|
||
|
||
/**
|
||
* Creates a function that wraps `func` to invoke it with the `this` binding
|
||
* of `thisArg` and `partials` prepended to the arguments it receives.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to wrap.
|
||
* @param {number} bitmask The bitmask flags. See `createWrap` for more details.
|
||
* @param {*} thisArg The `this` binding of `func`.
|
||
* @param {Array} partials The arguments to prepend to those provided to
|
||
* the new function.
|
||
* @returns {Function} Returns the new wrapped function.
|
||
*/
|
||
function createPartial(func, bitmask, thisArg, partials) {
|
||
var isBind = bitmask & WRAP_BIND_FLAG,
|
||
Ctor = createCtor(func);
|
||
|
||
function wrapper() {
|
||
var argsIndex = -1,
|
||
argsLength = arguments.length,
|
||
leftIndex = -1,
|
||
leftLength = partials.length,
|
||
args = Array(leftLength + argsLength),
|
||
fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
|
||
|
||
while (++leftIndex < leftLength) {
|
||
args[leftIndex] = partials[leftIndex];
|
||
}
|
||
while (argsLength--) {
|
||
args[leftIndex++] = arguments[++argsIndex];
|
||
}
|
||
return apply(fn, isBind ? thisArg : this, args);
|
||
}
|
||
return wrapper;
|
||
}
|
||
|
||
/**
|
||
* Creates a `_.range` or `_.rangeRight` function.
|
||
*
|
||
* @private
|
||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||
* @returns {Function} Returns the new range function.
|
||
*/
|
||
function createRange(fromRight) {
|
||
return function(start, end, step) {
|
||
if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
|
||
end = step = undefined;
|
||
}
|
||
// Ensure the sign of `-0` is preserved.
|
||
start = toFinite(start);
|
||
if (end === undefined) {
|
||
end = start;
|
||
start = 0;
|
||
} else {
|
||
end = toFinite(end);
|
||
}
|
||
step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
|
||
return baseRange(start, end, step, fromRight);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that performs a relational operation on two values.
|
||
*
|
||
* @private
|
||
* @param {Function} operator The function to perform the operation.
|
||
* @returns {Function} Returns the new relational operation function.
|
||
*/
|
||
function createRelationalOperation(operator) {
|
||
return function(value, other) {
|
||
if (!(typeof value == 'string' && typeof other == 'string')) {
|
||
value = toNumber(value);
|
||
other = toNumber(other);
|
||
}
|
||
return operator(value, other);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that wraps `func` to continue currying.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to wrap.
|
||
* @param {number} bitmask The bitmask flags. See `createWrap` for more details.
|
||
* @param {Function} wrapFunc The function to create the `func` wrapper.
|
||
* @param {*} placeholder The placeholder value.
|
||
* @param {*} [thisArg] The `this` binding of `func`.
|
||
* @param {Array} [partials] The arguments to prepend to those provided to
|
||
* the new function.
|
||
* @param {Array} [holders] The `partials` placeholder indexes.
|
||
* @param {Array} [argPos] The argument positions of the new function.
|
||
* @param {number} [ary] The arity cap of `func`.
|
||
* @param {number} [arity] The arity of `func`.
|
||
* @returns {Function} Returns the new wrapped function.
|
||
*/
|
||
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
|
||
var isCurry = bitmask & WRAP_CURRY_FLAG,
|
||
newHolders = isCurry ? holders : undefined,
|
||
newHoldersRight = isCurry ? undefined : holders,
|
||
newPartials = isCurry ? partials : undefined,
|
||
newPartialsRight = isCurry ? undefined : partials;
|
||
|
||
bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
|
||
bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
|
||
|
||
if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
|
||
bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
|
||
}
|
||
var newData = [
|
||
func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
|
||
newHoldersRight, argPos, ary, arity
|
||
];
|
||
|
||
var result = wrapFunc.apply(undefined, newData);
|
||
if (isLaziable(func)) {
|
||
setData(result, newData);
|
||
}
|
||
result.placeholder = placeholder;
|
||
return setWrapToString(result, func, bitmask);
|
||
}
|
||
|
||
/**
|
||
* Creates a function like `_.round`.
|
||
*
|
||
* @private
|
||
* @param {string} methodName The name of the `Math` method to use when rounding.
|
||
* @returns {Function} Returns the new round function.
|
||
*/
|
||
function createRound(methodName) {
|
||
var func = Math[methodName];
|
||
return function(number, precision) {
|
||
number = toNumber(number);
|
||
precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
|
||
if (precision) {
|
||
// Shift with exponential notation to avoid floating-point issues.
|
||
// See [MDN](https://mdn.io/round#Examples) for more details.
|
||
var pair = (toString(number) + 'e').split('e'),
|
||
value = func(pair[0] + 'e' + (+pair[1] + precision));
|
||
|
||
pair = (toString(value) + 'e').split('e');
|
||
return +(pair[0] + 'e' + (+pair[1] - precision));
|
||
}
|
||
return func(number);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a set object of `values`.
|
||
*
|
||
* @private
|
||
* @param {Array} values The values to add to the set.
|
||
* @returns {Object} Returns the new set.
|
||
*/
|
||
var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
|
||
return new Set(values);
|
||
};
|
||
|
||
/**
|
||
* Creates a `_.toPairs` or `_.toPairsIn` function.
|
||
*
|
||
* @private
|
||
* @param {Function} keysFunc The function to get the keys of a given object.
|
||
* @returns {Function} Returns the new pairs function.
|
||
*/
|
||
function createToPairs(keysFunc) {
|
||
return function(object) {
|
||
var tag = getTag(object);
|
||
if (tag == mapTag) {
|
||
return mapToArray(object);
|
||
}
|
||
if (tag == setTag) {
|
||
return setToPairs(object);
|
||
}
|
||
return baseToPairs(object, keysFunc(object));
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that either curries or invokes `func` with optional
|
||
* `this` binding and partially applied arguments.
|
||
*
|
||
* @private
|
||
* @param {Function|string} func The function or method name to wrap.
|
||
* @param {number} bitmask The bitmask flags.
|
||
* 1 - `_.bind`
|
||
* 2 - `_.bindKey`
|
||
* 4 - `_.curry` or `_.curryRight` of a bound function
|
||
* 8 - `_.curry`
|
||
* 16 - `_.curryRight`
|
||
* 32 - `_.partial`
|
||
* 64 - `_.partialRight`
|
||
* 128 - `_.rearg`
|
||
* 256 - `_.ary`
|
||
* 512 - `_.flip`
|
||
* @param {*} [thisArg] The `this` binding of `func`.
|
||
* @param {Array} [partials] The arguments to be partially applied.
|
||
* @param {Array} [holders] The `partials` placeholder indexes.
|
||
* @param {Array} [argPos] The argument positions of the new function.
|
||
* @param {number} [ary] The arity cap of `func`.
|
||
* @param {number} [arity] The arity of `func`.
|
||
* @returns {Function} Returns the new wrapped function.
|
||
*/
|
||
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
|
||
var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
|
||
if (!isBindKey && typeof func != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
var length = partials ? partials.length : 0;
|
||
if (!length) {
|
||
bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
|
||
partials = holders = undefined;
|
||
}
|
||
ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
|
||
arity = arity === undefined ? arity : toInteger(arity);
|
||
length -= holders ? holders.length : 0;
|
||
|
||
if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
|
||
var partialsRight = partials,
|
||
holdersRight = holders;
|
||
|
||
partials = holders = undefined;
|
||
}
|
||
var data = isBindKey ? undefined : getData(func);
|
||
|
||
var newData = [
|
||
func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
|
||
argPos, ary, arity
|
||
];
|
||
|
||
if (data) {
|
||
mergeData(newData, data);
|
||
}
|
||
func = newData[0];
|
||
bitmask = newData[1];
|
||
thisArg = newData[2];
|
||
partials = newData[3];
|
||
holders = newData[4];
|
||
arity = newData[9] = newData[9] === undefined
|
||
? (isBindKey ? 0 : func.length)
|
||
: nativeMax(newData[9] - length, 0);
|
||
|
||
if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
|
||
bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
|
||
}
|
||
if (!bitmask || bitmask == WRAP_BIND_FLAG) {
|
||
var result = createBind(func, bitmask, thisArg);
|
||
} else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
|
||
result = createCurry(func, bitmask, arity);
|
||
} else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
|
||
result = createPartial(func, bitmask, thisArg, partials);
|
||
} else {
|
||
result = createHybrid.apply(undefined, newData);
|
||
}
|
||
var setter = data ? baseSetData : setData;
|
||
return setWrapToString(setter(result, newData), func, bitmask);
|
||
}
|
||
|
||
/**
|
||
* Used by `_.defaults` to customize its `_.assignIn` use to assign properties
|
||
* of source objects to the destination object for all destination properties
|
||
* that resolve to `undefined`.
|
||
*
|
||
* @private
|
||
* @param {*} objValue The destination value.
|
||
* @param {*} srcValue The source value.
|
||
* @param {string} key The key of the property to assign.
|
||
* @param {Object} object The parent object of `objValue`.
|
||
* @returns {*} Returns the value to assign.
|
||
*/
|
||
function customDefaultsAssignIn(objValue, srcValue, key, object) {
|
||
if (objValue === undefined ||
|
||
(eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
|
||
return srcValue;
|
||
}
|
||
return objValue;
|
||
}
|
||
|
||
/**
|
||
* Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
|
||
* objects into destination objects that are passed thru.
|
||
*
|
||
* @private
|
||
* @param {*} objValue The destination value.
|
||
* @param {*} srcValue The source value.
|
||
* @param {string} key The key of the property to merge.
|
||
* @param {Object} object The parent object of `objValue`.
|
||
* @param {Object} source The parent object of `srcValue`.
|
||
* @param {Object} [stack] Tracks traversed source values and their merged
|
||
* counterparts.
|
||
* @returns {*} Returns the value to assign.
|
||
*/
|
||
function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
|
||
if (isObject(objValue) && isObject(srcValue)) {
|
||
// Recursively merge objects and arrays (susceptible to call stack limits).
|
||
stack.set(srcValue, objValue);
|
||
baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
|
||
stack['delete'](srcValue);
|
||
}
|
||
return objValue;
|
||
}
|
||
|
||
/**
|
||
* Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
|
||
* objects.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to inspect.
|
||
* @param {string} key The key of the property to inspect.
|
||
* @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
|
||
*/
|
||
function customOmitClone(value) {
|
||
return isPlainObject(value) ? undefined : value;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseIsEqualDeep` for arrays with support for
|
||
* partial deep comparisons.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to compare.
|
||
* @param {Array} other The other array to compare.
|
||
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
|
||
* @param {Function} customizer The function to customize comparisons.
|
||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||
* @param {Object} stack Tracks traversed `array` and `other` objects.
|
||
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
|
||
*/
|
||
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
|
||
var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
|
||
arrLength = array.length,
|
||
othLength = other.length;
|
||
|
||
if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
|
||
return false;
|
||
}
|
||
// Assume cyclic values are equal.
|
||
var stacked = stack.get(array);
|
||
if (stacked && stack.get(other)) {
|
||
return stacked == other;
|
||
}
|
||
var index = -1,
|
||
result = true,
|
||
seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
|
||
|
||
stack.set(array, other);
|
||
stack.set(other, array);
|
||
|
||
// Ignore non-index properties.
|
||
while (++index < arrLength) {
|
||
var arrValue = array[index],
|
||
othValue = other[index];
|
||
|
||
if (customizer) {
|
||
var compared = isPartial
|
||
? customizer(othValue, arrValue, index, other, array, stack)
|
||
: customizer(arrValue, othValue, index, array, other, stack);
|
||
}
|
||
if (compared !== undefined) {
|
||
if (compared) {
|
||
continue;
|
||
}
|
||
result = false;
|
||
break;
|
||
}
|
||
// Recursively compare arrays (susceptible to call stack limits).
|
||
if (seen) {
|
||
if (!arraySome(other, function(othValue, othIndex) {
|
||
if (!cacheHas(seen, othIndex) &&
|
||
(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
|
||
return seen.push(othIndex);
|
||
}
|
||
})) {
|
||
result = false;
|
||
break;
|
||
}
|
||
} else if (!(
|
||
arrValue === othValue ||
|
||
equalFunc(arrValue, othValue, bitmask, customizer, stack)
|
||
)) {
|
||
result = false;
|
||
break;
|
||
}
|
||
}
|
||
stack['delete'](array);
|
||
stack['delete'](other);
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseIsEqualDeep` for comparing objects of
|
||
* the same `toStringTag`.
|
||
*
|
||
* **Note:** This function only supports comparing values with tags of
|
||
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to compare.
|
||
* @param {Object} other The other object to compare.
|
||
* @param {string} tag The `toStringTag` of the objects to compare.
|
||
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
|
||
* @param {Function} customizer The function to customize comparisons.
|
||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||
* @param {Object} stack Tracks traversed `object` and `other` objects.
|
||
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
||
*/
|
||
function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
|
||
switch (tag) {
|
||
case dataViewTag:
|
||
if ((object.byteLength != other.byteLength) ||
|
||
(object.byteOffset != other.byteOffset)) {
|
||
return false;
|
||
}
|
||
object = object.buffer;
|
||
other = other.buffer;
|
||
|
||
case arrayBufferTag:
|
||
if ((object.byteLength != other.byteLength) ||
|
||
!equalFunc(new Uint8Array(object), new Uint8Array(other))) {
|
||
return false;
|
||
}
|
||
return true;
|
||
|
||
case boolTag:
|
||
case dateTag:
|
||
case numberTag:
|
||
// Coerce booleans to `1` or `0` and dates to milliseconds.
|
||
// Invalid dates are coerced to `NaN`.
|
||
return eq(+object, +other);
|
||
|
||
case errorTag:
|
||
return object.name == other.name && object.message == other.message;
|
||
|
||
case regexpTag:
|
||
case stringTag:
|
||
// Coerce regexes to strings and treat strings, primitives and objects,
|
||
// as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
|
||
// for more details.
|
||
return object == (other + '');
|
||
|
||
case mapTag:
|
||
var convert = mapToArray;
|
||
|
||
case setTag:
|
||
var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
|
||
convert || (convert = setToArray);
|
||
|
||
if (object.size != other.size && !isPartial) {
|
||
return false;
|
||
}
|
||
// Assume cyclic values are equal.
|
||
var stacked = stack.get(object);
|
||
if (stacked) {
|
||
return stacked == other;
|
||
}
|
||
bitmask |= COMPARE_UNORDERED_FLAG;
|
||
|
||
// Recursively compare objects (susceptible to call stack limits).
|
||
stack.set(object, other);
|
||
var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
|
||
stack['delete'](object);
|
||
return result;
|
||
|
||
case symbolTag:
|
||
if (symbolValueOf) {
|
||
return symbolValueOf.call(object) == symbolValueOf.call(other);
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseIsEqualDeep` for objects with support for
|
||
* partial deep comparisons.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to compare.
|
||
* @param {Object} other The other object to compare.
|
||
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
|
||
* @param {Function} customizer The function to customize comparisons.
|
||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||
* @param {Object} stack Tracks traversed `object` and `other` objects.
|
||
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
||
*/
|
||
function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
|
||
var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
|
||
objProps = getAllKeys(object),
|
||
objLength = objProps.length,
|
||
othProps = getAllKeys(other),
|
||
othLength = othProps.length;
|
||
|
||
if (objLength != othLength && !isPartial) {
|
||
return false;
|
||
}
|
||
var index = objLength;
|
||
while (index--) {
|
||
var key = objProps[index];
|
||
if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
|
||
return false;
|
||
}
|
||
}
|
||
// Assume cyclic values are equal.
|
||
var stacked = stack.get(object);
|
||
if (stacked && stack.get(other)) {
|
||
return stacked == other;
|
||
}
|
||
var result = true;
|
||
stack.set(object, other);
|
||
stack.set(other, object);
|
||
|
||
var skipCtor = isPartial;
|
||
while (++index < objLength) {
|
||
key = objProps[index];
|
||
var objValue = object[key],
|
||
othValue = other[key];
|
||
|
||
if (customizer) {
|
||
var compared = isPartial
|
||
? customizer(othValue, objValue, key, other, object, stack)
|
||
: customizer(objValue, othValue, key, object, other, stack);
|
||
}
|
||
// Recursively compare objects (susceptible to call stack limits).
|
||
if (!(compared === undefined
|
||
? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
|
||
: compared
|
||
)) {
|
||
result = false;
|
||
break;
|
||
}
|
||
skipCtor || (skipCtor = key == 'constructor');
|
||
}
|
||
if (result && !skipCtor) {
|
||
var objCtor = object.constructor,
|
||
othCtor = other.constructor;
|
||
|
||
// Non `Object` object instances with different constructors are not equal.
|
||
if (objCtor != othCtor &&
|
||
('constructor' in object && 'constructor' in other) &&
|
||
!(typeof objCtor == 'function' && objCtor instanceof objCtor &&
|
||
typeof othCtor == 'function' && othCtor instanceof othCtor)) {
|
||
result = false;
|
||
}
|
||
}
|
||
stack['delete'](object);
|
||
stack['delete'](other);
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseRest` which flattens the rest array.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to apply a rest parameter to.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function flatRest(func) {
|
||
return setToString(overRest(func, undefined, flatten), func + '');
|
||
}
|
||
|
||
/**
|
||
* Creates an array of own enumerable property names and symbols of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names and symbols.
|
||
*/
|
||
function getAllKeys(object) {
|
||
return baseGetAllKeys(object, keys, getSymbols);
|
||
}
|
||
|
||
/**
|
||
* Creates an array of own and inherited enumerable property names and
|
||
* symbols of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names and symbols.
|
||
*/
|
||
function getAllKeysIn(object) {
|
||
return baseGetAllKeys(object, keysIn, getSymbolsIn);
|
||
}
|
||
|
||
/**
|
||
* Gets metadata for `func`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to query.
|
||
* @returns {*} Returns the metadata for `func`.
|
||
*/
|
||
var getData = !metaMap ? noop : function(func) {
|
||
return metaMap.get(func);
|
||
};
|
||
|
||
/**
|
||
* Gets the name of `func`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to query.
|
||
* @returns {string} Returns the function name.
|
||
*/
|
||
function getFuncName(func) {
|
||
var result = (func.name + ''),
|
||
array = realNames[result],
|
||
length = hasOwnProperty.call(realNames, result) ? array.length : 0;
|
||
|
||
while (length--) {
|
||
var data = array[length],
|
||
otherFunc = data.func;
|
||
if (otherFunc == null || otherFunc == func) {
|
||
return data.name;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Gets the argument placeholder value for `func`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to inspect.
|
||
* @returns {*} Returns the placeholder value.
|
||
*/
|
||
function getHolder(func) {
|
||
var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
|
||
return object.placeholder;
|
||
}
|
||
|
||
/**
|
||
* Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
|
||
* this function returns the custom method, otherwise it returns `baseIteratee`.
|
||
* If arguments are provided, the chosen function is invoked with them and
|
||
* its result is returned.
|
||
*
|
||
* @private
|
||
* @param {*} [value] The value to convert to an iteratee.
|
||
* @param {number} [arity] The arity of the created iteratee.
|
||
* @returns {Function} Returns the chosen function or its result.
|
||
*/
|
||
function getIteratee() {
|
||
var result = lodash.iteratee || iteratee;
|
||
result = result === iteratee ? baseIteratee : result;
|
||
return arguments.length ? result(arguments[0], arguments[1]) : result;
|
||
}
|
||
|
||
/**
|
||
* Gets the data for `map`.
|
||
*
|
||
* @private
|
||
* @param {Object} map The map to query.
|
||
* @param {string} key The reference key.
|
||
* @returns {*} Returns the map data.
|
||
*/
|
||
function getMapData(map, key) {
|
||
var data = map.__data__;
|
||
return isKeyable(key)
|
||
? data[typeof key == 'string' ? 'string' : 'hash']
|
||
: data.map;
|
||
}
|
||
|
||
/**
|
||
* Gets the property names, values, and compare flags of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the match data of `object`.
|
||
*/
|
||
function getMatchData(object) {
|
||
var result = keys(object),
|
||
length = result.length;
|
||
|
||
while (length--) {
|
||
var key = result[length],
|
||
value = object[key];
|
||
|
||
result[length] = [key, value, isStrictComparable(value)];
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Gets the native function at `key` of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {string} key The key of the method to get.
|
||
* @returns {*} Returns the function if it's native, else `undefined`.
|
||
*/
|
||
function getNative(object, key) {
|
||
var value = getValue(object, key);
|
||
return baseIsNative(value) ? value : undefined;
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to query.
|
||
* @returns {string} Returns the raw `toStringTag`.
|
||
*/
|
||
function getRawTag(value) {
|
||
var isOwn = hasOwnProperty.call(value, symToStringTag),
|
||
tag = value[symToStringTag];
|
||
|
||
try {
|
||
value[symToStringTag] = undefined;
|
||
var unmasked = true;
|
||
} catch (e) {}
|
||
|
||
var result = nativeObjectToString.call(value);
|
||
if (unmasked) {
|
||
if (isOwn) {
|
||
value[symToStringTag] = tag;
|
||
} else {
|
||
delete value[symToStringTag];
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates an array of the own enumerable symbols of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of symbols.
|
||
*/
|
||
var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
|
||
if (object == null) {
|
||
return [];
|
||
}
|
||
object = Object(object);
|
||
return arrayFilter(nativeGetSymbols(object), function(symbol) {
|
||
return propertyIsEnumerable.call(object, symbol);
|
||
});
|
||
};
|
||
|
||
/**
|
||
* Creates an array of the own and inherited enumerable symbols of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of symbols.
|
||
*/
|
||
var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
|
||
var result = [];
|
||
while (object) {
|
||
arrayPush(result, getSymbols(object));
|
||
object = getPrototype(object);
|
||
}
|
||
return result;
|
||
};
|
||
|
||
/**
|
||
* Gets the `toStringTag` of `value`.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to query.
|
||
* @returns {string} Returns the `toStringTag`.
|
||
*/
|
||
var getTag = baseGetTag;
|
||
|
||
// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
|
||
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
|
||
(Map && getTag(new Map) != mapTag) ||
|
||
(Promise && getTag(Promise.resolve()) != promiseTag) ||
|
||
(Set && getTag(new Set) != setTag) ||
|
||
(WeakMap && getTag(new WeakMap) != weakMapTag)) {
|
||
getTag = function(value) {
|
||
var result = baseGetTag(value),
|
||
Ctor = result == objectTag ? value.constructor : undefined,
|
||
ctorString = Ctor ? toSource(Ctor) : '';
|
||
|
||
if (ctorString) {
|
||
switch (ctorString) {
|
||
case dataViewCtorString: return dataViewTag;
|
||
case mapCtorString: return mapTag;
|
||
case promiseCtorString: return promiseTag;
|
||
case setCtorString: return setTag;
|
||
case weakMapCtorString: return weakMapTag;
|
||
}
|
||
}
|
||
return result;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Gets the view, applying any `transforms` to the `start` and `end` positions.
|
||
*
|
||
* @private
|
||
* @param {number} start The start of the view.
|
||
* @param {number} end The end of the view.
|
||
* @param {Array} transforms The transformations to apply to the view.
|
||
* @returns {Object} Returns an object containing the `start` and `end`
|
||
* positions of the view.
|
||
*/
|
||
function getView(start, end, transforms) {
|
||
var index = -1,
|
||
length = transforms.length;
|
||
|
||
while (++index < length) {
|
||
var data = transforms[index],
|
||
size = data.size;
|
||
|
||
switch (data.type) {
|
||
case 'drop': start += size; break;
|
||
case 'dropRight': end -= size; break;
|
||
case 'take': end = nativeMin(end, start + size); break;
|
||
case 'takeRight': start = nativeMax(start, end - size); break;
|
||
}
|
||
}
|
||
return { 'start': start, 'end': end };
|
||
}
|
||
|
||
/**
|
||
* Extracts wrapper details from the `source` body comment.
|
||
*
|
||
* @private
|
||
* @param {string} source The source to inspect.
|
||
* @returns {Array} Returns the wrapper details.
|
||
*/
|
||
function getWrapDetails(source) {
|
||
var match = source.match(reWrapDetails);
|
||
return match ? match[1].split(reSplitDetails) : [];
|
||
}
|
||
|
||
/**
|
||
* Checks if `path` exists on `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {Array|string} path The path to check.
|
||
* @param {Function} hasFunc The function to check properties.
|
||
* @returns {boolean} Returns `true` if `path` exists, else `false`.
|
||
*/
|
||
function hasPath(object, path, hasFunc) {
|
||
path = castPath(path, object);
|
||
|
||
var index = -1,
|
||
length = path.length,
|
||
result = false;
|
||
|
||
while (++index < length) {
|
||
var key = toKey(path[index]);
|
||
if (!(result = object != null && hasFunc(object, key))) {
|
||
break;
|
||
}
|
||
object = object[key];
|
||
}
|
||
if (result || ++index != length) {
|
||
return result;
|
||
}
|
||
length = object == null ? 0 : object.length;
|
||
return !!length && isLength(length) && isIndex(key, length) &&
|
||
(isArray(object) || isArguments(object));
|
||
}
|
||
|
||
/**
|
||
* Initializes an array clone.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to clone.
|
||
* @returns {Array} Returns the initialized clone.
|
||
*/
|
||
function initCloneArray(array) {
|
||
var length = array.length,
|
||
result = new array.constructor(length);
|
||
|
||
// Add properties assigned by `RegExp#exec`.
|
||
if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
|
||
result.index = array.index;
|
||
result.input = array.input;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Initializes an object clone.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to clone.
|
||
* @returns {Object} Returns the initialized clone.
|
||
*/
|
||
function initCloneObject(object) {
|
||
return (typeof object.constructor == 'function' && !isPrototype(object))
|
||
? baseCreate(getPrototype(object))
|
||
: {};
|
||
}
|
||
|
||
/**
|
||
* Initializes an object clone based on its `toStringTag`.
|
||
*
|
||
* **Note:** This function only supports cloning values with tags of
|
||
* `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to clone.
|
||
* @param {string} tag The `toStringTag` of the object to clone.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the initialized clone.
|
||
*/
|
||
function initCloneByTag(object, tag, isDeep) {
|
||
var Ctor = object.constructor;
|
||
switch (tag) {
|
||
case arrayBufferTag:
|
||
return cloneArrayBuffer(object);
|
||
|
||
case boolTag:
|
||
case dateTag:
|
||
return new Ctor(+object);
|
||
|
||
case dataViewTag:
|
||
return cloneDataView(object, isDeep);
|
||
|
||
case float32Tag: case float64Tag:
|
||
case int8Tag: case int16Tag: case int32Tag:
|
||
case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
|
||
return cloneTypedArray(object, isDeep);
|
||
|
||
case mapTag:
|
||
return new Ctor;
|
||
|
||
case numberTag:
|
||
case stringTag:
|
||
return new Ctor(object);
|
||
|
||
case regexpTag:
|
||
return cloneRegExp(object);
|
||
|
||
case setTag:
|
||
return new Ctor;
|
||
|
||
case symbolTag:
|
||
return cloneSymbol(object);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Inserts wrapper `details` in a comment at the top of the `source` body.
|
||
*
|
||
* @private
|
||
* @param {string} source The source to modify.
|
||
* @returns {Array} details The details to insert.
|
||
* @returns {string} Returns the modified source.
|
||
*/
|
||
function insertWrapDetails(source, details) {
|
||
var length = details.length;
|
||
if (!length) {
|
||
return source;
|
||
}
|
||
var lastIndex = length - 1;
|
||
details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
|
||
details = details.join(length > 2 ? ', ' : ' ');
|
||
return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a flattenable `arguments` object or array.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
|
||
*/
|
||
function isFlattenable(value) {
|
||
return isArray(value) || isArguments(value) ||
|
||
!!(spreadableSymbol && value && value[spreadableSymbol]);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a valid array-like index.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
|
||
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
|
||
*/
|
||
function isIndex(value, length) {
|
||
var type = typeof value;
|
||
length = length == null ? MAX_SAFE_INTEGER : length;
|
||
|
||
return !!length &&
|
||
(type == 'number' ||
|
||
(type != 'symbol' && reIsUint.test(value))) &&
|
||
(value > -1 && value % 1 == 0 && value < length);
|
||
}
|
||
|
||
/**
|
||
* Checks if the given arguments are from an iteratee call.
|
||
*
|
||
* @private
|
||
* @param {*} value The potential iteratee value argument.
|
||
* @param {*} index The potential iteratee index or key argument.
|
||
* @param {*} object The potential iteratee object argument.
|
||
* @returns {boolean} Returns `true` if the arguments are from an iteratee call,
|
||
* else `false`.
|
||
*/
|
||
function isIterateeCall(value, index, object) {
|
||
if (!isObject(object)) {
|
||
return false;
|
||
}
|
||
var type = typeof index;
|
||
if (type == 'number'
|
||
? (isArrayLike(object) && isIndex(index, object.length))
|
||
: (type == 'string' && index in object)
|
||
) {
|
||
return eq(object[index], value);
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a property name and not a property path.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @param {Object} [object] The object to query keys on.
|
||
* @returns {boolean} Returns `true` if `value` is a property name, else `false`.
|
||
*/
|
||
function isKey(value, object) {
|
||
if (isArray(value)) {
|
||
return false;
|
||
}
|
||
var type = typeof value;
|
||
if (type == 'number' || type == 'symbol' || type == 'boolean' ||
|
||
value == null || isSymbol(value)) {
|
||
return true;
|
||
}
|
||
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
|
||
(object != null && value in Object(object));
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is suitable for use as unique object key.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is suitable, else `false`.
|
||
*/
|
||
function isKeyable(value) {
|
||
var type = typeof value;
|
||
return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
|
||
? (value !== '__proto__')
|
||
: (value === null);
|
||
}
|
||
|
||
/**
|
||
* Checks if `func` has a lazy counterpart.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to check.
|
||
* @returns {boolean} Returns `true` if `func` has a lazy counterpart,
|
||
* else `false`.
|
||
*/
|
||
function isLaziable(func) {
|
||
var funcName = getFuncName(func),
|
||
other = lodash[funcName];
|
||
|
||
if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
|
||
return false;
|
||
}
|
||
if (func === other) {
|
||
return true;
|
||
}
|
||
var data = getData(other);
|
||
return !!data && func === data[0];
|
||
}
|
||
|
||
/**
|
||
* Checks if `func` has its source masked.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to check.
|
||
* @returns {boolean} Returns `true` if `func` is masked, else `false`.
|
||
*/
|
||
function isMasked(func) {
|
||
return !!maskSrcKey && (maskSrcKey in func);
|
||
}
|
||
|
||
/**
|
||
* Checks if `func` is capable of being masked.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `func` is maskable, else `false`.
|
||
*/
|
||
var isMaskable = coreJsData ? isFunction : stubFalse;
|
||
|
||
/**
|
||
* Checks if `value` is likely a prototype object.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
|
||
*/
|
||
function isPrototype(value) {
|
||
var Ctor = value && value.constructor,
|
||
proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
|
||
|
||
return value === proto;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` if suitable for strict
|
||
* equality comparisons, else `false`.
|
||
*/
|
||
function isStrictComparable(value) {
|
||
return value === value && !isObject(value);
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `matchesProperty` for source values suitable
|
||
* for strict equality comparisons, i.e. `===`.
|
||
*
|
||
* @private
|
||
* @param {string} key The key of the property to get.
|
||
* @param {*} srcValue The value to match.
|
||
* @returns {Function} Returns the new spec function.
|
||
*/
|
||
function matchesStrictComparable(key, srcValue) {
|
||
return function(object) {
|
||
if (object == null) {
|
||
return false;
|
||
}
|
||
return object[key] === srcValue &&
|
||
(srcValue !== undefined || (key in Object(object)));
|
||
};
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.memoize` which clears the memoized function's
|
||
* cache when it exceeds `MAX_MEMOIZE_SIZE`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to have its output memoized.
|
||
* @returns {Function} Returns the new memoized function.
|
||
*/
|
||
function memoizeCapped(func) {
|
||
var result = memoize(func, function(key) {
|
||
if (cache.size === MAX_MEMOIZE_SIZE) {
|
||
cache.clear();
|
||
}
|
||
return key;
|
||
});
|
||
|
||
var cache = result.cache;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Merges the function metadata of `source` into `data`.
|
||
*
|
||
* Merging metadata reduces the number of wrappers used to invoke a function.
|
||
* This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
|
||
* may be applied regardless of execution order. Methods like `_.ary` and
|
||
* `_.rearg` modify function arguments, making the order in which they are
|
||
* executed important, preventing the merging of metadata. However, we make
|
||
* an exception for a safe combined case where curried functions have `_.ary`
|
||
* and or `_.rearg` applied.
|
||
*
|
||
* @private
|
||
* @param {Array} data The destination metadata.
|
||
* @param {Array} source The source metadata.
|
||
* @returns {Array} Returns `data`.
|
||
*/
|
||
function mergeData(data, source) {
|
||
var bitmask = data[1],
|
||
srcBitmask = source[1],
|
||
newBitmask = bitmask | srcBitmask,
|
||
isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
|
||
|
||
var isCombo =
|
||
((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
|
||
((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
|
||
((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
|
||
|
||
// Exit early if metadata can't be merged.
|
||
if (!(isCommon || isCombo)) {
|
||
return data;
|
||
}
|
||
// Use source `thisArg` if available.
|
||
if (srcBitmask & WRAP_BIND_FLAG) {
|
||
data[2] = source[2];
|
||
// Set when currying a bound function.
|
||
newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
|
||
}
|
||
// Compose partial arguments.
|
||
var value = source[3];
|
||
if (value) {
|
||
var partials = data[3];
|
||
data[3] = partials ? composeArgs(partials, value, source[4]) : value;
|
||
data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
|
||
}
|
||
// Compose partial right arguments.
|
||
value = source[5];
|
||
if (value) {
|
||
partials = data[5];
|
||
data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
|
||
data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
|
||
}
|
||
// Use source `argPos` if available.
|
||
value = source[7];
|
||
if (value) {
|
||
data[7] = value;
|
||
}
|
||
// Use source `ary` if it's smaller.
|
||
if (srcBitmask & WRAP_ARY_FLAG) {
|
||
data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
|
||
}
|
||
// Use source `arity` if one is not provided.
|
||
if (data[9] == null) {
|
||
data[9] = source[9];
|
||
}
|
||
// Use source `func` and merge bitmasks.
|
||
data[0] = source[0];
|
||
data[1] = newBitmask;
|
||
|
||
return data;
|
||
}
|
||
|
||
/**
|
||
* This function is like
|
||
* [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
|
||
* except that it includes inherited enumerable properties.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names.
|
||
*/
|
||
function nativeKeysIn(object) {
|
||
var result = [];
|
||
if (object != null) {
|
||
for (var key in Object(object)) {
|
||
result.push(key);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Converts `value` to a string using `Object.prototype.toString`.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to convert.
|
||
* @returns {string} Returns the converted string.
|
||
*/
|
||
function objectToString(value) {
|
||
return nativeObjectToString.call(value);
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `baseRest` which transforms the rest array.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to apply a rest parameter to.
|
||
* @param {number} [start=func.length-1] The start position of the rest parameter.
|
||
* @param {Function} transform The rest array transform.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function overRest(func, start, transform) {
|
||
start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
|
||
return function() {
|
||
var args = arguments,
|
||
index = -1,
|
||
length = nativeMax(args.length - start, 0),
|
||
array = Array(length);
|
||
|
||
while (++index < length) {
|
||
array[index] = args[start + index];
|
||
}
|
||
index = -1;
|
||
var otherArgs = Array(start + 1);
|
||
while (++index < start) {
|
||
otherArgs[index] = args[index];
|
||
}
|
||
otherArgs[start] = transform(array);
|
||
return apply(func, this, otherArgs);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Gets the parent value at `path` of `object`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {Array} path The path to get the parent value of.
|
||
* @returns {*} Returns the parent value.
|
||
*/
|
||
function parent(object, path) {
|
||
return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
|
||
}
|
||
|
||
/**
|
||
* Reorder `array` according to the specified indexes where the element at
|
||
* the first index is assigned as the first element, the element at
|
||
* the second index is assigned as the second element, and so on.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to reorder.
|
||
* @param {Array} indexes The arranged array indexes.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function reorder(array, indexes) {
|
||
var arrLength = array.length,
|
||
length = nativeMin(indexes.length, arrLength),
|
||
oldArray = copyArray(array);
|
||
|
||
while (length--) {
|
||
var index = indexes[length];
|
||
array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
|
||
}
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* Gets the value at `key`, unless `key` is "__proto__".
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to query.
|
||
* @param {string} key The key of the property to get.
|
||
* @returns {*} Returns the property value.
|
||
*/
|
||
function safeGet(object, key) {
|
||
if (key == '__proto__') {
|
||
return;
|
||
}
|
||
|
||
return object[key];
|
||
}
|
||
|
||
/**
|
||
* Sets metadata for `func`.
|
||
*
|
||
* **Note:** If this function becomes hot, i.e. is invoked a lot in a short
|
||
* period of time, it will trip its breaker and transition to an identity
|
||
* function to avoid garbage collection pauses in V8. See
|
||
* [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
|
||
* for more details.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to associate metadata with.
|
||
* @param {*} data The metadata.
|
||
* @returns {Function} Returns `func`.
|
||
*/
|
||
var setData = shortOut(baseSetData);
|
||
|
||
/**
|
||
* A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to delay.
|
||
* @param {number} wait The number of milliseconds to delay invocation.
|
||
* @returns {number|Object} Returns the timer id or timeout object.
|
||
*/
|
||
var setTimeout = ctxSetTimeout || function(func, wait) {
|
||
return root.setTimeout(func, wait);
|
||
};
|
||
|
||
/**
|
||
* Sets the `toString` method of `func` to return `string`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to modify.
|
||
* @param {Function} string The `toString` result.
|
||
* @returns {Function} Returns `func`.
|
||
*/
|
||
var setToString = shortOut(baseSetToString);
|
||
|
||
/**
|
||
* Sets the `toString` method of `wrapper` to mimic the source of `reference`
|
||
* with wrapper details in a comment at the top of the source body.
|
||
*
|
||
* @private
|
||
* @param {Function} wrapper The function to modify.
|
||
* @param {Function} reference The reference function.
|
||
* @param {number} bitmask The bitmask flags. See `createWrap` for more details.
|
||
* @returns {Function} Returns `wrapper`.
|
||
*/
|
||
function setWrapToString(wrapper, reference, bitmask) {
|
||
var source = (reference + '');
|
||
return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
|
||
}
|
||
|
||
/**
|
||
* Creates a function that'll short out and invoke `identity` instead
|
||
* of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
|
||
* milliseconds.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to restrict.
|
||
* @returns {Function} Returns the new shortable function.
|
||
*/
|
||
function shortOut(func) {
|
||
var count = 0,
|
||
lastCalled = 0;
|
||
|
||
return function() {
|
||
var stamp = nativeNow(),
|
||
remaining = HOT_SPAN - (stamp - lastCalled);
|
||
|
||
lastCalled = stamp;
|
||
if (remaining > 0) {
|
||
if (++count >= HOT_COUNT) {
|
||
return arguments[0];
|
||
}
|
||
} else {
|
||
count = 0;
|
||
}
|
||
return func.apply(undefined, arguments);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.shuffle` which mutates and sets the size of `array`.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to shuffle.
|
||
* @param {number} [size=array.length] The size of `array`.
|
||
* @returns {Array} Returns `array`.
|
||
*/
|
||
function shuffleSelf(array, size) {
|
||
var index = -1,
|
||
length = array.length,
|
||
lastIndex = length - 1;
|
||
|
||
size = size === undefined ? length : size;
|
||
while (++index < size) {
|
||
var rand = baseRandom(index, lastIndex),
|
||
value = array[rand];
|
||
|
||
array[rand] = array[index];
|
||
array[index] = value;
|
||
}
|
||
array.length = size;
|
||
return array;
|
||
}
|
||
|
||
/**
|
||
* Converts `string` to a property path array.
|
||
*
|
||
* @private
|
||
* @param {string} string The string to convert.
|
||
* @returns {Array} Returns the property path array.
|
||
*/
|
||
var stringToPath = memoizeCapped(function(string) {
|
||
var result = [];
|
||
if (string.charCodeAt(0) === 46 /* . */) {
|
||
result.push('');
|
||
}
|
||
string.replace(rePropName, function(match, number, quote, subString) {
|
||
result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
|
||
});
|
||
return result;
|
||
});
|
||
|
||
/**
|
||
* Converts `value` to a string key if it's not a string or symbol.
|
||
*
|
||
* @private
|
||
* @param {*} value The value to inspect.
|
||
* @returns {string|symbol} Returns the key.
|
||
*/
|
||
function toKey(value) {
|
||
if (typeof value == 'string' || isSymbol(value)) {
|
||
return value;
|
||
}
|
||
var result = (value + '');
|
||
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
|
||
}
|
||
|
||
/**
|
||
* Converts `func` to its source code.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to convert.
|
||
* @returns {string} Returns the source code.
|
||
*/
|
||
function toSource(func) {
|
||
if (func != null) {
|
||
try {
|
||
return funcToString.call(func);
|
||
} catch (e) {}
|
||
try {
|
||
return (func + '');
|
||
} catch (e) {}
|
||
}
|
||
return '';
|
||
}
|
||
|
||
/**
|
||
* Updates wrapper `details` based on `bitmask` flags.
|
||
*
|
||
* @private
|
||
* @returns {Array} details The details to modify.
|
||
* @param {number} bitmask The bitmask flags. See `createWrap` for more details.
|
||
* @returns {Array} Returns `details`.
|
||
*/
|
||
function updateWrapDetails(details, bitmask) {
|
||
arrayEach(wrapFlags, function(pair) {
|
||
var value = '_.' + pair[0];
|
||
if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
|
||
details.push(value);
|
||
}
|
||
});
|
||
return details.sort();
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `wrapper`.
|
||
*
|
||
* @private
|
||
* @param {Object} wrapper The wrapper to clone.
|
||
* @returns {Object} Returns the cloned wrapper.
|
||
*/
|
||
function wrapperClone(wrapper) {
|
||
if (wrapper instanceof LazyWrapper) {
|
||
return wrapper.clone();
|
||
}
|
||
var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
|
||
result.__actions__ = copyArray(wrapper.__actions__);
|
||
result.__index__ = wrapper.__index__;
|
||
result.__values__ = wrapper.__values__;
|
||
return result;
|
||
}
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates an array of elements split into groups the length of `size`.
|
||
* If `array` can't be split evenly, the final chunk will be the remaining
|
||
* elements.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to process.
|
||
* @param {number} [size=1] The length of each chunk
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Array} Returns the new array of chunks.
|
||
* @example
|
||
*
|
||
* _.chunk(['a', 'b', 'c', 'd'], 2);
|
||
* // => [['a', 'b'], ['c', 'd']]
|
||
*
|
||
* _.chunk(['a', 'b', 'c', 'd'], 3);
|
||
* // => [['a', 'b', 'c'], ['d']]
|
||
*/
|
||
function chunk(array, size, guard) {
|
||
if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
|
||
size = 1;
|
||
} else {
|
||
size = nativeMax(toInteger(size), 0);
|
||
}
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length || size < 1) {
|
||
return [];
|
||
}
|
||
var index = 0,
|
||
resIndex = 0,
|
||
result = Array(nativeCeil(length / size));
|
||
|
||
while (index < length) {
|
||
result[resIndex++] = baseSlice(array, index, (index += size));
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates an array with all falsey values removed. The values `false`, `null`,
|
||
* `0`, `""`, `undefined`, and `NaN` are falsey.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to compact.
|
||
* @returns {Array} Returns the new array of filtered values.
|
||
* @example
|
||
*
|
||
* _.compact([0, 1, false, 2, '', 3]);
|
||
* // => [1, 2, 3]
|
||
*/
|
||
function compact(array) {
|
||
var index = -1,
|
||
length = array == null ? 0 : array.length,
|
||
resIndex = 0,
|
||
result = [];
|
||
|
||
while (++index < length) {
|
||
var value = array[index];
|
||
if (value) {
|
||
result[resIndex++] = value;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a new array concatenating `array` with any additional arrays
|
||
* and/or values.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to concatenate.
|
||
* @param {...*} [values] The values to concatenate.
|
||
* @returns {Array} Returns the new concatenated array.
|
||
* @example
|
||
*
|
||
* var array = [1];
|
||
* var other = _.concat(array, 2, [3], [[4]]);
|
||
*
|
||
* console.log(other);
|
||
* // => [1, 2, 3, [4]]
|
||
*
|
||
* console.log(array);
|
||
* // => [1]
|
||
*/
|
||
function concat() {
|
||
var length = arguments.length;
|
||
if (!length) {
|
||
return [];
|
||
}
|
||
var args = Array(length - 1),
|
||
array = arguments[0],
|
||
index = length;
|
||
|
||
while (index--) {
|
||
args[index - 1] = arguments[index];
|
||
}
|
||
return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
|
||
}
|
||
|
||
/**
|
||
* Creates an array of `array` values not included in the other given arrays
|
||
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* for equality comparisons. The order and references of result values are
|
||
* determined by the first array.
|
||
*
|
||
* **Note:** Unlike `_.pullAll`, this method returns a new array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {...Array} [values] The values to exclude.
|
||
* @returns {Array} Returns the new array of filtered values.
|
||
* @see _.without, _.xor
|
||
* @example
|
||
*
|
||
* _.difference([2, 1], [2, 3]);
|
||
* // => [1]
|
||
*/
|
||
var difference = baseRest(function(array, values) {
|
||
return isArrayLikeObject(array)
|
||
? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
|
||
: [];
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.difference` except that it accepts `iteratee` which
|
||
* is invoked for each element of `array` and `values` to generate the criterion
|
||
* by which they're compared. The order and references of result values are
|
||
* determined by the first array. The iteratee is invoked with one argument:
|
||
* (value).
|
||
*
|
||
* **Note:** Unlike `_.pullAllBy`, this method returns a new array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {...Array} [values] The values to exclude.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {Array} Returns the new array of filtered values.
|
||
* @example
|
||
*
|
||
* _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
|
||
* // => [1.2]
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
|
||
* // => [{ 'x': 2 }]
|
||
*/
|
||
var differenceBy = baseRest(function(array, values) {
|
||
var iteratee = last(values);
|
||
if (isArrayLikeObject(iteratee)) {
|
||
iteratee = undefined;
|
||
}
|
||
return isArrayLikeObject(array)
|
||
? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
|
||
: [];
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.difference` except that it accepts `comparator`
|
||
* which is invoked to compare elements of `array` to `values`. The order and
|
||
* references of result values are determined by the first array. The comparator
|
||
* is invoked with two arguments: (arrVal, othVal).
|
||
*
|
||
* **Note:** Unlike `_.pullAllWith`, this method returns a new array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {...Array} [values] The values to exclude.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns the new array of filtered values.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
|
||
*
|
||
* _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
|
||
* // => [{ 'x': 2, 'y': 1 }]
|
||
*/
|
||
var differenceWith = baseRest(function(array, values) {
|
||
var comparator = last(values);
|
||
if (isArrayLikeObject(comparator)) {
|
||
comparator = undefined;
|
||
}
|
||
return isArrayLikeObject(array)
|
||
? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
|
||
: [];
|
||
});
|
||
|
||
/**
|
||
* Creates a slice of `array` with `n` elements dropped from the beginning.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.5.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @param {number} [n=1] The number of elements to drop.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* _.drop([1, 2, 3]);
|
||
* // => [2, 3]
|
||
*
|
||
* _.drop([1, 2, 3], 2);
|
||
* // => [3]
|
||
*
|
||
* _.drop([1, 2, 3], 5);
|
||
* // => []
|
||
*
|
||
* _.drop([1, 2, 3], 0);
|
||
* // => [1, 2, 3]
|
||
*/
|
||
function drop(array, n, guard) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return [];
|
||
}
|
||
n = (guard || n === undefined) ? 1 : toInteger(n);
|
||
return baseSlice(array, n < 0 ? 0 : n, length);
|
||
}
|
||
|
||
/**
|
||
* Creates a slice of `array` with `n` elements dropped from the end.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @param {number} [n=1] The number of elements to drop.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* _.dropRight([1, 2, 3]);
|
||
* // => [1, 2]
|
||
*
|
||
* _.dropRight([1, 2, 3], 2);
|
||
* // => [1]
|
||
*
|
||
* _.dropRight([1, 2, 3], 5);
|
||
* // => []
|
||
*
|
||
* _.dropRight([1, 2, 3], 0);
|
||
* // => [1, 2, 3]
|
||
*/
|
||
function dropRight(array, n, guard) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return [];
|
||
}
|
||
n = (guard || n === undefined) ? 1 : toInteger(n);
|
||
n = length - n;
|
||
return baseSlice(array, 0, n < 0 ? 0 : n);
|
||
}
|
||
|
||
/**
|
||
* Creates a slice of `array` excluding elements dropped from the end.
|
||
* Elements are dropped until `predicate` returns falsey. The predicate is
|
||
* invoked with three arguments: (value, index, array).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'active': true },
|
||
* { 'user': 'fred', 'active': false },
|
||
* { 'user': 'pebbles', 'active': false }
|
||
* ];
|
||
*
|
||
* _.dropRightWhile(users, function(o) { return !o.active; });
|
||
* // => objects for ['barney']
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
|
||
* // => objects for ['barney', 'fred']
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.dropRightWhile(users, ['active', false]);
|
||
* // => objects for ['barney']
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.dropRightWhile(users, 'active');
|
||
* // => objects for ['barney', 'fred', 'pebbles']
|
||
*/
|
||
function dropRightWhile(array, predicate) {
|
||
return (array && array.length)
|
||
? baseWhile(array, getIteratee(predicate, 3), true, true)
|
||
: [];
|
||
}
|
||
|
||
/**
|
||
* Creates a slice of `array` excluding elements dropped from the beginning.
|
||
* Elements are dropped until `predicate` returns falsey. The predicate is
|
||
* invoked with three arguments: (value, index, array).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'active': false },
|
||
* { 'user': 'fred', 'active': false },
|
||
* { 'user': 'pebbles', 'active': true }
|
||
* ];
|
||
*
|
||
* _.dropWhile(users, function(o) { return !o.active; });
|
||
* // => objects for ['pebbles']
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.dropWhile(users, { 'user': 'barney', 'active': false });
|
||
* // => objects for ['fred', 'pebbles']
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.dropWhile(users, ['active', false]);
|
||
* // => objects for ['pebbles']
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.dropWhile(users, 'active');
|
||
* // => objects for ['barney', 'fred', 'pebbles']
|
||
*/
|
||
function dropWhile(array, predicate) {
|
||
return (array && array.length)
|
||
? baseWhile(array, getIteratee(predicate, 3), true)
|
||
: [];
|
||
}
|
||
|
||
/**
|
||
* Fills elements of `array` with `value` from `start` up to, but not
|
||
* including, `end`.
|
||
*
|
||
* **Note:** This method mutates `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.2.0
|
||
* @category Array
|
||
* @param {Array} array The array to fill.
|
||
* @param {*} value The value to fill `array` with.
|
||
* @param {number} [start=0] The start position.
|
||
* @param {number} [end=array.length] The end position.
|
||
* @returns {Array} Returns `array`.
|
||
* @example
|
||
*
|
||
* var array = [1, 2, 3];
|
||
*
|
||
* _.fill(array, 'a');
|
||
* console.log(array);
|
||
* // => ['a', 'a', 'a']
|
||
*
|
||
* _.fill(Array(3), 2);
|
||
* // => [2, 2, 2]
|
||
*
|
||
* _.fill([4, 6, 8, 10], '*', 1, 3);
|
||
* // => [4, '*', '*', 10]
|
||
*/
|
||
function fill(array, value, start, end) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return [];
|
||
}
|
||
if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
|
||
start = 0;
|
||
end = length;
|
||
}
|
||
return baseFill(array, value, start, end);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.find` except that it returns the index of the first
|
||
* element `predicate` returns truthy for instead of the element itself.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @param {number} [fromIndex=0] The index to search from.
|
||
* @returns {number} Returns the index of the found element, else `-1`.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'active': false },
|
||
* { 'user': 'fred', 'active': false },
|
||
* { 'user': 'pebbles', 'active': true }
|
||
* ];
|
||
*
|
||
* _.findIndex(users, function(o) { return o.user == 'barney'; });
|
||
* // => 0
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.findIndex(users, { 'user': 'fred', 'active': false });
|
||
* // => 1
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.findIndex(users, ['active', false]);
|
||
* // => 0
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.findIndex(users, 'active');
|
||
* // => 2
|
||
*/
|
||
function findIndex(array, predicate, fromIndex) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return -1;
|
||
}
|
||
var index = fromIndex == null ? 0 : toInteger(fromIndex);
|
||
if (index < 0) {
|
||
index = nativeMax(length + index, 0);
|
||
}
|
||
return baseFindIndex(array, getIteratee(predicate, 3), index);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.findIndex` except that it iterates over elements
|
||
* of `collection` from right to left.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @param {number} [fromIndex=array.length-1] The index to search from.
|
||
* @returns {number} Returns the index of the found element, else `-1`.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'active': true },
|
||
* { 'user': 'fred', 'active': false },
|
||
* { 'user': 'pebbles', 'active': false }
|
||
* ];
|
||
*
|
||
* _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
|
||
* // => 2
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.findLastIndex(users, { 'user': 'barney', 'active': true });
|
||
* // => 0
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.findLastIndex(users, ['active', false]);
|
||
* // => 2
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.findLastIndex(users, 'active');
|
||
* // => 0
|
||
*/
|
||
function findLastIndex(array, predicate, fromIndex) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return -1;
|
||
}
|
||
var index = length - 1;
|
||
if (fromIndex !== undefined) {
|
||
index = toInteger(fromIndex);
|
||
index = fromIndex < 0
|
||
? nativeMax(length + index, 0)
|
||
: nativeMin(index, length - 1);
|
||
}
|
||
return baseFindIndex(array, getIteratee(predicate, 3), index, true);
|
||
}
|
||
|
||
/**
|
||
* Flattens `array` a single level deep.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to flatten.
|
||
* @returns {Array} Returns the new flattened array.
|
||
* @example
|
||
*
|
||
* _.flatten([1, [2, [3, [4]], 5]]);
|
||
* // => [1, 2, [3, [4]], 5]
|
||
*/
|
||
function flatten(array) {
|
||
var length = array == null ? 0 : array.length;
|
||
return length ? baseFlatten(array, 1) : [];
|
||
}
|
||
|
||
/**
|
||
* Recursively flattens `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to flatten.
|
||
* @returns {Array} Returns the new flattened array.
|
||
* @example
|
||
*
|
||
* _.flattenDeep([1, [2, [3, [4]], 5]]);
|
||
* // => [1, 2, 3, 4, 5]
|
||
*/
|
||
function flattenDeep(array) {
|
||
var length = array == null ? 0 : array.length;
|
||
return length ? baseFlatten(array, INFINITY) : [];
|
||
}
|
||
|
||
/**
|
||
* Recursively flatten `array` up to `depth` times.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.4.0
|
||
* @category Array
|
||
* @param {Array} array The array to flatten.
|
||
* @param {number} [depth=1] The maximum recursion depth.
|
||
* @returns {Array} Returns the new flattened array.
|
||
* @example
|
||
*
|
||
* var array = [1, [2, [3, [4]], 5]];
|
||
*
|
||
* _.flattenDepth(array, 1);
|
||
* // => [1, 2, [3, [4]], 5]
|
||
*
|
||
* _.flattenDepth(array, 2);
|
||
* // => [1, 2, 3, [4], 5]
|
||
*/
|
||
function flattenDepth(array, depth) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return [];
|
||
}
|
||
depth = depth === undefined ? 1 : toInteger(depth);
|
||
return baseFlatten(array, depth);
|
||
}
|
||
|
||
/**
|
||
* The inverse of `_.toPairs`; this method returns an object composed
|
||
* from key-value `pairs`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} pairs The key-value pairs.
|
||
* @returns {Object} Returns the new object.
|
||
* @example
|
||
*
|
||
* _.fromPairs([['a', 1], ['b', 2]]);
|
||
* // => { 'a': 1, 'b': 2 }
|
||
*/
|
||
function fromPairs(pairs) {
|
||
var index = -1,
|
||
length = pairs == null ? 0 : pairs.length,
|
||
result = {};
|
||
|
||
while (++index < length) {
|
||
var pair = pairs[index];
|
||
result[pair[0]] = pair[1];
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Gets the first element of `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @alias first
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @returns {*} Returns the first element of `array`.
|
||
* @example
|
||
*
|
||
* _.head([1, 2, 3]);
|
||
* // => 1
|
||
*
|
||
* _.head([]);
|
||
* // => undefined
|
||
*/
|
||
function head(array) {
|
||
return (array && array.length) ? array[0] : undefined;
|
||
}
|
||
|
||
/**
|
||
* Gets the index at which the first occurrence of `value` is found in `array`
|
||
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* for equality comparisons. If `fromIndex` is negative, it's used as the
|
||
* offset from the end of `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} value The value to search for.
|
||
* @param {number} [fromIndex=0] The index to search from.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
* @example
|
||
*
|
||
* _.indexOf([1, 2, 1, 2], 2);
|
||
* // => 1
|
||
*
|
||
* // Search from the `fromIndex`.
|
||
* _.indexOf([1, 2, 1, 2], 2, 2);
|
||
* // => 3
|
||
*/
|
||
function indexOf(array, value, fromIndex) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return -1;
|
||
}
|
||
var index = fromIndex == null ? 0 : toInteger(fromIndex);
|
||
if (index < 0) {
|
||
index = nativeMax(length + index, 0);
|
||
}
|
||
return baseIndexOf(array, value, index);
|
||
}
|
||
|
||
/**
|
||
* Gets all but the last element of `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* _.initial([1, 2, 3]);
|
||
* // => [1, 2]
|
||
*/
|
||
function initial(array) {
|
||
var length = array == null ? 0 : array.length;
|
||
return length ? baseSlice(array, 0, -1) : [];
|
||
}
|
||
|
||
/**
|
||
* Creates an array of unique values that are included in all given arrays
|
||
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* for equality comparisons. The order and references of result values are
|
||
* determined by the first array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to inspect.
|
||
* @returns {Array} Returns the new array of intersecting values.
|
||
* @example
|
||
*
|
||
* _.intersection([2, 1], [2, 3]);
|
||
* // => [2]
|
||
*/
|
||
var intersection = baseRest(function(arrays) {
|
||
var mapped = arrayMap(arrays, castArrayLikeObject);
|
||
return (mapped.length && mapped[0] === arrays[0])
|
||
? baseIntersection(mapped)
|
||
: [];
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.intersection` except that it accepts `iteratee`
|
||
* which is invoked for each element of each `arrays` to generate the criterion
|
||
* by which they're compared. The order and references of result values are
|
||
* determined by the first array. The iteratee is invoked with one argument:
|
||
* (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to inspect.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {Array} Returns the new array of intersecting values.
|
||
* @example
|
||
*
|
||
* _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
|
||
* // => [2.1]
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
|
||
* // => [{ 'x': 1 }]
|
||
*/
|
||
var intersectionBy = baseRest(function(arrays) {
|
||
var iteratee = last(arrays),
|
||
mapped = arrayMap(arrays, castArrayLikeObject);
|
||
|
||
if (iteratee === last(mapped)) {
|
||
iteratee = undefined;
|
||
} else {
|
||
mapped.pop();
|
||
}
|
||
return (mapped.length && mapped[0] === arrays[0])
|
||
? baseIntersection(mapped, getIteratee(iteratee, 2))
|
||
: [];
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.intersection` except that it accepts `comparator`
|
||
* which is invoked to compare elements of `arrays`. The order and references
|
||
* of result values are determined by the first array. The comparator is
|
||
* invoked with two arguments: (arrVal, othVal).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to inspect.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns the new array of intersecting values.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
|
||
* var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
|
||
*
|
||
* _.intersectionWith(objects, others, _.isEqual);
|
||
* // => [{ 'x': 1, 'y': 2 }]
|
||
*/
|
||
var intersectionWith = baseRest(function(arrays) {
|
||
var comparator = last(arrays),
|
||
mapped = arrayMap(arrays, castArrayLikeObject);
|
||
|
||
comparator = typeof comparator == 'function' ? comparator : undefined;
|
||
if (comparator) {
|
||
mapped.pop();
|
||
}
|
||
return (mapped.length && mapped[0] === arrays[0])
|
||
? baseIntersection(mapped, undefined, comparator)
|
||
: [];
|
||
});
|
||
|
||
/**
|
||
* Converts all elements in `array` into a string separated by `separator`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to convert.
|
||
* @param {string} [separator=','] The element separator.
|
||
* @returns {string} Returns the joined string.
|
||
* @example
|
||
*
|
||
* _.join(['a', 'b', 'c'], '~');
|
||
* // => 'a~b~c'
|
||
*/
|
||
function join(array, separator) {
|
||
return array == null ? '' : nativeJoin.call(array, separator);
|
||
}
|
||
|
||
/**
|
||
* Gets the last element of `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @returns {*} Returns the last element of `array`.
|
||
* @example
|
||
*
|
||
* _.last([1, 2, 3]);
|
||
* // => 3
|
||
*/
|
||
function last(array) {
|
||
var length = array == null ? 0 : array.length;
|
||
return length ? array[length - 1] : undefined;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.indexOf` except that it iterates over elements of
|
||
* `array` from right to left.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} value The value to search for.
|
||
* @param {number} [fromIndex=array.length-1] The index to search from.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
* @example
|
||
*
|
||
* _.lastIndexOf([1, 2, 1, 2], 2);
|
||
* // => 3
|
||
*
|
||
* // Search from the `fromIndex`.
|
||
* _.lastIndexOf([1, 2, 1, 2], 2, 2);
|
||
* // => 1
|
||
*/
|
||
function lastIndexOf(array, value, fromIndex) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return -1;
|
||
}
|
||
var index = length;
|
||
if (fromIndex !== undefined) {
|
||
index = toInteger(fromIndex);
|
||
index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
|
||
}
|
||
return value === value
|
||
? strictLastIndexOf(array, value, index)
|
||
: baseFindIndex(array, baseIsNaN, index, true);
|
||
}
|
||
|
||
/**
|
||
* Gets the element at index `n` of `array`. If `n` is negative, the nth
|
||
* element from the end is returned.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.11.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @param {number} [n=0] The index of the element to return.
|
||
* @returns {*} Returns the nth element of `array`.
|
||
* @example
|
||
*
|
||
* var array = ['a', 'b', 'c', 'd'];
|
||
*
|
||
* _.nth(array, 1);
|
||
* // => 'b'
|
||
*
|
||
* _.nth(array, -2);
|
||
* // => 'c';
|
||
*/
|
||
function nth(array, n) {
|
||
return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
|
||
}
|
||
|
||
/**
|
||
* Removes all given values from `array` using
|
||
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* for equality comparisons.
|
||
*
|
||
* **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
|
||
* to remove elements from an array by predicate.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to modify.
|
||
* @param {...*} [values] The values to remove.
|
||
* @returns {Array} Returns `array`.
|
||
* @example
|
||
*
|
||
* var array = ['a', 'b', 'c', 'a', 'b', 'c'];
|
||
*
|
||
* _.pull(array, 'a', 'c');
|
||
* console.log(array);
|
||
* // => ['b', 'b']
|
||
*/
|
||
var pull = baseRest(pullAll);
|
||
|
||
/**
|
||
* This method is like `_.pull` except that it accepts an array of values to remove.
|
||
*
|
||
* **Note:** Unlike `_.difference`, this method mutates `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to modify.
|
||
* @param {Array} values The values to remove.
|
||
* @returns {Array} Returns `array`.
|
||
* @example
|
||
*
|
||
* var array = ['a', 'b', 'c', 'a', 'b', 'c'];
|
||
*
|
||
* _.pullAll(array, ['a', 'c']);
|
||
* console.log(array);
|
||
* // => ['b', 'b']
|
||
*/
|
||
function pullAll(array, values) {
|
||
return (array && array.length && values && values.length)
|
||
? basePullAll(array, values)
|
||
: array;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.pullAll` except that it accepts `iteratee` which is
|
||
* invoked for each element of `array` and `values` to generate the criterion
|
||
* by which they're compared. The iteratee is invoked with one argument: (value).
|
||
*
|
||
* **Note:** Unlike `_.differenceBy`, this method mutates `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to modify.
|
||
* @param {Array} values The values to remove.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {Array} Returns `array`.
|
||
* @example
|
||
*
|
||
* var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
|
||
*
|
||
* _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
|
||
* console.log(array);
|
||
* // => [{ 'x': 2 }]
|
||
*/
|
||
function pullAllBy(array, values, iteratee) {
|
||
return (array && array.length && values && values.length)
|
||
? basePullAll(array, values, getIteratee(iteratee, 2))
|
||
: array;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.pullAll` except that it accepts `comparator` which
|
||
* is invoked to compare elements of `array` to `values`. The comparator is
|
||
* invoked with two arguments: (arrVal, othVal).
|
||
*
|
||
* **Note:** Unlike `_.differenceWith`, this method mutates `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.6.0
|
||
* @category Array
|
||
* @param {Array} array The array to modify.
|
||
* @param {Array} values The values to remove.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns `array`.
|
||
* @example
|
||
*
|
||
* var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
|
||
*
|
||
* _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
|
||
* console.log(array);
|
||
* // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
|
||
*/
|
||
function pullAllWith(array, values, comparator) {
|
||
return (array && array.length && values && values.length)
|
||
? basePullAll(array, values, undefined, comparator)
|
||
: array;
|
||
}
|
||
|
||
/**
|
||
* Removes elements from `array` corresponding to `indexes` and returns an
|
||
* array of removed elements.
|
||
*
|
||
* **Note:** Unlike `_.at`, this method mutates `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to modify.
|
||
* @param {...(number|number[])} [indexes] The indexes of elements to remove.
|
||
* @returns {Array} Returns the new array of removed elements.
|
||
* @example
|
||
*
|
||
* var array = ['a', 'b', 'c', 'd'];
|
||
* var pulled = _.pullAt(array, [1, 3]);
|
||
*
|
||
* console.log(array);
|
||
* // => ['a', 'c']
|
||
*
|
||
* console.log(pulled);
|
||
* // => ['b', 'd']
|
||
*/
|
||
var pullAt = flatRest(function(array, indexes) {
|
||
var length = array == null ? 0 : array.length,
|
||
result = baseAt(array, indexes);
|
||
|
||
basePullAt(array, arrayMap(indexes, function(index) {
|
||
return isIndex(index, length) ? +index : index;
|
||
}).sort(compareAscending));
|
||
|
||
return result;
|
||
});
|
||
|
||
/**
|
||
* Removes all elements from `array` that `predicate` returns truthy for
|
||
* and returns an array of the removed elements. The predicate is invoked
|
||
* with three arguments: (value, index, array).
|
||
*
|
||
* **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
|
||
* to pull elements from an array by value.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to modify.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the new array of removed elements.
|
||
* @example
|
||
*
|
||
* var array = [1, 2, 3, 4];
|
||
* var evens = _.remove(array, function(n) {
|
||
* return n % 2 == 0;
|
||
* });
|
||
*
|
||
* console.log(array);
|
||
* // => [1, 3]
|
||
*
|
||
* console.log(evens);
|
||
* // => [2, 4]
|
||
*/
|
||
function remove(array, predicate) {
|
||
var result = [];
|
||
if (!(array && array.length)) {
|
||
return result;
|
||
}
|
||
var index = -1,
|
||
indexes = [],
|
||
length = array.length;
|
||
|
||
predicate = getIteratee(predicate, 3);
|
||
while (++index < length) {
|
||
var value = array[index];
|
||
if (predicate(value, index, array)) {
|
||
result.push(value);
|
||
indexes.push(index);
|
||
}
|
||
}
|
||
basePullAt(array, indexes);
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Reverses `array` so that the first element becomes the last, the second
|
||
* element becomes the second to last, and so on.
|
||
*
|
||
* **Note:** This method mutates `array` and is based on
|
||
* [`Array#reverse`](https://mdn.io/Array/reverse).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to modify.
|
||
* @returns {Array} Returns `array`.
|
||
* @example
|
||
*
|
||
* var array = [1, 2, 3];
|
||
*
|
||
* _.reverse(array);
|
||
* // => [3, 2, 1]
|
||
*
|
||
* console.log(array);
|
||
* // => [3, 2, 1]
|
||
*/
|
||
function reverse(array) {
|
||
return array == null ? array : nativeReverse.call(array);
|
||
}
|
||
|
||
/**
|
||
* Creates a slice of `array` from `start` up to, but not including, `end`.
|
||
*
|
||
* **Note:** This method is used instead of
|
||
* [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
|
||
* returned.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to slice.
|
||
* @param {number} [start=0] The start position.
|
||
* @param {number} [end=array.length] The end position.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
*/
|
||
function slice(array, start, end) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return [];
|
||
}
|
||
if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
|
||
start = 0;
|
||
end = length;
|
||
}
|
||
else {
|
||
start = start == null ? 0 : toInteger(start);
|
||
end = end === undefined ? length : toInteger(end);
|
||
}
|
||
return baseSlice(array, start, end);
|
||
}
|
||
|
||
/**
|
||
* Uses a binary search to determine the lowest index at which `value`
|
||
* should be inserted into `array` in order to maintain its sort order.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The sorted array to inspect.
|
||
* @param {*} value The value to evaluate.
|
||
* @returns {number} Returns the index at which `value` should be inserted
|
||
* into `array`.
|
||
* @example
|
||
*
|
||
* _.sortedIndex([30, 50], 40);
|
||
* // => 1
|
||
*/
|
||
function sortedIndex(array, value) {
|
||
return baseSortedIndex(array, value);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.sortedIndex` except that it accepts `iteratee`
|
||
* which is invoked for `value` and each element of `array` to compute their
|
||
* sort ranking. The iteratee is invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The sorted array to inspect.
|
||
* @param {*} value The value to evaluate.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {number} Returns the index at which `value` should be inserted
|
||
* into `array`.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'x': 4 }, { 'x': 5 }];
|
||
*
|
||
* _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
|
||
* // => 0
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.sortedIndexBy(objects, { 'x': 4 }, 'x');
|
||
* // => 0
|
||
*/
|
||
function sortedIndexBy(array, value, iteratee) {
|
||
return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.indexOf` except that it performs a binary
|
||
* search on a sorted `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} value The value to search for.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
* @example
|
||
*
|
||
* _.sortedIndexOf([4, 5, 5, 5, 6], 5);
|
||
* // => 1
|
||
*/
|
||
function sortedIndexOf(array, value) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (length) {
|
||
var index = baseSortedIndex(array, value);
|
||
if (index < length && eq(array[index], value)) {
|
||
return index;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.sortedIndex` except that it returns the highest
|
||
* index at which `value` should be inserted into `array` in order to
|
||
* maintain its sort order.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The sorted array to inspect.
|
||
* @param {*} value The value to evaluate.
|
||
* @returns {number} Returns the index at which `value` should be inserted
|
||
* into `array`.
|
||
* @example
|
||
*
|
||
* _.sortedLastIndex([4, 5, 5, 5, 6], 5);
|
||
* // => 4
|
||
*/
|
||
function sortedLastIndex(array, value) {
|
||
return baseSortedIndex(array, value, true);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.sortedLastIndex` except that it accepts `iteratee`
|
||
* which is invoked for `value` and each element of `array` to compute their
|
||
* sort ranking. The iteratee is invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The sorted array to inspect.
|
||
* @param {*} value The value to evaluate.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {number} Returns the index at which `value` should be inserted
|
||
* into `array`.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'x': 4 }, { 'x': 5 }];
|
||
*
|
||
* _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
|
||
* // => 1
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
|
||
* // => 1
|
||
*/
|
||
function sortedLastIndexBy(array, value, iteratee) {
|
||
return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.lastIndexOf` except that it performs a binary
|
||
* search on a sorted `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {*} value The value to search for.
|
||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||
* @example
|
||
*
|
||
* _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
|
||
* // => 3
|
||
*/
|
||
function sortedLastIndexOf(array, value) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (length) {
|
||
var index = baseSortedIndex(array, value, true) - 1;
|
||
if (eq(array[index], value)) {
|
||
return index;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.uniq` except that it's designed and optimized
|
||
* for sorted arrays.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @returns {Array} Returns the new duplicate free array.
|
||
* @example
|
||
*
|
||
* _.sortedUniq([1, 1, 2]);
|
||
* // => [1, 2]
|
||
*/
|
||
function sortedUniq(array) {
|
||
return (array && array.length)
|
||
? baseSortedUniq(array)
|
||
: [];
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.uniqBy` except that it's designed and optimized
|
||
* for sorted arrays.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {Function} [iteratee] The iteratee invoked per element.
|
||
* @returns {Array} Returns the new duplicate free array.
|
||
* @example
|
||
*
|
||
* _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
|
||
* // => [1.1, 2.3]
|
||
*/
|
||
function sortedUniqBy(array, iteratee) {
|
||
return (array && array.length)
|
||
? baseSortedUniq(array, getIteratee(iteratee, 2))
|
||
: [];
|
||
}
|
||
|
||
/**
|
||
* Gets all but the first element of `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* _.tail([1, 2, 3]);
|
||
* // => [2, 3]
|
||
*/
|
||
function tail(array) {
|
||
var length = array == null ? 0 : array.length;
|
||
return length ? baseSlice(array, 1, length) : [];
|
||
}
|
||
|
||
/**
|
||
* Creates a slice of `array` with `n` elements taken from the beginning.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @param {number} [n=1] The number of elements to take.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* _.take([1, 2, 3]);
|
||
* // => [1]
|
||
*
|
||
* _.take([1, 2, 3], 2);
|
||
* // => [1, 2]
|
||
*
|
||
* _.take([1, 2, 3], 5);
|
||
* // => [1, 2, 3]
|
||
*
|
||
* _.take([1, 2, 3], 0);
|
||
* // => []
|
||
*/
|
||
function take(array, n, guard) {
|
||
if (!(array && array.length)) {
|
||
return [];
|
||
}
|
||
n = (guard || n === undefined) ? 1 : toInteger(n);
|
||
return baseSlice(array, 0, n < 0 ? 0 : n);
|
||
}
|
||
|
||
/**
|
||
* Creates a slice of `array` with `n` elements taken from the end.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @param {number} [n=1] The number of elements to take.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* _.takeRight([1, 2, 3]);
|
||
* // => [3]
|
||
*
|
||
* _.takeRight([1, 2, 3], 2);
|
||
* // => [2, 3]
|
||
*
|
||
* _.takeRight([1, 2, 3], 5);
|
||
* // => [1, 2, 3]
|
||
*
|
||
* _.takeRight([1, 2, 3], 0);
|
||
* // => []
|
||
*/
|
||
function takeRight(array, n, guard) {
|
||
var length = array == null ? 0 : array.length;
|
||
if (!length) {
|
||
return [];
|
||
}
|
||
n = (guard || n === undefined) ? 1 : toInteger(n);
|
||
n = length - n;
|
||
return baseSlice(array, n < 0 ? 0 : n, length);
|
||
}
|
||
|
||
/**
|
||
* Creates a slice of `array` with elements taken from the end. Elements are
|
||
* taken until `predicate` returns falsey. The predicate is invoked with
|
||
* three arguments: (value, index, array).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'active': true },
|
||
* { 'user': 'fred', 'active': false },
|
||
* { 'user': 'pebbles', 'active': false }
|
||
* ];
|
||
*
|
||
* _.takeRightWhile(users, function(o) { return !o.active; });
|
||
* // => objects for ['fred', 'pebbles']
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
|
||
* // => objects for ['pebbles']
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.takeRightWhile(users, ['active', false]);
|
||
* // => objects for ['fred', 'pebbles']
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.takeRightWhile(users, 'active');
|
||
* // => []
|
||
*/
|
||
function takeRightWhile(array, predicate) {
|
||
return (array && array.length)
|
||
? baseWhile(array, getIteratee(predicate, 3), false, true)
|
||
: [];
|
||
}
|
||
|
||
/**
|
||
* Creates a slice of `array` with elements taken from the beginning. Elements
|
||
* are taken until `predicate` returns falsey. The predicate is invoked with
|
||
* three arguments: (value, index, array).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to query.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the slice of `array`.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'active': false },
|
||
* { 'user': 'fred', 'active': false },
|
||
* { 'user': 'pebbles', 'active': true }
|
||
* ];
|
||
*
|
||
* _.takeWhile(users, function(o) { return !o.active; });
|
||
* // => objects for ['barney', 'fred']
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.takeWhile(users, { 'user': 'barney', 'active': false });
|
||
* // => objects for ['barney']
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.takeWhile(users, ['active', false]);
|
||
* // => objects for ['barney', 'fred']
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.takeWhile(users, 'active');
|
||
* // => []
|
||
*/
|
||
function takeWhile(array, predicate) {
|
||
return (array && array.length)
|
||
? baseWhile(array, getIteratee(predicate, 3))
|
||
: [];
|
||
}
|
||
|
||
/**
|
||
* Creates an array of unique values, in order, from all given arrays using
|
||
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* for equality comparisons.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to inspect.
|
||
* @returns {Array} Returns the new array of combined values.
|
||
* @example
|
||
*
|
||
* _.union([2], [1, 2]);
|
||
* // => [2, 1]
|
||
*/
|
||
var union = baseRest(function(arrays) {
|
||
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.union` except that it accepts `iteratee` which is
|
||
* invoked for each element of each `arrays` to generate the criterion by
|
||
* which uniqueness is computed. Result values are chosen from the first
|
||
* array in which the value occurs. The iteratee is invoked with one argument:
|
||
* (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to inspect.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {Array} Returns the new array of combined values.
|
||
* @example
|
||
*
|
||
* _.unionBy([2.1], [1.2, 2.3], Math.floor);
|
||
* // => [2.1, 1.2]
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
|
||
* // => [{ 'x': 1 }, { 'x': 2 }]
|
||
*/
|
||
var unionBy = baseRest(function(arrays) {
|
||
var iteratee = last(arrays);
|
||
if (isArrayLikeObject(iteratee)) {
|
||
iteratee = undefined;
|
||
}
|
||
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.union` except that it accepts `comparator` which
|
||
* is invoked to compare elements of `arrays`. Result values are chosen from
|
||
* the first array in which the value occurs. The comparator is invoked
|
||
* with two arguments: (arrVal, othVal).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to inspect.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns the new array of combined values.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
|
||
* var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
|
||
*
|
||
* _.unionWith(objects, others, _.isEqual);
|
||
* // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
|
||
*/
|
||
var unionWith = baseRest(function(arrays) {
|
||
var comparator = last(arrays);
|
||
comparator = typeof comparator == 'function' ? comparator : undefined;
|
||
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
|
||
});
|
||
|
||
/**
|
||
* Creates a duplicate-free version of an array, using
|
||
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* for equality comparisons, in which only the first occurrence of each element
|
||
* is kept. The order of result values is determined by the order they occur
|
||
* in the array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @returns {Array} Returns the new duplicate free array.
|
||
* @example
|
||
*
|
||
* _.uniq([2, 1, 2]);
|
||
* // => [2, 1]
|
||
*/
|
||
function uniq(array) {
|
||
return (array && array.length) ? baseUniq(array) : [];
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.uniq` except that it accepts `iteratee` which is
|
||
* invoked for each element in `array` to generate the criterion by which
|
||
* uniqueness is computed. The order of result values is determined by the
|
||
* order they occur in the array. The iteratee is invoked with one argument:
|
||
* (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {Array} Returns the new duplicate free array.
|
||
* @example
|
||
*
|
||
* _.uniqBy([2.1, 1.2, 2.3], Math.floor);
|
||
* // => [2.1, 1.2]
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
|
||
* // => [{ 'x': 1 }, { 'x': 2 }]
|
||
*/
|
||
function uniqBy(array, iteratee) {
|
||
return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.uniq` except that it accepts `comparator` which
|
||
* is invoked to compare elements of `array`. The order of result values is
|
||
* determined by the order they occur in the array.The comparator is invoked
|
||
* with two arguments: (arrVal, othVal).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns the new duplicate free array.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
|
||
*
|
||
* _.uniqWith(objects, _.isEqual);
|
||
* // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
|
||
*/
|
||
function uniqWith(array, comparator) {
|
||
comparator = typeof comparator == 'function' ? comparator : undefined;
|
||
return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.zip` except that it accepts an array of grouped
|
||
* elements and creates an array regrouping the elements to their pre-zip
|
||
* configuration.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.2.0
|
||
* @category Array
|
||
* @param {Array} array The array of grouped elements to process.
|
||
* @returns {Array} Returns the new array of regrouped elements.
|
||
* @example
|
||
*
|
||
* var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
|
||
* // => [['a', 1, true], ['b', 2, false]]
|
||
*
|
||
* _.unzip(zipped);
|
||
* // => [['a', 'b'], [1, 2], [true, false]]
|
||
*/
|
||
function unzip(array) {
|
||
if (!(array && array.length)) {
|
||
return [];
|
||
}
|
||
var length = 0;
|
||
array = arrayFilter(array, function(group) {
|
||
if (isArrayLikeObject(group)) {
|
||
length = nativeMax(group.length, length);
|
||
return true;
|
||
}
|
||
});
|
||
return baseTimes(length, function(index) {
|
||
return arrayMap(array, baseProperty(index));
|
||
});
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.unzip` except that it accepts `iteratee` to specify
|
||
* how regrouped values should be combined. The iteratee is invoked with the
|
||
* elements of each group: (...group).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.8.0
|
||
* @category Array
|
||
* @param {Array} array The array of grouped elements to process.
|
||
* @param {Function} [iteratee=_.identity] The function to combine
|
||
* regrouped values.
|
||
* @returns {Array} Returns the new array of regrouped elements.
|
||
* @example
|
||
*
|
||
* var zipped = _.zip([1, 2], [10, 20], [100, 200]);
|
||
* // => [[1, 10, 100], [2, 20, 200]]
|
||
*
|
||
* _.unzipWith(zipped, _.add);
|
||
* // => [3, 30, 300]
|
||
*/
|
||
function unzipWith(array, iteratee) {
|
||
if (!(array && array.length)) {
|
||
return [];
|
||
}
|
||
var result = unzip(array);
|
||
if (iteratee == null) {
|
||
return result;
|
||
}
|
||
return arrayMap(result, function(group) {
|
||
return apply(iteratee, undefined, group);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates an array excluding all given values using
|
||
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* for equality comparisons.
|
||
*
|
||
* **Note:** Unlike `_.pull`, this method returns a new array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {Array} array The array to inspect.
|
||
* @param {...*} [values] The values to exclude.
|
||
* @returns {Array} Returns the new array of filtered values.
|
||
* @see _.difference, _.xor
|
||
* @example
|
||
*
|
||
* _.without([2, 1, 2, 3], 1, 2);
|
||
* // => [3]
|
||
*/
|
||
var without = baseRest(function(array, values) {
|
||
return isArrayLikeObject(array)
|
||
? baseDifference(array, values)
|
||
: [];
|
||
});
|
||
|
||
/**
|
||
* Creates an array of unique values that is the
|
||
* [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
|
||
* of the given arrays. The order of result values is determined by the order
|
||
* they occur in the arrays.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.4.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to inspect.
|
||
* @returns {Array} Returns the new array of filtered values.
|
||
* @see _.difference, _.without
|
||
* @example
|
||
*
|
||
* _.xor([2, 1], [2, 3]);
|
||
* // => [1, 3]
|
||
*/
|
||
var xor = baseRest(function(arrays) {
|
||
return baseXor(arrayFilter(arrays, isArrayLikeObject));
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.xor` except that it accepts `iteratee` which is
|
||
* invoked for each element of each `arrays` to generate the criterion by
|
||
* which by which they're compared. The order of result values is determined
|
||
* by the order they occur in the arrays. The iteratee is invoked with one
|
||
* argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to inspect.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {Array} Returns the new array of filtered values.
|
||
* @example
|
||
*
|
||
* _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
|
||
* // => [1.2, 3.4]
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
|
||
* // => [{ 'x': 2 }]
|
||
*/
|
||
var xorBy = baseRest(function(arrays) {
|
||
var iteratee = last(arrays);
|
||
if (isArrayLikeObject(iteratee)) {
|
||
iteratee = undefined;
|
||
}
|
||
return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.xor` except that it accepts `comparator` which is
|
||
* invoked to compare elements of `arrays`. The order of result values is
|
||
* determined by the order they occur in the arrays. The comparator is invoked
|
||
* with two arguments: (arrVal, othVal).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to inspect.
|
||
* @param {Function} [comparator] The comparator invoked per element.
|
||
* @returns {Array} Returns the new array of filtered values.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
|
||
* var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
|
||
*
|
||
* _.xorWith(objects, others, _.isEqual);
|
||
* // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
|
||
*/
|
||
var xorWith = baseRest(function(arrays) {
|
||
var comparator = last(arrays);
|
||
comparator = typeof comparator == 'function' ? comparator : undefined;
|
||
return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
|
||
});
|
||
|
||
/**
|
||
* Creates an array of grouped elements, the first of which contains the
|
||
* first elements of the given arrays, the second of which contains the
|
||
* second elements of the given arrays, and so on.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to process.
|
||
* @returns {Array} Returns the new array of grouped elements.
|
||
* @example
|
||
*
|
||
* _.zip(['a', 'b'], [1, 2], [true, false]);
|
||
* // => [['a', 1, true], ['b', 2, false]]
|
||
*/
|
||
var zip = baseRest(unzip);
|
||
|
||
/**
|
||
* This method is like `_.fromPairs` except that it accepts two arrays,
|
||
* one of property identifiers and one of corresponding values.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.4.0
|
||
* @category Array
|
||
* @param {Array} [props=[]] The property identifiers.
|
||
* @param {Array} [values=[]] The property values.
|
||
* @returns {Object} Returns the new object.
|
||
* @example
|
||
*
|
||
* _.zipObject(['a', 'b'], [1, 2]);
|
||
* // => { 'a': 1, 'b': 2 }
|
||
*/
|
||
function zipObject(props, values) {
|
||
return baseZipObject(props || [], values || [], assignValue);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.zipObject` except that it supports property paths.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.1.0
|
||
* @category Array
|
||
* @param {Array} [props=[]] The property identifiers.
|
||
* @param {Array} [values=[]] The property values.
|
||
* @returns {Object} Returns the new object.
|
||
* @example
|
||
*
|
||
* _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
|
||
* // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
|
||
*/
|
||
function zipObjectDeep(props, values) {
|
||
return baseZipObject(props || [], values || [], baseSet);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.zip` except that it accepts `iteratee` to specify
|
||
* how grouped values should be combined. The iteratee is invoked with the
|
||
* elements of each group: (...group).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.8.0
|
||
* @category Array
|
||
* @param {...Array} [arrays] The arrays to process.
|
||
* @param {Function} [iteratee=_.identity] The function to combine
|
||
* grouped values.
|
||
* @returns {Array} Returns the new array of grouped elements.
|
||
* @example
|
||
*
|
||
* _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
|
||
* return a + b + c;
|
||
* });
|
||
* // => [111, 222]
|
||
*/
|
||
var zipWith = baseRest(function(arrays) {
|
||
var length = arrays.length,
|
||
iteratee = length > 1 ? arrays[length - 1] : undefined;
|
||
|
||
iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
|
||
return unzipWith(arrays, iteratee);
|
||
});
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates a `lodash` wrapper instance that wraps `value` with explicit method
|
||
* chain sequences enabled. The result of such sequences must be unwrapped
|
||
* with `_#value`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.3.0
|
||
* @category Seq
|
||
* @param {*} value The value to wrap.
|
||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'age': 36 },
|
||
* { 'user': 'fred', 'age': 40 },
|
||
* { 'user': 'pebbles', 'age': 1 }
|
||
* ];
|
||
*
|
||
* var youngest = _
|
||
* .chain(users)
|
||
* .sortBy('age')
|
||
* .map(function(o) {
|
||
* return o.user + ' is ' + o.age;
|
||
* })
|
||
* .head()
|
||
* .value();
|
||
* // => 'pebbles is 1'
|
||
*/
|
||
function chain(value) {
|
||
var result = lodash(value);
|
||
result.__chain__ = true;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* This method invokes `interceptor` and returns `value`. The interceptor
|
||
* is invoked with one argument; (value). The purpose of this method is to
|
||
* "tap into" a method chain sequence in order to modify intermediate results.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Seq
|
||
* @param {*} value The value to provide to `interceptor`.
|
||
* @param {Function} interceptor The function to invoke.
|
||
* @returns {*} Returns `value`.
|
||
* @example
|
||
*
|
||
* _([1, 2, 3])
|
||
* .tap(function(array) {
|
||
* // Mutate input array.
|
||
* array.pop();
|
||
* })
|
||
* .reverse()
|
||
* .value();
|
||
* // => [2, 1]
|
||
*/
|
||
function tap(value, interceptor) {
|
||
interceptor(value);
|
||
return value;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.tap` except that it returns the result of `interceptor`.
|
||
* The purpose of this method is to "pass thru" values replacing intermediate
|
||
* results in a method chain sequence.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Seq
|
||
* @param {*} value The value to provide to `interceptor`.
|
||
* @param {Function} interceptor The function to invoke.
|
||
* @returns {*} Returns the result of `interceptor`.
|
||
* @example
|
||
*
|
||
* _(' abc ')
|
||
* .chain()
|
||
* .trim()
|
||
* .thru(function(value) {
|
||
* return [value];
|
||
* })
|
||
* .value();
|
||
* // => ['abc']
|
||
*/
|
||
function thru(value, interceptor) {
|
||
return interceptor(value);
|
||
}
|
||
|
||
/**
|
||
* This method is the wrapper version of `_.at`.
|
||
*
|
||
* @name at
|
||
* @memberOf _
|
||
* @since 1.0.0
|
||
* @category Seq
|
||
* @param {...(string|string[])} [paths] The property paths to pick.
|
||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||
* @example
|
||
*
|
||
* var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
|
||
*
|
||
* _(object).at(['a[0].b.c', 'a[1]']).value();
|
||
* // => [3, 4]
|
||
*/
|
||
var wrapperAt = flatRest(function(paths) {
|
||
var length = paths.length,
|
||
start = length ? paths[0] : 0,
|
||
value = this.__wrapped__,
|
||
interceptor = function(object) { return baseAt(object, paths); };
|
||
|
||
if (length > 1 || this.__actions__.length ||
|
||
!(value instanceof LazyWrapper) || !isIndex(start)) {
|
||
return this.thru(interceptor);
|
||
}
|
||
value = value.slice(start, +start + (length ? 1 : 0));
|
||
value.__actions__.push({
|
||
'func': thru,
|
||
'args': [interceptor],
|
||
'thisArg': undefined
|
||
});
|
||
return new LodashWrapper(value, this.__chain__).thru(function(array) {
|
||
if (length && !array.length) {
|
||
array.push(undefined);
|
||
}
|
||
return array;
|
||
});
|
||
});
|
||
|
||
/**
|
||
* Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
|
||
*
|
||
* @name chain
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Seq
|
||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'age': 36 },
|
||
* { 'user': 'fred', 'age': 40 }
|
||
* ];
|
||
*
|
||
* // A sequence without explicit chaining.
|
||
* _(users).head();
|
||
* // => { 'user': 'barney', 'age': 36 }
|
||
*
|
||
* // A sequence with explicit chaining.
|
||
* _(users)
|
||
* .chain()
|
||
* .head()
|
||
* .pick('user')
|
||
* .value();
|
||
* // => { 'user': 'barney' }
|
||
*/
|
||
function wrapperChain() {
|
||
return chain(this);
|
||
}
|
||
|
||
/**
|
||
* Executes the chain sequence and returns the wrapped result.
|
||
*
|
||
* @name commit
|
||
* @memberOf _
|
||
* @since 3.2.0
|
||
* @category Seq
|
||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||
* @example
|
||
*
|
||
* var array = [1, 2];
|
||
* var wrapped = _(array).push(3);
|
||
*
|
||
* console.log(array);
|
||
* // => [1, 2]
|
||
*
|
||
* wrapped = wrapped.commit();
|
||
* console.log(array);
|
||
* // => [1, 2, 3]
|
||
*
|
||
* wrapped.last();
|
||
* // => 3
|
||
*
|
||
* console.log(array);
|
||
* // => [1, 2, 3]
|
||
*/
|
||
function wrapperCommit() {
|
||
return new LodashWrapper(this.value(), this.__chain__);
|
||
}
|
||
|
||
/**
|
||
* Gets the next value on a wrapped object following the
|
||
* [iterator protocol](https://mdn.io/iteration_protocols#iterator).
|
||
*
|
||
* @name next
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Seq
|
||
* @returns {Object} Returns the next iterator value.
|
||
* @example
|
||
*
|
||
* var wrapped = _([1, 2]);
|
||
*
|
||
* wrapped.next();
|
||
* // => { 'done': false, 'value': 1 }
|
||
*
|
||
* wrapped.next();
|
||
* // => { 'done': false, 'value': 2 }
|
||
*
|
||
* wrapped.next();
|
||
* // => { 'done': true, 'value': undefined }
|
||
*/
|
||
function wrapperNext() {
|
||
if (this.__values__ === undefined) {
|
||
this.__values__ = toArray(this.value());
|
||
}
|
||
var done = this.__index__ >= this.__values__.length,
|
||
value = done ? undefined : this.__values__[this.__index__++];
|
||
|
||
return { 'done': done, 'value': value };
|
||
}
|
||
|
||
/**
|
||
* Enables the wrapper to be iterable.
|
||
*
|
||
* @name Symbol.iterator
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Seq
|
||
* @returns {Object} Returns the wrapper object.
|
||
* @example
|
||
*
|
||
* var wrapped = _([1, 2]);
|
||
*
|
||
* wrapped[Symbol.iterator]() === wrapped;
|
||
* // => true
|
||
*
|
||
* Array.from(wrapped);
|
||
* // => [1, 2]
|
||
*/
|
||
function wrapperToIterator() {
|
||
return this;
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of the chain sequence planting `value` as the wrapped value.
|
||
*
|
||
* @name plant
|
||
* @memberOf _
|
||
* @since 3.2.0
|
||
* @category Seq
|
||
* @param {*} value The value to plant.
|
||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||
* @example
|
||
*
|
||
* function square(n) {
|
||
* return n * n;
|
||
* }
|
||
*
|
||
* var wrapped = _([1, 2]).map(square);
|
||
* var other = wrapped.plant([3, 4]);
|
||
*
|
||
* other.value();
|
||
* // => [9, 16]
|
||
*
|
||
* wrapped.value();
|
||
* // => [1, 4]
|
||
*/
|
||
function wrapperPlant(value) {
|
||
var result,
|
||
parent = this;
|
||
|
||
while (parent instanceof baseLodash) {
|
||
var clone = wrapperClone(parent);
|
||
clone.__index__ = 0;
|
||
clone.__values__ = undefined;
|
||
if (result) {
|
||
previous.__wrapped__ = clone;
|
||
} else {
|
||
result = clone;
|
||
}
|
||
var previous = clone;
|
||
parent = parent.__wrapped__;
|
||
}
|
||
previous.__wrapped__ = value;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* This method is the wrapper version of `_.reverse`.
|
||
*
|
||
* **Note:** This method mutates the wrapped array.
|
||
*
|
||
* @name reverse
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Seq
|
||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||
* @example
|
||
*
|
||
* var array = [1, 2, 3];
|
||
*
|
||
* _(array).reverse().value()
|
||
* // => [3, 2, 1]
|
||
*
|
||
* console.log(array);
|
||
* // => [3, 2, 1]
|
||
*/
|
||
function wrapperReverse() {
|
||
var value = this.__wrapped__;
|
||
if (value instanceof LazyWrapper) {
|
||
var wrapped = value;
|
||
if (this.__actions__.length) {
|
||
wrapped = new LazyWrapper(this);
|
||
}
|
||
wrapped = wrapped.reverse();
|
||
wrapped.__actions__.push({
|
||
'func': thru,
|
||
'args': [reverse],
|
||
'thisArg': undefined
|
||
});
|
||
return new LodashWrapper(wrapped, this.__chain__);
|
||
}
|
||
return this.thru(reverse);
|
||
}
|
||
|
||
/**
|
||
* Executes the chain sequence to resolve the unwrapped value.
|
||
*
|
||
* @name value
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @alias toJSON, valueOf
|
||
* @category Seq
|
||
* @returns {*} Returns the resolved unwrapped value.
|
||
* @example
|
||
*
|
||
* _([1, 2, 3]).value();
|
||
* // => [1, 2, 3]
|
||
*/
|
||
function wrapperValue() {
|
||
return baseWrapperValue(this.__wrapped__, this.__actions__);
|
||
}
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Creates an object composed of keys generated from the results of running
|
||
* each element of `collection` thru `iteratee`. The corresponding value of
|
||
* each key is the number of times the key was returned by `iteratee`. The
|
||
* iteratee is invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.5.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The iteratee to transform keys.
|
||
* @returns {Object} Returns the composed aggregate object.
|
||
* @example
|
||
*
|
||
* _.countBy([6.1, 4.2, 6.3], Math.floor);
|
||
* // => { '4': 1, '6': 2 }
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.countBy(['one', 'two', 'three'], 'length');
|
||
* // => { '3': 2, '5': 1 }
|
||
*/
|
||
var countBy = createAggregator(function(result, value, key) {
|
||
if (hasOwnProperty.call(result, key)) {
|
||
++result[key];
|
||
} else {
|
||
baseAssignValue(result, key, 1);
|
||
}
|
||
});
|
||
|
||
/**
|
||
* Checks if `predicate` returns truthy for **all** elements of `collection`.
|
||
* Iteration is stopped once `predicate` returns falsey. The predicate is
|
||
* invoked with three arguments: (value, index|key, collection).
|
||
*
|
||
* **Note:** This method returns `true` for
|
||
* [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
|
||
* [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
|
||
* elements of empty collections.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {boolean} Returns `true` if all elements pass the predicate check,
|
||
* else `false`.
|
||
* @example
|
||
*
|
||
* _.every([true, 1, null, 'yes'], Boolean);
|
||
* // => false
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'age': 36, 'active': false },
|
||
* { 'user': 'fred', 'age': 40, 'active': false }
|
||
* ];
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.every(users, { 'user': 'barney', 'active': false });
|
||
* // => false
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.every(users, ['active', false]);
|
||
* // => true
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.every(users, 'active');
|
||
* // => false
|
||
*/
|
||
function every(collection, predicate, guard) {
|
||
var func = isArray(collection) ? arrayEvery : baseEvery;
|
||
if (guard && isIterateeCall(collection, predicate, guard)) {
|
||
predicate = undefined;
|
||
}
|
||
return func(collection, getIteratee(predicate, 3));
|
||
}
|
||
|
||
/**
|
||
* Iterates over elements of `collection`, returning an array of all elements
|
||
* `predicate` returns truthy for. The predicate is invoked with three
|
||
* arguments: (value, index|key, collection).
|
||
*
|
||
* **Note:** Unlike `_.remove`, this method returns a new array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the new filtered array.
|
||
* @see _.reject
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'age': 36, 'active': true },
|
||
* { 'user': 'fred', 'age': 40, 'active': false }
|
||
* ];
|
||
*
|
||
* _.filter(users, function(o) { return !o.active; });
|
||
* // => objects for ['fred']
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.filter(users, { 'age': 36, 'active': true });
|
||
* // => objects for ['barney']
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.filter(users, ['active', false]);
|
||
* // => objects for ['fred']
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.filter(users, 'active');
|
||
* // => objects for ['barney']
|
||
*/
|
||
function filter(collection, predicate) {
|
||
var func = isArray(collection) ? arrayFilter : baseFilter;
|
||
return func(collection, getIteratee(predicate, 3));
|
||
}
|
||
|
||
/**
|
||
* Iterates over elements of `collection`, returning the first element
|
||
* `predicate` returns truthy for. The predicate is invoked with three
|
||
* arguments: (value, index|key, collection).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to inspect.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @param {number} [fromIndex=0] The index to search from.
|
||
* @returns {*} Returns the matched element, else `undefined`.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'age': 36, 'active': true },
|
||
* { 'user': 'fred', 'age': 40, 'active': false },
|
||
* { 'user': 'pebbles', 'age': 1, 'active': true }
|
||
* ];
|
||
*
|
||
* _.find(users, function(o) { return o.age < 40; });
|
||
* // => object for 'barney'
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.find(users, { 'age': 1, 'active': true });
|
||
* // => object for 'pebbles'
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.find(users, ['active', false]);
|
||
* // => object for 'fred'
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.find(users, 'active');
|
||
* // => object for 'barney'
|
||
*/
|
||
var find = createFind(findIndex);
|
||
|
||
/**
|
||
* This method is like `_.find` except that it iterates over elements of
|
||
* `collection` from right to left.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to inspect.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @param {number} [fromIndex=collection.length-1] The index to search from.
|
||
* @returns {*} Returns the matched element, else `undefined`.
|
||
* @example
|
||
*
|
||
* _.findLast([1, 2, 3, 4], function(n) {
|
||
* return n % 2 == 1;
|
||
* });
|
||
* // => 3
|
||
*/
|
||
var findLast = createFind(findLastIndex);
|
||
|
||
/**
|
||
* Creates a flattened array of values by running each element in `collection`
|
||
* thru `iteratee` and flattening the mapped results. The iteratee is invoked
|
||
* with three arguments: (value, index|key, collection).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the new flattened array.
|
||
* @example
|
||
*
|
||
* function duplicate(n) {
|
||
* return [n, n];
|
||
* }
|
||
*
|
||
* _.flatMap([1, 2], duplicate);
|
||
* // => [1, 1, 2, 2]
|
||
*/
|
||
function flatMap(collection, iteratee) {
|
||
return baseFlatten(map(collection, iteratee), 1);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.flatMap` except that it recursively flattens the
|
||
* mapped results.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.7.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the new flattened array.
|
||
* @example
|
||
*
|
||
* function duplicate(n) {
|
||
* return [[[n, n]]];
|
||
* }
|
||
*
|
||
* _.flatMapDeep([1, 2], duplicate);
|
||
* // => [1, 1, 2, 2]
|
||
*/
|
||
function flatMapDeep(collection, iteratee) {
|
||
return baseFlatten(map(collection, iteratee), INFINITY);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.flatMap` except that it recursively flattens the
|
||
* mapped results up to `depth` times.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.7.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @param {number} [depth=1] The maximum recursion depth.
|
||
* @returns {Array} Returns the new flattened array.
|
||
* @example
|
||
*
|
||
* function duplicate(n) {
|
||
* return [[[n, n]]];
|
||
* }
|
||
*
|
||
* _.flatMapDepth([1, 2], duplicate, 2);
|
||
* // => [[1, 1], [2, 2]]
|
||
*/
|
||
function flatMapDepth(collection, iteratee, depth) {
|
||
depth = depth === undefined ? 1 : toInteger(depth);
|
||
return baseFlatten(map(collection, iteratee), depth);
|
||
}
|
||
|
||
/**
|
||
* Iterates over elements of `collection` and invokes `iteratee` for each element.
|
||
* The iteratee is invoked with three arguments: (value, index|key, collection).
|
||
* Iteratee functions may exit iteration early by explicitly returning `false`.
|
||
*
|
||
* **Note:** As with other "Collections" methods, objects with a "length"
|
||
* property are iterated like arrays. To avoid this behavior use `_.forIn`
|
||
* or `_.forOwn` for object iteration.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @alias each
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Array|Object} Returns `collection`.
|
||
* @see _.forEachRight
|
||
* @example
|
||
*
|
||
* _.forEach([1, 2], function(value) {
|
||
* console.log(value);
|
||
* });
|
||
* // => Logs `1` then `2`.
|
||
*
|
||
* _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
|
||
* console.log(key);
|
||
* });
|
||
* // => Logs 'a' then 'b' (iteration order is not guaranteed).
|
||
*/
|
||
function forEach(collection, iteratee) {
|
||
var func = isArray(collection) ? arrayEach : baseEach;
|
||
return func(collection, getIteratee(iteratee, 3));
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.forEach` except that it iterates over elements of
|
||
* `collection` from right to left.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @alias eachRight
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Array|Object} Returns `collection`.
|
||
* @see _.forEach
|
||
* @example
|
||
*
|
||
* _.forEachRight([1, 2], function(value) {
|
||
* console.log(value);
|
||
* });
|
||
* // => Logs `2` then `1`.
|
||
*/
|
||
function forEachRight(collection, iteratee) {
|
||
var func = isArray(collection) ? arrayEachRight : baseEachRight;
|
||
return func(collection, getIteratee(iteratee, 3));
|
||
}
|
||
|
||
/**
|
||
* Creates an object composed of keys generated from the results of running
|
||
* each element of `collection` thru `iteratee`. The order of grouped values
|
||
* is determined by the order they occur in `collection`. The corresponding
|
||
* value of each key is an array of elements responsible for generating the
|
||
* key. The iteratee is invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The iteratee to transform keys.
|
||
* @returns {Object} Returns the composed aggregate object.
|
||
* @example
|
||
*
|
||
* _.groupBy([6.1, 4.2, 6.3], Math.floor);
|
||
* // => { '4': [4.2], '6': [6.1, 6.3] }
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.groupBy(['one', 'two', 'three'], 'length');
|
||
* // => { '3': ['one', 'two'], '5': ['three'] }
|
||
*/
|
||
var groupBy = createAggregator(function(result, value, key) {
|
||
if (hasOwnProperty.call(result, key)) {
|
||
result[key].push(value);
|
||
} else {
|
||
baseAssignValue(result, key, [value]);
|
||
}
|
||
});
|
||
|
||
/**
|
||
* Checks if `value` is in `collection`. If `collection` is a string, it's
|
||
* checked for a substring of `value`, otherwise
|
||
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* is used for equality comparisons. If `fromIndex` is negative, it's used as
|
||
* the offset from the end of `collection`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object|string} collection The collection to inspect.
|
||
* @param {*} value The value to search for.
|
||
* @param {number} [fromIndex=0] The index to search from.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
|
||
* @returns {boolean} Returns `true` if `value` is found, else `false`.
|
||
* @example
|
||
*
|
||
* _.includes([1, 2, 3], 1);
|
||
* // => true
|
||
*
|
||
* _.includes([1, 2, 3], 1, 2);
|
||
* // => false
|
||
*
|
||
* _.includes({ 'a': 1, 'b': 2 }, 1);
|
||
* // => true
|
||
*
|
||
* _.includes('abcd', 'bc');
|
||
* // => true
|
||
*/
|
||
function includes(collection, value, fromIndex, guard) {
|
||
collection = isArrayLike(collection) ? collection : values(collection);
|
||
fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
|
||
|
||
var length = collection.length;
|
||
if (fromIndex < 0) {
|
||
fromIndex = nativeMax(length + fromIndex, 0);
|
||
}
|
||
return isString(collection)
|
||
? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
|
||
: (!!length && baseIndexOf(collection, value, fromIndex) > -1);
|
||
}
|
||
|
||
/**
|
||
* Invokes the method at `path` of each element in `collection`, returning
|
||
* an array of the results of each invoked method. Any additional arguments
|
||
* are provided to each invoked method. If `path` is a function, it's invoked
|
||
* for, and `this` bound to, each element in `collection`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Array|Function|string} path The path of the method to invoke or
|
||
* the function invoked per iteration.
|
||
* @param {...*} [args] The arguments to invoke each method with.
|
||
* @returns {Array} Returns the array of results.
|
||
* @example
|
||
*
|
||
* _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
|
||
* // => [[1, 5, 7], [1, 2, 3]]
|
||
*
|
||
* _.invokeMap([123, 456], String.prototype.split, '');
|
||
* // => [['1', '2', '3'], ['4', '5', '6']]
|
||
*/
|
||
var invokeMap = baseRest(function(collection, path, args) {
|
||
var index = -1,
|
||
isFunc = typeof path == 'function',
|
||
result = isArrayLike(collection) ? Array(collection.length) : [];
|
||
|
||
baseEach(collection, function(value) {
|
||
result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
|
||
});
|
||
return result;
|
||
});
|
||
|
||
/**
|
||
* Creates an object composed of keys generated from the results of running
|
||
* each element of `collection` thru `iteratee`. The corresponding value of
|
||
* each key is the last element responsible for generating the key. The
|
||
* iteratee is invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The iteratee to transform keys.
|
||
* @returns {Object} Returns the composed aggregate object.
|
||
* @example
|
||
*
|
||
* var array = [
|
||
* { 'dir': 'left', 'code': 97 },
|
||
* { 'dir': 'right', 'code': 100 }
|
||
* ];
|
||
*
|
||
* _.keyBy(array, function(o) {
|
||
* return String.fromCharCode(o.code);
|
||
* });
|
||
* // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
|
||
*
|
||
* _.keyBy(array, 'dir');
|
||
* // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
|
||
*/
|
||
var keyBy = createAggregator(function(result, value, key) {
|
||
baseAssignValue(result, key, value);
|
||
});
|
||
|
||
/**
|
||
* Creates an array of values by running each element in `collection` thru
|
||
* `iteratee`. The iteratee is invoked with three arguments:
|
||
* (value, index|key, collection).
|
||
*
|
||
* Many lodash methods are guarded to work as iteratees for methods like
|
||
* `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
|
||
*
|
||
* The guarded methods are:
|
||
* `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
|
||
* `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
|
||
* `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
|
||
* `template`, `trim`, `trimEnd`, `trimStart`, and `words`
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the new mapped array.
|
||
* @example
|
||
*
|
||
* function square(n) {
|
||
* return n * n;
|
||
* }
|
||
*
|
||
* _.map([4, 8], square);
|
||
* // => [16, 64]
|
||
*
|
||
* _.map({ 'a': 4, 'b': 8 }, square);
|
||
* // => [16, 64] (iteration order is not guaranteed)
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney' },
|
||
* { 'user': 'fred' }
|
||
* ];
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.map(users, 'user');
|
||
* // => ['barney', 'fred']
|
||
*/
|
||
function map(collection, iteratee) {
|
||
var func = isArray(collection) ? arrayMap : baseMap;
|
||
return func(collection, getIteratee(iteratee, 3));
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.sortBy` except that it allows specifying the sort
|
||
* orders of the iteratees to sort by. If `orders` is unspecified, all values
|
||
* are sorted in ascending order. Otherwise, specify an order of "desc" for
|
||
* descending or "asc" for ascending sort order of corresponding values.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
|
||
* The iteratees to sort by.
|
||
* @param {string[]} [orders] The sort orders of `iteratees`.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
|
||
* @returns {Array} Returns the new sorted array.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'fred', 'age': 48 },
|
||
* { 'user': 'barney', 'age': 34 },
|
||
* { 'user': 'fred', 'age': 40 },
|
||
* { 'user': 'barney', 'age': 36 }
|
||
* ];
|
||
*
|
||
* // Sort by `user` in ascending order and by `age` in descending order.
|
||
* _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
|
||
* // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
|
||
*/
|
||
function orderBy(collection, iteratees, orders, guard) {
|
||
if (collection == null) {
|
||
return [];
|
||
}
|
||
if (!isArray(iteratees)) {
|
||
iteratees = iteratees == null ? [] : [iteratees];
|
||
}
|
||
orders = guard ? undefined : orders;
|
||
if (!isArray(orders)) {
|
||
orders = orders == null ? [] : [orders];
|
||
}
|
||
return baseOrderBy(collection, iteratees, orders);
|
||
}
|
||
|
||
/**
|
||
* Creates an array of elements split into two groups, the first of which
|
||
* contains elements `predicate` returns truthy for, the second of which
|
||
* contains elements `predicate` returns falsey for. The predicate is
|
||
* invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the array of grouped elements.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'age': 36, 'active': false },
|
||
* { 'user': 'fred', 'age': 40, 'active': true },
|
||
* { 'user': 'pebbles', 'age': 1, 'active': false }
|
||
* ];
|
||
*
|
||
* _.partition(users, function(o) { return o.active; });
|
||
* // => objects for [['fred'], ['barney', 'pebbles']]
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.partition(users, { 'age': 1, 'active': false });
|
||
* // => objects for [['pebbles'], ['barney', 'fred']]
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.partition(users, ['active', false]);
|
||
* // => objects for [['barney', 'pebbles'], ['fred']]
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.partition(users, 'active');
|
||
* // => objects for [['fred'], ['barney', 'pebbles']]
|
||
*/
|
||
var partition = createAggregator(function(result, value, key) {
|
||
result[key ? 0 : 1].push(value);
|
||
}, function() { return [[], []]; });
|
||
|
||
/**
|
||
* Reduces `collection` to a value which is the accumulated result of running
|
||
* each element in `collection` thru `iteratee`, where each successive
|
||
* invocation is supplied the return value of the previous. If `accumulator`
|
||
* is not given, the first element of `collection` is used as the initial
|
||
* value. The iteratee is invoked with four arguments:
|
||
* (accumulator, value, index|key, collection).
|
||
*
|
||
* Many lodash methods are guarded to work as iteratees for methods like
|
||
* `_.reduce`, `_.reduceRight`, and `_.transform`.
|
||
*
|
||
* The guarded methods are:
|
||
* `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
|
||
* and `sortBy`
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @param {*} [accumulator] The initial value.
|
||
* @returns {*} Returns the accumulated value.
|
||
* @see _.reduceRight
|
||
* @example
|
||
*
|
||
* _.reduce([1, 2], function(sum, n) {
|
||
* return sum + n;
|
||
* }, 0);
|
||
* // => 3
|
||
*
|
||
* _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
|
||
* (result[value] || (result[value] = [])).push(key);
|
||
* return result;
|
||
* }, {});
|
||
* // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
|
||
*/
|
||
function reduce(collection, iteratee, accumulator) {
|
||
var func = isArray(collection) ? arrayReduce : baseReduce,
|
||
initAccum = arguments.length < 3;
|
||
|
||
return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.reduce` except that it iterates over elements of
|
||
* `collection` from right to left.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @param {*} [accumulator] The initial value.
|
||
* @returns {*} Returns the accumulated value.
|
||
* @see _.reduce
|
||
* @example
|
||
*
|
||
* var array = [[0, 1], [2, 3], [4, 5]];
|
||
*
|
||
* _.reduceRight(array, function(flattened, other) {
|
||
* return flattened.concat(other);
|
||
* }, []);
|
||
* // => [4, 5, 2, 3, 0, 1]
|
||
*/
|
||
function reduceRight(collection, iteratee, accumulator) {
|
||
var func = isArray(collection) ? arrayReduceRight : baseReduce,
|
||
initAccum = arguments.length < 3;
|
||
|
||
return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
|
||
}
|
||
|
||
/**
|
||
* The opposite of `_.filter`; this method returns the elements of `collection`
|
||
* that `predicate` does **not** return truthy for.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the new filtered array.
|
||
* @see _.filter
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'age': 36, 'active': false },
|
||
* { 'user': 'fred', 'age': 40, 'active': true }
|
||
* ];
|
||
*
|
||
* _.reject(users, function(o) { return !o.active; });
|
||
* // => objects for ['fred']
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.reject(users, { 'age': 40, 'active': true });
|
||
* // => objects for ['barney']
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.reject(users, ['active', false]);
|
||
* // => objects for ['fred']
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.reject(users, 'active');
|
||
* // => objects for ['barney']
|
||
*/
|
||
function reject(collection, predicate) {
|
||
var func = isArray(collection) ? arrayFilter : baseFilter;
|
||
return func(collection, negate(getIteratee(predicate, 3)));
|
||
}
|
||
|
||
/**
|
||
* Gets a random element from `collection`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to sample.
|
||
* @returns {*} Returns the random element.
|
||
* @example
|
||
*
|
||
* _.sample([1, 2, 3, 4]);
|
||
* // => 2
|
||
*/
|
||
function sample(collection) {
|
||
var func = isArray(collection) ? arraySample : baseSample;
|
||
return func(collection);
|
||
}
|
||
|
||
/**
|
||
* Gets `n` random elements at unique keys from `collection` up to the
|
||
* size of `collection`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to sample.
|
||
* @param {number} [n=1] The number of elements to sample.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Array} Returns the random elements.
|
||
* @example
|
||
*
|
||
* _.sampleSize([1, 2, 3], 2);
|
||
* // => [3, 1]
|
||
*
|
||
* _.sampleSize([1, 2, 3], 4);
|
||
* // => [2, 3, 1]
|
||
*/
|
||
function sampleSize(collection, n, guard) {
|
||
if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
|
||
n = 1;
|
||
} else {
|
||
n = toInteger(n);
|
||
}
|
||
var func = isArray(collection) ? arraySampleSize : baseSampleSize;
|
||
return func(collection, n);
|
||
}
|
||
|
||
/**
|
||
* Creates an array of shuffled values, using a version of the
|
||
* [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to shuffle.
|
||
* @returns {Array} Returns the new shuffled array.
|
||
* @example
|
||
*
|
||
* _.shuffle([1, 2, 3, 4]);
|
||
* // => [4, 1, 3, 2]
|
||
*/
|
||
function shuffle(collection) {
|
||
var func = isArray(collection) ? arrayShuffle : baseShuffle;
|
||
return func(collection);
|
||
}
|
||
|
||
/**
|
||
* Gets the size of `collection` by returning its length for array-like
|
||
* values or the number of own enumerable string keyed properties for objects.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object|string} collection The collection to inspect.
|
||
* @returns {number} Returns the collection size.
|
||
* @example
|
||
*
|
||
* _.size([1, 2, 3]);
|
||
* // => 3
|
||
*
|
||
* _.size({ 'a': 1, 'b': 2 });
|
||
* // => 2
|
||
*
|
||
* _.size('pebbles');
|
||
* // => 7
|
||
*/
|
||
function size(collection) {
|
||
if (collection == null) {
|
||
return 0;
|
||
}
|
||
if (isArrayLike(collection)) {
|
||
return isString(collection) ? stringSize(collection) : collection.length;
|
||
}
|
||
var tag = getTag(collection);
|
||
if (tag == mapTag || tag == setTag) {
|
||
return collection.size;
|
||
}
|
||
return baseKeys(collection).length;
|
||
}
|
||
|
||
/**
|
||
* Checks if `predicate` returns truthy for **any** element of `collection`.
|
||
* Iteration is stopped once `predicate` returns truthy. The predicate is
|
||
* invoked with three arguments: (value, index|key, collection).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {boolean} Returns `true` if any element passes the predicate check,
|
||
* else `false`.
|
||
* @example
|
||
*
|
||
* _.some([null, 0, 'yes', false], Boolean);
|
||
* // => true
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'active': true },
|
||
* { 'user': 'fred', 'active': false }
|
||
* ];
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.some(users, { 'user': 'barney', 'active': false });
|
||
* // => false
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.some(users, ['active', false]);
|
||
* // => true
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.some(users, 'active');
|
||
* // => true
|
||
*/
|
||
function some(collection, predicate, guard) {
|
||
var func = isArray(collection) ? arraySome : baseSome;
|
||
if (guard && isIterateeCall(collection, predicate, guard)) {
|
||
predicate = undefined;
|
||
}
|
||
return func(collection, getIteratee(predicate, 3));
|
||
}
|
||
|
||
/**
|
||
* Creates an array of elements, sorted in ascending order by the results of
|
||
* running each element in a collection thru each iteratee. This method
|
||
* performs a stable sort, that is, it preserves the original sort order of
|
||
* equal elements. The iteratees are invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Collection
|
||
* @param {Array|Object} collection The collection to iterate over.
|
||
* @param {...(Function|Function[])} [iteratees=[_.identity]]
|
||
* The iteratees to sort by.
|
||
* @returns {Array} Returns the new sorted array.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'fred', 'age': 48 },
|
||
* { 'user': 'barney', 'age': 36 },
|
||
* { 'user': 'fred', 'age': 40 },
|
||
* { 'user': 'barney', 'age': 34 }
|
||
* ];
|
||
*
|
||
* _.sortBy(users, [function(o) { return o.user; }]);
|
||
* // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
|
||
*
|
||
* _.sortBy(users, ['user', 'age']);
|
||
* // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
|
||
*/
|
||
var sortBy = baseRest(function(collection, iteratees) {
|
||
if (collection == null) {
|
||
return [];
|
||
}
|
||
var length = iteratees.length;
|
||
if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
|
||
iteratees = [];
|
||
} else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
|
||
iteratees = [iteratees[0]];
|
||
}
|
||
return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
|
||
});
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Gets the timestamp of the number of milliseconds that have elapsed since
|
||
* the Unix epoch (1 January 1970 00:00:00 UTC).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.4.0
|
||
* @category Date
|
||
* @returns {number} Returns the timestamp.
|
||
* @example
|
||
*
|
||
* _.defer(function(stamp) {
|
||
* console.log(_.now() - stamp);
|
||
* }, _.now());
|
||
* // => Logs the number of milliseconds it took for the deferred invocation.
|
||
*/
|
||
var now = ctxNow || function() {
|
||
return root.Date.now();
|
||
};
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* The opposite of `_.before`; this method creates a function that invokes
|
||
* `func` once it's called `n` or more times.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Function
|
||
* @param {number} n The number of calls before `func` is invoked.
|
||
* @param {Function} func The function to restrict.
|
||
* @returns {Function} Returns the new restricted function.
|
||
* @example
|
||
*
|
||
* var saves = ['profile', 'settings'];
|
||
*
|
||
* var done = _.after(saves.length, function() {
|
||
* console.log('done saving!');
|
||
* });
|
||
*
|
||
* _.forEach(saves, function(type) {
|
||
* asyncSave({ 'type': type, 'complete': done });
|
||
* });
|
||
* // => Logs 'done saving!' after the two async saves have completed.
|
||
*/
|
||
function after(n, func) {
|
||
if (typeof func != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
n = toInteger(n);
|
||
return function() {
|
||
if (--n < 1) {
|
||
return func.apply(this, arguments);
|
||
}
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes `func`, with up to `n` arguments,
|
||
* ignoring any additional arguments.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Function
|
||
* @param {Function} func The function to cap arguments for.
|
||
* @param {number} [n=func.length] The arity cap.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Function} Returns the new capped function.
|
||
* @example
|
||
*
|
||
* _.map(['6', '8', '10'], _.ary(parseInt, 1));
|
||
* // => [6, 8, 10]
|
||
*/
|
||
function ary(func, n, guard) {
|
||
n = guard ? undefined : n;
|
||
n = (func && n == null) ? func.length : n;
|
||
return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes `func`, with the `this` binding and arguments
|
||
* of the created function, while it's called less than `n` times. Subsequent
|
||
* calls to the created function return the result of the last `func` invocation.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Function
|
||
* @param {number} n The number of calls at which `func` is no longer invoked.
|
||
* @param {Function} func The function to restrict.
|
||
* @returns {Function} Returns the new restricted function.
|
||
* @example
|
||
*
|
||
* jQuery(element).on('click', _.before(5, addContactToList));
|
||
* // => Allows adding up to 4 contacts to the list.
|
||
*/
|
||
function before(n, func) {
|
||
var result;
|
||
if (typeof func != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
n = toInteger(n);
|
||
return function() {
|
||
if (--n > 0) {
|
||
result = func.apply(this, arguments);
|
||
}
|
||
if (n <= 1) {
|
||
func = undefined;
|
||
}
|
||
return result;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes `func` with the `this` binding of `thisArg`
|
||
* and `partials` prepended to the arguments it receives.
|
||
*
|
||
* The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
|
||
* may be used as a placeholder for partially applied arguments.
|
||
*
|
||
* **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
|
||
* property of bound functions.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Function
|
||
* @param {Function} func The function to bind.
|
||
* @param {*} thisArg The `this` binding of `func`.
|
||
* @param {...*} [partials] The arguments to be partially applied.
|
||
* @returns {Function} Returns the new bound function.
|
||
* @example
|
||
*
|
||
* function greet(greeting, punctuation) {
|
||
* return greeting + ' ' + this.user + punctuation;
|
||
* }
|
||
*
|
||
* var object = { 'user': 'fred' };
|
||
*
|
||
* var bound = _.bind(greet, object, 'hi');
|
||
* bound('!');
|
||
* // => 'hi fred!'
|
||
*
|
||
* // Bound with placeholders.
|
||
* var bound = _.bind(greet, object, _, '!');
|
||
* bound('hi');
|
||
* // => 'hi fred!'
|
||
*/
|
||
var bind = baseRest(function(func, thisArg, partials) {
|
||
var bitmask = WRAP_BIND_FLAG;
|
||
if (partials.length) {
|
||
var holders = replaceHolders(partials, getHolder(bind));
|
||
bitmask |= WRAP_PARTIAL_FLAG;
|
||
}
|
||
return createWrap(func, bitmask, thisArg, partials, holders);
|
||
});
|
||
|
||
/**
|
||
* Creates a function that invokes the method at `object[key]` with `partials`
|
||
* prepended to the arguments it receives.
|
||
*
|
||
* This method differs from `_.bind` by allowing bound functions to reference
|
||
* methods that may be redefined or don't yet exist. See
|
||
* [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
|
||
* for more details.
|
||
*
|
||
* The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
|
||
* builds, may be used as a placeholder for partially applied arguments.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.10.0
|
||
* @category Function
|
||
* @param {Object} object The object to invoke the method on.
|
||
* @param {string} key The key of the method.
|
||
* @param {...*} [partials] The arguments to be partially applied.
|
||
* @returns {Function} Returns the new bound function.
|
||
* @example
|
||
*
|
||
* var object = {
|
||
* 'user': 'fred',
|
||
* 'greet': function(greeting, punctuation) {
|
||
* return greeting + ' ' + this.user + punctuation;
|
||
* }
|
||
* };
|
||
*
|
||
* var bound = _.bindKey(object, 'greet', 'hi');
|
||
* bound('!');
|
||
* // => 'hi fred!'
|
||
*
|
||
* object.greet = function(greeting, punctuation) {
|
||
* return greeting + 'ya ' + this.user + punctuation;
|
||
* };
|
||
*
|
||
* bound('!');
|
||
* // => 'hiya fred!'
|
||
*
|
||
* // Bound with placeholders.
|
||
* var bound = _.bindKey(object, 'greet', _, '!');
|
||
* bound('hi');
|
||
* // => 'hiya fred!'
|
||
*/
|
||
var bindKey = baseRest(function(object, key, partials) {
|
||
var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
|
||
if (partials.length) {
|
||
var holders = replaceHolders(partials, getHolder(bindKey));
|
||
bitmask |= WRAP_PARTIAL_FLAG;
|
||
}
|
||
return createWrap(key, bitmask, object, partials, holders);
|
||
});
|
||
|
||
/**
|
||
* Creates a function that accepts arguments of `func` and either invokes
|
||
* `func` returning its result, if at least `arity` number of arguments have
|
||
* been provided, or returns a function that accepts the remaining `func`
|
||
* arguments, and so on. The arity of `func` may be specified if `func.length`
|
||
* is not sufficient.
|
||
*
|
||
* The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
|
||
* may be used as a placeholder for provided arguments.
|
||
*
|
||
* **Note:** This method doesn't set the "length" property of curried functions.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @category Function
|
||
* @param {Function} func The function to curry.
|
||
* @param {number} [arity=func.length] The arity of `func`.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Function} Returns the new curried function.
|
||
* @example
|
||
*
|
||
* var abc = function(a, b, c) {
|
||
* return [a, b, c];
|
||
* };
|
||
*
|
||
* var curried = _.curry(abc);
|
||
*
|
||
* curried(1)(2)(3);
|
||
* // => [1, 2, 3]
|
||
*
|
||
* curried(1, 2)(3);
|
||
* // => [1, 2, 3]
|
||
*
|
||
* curried(1, 2, 3);
|
||
* // => [1, 2, 3]
|
||
*
|
||
* // Curried with placeholders.
|
||
* curried(1)(_, 3)(2);
|
||
* // => [1, 2, 3]
|
||
*/
|
||
function curry(func, arity, guard) {
|
||
arity = guard ? undefined : arity;
|
||
var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||
result.placeholder = curry.placeholder;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.curry` except that arguments are applied to `func`
|
||
* in the manner of `_.partialRight` instead of `_.partial`.
|
||
*
|
||
* The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
|
||
* builds, may be used as a placeholder for provided arguments.
|
||
*
|
||
* **Note:** This method doesn't set the "length" property of curried functions.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Function
|
||
* @param {Function} func The function to curry.
|
||
* @param {number} [arity=func.length] The arity of `func`.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Function} Returns the new curried function.
|
||
* @example
|
||
*
|
||
* var abc = function(a, b, c) {
|
||
* return [a, b, c];
|
||
* };
|
||
*
|
||
* var curried = _.curryRight(abc);
|
||
*
|
||
* curried(3)(2)(1);
|
||
* // => [1, 2, 3]
|
||
*
|
||
* curried(2, 3)(1);
|
||
* // => [1, 2, 3]
|
||
*
|
||
* curried(1, 2, 3);
|
||
* // => [1, 2, 3]
|
||
*
|
||
* // Curried with placeholders.
|
||
* curried(3)(1, _)(2);
|
||
* // => [1, 2, 3]
|
||
*/
|
||
function curryRight(func, arity, guard) {
|
||
arity = guard ? undefined : arity;
|
||
var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||
result.placeholder = curryRight.placeholder;
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a debounced function that delays invoking `func` until after `wait`
|
||
* milliseconds have elapsed since the last time the debounced function was
|
||
* invoked. The debounced function comes with a `cancel` method to cancel
|
||
* delayed `func` invocations and a `flush` method to immediately invoke them.
|
||
* Provide `options` to indicate whether `func` should be invoked on the
|
||
* leading and/or trailing edge of the `wait` timeout. The `func` is invoked
|
||
* with the last arguments provided to the debounced function. Subsequent
|
||
* calls to the debounced function return the result of the last `func`
|
||
* invocation.
|
||
*
|
||
* **Note:** If `leading` and `trailing` options are `true`, `func` is
|
||
* invoked on the trailing edge of the timeout only if the debounced function
|
||
* is invoked more than once during the `wait` timeout.
|
||
*
|
||
* If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
|
||
* until to the next tick, similar to `setTimeout` with a timeout of `0`.
|
||
*
|
||
* See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
|
||
* for details over the differences between `_.debounce` and `_.throttle`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Function
|
||
* @param {Function} func The function to debounce.
|
||
* @param {number} [wait=0] The number of milliseconds to delay.
|
||
* @param {Object} [options={}] The options object.
|
||
* @param {boolean} [options.leading=false]
|
||
* Specify invoking on the leading edge of the timeout.
|
||
* @param {number} [options.maxWait]
|
||
* The maximum time `func` is allowed to be delayed before it's invoked.
|
||
* @param {boolean} [options.trailing=true]
|
||
* Specify invoking on the trailing edge of the timeout.
|
||
* @returns {Function} Returns the new debounced function.
|
||
* @example
|
||
*
|
||
* // Avoid costly calculations while the window size is in flux.
|
||
* jQuery(window).on('resize', _.debounce(calculateLayout, 150));
|
||
*
|
||
* // Invoke `sendMail` when clicked, debouncing subsequent calls.
|
||
* jQuery(element).on('click', _.debounce(sendMail, 300, {
|
||
* 'leading': true,
|
||
* 'trailing': false
|
||
* }));
|
||
*
|
||
* // Ensure `batchLog` is invoked once after 1 second of debounced calls.
|
||
* var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
|
||
* var source = new EventSource('/stream');
|
||
* jQuery(source).on('message', debounced);
|
||
*
|
||
* // Cancel the trailing debounced invocation.
|
||
* jQuery(window).on('popstate', debounced.cancel);
|
||
*/
|
||
function debounce(func, wait, options) {
|
||
var lastArgs,
|
||
lastThis,
|
||
maxWait,
|
||
result,
|
||
timerId,
|
||
lastCallTime,
|
||
lastInvokeTime = 0,
|
||
leading = false,
|
||
maxing = false,
|
||
trailing = true;
|
||
|
||
if (typeof func != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
wait = toNumber(wait) || 0;
|
||
if (isObject(options)) {
|
||
leading = !!options.leading;
|
||
maxing = 'maxWait' in options;
|
||
maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
|
||
trailing = 'trailing' in options ? !!options.trailing : trailing;
|
||
}
|
||
|
||
function invokeFunc(time) {
|
||
var args = lastArgs,
|
||
thisArg = lastThis;
|
||
|
||
lastArgs = lastThis = undefined;
|
||
lastInvokeTime = time;
|
||
result = func.apply(thisArg, args);
|
||
return result;
|
||
}
|
||
|
||
function leadingEdge(time) {
|
||
// Reset any `maxWait` timer.
|
||
lastInvokeTime = time;
|
||
// Start the timer for the trailing edge.
|
||
timerId = setTimeout(timerExpired, wait);
|
||
// Invoke the leading edge.
|
||
return leading ? invokeFunc(time) : result;
|
||
}
|
||
|
||
function remainingWait(time) {
|
||
var timeSinceLastCall = time - lastCallTime,
|
||
timeSinceLastInvoke = time - lastInvokeTime,
|
||
timeWaiting = wait - timeSinceLastCall;
|
||
|
||
return maxing
|
||
? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
|
||
: timeWaiting;
|
||
}
|
||
|
||
function shouldInvoke(time) {
|
||
var timeSinceLastCall = time - lastCallTime,
|
||
timeSinceLastInvoke = time - lastInvokeTime;
|
||
|
||
// Either this is the first call, activity has stopped and we're at the
|
||
// trailing edge, the system time has gone backwards and we're treating
|
||
// it as the trailing edge, or we've hit the `maxWait` limit.
|
||
return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
|
||
(timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
|
||
}
|
||
|
||
function timerExpired() {
|
||
var time = now();
|
||
if (shouldInvoke(time)) {
|
||
return trailingEdge(time);
|
||
}
|
||
// Restart the timer.
|
||
timerId = setTimeout(timerExpired, remainingWait(time));
|
||
}
|
||
|
||
function trailingEdge(time) {
|
||
timerId = undefined;
|
||
|
||
// Only invoke if we have `lastArgs` which means `func` has been
|
||
// debounced at least once.
|
||
if (trailing && lastArgs) {
|
||
return invokeFunc(time);
|
||
}
|
||
lastArgs = lastThis = undefined;
|
||
return result;
|
||
}
|
||
|
||
function cancel() {
|
||
if (timerId !== undefined) {
|
||
clearTimeout(timerId);
|
||
}
|
||
lastInvokeTime = 0;
|
||
lastArgs = lastCallTime = lastThis = timerId = undefined;
|
||
}
|
||
|
||
function flush() {
|
||
return timerId === undefined ? result : trailingEdge(now());
|
||
}
|
||
|
||
function debounced() {
|
||
var time = now(),
|
||
isInvoking = shouldInvoke(time);
|
||
|
||
lastArgs = arguments;
|
||
lastThis = this;
|
||
lastCallTime = time;
|
||
|
||
if (isInvoking) {
|
||
if (timerId === undefined) {
|
||
return leadingEdge(lastCallTime);
|
||
}
|
||
if (maxing) {
|
||
// Handle invocations in a tight loop.
|
||
timerId = setTimeout(timerExpired, wait);
|
||
return invokeFunc(lastCallTime);
|
||
}
|
||
}
|
||
if (timerId === undefined) {
|
||
timerId = setTimeout(timerExpired, wait);
|
||
}
|
||
return result;
|
||
}
|
||
debounced.cancel = cancel;
|
||
debounced.flush = flush;
|
||
return debounced;
|
||
}
|
||
|
||
/**
|
||
* Defers invoking the `func` until the current call stack has cleared. Any
|
||
* additional arguments are provided to `func` when it's invoked.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Function
|
||
* @param {Function} func The function to defer.
|
||
* @param {...*} [args] The arguments to invoke `func` with.
|
||
* @returns {number} Returns the timer id.
|
||
* @example
|
||
*
|
||
* _.defer(function(text) {
|
||
* console.log(text);
|
||
* }, 'deferred');
|
||
* // => Logs 'deferred' after one millisecond.
|
||
*/
|
||
var defer = baseRest(function(func, args) {
|
||
return baseDelay(func, 1, args);
|
||
});
|
||
|
||
/**
|
||
* Invokes `func` after `wait` milliseconds. Any additional arguments are
|
||
* provided to `func` when it's invoked.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Function
|
||
* @param {Function} func The function to delay.
|
||
* @param {number} wait The number of milliseconds to delay invocation.
|
||
* @param {...*} [args] The arguments to invoke `func` with.
|
||
* @returns {number} Returns the timer id.
|
||
* @example
|
||
*
|
||
* _.delay(function(text) {
|
||
* console.log(text);
|
||
* }, 1000, 'later');
|
||
* // => Logs 'later' after one second.
|
||
*/
|
||
var delay = baseRest(function(func, wait, args) {
|
||
return baseDelay(func, toNumber(wait) || 0, args);
|
||
});
|
||
|
||
/**
|
||
* Creates a function that invokes `func` with arguments reversed.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Function
|
||
* @param {Function} func The function to flip arguments for.
|
||
* @returns {Function} Returns the new flipped function.
|
||
* @example
|
||
*
|
||
* var flipped = _.flip(function() {
|
||
* return _.toArray(arguments);
|
||
* });
|
||
*
|
||
* flipped('a', 'b', 'c', 'd');
|
||
* // => ['d', 'c', 'b', 'a']
|
||
*/
|
||
function flip(func) {
|
||
return createWrap(func, WRAP_FLIP_FLAG);
|
||
}
|
||
|
||
/**
|
||
* Creates a function that memoizes the result of `func`. If `resolver` is
|
||
* provided, it determines the cache key for storing the result based on the
|
||
* arguments provided to the memoized function. By default, the first argument
|
||
* provided to the memoized function is used as the map cache key. The `func`
|
||
* is invoked with the `this` binding of the memoized function.
|
||
*
|
||
* **Note:** The cache is exposed as the `cache` property on the memoized
|
||
* function. Its creation may be customized by replacing the `_.memoize.Cache`
|
||
* constructor with one whose instances implement the
|
||
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
|
||
* method interface of `clear`, `delete`, `get`, `has`, and `set`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Function
|
||
* @param {Function} func The function to have its output memoized.
|
||
* @param {Function} [resolver] The function to resolve the cache key.
|
||
* @returns {Function} Returns the new memoized function.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1, 'b': 2 };
|
||
* var other = { 'c': 3, 'd': 4 };
|
||
*
|
||
* var values = _.memoize(_.values);
|
||
* values(object);
|
||
* // => [1, 2]
|
||
*
|
||
* values(other);
|
||
* // => [3, 4]
|
||
*
|
||
* object.a = 2;
|
||
* values(object);
|
||
* // => [1, 2]
|
||
*
|
||
* // Modify the result cache.
|
||
* values.cache.set(object, ['a', 'b']);
|
||
* values(object);
|
||
* // => ['a', 'b']
|
||
*
|
||
* // Replace `_.memoize.Cache`.
|
||
* _.memoize.Cache = WeakMap;
|
||
*/
|
||
function memoize(func, resolver) {
|
||
if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
var memoized = function() {
|
||
var args = arguments,
|
||
key = resolver ? resolver.apply(this, args) : args[0],
|
||
cache = memoized.cache;
|
||
|
||
if (cache.has(key)) {
|
||
return cache.get(key);
|
||
}
|
||
var result = func.apply(this, args);
|
||
memoized.cache = cache.set(key, result) || cache;
|
||
return result;
|
||
};
|
||
memoized.cache = new (memoize.Cache || MapCache);
|
||
return memoized;
|
||
}
|
||
|
||
// Expose `MapCache`.
|
||
memoize.Cache = MapCache;
|
||
|
||
/**
|
||
* Creates a function that negates the result of the predicate `func`. The
|
||
* `func` predicate is invoked with the `this` binding and arguments of the
|
||
* created function.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Function
|
||
* @param {Function} predicate The predicate to negate.
|
||
* @returns {Function} Returns the new negated function.
|
||
* @example
|
||
*
|
||
* function isEven(n) {
|
||
* return n % 2 == 0;
|
||
* }
|
||
*
|
||
* _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
|
||
* // => [1, 3, 5]
|
||
*/
|
||
function negate(predicate) {
|
||
if (typeof predicate != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
return function() {
|
||
var args = arguments;
|
||
switch (args.length) {
|
||
case 0: return !predicate.call(this);
|
||
case 1: return !predicate.call(this, args[0]);
|
||
case 2: return !predicate.call(this, args[0], args[1]);
|
||
case 3: return !predicate.call(this, args[0], args[1], args[2]);
|
||
}
|
||
return !predicate.apply(this, args);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that is restricted to invoking `func` once. Repeat calls
|
||
* to the function return the value of the first invocation. The `func` is
|
||
* invoked with the `this` binding and arguments of the created function.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Function
|
||
* @param {Function} func The function to restrict.
|
||
* @returns {Function} Returns the new restricted function.
|
||
* @example
|
||
*
|
||
* var initialize = _.once(createApplication);
|
||
* initialize();
|
||
* initialize();
|
||
* // => `createApplication` is invoked once
|
||
*/
|
||
function once(func) {
|
||
return before(2, func);
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes `func` with its arguments transformed.
|
||
*
|
||
* @static
|
||
* @since 4.0.0
|
||
* @memberOf _
|
||
* @category Function
|
||
* @param {Function} func The function to wrap.
|
||
* @param {...(Function|Function[])} [transforms=[_.identity]]
|
||
* The argument transforms.
|
||
* @returns {Function} Returns the new function.
|
||
* @example
|
||
*
|
||
* function doubled(n) {
|
||
* return n * 2;
|
||
* }
|
||
*
|
||
* function square(n) {
|
||
* return n * n;
|
||
* }
|
||
*
|
||
* var func = _.overArgs(function(x, y) {
|
||
* return [x, y];
|
||
* }, [square, doubled]);
|
||
*
|
||
* func(9, 3);
|
||
* // => [81, 6]
|
||
*
|
||
* func(10, 5);
|
||
* // => [100, 10]
|
||
*/
|
||
var overArgs = castRest(function(func, transforms) {
|
||
transforms = (transforms.length == 1 && isArray(transforms[0]))
|
||
? arrayMap(transforms[0], baseUnary(getIteratee()))
|
||
: arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
|
||
|
||
var funcsLength = transforms.length;
|
||
return baseRest(function(args) {
|
||
var index = -1,
|
||
length = nativeMin(args.length, funcsLength);
|
||
|
||
while (++index < length) {
|
||
args[index] = transforms[index].call(this, args[index]);
|
||
}
|
||
return apply(func, this, args);
|
||
});
|
||
});
|
||
|
||
/**
|
||
* Creates a function that invokes `func` with `partials` prepended to the
|
||
* arguments it receives. This method is like `_.bind` except it does **not**
|
||
* alter the `this` binding.
|
||
*
|
||
* The `_.partial.placeholder` value, which defaults to `_` in monolithic
|
||
* builds, may be used as a placeholder for partially applied arguments.
|
||
*
|
||
* **Note:** This method doesn't set the "length" property of partially
|
||
* applied functions.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.2.0
|
||
* @category Function
|
||
* @param {Function} func The function to partially apply arguments to.
|
||
* @param {...*} [partials] The arguments to be partially applied.
|
||
* @returns {Function} Returns the new partially applied function.
|
||
* @example
|
||
*
|
||
* function greet(greeting, name) {
|
||
* return greeting + ' ' + name;
|
||
* }
|
||
*
|
||
* var sayHelloTo = _.partial(greet, 'hello');
|
||
* sayHelloTo('fred');
|
||
* // => 'hello fred'
|
||
*
|
||
* // Partially applied with placeholders.
|
||
* var greetFred = _.partial(greet, _, 'fred');
|
||
* greetFred('hi');
|
||
* // => 'hi fred'
|
||
*/
|
||
var partial = baseRest(function(func, partials) {
|
||
var holders = replaceHolders(partials, getHolder(partial));
|
||
return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.partial` except that partially applied arguments
|
||
* are appended to the arguments it receives.
|
||
*
|
||
* The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
|
||
* builds, may be used as a placeholder for partially applied arguments.
|
||
*
|
||
* **Note:** This method doesn't set the "length" property of partially
|
||
* applied functions.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.0.0
|
||
* @category Function
|
||
* @param {Function} func The function to partially apply arguments to.
|
||
* @param {...*} [partials] The arguments to be partially applied.
|
||
* @returns {Function} Returns the new partially applied function.
|
||
* @example
|
||
*
|
||
* function greet(greeting, name) {
|
||
* return greeting + ' ' + name;
|
||
* }
|
||
*
|
||
* var greetFred = _.partialRight(greet, 'fred');
|
||
* greetFred('hi');
|
||
* // => 'hi fred'
|
||
*
|
||
* // Partially applied with placeholders.
|
||
* var sayHelloTo = _.partialRight(greet, 'hello', _);
|
||
* sayHelloTo('fred');
|
||
* // => 'hello fred'
|
||
*/
|
||
var partialRight = baseRest(function(func, partials) {
|
||
var holders = replaceHolders(partials, getHolder(partialRight));
|
||
return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
|
||
});
|
||
|
||
/**
|
||
* Creates a function that invokes `func` with arguments arranged according
|
||
* to the specified `indexes` where the argument value at the first index is
|
||
* provided as the first argument, the argument value at the second index is
|
||
* provided as the second argument, and so on.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Function
|
||
* @param {Function} func The function to rearrange arguments for.
|
||
* @param {...(number|number[])} indexes The arranged argument indexes.
|
||
* @returns {Function} Returns the new function.
|
||
* @example
|
||
*
|
||
* var rearged = _.rearg(function(a, b, c) {
|
||
* return [a, b, c];
|
||
* }, [2, 0, 1]);
|
||
*
|
||
* rearged('b', 'c', 'a')
|
||
* // => ['a', 'b', 'c']
|
||
*/
|
||
var rearg = flatRest(function(func, indexes) {
|
||
return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
|
||
});
|
||
|
||
/**
|
||
* Creates a function that invokes `func` with the `this` binding of the
|
||
* created function and arguments from `start` and beyond provided as
|
||
* an array.
|
||
*
|
||
* **Note:** This method is based on the
|
||
* [rest parameter](https://mdn.io/rest_parameters).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Function
|
||
* @param {Function} func The function to apply a rest parameter to.
|
||
* @param {number} [start=func.length-1] The start position of the rest parameter.
|
||
* @returns {Function} Returns the new function.
|
||
* @example
|
||
*
|
||
* var say = _.rest(function(what, names) {
|
||
* return what + ' ' + _.initial(names).join(', ') +
|
||
* (_.size(names) > 1 ? ', & ' : '') + _.last(names);
|
||
* });
|
||
*
|
||
* say('hello', 'fred', 'barney', 'pebbles');
|
||
* // => 'hello fred, barney, & pebbles'
|
||
*/
|
||
function rest(func, start) {
|
||
if (typeof func != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
start = start === undefined ? start : toInteger(start);
|
||
return baseRest(func, start);
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes `func` with the `this` binding of the
|
||
* create function and an array of arguments much like
|
||
* [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
|
||
*
|
||
* **Note:** This method is based on the
|
||
* [spread operator](https://mdn.io/spread_operator).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.2.0
|
||
* @category Function
|
||
* @param {Function} func The function to spread arguments over.
|
||
* @param {number} [start=0] The start position of the spread.
|
||
* @returns {Function} Returns the new function.
|
||
* @example
|
||
*
|
||
* var say = _.spread(function(who, what) {
|
||
* return who + ' says ' + what;
|
||
* });
|
||
*
|
||
* say(['fred', 'hello']);
|
||
* // => 'fred says hello'
|
||
*
|
||
* var numbers = Promise.all([
|
||
* Promise.resolve(40),
|
||
* Promise.resolve(36)
|
||
* ]);
|
||
*
|
||
* numbers.then(_.spread(function(x, y) {
|
||
* return x + y;
|
||
* }));
|
||
* // => a Promise of 76
|
||
*/
|
||
function spread(func, start) {
|
||
if (typeof func != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
start = start == null ? 0 : nativeMax(toInteger(start), 0);
|
||
return baseRest(function(args) {
|
||
var array = args[start],
|
||
otherArgs = castSlice(args, 0, start);
|
||
|
||
if (array) {
|
||
arrayPush(otherArgs, array);
|
||
}
|
||
return apply(func, this, otherArgs);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates a throttled function that only invokes `func` at most once per
|
||
* every `wait` milliseconds. The throttled function comes with a `cancel`
|
||
* method to cancel delayed `func` invocations and a `flush` method to
|
||
* immediately invoke them. Provide `options` to indicate whether `func`
|
||
* should be invoked on the leading and/or trailing edge of the `wait`
|
||
* timeout. The `func` is invoked with the last arguments provided to the
|
||
* throttled function. Subsequent calls to the throttled function return the
|
||
* result of the last `func` invocation.
|
||
*
|
||
* **Note:** If `leading` and `trailing` options are `true`, `func` is
|
||
* invoked on the trailing edge of the timeout only if the throttled function
|
||
* is invoked more than once during the `wait` timeout.
|
||
*
|
||
* If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
|
||
* until to the next tick, similar to `setTimeout` with a timeout of `0`.
|
||
*
|
||
* See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
|
||
* for details over the differences between `_.throttle` and `_.debounce`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Function
|
||
* @param {Function} func The function to throttle.
|
||
* @param {number} [wait=0] The number of milliseconds to throttle invocations to.
|
||
* @param {Object} [options={}] The options object.
|
||
* @param {boolean} [options.leading=true]
|
||
* Specify invoking on the leading edge of the timeout.
|
||
* @param {boolean} [options.trailing=true]
|
||
* Specify invoking on the trailing edge of the timeout.
|
||
* @returns {Function} Returns the new throttled function.
|
||
* @example
|
||
*
|
||
* // Avoid excessively updating the position while scrolling.
|
||
* jQuery(window).on('scroll', _.throttle(updatePosition, 100));
|
||
*
|
||
* // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
|
||
* var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
|
||
* jQuery(element).on('click', throttled);
|
||
*
|
||
* // Cancel the trailing throttled invocation.
|
||
* jQuery(window).on('popstate', throttled.cancel);
|
||
*/
|
||
function throttle(func, wait, options) {
|
||
var leading = true,
|
||
trailing = true;
|
||
|
||
if (typeof func != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
if (isObject(options)) {
|
||
leading = 'leading' in options ? !!options.leading : leading;
|
||
trailing = 'trailing' in options ? !!options.trailing : trailing;
|
||
}
|
||
return debounce(func, wait, {
|
||
'leading': leading,
|
||
'maxWait': wait,
|
||
'trailing': trailing
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates a function that accepts up to one argument, ignoring any
|
||
* additional arguments.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Function
|
||
* @param {Function} func The function to cap arguments for.
|
||
* @returns {Function} Returns the new capped function.
|
||
* @example
|
||
*
|
||
* _.map(['6', '8', '10'], _.unary(parseInt));
|
||
* // => [6, 8, 10]
|
||
*/
|
||
function unary(func) {
|
||
return ary(func, 1);
|
||
}
|
||
|
||
/**
|
||
* Creates a function that provides `value` to `wrapper` as its first
|
||
* argument. Any additional arguments provided to the function are appended
|
||
* to those provided to the `wrapper`. The wrapper is invoked with the `this`
|
||
* binding of the created function.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Function
|
||
* @param {*} value The value to wrap.
|
||
* @param {Function} [wrapper=identity] The wrapper function.
|
||
* @returns {Function} Returns the new function.
|
||
* @example
|
||
*
|
||
* var p = _.wrap(_.escape, function(func, text) {
|
||
* return '<p>' + func(text) + '</p>';
|
||
* });
|
||
*
|
||
* p('fred, barney, & pebbles');
|
||
* // => '<p>fred, barney, & pebbles</p>'
|
||
*/
|
||
function wrap(value, wrapper) {
|
||
return partial(castFunction(wrapper), value);
|
||
}
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Casts `value` as an array if it's not one.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.4.0
|
||
* @category Lang
|
||
* @param {*} value The value to inspect.
|
||
* @returns {Array} Returns the cast array.
|
||
* @example
|
||
*
|
||
* _.castArray(1);
|
||
* // => [1]
|
||
*
|
||
* _.castArray({ 'a': 1 });
|
||
* // => [{ 'a': 1 }]
|
||
*
|
||
* _.castArray('abc');
|
||
* // => ['abc']
|
||
*
|
||
* _.castArray(null);
|
||
* // => [null]
|
||
*
|
||
* _.castArray(undefined);
|
||
* // => [undefined]
|
||
*
|
||
* _.castArray();
|
||
* // => []
|
||
*
|
||
* var array = [1, 2, 3];
|
||
* console.log(_.castArray(array) === array);
|
||
* // => true
|
||
*/
|
||
function castArray() {
|
||
if (!arguments.length) {
|
||
return [];
|
||
}
|
||
var value = arguments[0];
|
||
return isArray(value) ? value : [value];
|
||
}
|
||
|
||
/**
|
||
* Creates a shallow clone of `value`.
|
||
*
|
||
* **Note:** This method is loosely based on the
|
||
* [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
|
||
* and supports cloning arrays, array buffers, booleans, date objects, maps,
|
||
* numbers, `Object` objects, regexes, sets, strings, symbols, and typed
|
||
* arrays. The own enumerable properties of `arguments` objects are cloned
|
||
* as plain objects. An empty object is returned for uncloneable values such
|
||
* as error objects, functions, DOM nodes, and WeakMaps.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to clone.
|
||
* @returns {*} Returns the cloned value.
|
||
* @see _.cloneDeep
|
||
* @example
|
||
*
|
||
* var objects = [{ 'a': 1 }, { 'b': 2 }];
|
||
*
|
||
* var shallow = _.clone(objects);
|
||
* console.log(shallow[0] === objects[0]);
|
||
* // => true
|
||
*/
|
||
function clone(value) {
|
||
return baseClone(value, CLONE_SYMBOLS_FLAG);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.clone` except that it accepts `customizer` which
|
||
* is invoked to produce the cloned value. If `customizer` returns `undefined`,
|
||
* cloning is handled by the method instead. The `customizer` is invoked with
|
||
* up to four arguments; (value [, index|key, object, stack]).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to clone.
|
||
* @param {Function} [customizer] The function to customize cloning.
|
||
* @returns {*} Returns the cloned value.
|
||
* @see _.cloneDeepWith
|
||
* @example
|
||
*
|
||
* function customizer(value) {
|
||
* if (_.isElement(value)) {
|
||
* return value.cloneNode(false);
|
||
* }
|
||
* }
|
||
*
|
||
* var el = _.cloneWith(document.body, customizer);
|
||
*
|
||
* console.log(el === document.body);
|
||
* // => false
|
||
* console.log(el.nodeName);
|
||
* // => 'BODY'
|
||
* console.log(el.childNodes.length);
|
||
* // => 0
|
||
*/
|
||
function cloneWith(value, customizer) {
|
||
customizer = typeof customizer == 'function' ? customizer : undefined;
|
||
return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.clone` except that it recursively clones `value`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to recursively clone.
|
||
* @returns {*} Returns the deep cloned value.
|
||
* @see _.clone
|
||
* @example
|
||
*
|
||
* var objects = [{ 'a': 1 }, { 'b': 2 }];
|
||
*
|
||
* var deep = _.cloneDeep(objects);
|
||
* console.log(deep[0] === objects[0]);
|
||
* // => false
|
||
*/
|
||
function cloneDeep(value) {
|
||
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.cloneWith` except that it recursively clones `value`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to recursively clone.
|
||
* @param {Function} [customizer] The function to customize cloning.
|
||
* @returns {*} Returns the deep cloned value.
|
||
* @see _.cloneWith
|
||
* @example
|
||
*
|
||
* function customizer(value) {
|
||
* if (_.isElement(value)) {
|
||
* return value.cloneNode(true);
|
||
* }
|
||
* }
|
||
*
|
||
* var el = _.cloneDeepWith(document.body, customizer);
|
||
*
|
||
* console.log(el === document.body);
|
||
* // => false
|
||
* console.log(el.nodeName);
|
||
* // => 'BODY'
|
||
* console.log(el.childNodes.length);
|
||
* // => 20
|
||
*/
|
||
function cloneDeepWith(value, customizer) {
|
||
customizer = typeof customizer == 'function' ? customizer : undefined;
|
||
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
|
||
}
|
||
|
||
/**
|
||
* Checks if `object` conforms to `source` by invoking the predicate
|
||
* properties of `source` with the corresponding property values of `object`.
|
||
*
|
||
* **Note:** This method is equivalent to `_.conforms` when `source` is
|
||
* partially applied.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.14.0
|
||
* @category Lang
|
||
* @param {Object} object The object to inspect.
|
||
* @param {Object} source The object of property predicates to conform to.
|
||
* @returns {boolean} Returns `true` if `object` conforms, else `false`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1, 'b': 2 };
|
||
*
|
||
* _.conformsTo(object, { 'b': function(n) { return n > 1; } });
|
||
* // => true
|
||
*
|
||
* _.conformsTo(object, { 'b': function(n) { return n > 2; } });
|
||
* // => false
|
||
*/
|
||
function conformsTo(object, source) {
|
||
return source == null || baseConformsTo(object, source, keys(source));
|
||
}
|
||
|
||
/**
|
||
* Performs a
|
||
* [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||
* comparison between two values to determine if they are equivalent.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1 };
|
||
* var other = { 'a': 1 };
|
||
*
|
||
* _.eq(object, object);
|
||
* // => true
|
||
*
|
||
* _.eq(object, other);
|
||
* // => false
|
||
*
|
||
* _.eq('a', 'a');
|
||
* // => true
|
||
*
|
||
* _.eq('a', Object('a'));
|
||
* // => false
|
||
*
|
||
* _.eq(NaN, NaN);
|
||
* // => true
|
||
*/
|
||
function eq(value, other) {
|
||
return value === other || (value !== value && other !== other);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is greater than `other`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.9.0
|
||
* @category Lang
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {boolean} Returns `true` if `value` is greater than `other`,
|
||
* else `false`.
|
||
* @see _.lt
|
||
* @example
|
||
*
|
||
* _.gt(3, 1);
|
||
* // => true
|
||
*
|
||
* _.gt(3, 3);
|
||
* // => false
|
||
*
|
||
* _.gt(1, 3);
|
||
* // => false
|
||
*/
|
||
var gt = createRelationalOperation(baseGt);
|
||
|
||
/**
|
||
* Checks if `value` is greater than or equal to `other`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.9.0
|
||
* @category Lang
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {boolean} Returns `true` if `value` is greater than or equal to
|
||
* `other`, else `false`.
|
||
* @see _.lte
|
||
* @example
|
||
*
|
||
* _.gte(3, 1);
|
||
* // => true
|
||
*
|
||
* _.gte(3, 3);
|
||
* // => true
|
||
*
|
||
* _.gte(1, 3);
|
||
* // => false
|
||
*/
|
||
var gte = createRelationalOperation(function(value, other) {
|
||
return value >= other;
|
||
});
|
||
|
||
/**
|
||
* Checks if `value` is likely an `arguments` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an `arguments` object,
|
||
* else `false`.
|
||
* @example
|
||
*
|
||
* _.isArguments(function() { return arguments; }());
|
||
* // => true
|
||
*
|
||
* _.isArguments([1, 2, 3]);
|
||
* // => false
|
||
*/
|
||
var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
|
||
return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
|
||
!propertyIsEnumerable.call(value, 'callee');
|
||
};
|
||
|
||
/**
|
||
* Checks if `value` is classified as an `Array` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an array, else `false`.
|
||
* @example
|
||
*
|
||
* _.isArray([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isArray(document.body.children);
|
||
* // => false
|
||
*
|
||
* _.isArray('abc');
|
||
* // => false
|
||
*
|
||
* _.isArray(_.noop);
|
||
* // => false
|
||
*/
|
||
var isArray = Array.isArray;
|
||
|
||
/**
|
||
* Checks if `value` is classified as an `ArrayBuffer` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.3.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
|
||
* @example
|
||
*
|
||
* _.isArrayBuffer(new ArrayBuffer(2));
|
||
* // => true
|
||
*
|
||
* _.isArrayBuffer(new Array(2));
|
||
* // => false
|
||
*/
|
||
var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
|
||
|
||
/**
|
||
* Checks if `value` is array-like. A value is considered array-like if it's
|
||
* not a function and has a `value.length` that's an integer greater than or
|
||
* equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is array-like, else `false`.
|
||
* @example
|
||
*
|
||
* _.isArrayLike([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isArrayLike(document.body.children);
|
||
* // => true
|
||
*
|
||
* _.isArrayLike('abc');
|
||
* // => true
|
||
*
|
||
* _.isArrayLike(_.noop);
|
||
* // => false
|
||
*/
|
||
function isArrayLike(value) {
|
||
return value != null && isLength(value.length) && !isFunction(value);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.isArrayLike` except that it also checks if `value`
|
||
* is an object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an array-like object,
|
||
* else `false`.
|
||
* @example
|
||
*
|
||
* _.isArrayLikeObject([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isArrayLikeObject(document.body.children);
|
||
* // => true
|
||
*
|
||
* _.isArrayLikeObject('abc');
|
||
* // => false
|
||
*
|
||
* _.isArrayLikeObject(_.noop);
|
||
* // => false
|
||
*/
|
||
function isArrayLikeObject(value) {
|
||
return isObjectLike(value) && isArrayLike(value);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a boolean primitive or object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
|
||
* @example
|
||
*
|
||
* _.isBoolean(false);
|
||
* // => true
|
||
*
|
||
* _.isBoolean(null);
|
||
* // => false
|
||
*/
|
||
function isBoolean(value) {
|
||
return value === true || value === false ||
|
||
(isObjectLike(value) && baseGetTag(value) == boolTag);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a buffer.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.3.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
|
||
* @example
|
||
*
|
||
* _.isBuffer(new Buffer(2));
|
||
* // => true
|
||
*
|
||
* _.isBuffer(new Uint8Array(2));
|
||
* // => false
|
||
*/
|
||
var isBuffer = nativeIsBuffer || stubFalse;
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `Date` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a date object, else `false`.
|
||
* @example
|
||
*
|
||
* _.isDate(new Date);
|
||
* // => true
|
||
*
|
||
* _.isDate('Mon April 23 2012');
|
||
* // => false
|
||
*/
|
||
var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
|
||
|
||
/**
|
||
* Checks if `value` is likely a DOM element.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
|
||
* @example
|
||
*
|
||
* _.isElement(document.body);
|
||
* // => true
|
||
*
|
||
* _.isElement('<body>');
|
||
* // => false
|
||
*/
|
||
function isElement(value) {
|
||
return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is an empty object, collection, map, or set.
|
||
*
|
||
* Objects are considered empty if they have no own enumerable string keyed
|
||
* properties.
|
||
*
|
||
* Array-like values such as `arguments` objects, arrays, buffers, strings, or
|
||
* jQuery-like collections are considered empty if they have a `length` of `0`.
|
||
* Similarly, maps and sets are considered empty if they have a `size` of `0`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is empty, else `false`.
|
||
* @example
|
||
*
|
||
* _.isEmpty(null);
|
||
* // => true
|
||
*
|
||
* _.isEmpty(true);
|
||
* // => true
|
||
*
|
||
* _.isEmpty(1);
|
||
* // => true
|
||
*
|
||
* _.isEmpty([1, 2, 3]);
|
||
* // => false
|
||
*
|
||
* _.isEmpty({ 'a': 1 });
|
||
* // => false
|
||
*/
|
||
function isEmpty(value) {
|
||
if (value == null) {
|
||
return true;
|
||
}
|
||
if (isArrayLike(value) &&
|
||
(isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
|
||
isBuffer(value) || isTypedArray(value) || isArguments(value))) {
|
||
return !value.length;
|
||
}
|
||
var tag = getTag(value);
|
||
if (tag == mapTag || tag == setTag) {
|
||
return !value.size;
|
||
}
|
||
if (isPrototype(value)) {
|
||
return !baseKeys(value).length;
|
||
}
|
||
for (var key in value) {
|
||
if (hasOwnProperty.call(value, key)) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Performs a deep comparison between two values to determine if they are
|
||
* equivalent.
|
||
*
|
||
* **Note:** This method supports comparing arrays, array buffers, booleans,
|
||
* date objects, error objects, maps, numbers, `Object` objects, regexes,
|
||
* sets, strings, symbols, and typed arrays. `Object` objects are compared
|
||
* by their own, not inherited, enumerable properties. Functions and DOM
|
||
* nodes are compared by strict equality, i.e. `===`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1 };
|
||
* var other = { 'a': 1 };
|
||
*
|
||
* _.isEqual(object, other);
|
||
* // => true
|
||
*
|
||
* object === other;
|
||
* // => false
|
||
*/
|
||
function isEqual(value, other) {
|
||
return baseIsEqual(value, other);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.isEqual` except that it accepts `customizer` which
|
||
* is invoked to compare values. If `customizer` returns `undefined`, comparisons
|
||
* are handled by the method instead. The `customizer` is invoked with up to
|
||
* six arguments: (objValue, othValue [, index|key, object, other, stack]).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @param {Function} [customizer] The function to customize comparisons.
|
||
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
||
* @example
|
||
*
|
||
* function isGreeting(value) {
|
||
* return /^h(?:i|ello)$/.test(value);
|
||
* }
|
||
*
|
||
* function customizer(objValue, othValue) {
|
||
* if (isGreeting(objValue) && isGreeting(othValue)) {
|
||
* return true;
|
||
* }
|
||
* }
|
||
*
|
||
* var array = ['hello', 'goodbye'];
|
||
* var other = ['hi', 'goodbye'];
|
||
*
|
||
* _.isEqualWith(array, other, customizer);
|
||
* // => true
|
||
*/
|
||
function isEqualWith(value, other, customizer) {
|
||
customizer = typeof customizer == 'function' ? customizer : undefined;
|
||
var result = customizer ? customizer(value, other) : undefined;
|
||
return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
|
||
* `SyntaxError`, `TypeError`, or `URIError` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an error object, else `false`.
|
||
* @example
|
||
*
|
||
* _.isError(new Error);
|
||
* // => true
|
||
*
|
||
* _.isError(Error);
|
||
* // => false
|
||
*/
|
||
function isError(value) {
|
||
if (!isObjectLike(value)) {
|
||
return false;
|
||
}
|
||
var tag = baseGetTag(value);
|
||
return tag == errorTag || tag == domExcTag ||
|
||
(typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a finite primitive number.
|
||
*
|
||
* **Note:** This method is based on
|
||
* [`Number.isFinite`](https://mdn.io/Number/isFinite).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
|
||
* @example
|
||
*
|
||
* _.isFinite(3);
|
||
* // => true
|
||
*
|
||
* _.isFinite(Number.MIN_VALUE);
|
||
* // => true
|
||
*
|
||
* _.isFinite(Infinity);
|
||
* // => false
|
||
*
|
||
* _.isFinite('3');
|
||
* // => false
|
||
*/
|
||
function isFinite(value) {
|
||
return typeof value == 'number' && nativeIsFinite(value);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `Function` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a function, else `false`.
|
||
* @example
|
||
*
|
||
* _.isFunction(_);
|
||
* // => true
|
||
*
|
||
* _.isFunction(/abc/);
|
||
* // => false
|
||
*/
|
||
function isFunction(value) {
|
||
if (!isObject(value)) {
|
||
return false;
|
||
}
|
||
// The use of `Object#toString` avoids issues with the `typeof` operator
|
||
// in Safari 9 which returns 'object' for typed arrays and other constructors.
|
||
var tag = baseGetTag(value);
|
||
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is an integer.
|
||
*
|
||
* **Note:** This method is based on
|
||
* [`Number.isInteger`](https://mdn.io/Number/isInteger).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an integer, else `false`.
|
||
* @example
|
||
*
|
||
* _.isInteger(3);
|
||
* // => true
|
||
*
|
||
* _.isInteger(Number.MIN_VALUE);
|
||
* // => false
|
||
*
|
||
* _.isInteger(Infinity);
|
||
* // => false
|
||
*
|
||
* _.isInteger('3');
|
||
* // => false
|
||
*/
|
||
function isInteger(value) {
|
||
return typeof value == 'number' && value == toInteger(value);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a valid array-like length.
|
||
*
|
||
* **Note:** This method is loosely based on
|
||
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
|
||
* @example
|
||
*
|
||
* _.isLength(3);
|
||
* // => true
|
||
*
|
||
* _.isLength(Number.MIN_VALUE);
|
||
* // => false
|
||
*
|
||
* _.isLength(Infinity);
|
||
* // => false
|
||
*
|
||
* _.isLength('3');
|
||
* // => false
|
||
*/
|
||
function isLength(value) {
|
||
return typeof value == 'number' &&
|
||
value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is the
|
||
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
|
||
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is an object, else `false`.
|
||
* @example
|
||
*
|
||
* _.isObject({});
|
||
* // => true
|
||
*
|
||
* _.isObject([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isObject(_.noop);
|
||
* // => true
|
||
*
|
||
* _.isObject(null);
|
||
* // => false
|
||
*/
|
||
function isObject(value) {
|
||
var type = typeof value;
|
||
return value != null && (type == 'object' || type == 'function');
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is object-like. A value is object-like if it's not `null`
|
||
* and has a `typeof` result of "object".
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
|
||
* @example
|
||
*
|
||
* _.isObjectLike({});
|
||
* // => true
|
||
*
|
||
* _.isObjectLike([1, 2, 3]);
|
||
* // => true
|
||
*
|
||
* _.isObjectLike(_.noop);
|
||
* // => false
|
||
*
|
||
* _.isObjectLike(null);
|
||
* // => false
|
||
*/
|
||
function isObjectLike(value) {
|
||
return value != null && typeof value == 'object';
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `Map` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.3.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a map, else `false`.
|
||
* @example
|
||
*
|
||
* _.isMap(new Map);
|
||
* // => true
|
||
*
|
||
* _.isMap(new WeakMap);
|
||
* // => false
|
||
*/
|
||
var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
|
||
|
||
/**
|
||
* Performs a partial deep comparison between `object` and `source` to
|
||
* determine if `object` contains equivalent property values.
|
||
*
|
||
* **Note:** This method is equivalent to `_.matches` when `source` is
|
||
* partially applied.
|
||
*
|
||
* Partial comparisons will match empty array and empty object `source`
|
||
* values against any array or object value, respectively. See `_.isEqual`
|
||
* for a list of supported value comparisons.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Lang
|
||
* @param {Object} object The object to inspect.
|
||
* @param {Object} source The object of property values to match.
|
||
* @returns {boolean} Returns `true` if `object` is a match, else `false`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1, 'b': 2 };
|
||
*
|
||
* _.isMatch(object, { 'b': 2 });
|
||
* // => true
|
||
*
|
||
* _.isMatch(object, { 'b': 1 });
|
||
* // => false
|
||
*/
|
||
function isMatch(object, source) {
|
||
return object === source || baseIsMatch(object, source, getMatchData(source));
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.isMatch` except that it accepts `customizer` which
|
||
* is invoked to compare values. If `customizer` returns `undefined`, comparisons
|
||
* are handled by the method instead. The `customizer` is invoked with five
|
||
* arguments: (objValue, srcValue, index|key, object, source).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {Object} object The object to inspect.
|
||
* @param {Object} source The object of property values to match.
|
||
* @param {Function} [customizer] The function to customize comparisons.
|
||
* @returns {boolean} Returns `true` if `object` is a match, else `false`.
|
||
* @example
|
||
*
|
||
* function isGreeting(value) {
|
||
* return /^h(?:i|ello)$/.test(value);
|
||
* }
|
||
*
|
||
* function customizer(objValue, srcValue) {
|
||
* if (isGreeting(objValue) && isGreeting(srcValue)) {
|
||
* return true;
|
||
* }
|
||
* }
|
||
*
|
||
* var object = { 'greeting': 'hello' };
|
||
* var source = { 'greeting': 'hi' };
|
||
*
|
||
* _.isMatchWith(object, source, customizer);
|
||
* // => true
|
||
*/
|
||
function isMatchWith(object, source, customizer) {
|
||
customizer = typeof customizer == 'function' ? customizer : undefined;
|
||
return baseIsMatch(object, source, getMatchData(source), customizer);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is `NaN`.
|
||
*
|
||
* **Note:** This method is based on
|
||
* [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
|
||
* global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
|
||
* `undefined` and other non-number values.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
|
||
* @example
|
||
*
|
||
* _.isNaN(NaN);
|
||
* // => true
|
||
*
|
||
* _.isNaN(new Number(NaN));
|
||
* // => true
|
||
*
|
||
* isNaN(undefined);
|
||
* // => true
|
||
*
|
||
* _.isNaN(undefined);
|
||
* // => false
|
||
*/
|
||
function isNaN(value) {
|
||
// An `NaN` primitive is the only value that is not equal to itself.
|
||
// Perform the `toStringTag` check first to avoid errors with some
|
||
// ActiveX objects in IE.
|
||
return isNumber(value) && value != +value;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a pristine native function.
|
||
*
|
||
* **Note:** This method can't reliably detect native functions in the presence
|
||
* of the core-js package because core-js circumvents this kind of detection.
|
||
* Despite multiple requests, the core-js maintainer has made it clear: any
|
||
* attempt to fix the detection will be obstructed. As a result, we're left
|
||
* with little choice but to throw an error. Unfortunately, this also affects
|
||
* packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
|
||
* which rely on core-js.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a native function,
|
||
* else `false`.
|
||
* @example
|
||
*
|
||
* _.isNative(Array.prototype.push);
|
||
* // => true
|
||
*
|
||
* _.isNative(_);
|
||
* // => false
|
||
*/
|
||
function isNative(value) {
|
||
if (isMaskable(value)) {
|
||
throw new Error(CORE_ERROR_TEXT);
|
||
}
|
||
return baseIsNative(value);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is `null`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is `null`, else `false`.
|
||
* @example
|
||
*
|
||
* _.isNull(null);
|
||
* // => true
|
||
*
|
||
* _.isNull(void 0);
|
||
* // => false
|
||
*/
|
||
function isNull(value) {
|
||
return value === null;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is `null` or `undefined`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is nullish, else `false`.
|
||
* @example
|
||
*
|
||
* _.isNil(null);
|
||
* // => true
|
||
*
|
||
* _.isNil(void 0);
|
||
* // => true
|
||
*
|
||
* _.isNil(NaN);
|
||
* // => false
|
||
*/
|
||
function isNil(value) {
|
||
return value == null;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `Number` primitive or object.
|
||
*
|
||
* **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
|
||
* classified as numbers, use the `_.isFinite` method.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a number, else `false`.
|
||
* @example
|
||
*
|
||
* _.isNumber(3);
|
||
* // => true
|
||
*
|
||
* _.isNumber(Number.MIN_VALUE);
|
||
* // => true
|
||
*
|
||
* _.isNumber(Infinity);
|
||
* // => true
|
||
*
|
||
* _.isNumber('3');
|
||
* // => false
|
||
*/
|
||
function isNumber(value) {
|
||
return typeof value == 'number' ||
|
||
(isObjectLike(value) && baseGetTag(value) == numberTag);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is a plain object, that is, an object created by the
|
||
* `Object` constructor or one with a `[[Prototype]]` of `null`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.8.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* }
|
||
*
|
||
* _.isPlainObject(new Foo);
|
||
* // => false
|
||
*
|
||
* _.isPlainObject([1, 2, 3]);
|
||
* // => false
|
||
*
|
||
* _.isPlainObject({ 'x': 0, 'y': 0 });
|
||
* // => true
|
||
*
|
||
* _.isPlainObject(Object.create(null));
|
||
* // => true
|
||
*/
|
||
function isPlainObject(value) {
|
||
if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
|
||
return false;
|
||
}
|
||
var proto = getPrototype(value);
|
||
if (proto === null) {
|
||
return true;
|
||
}
|
||
var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
|
||
return typeof Ctor == 'function' && Ctor instanceof Ctor &&
|
||
funcToString.call(Ctor) == objectCtorString;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `RegExp` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.1.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
|
||
* @example
|
||
*
|
||
* _.isRegExp(/abc/);
|
||
* // => true
|
||
*
|
||
* _.isRegExp('/abc/');
|
||
* // => false
|
||
*/
|
||
var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
|
||
|
||
/**
|
||
* Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
|
||
* double precision number which isn't the result of a rounded unsafe integer.
|
||
*
|
||
* **Note:** This method is based on
|
||
* [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
|
||
* @example
|
||
*
|
||
* _.isSafeInteger(3);
|
||
* // => true
|
||
*
|
||
* _.isSafeInteger(Number.MIN_VALUE);
|
||
* // => false
|
||
*
|
||
* _.isSafeInteger(Infinity);
|
||
* // => false
|
||
*
|
||
* _.isSafeInteger('3');
|
||
* // => false
|
||
*/
|
||
function isSafeInteger(value) {
|
||
return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `Set` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.3.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a set, else `false`.
|
||
* @example
|
||
*
|
||
* _.isSet(new Set);
|
||
* // => true
|
||
*
|
||
* _.isSet(new WeakSet);
|
||
* // => false
|
||
*/
|
||
var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `String` primitive or object.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a string, else `false`.
|
||
* @example
|
||
*
|
||
* _.isString('abc');
|
||
* // => true
|
||
*
|
||
* _.isString(1);
|
||
* // => false
|
||
*/
|
||
function isString(value) {
|
||
return typeof value == 'string' ||
|
||
(!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `Symbol` primitive or object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
|
||
* @example
|
||
*
|
||
* _.isSymbol(Symbol.iterator);
|
||
* // => true
|
||
*
|
||
* _.isSymbol('abc');
|
||
* // => false
|
||
*/
|
||
function isSymbol(value) {
|
||
return typeof value == 'symbol' ||
|
||
(isObjectLike(value) && baseGetTag(value) == symbolTag);
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a typed array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
|
||
* @example
|
||
*
|
||
* _.isTypedArray(new Uint8Array);
|
||
* // => true
|
||
*
|
||
* _.isTypedArray([]);
|
||
* // => false
|
||
*/
|
||
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
|
||
|
||
/**
|
||
* Checks if `value` is `undefined`.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
|
||
* @example
|
||
*
|
||
* _.isUndefined(void 0);
|
||
* // => true
|
||
*
|
||
* _.isUndefined(null);
|
||
* // => false
|
||
*/
|
||
function isUndefined(value) {
|
||
return value === undefined;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `WeakMap` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.3.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
|
||
* @example
|
||
*
|
||
* _.isWeakMap(new WeakMap);
|
||
* // => true
|
||
*
|
||
* _.isWeakMap(new Map);
|
||
* // => false
|
||
*/
|
||
function isWeakMap(value) {
|
||
return isObjectLike(value) && getTag(value) == weakMapTag;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is classified as a `WeakSet` object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.3.0
|
||
* @category Lang
|
||
* @param {*} value The value to check.
|
||
* @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
|
||
* @example
|
||
*
|
||
* _.isWeakSet(new WeakSet);
|
||
* // => true
|
||
*
|
||
* _.isWeakSet(new Set);
|
||
* // => false
|
||
*/
|
||
function isWeakSet(value) {
|
||
return isObjectLike(value) && baseGetTag(value) == weakSetTag;
|
||
}
|
||
|
||
/**
|
||
* Checks if `value` is less than `other`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.9.0
|
||
* @category Lang
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {boolean} Returns `true` if `value` is less than `other`,
|
||
* else `false`.
|
||
* @see _.gt
|
||
* @example
|
||
*
|
||
* _.lt(1, 3);
|
||
* // => true
|
||
*
|
||
* _.lt(3, 3);
|
||
* // => false
|
||
*
|
||
* _.lt(3, 1);
|
||
* // => false
|
||
*/
|
||
var lt = createRelationalOperation(baseLt);
|
||
|
||
/**
|
||
* Checks if `value` is less than or equal to `other`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.9.0
|
||
* @category Lang
|
||
* @param {*} value The value to compare.
|
||
* @param {*} other The other value to compare.
|
||
* @returns {boolean} Returns `true` if `value` is less than or equal to
|
||
* `other`, else `false`.
|
||
* @see _.gte
|
||
* @example
|
||
*
|
||
* _.lte(1, 3);
|
||
* // => true
|
||
*
|
||
* _.lte(3, 3);
|
||
* // => true
|
||
*
|
||
* _.lte(3, 1);
|
||
* // => false
|
||
*/
|
||
var lte = createRelationalOperation(function(value, other) {
|
||
return value <= other;
|
||
});
|
||
|
||
/**
|
||
* Converts `value` to an array.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Lang
|
||
* @param {*} value The value to convert.
|
||
* @returns {Array} Returns the converted array.
|
||
* @example
|
||
*
|
||
* _.toArray({ 'a': 1, 'b': 2 });
|
||
* // => [1, 2]
|
||
*
|
||
* _.toArray('abc');
|
||
* // => ['a', 'b', 'c']
|
||
*
|
||
* _.toArray(1);
|
||
* // => []
|
||
*
|
||
* _.toArray(null);
|
||
* // => []
|
||
*/
|
||
function toArray(value) {
|
||
if (!value) {
|
||
return [];
|
||
}
|
||
if (isArrayLike(value)) {
|
||
return isString(value) ? stringToArray(value) : copyArray(value);
|
||
}
|
||
if (symIterator && value[symIterator]) {
|
||
return iteratorToArray(value[symIterator]());
|
||
}
|
||
var tag = getTag(value),
|
||
func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
|
||
|
||
return func(value);
|
||
}
|
||
|
||
/**
|
||
* Converts `value` to a finite number.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.12.0
|
||
* @category Lang
|
||
* @param {*} value The value to convert.
|
||
* @returns {number} Returns the converted number.
|
||
* @example
|
||
*
|
||
* _.toFinite(3.2);
|
||
* // => 3.2
|
||
*
|
||
* _.toFinite(Number.MIN_VALUE);
|
||
* // => 5e-324
|
||
*
|
||
* _.toFinite(Infinity);
|
||
* // => 1.7976931348623157e+308
|
||
*
|
||
* _.toFinite('3.2');
|
||
* // => 3.2
|
||
*/
|
||
function toFinite(value) {
|
||
if (!value) {
|
||
return value === 0 ? value : 0;
|
||
}
|
||
value = toNumber(value);
|
||
if (value === INFINITY || value === -INFINITY) {
|
||
var sign = (value < 0 ? -1 : 1);
|
||
return sign * MAX_INTEGER;
|
||
}
|
||
return value === value ? value : 0;
|
||
}
|
||
|
||
/**
|
||
* Converts `value` to an integer.
|
||
*
|
||
* **Note:** This method is loosely based on
|
||
* [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to convert.
|
||
* @returns {number} Returns the converted integer.
|
||
* @example
|
||
*
|
||
* _.toInteger(3.2);
|
||
* // => 3
|
||
*
|
||
* _.toInteger(Number.MIN_VALUE);
|
||
* // => 0
|
||
*
|
||
* _.toInteger(Infinity);
|
||
* // => 1.7976931348623157e+308
|
||
*
|
||
* _.toInteger('3.2');
|
||
* // => 3
|
||
*/
|
||
function toInteger(value) {
|
||
var result = toFinite(value),
|
||
remainder = result % 1;
|
||
|
||
return result === result ? (remainder ? result - remainder : result) : 0;
|
||
}
|
||
|
||
/**
|
||
* Converts `value` to an integer suitable for use as the length of an
|
||
* array-like object.
|
||
*
|
||
* **Note:** This method is based on
|
||
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to convert.
|
||
* @returns {number} Returns the converted integer.
|
||
* @example
|
||
*
|
||
* _.toLength(3.2);
|
||
* // => 3
|
||
*
|
||
* _.toLength(Number.MIN_VALUE);
|
||
* // => 0
|
||
*
|
||
* _.toLength(Infinity);
|
||
* // => 4294967295
|
||
*
|
||
* _.toLength('3.2');
|
||
* // => 3
|
||
*/
|
||
function toLength(value) {
|
||
return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
|
||
}
|
||
|
||
/**
|
||
* Converts `value` to a number.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to process.
|
||
* @returns {number} Returns the number.
|
||
* @example
|
||
*
|
||
* _.toNumber(3.2);
|
||
* // => 3.2
|
||
*
|
||
* _.toNumber(Number.MIN_VALUE);
|
||
* // => 5e-324
|
||
*
|
||
* _.toNumber(Infinity);
|
||
* // => Infinity
|
||
*
|
||
* _.toNumber('3.2');
|
||
* // => 3.2
|
||
*/
|
||
function toNumber(value) {
|
||
if (typeof value == 'number') {
|
||
return value;
|
||
}
|
||
if (isSymbol(value)) {
|
||
return NAN;
|
||
}
|
||
if (isObject(value)) {
|
||
var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
|
||
value = isObject(other) ? (other + '') : other;
|
||
}
|
||
if (typeof value != 'string') {
|
||
return value === 0 ? value : +value;
|
||
}
|
||
value = value.replace(reTrim, '');
|
||
var isBinary = reIsBinary.test(value);
|
||
return (isBinary || reIsOctal.test(value))
|
||
? freeParseInt(value.slice(2), isBinary ? 2 : 8)
|
||
: (reIsBadHex.test(value) ? NAN : +value);
|
||
}
|
||
|
||
/**
|
||
* Converts `value` to a plain object flattening inherited enumerable string
|
||
* keyed properties of `value` to own properties of the plain object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to convert.
|
||
* @returns {Object} Returns the converted plain object.
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.assign({ 'a': 1 }, new Foo);
|
||
* // => { 'a': 1, 'b': 2 }
|
||
*
|
||
* _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
|
||
* // => { 'a': 1, 'b': 2, 'c': 3 }
|
||
*/
|
||
function toPlainObject(value) {
|
||
return copyObject(value, keysIn(value));
|
||
}
|
||
|
||
/**
|
||
* Converts `value` to a safe integer. A safe integer can be compared and
|
||
* represented correctly.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to convert.
|
||
* @returns {number} Returns the converted integer.
|
||
* @example
|
||
*
|
||
* _.toSafeInteger(3.2);
|
||
* // => 3
|
||
*
|
||
* _.toSafeInteger(Number.MIN_VALUE);
|
||
* // => 0
|
||
*
|
||
* _.toSafeInteger(Infinity);
|
||
* // => 9007199254740991
|
||
*
|
||
* _.toSafeInteger('3.2');
|
||
* // => 3
|
||
*/
|
||
function toSafeInteger(value) {
|
||
return value
|
||
? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
|
||
: (value === 0 ? value : 0);
|
||
}
|
||
|
||
/**
|
||
* Converts `value` to a string. An empty string is returned for `null`
|
||
* and `undefined` values. The sign of `-0` is preserved.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Lang
|
||
* @param {*} value The value to convert.
|
||
* @returns {string} Returns the converted string.
|
||
* @example
|
||
*
|
||
* _.toString(null);
|
||
* // => ''
|
||
*
|
||
* _.toString(-0);
|
||
* // => '-0'
|
||
*
|
||
* _.toString([1, 2, 3]);
|
||
* // => '1,2,3'
|
||
*/
|
||
function toString(value) {
|
||
return value == null ? '' : baseToString(value);
|
||
}
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Assigns own enumerable string keyed properties of source objects to the
|
||
* destination object. Source objects are applied from left to right.
|
||
* Subsequent sources overwrite property assignments of previous sources.
|
||
*
|
||
* **Note:** This method mutates `object` and is loosely based on
|
||
* [`Object.assign`](https://mdn.io/Object/assign).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.10.0
|
||
* @category Object
|
||
* @param {Object} object The destination object.
|
||
* @param {...Object} [sources] The source objects.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.assignIn
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* }
|
||
*
|
||
* function Bar() {
|
||
* this.c = 3;
|
||
* }
|
||
*
|
||
* Foo.prototype.b = 2;
|
||
* Bar.prototype.d = 4;
|
||
*
|
||
* _.assign({ 'a': 0 }, new Foo, new Bar);
|
||
* // => { 'a': 1, 'c': 3 }
|
||
*/
|
||
var assign = createAssigner(function(object, source) {
|
||
if (isPrototype(source) || isArrayLike(source)) {
|
||
copyObject(source, keys(source), object);
|
||
return;
|
||
}
|
||
for (var key in source) {
|
||
if (hasOwnProperty.call(source, key)) {
|
||
assignValue(object, key, source[key]);
|
||
}
|
||
}
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.assign` except that it iterates over own and
|
||
* inherited source properties.
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @alias extend
|
||
* @category Object
|
||
* @param {Object} object The destination object.
|
||
* @param {...Object} [sources] The source objects.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.assign
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* }
|
||
*
|
||
* function Bar() {
|
||
* this.c = 3;
|
||
* }
|
||
*
|
||
* Foo.prototype.b = 2;
|
||
* Bar.prototype.d = 4;
|
||
*
|
||
* _.assignIn({ 'a': 0 }, new Foo, new Bar);
|
||
* // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
|
||
*/
|
||
var assignIn = createAssigner(function(object, source) {
|
||
copyObject(source, keysIn(source), object);
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.assignIn` except that it accepts `customizer`
|
||
* which is invoked to produce the assigned values. If `customizer` returns
|
||
* `undefined`, assignment is handled by the method instead. The `customizer`
|
||
* is invoked with five arguments: (objValue, srcValue, key, object, source).
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @alias extendWith
|
||
* @category Object
|
||
* @param {Object} object The destination object.
|
||
* @param {...Object} sources The source objects.
|
||
* @param {Function} [customizer] The function to customize assigned values.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.assignWith
|
||
* @example
|
||
*
|
||
* function customizer(objValue, srcValue) {
|
||
* return _.isUndefined(objValue) ? srcValue : objValue;
|
||
* }
|
||
*
|
||
* var defaults = _.partialRight(_.assignInWith, customizer);
|
||
*
|
||
* defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
|
||
* // => { 'a': 1, 'b': 2 }
|
||
*/
|
||
var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
|
||
copyObject(source, keysIn(source), object, customizer);
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.assign` except that it accepts `customizer`
|
||
* which is invoked to produce the assigned values. If `customizer` returns
|
||
* `undefined`, assignment is handled by the method instead. The `customizer`
|
||
* is invoked with five arguments: (objValue, srcValue, key, object, source).
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Object
|
||
* @param {Object} object The destination object.
|
||
* @param {...Object} sources The source objects.
|
||
* @param {Function} [customizer] The function to customize assigned values.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.assignInWith
|
||
* @example
|
||
*
|
||
* function customizer(objValue, srcValue) {
|
||
* return _.isUndefined(objValue) ? srcValue : objValue;
|
||
* }
|
||
*
|
||
* var defaults = _.partialRight(_.assignWith, customizer);
|
||
*
|
||
* defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
|
||
* // => { 'a': 1, 'b': 2 }
|
||
*/
|
||
var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
|
||
copyObject(source, keys(source), object, customizer);
|
||
});
|
||
|
||
/**
|
||
* Creates an array of values corresponding to `paths` of `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {...(string|string[])} [paths] The property paths to pick.
|
||
* @returns {Array} Returns the picked values.
|
||
* @example
|
||
*
|
||
* var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
|
||
*
|
||
* _.at(object, ['a[0].b.c', 'a[1]']);
|
||
* // => [3, 4]
|
||
*/
|
||
var at = flatRest(baseAt);
|
||
|
||
/**
|
||
* Creates an object that inherits from the `prototype` object. If a
|
||
* `properties` object is given, its own enumerable string keyed properties
|
||
* are assigned to the created object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.3.0
|
||
* @category Object
|
||
* @param {Object} prototype The object to inherit from.
|
||
* @param {Object} [properties] The properties to assign to the object.
|
||
* @returns {Object} Returns the new object.
|
||
* @example
|
||
*
|
||
* function Shape() {
|
||
* this.x = 0;
|
||
* this.y = 0;
|
||
* }
|
||
*
|
||
* function Circle() {
|
||
* Shape.call(this);
|
||
* }
|
||
*
|
||
* Circle.prototype = _.create(Shape.prototype, {
|
||
* 'constructor': Circle
|
||
* });
|
||
*
|
||
* var circle = new Circle;
|
||
* circle instanceof Circle;
|
||
* // => true
|
||
*
|
||
* circle instanceof Shape;
|
||
* // => true
|
||
*/
|
||
function create(prototype, properties) {
|
||
var result = baseCreate(prototype);
|
||
return properties == null ? result : baseAssign(result, properties);
|
||
}
|
||
|
||
/**
|
||
* Assigns own and inherited enumerable string keyed properties of source
|
||
* objects to the destination object for all destination properties that
|
||
* resolve to `undefined`. Source objects are applied from left to right.
|
||
* Once a property is set, additional values of the same property are ignored.
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Object
|
||
* @param {Object} object The destination object.
|
||
* @param {...Object} [sources] The source objects.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.defaultsDeep
|
||
* @example
|
||
*
|
||
* _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
|
||
* // => { 'a': 1, 'b': 2 }
|
||
*/
|
||
var defaults = baseRest(function(object, sources) {
|
||
object = Object(object);
|
||
|
||
var index = -1;
|
||
var length = sources.length;
|
||
var guard = length > 2 ? sources[2] : undefined;
|
||
|
||
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
|
||
length = 1;
|
||
}
|
||
|
||
while (++index < length) {
|
||
var source = sources[index];
|
||
var props = keysIn(source);
|
||
var propsIndex = -1;
|
||
var propsLength = props.length;
|
||
|
||
while (++propsIndex < propsLength) {
|
||
var key = props[propsIndex];
|
||
var value = object[key];
|
||
|
||
if (value === undefined ||
|
||
(eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
|
||
object[key] = source[key];
|
||
}
|
||
}
|
||
}
|
||
|
||
return object;
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.defaults` except that it recursively assigns
|
||
* default properties.
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.10.0
|
||
* @category Object
|
||
* @param {Object} object The destination object.
|
||
* @param {...Object} [sources] The source objects.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.defaults
|
||
* @example
|
||
*
|
||
* _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
|
||
* // => { 'a': { 'b': 2, 'c': 3 } }
|
||
*/
|
||
var defaultsDeep = baseRest(function(args) {
|
||
args.push(undefined, customDefaultsMerge);
|
||
return apply(mergeWith, undefined, args);
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.find` except that it returns the key of the first
|
||
* element `predicate` returns truthy for instead of the element itself.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.1.0
|
||
* @category Object
|
||
* @param {Object} object The object to inspect.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {string|undefined} Returns the key of the matched element,
|
||
* else `undefined`.
|
||
* @example
|
||
*
|
||
* var users = {
|
||
* 'barney': { 'age': 36, 'active': true },
|
||
* 'fred': { 'age': 40, 'active': false },
|
||
* 'pebbles': { 'age': 1, 'active': true }
|
||
* };
|
||
*
|
||
* _.findKey(users, function(o) { return o.age < 40; });
|
||
* // => 'barney' (iteration order is not guaranteed)
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.findKey(users, { 'age': 1, 'active': true });
|
||
* // => 'pebbles'
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.findKey(users, ['active', false]);
|
||
* // => 'fred'
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.findKey(users, 'active');
|
||
* // => 'barney'
|
||
*/
|
||
function findKey(object, predicate) {
|
||
return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.findKey` except that it iterates over elements of
|
||
* a collection in the opposite order.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to inspect.
|
||
* @param {Function} [predicate=_.identity] The function invoked per iteration.
|
||
* @returns {string|undefined} Returns the key of the matched element,
|
||
* else `undefined`.
|
||
* @example
|
||
*
|
||
* var users = {
|
||
* 'barney': { 'age': 36, 'active': true },
|
||
* 'fred': { 'age': 40, 'active': false },
|
||
* 'pebbles': { 'age': 1, 'active': true }
|
||
* };
|
||
*
|
||
* _.findLastKey(users, function(o) { return o.age < 40; });
|
||
* // => returns 'pebbles' assuming `_.findKey` returns 'barney'
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.findLastKey(users, { 'age': 36, 'active': true });
|
||
* // => 'barney'
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.findLastKey(users, ['active', false]);
|
||
* // => 'fred'
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.findLastKey(users, 'active');
|
||
* // => 'pebbles'
|
||
*/
|
||
function findLastKey(object, predicate) {
|
||
return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
|
||
}
|
||
|
||
/**
|
||
* Iterates over own and inherited enumerable string keyed properties of an
|
||
* object and invokes `iteratee` for each property. The iteratee is invoked
|
||
* with three arguments: (value, key, object). Iteratee functions may exit
|
||
* iteration early by explicitly returning `false`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.3.0
|
||
* @category Object
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.forInRight
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.forIn(new Foo, function(value, key) {
|
||
* console.log(key);
|
||
* });
|
||
* // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
|
||
*/
|
||
function forIn(object, iteratee) {
|
||
return object == null
|
||
? object
|
||
: baseFor(object, getIteratee(iteratee, 3), keysIn);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.forIn` except that it iterates over properties of
|
||
* `object` in the opposite order.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.forIn
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.forInRight(new Foo, function(value, key) {
|
||
* console.log(key);
|
||
* });
|
||
* // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
|
||
*/
|
||
function forInRight(object, iteratee) {
|
||
return object == null
|
||
? object
|
||
: baseForRight(object, getIteratee(iteratee, 3), keysIn);
|
||
}
|
||
|
||
/**
|
||
* Iterates over own enumerable string keyed properties of an object and
|
||
* invokes `iteratee` for each property. The iteratee is invoked with three
|
||
* arguments: (value, key, object). Iteratee functions may exit iteration
|
||
* early by explicitly returning `false`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.3.0
|
||
* @category Object
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.forOwnRight
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.forOwn(new Foo, function(value, key) {
|
||
* console.log(key);
|
||
* });
|
||
* // => Logs 'a' then 'b' (iteration order is not guaranteed).
|
||
*/
|
||
function forOwn(object, iteratee) {
|
||
return object && baseForOwn(object, getIteratee(iteratee, 3));
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.forOwn` except that it iterates over properties of
|
||
* `object` in the opposite order.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Object} Returns `object`.
|
||
* @see _.forOwn
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.forOwnRight(new Foo, function(value, key) {
|
||
* console.log(key);
|
||
* });
|
||
* // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
|
||
*/
|
||
function forOwnRight(object, iteratee) {
|
||
return object && baseForOwnRight(object, getIteratee(iteratee, 3));
|
||
}
|
||
|
||
/**
|
||
* Creates an array of function property names from own enumerable properties
|
||
* of `object`.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Object
|
||
* @param {Object} object The object to inspect.
|
||
* @returns {Array} Returns the function names.
|
||
* @see _.functionsIn
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = _.constant('a');
|
||
* this.b = _.constant('b');
|
||
* }
|
||
*
|
||
* Foo.prototype.c = _.constant('c');
|
||
*
|
||
* _.functions(new Foo);
|
||
* // => ['a', 'b']
|
||
*/
|
||
function functions(object) {
|
||
return object == null ? [] : baseFunctions(object, keys(object));
|
||
}
|
||
|
||
/**
|
||
* Creates an array of function property names from own and inherited
|
||
* enumerable properties of `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to inspect.
|
||
* @returns {Array} Returns the function names.
|
||
* @see _.functions
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = _.constant('a');
|
||
* this.b = _.constant('b');
|
||
* }
|
||
*
|
||
* Foo.prototype.c = _.constant('c');
|
||
*
|
||
* _.functionsIn(new Foo);
|
||
* // => ['a', 'b', 'c']
|
||
*/
|
||
function functionsIn(object) {
|
||
return object == null ? [] : baseFunctions(object, keysIn(object));
|
||
}
|
||
|
||
/**
|
||
* Gets the value at `path` of `object`. If the resolved value is
|
||
* `undefined`, the `defaultValue` is returned in its place.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.7.0
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @param {Array|string} path The path of the property to get.
|
||
* @param {*} [defaultValue] The value returned for `undefined` resolved values.
|
||
* @returns {*} Returns the resolved value.
|
||
* @example
|
||
*
|
||
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
|
||
*
|
||
* _.get(object, 'a[0].b.c');
|
||
* // => 3
|
||
*
|
||
* _.get(object, ['a', '0', 'b', 'c']);
|
||
* // => 3
|
||
*
|
||
* _.get(object, 'a.b.c', 'default');
|
||
* // => 'default'
|
||
*/
|
||
function get(object, path, defaultValue) {
|
||
var result = object == null ? undefined : baseGet(object, path);
|
||
return result === undefined ? defaultValue : result;
|
||
}
|
||
|
||
/**
|
||
* Checks if `path` is a direct property of `object`.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @param {Array|string} path The path to check.
|
||
* @returns {boolean} Returns `true` if `path` exists, else `false`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': { 'b': 2 } };
|
||
* var other = _.create({ 'a': _.create({ 'b': 2 }) });
|
||
*
|
||
* _.has(object, 'a');
|
||
* // => true
|
||
*
|
||
* _.has(object, 'a.b');
|
||
* // => true
|
||
*
|
||
* _.has(object, ['a', 'b']);
|
||
* // => true
|
||
*
|
||
* _.has(other, 'a');
|
||
* // => false
|
||
*/
|
||
function has(object, path) {
|
||
return object != null && hasPath(object, path, baseHas);
|
||
}
|
||
|
||
/**
|
||
* Checks if `path` is a direct or inherited property of `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @param {Array|string} path The path to check.
|
||
* @returns {boolean} Returns `true` if `path` exists, else `false`.
|
||
* @example
|
||
*
|
||
* var object = _.create({ 'a': _.create({ 'b': 2 }) });
|
||
*
|
||
* _.hasIn(object, 'a');
|
||
* // => true
|
||
*
|
||
* _.hasIn(object, 'a.b');
|
||
* // => true
|
||
*
|
||
* _.hasIn(object, ['a', 'b']);
|
||
* // => true
|
||
*
|
||
* _.hasIn(object, 'b');
|
||
* // => false
|
||
*/
|
||
function hasIn(object, path) {
|
||
return object != null && hasPath(object, path, baseHasIn);
|
||
}
|
||
|
||
/**
|
||
* Creates an object composed of the inverted keys and values of `object`.
|
||
* If `object` contains duplicate values, subsequent values overwrite
|
||
* property assignments of previous values.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.7.0
|
||
* @category Object
|
||
* @param {Object} object The object to invert.
|
||
* @returns {Object} Returns the new inverted object.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1, 'b': 2, 'c': 1 };
|
||
*
|
||
* _.invert(object);
|
||
* // => { '1': 'c', '2': 'b' }
|
||
*/
|
||
var invert = createInverter(function(result, value, key) {
|
||
if (value != null &&
|
||
typeof value.toString != 'function') {
|
||
value = nativeObjectToString.call(value);
|
||
}
|
||
|
||
result[value] = key;
|
||
}, constant(identity));
|
||
|
||
/**
|
||
* This method is like `_.invert` except that the inverted object is generated
|
||
* from the results of running each element of `object` thru `iteratee`. The
|
||
* corresponding inverted value of each inverted key is an array of keys
|
||
* responsible for generating the inverted value. The iteratee is invoked
|
||
* with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.1.0
|
||
* @category Object
|
||
* @param {Object} object The object to invert.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {Object} Returns the new inverted object.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1, 'b': 2, 'c': 1 };
|
||
*
|
||
* _.invertBy(object);
|
||
* // => { '1': ['a', 'c'], '2': ['b'] }
|
||
*
|
||
* _.invertBy(object, function(value) {
|
||
* return 'group' + value;
|
||
* });
|
||
* // => { 'group1': ['a', 'c'], 'group2': ['b'] }
|
||
*/
|
||
var invertBy = createInverter(function(result, value, key) {
|
||
if (value != null &&
|
||
typeof value.toString != 'function') {
|
||
value = nativeObjectToString.call(value);
|
||
}
|
||
|
||
if (hasOwnProperty.call(result, value)) {
|
||
result[value].push(key);
|
||
} else {
|
||
result[value] = [key];
|
||
}
|
||
}, getIteratee);
|
||
|
||
/**
|
||
* Invokes the method at `path` of `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @param {Array|string} path The path of the method to invoke.
|
||
* @param {...*} [args] The arguments to invoke the method with.
|
||
* @returns {*} Returns the result of the invoked method.
|
||
* @example
|
||
*
|
||
* var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
|
||
*
|
||
* _.invoke(object, 'a[0].b.c.slice', 1, 3);
|
||
* // => [2, 3]
|
||
*/
|
||
var invoke = baseRest(baseInvoke);
|
||
|
||
/**
|
||
* Creates an array of the own enumerable property names of `object`.
|
||
*
|
||
* **Note:** Non-object values are coerced to objects. See the
|
||
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
|
||
* for more details.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names.
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.keys(new Foo);
|
||
* // => ['a', 'b'] (iteration order is not guaranteed)
|
||
*
|
||
* _.keys('hi');
|
||
* // => ['0', '1']
|
||
*/
|
||
function keys(object) {
|
||
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
|
||
}
|
||
|
||
/**
|
||
* Creates an array of the own and inherited enumerable property names of `object`.
|
||
*
|
||
* **Note:** Non-object values are coerced to objects.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property names.
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.keysIn(new Foo);
|
||
* // => ['a', 'b', 'c'] (iteration order is not guaranteed)
|
||
*/
|
||
function keysIn(object) {
|
||
return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
|
||
}
|
||
|
||
/**
|
||
* The opposite of `_.mapValues`; this method creates an object with the
|
||
* same values as `object` and keys generated by running each own enumerable
|
||
* string keyed property of `object` thru `iteratee`. The iteratee is invoked
|
||
* with three arguments: (value, key, object).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.8.0
|
||
* @category Object
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Object} Returns the new mapped object.
|
||
* @see _.mapValues
|
||
* @example
|
||
*
|
||
* _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
|
||
* return key + value;
|
||
* });
|
||
* // => { 'a1': 1, 'b2': 2 }
|
||
*/
|
||
function mapKeys(object, iteratee) {
|
||
var result = {};
|
||
iteratee = getIteratee(iteratee, 3);
|
||
|
||
baseForOwn(object, function(value, key, object) {
|
||
baseAssignValue(result, iteratee(value, key, object), value);
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates an object with the same keys as `object` and values generated
|
||
* by running each own enumerable string keyed property of `object` thru
|
||
* `iteratee`. The iteratee is invoked with three arguments:
|
||
* (value, key, object).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.4.0
|
||
* @category Object
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Object} Returns the new mapped object.
|
||
* @see _.mapKeys
|
||
* @example
|
||
*
|
||
* var users = {
|
||
* 'fred': { 'user': 'fred', 'age': 40 },
|
||
* 'pebbles': { 'user': 'pebbles', 'age': 1 }
|
||
* };
|
||
*
|
||
* _.mapValues(users, function(o) { return o.age; });
|
||
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.mapValues(users, 'age');
|
||
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
|
||
*/
|
||
function mapValues(object, iteratee) {
|
||
var result = {};
|
||
iteratee = getIteratee(iteratee, 3);
|
||
|
||
baseForOwn(object, function(value, key, object) {
|
||
baseAssignValue(result, key, iteratee(value, key, object));
|
||
});
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.assign` except that it recursively merges own and
|
||
* inherited enumerable string keyed properties of source objects into the
|
||
* destination object. Source properties that resolve to `undefined` are
|
||
* skipped if a destination value exists. Array and plain object properties
|
||
* are merged recursively. Other objects and value types are overridden by
|
||
* assignment. Source objects are applied from left to right. Subsequent
|
||
* sources overwrite property assignments of previous sources.
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.5.0
|
||
* @category Object
|
||
* @param {Object} object The destination object.
|
||
* @param {...Object} [sources] The source objects.
|
||
* @returns {Object} Returns `object`.
|
||
* @example
|
||
*
|
||
* var object = {
|
||
* 'a': [{ 'b': 2 }, { 'd': 4 }]
|
||
* };
|
||
*
|
||
* var other = {
|
||
* 'a': [{ 'c': 3 }, { 'e': 5 }]
|
||
* };
|
||
*
|
||
* _.merge(object, other);
|
||
* // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
|
||
*/
|
||
var merge = createAssigner(function(object, source, srcIndex) {
|
||
baseMerge(object, source, srcIndex);
|
||
});
|
||
|
||
/**
|
||
* This method is like `_.merge` except that it accepts `customizer` which
|
||
* is invoked to produce the merged values of the destination and source
|
||
* properties. If `customizer` returns `undefined`, merging is handled by the
|
||
* method instead. The `customizer` is invoked with six arguments:
|
||
* (objValue, srcValue, key, object, source, stack).
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Object
|
||
* @param {Object} object The destination object.
|
||
* @param {...Object} sources The source objects.
|
||
* @param {Function} customizer The function to customize assigned values.
|
||
* @returns {Object} Returns `object`.
|
||
* @example
|
||
*
|
||
* function customizer(objValue, srcValue) {
|
||
* if (_.isArray(objValue)) {
|
||
* return objValue.concat(srcValue);
|
||
* }
|
||
* }
|
||
*
|
||
* var object = { 'a': [1], 'b': [2] };
|
||
* var other = { 'a': [3], 'b': [4] };
|
||
*
|
||
* _.mergeWith(object, other, customizer);
|
||
* // => { 'a': [1, 3], 'b': [2, 4] }
|
||
*/
|
||
var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
|
||
baseMerge(object, source, srcIndex, customizer);
|
||
});
|
||
|
||
/**
|
||
* The opposite of `_.pick`; this method creates an object composed of the
|
||
* own and inherited enumerable property paths of `object` that are not omitted.
|
||
*
|
||
* **Note:** This method is considerably slower than `_.pick`.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Object
|
||
* @param {Object} object The source object.
|
||
* @param {...(string|string[])} [paths] The property paths to omit.
|
||
* @returns {Object} Returns the new object.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1, 'b': '2', 'c': 3 };
|
||
*
|
||
* _.omit(object, ['a', 'c']);
|
||
* // => { 'b': '2' }
|
||
*/
|
||
var omit = flatRest(function(object, paths) {
|
||
var result = {};
|
||
if (object == null) {
|
||
return result;
|
||
}
|
||
var isDeep = false;
|
||
paths = arrayMap(paths, function(path) {
|
||
path = castPath(path, object);
|
||
isDeep || (isDeep = path.length > 1);
|
||
return path;
|
||
});
|
||
copyObject(object, getAllKeysIn(object), result);
|
||
if (isDeep) {
|
||
result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
|
||
}
|
||
var length = paths.length;
|
||
while (length--) {
|
||
baseUnset(result, paths[length]);
|
||
}
|
||
return result;
|
||
});
|
||
|
||
/**
|
||
* The opposite of `_.pickBy`; this method creates an object composed of
|
||
* the own and inherited enumerable string keyed properties of `object` that
|
||
* `predicate` doesn't return truthy for. The predicate is invoked with two
|
||
* arguments: (value, key).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Object
|
||
* @param {Object} object The source object.
|
||
* @param {Function} [predicate=_.identity] The function invoked per property.
|
||
* @returns {Object} Returns the new object.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1, 'b': '2', 'c': 3 };
|
||
*
|
||
* _.omitBy(object, _.isNumber);
|
||
* // => { 'b': '2' }
|
||
*/
|
||
function omitBy(object, predicate) {
|
||
return pickBy(object, negate(getIteratee(predicate)));
|
||
}
|
||
|
||
/**
|
||
* Creates an object composed of the picked `object` properties.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Object
|
||
* @param {Object} object The source object.
|
||
* @param {...(string|string[])} [paths] The property paths to pick.
|
||
* @returns {Object} Returns the new object.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1, 'b': '2', 'c': 3 };
|
||
*
|
||
* _.pick(object, ['a', 'c']);
|
||
* // => { 'a': 1, 'c': 3 }
|
||
*/
|
||
var pick = flatRest(function(object, paths) {
|
||
return object == null ? {} : basePick(object, paths);
|
||
});
|
||
|
||
/**
|
||
* Creates an object composed of the `object` properties `predicate` returns
|
||
* truthy for. The predicate is invoked with two arguments: (value, key).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Object
|
||
* @param {Object} object The source object.
|
||
* @param {Function} [predicate=_.identity] The function invoked per property.
|
||
* @returns {Object} Returns the new object.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1, 'b': '2', 'c': 3 };
|
||
*
|
||
* _.pickBy(object, _.isNumber);
|
||
* // => { 'a': 1, 'c': 3 }
|
||
*/
|
||
function pickBy(object, predicate) {
|
||
if (object == null) {
|
||
return {};
|
||
}
|
||
var props = arrayMap(getAllKeysIn(object), function(prop) {
|
||
return [prop];
|
||
});
|
||
predicate = getIteratee(predicate);
|
||
return basePickBy(object, props, function(value, path) {
|
||
return predicate(value, path[0]);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.get` except that if the resolved value is a
|
||
* function it's invoked with the `this` binding of its parent object and
|
||
* its result is returned.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @param {Array|string} path The path of the property to resolve.
|
||
* @param {*} [defaultValue] The value returned for `undefined` resolved values.
|
||
* @returns {*} Returns the resolved value.
|
||
* @example
|
||
*
|
||
* var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
|
||
*
|
||
* _.result(object, 'a[0].b.c1');
|
||
* // => 3
|
||
*
|
||
* _.result(object, 'a[0].b.c2');
|
||
* // => 4
|
||
*
|
||
* _.result(object, 'a[0].b.c3', 'default');
|
||
* // => 'default'
|
||
*
|
||
* _.result(object, 'a[0].b.c3', _.constant('default'));
|
||
* // => 'default'
|
||
*/
|
||
function result(object, path, defaultValue) {
|
||
path = castPath(path, object);
|
||
|
||
var index = -1,
|
||
length = path.length;
|
||
|
||
// Ensure the loop is entered when path is empty.
|
||
if (!length) {
|
||
length = 1;
|
||
object = undefined;
|
||
}
|
||
while (++index < length) {
|
||
var value = object == null ? undefined : object[toKey(path[index])];
|
||
if (value === undefined) {
|
||
index = length;
|
||
value = defaultValue;
|
||
}
|
||
object = isFunction(value) ? value.call(object) : value;
|
||
}
|
||
return object;
|
||
}
|
||
|
||
/**
|
||
* Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
|
||
* it's created. Arrays are created for missing index properties while objects
|
||
* are created for all other missing properties. Use `_.setWith` to customize
|
||
* `path` creation.
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.7.0
|
||
* @category Object
|
||
* @param {Object} object The object to modify.
|
||
* @param {Array|string} path The path of the property to set.
|
||
* @param {*} value The value to set.
|
||
* @returns {Object} Returns `object`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
|
||
*
|
||
* _.set(object, 'a[0].b.c', 4);
|
||
* console.log(object.a[0].b.c);
|
||
* // => 4
|
||
*
|
||
* _.set(object, ['x', '0', 'y', 'z'], 5);
|
||
* console.log(object.x[0].y.z);
|
||
* // => 5
|
||
*/
|
||
function set(object, path, value) {
|
||
return object == null ? object : baseSet(object, path, value);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.set` except that it accepts `customizer` which is
|
||
* invoked to produce the objects of `path`. If `customizer` returns `undefined`
|
||
* path creation is handled by the method instead. The `customizer` is invoked
|
||
* with three arguments: (nsValue, key, nsObject).
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to modify.
|
||
* @param {Array|string} path The path of the property to set.
|
||
* @param {*} value The value to set.
|
||
* @param {Function} [customizer] The function to customize assigned values.
|
||
* @returns {Object} Returns `object`.
|
||
* @example
|
||
*
|
||
* var object = {};
|
||
*
|
||
* _.setWith(object, '[0][1]', 'a', Object);
|
||
* // => { '0': { '1': 'a' } }
|
||
*/
|
||
function setWith(object, path, value, customizer) {
|
||
customizer = typeof customizer == 'function' ? customizer : undefined;
|
||
return object == null ? object : baseSet(object, path, value, customizer);
|
||
}
|
||
|
||
/**
|
||
* Creates an array of own enumerable string keyed-value pairs for `object`
|
||
* which can be consumed by `_.fromPairs`. If `object` is a map or set, its
|
||
* entries are returned.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @alias entries
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the key-value pairs.
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.toPairs(new Foo);
|
||
* // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
|
||
*/
|
||
var toPairs = createToPairs(keys);
|
||
|
||
/**
|
||
* Creates an array of own and inherited enumerable string keyed-value pairs
|
||
* for `object` which can be consumed by `_.fromPairs`. If `object` is a map
|
||
* or set, its entries are returned.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @alias entriesIn
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the key-value pairs.
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.toPairsIn(new Foo);
|
||
* // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
|
||
*/
|
||
var toPairsIn = createToPairs(keysIn);
|
||
|
||
/**
|
||
* An alternative to `_.reduce`; this method transforms `object` to a new
|
||
* `accumulator` object which is the result of running each of its own
|
||
* enumerable string keyed properties thru `iteratee`, with each invocation
|
||
* potentially mutating the `accumulator` object. If `accumulator` is not
|
||
* provided, a new object with the same `[[Prototype]]` will be used. The
|
||
* iteratee is invoked with four arguments: (accumulator, value, key, object).
|
||
* Iteratee functions may exit iteration early by explicitly returning `false`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.3.0
|
||
* @category Object
|
||
* @param {Object} object The object to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @param {*} [accumulator] The custom accumulator value.
|
||
* @returns {*} Returns the accumulated value.
|
||
* @example
|
||
*
|
||
* _.transform([2, 3, 4], function(result, n) {
|
||
* result.push(n *= n);
|
||
* return n % 2 == 0;
|
||
* }, []);
|
||
* // => [4, 9]
|
||
*
|
||
* _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
|
||
* (result[value] || (result[value] = [])).push(key);
|
||
* }, {});
|
||
* // => { '1': ['a', 'c'], '2': ['b'] }
|
||
*/
|
||
function transform(object, iteratee, accumulator) {
|
||
var isArr = isArray(object),
|
||
isArrLike = isArr || isBuffer(object) || isTypedArray(object);
|
||
|
||
iteratee = getIteratee(iteratee, 4);
|
||
if (accumulator == null) {
|
||
var Ctor = object && object.constructor;
|
||
if (isArrLike) {
|
||
accumulator = isArr ? new Ctor : [];
|
||
}
|
||
else if (isObject(object)) {
|
||
accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
|
||
}
|
||
else {
|
||
accumulator = {};
|
||
}
|
||
}
|
||
(isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
|
||
return iteratee(accumulator, value, index, object);
|
||
});
|
||
return accumulator;
|
||
}
|
||
|
||
/**
|
||
* Removes the property at `path` of `object`.
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to modify.
|
||
* @param {Array|string} path The path of the property to unset.
|
||
* @returns {boolean} Returns `true` if the property is deleted, else `false`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': [{ 'b': { 'c': 7 } }] };
|
||
* _.unset(object, 'a[0].b.c');
|
||
* // => true
|
||
*
|
||
* console.log(object);
|
||
* // => { 'a': [{ 'b': {} }] };
|
||
*
|
||
* _.unset(object, ['a', '0', 'b', 'c']);
|
||
* // => true
|
||
*
|
||
* console.log(object);
|
||
* // => { 'a': [{ 'b': {} }] };
|
||
*/
|
||
function unset(object, path) {
|
||
return object == null ? true : baseUnset(object, path);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.set` except that accepts `updater` to produce the
|
||
* value to set. Use `_.updateWith` to customize `path` creation. The `updater`
|
||
* is invoked with one argument: (value).
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.6.0
|
||
* @category Object
|
||
* @param {Object} object The object to modify.
|
||
* @param {Array|string} path The path of the property to set.
|
||
* @param {Function} updater The function to produce the updated value.
|
||
* @returns {Object} Returns `object`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
|
||
*
|
||
* _.update(object, 'a[0].b.c', function(n) { return n * n; });
|
||
* console.log(object.a[0].b.c);
|
||
* // => 9
|
||
*
|
||
* _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
|
||
* console.log(object.x[0].y.z);
|
||
* // => 0
|
||
*/
|
||
function update(object, path, updater) {
|
||
return object == null ? object : baseUpdate(object, path, castFunction(updater));
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.update` except that it accepts `customizer` which is
|
||
* invoked to produce the objects of `path`. If `customizer` returns `undefined`
|
||
* path creation is handled by the method instead. The `customizer` is invoked
|
||
* with three arguments: (nsValue, key, nsObject).
|
||
*
|
||
* **Note:** This method mutates `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.6.0
|
||
* @category Object
|
||
* @param {Object} object The object to modify.
|
||
* @param {Array|string} path The path of the property to set.
|
||
* @param {Function} updater The function to produce the updated value.
|
||
* @param {Function} [customizer] The function to customize assigned values.
|
||
* @returns {Object} Returns `object`.
|
||
* @example
|
||
*
|
||
* var object = {};
|
||
*
|
||
* _.updateWith(object, '[0][1]', _.constant('a'), Object);
|
||
* // => { '0': { '1': 'a' } }
|
||
*/
|
||
function updateWith(object, path, updater, customizer) {
|
||
customizer = typeof customizer == 'function' ? customizer : undefined;
|
||
return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
|
||
}
|
||
|
||
/**
|
||
* Creates an array of the own enumerable string keyed property values of `object`.
|
||
*
|
||
* **Note:** Non-object values are coerced to objects.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property values.
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.values(new Foo);
|
||
* // => [1, 2] (iteration order is not guaranteed)
|
||
*
|
||
* _.values('hi');
|
||
* // => ['h', 'i']
|
||
*/
|
||
function values(object) {
|
||
return object == null ? [] : baseValues(object, keys(object));
|
||
}
|
||
|
||
/**
|
||
* Creates an array of the own and inherited enumerable string keyed property
|
||
* values of `object`.
|
||
*
|
||
* **Note:** Non-object values are coerced to objects.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Object
|
||
* @param {Object} object The object to query.
|
||
* @returns {Array} Returns the array of property values.
|
||
* @example
|
||
*
|
||
* function Foo() {
|
||
* this.a = 1;
|
||
* this.b = 2;
|
||
* }
|
||
*
|
||
* Foo.prototype.c = 3;
|
||
*
|
||
* _.valuesIn(new Foo);
|
||
* // => [1, 2, 3] (iteration order is not guaranteed)
|
||
*/
|
||
function valuesIn(object) {
|
||
return object == null ? [] : baseValues(object, keysIn(object));
|
||
}
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Clamps `number` within the inclusive `lower` and `upper` bounds.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Number
|
||
* @param {number} number The number to clamp.
|
||
* @param {number} [lower] The lower bound.
|
||
* @param {number} upper The upper bound.
|
||
* @returns {number} Returns the clamped number.
|
||
* @example
|
||
*
|
||
* _.clamp(-10, -5, 5);
|
||
* // => -5
|
||
*
|
||
* _.clamp(10, -5, 5);
|
||
* // => 5
|
||
*/
|
||
function clamp(number, lower, upper) {
|
||
if (upper === undefined) {
|
||
upper = lower;
|
||
lower = undefined;
|
||
}
|
||
if (upper !== undefined) {
|
||
upper = toNumber(upper);
|
||
upper = upper === upper ? upper : 0;
|
||
}
|
||
if (lower !== undefined) {
|
||
lower = toNumber(lower);
|
||
lower = lower === lower ? lower : 0;
|
||
}
|
||
return baseClamp(toNumber(number), lower, upper);
|
||
}
|
||
|
||
/**
|
||
* Checks if `n` is between `start` and up to, but not including, `end`. If
|
||
* `end` is not specified, it's set to `start` with `start` then set to `0`.
|
||
* If `start` is greater than `end` the params are swapped to support
|
||
* negative ranges.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.3.0
|
||
* @category Number
|
||
* @param {number} number The number to check.
|
||
* @param {number} [start=0] The start of the range.
|
||
* @param {number} end The end of the range.
|
||
* @returns {boolean} Returns `true` if `number` is in the range, else `false`.
|
||
* @see _.range, _.rangeRight
|
||
* @example
|
||
*
|
||
* _.inRange(3, 2, 4);
|
||
* // => true
|
||
*
|
||
* _.inRange(4, 8);
|
||
* // => true
|
||
*
|
||
* _.inRange(4, 2);
|
||
* // => false
|
||
*
|
||
* _.inRange(2, 2);
|
||
* // => false
|
||
*
|
||
* _.inRange(1.2, 2);
|
||
* // => true
|
||
*
|
||
* _.inRange(5.2, 4);
|
||
* // => false
|
||
*
|
||
* _.inRange(-3, -2, -6);
|
||
* // => true
|
||
*/
|
||
function inRange(number, start, end) {
|
||
start = toFinite(start);
|
||
if (end === undefined) {
|
||
end = start;
|
||
start = 0;
|
||
} else {
|
||
end = toFinite(end);
|
||
}
|
||
number = toNumber(number);
|
||
return baseInRange(number, start, end);
|
||
}
|
||
|
||
/**
|
||
* Produces a random number between the inclusive `lower` and `upper` bounds.
|
||
* If only one argument is provided a number between `0` and the given number
|
||
* is returned. If `floating` is `true`, or either `lower` or `upper` are
|
||
* floats, a floating-point number is returned instead of an integer.
|
||
*
|
||
* **Note:** JavaScript follows the IEEE-754 standard for resolving
|
||
* floating-point values which can produce unexpected results.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.7.0
|
||
* @category Number
|
||
* @param {number} [lower=0] The lower bound.
|
||
* @param {number} [upper=1] The upper bound.
|
||
* @param {boolean} [floating] Specify returning a floating-point number.
|
||
* @returns {number} Returns the random number.
|
||
* @example
|
||
*
|
||
* _.random(0, 5);
|
||
* // => an integer between 0 and 5
|
||
*
|
||
* _.random(5);
|
||
* // => also an integer between 0 and 5
|
||
*
|
||
* _.random(5, true);
|
||
* // => a floating-point number between 0 and 5
|
||
*
|
||
* _.random(1.2, 5.2);
|
||
* // => a floating-point number between 1.2 and 5.2
|
||
*/
|
||
function random(lower, upper, floating) {
|
||
if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
|
||
upper = floating = undefined;
|
||
}
|
||
if (floating === undefined) {
|
||
if (typeof upper == 'boolean') {
|
||
floating = upper;
|
||
upper = undefined;
|
||
}
|
||
else if (typeof lower == 'boolean') {
|
||
floating = lower;
|
||
lower = undefined;
|
||
}
|
||
}
|
||
if (lower === undefined && upper === undefined) {
|
||
lower = 0;
|
||
upper = 1;
|
||
}
|
||
else {
|
||
lower = toFinite(lower);
|
||
if (upper === undefined) {
|
||
upper = lower;
|
||
lower = 0;
|
||
} else {
|
||
upper = toFinite(upper);
|
||
}
|
||
}
|
||
if (lower > upper) {
|
||
var temp = lower;
|
||
lower = upper;
|
||
upper = temp;
|
||
}
|
||
if (floating || lower % 1 || upper % 1) {
|
||
var rand = nativeRandom();
|
||
return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
|
||
}
|
||
return baseRandom(lower, upper);
|
||
}
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the camel cased string.
|
||
* @example
|
||
*
|
||
* _.camelCase('Foo Bar');
|
||
* // => 'fooBar'
|
||
*
|
||
* _.camelCase('--foo-bar--');
|
||
* // => 'fooBar'
|
||
*
|
||
* _.camelCase('__FOO_BAR__');
|
||
* // => 'fooBar'
|
||
*/
|
||
var camelCase = createCompounder(function(result, word, index) {
|
||
word = word.toLowerCase();
|
||
return result + (index ? capitalize(word) : word);
|
||
});
|
||
|
||
/**
|
||
* Converts the first character of `string` to upper case and the remaining
|
||
* to lower case.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to capitalize.
|
||
* @returns {string} Returns the capitalized string.
|
||
* @example
|
||
*
|
||
* _.capitalize('FRED');
|
||
* // => 'Fred'
|
||
*/
|
||
function capitalize(string) {
|
||
return upperFirst(toString(string).toLowerCase());
|
||
}
|
||
|
||
/**
|
||
* Deburrs `string` by converting
|
||
* [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
|
||
* and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
|
||
* letters to basic Latin letters and removing
|
||
* [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to deburr.
|
||
* @returns {string} Returns the deburred string.
|
||
* @example
|
||
*
|
||
* _.deburr('déjà vu');
|
||
* // => 'deja vu'
|
||
*/
|
||
function deburr(string) {
|
||
string = toString(string);
|
||
return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
|
||
}
|
||
|
||
/**
|
||
* Checks if `string` ends with the given target string.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to inspect.
|
||
* @param {string} [target] The string to search for.
|
||
* @param {number} [position=string.length] The position to search up to.
|
||
* @returns {boolean} Returns `true` if `string` ends with `target`,
|
||
* else `false`.
|
||
* @example
|
||
*
|
||
* _.endsWith('abc', 'c');
|
||
* // => true
|
||
*
|
||
* _.endsWith('abc', 'b');
|
||
* // => false
|
||
*
|
||
* _.endsWith('abc', 'b', 2);
|
||
* // => true
|
||
*/
|
||
function endsWith(string, target, position) {
|
||
string = toString(string);
|
||
target = baseToString(target);
|
||
|
||
var length = string.length;
|
||
position = position === undefined
|
||
? length
|
||
: baseClamp(toInteger(position), 0, length);
|
||
|
||
var end = position;
|
||
position -= target.length;
|
||
return position >= 0 && string.slice(position, end) == target;
|
||
}
|
||
|
||
/**
|
||
* Converts the characters "&", "<", ">", '"', and "'" in `string` to their
|
||
* corresponding HTML entities.
|
||
*
|
||
* **Note:** No other characters are escaped. To escape additional
|
||
* characters use a third-party library like [_he_](https://mths.be/he).
|
||
*
|
||
* Though the ">" character is escaped for symmetry, characters like
|
||
* ">" and "/" don't need escaping in HTML and have no special meaning
|
||
* unless they're part of a tag or unquoted attribute value. See
|
||
* [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
|
||
* (under "semi-related fun fact") for more details.
|
||
*
|
||
* When working with HTML you should always
|
||
* [quote attribute values](http://wonko.com/post/html-escaping) to reduce
|
||
* XSS vectors.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category String
|
||
* @param {string} [string=''] The string to escape.
|
||
* @returns {string} Returns the escaped string.
|
||
* @example
|
||
*
|
||
* _.escape('fred, barney, & pebbles');
|
||
* // => 'fred, barney, & pebbles'
|
||
*/
|
||
function escape(string) {
|
||
string = toString(string);
|
||
return (string && reHasUnescapedHtml.test(string))
|
||
? string.replace(reUnescapedHtml, escapeHtmlChar)
|
||
: string;
|
||
}
|
||
|
||
/**
|
||
* Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
|
||
* "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to escape.
|
||
* @returns {string} Returns the escaped string.
|
||
* @example
|
||
*
|
||
* _.escapeRegExp('[lodash](https://lodash.com/)');
|
||
* // => '\[lodash\]\(https://lodash\.com/\)'
|
||
*/
|
||
function escapeRegExp(string) {
|
||
string = toString(string);
|
||
return (string && reHasRegExpChar.test(string))
|
||
? string.replace(reRegExpChar, '\\$&')
|
||
: string;
|
||
}
|
||
|
||
/**
|
||
* Converts `string` to
|
||
* [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the kebab cased string.
|
||
* @example
|
||
*
|
||
* _.kebabCase('Foo Bar');
|
||
* // => 'foo-bar'
|
||
*
|
||
* _.kebabCase('fooBar');
|
||
* // => 'foo-bar'
|
||
*
|
||
* _.kebabCase('__FOO_BAR__');
|
||
* // => 'foo-bar'
|
||
*/
|
||
var kebabCase = createCompounder(function(result, word, index) {
|
||
return result + (index ? '-' : '') + word.toLowerCase();
|
||
});
|
||
|
||
/**
|
||
* Converts `string`, as space separated words, to lower case.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the lower cased string.
|
||
* @example
|
||
*
|
||
* _.lowerCase('--Foo-Bar--');
|
||
* // => 'foo bar'
|
||
*
|
||
* _.lowerCase('fooBar');
|
||
* // => 'foo bar'
|
||
*
|
||
* _.lowerCase('__FOO_BAR__');
|
||
* // => 'foo bar'
|
||
*/
|
||
var lowerCase = createCompounder(function(result, word, index) {
|
||
return result + (index ? ' ' : '') + word.toLowerCase();
|
||
});
|
||
|
||
/**
|
||
* Converts the first character of `string` to lower case.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the converted string.
|
||
* @example
|
||
*
|
||
* _.lowerFirst('Fred');
|
||
* // => 'fred'
|
||
*
|
||
* _.lowerFirst('FRED');
|
||
* // => 'fRED'
|
||
*/
|
||
var lowerFirst = createCaseFirst('toLowerCase');
|
||
|
||
/**
|
||
* Pads `string` on the left and right sides if it's shorter than `length`.
|
||
* Padding characters are truncated if they can't be evenly divided by `length`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to pad.
|
||
* @param {number} [length=0] The padding length.
|
||
* @param {string} [chars=' '] The string used as padding.
|
||
* @returns {string} Returns the padded string.
|
||
* @example
|
||
*
|
||
* _.pad('abc', 8);
|
||
* // => ' abc '
|
||
*
|
||
* _.pad('abc', 8, '_-');
|
||
* // => '_-abc_-_'
|
||
*
|
||
* _.pad('abc', 3);
|
||
* // => 'abc'
|
||
*/
|
||
function pad(string, length, chars) {
|
||
string = toString(string);
|
||
length = toInteger(length);
|
||
|
||
var strLength = length ? stringSize(string) : 0;
|
||
if (!length || strLength >= length) {
|
||
return string;
|
||
}
|
||
var mid = (length - strLength) / 2;
|
||
return (
|
||
createPadding(nativeFloor(mid), chars) +
|
||
string +
|
||
createPadding(nativeCeil(mid), chars)
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Pads `string` on the right side if it's shorter than `length`. Padding
|
||
* characters are truncated if they exceed `length`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to pad.
|
||
* @param {number} [length=0] The padding length.
|
||
* @param {string} [chars=' '] The string used as padding.
|
||
* @returns {string} Returns the padded string.
|
||
* @example
|
||
*
|
||
* _.padEnd('abc', 6);
|
||
* // => 'abc '
|
||
*
|
||
* _.padEnd('abc', 6, '_-');
|
||
* // => 'abc_-_'
|
||
*
|
||
* _.padEnd('abc', 3);
|
||
* // => 'abc'
|
||
*/
|
||
function padEnd(string, length, chars) {
|
||
string = toString(string);
|
||
length = toInteger(length);
|
||
|
||
var strLength = length ? stringSize(string) : 0;
|
||
return (length && strLength < length)
|
||
? (string + createPadding(length - strLength, chars))
|
||
: string;
|
||
}
|
||
|
||
/**
|
||
* Pads `string` on the left side if it's shorter than `length`. Padding
|
||
* characters are truncated if they exceed `length`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to pad.
|
||
* @param {number} [length=0] The padding length.
|
||
* @param {string} [chars=' '] The string used as padding.
|
||
* @returns {string} Returns the padded string.
|
||
* @example
|
||
*
|
||
* _.padStart('abc', 6);
|
||
* // => ' abc'
|
||
*
|
||
* _.padStart('abc', 6, '_-');
|
||
* // => '_-_abc'
|
||
*
|
||
* _.padStart('abc', 3);
|
||
* // => 'abc'
|
||
*/
|
||
function padStart(string, length, chars) {
|
||
string = toString(string);
|
||
length = toInteger(length);
|
||
|
||
var strLength = length ? stringSize(string) : 0;
|
||
return (length && strLength < length)
|
||
? (createPadding(length - strLength, chars) + string)
|
||
: string;
|
||
}
|
||
|
||
/**
|
||
* Converts `string` to an integer of the specified radix. If `radix` is
|
||
* `undefined` or `0`, a `radix` of `10` is used unless `value` is a
|
||
* hexadecimal, in which case a `radix` of `16` is used.
|
||
*
|
||
* **Note:** This method aligns with the
|
||
* [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 1.1.0
|
||
* @category String
|
||
* @param {string} string The string to convert.
|
||
* @param {number} [radix=10] The radix to interpret `value` by.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {number} Returns the converted integer.
|
||
* @example
|
||
*
|
||
* _.parseInt('08');
|
||
* // => 8
|
||
*
|
||
* _.map(['6', '08', '10'], _.parseInt);
|
||
* // => [6, 8, 10]
|
||
*/
|
||
function parseInt(string, radix, guard) {
|
||
if (guard || radix == null) {
|
||
radix = 0;
|
||
} else if (radix) {
|
||
radix = +radix;
|
||
}
|
||
return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
|
||
}
|
||
|
||
/**
|
||
* Repeats the given string `n` times.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to repeat.
|
||
* @param {number} [n=1] The number of times to repeat the string.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {string} Returns the repeated string.
|
||
* @example
|
||
*
|
||
* _.repeat('*', 3);
|
||
* // => '***'
|
||
*
|
||
* _.repeat('abc', 2);
|
||
* // => 'abcabc'
|
||
*
|
||
* _.repeat('abc', 0);
|
||
* // => ''
|
||
*/
|
||
function repeat(string, n, guard) {
|
||
if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
|
||
n = 1;
|
||
} else {
|
||
n = toInteger(n);
|
||
}
|
||
return baseRepeat(toString(string), n);
|
||
}
|
||
|
||
/**
|
||
* Replaces matches for `pattern` in `string` with `replacement`.
|
||
*
|
||
* **Note:** This method is based on
|
||
* [`String#replace`](https://mdn.io/String/replace).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to modify.
|
||
* @param {RegExp|string} pattern The pattern to replace.
|
||
* @param {Function|string} replacement The match replacement.
|
||
* @returns {string} Returns the modified string.
|
||
* @example
|
||
*
|
||
* _.replace('Hi Fred', 'Fred', 'Barney');
|
||
* // => 'Hi Barney'
|
||
*/
|
||
function replace() {
|
||
var args = arguments,
|
||
string = toString(args[0]);
|
||
|
||
return args.length < 3 ? string : string.replace(args[1], args[2]);
|
||
}
|
||
|
||
/**
|
||
* Converts `string` to
|
||
* [snake case](https://en.wikipedia.org/wiki/Snake_case).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the snake cased string.
|
||
* @example
|
||
*
|
||
* _.snakeCase('Foo Bar');
|
||
* // => 'foo_bar'
|
||
*
|
||
* _.snakeCase('fooBar');
|
||
* // => 'foo_bar'
|
||
*
|
||
* _.snakeCase('--FOO-BAR--');
|
||
* // => 'foo_bar'
|
||
*/
|
||
var snakeCase = createCompounder(function(result, word, index) {
|
||
return result + (index ? '_' : '') + word.toLowerCase();
|
||
});
|
||
|
||
/**
|
||
* Splits `string` by `separator`.
|
||
*
|
||
* **Note:** This method is based on
|
||
* [`String#split`](https://mdn.io/String/split).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to split.
|
||
* @param {RegExp|string} separator The separator pattern to split by.
|
||
* @param {number} [limit] The length to truncate results to.
|
||
* @returns {Array} Returns the string segments.
|
||
* @example
|
||
*
|
||
* _.split('a-b-c', '-', 2);
|
||
* // => ['a', 'b']
|
||
*/
|
||
function split(string, separator, limit) {
|
||
if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
|
||
separator = limit = undefined;
|
||
}
|
||
limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
|
||
if (!limit) {
|
||
return [];
|
||
}
|
||
string = toString(string);
|
||
if (string && (
|
||
typeof separator == 'string' ||
|
||
(separator != null && !isRegExp(separator))
|
||
)) {
|
||
separator = baseToString(separator);
|
||
if (!separator && hasUnicode(string)) {
|
||
return castSlice(stringToArray(string), 0, limit);
|
||
}
|
||
}
|
||
return string.split(separator, limit);
|
||
}
|
||
|
||
/**
|
||
* Converts `string` to
|
||
* [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.1.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the start cased string.
|
||
* @example
|
||
*
|
||
* _.startCase('--foo-bar--');
|
||
* // => 'Foo Bar'
|
||
*
|
||
* _.startCase('fooBar');
|
||
* // => 'Foo Bar'
|
||
*
|
||
* _.startCase('__FOO_BAR__');
|
||
* // => 'FOO BAR'
|
||
*/
|
||
var startCase = createCompounder(function(result, word, index) {
|
||
return result + (index ? ' ' : '') + upperFirst(word);
|
||
});
|
||
|
||
/**
|
||
* Checks if `string` starts with the given target string.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to inspect.
|
||
* @param {string} [target] The string to search for.
|
||
* @param {number} [position=0] The position to search from.
|
||
* @returns {boolean} Returns `true` if `string` starts with `target`,
|
||
* else `false`.
|
||
* @example
|
||
*
|
||
* _.startsWith('abc', 'a');
|
||
* // => true
|
||
*
|
||
* _.startsWith('abc', 'b');
|
||
* // => false
|
||
*
|
||
* _.startsWith('abc', 'b', 1);
|
||
* // => true
|
||
*/
|
||
function startsWith(string, target, position) {
|
||
string = toString(string);
|
||
position = position == null
|
||
? 0
|
||
: baseClamp(toInteger(position), 0, string.length);
|
||
|
||
target = baseToString(target);
|
||
return string.slice(position, position + target.length) == target;
|
||
}
|
||
|
||
/**
|
||
* Creates a compiled template function that can interpolate data properties
|
||
* in "interpolate" delimiters, HTML-escape interpolated data properties in
|
||
* "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
|
||
* properties may be accessed as free variables in the template. If a setting
|
||
* object is given, it takes precedence over `_.templateSettings` values.
|
||
*
|
||
* **Note:** In the development build `_.template` utilizes
|
||
* [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
|
||
* for easier debugging.
|
||
*
|
||
* For more information on precompiling templates see
|
||
* [lodash's custom builds documentation](https://lodash.com/custom-builds).
|
||
*
|
||
* For more information on Chrome extension sandboxes see
|
||
* [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category String
|
||
* @param {string} [string=''] The template string.
|
||
* @param {Object} [options={}] The options object.
|
||
* @param {RegExp} [options.escape=_.templateSettings.escape]
|
||
* The HTML "escape" delimiter.
|
||
* @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
|
||
* The "evaluate" delimiter.
|
||
* @param {Object} [options.imports=_.templateSettings.imports]
|
||
* An object to import into the template as free variables.
|
||
* @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
|
||
* The "interpolate" delimiter.
|
||
* @param {string} [options.sourceURL='lodash.templateSources[n]']
|
||
* The sourceURL of the compiled template.
|
||
* @param {string} [options.variable='obj']
|
||
* The data object variable name.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Function} Returns the compiled template function.
|
||
* @example
|
||
*
|
||
* // Use the "interpolate" delimiter to create a compiled template.
|
||
* var compiled = _.template('hello <%= user %>!');
|
||
* compiled({ 'user': 'fred' });
|
||
* // => 'hello fred!'
|
||
*
|
||
* // Use the HTML "escape" delimiter to escape data property values.
|
||
* var compiled = _.template('<b><%- value %></b>');
|
||
* compiled({ 'value': '<script>' });
|
||
* // => '<b><script></b>'
|
||
*
|
||
* // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
|
||
* var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
|
||
* compiled({ 'users': ['fred', 'barney'] });
|
||
* // => '<li>fred</li><li>barney</li>'
|
||
*
|
||
* // Use the internal `print` function in "evaluate" delimiters.
|
||
* var compiled = _.template('<% print("hello " + user); %>!');
|
||
* compiled({ 'user': 'barney' });
|
||
* // => 'hello barney!'
|
||
*
|
||
* // Use the ES template literal delimiter as an "interpolate" delimiter.
|
||
* // Disable support by replacing the "interpolate" delimiter.
|
||
* var compiled = _.template('hello ${ user }!');
|
||
* compiled({ 'user': 'pebbles' });
|
||
* // => 'hello pebbles!'
|
||
*
|
||
* // Use backslashes to treat delimiters as plain text.
|
||
* var compiled = _.template('<%= "\\<%- value %\\>" %>');
|
||
* compiled({ 'value': 'ignored' });
|
||
* // => '<%- value %>'
|
||
*
|
||
* // Use the `imports` option to import `jQuery` as `jq`.
|
||
* var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
|
||
* var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
|
||
* compiled({ 'users': ['fred', 'barney'] });
|
||
* // => '<li>fred</li><li>barney</li>'
|
||
*
|
||
* // Use the `sourceURL` option to specify a custom sourceURL for the template.
|
||
* var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
|
||
* compiled(data);
|
||
* // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
|
||
*
|
||
* // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
|
||
* var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
|
||
* compiled.source;
|
||
* // => function(data) {
|
||
* // var __t, __p = '';
|
||
* // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
|
||
* // return __p;
|
||
* // }
|
||
*
|
||
* // Use custom template delimiters.
|
||
* _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
|
||
* var compiled = _.template('hello {{ user }}!');
|
||
* compiled({ 'user': 'mustache' });
|
||
* // => 'hello mustache!'
|
||
*
|
||
* // Use the `source` property to inline compiled templates for meaningful
|
||
* // line numbers in error messages and stack traces.
|
||
* fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
|
||
* var JST = {\
|
||
* "main": ' + _.template(mainText).source + '\
|
||
* };\
|
||
* ');
|
||
*/
|
||
function template(string, options, guard) {
|
||
// Based on John Resig's `tmpl` implementation
|
||
// (http://ejohn.org/blog/javascript-micro-templating/)
|
||
// and Laura Doktorova's doT.js (https://github.com/olado/doT).
|
||
var settings = lodash.templateSettings;
|
||
|
||
if (guard && isIterateeCall(string, options, guard)) {
|
||
options = undefined;
|
||
}
|
||
string = toString(string);
|
||
options = assignInWith({}, options, settings, customDefaultsAssignIn);
|
||
|
||
var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
|
||
importsKeys = keys(imports),
|
||
importsValues = baseValues(imports, importsKeys);
|
||
|
||
var isEscaping,
|
||
isEvaluating,
|
||
index = 0,
|
||
interpolate = options.interpolate || reNoMatch,
|
||
source = "__p += '";
|
||
|
||
// Compile the regexp to match each delimiter.
|
||
var reDelimiters = RegExp(
|
||
(options.escape || reNoMatch).source + '|' +
|
||
interpolate.source + '|' +
|
||
(interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
|
||
(options.evaluate || reNoMatch).source + '|$'
|
||
, 'g');
|
||
|
||
// Use a sourceURL for easier debugging.
|
||
var sourceURL = '//# sourceURL=' +
|
||
('sourceURL' in options
|
||
? options.sourceURL
|
||
: ('lodash.templateSources[' + (++templateCounter) + ']')
|
||
) + '\n';
|
||
|
||
string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
|
||
interpolateValue || (interpolateValue = esTemplateValue);
|
||
|
||
// Escape characters that can't be included in string literals.
|
||
source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
|
||
|
||
// Replace delimiters with snippets.
|
||
if (escapeValue) {
|
||
isEscaping = true;
|
||
source += "' +\n__e(" + escapeValue + ") +\n'";
|
||
}
|
||
if (evaluateValue) {
|
||
isEvaluating = true;
|
||
source += "';\n" + evaluateValue + ";\n__p += '";
|
||
}
|
||
if (interpolateValue) {
|
||
source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
|
||
}
|
||
index = offset + match.length;
|
||
|
||
// The JS engine embedded in Adobe products needs `match` returned in
|
||
// order to produce the correct `offset` value.
|
||
return match;
|
||
});
|
||
|
||
source += "';\n";
|
||
|
||
// If `variable` is not specified wrap a with-statement around the generated
|
||
// code to add the data object to the top of the scope chain.
|
||
var variable = options.variable;
|
||
if (!variable) {
|
||
source = 'with (obj) {\n' + source + '\n}\n';
|
||
}
|
||
// Cleanup code by stripping empty strings.
|
||
source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
|
||
.replace(reEmptyStringMiddle, '$1')
|
||
.replace(reEmptyStringTrailing, '$1;');
|
||
|
||
// Frame code as the function body.
|
||
source = 'function(' + (variable || 'obj') + ') {\n' +
|
||
(variable
|
||
? ''
|
||
: 'obj || (obj = {});\n'
|
||
) +
|
||
"var __t, __p = ''" +
|
||
(isEscaping
|
||
? ', __e = _.escape'
|
||
: ''
|
||
) +
|
||
(isEvaluating
|
||
? ', __j = Array.prototype.join;\n' +
|
||
"function print() { __p += __j.call(arguments, '') }\n"
|
||
: ';\n'
|
||
) +
|
||
source +
|
||
'return __p\n}';
|
||
|
||
var result = attempt(function() {
|
||
return Function(importsKeys, sourceURL + 'return ' + source)
|
||
.apply(undefined, importsValues);
|
||
});
|
||
|
||
// Provide the compiled function's source by its `toString` method or
|
||
// the `source` property as a convenience for inlining compiled templates.
|
||
result.source = source;
|
||
if (isError(result)) {
|
||
throw result;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Converts `string`, as a whole, to lower case just like
|
||
* [String#toLowerCase](https://mdn.io/toLowerCase).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the lower cased string.
|
||
* @example
|
||
*
|
||
* _.toLower('--Foo-Bar--');
|
||
* // => '--foo-bar--'
|
||
*
|
||
* _.toLower('fooBar');
|
||
* // => 'foobar'
|
||
*
|
||
* _.toLower('__FOO_BAR__');
|
||
* // => '__foo_bar__'
|
||
*/
|
||
function toLower(value) {
|
||
return toString(value).toLowerCase();
|
||
}
|
||
|
||
/**
|
||
* Converts `string`, as a whole, to upper case just like
|
||
* [String#toUpperCase](https://mdn.io/toUpperCase).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the upper cased string.
|
||
* @example
|
||
*
|
||
* _.toUpper('--foo-bar--');
|
||
* // => '--FOO-BAR--'
|
||
*
|
||
* _.toUpper('fooBar');
|
||
* // => 'FOOBAR'
|
||
*
|
||
* _.toUpper('__foo_bar__');
|
||
* // => '__FOO_BAR__'
|
||
*/
|
||
function toUpper(value) {
|
||
return toString(value).toUpperCase();
|
||
}
|
||
|
||
/**
|
||
* Removes leading and trailing whitespace or specified characters from `string`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to trim.
|
||
* @param {string} [chars=whitespace] The characters to trim.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {string} Returns the trimmed string.
|
||
* @example
|
||
*
|
||
* _.trim(' abc ');
|
||
* // => 'abc'
|
||
*
|
||
* _.trim('-_-abc-_-', '_-');
|
||
* // => 'abc'
|
||
*
|
||
* _.map([' foo ', ' bar '], _.trim);
|
||
* // => ['foo', 'bar']
|
||
*/
|
||
function trim(string, chars, guard) {
|
||
string = toString(string);
|
||
if (string && (guard || chars === undefined)) {
|
||
return string.replace(reTrim, '');
|
||
}
|
||
if (!string || !(chars = baseToString(chars))) {
|
||
return string;
|
||
}
|
||
var strSymbols = stringToArray(string),
|
||
chrSymbols = stringToArray(chars),
|
||
start = charsStartIndex(strSymbols, chrSymbols),
|
||
end = charsEndIndex(strSymbols, chrSymbols) + 1;
|
||
|
||
return castSlice(strSymbols, start, end).join('');
|
||
}
|
||
|
||
/**
|
||
* Removes trailing whitespace or specified characters from `string`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to trim.
|
||
* @param {string} [chars=whitespace] The characters to trim.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {string} Returns the trimmed string.
|
||
* @example
|
||
*
|
||
* _.trimEnd(' abc ');
|
||
* // => ' abc'
|
||
*
|
||
* _.trimEnd('-_-abc-_-', '_-');
|
||
* // => '-_-abc'
|
||
*/
|
||
function trimEnd(string, chars, guard) {
|
||
string = toString(string);
|
||
if (string && (guard || chars === undefined)) {
|
||
return string.replace(reTrimEnd, '');
|
||
}
|
||
if (!string || !(chars = baseToString(chars))) {
|
||
return string;
|
||
}
|
||
var strSymbols = stringToArray(string),
|
||
end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
|
||
|
||
return castSlice(strSymbols, 0, end).join('');
|
||
}
|
||
|
||
/**
|
||
* Removes leading whitespace or specified characters from `string`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to trim.
|
||
* @param {string} [chars=whitespace] The characters to trim.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {string} Returns the trimmed string.
|
||
* @example
|
||
*
|
||
* _.trimStart(' abc ');
|
||
* // => 'abc '
|
||
*
|
||
* _.trimStart('-_-abc-_-', '_-');
|
||
* // => 'abc-_-'
|
||
*/
|
||
function trimStart(string, chars, guard) {
|
||
string = toString(string);
|
||
if (string && (guard || chars === undefined)) {
|
||
return string.replace(reTrimStart, '');
|
||
}
|
||
if (!string || !(chars = baseToString(chars))) {
|
||
return string;
|
||
}
|
||
var strSymbols = stringToArray(string),
|
||
start = charsStartIndex(strSymbols, stringToArray(chars));
|
||
|
||
return castSlice(strSymbols, start).join('');
|
||
}
|
||
|
||
/**
|
||
* Truncates `string` if it's longer than the given maximum string length.
|
||
* The last characters of the truncated string are replaced with the omission
|
||
* string which defaults to "...".
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to truncate.
|
||
* @param {Object} [options={}] The options object.
|
||
* @param {number} [options.length=30] The maximum string length.
|
||
* @param {string} [options.omission='...'] The string to indicate text is omitted.
|
||
* @param {RegExp|string} [options.separator] The separator pattern to truncate to.
|
||
* @returns {string} Returns the truncated string.
|
||
* @example
|
||
*
|
||
* _.truncate('hi-diddly-ho there, neighborino');
|
||
* // => 'hi-diddly-ho there, neighbo...'
|
||
*
|
||
* _.truncate('hi-diddly-ho there, neighborino', {
|
||
* 'length': 24,
|
||
* 'separator': ' '
|
||
* });
|
||
* // => 'hi-diddly-ho there,...'
|
||
*
|
||
* _.truncate('hi-diddly-ho there, neighborino', {
|
||
* 'length': 24,
|
||
* 'separator': /,? +/
|
||
* });
|
||
* // => 'hi-diddly-ho there...'
|
||
*
|
||
* _.truncate('hi-diddly-ho there, neighborino', {
|
||
* 'omission': ' [...]'
|
||
* });
|
||
* // => 'hi-diddly-ho there, neig [...]'
|
||
*/
|
||
function truncate(string, options) {
|
||
var length = DEFAULT_TRUNC_LENGTH,
|
||
omission = DEFAULT_TRUNC_OMISSION;
|
||
|
||
if (isObject(options)) {
|
||
var separator = 'separator' in options ? options.separator : separator;
|
||
length = 'length' in options ? toInteger(options.length) : length;
|
||
omission = 'omission' in options ? baseToString(options.omission) : omission;
|
||
}
|
||
string = toString(string);
|
||
|
||
var strLength = string.length;
|
||
if (hasUnicode(string)) {
|
||
var strSymbols = stringToArray(string);
|
||
strLength = strSymbols.length;
|
||
}
|
||
if (length >= strLength) {
|
||
return string;
|
||
}
|
||
var end = length - stringSize(omission);
|
||
if (end < 1) {
|
||
return omission;
|
||
}
|
||
var result = strSymbols
|
||
? castSlice(strSymbols, 0, end).join('')
|
||
: string.slice(0, end);
|
||
|
||
if (separator === undefined) {
|
||
return result + omission;
|
||
}
|
||
if (strSymbols) {
|
||
end += (result.length - end);
|
||
}
|
||
if (isRegExp(separator)) {
|
||
if (string.slice(end).search(separator)) {
|
||
var match,
|
||
substring = result;
|
||
|
||
if (!separator.global) {
|
||
separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
|
||
}
|
||
separator.lastIndex = 0;
|
||
while ((match = separator.exec(substring))) {
|
||
var newEnd = match.index;
|
||
}
|
||
result = result.slice(0, newEnd === undefined ? end : newEnd);
|
||
}
|
||
} else if (string.indexOf(baseToString(separator), end) != end) {
|
||
var index = result.lastIndexOf(separator);
|
||
if (index > -1) {
|
||
result = result.slice(0, index);
|
||
}
|
||
}
|
||
return result + omission;
|
||
}
|
||
|
||
/**
|
||
* The inverse of `_.escape`; this method converts the HTML entities
|
||
* `&`, `<`, `>`, `"`, and `'` in `string` to
|
||
* their corresponding characters.
|
||
*
|
||
* **Note:** No other HTML entities are unescaped. To unescape additional
|
||
* HTML entities use a third-party library like [_he_](https://mths.be/he).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 0.6.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to unescape.
|
||
* @returns {string} Returns the unescaped string.
|
||
* @example
|
||
*
|
||
* _.unescape('fred, barney, & pebbles');
|
||
* // => 'fred, barney, & pebbles'
|
||
*/
|
||
function unescape(string) {
|
||
string = toString(string);
|
||
return (string && reHasEscapedHtml.test(string))
|
||
? string.replace(reEscapedHtml, unescapeHtmlChar)
|
||
: string;
|
||
}
|
||
|
||
/**
|
||
* Converts `string`, as space separated words, to upper case.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the upper cased string.
|
||
* @example
|
||
*
|
||
* _.upperCase('--foo-bar');
|
||
* // => 'FOO BAR'
|
||
*
|
||
* _.upperCase('fooBar');
|
||
* // => 'FOO BAR'
|
||
*
|
||
* _.upperCase('__foo_bar__');
|
||
* // => 'FOO BAR'
|
||
*/
|
||
var upperCase = createCompounder(function(result, word, index) {
|
||
return result + (index ? ' ' : '') + word.toUpperCase();
|
||
});
|
||
|
||
/**
|
||
* Converts the first character of `string` to upper case.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to convert.
|
||
* @returns {string} Returns the converted string.
|
||
* @example
|
||
*
|
||
* _.upperFirst('fred');
|
||
* // => 'Fred'
|
||
*
|
||
* _.upperFirst('FRED');
|
||
* // => 'FRED'
|
||
*/
|
||
var upperFirst = createCaseFirst('toUpperCase');
|
||
|
||
/**
|
||
* Splits `string` into an array of its words.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category String
|
||
* @param {string} [string=''] The string to inspect.
|
||
* @param {RegExp|string} [pattern] The pattern to match words.
|
||
* @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
|
||
* @returns {Array} Returns the words of `string`.
|
||
* @example
|
||
*
|
||
* _.words('fred, barney, & pebbles');
|
||
* // => ['fred', 'barney', 'pebbles']
|
||
*
|
||
* _.words('fred, barney, & pebbles', /[^, ]+/g);
|
||
* // => ['fred', 'barney', '&', 'pebbles']
|
||
*/
|
||
function words(string, pattern, guard) {
|
||
string = toString(string);
|
||
pattern = guard ? undefined : pattern;
|
||
|
||
if (pattern === undefined) {
|
||
return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
|
||
}
|
||
return string.match(pattern) || [];
|
||
}
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Attempts to invoke `func`, returning either the result or the caught error
|
||
* object. Any additional arguments are provided to `func` when it's invoked.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Util
|
||
* @param {Function} func The function to attempt.
|
||
* @param {...*} [args] The arguments to invoke `func` with.
|
||
* @returns {*} Returns the `func` result or error object.
|
||
* @example
|
||
*
|
||
* // Avoid throwing errors for invalid selectors.
|
||
* var elements = _.attempt(function(selector) {
|
||
* return document.querySelectorAll(selector);
|
||
* }, '>_>');
|
||
*
|
||
* if (_.isError(elements)) {
|
||
* elements = [];
|
||
* }
|
||
*/
|
||
var attempt = baseRest(function(func, args) {
|
||
try {
|
||
return apply(func, undefined, args);
|
||
} catch (e) {
|
||
return isError(e) ? e : new Error(e);
|
||
}
|
||
});
|
||
|
||
/**
|
||
* Binds methods of an object to the object itself, overwriting the existing
|
||
* method.
|
||
*
|
||
* **Note:** This method doesn't set the "length" property of bound functions.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Util
|
||
* @param {Object} object The object to bind and assign the bound methods to.
|
||
* @param {...(string|string[])} methodNames The object method names to bind.
|
||
* @returns {Object} Returns `object`.
|
||
* @example
|
||
*
|
||
* var view = {
|
||
* 'label': 'docs',
|
||
* 'click': function() {
|
||
* console.log('clicked ' + this.label);
|
||
* }
|
||
* };
|
||
*
|
||
* _.bindAll(view, ['click']);
|
||
* jQuery(element).on('click', view.click);
|
||
* // => Logs 'clicked docs' when clicked.
|
||
*/
|
||
var bindAll = flatRest(function(object, methodNames) {
|
||
arrayEach(methodNames, function(key) {
|
||
key = toKey(key);
|
||
baseAssignValue(object, key, bind(object[key], object));
|
||
});
|
||
return object;
|
||
});
|
||
|
||
/**
|
||
* Creates a function that iterates over `pairs` and invokes the corresponding
|
||
* function of the first predicate to return truthy. The predicate-function
|
||
* pairs are invoked with the `this` binding and arguments of the created
|
||
* function.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Util
|
||
* @param {Array} pairs The predicate-function pairs.
|
||
* @returns {Function} Returns the new composite function.
|
||
* @example
|
||
*
|
||
* var func = _.cond([
|
||
* [_.matches({ 'a': 1 }), _.constant('matches A')],
|
||
* [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
|
||
* [_.stubTrue, _.constant('no match')]
|
||
* ]);
|
||
*
|
||
* func({ 'a': 1, 'b': 2 });
|
||
* // => 'matches A'
|
||
*
|
||
* func({ 'a': 0, 'b': 1 });
|
||
* // => 'matches B'
|
||
*
|
||
* func({ 'a': '1', 'b': '2' });
|
||
* // => 'no match'
|
||
*/
|
||
function cond(pairs) {
|
||
var length = pairs == null ? 0 : pairs.length,
|
||
toIteratee = getIteratee();
|
||
|
||
pairs = !length ? [] : arrayMap(pairs, function(pair) {
|
||
if (typeof pair[1] != 'function') {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
return [toIteratee(pair[0]), pair[1]];
|
||
});
|
||
|
||
return baseRest(function(args) {
|
||
var index = -1;
|
||
while (++index < length) {
|
||
var pair = pairs[index];
|
||
if (apply(pair[0], this, args)) {
|
||
return apply(pair[1], this, args);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes the predicate properties of `source` with
|
||
* the corresponding property values of a given object, returning `true` if
|
||
* all predicates return truthy, else `false`.
|
||
*
|
||
* **Note:** The created function is equivalent to `_.conformsTo` with
|
||
* `source` partially applied.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Util
|
||
* @param {Object} source The object of property predicates to conform to.
|
||
* @returns {Function} Returns the new spec function.
|
||
* @example
|
||
*
|
||
* var objects = [
|
||
* { 'a': 2, 'b': 1 },
|
||
* { 'a': 1, 'b': 2 }
|
||
* ];
|
||
*
|
||
* _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
|
||
* // => [{ 'a': 1, 'b': 2 }]
|
||
*/
|
||
function conforms(source) {
|
||
return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
|
||
}
|
||
|
||
/**
|
||
* Creates a function that returns `value`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.4.0
|
||
* @category Util
|
||
* @param {*} value The value to return from the new function.
|
||
* @returns {Function} Returns the new constant function.
|
||
* @example
|
||
*
|
||
* var objects = _.times(2, _.constant({ 'a': 1 }));
|
||
*
|
||
* console.log(objects);
|
||
* // => [{ 'a': 1 }, { 'a': 1 }]
|
||
*
|
||
* console.log(objects[0] === objects[1]);
|
||
* // => true
|
||
*/
|
||
function constant(value) {
|
||
return function() {
|
||
return value;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Checks `value` to determine whether a default value should be returned in
|
||
* its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
|
||
* or `undefined`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.14.0
|
||
* @category Util
|
||
* @param {*} value The value to check.
|
||
* @param {*} defaultValue The default value.
|
||
* @returns {*} Returns the resolved value.
|
||
* @example
|
||
*
|
||
* _.defaultTo(1, 10);
|
||
* // => 1
|
||
*
|
||
* _.defaultTo(undefined, 10);
|
||
* // => 10
|
||
*/
|
||
function defaultTo(value, defaultValue) {
|
||
return (value == null || value !== value) ? defaultValue : value;
|
||
}
|
||
|
||
/**
|
||
* Creates a function that returns the result of invoking the given functions
|
||
* with the `this` binding of the created function, where each successive
|
||
* invocation is supplied the return value of the previous.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Util
|
||
* @param {...(Function|Function[])} [funcs] The functions to invoke.
|
||
* @returns {Function} Returns the new composite function.
|
||
* @see _.flowRight
|
||
* @example
|
||
*
|
||
* function square(n) {
|
||
* return n * n;
|
||
* }
|
||
*
|
||
* var addSquare = _.flow([_.add, square]);
|
||
* addSquare(1, 2);
|
||
* // => 9
|
||
*/
|
||
var flow = createFlow();
|
||
|
||
/**
|
||
* This method is like `_.flow` except that it creates a function that
|
||
* invokes the given functions from right to left.
|
||
*
|
||
* @static
|
||
* @since 3.0.0
|
||
* @memberOf _
|
||
* @category Util
|
||
* @param {...(Function|Function[])} [funcs] The functions to invoke.
|
||
* @returns {Function} Returns the new composite function.
|
||
* @see _.flow
|
||
* @example
|
||
*
|
||
* function square(n) {
|
||
* return n * n;
|
||
* }
|
||
*
|
||
* var addSquare = _.flowRight([square, _.add]);
|
||
* addSquare(1, 2);
|
||
* // => 9
|
||
*/
|
||
var flowRight = createFlow(true);
|
||
|
||
/**
|
||
* This method returns the first argument it receives.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Util
|
||
* @param {*} value Any value.
|
||
* @returns {*} Returns `value`.
|
||
* @example
|
||
*
|
||
* var object = { 'a': 1 };
|
||
*
|
||
* console.log(_.identity(object) === object);
|
||
* // => true
|
||
*/
|
||
function identity(value) {
|
||
return value;
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes `func` with the arguments of the created
|
||
* function. If `func` is a property name, the created function returns the
|
||
* property value for a given element. If `func` is an array or object, the
|
||
* created function returns `true` for elements that contain the equivalent
|
||
* source properties, otherwise it returns `false`.
|
||
*
|
||
* @static
|
||
* @since 4.0.0
|
||
* @memberOf _
|
||
* @category Util
|
||
* @param {*} [func=_.identity] The value to convert to a callback.
|
||
* @returns {Function} Returns the callback.
|
||
* @example
|
||
*
|
||
* var users = [
|
||
* { 'user': 'barney', 'age': 36, 'active': true },
|
||
* { 'user': 'fred', 'age': 40, 'active': false }
|
||
* ];
|
||
*
|
||
* // The `_.matches` iteratee shorthand.
|
||
* _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
|
||
* // => [{ 'user': 'barney', 'age': 36, 'active': true }]
|
||
*
|
||
* // The `_.matchesProperty` iteratee shorthand.
|
||
* _.filter(users, _.iteratee(['user', 'fred']));
|
||
* // => [{ 'user': 'fred', 'age': 40 }]
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.map(users, _.iteratee('user'));
|
||
* // => ['barney', 'fred']
|
||
*
|
||
* // Create custom iteratee shorthands.
|
||
* _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
|
||
* return !_.isRegExp(func) ? iteratee(func) : function(string) {
|
||
* return func.test(string);
|
||
* };
|
||
* });
|
||
*
|
||
* _.filter(['abc', 'def'], /ef/);
|
||
* // => ['def']
|
||
*/
|
||
function iteratee(func) {
|
||
return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
|
||
}
|
||
|
||
/**
|
||
* Creates a function that performs a partial deep comparison between a given
|
||
* object and `source`, returning `true` if the given object has equivalent
|
||
* property values, else `false`.
|
||
*
|
||
* **Note:** The created function is equivalent to `_.isMatch` with `source`
|
||
* partially applied.
|
||
*
|
||
* Partial comparisons will match empty array and empty object `source`
|
||
* values against any array or object value, respectively. See `_.isEqual`
|
||
* for a list of supported value comparisons.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Util
|
||
* @param {Object} source The object of property values to match.
|
||
* @returns {Function} Returns the new spec function.
|
||
* @example
|
||
*
|
||
* var objects = [
|
||
* { 'a': 1, 'b': 2, 'c': 3 },
|
||
* { 'a': 4, 'b': 5, 'c': 6 }
|
||
* ];
|
||
*
|
||
* _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
|
||
* // => [{ 'a': 4, 'b': 5, 'c': 6 }]
|
||
*/
|
||
function matches(source) {
|
||
return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
|
||
}
|
||
|
||
/**
|
||
* Creates a function that performs a partial deep comparison between the
|
||
* value at `path` of a given object to `srcValue`, returning `true` if the
|
||
* object value is equivalent, else `false`.
|
||
*
|
||
* **Note:** Partial comparisons will match empty array and empty object
|
||
* `srcValue` values against any array or object value, respectively. See
|
||
* `_.isEqual` for a list of supported value comparisons.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.2.0
|
||
* @category Util
|
||
* @param {Array|string} path The path of the property to get.
|
||
* @param {*} srcValue The value to match.
|
||
* @returns {Function} Returns the new spec function.
|
||
* @example
|
||
*
|
||
* var objects = [
|
||
* { 'a': 1, 'b': 2, 'c': 3 },
|
||
* { 'a': 4, 'b': 5, 'c': 6 }
|
||
* ];
|
||
*
|
||
* _.find(objects, _.matchesProperty('a', 4));
|
||
* // => { 'a': 4, 'b': 5, 'c': 6 }
|
||
*/
|
||
function matchesProperty(path, srcValue) {
|
||
return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes the method at `path` of a given object.
|
||
* Any additional arguments are provided to the invoked method.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.7.0
|
||
* @category Util
|
||
* @param {Array|string} path The path of the method to invoke.
|
||
* @param {...*} [args] The arguments to invoke the method with.
|
||
* @returns {Function} Returns the new invoker function.
|
||
* @example
|
||
*
|
||
* var objects = [
|
||
* { 'a': { 'b': _.constant(2) } },
|
||
* { 'a': { 'b': _.constant(1) } }
|
||
* ];
|
||
*
|
||
* _.map(objects, _.method('a.b'));
|
||
* // => [2, 1]
|
||
*
|
||
* _.map(objects, _.method(['a', 'b']));
|
||
* // => [2, 1]
|
||
*/
|
||
var method = baseRest(function(path, args) {
|
||
return function(object) {
|
||
return baseInvoke(object, path, args);
|
||
};
|
||
});
|
||
|
||
/**
|
||
* The opposite of `_.method`; this method creates a function that invokes
|
||
* the method at a given path of `object`. Any additional arguments are
|
||
* provided to the invoked method.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.7.0
|
||
* @category Util
|
||
* @param {Object} object The object to query.
|
||
* @param {...*} [args] The arguments to invoke the method with.
|
||
* @returns {Function} Returns the new invoker function.
|
||
* @example
|
||
*
|
||
* var array = _.times(3, _.constant),
|
||
* object = { 'a': array, 'b': array, 'c': array };
|
||
*
|
||
* _.map(['a[2]', 'c[0]'], _.methodOf(object));
|
||
* // => [2, 0]
|
||
*
|
||
* _.map([['a', '2'], ['c', '0']], _.methodOf(object));
|
||
* // => [2, 0]
|
||
*/
|
||
var methodOf = baseRest(function(object, args) {
|
||
return function(path) {
|
||
return baseInvoke(object, path, args);
|
||
};
|
||
});
|
||
|
||
/**
|
||
* Adds all own enumerable string keyed function properties of a source
|
||
* object to the destination object. If `object` is a function, then methods
|
||
* are added to its prototype as well.
|
||
*
|
||
* **Note:** Use `_.runInContext` to create a pristine `lodash` function to
|
||
* avoid conflicts caused by modifying the original.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Util
|
||
* @param {Function|Object} [object=lodash] The destination object.
|
||
* @param {Object} source The object of functions to add.
|
||
* @param {Object} [options={}] The options object.
|
||
* @param {boolean} [options.chain=true] Specify whether mixins are chainable.
|
||
* @returns {Function|Object} Returns `object`.
|
||
* @example
|
||
*
|
||
* function vowels(string) {
|
||
* return _.filter(string, function(v) {
|
||
* return /[aeiou]/i.test(v);
|
||
* });
|
||
* }
|
||
*
|
||
* _.mixin({ 'vowels': vowels });
|
||
* _.vowels('fred');
|
||
* // => ['e']
|
||
*
|
||
* _('fred').vowels().value();
|
||
* // => ['e']
|
||
*
|
||
* _.mixin({ 'vowels': vowels }, { 'chain': false });
|
||
* _('fred').vowels();
|
||
* // => ['e']
|
||
*/
|
||
function mixin(object, source, options) {
|
||
var props = keys(source),
|
||
methodNames = baseFunctions(source, props);
|
||
|
||
if (options == null &&
|
||
!(isObject(source) && (methodNames.length || !props.length))) {
|
||
options = source;
|
||
source = object;
|
||
object = this;
|
||
methodNames = baseFunctions(source, keys(source));
|
||
}
|
||
var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
|
||
isFunc = isFunction(object);
|
||
|
||
arrayEach(methodNames, function(methodName) {
|
||
var func = source[methodName];
|
||
object[methodName] = func;
|
||
if (isFunc) {
|
||
object.prototype[methodName] = function() {
|
||
var chainAll = this.__chain__;
|
||
if (chain || chainAll) {
|
||
var result = object(this.__wrapped__),
|
||
actions = result.__actions__ = copyArray(this.__actions__);
|
||
|
||
actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
|
||
result.__chain__ = chainAll;
|
||
return result;
|
||
}
|
||
return func.apply(object, arrayPush([this.value()], arguments));
|
||
};
|
||
}
|
||
});
|
||
|
||
return object;
|
||
}
|
||
|
||
/**
|
||
* Reverts the `_` variable to its previous value and returns a reference to
|
||
* the `lodash` function.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Util
|
||
* @returns {Function} Returns the `lodash` function.
|
||
* @example
|
||
*
|
||
* var lodash = _.noConflict();
|
||
*/
|
||
function noConflict() {
|
||
if (root._ === this) {
|
||
root._ = oldDash;
|
||
}
|
||
return this;
|
||
}
|
||
|
||
/**
|
||
* This method returns `undefined`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.3.0
|
||
* @category Util
|
||
* @example
|
||
*
|
||
* _.times(2, _.noop);
|
||
* // => [undefined, undefined]
|
||
*/
|
||
function noop() {
|
||
// No operation performed.
|
||
}
|
||
|
||
/**
|
||
* Creates a function that gets the argument at index `n`. If `n` is negative,
|
||
* the nth argument from the end is returned.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Util
|
||
* @param {number} [n=0] The index of the argument to return.
|
||
* @returns {Function} Returns the new pass-thru function.
|
||
* @example
|
||
*
|
||
* var func = _.nthArg(1);
|
||
* func('a', 'b', 'c', 'd');
|
||
* // => 'b'
|
||
*
|
||
* var func = _.nthArg(-2);
|
||
* func('a', 'b', 'c', 'd');
|
||
* // => 'c'
|
||
*/
|
||
function nthArg(n) {
|
||
n = toInteger(n);
|
||
return baseRest(function(args) {
|
||
return baseNth(args, n);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes `iteratees` with the arguments it receives
|
||
* and returns their results.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Util
|
||
* @param {...(Function|Function[])} [iteratees=[_.identity]]
|
||
* The iteratees to invoke.
|
||
* @returns {Function} Returns the new function.
|
||
* @example
|
||
*
|
||
* var func = _.over([Math.max, Math.min]);
|
||
*
|
||
* func(1, 2, 3, 4);
|
||
* // => [4, 1]
|
||
*/
|
||
var over = createOver(arrayMap);
|
||
|
||
/**
|
||
* Creates a function that checks if **all** of the `predicates` return
|
||
* truthy when invoked with the arguments it receives.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Util
|
||
* @param {...(Function|Function[])} [predicates=[_.identity]]
|
||
* The predicates to check.
|
||
* @returns {Function} Returns the new function.
|
||
* @example
|
||
*
|
||
* var func = _.overEvery([Boolean, isFinite]);
|
||
*
|
||
* func('1');
|
||
* // => true
|
||
*
|
||
* func(null);
|
||
* // => false
|
||
*
|
||
* func(NaN);
|
||
* // => false
|
||
*/
|
||
var overEvery = createOver(arrayEvery);
|
||
|
||
/**
|
||
* Creates a function that checks if **any** of the `predicates` return
|
||
* truthy when invoked with the arguments it receives.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Util
|
||
* @param {...(Function|Function[])} [predicates=[_.identity]]
|
||
* The predicates to check.
|
||
* @returns {Function} Returns the new function.
|
||
* @example
|
||
*
|
||
* var func = _.overSome([Boolean, isFinite]);
|
||
*
|
||
* func('1');
|
||
* // => true
|
||
*
|
||
* func(null);
|
||
* // => true
|
||
*
|
||
* func(NaN);
|
||
* // => false
|
||
*/
|
||
var overSome = createOver(arraySome);
|
||
|
||
/**
|
||
* Creates a function that returns the value at `path` of a given object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.4.0
|
||
* @category Util
|
||
* @param {Array|string} path The path of the property to get.
|
||
* @returns {Function} Returns the new accessor function.
|
||
* @example
|
||
*
|
||
* var objects = [
|
||
* { 'a': { 'b': 2 } },
|
||
* { 'a': { 'b': 1 } }
|
||
* ];
|
||
*
|
||
* _.map(objects, _.property('a.b'));
|
||
* // => [2, 1]
|
||
*
|
||
* _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
|
||
* // => [1, 2]
|
||
*/
|
||
function property(path) {
|
||
return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
|
||
}
|
||
|
||
/**
|
||
* The opposite of `_.property`; this method creates a function that returns
|
||
* the value at a given path of `object`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.0.0
|
||
* @category Util
|
||
* @param {Object} object The object to query.
|
||
* @returns {Function} Returns the new accessor function.
|
||
* @example
|
||
*
|
||
* var array = [0, 1, 2],
|
||
* object = { 'a': array, 'b': array, 'c': array };
|
||
*
|
||
* _.map(['a[2]', 'c[0]'], _.propertyOf(object));
|
||
* // => [2, 0]
|
||
*
|
||
* _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
|
||
* // => [2, 0]
|
||
*/
|
||
function propertyOf(object) {
|
||
return function(path) {
|
||
return object == null ? undefined : baseGet(object, path);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates an array of numbers (positive and/or negative) progressing from
|
||
* `start` up to, but not including, `end`. A step of `-1` is used if a negative
|
||
* `start` is specified without an `end` or `step`. If `end` is not specified,
|
||
* it's set to `start` with `start` then set to `0`.
|
||
*
|
||
* **Note:** JavaScript follows the IEEE-754 standard for resolving
|
||
* floating-point values which can produce unexpected results.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Util
|
||
* @param {number} [start=0] The start of the range.
|
||
* @param {number} end The end of the range.
|
||
* @param {number} [step=1] The value to increment or decrement by.
|
||
* @returns {Array} Returns the range of numbers.
|
||
* @see _.inRange, _.rangeRight
|
||
* @example
|
||
*
|
||
* _.range(4);
|
||
* // => [0, 1, 2, 3]
|
||
*
|
||
* _.range(-4);
|
||
* // => [0, -1, -2, -3]
|
||
*
|
||
* _.range(1, 5);
|
||
* // => [1, 2, 3, 4]
|
||
*
|
||
* _.range(0, 20, 5);
|
||
* // => [0, 5, 10, 15]
|
||
*
|
||
* _.range(0, -4, -1);
|
||
* // => [0, -1, -2, -3]
|
||
*
|
||
* _.range(1, 4, 0);
|
||
* // => [1, 1, 1]
|
||
*
|
||
* _.range(0);
|
||
* // => []
|
||
*/
|
||
var range = createRange();
|
||
|
||
/**
|
||
* This method is like `_.range` except that it populates values in
|
||
* descending order.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Util
|
||
* @param {number} [start=0] The start of the range.
|
||
* @param {number} end The end of the range.
|
||
* @param {number} [step=1] The value to increment or decrement by.
|
||
* @returns {Array} Returns the range of numbers.
|
||
* @see _.inRange, _.range
|
||
* @example
|
||
*
|
||
* _.rangeRight(4);
|
||
* // => [3, 2, 1, 0]
|
||
*
|
||
* _.rangeRight(-4);
|
||
* // => [-3, -2, -1, 0]
|
||
*
|
||
* _.rangeRight(1, 5);
|
||
* // => [4, 3, 2, 1]
|
||
*
|
||
* _.rangeRight(0, 20, 5);
|
||
* // => [15, 10, 5, 0]
|
||
*
|
||
* _.rangeRight(0, -4, -1);
|
||
* // => [-3, -2, -1, 0]
|
||
*
|
||
* _.rangeRight(1, 4, 0);
|
||
* // => [1, 1, 1]
|
||
*
|
||
* _.rangeRight(0);
|
||
* // => []
|
||
*/
|
||
var rangeRight = createRange(true);
|
||
|
||
/**
|
||
* This method returns a new empty array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.13.0
|
||
* @category Util
|
||
* @returns {Array} Returns the new empty array.
|
||
* @example
|
||
*
|
||
* var arrays = _.times(2, _.stubArray);
|
||
*
|
||
* console.log(arrays);
|
||
* // => [[], []]
|
||
*
|
||
* console.log(arrays[0] === arrays[1]);
|
||
* // => false
|
||
*/
|
||
function stubArray() {
|
||
return [];
|
||
}
|
||
|
||
/**
|
||
* This method returns `false`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.13.0
|
||
* @category Util
|
||
* @returns {boolean} Returns `false`.
|
||
* @example
|
||
*
|
||
* _.times(2, _.stubFalse);
|
||
* // => [false, false]
|
||
*/
|
||
function stubFalse() {
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* This method returns a new empty object.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.13.0
|
||
* @category Util
|
||
* @returns {Object} Returns the new empty object.
|
||
* @example
|
||
*
|
||
* var objects = _.times(2, _.stubObject);
|
||
*
|
||
* console.log(objects);
|
||
* // => [{}, {}]
|
||
*
|
||
* console.log(objects[0] === objects[1]);
|
||
* // => false
|
||
*/
|
||
function stubObject() {
|
||
return {};
|
||
}
|
||
|
||
/**
|
||
* This method returns an empty string.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.13.0
|
||
* @category Util
|
||
* @returns {string} Returns the empty string.
|
||
* @example
|
||
*
|
||
* _.times(2, _.stubString);
|
||
* // => ['', '']
|
||
*/
|
||
function stubString() {
|
||
return '';
|
||
}
|
||
|
||
/**
|
||
* This method returns `true`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.13.0
|
||
* @category Util
|
||
* @returns {boolean} Returns `true`.
|
||
* @example
|
||
*
|
||
* _.times(2, _.stubTrue);
|
||
* // => [true, true]
|
||
*/
|
||
function stubTrue() {
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Invokes the iteratee `n` times, returning an array of the results of
|
||
* each invocation. The iteratee is invoked with one argument; (index).
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Util
|
||
* @param {number} n The number of times to invoke `iteratee`.
|
||
* @param {Function} [iteratee=_.identity] The function invoked per iteration.
|
||
* @returns {Array} Returns the array of results.
|
||
* @example
|
||
*
|
||
* _.times(3, String);
|
||
* // => ['0', '1', '2']
|
||
*
|
||
* _.times(4, _.constant(0));
|
||
* // => [0, 0, 0, 0]
|
||
*/
|
||
function times(n, iteratee) {
|
||
n = toInteger(n);
|
||
if (n < 1 || n > MAX_SAFE_INTEGER) {
|
||
return [];
|
||
}
|
||
var index = MAX_ARRAY_LENGTH,
|
||
length = nativeMin(n, MAX_ARRAY_LENGTH);
|
||
|
||
iteratee = getIteratee(iteratee);
|
||
n -= MAX_ARRAY_LENGTH;
|
||
|
||
var result = baseTimes(length, iteratee);
|
||
while (++index < n) {
|
||
iteratee(index);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Converts `value` to a property path array.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Util
|
||
* @param {*} value The value to convert.
|
||
* @returns {Array} Returns the new property path array.
|
||
* @example
|
||
*
|
||
* _.toPath('a.b.c');
|
||
* // => ['a', 'b', 'c']
|
||
*
|
||
* _.toPath('a[0].b.c');
|
||
* // => ['a', '0', 'b', 'c']
|
||
*/
|
||
function toPath(value) {
|
||
if (isArray(value)) {
|
||
return arrayMap(value, toKey);
|
||
}
|
||
return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
|
||
}
|
||
|
||
/**
|
||
* Generates a unique ID. If `prefix` is given, the ID is appended to it.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Util
|
||
* @param {string} [prefix=''] The value to prefix the ID with.
|
||
* @returns {string} Returns the unique ID.
|
||
* @example
|
||
*
|
||
* _.uniqueId('contact_');
|
||
* // => 'contact_104'
|
||
*
|
||
* _.uniqueId();
|
||
* // => '105'
|
||
*/
|
||
function uniqueId(prefix) {
|
||
var id = ++idCounter;
|
||
return toString(prefix) + id;
|
||
}
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Adds two numbers.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.4.0
|
||
* @category Math
|
||
* @param {number} augend The first number in an addition.
|
||
* @param {number} addend The second number in an addition.
|
||
* @returns {number} Returns the total.
|
||
* @example
|
||
*
|
||
* _.add(6, 4);
|
||
* // => 10
|
||
*/
|
||
var add = createMathOperation(function(augend, addend) {
|
||
return augend + addend;
|
||
}, 0);
|
||
|
||
/**
|
||
* Computes `number` rounded up to `precision`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.10.0
|
||
* @category Math
|
||
* @param {number} number The number to round up.
|
||
* @param {number} [precision=0] The precision to round up to.
|
||
* @returns {number} Returns the rounded up number.
|
||
* @example
|
||
*
|
||
* _.ceil(4.006);
|
||
* // => 5
|
||
*
|
||
* _.ceil(6.004, 2);
|
||
* // => 6.01
|
||
*
|
||
* _.ceil(6040, -2);
|
||
* // => 6100
|
||
*/
|
||
var ceil = createRound('ceil');
|
||
|
||
/**
|
||
* Divide two numbers.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.7.0
|
||
* @category Math
|
||
* @param {number} dividend The first number in a division.
|
||
* @param {number} divisor The second number in a division.
|
||
* @returns {number} Returns the quotient.
|
||
* @example
|
||
*
|
||
* _.divide(6, 4);
|
||
* // => 1.5
|
||
*/
|
||
var divide = createMathOperation(function(dividend, divisor) {
|
||
return dividend / divisor;
|
||
}, 1);
|
||
|
||
/**
|
||
* Computes `number` rounded down to `precision`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.10.0
|
||
* @category Math
|
||
* @param {number} number The number to round down.
|
||
* @param {number} [precision=0] The precision to round down to.
|
||
* @returns {number} Returns the rounded down number.
|
||
* @example
|
||
*
|
||
* _.floor(4.006);
|
||
* // => 4
|
||
*
|
||
* _.floor(0.046, 2);
|
||
* // => 0.04
|
||
*
|
||
* _.floor(4060, -2);
|
||
* // => 4000
|
||
*/
|
||
var floor = createRound('floor');
|
||
|
||
/**
|
||
* Computes the maximum value of `array`. If `array` is empty or falsey,
|
||
* `undefined` is returned.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Math
|
||
* @param {Array} array The array to iterate over.
|
||
* @returns {*} Returns the maximum value.
|
||
* @example
|
||
*
|
||
* _.max([4, 2, 8, 6]);
|
||
* // => 8
|
||
*
|
||
* _.max([]);
|
||
* // => undefined
|
||
*/
|
||
function max(array) {
|
||
return (array && array.length)
|
||
? baseExtremum(array, identity, baseGt)
|
||
: undefined;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.max` except that it accepts `iteratee` which is
|
||
* invoked for each element in `array` to generate the criterion by which
|
||
* the value is ranked. The iteratee is invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Math
|
||
* @param {Array} array The array to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {*} Returns the maximum value.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'n': 1 }, { 'n': 2 }];
|
||
*
|
||
* _.maxBy(objects, function(o) { return o.n; });
|
||
* // => { 'n': 2 }
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.maxBy(objects, 'n');
|
||
* // => { 'n': 2 }
|
||
*/
|
||
function maxBy(array, iteratee) {
|
||
return (array && array.length)
|
||
? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
|
||
: undefined;
|
||
}
|
||
|
||
/**
|
||
* Computes the mean of the values in `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Math
|
||
* @param {Array} array The array to iterate over.
|
||
* @returns {number} Returns the mean.
|
||
* @example
|
||
*
|
||
* _.mean([4, 2, 8, 6]);
|
||
* // => 5
|
||
*/
|
||
function mean(array) {
|
||
return baseMean(array, identity);
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.mean` except that it accepts `iteratee` which is
|
||
* invoked for each element in `array` to generate the value to be averaged.
|
||
* The iteratee is invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.7.0
|
||
* @category Math
|
||
* @param {Array} array The array to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {number} Returns the mean.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
|
||
*
|
||
* _.meanBy(objects, function(o) { return o.n; });
|
||
* // => 5
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.meanBy(objects, 'n');
|
||
* // => 5
|
||
*/
|
||
function meanBy(array, iteratee) {
|
||
return baseMean(array, getIteratee(iteratee, 2));
|
||
}
|
||
|
||
/**
|
||
* Computes the minimum value of `array`. If `array` is empty or falsey,
|
||
* `undefined` is returned.
|
||
*
|
||
* @static
|
||
* @since 0.1.0
|
||
* @memberOf _
|
||
* @category Math
|
||
* @param {Array} array The array to iterate over.
|
||
* @returns {*} Returns the minimum value.
|
||
* @example
|
||
*
|
||
* _.min([4, 2, 8, 6]);
|
||
* // => 2
|
||
*
|
||
* _.min([]);
|
||
* // => undefined
|
||
*/
|
||
function min(array) {
|
||
return (array && array.length)
|
||
? baseExtremum(array, identity, baseLt)
|
||
: undefined;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.min` except that it accepts `iteratee` which is
|
||
* invoked for each element in `array` to generate the criterion by which
|
||
* the value is ranked. The iteratee is invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Math
|
||
* @param {Array} array The array to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {*} Returns the minimum value.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'n': 1 }, { 'n': 2 }];
|
||
*
|
||
* _.minBy(objects, function(o) { return o.n; });
|
||
* // => { 'n': 1 }
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.minBy(objects, 'n');
|
||
* // => { 'n': 1 }
|
||
*/
|
||
function minBy(array, iteratee) {
|
||
return (array && array.length)
|
||
? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
|
||
: undefined;
|
||
}
|
||
|
||
/**
|
||
* Multiply two numbers.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.7.0
|
||
* @category Math
|
||
* @param {number} multiplier The first number in a multiplication.
|
||
* @param {number} multiplicand The second number in a multiplication.
|
||
* @returns {number} Returns the product.
|
||
* @example
|
||
*
|
||
* _.multiply(6, 4);
|
||
* // => 24
|
||
*/
|
||
var multiply = createMathOperation(function(multiplier, multiplicand) {
|
||
return multiplier * multiplicand;
|
||
}, 1);
|
||
|
||
/**
|
||
* Computes `number` rounded to `precision`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.10.0
|
||
* @category Math
|
||
* @param {number} number The number to round.
|
||
* @param {number} [precision=0] The precision to round to.
|
||
* @returns {number} Returns the rounded number.
|
||
* @example
|
||
*
|
||
* _.round(4.006);
|
||
* // => 4
|
||
*
|
||
* _.round(4.006, 2);
|
||
* // => 4.01
|
||
*
|
||
* _.round(4060, -2);
|
||
* // => 4100
|
||
*/
|
||
var round = createRound('round');
|
||
|
||
/**
|
||
* Subtract two numbers.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Math
|
||
* @param {number} minuend The first number in a subtraction.
|
||
* @param {number} subtrahend The second number in a subtraction.
|
||
* @returns {number} Returns the difference.
|
||
* @example
|
||
*
|
||
* _.subtract(6, 4);
|
||
* // => 2
|
||
*/
|
||
var subtract = createMathOperation(function(minuend, subtrahend) {
|
||
return minuend - subtrahend;
|
||
}, 0);
|
||
|
||
/**
|
||
* Computes the sum of the values in `array`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 3.4.0
|
||
* @category Math
|
||
* @param {Array} array The array to iterate over.
|
||
* @returns {number} Returns the sum.
|
||
* @example
|
||
*
|
||
* _.sum([4, 2, 8, 6]);
|
||
* // => 20
|
||
*/
|
||
function sum(array) {
|
||
return (array && array.length)
|
||
? baseSum(array, identity)
|
||
: 0;
|
||
}
|
||
|
||
/**
|
||
* This method is like `_.sum` except that it accepts `iteratee` which is
|
||
* invoked for each element in `array` to generate the value to be summed.
|
||
* The iteratee is invoked with one argument: (value).
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 4.0.0
|
||
* @category Math
|
||
* @param {Array} array The array to iterate over.
|
||
* @param {Function} [iteratee=_.identity] The iteratee invoked per element.
|
||
* @returns {number} Returns the sum.
|
||
* @example
|
||
*
|
||
* var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
|
||
*
|
||
* _.sumBy(objects, function(o) { return o.n; });
|
||
* // => 20
|
||
*
|
||
* // The `_.property` iteratee shorthand.
|
||
* _.sumBy(objects, 'n');
|
||
* // => 20
|
||
*/
|
||
function sumBy(array, iteratee) {
|
||
return (array && array.length)
|
||
? baseSum(array, getIteratee(iteratee, 2))
|
||
: 0;
|
||
}
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
// Add methods that return wrapped values in chain sequences.
|
||
lodash.after = after;
|
||
lodash.ary = ary;
|
||
lodash.assign = assign;
|
||
lodash.assignIn = assignIn;
|
||
lodash.assignInWith = assignInWith;
|
||
lodash.assignWith = assignWith;
|
||
lodash.at = at;
|
||
lodash.before = before;
|
||
lodash.bind = bind;
|
||
lodash.bindAll = bindAll;
|
||
lodash.bindKey = bindKey;
|
||
lodash.castArray = castArray;
|
||
lodash.chain = chain;
|
||
lodash.chunk = chunk;
|
||
lodash.compact = compact;
|
||
lodash.concat = concat;
|
||
lodash.cond = cond;
|
||
lodash.conforms = conforms;
|
||
lodash.constant = constant;
|
||
lodash.countBy = countBy;
|
||
lodash.create = create;
|
||
lodash.curry = curry;
|
||
lodash.curryRight = curryRight;
|
||
lodash.debounce = debounce;
|
||
lodash.defaults = defaults;
|
||
lodash.defaultsDeep = defaultsDeep;
|
||
lodash.defer = defer;
|
||
lodash.delay = delay;
|
||
lodash.difference = difference;
|
||
lodash.differenceBy = differenceBy;
|
||
lodash.differenceWith = differenceWith;
|
||
lodash.drop = drop;
|
||
lodash.dropRight = dropRight;
|
||
lodash.dropRightWhile = dropRightWhile;
|
||
lodash.dropWhile = dropWhile;
|
||
lodash.fill = fill;
|
||
lodash.filter = filter;
|
||
lodash.flatMap = flatMap;
|
||
lodash.flatMapDeep = flatMapDeep;
|
||
lodash.flatMapDepth = flatMapDepth;
|
||
lodash.flatten = flatten;
|
||
lodash.flattenDeep = flattenDeep;
|
||
lodash.flattenDepth = flattenDepth;
|
||
lodash.flip = flip;
|
||
lodash.flow = flow;
|
||
lodash.flowRight = flowRight;
|
||
lodash.fromPairs = fromPairs;
|
||
lodash.functions = functions;
|
||
lodash.functionsIn = functionsIn;
|
||
lodash.groupBy = groupBy;
|
||
lodash.initial = initial;
|
||
lodash.intersection = intersection;
|
||
lodash.intersectionBy = intersectionBy;
|
||
lodash.intersectionWith = intersectionWith;
|
||
lodash.invert = invert;
|
||
lodash.invertBy = invertBy;
|
||
lodash.invokeMap = invokeMap;
|
||
lodash.iteratee = iteratee;
|
||
lodash.keyBy = keyBy;
|
||
lodash.keys = keys;
|
||
lodash.keysIn = keysIn;
|
||
lodash.map = map;
|
||
lodash.mapKeys = mapKeys;
|
||
lodash.mapValues = mapValues;
|
||
lodash.matches = matches;
|
||
lodash.matchesProperty = matchesProperty;
|
||
lodash.memoize = memoize;
|
||
lodash.merge = merge;
|
||
lodash.mergeWith = mergeWith;
|
||
lodash.method = method;
|
||
lodash.methodOf = methodOf;
|
||
lodash.mixin = mixin;
|
||
lodash.negate = negate;
|
||
lodash.nthArg = nthArg;
|
||
lodash.omit = omit;
|
||
lodash.omitBy = omitBy;
|
||
lodash.once = once;
|
||
lodash.orderBy = orderBy;
|
||
lodash.over = over;
|
||
lodash.overArgs = overArgs;
|
||
lodash.overEvery = overEvery;
|
||
lodash.overSome = overSome;
|
||
lodash.partial = partial;
|
||
lodash.partialRight = partialRight;
|
||
lodash.partition = partition;
|
||
lodash.pick = pick;
|
||
lodash.pickBy = pickBy;
|
||
lodash.property = property;
|
||
lodash.propertyOf = propertyOf;
|
||
lodash.pull = pull;
|
||
lodash.pullAll = pullAll;
|
||
lodash.pullAllBy = pullAllBy;
|
||
lodash.pullAllWith = pullAllWith;
|
||
lodash.pullAt = pullAt;
|
||
lodash.range = range;
|
||
lodash.rangeRight = rangeRight;
|
||
lodash.rearg = rearg;
|
||
lodash.reject = reject;
|
||
lodash.remove = remove;
|
||
lodash.rest = rest;
|
||
lodash.reverse = reverse;
|
||
lodash.sampleSize = sampleSize;
|
||
lodash.set = set;
|
||
lodash.setWith = setWith;
|
||
lodash.shuffle = shuffle;
|
||
lodash.slice = slice;
|
||
lodash.sortBy = sortBy;
|
||
lodash.sortedUniq = sortedUniq;
|
||
lodash.sortedUniqBy = sortedUniqBy;
|
||
lodash.split = split;
|
||
lodash.spread = spread;
|
||
lodash.tail = tail;
|
||
lodash.take = take;
|
||
lodash.takeRight = takeRight;
|
||
lodash.takeRightWhile = takeRightWhile;
|
||
lodash.takeWhile = takeWhile;
|
||
lodash.tap = tap;
|
||
lodash.throttle = throttle;
|
||
lodash.thru = thru;
|
||
lodash.toArray = toArray;
|
||
lodash.toPairs = toPairs;
|
||
lodash.toPairsIn = toPairsIn;
|
||
lodash.toPath = toPath;
|
||
lodash.toPlainObject = toPlainObject;
|
||
lodash.transform = transform;
|
||
lodash.unary = unary;
|
||
lodash.union = union;
|
||
lodash.unionBy = unionBy;
|
||
lodash.unionWith = unionWith;
|
||
lodash.uniq = uniq;
|
||
lodash.uniqBy = uniqBy;
|
||
lodash.uniqWith = uniqWith;
|
||
lodash.unset = unset;
|
||
lodash.unzip = unzip;
|
||
lodash.unzipWith = unzipWith;
|
||
lodash.update = update;
|
||
lodash.updateWith = updateWith;
|
||
lodash.values = values;
|
||
lodash.valuesIn = valuesIn;
|
||
lodash.without = without;
|
||
lodash.words = words;
|
||
lodash.wrap = wrap;
|
||
lodash.xor = xor;
|
||
lodash.xorBy = xorBy;
|
||
lodash.xorWith = xorWith;
|
||
lodash.zip = zip;
|
||
lodash.zipObject = zipObject;
|
||
lodash.zipObjectDeep = zipObjectDeep;
|
||
lodash.zipWith = zipWith;
|
||
|
||
// Add aliases.
|
||
lodash.entries = toPairs;
|
||
lodash.entriesIn = toPairsIn;
|
||
lodash.extend = assignIn;
|
||
lodash.extendWith = assignInWith;
|
||
|
||
// Add methods to `lodash.prototype`.
|
||
mixin(lodash, lodash);
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
// Add methods that return unwrapped values in chain sequences.
|
||
lodash.add = add;
|
||
lodash.attempt = attempt;
|
||
lodash.camelCase = camelCase;
|
||
lodash.capitalize = capitalize;
|
||
lodash.ceil = ceil;
|
||
lodash.clamp = clamp;
|
||
lodash.clone = clone;
|
||
lodash.cloneDeep = cloneDeep;
|
||
lodash.cloneDeepWith = cloneDeepWith;
|
||
lodash.cloneWith = cloneWith;
|
||
lodash.conformsTo = conformsTo;
|
||
lodash.deburr = deburr;
|
||
lodash.defaultTo = defaultTo;
|
||
lodash.divide = divide;
|
||
lodash.endsWith = endsWith;
|
||
lodash.eq = eq;
|
||
lodash.escape = escape;
|
||
lodash.escapeRegExp = escapeRegExp;
|
||
lodash.every = every;
|
||
lodash.find = find;
|
||
lodash.findIndex = findIndex;
|
||
lodash.findKey = findKey;
|
||
lodash.findLast = findLast;
|
||
lodash.findLastIndex = findLastIndex;
|
||
lodash.findLastKey = findLastKey;
|
||
lodash.floor = floor;
|
||
lodash.forEach = forEach;
|
||
lodash.forEachRight = forEachRight;
|
||
lodash.forIn = forIn;
|
||
lodash.forInRight = forInRight;
|
||
lodash.forOwn = forOwn;
|
||
lodash.forOwnRight = forOwnRight;
|
||
lodash.get = get;
|
||
lodash.gt = gt;
|
||
lodash.gte = gte;
|
||
lodash.has = has;
|
||
lodash.hasIn = hasIn;
|
||
lodash.head = head;
|
||
lodash.identity = identity;
|
||
lodash.includes = includes;
|
||
lodash.indexOf = indexOf;
|
||
lodash.inRange = inRange;
|
||
lodash.invoke = invoke;
|
||
lodash.isArguments = isArguments;
|
||
lodash.isArray = isArray;
|
||
lodash.isArrayBuffer = isArrayBuffer;
|
||
lodash.isArrayLike = isArrayLike;
|
||
lodash.isArrayLikeObject = isArrayLikeObject;
|
||
lodash.isBoolean = isBoolean;
|
||
lodash.isBuffer = isBuffer;
|
||
lodash.isDate = isDate;
|
||
lodash.isElement = isElement;
|
||
lodash.isEmpty = isEmpty;
|
||
lodash.isEqual = isEqual;
|
||
lodash.isEqualWith = isEqualWith;
|
||
lodash.isError = isError;
|
||
lodash.isFinite = isFinite;
|
||
lodash.isFunction = isFunction;
|
||
lodash.isInteger = isInteger;
|
||
lodash.isLength = isLength;
|
||
lodash.isMap = isMap;
|
||
lodash.isMatch = isMatch;
|
||
lodash.isMatchWith = isMatchWith;
|
||
lodash.isNaN = isNaN;
|
||
lodash.isNative = isNative;
|
||
lodash.isNil = isNil;
|
||
lodash.isNull = isNull;
|
||
lodash.isNumber = isNumber;
|
||
lodash.isObject = isObject;
|
||
lodash.isObjectLike = isObjectLike;
|
||
lodash.isPlainObject = isPlainObject;
|
||
lodash.isRegExp = isRegExp;
|
||
lodash.isSafeInteger = isSafeInteger;
|
||
lodash.isSet = isSet;
|
||
lodash.isString = isString;
|
||
lodash.isSymbol = isSymbol;
|
||
lodash.isTypedArray = isTypedArray;
|
||
lodash.isUndefined = isUndefined;
|
||
lodash.isWeakMap = isWeakMap;
|
||
lodash.isWeakSet = isWeakSet;
|
||
lodash.join = join;
|
||
lodash.kebabCase = kebabCase;
|
||
lodash.last = last;
|
||
lodash.lastIndexOf = lastIndexOf;
|
||
lodash.lowerCase = lowerCase;
|
||
lodash.lowerFirst = lowerFirst;
|
||
lodash.lt = lt;
|
||
lodash.lte = lte;
|
||
lodash.max = max;
|
||
lodash.maxBy = maxBy;
|
||
lodash.mean = mean;
|
||
lodash.meanBy = meanBy;
|
||
lodash.min = min;
|
||
lodash.minBy = minBy;
|
||
lodash.stubArray = stubArray;
|
||
lodash.stubFalse = stubFalse;
|
||
lodash.stubObject = stubObject;
|
||
lodash.stubString = stubString;
|
||
lodash.stubTrue = stubTrue;
|
||
lodash.multiply = multiply;
|
||
lodash.nth = nth;
|
||
lodash.noConflict = noConflict;
|
||
lodash.noop = noop;
|
||
lodash.now = now;
|
||
lodash.pad = pad;
|
||
lodash.padEnd = padEnd;
|
||
lodash.padStart = padStart;
|
||
lodash.parseInt = parseInt;
|
||
lodash.random = random;
|
||
lodash.reduce = reduce;
|
||
lodash.reduceRight = reduceRight;
|
||
lodash.repeat = repeat;
|
||
lodash.replace = replace;
|
||
lodash.result = result;
|
||
lodash.round = round;
|
||
lodash.runInContext = runInContext;
|
||
lodash.sample = sample;
|
||
lodash.size = size;
|
||
lodash.snakeCase = snakeCase;
|
||
lodash.some = some;
|
||
lodash.sortedIndex = sortedIndex;
|
||
lodash.sortedIndexBy = sortedIndexBy;
|
||
lodash.sortedIndexOf = sortedIndexOf;
|
||
lodash.sortedLastIndex = sortedLastIndex;
|
||
lodash.sortedLastIndexBy = sortedLastIndexBy;
|
||
lodash.sortedLastIndexOf = sortedLastIndexOf;
|
||
lodash.startCase = startCase;
|
||
lodash.startsWith = startsWith;
|
||
lodash.subtract = subtract;
|
||
lodash.sum = sum;
|
||
lodash.sumBy = sumBy;
|
||
lodash.template = template;
|
||
lodash.times = times;
|
||
lodash.toFinite = toFinite;
|
||
lodash.toInteger = toInteger;
|
||
lodash.toLength = toLength;
|
||
lodash.toLower = toLower;
|
||
lodash.toNumber = toNumber;
|
||
lodash.toSafeInteger = toSafeInteger;
|
||
lodash.toString = toString;
|
||
lodash.toUpper = toUpper;
|
||
lodash.trim = trim;
|
||
lodash.trimEnd = trimEnd;
|
||
lodash.trimStart = trimStart;
|
||
lodash.truncate = truncate;
|
||
lodash.unescape = unescape;
|
||
lodash.uniqueId = uniqueId;
|
||
lodash.upperCase = upperCase;
|
||
lodash.upperFirst = upperFirst;
|
||
|
||
// Add aliases.
|
||
lodash.each = forEach;
|
||
lodash.eachRight = forEachRight;
|
||
lodash.first = head;
|
||
|
||
mixin(lodash, (function() {
|
||
var source = {};
|
||
baseForOwn(lodash, function(func, methodName) {
|
||
if (!hasOwnProperty.call(lodash.prototype, methodName)) {
|
||
source[methodName] = func;
|
||
}
|
||
});
|
||
return source;
|
||
}()), { 'chain': false });
|
||
|
||
/*------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* The semantic version number.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @type {string}
|
||
*/
|
||
lodash.VERSION = VERSION;
|
||
|
||
// Assign default placeholders.
|
||
arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
|
||
lodash[methodName].placeholder = lodash;
|
||
});
|
||
|
||
// Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
|
||
arrayEach(['drop', 'take'], function(methodName, index) {
|
||
LazyWrapper.prototype[methodName] = function(n) {
|
||
n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
|
||
|
||
var result = (this.__filtered__ && !index)
|
||
? new LazyWrapper(this)
|
||
: this.clone();
|
||
|
||
if (result.__filtered__) {
|
||
result.__takeCount__ = nativeMin(n, result.__takeCount__);
|
||
} else {
|
||
result.__views__.push({
|
||
'size': nativeMin(n, MAX_ARRAY_LENGTH),
|
||
'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
|
||
});
|
||
}
|
||
return result;
|
||
};
|
||
|
||
LazyWrapper.prototype[methodName + 'Right'] = function(n) {
|
||
return this.reverse()[methodName](n).reverse();
|
||
};
|
||
});
|
||
|
||
// Add `LazyWrapper` methods that accept an `iteratee` value.
|
||
arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
|
||
var type = index + 1,
|
||
isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
|
||
|
||
LazyWrapper.prototype[methodName] = function(iteratee) {
|
||
var result = this.clone();
|
||
result.__iteratees__.push({
|
||
'iteratee': getIteratee(iteratee, 3),
|
||
'type': type
|
||
});
|
||
result.__filtered__ = result.__filtered__ || isFilter;
|
||
return result;
|
||
};
|
||
});
|
||
|
||
// Add `LazyWrapper` methods for `_.head` and `_.last`.
|
||
arrayEach(['head', 'last'], function(methodName, index) {
|
||
var takeName = 'take' + (index ? 'Right' : '');
|
||
|
||
LazyWrapper.prototype[methodName] = function() {
|
||
return this[takeName](1).value()[0];
|
||
};
|
||
});
|
||
|
||
// Add `LazyWrapper` methods for `_.initial` and `_.tail`.
|
||
arrayEach(['initial', 'tail'], function(methodName, index) {
|
||
var dropName = 'drop' + (index ? '' : 'Right');
|
||
|
||
LazyWrapper.prototype[methodName] = function() {
|
||
return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
|
||
};
|
||
});
|
||
|
||
LazyWrapper.prototype.compact = function() {
|
||
return this.filter(identity);
|
||
};
|
||
|
||
LazyWrapper.prototype.find = function(predicate) {
|
||
return this.filter(predicate).head();
|
||
};
|
||
|
||
LazyWrapper.prototype.findLast = function(predicate) {
|
||
return this.reverse().find(predicate);
|
||
};
|
||
|
||
LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
|
||
if (typeof path == 'function') {
|
||
return new LazyWrapper(this);
|
||
}
|
||
return this.map(function(value) {
|
||
return baseInvoke(value, path, args);
|
||
});
|
||
});
|
||
|
||
LazyWrapper.prototype.reject = function(predicate) {
|
||
return this.filter(negate(getIteratee(predicate)));
|
||
};
|
||
|
||
LazyWrapper.prototype.slice = function(start, end) {
|
||
start = toInteger(start);
|
||
|
||
var result = this;
|
||
if (result.__filtered__ && (start > 0 || end < 0)) {
|
||
return new LazyWrapper(result);
|
||
}
|
||
if (start < 0) {
|
||
result = result.takeRight(-start);
|
||
} else if (start) {
|
||
result = result.drop(start);
|
||
}
|
||
if (end !== undefined) {
|
||
end = toInteger(end);
|
||
result = end < 0 ? result.dropRight(-end) : result.take(end - start);
|
||
}
|
||
return result;
|
||
};
|
||
|
||
LazyWrapper.prototype.takeRightWhile = function(predicate) {
|
||
return this.reverse().takeWhile(predicate).reverse();
|
||
};
|
||
|
||
LazyWrapper.prototype.toArray = function() {
|
||
return this.take(MAX_ARRAY_LENGTH);
|
||
};
|
||
|
||
// Add `LazyWrapper` methods to `lodash.prototype`.
|
||
baseForOwn(LazyWrapper.prototype, function(func, methodName) {
|
||
var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
|
||
isTaker = /^(?:head|last)$/.test(methodName),
|
||
lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
|
||
retUnwrapped = isTaker || /^find/.test(methodName);
|
||
|
||
if (!lodashFunc) {
|
||
return;
|
||
}
|
||
lodash.prototype[methodName] = function() {
|
||
var value = this.__wrapped__,
|
||
args = isTaker ? [1] : arguments,
|
||
isLazy = value instanceof LazyWrapper,
|
||
iteratee = args[0],
|
||
useLazy = isLazy || isArray(value);
|
||
|
||
var interceptor = function(value) {
|
||
var result = lodashFunc.apply(lodash, arrayPush([value], args));
|
||
return (isTaker && chainAll) ? result[0] : result;
|
||
};
|
||
|
||
if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
|
||
// Avoid lazy use if the iteratee has a "length" value other than `1`.
|
||
isLazy = useLazy = false;
|
||
}
|
||
var chainAll = this.__chain__,
|
||
isHybrid = !!this.__actions__.length,
|
||
isUnwrapped = retUnwrapped && !chainAll,
|
||
onlyLazy = isLazy && !isHybrid;
|
||
|
||
if (!retUnwrapped && useLazy) {
|
||
value = onlyLazy ? value : new LazyWrapper(this);
|
||
var result = func.apply(value, args);
|
||
result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
|
||
return new LodashWrapper(result, chainAll);
|
||
}
|
||
if (isUnwrapped && onlyLazy) {
|
||
return func.apply(this, args);
|
||
}
|
||
result = this.thru(interceptor);
|
||
return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
|
||
};
|
||
});
|
||
|
||
// Add `Array` methods to `lodash.prototype`.
|
||
arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
|
||
var func = arrayProto[methodName],
|
||
chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
|
||
retUnwrapped = /^(?:pop|shift)$/.test(methodName);
|
||
|
||
lodash.prototype[methodName] = function() {
|
||
var args = arguments;
|
||
if (retUnwrapped && !this.__chain__) {
|
||
var value = this.value();
|
||
return func.apply(isArray(value) ? value : [], args);
|
||
}
|
||
return this[chainName](function(value) {
|
||
return func.apply(isArray(value) ? value : [], args);
|
||
});
|
||
};
|
||
});
|
||
|
||
// Map minified method names to their real names.
|
||
baseForOwn(LazyWrapper.prototype, function(func, methodName) {
|
||
var lodashFunc = lodash[methodName];
|
||
if (lodashFunc) {
|
||
var key = (lodashFunc.name + ''),
|
||
names = realNames[key] || (realNames[key] = []);
|
||
|
||
names.push({ 'name': methodName, 'func': lodashFunc });
|
||
}
|
||
});
|
||
|
||
realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
|
||
'name': 'wrapper',
|
||
'func': undefined
|
||
}];
|
||
|
||
// Add methods to `LazyWrapper`.
|
||
LazyWrapper.prototype.clone = lazyClone;
|
||
LazyWrapper.prototype.reverse = lazyReverse;
|
||
LazyWrapper.prototype.value = lazyValue;
|
||
|
||
// Add chain sequence methods to the `lodash` wrapper.
|
||
lodash.prototype.at = wrapperAt;
|
||
lodash.prototype.chain = wrapperChain;
|
||
lodash.prototype.commit = wrapperCommit;
|
||
lodash.prototype.next = wrapperNext;
|
||
lodash.prototype.plant = wrapperPlant;
|
||
lodash.prototype.reverse = wrapperReverse;
|
||
lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
|
||
|
||
// Add lazy aliases.
|
||
lodash.prototype.first = lodash.prototype.head;
|
||
|
||
if (symIterator) {
|
||
lodash.prototype[symIterator] = wrapperToIterator;
|
||
}
|
||
return lodash;
|
||
});
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
// Export lodash.
|
||
var _ = runInContext();
|
||
|
||
// Some AMD build optimizers, like r.js, check for condition patterns like:
|
||
if (true) {
|
||
// Expose Lodash on the global object to prevent errors when Lodash is
|
||
// loaded by a script tag in the presence of an AMD loader.
|
||
// See http://requirejs.org/docs/errors.html#mismatch for more details.
|
||
// Use `_.noConflict` to remove Lodash from the global object.
|
||
root._ = _;
|
||
|
||
// Define as an anonymous module so, through path mapping, it can be
|
||
// referenced as the "underscore" module.
|
||
!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
|
||
return _;
|
||
}).call(exports, __webpack_require__, exports, module),
|
||
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||
}
|
||
// Check for `exports` after `define` in case a build optimizer adds it.
|
||
else if (freeModule) {
|
||
// Export for Node.js.
|
||
(freeModule.exports = _)._ = _;
|
||
// Export for CommonJS support.
|
||
freeExports._ = _;
|
||
}
|
||
else {
|
||
// Export to the global object.
|
||
root._ = _;
|
||
}
|
||
}.call(this));
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/webpack/buildin/global.js"), __webpack_require__("./node_modules/webpack/buildin/module.js")(module)))
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/process/browser.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
// shim for using process in browser
|
||
var process = module.exports = {};
|
||
|
||
// cached from whatever global is present so that test runners that stub it
|
||
// don't break things. But we need to wrap it in a try catch in case it is
|
||
// wrapped in strict mode code which doesn't define any globals. It's inside a
|
||
// function because try/catches deoptimize in certain engines.
|
||
|
||
var cachedSetTimeout;
|
||
var cachedClearTimeout;
|
||
|
||
function defaultSetTimout() {
|
||
throw new Error('setTimeout has not been defined');
|
||
}
|
||
function defaultClearTimeout () {
|
||
throw new Error('clearTimeout has not been defined');
|
||
}
|
||
(function () {
|
||
try {
|
||
if (typeof setTimeout === 'function') {
|
||
cachedSetTimeout = setTimeout;
|
||
} else {
|
||
cachedSetTimeout = defaultSetTimout;
|
||
}
|
||
} catch (e) {
|
||
cachedSetTimeout = defaultSetTimout;
|
||
}
|
||
try {
|
||
if (typeof clearTimeout === 'function') {
|
||
cachedClearTimeout = clearTimeout;
|
||
} else {
|
||
cachedClearTimeout = defaultClearTimeout;
|
||
}
|
||
} catch (e) {
|
||
cachedClearTimeout = defaultClearTimeout;
|
||
}
|
||
} ())
|
||
function runTimeout(fun) {
|
||
if (cachedSetTimeout === setTimeout) {
|
||
//normal enviroments in sane situations
|
||
return setTimeout(fun, 0);
|
||
}
|
||
// if setTimeout wasn't available but was latter defined
|
||
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
|
||
cachedSetTimeout = setTimeout;
|
||
return setTimeout(fun, 0);
|
||
}
|
||
try {
|
||
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||
return cachedSetTimeout(fun, 0);
|
||
} catch(e){
|
||
try {
|
||
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||
return cachedSetTimeout.call(null, fun, 0);
|
||
} catch(e){
|
||
// 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
|
||
return cachedSetTimeout.call(this, fun, 0);
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
function runClearTimeout(marker) {
|
||
if (cachedClearTimeout === clearTimeout) {
|
||
//normal enviroments in sane situations
|
||
return clearTimeout(marker);
|
||
}
|
||
// if clearTimeout wasn't available but was latter defined
|
||
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
|
||
cachedClearTimeout = clearTimeout;
|
||
return clearTimeout(marker);
|
||
}
|
||
try {
|
||
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||
return cachedClearTimeout(marker);
|
||
} catch (e){
|
||
try {
|
||
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||
return cachedClearTimeout.call(null, marker);
|
||
} catch (e){
|
||
// 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.
|
||
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
|
||
return cachedClearTimeout.call(this, marker);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
}
|
||
var queue = [];
|
||
var draining = false;
|
||
var currentQueue;
|
||
var queueIndex = -1;
|
||
|
||
function cleanUpNextTick() {
|
||
if (!draining || !currentQueue) {
|
||
return;
|
||
}
|
||
draining = false;
|
||
if (currentQueue.length) {
|
||
queue = currentQueue.concat(queue);
|
||
} else {
|
||
queueIndex = -1;
|
||
}
|
||
if (queue.length) {
|
||
drainQueue();
|
||
}
|
||
}
|
||
|
||
function drainQueue() {
|
||
if (draining) {
|
||
return;
|
||
}
|
||
var timeout = runTimeout(cleanUpNextTick);
|
||
draining = true;
|
||
|
||
var len = queue.length;
|
||
while(len) {
|
||
currentQueue = queue;
|
||
queue = [];
|
||
while (++queueIndex < len) {
|
||
if (currentQueue) {
|
||
currentQueue[queueIndex].run();
|
||
}
|
||
}
|
||
queueIndex = -1;
|
||
len = queue.length;
|
||
}
|
||
currentQueue = null;
|
||
draining = false;
|
||
runClearTimeout(timeout);
|
||
}
|
||
|
||
process.nextTick = function (fun) {
|
||
var args = new Array(arguments.length - 1);
|
||
if (arguments.length > 1) {
|
||
for (var i = 1; i < arguments.length; i++) {
|
||
args[i - 1] = arguments[i];
|
||
}
|
||
}
|
||
queue.push(new Item(fun, args));
|
||
if (queue.length === 1 && !draining) {
|
||
runTimeout(drainQueue);
|
||
}
|
||
};
|
||
|
||
// v8 likes predictible objects
|
||
function Item(fun, array) {
|
||
this.fun = fun;
|
||
this.array = array;
|
||
}
|
||
Item.prototype.run = function () {
|
||
this.fun.apply(null, this.array);
|
||
};
|
||
process.title = 'browser';
|
||
process.browser = true;
|
||
process.env = {};
|
||
process.argv = [];
|
||
process.version = ''; // empty string to avoid regexp issues
|
||
process.versions = {};
|
||
|
||
function noop() {}
|
||
|
||
process.on = noop;
|
||
process.addListener = noop;
|
||
process.once = noop;
|
||
process.off = noop;
|
||
process.removeListener = noop;
|
||
process.removeAllListeners = noop;
|
||
process.emit = noop;
|
||
process.prependListener = noop;
|
||
process.prependOnceListener = noop;
|
||
|
||
process.listeners = function (name) { return [] }
|
||
|
||
process.binding = function (name) {
|
||
throw new Error('process.binding is not supported');
|
||
};
|
||
|
||
process.cwd = function () { return '/' };
|
||
process.chdir = function (dir) {
|
||
throw new Error('process.chdir is not supported');
|
||
};
|
||
process.umask = function() { return 0; };
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/setimmediate/setImmediate.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
|
||
"use strict";
|
||
|
||
if (global.setImmediate) {
|
||
return;
|
||
}
|
||
|
||
var nextHandle = 1; // Spec says greater than zero
|
||
var tasksByHandle = {};
|
||
var currentlyRunningATask = false;
|
||
var doc = global.document;
|
||
var registerImmediate;
|
||
|
||
function setImmediate(callback) {
|
||
// Callback can either be a function or a string
|
||
if (typeof callback !== "function") {
|
||
callback = new Function("" + callback);
|
||
}
|
||
// Copy function arguments
|
||
var args = new Array(arguments.length - 1);
|
||
for (var i = 0; i < args.length; i++) {
|
||
args[i] = arguments[i + 1];
|
||
}
|
||
// Store and register the task
|
||
var task = { callback: callback, args: args };
|
||
tasksByHandle[nextHandle] = task;
|
||
registerImmediate(nextHandle);
|
||
return nextHandle++;
|
||
}
|
||
|
||
function clearImmediate(handle) {
|
||
delete tasksByHandle[handle];
|
||
}
|
||
|
||
function run(task) {
|
||
var callback = task.callback;
|
||
var args = task.args;
|
||
switch (args.length) {
|
||
case 0:
|
||
callback();
|
||
break;
|
||
case 1:
|
||
callback(args[0]);
|
||
break;
|
||
case 2:
|
||
callback(args[0], args[1]);
|
||
break;
|
||
case 3:
|
||
callback(args[0], args[1], args[2]);
|
||
break;
|
||
default:
|
||
callback.apply(undefined, args);
|
||
break;
|
||
}
|
||
}
|
||
|
||
function runIfPresent(handle) {
|
||
// From the spec: "Wait until any invocations of this algorithm started before this one have completed."
|
||
// So if we're currently running a task, we'll need to delay this invocation.
|
||
if (currentlyRunningATask) {
|
||
// Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
|
||
// "too much recursion" error.
|
||
setTimeout(runIfPresent, 0, handle);
|
||
} else {
|
||
var task = tasksByHandle[handle];
|
||
if (task) {
|
||
currentlyRunningATask = true;
|
||
try {
|
||
run(task);
|
||
} finally {
|
||
clearImmediate(handle);
|
||
currentlyRunningATask = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function installNextTickImplementation() {
|
||
registerImmediate = function(handle) {
|
||
process.nextTick(function () { runIfPresent(handle); });
|
||
};
|
||
}
|
||
|
||
function canUsePostMessage() {
|
||
// The test against `importScripts` prevents this implementation from being installed inside a web worker,
|
||
// where `global.postMessage` means something completely different and can't be used for this purpose.
|
||
if (global.postMessage && !global.importScripts) {
|
||
var postMessageIsAsynchronous = true;
|
||
var oldOnMessage = global.onmessage;
|
||
global.onmessage = function() {
|
||
postMessageIsAsynchronous = false;
|
||
};
|
||
global.postMessage("", "*");
|
||
global.onmessage = oldOnMessage;
|
||
return postMessageIsAsynchronous;
|
||
}
|
||
}
|
||
|
||
function installPostMessageImplementation() {
|
||
// Installs an event handler on `global` for the `message` event: see
|
||
// * https://developer.mozilla.org/en/DOM/window.postMessage
|
||
// * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
|
||
|
||
var messagePrefix = "setImmediate$" + Math.random() + "$";
|
||
var onGlobalMessage = function(event) {
|
||
if (event.source === global &&
|
||
typeof event.data === "string" &&
|
||
event.data.indexOf(messagePrefix) === 0) {
|
||
runIfPresent(+event.data.slice(messagePrefix.length));
|
||
}
|
||
};
|
||
|
||
if (global.addEventListener) {
|
||
global.addEventListener("message", onGlobalMessage, false);
|
||
} else {
|
||
global.attachEvent("onmessage", onGlobalMessage);
|
||
}
|
||
|
||
registerImmediate = function(handle) {
|
||
global.postMessage(messagePrefix + handle, "*");
|
||
};
|
||
}
|
||
|
||
function installMessageChannelImplementation() {
|
||
var channel = new MessageChannel();
|
||
channel.port1.onmessage = function(event) {
|
||
var handle = event.data;
|
||
runIfPresent(handle);
|
||
};
|
||
|
||
registerImmediate = function(handle) {
|
||
channel.port2.postMessage(handle);
|
||
};
|
||
}
|
||
|
||
function installReadyStateChangeImplementation() {
|
||
var html = doc.documentElement;
|
||
registerImmediate = function(handle) {
|
||
// Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
|
||
// into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
|
||
var script = doc.createElement("script");
|
||
script.onreadystatechange = function () {
|
||
runIfPresent(handle);
|
||
script.onreadystatechange = null;
|
||
html.removeChild(script);
|
||
script = null;
|
||
};
|
||
html.appendChild(script);
|
||
};
|
||
}
|
||
|
||
function installSetTimeoutImplementation() {
|
||
registerImmediate = function(handle) {
|
||
setTimeout(runIfPresent, 0, handle);
|
||
};
|
||
}
|
||
|
||
// If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
|
||
var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
|
||
attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
|
||
|
||
// Don't get fooled by e.g. browserify environments.
|
||
if ({}.toString.call(global.process) === "[object process]") {
|
||
// For Node.js before 0.9
|
||
installNextTickImplementation();
|
||
|
||
} else if (canUsePostMessage()) {
|
||
// For non-IE10 modern browsers
|
||
installPostMessageImplementation();
|
||
|
||
} else if (global.MessageChannel) {
|
||
// For web workers, where supported
|
||
installMessageChannelImplementation();
|
||
|
||
} else if (doc && "onreadystatechange" in doc.createElement("script")) {
|
||
// For IE 6–8
|
||
installReadyStateChangeImplementation();
|
||
|
||
} else {
|
||
// For older browsers
|
||
installSetTimeoutImplementation();
|
||
}
|
||
|
||
attachTo.setImmediate = setImmediate;
|
||
attachTo.clearImmediate = clearImmediate;
|
||
}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/webpack/buildin/global.js"), __webpack_require__("./node_modules/process/browser.js")))
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/style-loader/lib/addStyles.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*
|
||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||
Author Tobias Koppers @sokra
|
||
*/
|
||
|
||
var stylesInDom = {};
|
||
|
||
var memoize = function (fn) {
|
||
var memo;
|
||
|
||
return function () {
|
||
if (typeof memo === "undefined") memo = fn.apply(this, arguments);
|
||
return memo;
|
||
};
|
||
};
|
||
|
||
var isOldIE = memoize(function () {
|
||
// Test for IE <= 9 as proposed by Browserhacks
|
||
// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
|
||
// Tests for existence of standard globals is to allow style-loader
|
||
// to operate correctly into non-standard environments
|
||
// @see https://github.com/webpack-contrib/style-loader/issues/177
|
||
return window && document && document.all && !window.atob;
|
||
});
|
||
|
||
var getElement = (function (fn) {
|
||
var memo = {};
|
||
|
||
return function(selector) {
|
||
if (typeof memo[selector] === "undefined") {
|
||
memo[selector] = fn.call(this, selector);
|
||
}
|
||
|
||
return memo[selector]
|
||
};
|
||
})(function (target) {
|
||
return document.querySelector(target)
|
||
});
|
||
|
||
var singleton = null;
|
||
var singletonCounter = 0;
|
||
var stylesInsertedAtTop = [];
|
||
|
||
var fixUrls = __webpack_require__("./node_modules/style-loader/lib/urls.js");
|
||
|
||
module.exports = function(list, options) {
|
||
if (typeof DEBUG !== "undefined" && DEBUG) {
|
||
if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
|
||
}
|
||
|
||
options = options || {};
|
||
|
||
options.attrs = typeof options.attrs === "object" ? options.attrs : {};
|
||
|
||
// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
|
||
// tags it will allow on a page
|
||
if (!options.singleton) options.singleton = isOldIE();
|
||
|
||
// By default, add <style> tags to the <head> element
|
||
if (!options.insertInto) options.insertInto = "head";
|
||
|
||
// By default, add <style> tags to the bottom of the target
|
||
if (!options.insertAt) options.insertAt = "bottom";
|
||
|
||
var styles = listToStyles(list, options);
|
||
|
||
addStylesToDom(styles, options);
|
||
|
||
return function update (newList) {
|
||
var mayRemove = [];
|
||
|
||
for (var i = 0; i < styles.length; i++) {
|
||
var item = styles[i];
|
||
var domStyle = stylesInDom[item.id];
|
||
|
||
domStyle.refs--;
|
||
mayRemove.push(domStyle);
|
||
}
|
||
|
||
if(newList) {
|
||
var newStyles = listToStyles(newList, options);
|
||
addStylesToDom(newStyles, options);
|
||
}
|
||
|
||
for (var i = 0; i < mayRemove.length; i++) {
|
||
var domStyle = mayRemove[i];
|
||
|
||
if(domStyle.refs === 0) {
|
||
for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();
|
||
|
||
delete stylesInDom[domStyle.id];
|
||
}
|
||
}
|
||
};
|
||
};
|
||
|
||
function addStylesToDom (styles, options) {
|
||
for (var i = 0; i < styles.length; i++) {
|
||
var item = styles[i];
|
||
var domStyle = stylesInDom[item.id];
|
||
|
||
if(domStyle) {
|
||
domStyle.refs++;
|
||
|
||
for(var j = 0; j < domStyle.parts.length; j++) {
|
||
domStyle.parts[j](item.parts[j]);
|
||
}
|
||
|
||
for(; j < item.parts.length; j++) {
|
||
domStyle.parts.push(addStyle(item.parts[j], options));
|
||
}
|
||
} else {
|
||
var parts = [];
|
||
|
||
for(var j = 0; j < item.parts.length; j++) {
|
||
parts.push(addStyle(item.parts[j], options));
|
||
}
|
||
|
||
stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
|
||
}
|
||
}
|
||
}
|
||
|
||
function listToStyles (list, options) {
|
||
var styles = [];
|
||
var newStyles = {};
|
||
|
||
for (var i = 0; i < list.length; i++) {
|
||
var item = list[i];
|
||
var id = options.base ? item[0] + options.base : item[0];
|
||
var css = item[1];
|
||
var media = item[2];
|
||
var sourceMap = item[3];
|
||
var part = {css: css, media: media, sourceMap: sourceMap};
|
||
|
||
if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});
|
||
else newStyles[id].parts.push(part);
|
||
}
|
||
|
||
return styles;
|
||
}
|
||
|
||
function insertStyleElement (options, style) {
|
||
var target = getElement(options.insertInto)
|
||
|
||
if (!target) {
|
||
throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
|
||
}
|
||
|
||
var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];
|
||
|
||
if (options.insertAt === "top") {
|
||
if (!lastStyleElementInsertedAtTop) {
|
||
target.insertBefore(style, target.firstChild);
|
||
} else if (lastStyleElementInsertedAtTop.nextSibling) {
|
||
target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);
|
||
} else {
|
||
target.appendChild(style);
|
||
}
|
||
stylesInsertedAtTop.push(style);
|
||
} else if (options.insertAt === "bottom") {
|
||
target.appendChild(style);
|
||
} else {
|
||
throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
|
||
}
|
||
}
|
||
|
||
function removeStyleElement (style) {
|
||
if (style.parentNode === null) return false;
|
||
style.parentNode.removeChild(style);
|
||
|
||
var idx = stylesInsertedAtTop.indexOf(style);
|
||
if(idx >= 0) {
|
||
stylesInsertedAtTop.splice(idx, 1);
|
||
}
|
||
}
|
||
|
||
function createStyleElement (options) {
|
||
var style = document.createElement("style");
|
||
|
||
options.attrs.type = "text/css";
|
||
|
||
addAttrs(style, options.attrs);
|
||
insertStyleElement(options, style);
|
||
|
||
return style;
|
||
}
|
||
|
||
function createLinkElement (options) {
|
||
var link = document.createElement("link");
|
||
|
||
options.attrs.type = "text/css";
|
||
options.attrs.rel = "stylesheet";
|
||
|
||
addAttrs(link, options.attrs);
|
||
insertStyleElement(options, link);
|
||
|
||
return link;
|
||
}
|
||
|
||
function addAttrs (el, attrs) {
|
||
Object.keys(attrs).forEach(function (key) {
|
||
el.setAttribute(key, attrs[key]);
|
||
});
|
||
}
|
||
|
||
function addStyle (obj, options) {
|
||
var style, update, remove, result;
|
||
|
||
// If a transform function was defined, run it on the css
|
||
if (options.transform && obj.css) {
|
||
result = options.transform(obj.css);
|
||
|
||
if (result) {
|
||
// If transform returns a value, use that instead of the original css.
|
||
// This allows running runtime transformations on the css.
|
||
obj.css = result;
|
||
} else {
|
||
// If the transform function returns a falsy value, don't add this css.
|
||
// This allows conditional loading of css
|
||
return function() {
|
||
// noop
|
||
};
|
||
}
|
||
}
|
||
|
||
if (options.singleton) {
|
||
var styleIndex = singletonCounter++;
|
||
|
||
style = singleton || (singleton = createStyleElement(options));
|
||
|
||
update = applyToSingletonTag.bind(null, style, styleIndex, false);
|
||
remove = applyToSingletonTag.bind(null, style, styleIndex, true);
|
||
|
||
} else if (
|
||
obj.sourceMap &&
|
||
typeof URL === "function" &&
|
||
typeof URL.createObjectURL === "function" &&
|
||
typeof URL.revokeObjectURL === "function" &&
|
||
typeof Blob === "function" &&
|
||
typeof btoa === "function"
|
||
) {
|
||
style = createLinkElement(options);
|
||
update = updateLink.bind(null, style, options);
|
||
remove = function () {
|
||
removeStyleElement(style);
|
||
|
||
if(style.href) URL.revokeObjectURL(style.href);
|
||
};
|
||
} else {
|
||
style = createStyleElement(options);
|
||
update = applyToTag.bind(null, style);
|
||
remove = function () {
|
||
removeStyleElement(style);
|
||
};
|
||
}
|
||
|
||
update(obj);
|
||
|
||
return function updateStyle (newObj) {
|
||
if (newObj) {
|
||
if (
|
||
newObj.css === obj.css &&
|
||
newObj.media === obj.media &&
|
||
newObj.sourceMap === obj.sourceMap
|
||
) {
|
||
return;
|
||
}
|
||
|
||
update(obj = newObj);
|
||
} else {
|
||
remove();
|
||
}
|
||
};
|
||
}
|
||
|
||
var replaceText = (function () {
|
||
var textStore = [];
|
||
|
||
return function (index, replacement) {
|
||
textStore[index] = replacement;
|
||
|
||
return textStore.filter(Boolean).join('\n');
|
||
};
|
||
})();
|
||
|
||
function applyToSingletonTag (style, index, remove, obj) {
|
||
var css = remove ? "" : obj.css;
|
||
|
||
if (style.styleSheet) {
|
||
style.styleSheet.cssText = replaceText(index, css);
|
||
} else {
|
||
var cssNode = document.createTextNode(css);
|
||
var childNodes = style.childNodes;
|
||
|
||
if (childNodes[index]) style.removeChild(childNodes[index]);
|
||
|
||
if (childNodes.length) {
|
||
style.insertBefore(cssNode, childNodes[index]);
|
||
} else {
|
||
style.appendChild(cssNode);
|
||
}
|
||
}
|
||
}
|
||
|
||
function applyToTag (style, obj) {
|
||
var css = obj.css;
|
||
var media = obj.media;
|
||
|
||
if(media) {
|
||
style.setAttribute("media", media)
|
||
}
|
||
|
||
if(style.styleSheet) {
|
||
style.styleSheet.cssText = css;
|
||
} else {
|
||
while(style.firstChild) {
|
||
style.removeChild(style.firstChild);
|
||
}
|
||
|
||
style.appendChild(document.createTextNode(css));
|
||
}
|
||
}
|
||
|
||
function updateLink (link, options, obj) {
|
||
var css = obj.css;
|
||
var sourceMap = obj.sourceMap;
|
||
|
||
/*
|
||
If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled
|
||
and there is no publicPath defined then lets turn convertToAbsoluteUrls
|
||
on by default. Otherwise default to the convertToAbsoluteUrls option
|
||
directly
|
||
*/
|
||
var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;
|
||
|
||
if (options.convertToAbsoluteUrls || autoFixUrls) {
|
||
css = fixUrls(css);
|
||
}
|
||
|
||
if (sourceMap) {
|
||
// http://stackoverflow.com/a/26603875
|
||
css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
|
||
}
|
||
|
||
var blob = new Blob([css], { type: "text/css" });
|
||
|
||
var oldSrc = link.href;
|
||
|
||
link.href = URL.createObjectURL(blob);
|
||
|
||
if(oldSrc) URL.revokeObjectURL(oldSrc);
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/style-loader/lib/urls.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
/**
|
||
* When source maps are enabled, `style-loader` uses a link element with a data-uri to
|
||
* embed the css on the page. This breaks all relative urls because now they are relative to a
|
||
* bundle instead of the current page.
|
||
*
|
||
* One solution is to only use full urls, but that may be impossible.
|
||
*
|
||
* Instead, this function "fixes" the relative urls to be absolute according to the current page location.
|
||
*
|
||
* A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.
|
||
*
|
||
*/
|
||
|
||
module.exports = function (css) {
|
||
// get current location
|
||
var location = typeof window !== "undefined" && window.location;
|
||
|
||
if (!location) {
|
||
throw new Error("fixUrls requires window.location");
|
||
}
|
||
|
||
// blank or null?
|
||
if (!css || typeof css !== "string") {
|
||
return css;
|
||
}
|
||
|
||
var baseUrl = location.protocol + "//" + location.host;
|
||
var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/");
|
||
|
||
// convert each url(...)
|
||
/*
|
||
This regular expression is just a way to recursively match brackets within
|
||
a string.
|
||
|
||
/url\s*\( = Match on the word "url" with any whitespace after it and then a parens
|
||
( = Start a capturing group
|
||
(?: = Start a non-capturing group
|
||
[^)(] = Match anything that isn't a parentheses
|
||
| = OR
|
||
\( = Match a start parentheses
|
||
(?: = Start another non-capturing groups
|
||
[^)(]+ = Match anything that isn't a parentheses
|
||
| = OR
|
||
\( = Match a start parentheses
|
||
[^)(]* = Match anything that isn't a parentheses
|
||
\) = Match a end parentheses
|
||
) = End Group
|
||
*\) = Match anything and then a close parens
|
||
) = Close non-capturing group
|
||
* = Match anything
|
||
) = Close capturing group
|
||
\) = Match a close parens
|
||
|
||
/gi = Get all matches, not the first. Be case insensitive.
|
||
*/
|
||
var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) {
|
||
// strip quotes (if they exist)
|
||
var unquotedOrigUrl = origUrl
|
||
.trim()
|
||
.replace(/^"(.*)"$/, function(o, $1){ return $1; })
|
||
.replace(/^'(.*)'$/, function(o, $1){ return $1; });
|
||
|
||
// already a full url? no change
|
||
if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(unquotedOrigUrl)) {
|
||
return fullMatch;
|
||
}
|
||
|
||
// convert the url to a full url
|
||
var newUrl;
|
||
|
||
if (unquotedOrigUrl.indexOf("//") === 0) {
|
||
//TODO: should we add protocol?
|
||
newUrl = unquotedOrigUrl;
|
||
} else if (unquotedOrigUrl.indexOf("/") === 0) {
|
||
// path should be relative to the base url
|
||
newUrl = baseUrl + unquotedOrigUrl; // already starts with '/'
|
||
} else {
|
||
// path should be relative to current directory
|
||
newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './'
|
||
}
|
||
|
||
// send back the fixed url(...)
|
||
return "url(" + JSON.stringify(newUrl) + ")";
|
||
});
|
||
|
||
// send back the fixed css
|
||
return fixedCss;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/timers-browserify/main.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) ||
|
||
(typeof self !== "undefined" && self) ||
|
||
window;
|
||
var apply = Function.prototype.apply;
|
||
|
||
// DOM APIs, for completeness
|
||
|
||
exports.setTimeout = function() {
|
||
return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
|
||
};
|
||
exports.setInterval = function() {
|
||
return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
|
||
};
|
||
exports.clearTimeout =
|
||
exports.clearInterval = function(timeout) {
|
||
if (timeout) {
|
||
timeout.close();
|
||
}
|
||
};
|
||
|
||
function Timeout(id, clearFn) {
|
||
this._id = id;
|
||
this._clearFn = clearFn;
|
||
}
|
||
Timeout.prototype.unref = Timeout.prototype.ref = function() {};
|
||
Timeout.prototype.close = function() {
|
||
this._clearFn.call(scope, this._id);
|
||
};
|
||
|
||
// Does not start the time, just sets up the members needed.
|
||
exports.enroll = function(item, msecs) {
|
||
clearTimeout(item._idleTimeoutId);
|
||
item._idleTimeout = msecs;
|
||
};
|
||
|
||
exports.unenroll = function(item) {
|
||
clearTimeout(item._idleTimeoutId);
|
||
item._idleTimeout = -1;
|
||
};
|
||
|
||
exports._unrefActive = exports.active = function(item) {
|
||
clearTimeout(item._idleTimeoutId);
|
||
|
||
var msecs = item._idleTimeout;
|
||
if (msecs >= 0) {
|
||
item._idleTimeoutId = setTimeout(function onTimeout() {
|
||
if (item._onTimeout)
|
||
item._onTimeout();
|
||
}, msecs);
|
||
}
|
||
};
|
||
|
||
// setimmediate attaches itself to the global object
|
||
__webpack_require__("./node_modules/setimmediate/setImmediate.js");
|
||
// On some exotic environments, it's not clear which object `setimmediate` was
|
||
// able to install onto. Search each possibility in the same order as the
|
||
// `setimmediate` library.
|
||
exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) ||
|
||
(typeof global !== "undefined" && global.setImmediate) ||
|
||
(this && this.setImmediate);
|
||
exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) ||
|
||
(typeof global !== "undefined" && global.clearImmediate) ||
|
||
(this && this.clearImmediate);
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/webpack/buildin/global.js")))
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/client/ClientFilters.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.default = {
|
||
mounted: function () {
|
||
console.dir('loaded');
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/client/ClientList.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var Vuetable_vue_1 = __importDefault(__webpack_require__("./node_modules/vuetable-2/src/components/Vuetable.vue"));
|
||
var VuetablePagination_vue_1 = __importDefault(__webpack_require__("./node_modules/vuetable-2/src/components/VuetablePagination.vue"));
|
||
var VuetablePaginationInfo_vue_1 = __importDefault(__webpack_require__("./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue"));
|
||
var vue_1 = __importDefault(__webpack_require__("./node_modules/vue/dist/vue.common.js"));
|
||
var vue_events_1 = __importDefault(__webpack_require__("./node_modules/vue-events/dist/index.js"));
|
||
var VuetableCss_1 = __importDefault(__webpack_require__("./resources/js/src/components/util/VuetableCss.ts"));
|
||
vue_1.default.use(vue_events_1.default);
|
||
exports.default = {
|
||
components: {
|
||
Vuetable: Vuetable_vue_1.default,
|
||
VuetablePagination: VuetablePagination_vue_1.default,
|
||
VuetablePaginationInfo: VuetablePaginationInfo_vue_1.default
|
||
},
|
||
data: function () {
|
||
return {
|
||
css: VuetableCss_1.default,
|
||
perPage: this.datatable.per_page,
|
||
sortOrder: this.datatable.sort_order,
|
||
moreParams: {},
|
||
fields: this.datatable.fields
|
||
};
|
||
},
|
||
props: ['datatable'],
|
||
mounted: function () {
|
||
var _this = this;
|
||
this.$events.$on('filter-set', function (eventData) { return _this.onFilterSet(eventData); });
|
||
this.$events.$on('filter-reset', function (e) { return _this.onFilterReset(); });
|
||
console.dir(this.datatable);
|
||
},
|
||
beforeMount: function () {
|
||
},
|
||
methods: {
|
||
onPaginationData: function (paginationData) {
|
||
this.$refs.pagination.setPaginationData(paginationData);
|
||
this.$refs.paginationInfo.setPaginationData(paginationData);
|
||
},
|
||
onChangePage: function (page) {
|
||
this.$refs.vuetable.changePage(page);
|
||
},
|
||
onFilterSet: function (filterText) {
|
||
var _this = this;
|
||
this.moreParams = {
|
||
'filter': filterText
|
||
};
|
||
vue_1.default.nextTick(function () { return _this.$refs.vuetable.refresh(); });
|
||
},
|
||
onFilterReset: function () {
|
||
var _this = this;
|
||
this.moreParams = {};
|
||
vue_1.default.nextTick(function () { return _this.$refs.vuetable.refresh(); });
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/util/VueListActions.vue":
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/util/VuetableFilterBar.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.default = {
|
||
data: function () {
|
||
return {
|
||
filterText: ''
|
||
};
|
||
},
|
||
methods: {
|
||
doFilter: function () {
|
||
this.$events.fire('filter-set', this.filterText);
|
||
},
|
||
resetFilter: function () {
|
||
this.filterText = ''; // clear the text in text input
|
||
this.$events.fire('filter-reset');
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/util/VuetableMultiSelect.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
var vue_multiselect_1 = __importDefault(__webpack_require__("./node_modules/vue-multiselect/dist/vue-multiselect.min.js"));
|
||
exports.default = {
|
||
// OR register locally
|
||
components: { Multiselect: vue_multiselect_1.default },
|
||
data: function () {
|
||
return {
|
||
value: 'active',
|
||
options: ['active', 'archived', 'deleted']
|
||
};
|
||
},
|
||
methods: {
|
||
onChange: function (value) {
|
||
console.dir(this.value);
|
||
this.value = value;
|
||
if (value.indexOf('Reset me!') !== -1)
|
||
this.value = [];
|
||
},
|
||
onSelect: function (option) {
|
||
if (option === 'Disable me!')
|
||
this.isDisabled = true;
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-events/dist/index.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
||
|
||
function plugin(Vue) {
|
||
|
||
// Exit if the plugin has already been installed.
|
||
if (plugin.installed) return;
|
||
|
||
// Create a `vm` to serve as our global event bus.
|
||
var events = new Vue({
|
||
methods: {
|
||
/**
|
||
* Emit the given event.
|
||
*
|
||
* @param {string|object} event
|
||
* @param {...*} args
|
||
*/
|
||
emit: function emit(event) {
|
||
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||
args[_key - 1] = arguments[_key];
|
||
}
|
||
|
||
this.$emit.apply(this, [event].concat(args));
|
||
},
|
||
|
||
|
||
/**
|
||
* Emit the given event.
|
||
*
|
||
* @param {string|object} event
|
||
* @param {...*} args
|
||
*/
|
||
fire: function fire(event) {
|
||
for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
||
args[_key2 - 1] = arguments[_key2];
|
||
}
|
||
|
||
this.emit.apply(this, [event].concat(args));
|
||
},
|
||
|
||
|
||
/**
|
||
* Listen for the given event.
|
||
*
|
||
* @param {string} event
|
||
* @param {function} callback
|
||
*/
|
||
on: function on(event, callback) {
|
||
this.$on(event, callback);
|
||
},
|
||
|
||
|
||
/**
|
||
* Listen for the given event.
|
||
*
|
||
* @param {string} event
|
||
* @param {function} callback
|
||
*/
|
||
listen: function listen(event, callback) {
|
||
this.on(event, callback);
|
||
},
|
||
|
||
|
||
/**
|
||
* Listen for the given event once.
|
||
*
|
||
* @param {string} event
|
||
* @param {function} callback
|
||
*/
|
||
once: function once(event, callback) {
|
||
this.$once(event, callback);
|
||
},
|
||
|
||
|
||
/**
|
||
* Remove one or more event listeners.
|
||
*
|
||
* @param {string} event
|
||
* @param {function} callback
|
||
*/
|
||
off: function off(event, callback) {
|
||
this.$off(event, callback);
|
||
},
|
||
|
||
|
||
/**
|
||
* Remove one or more event listeners.
|
||
*
|
||
* @param {string} event
|
||
* @param {function} callback
|
||
*/
|
||
remove: function remove(event, callback) {
|
||
this.off(event, callback);
|
||
}
|
||
}
|
||
});
|
||
|
||
// Extend `Vue.prototype` to include our global event bus.
|
||
Object.defineProperty(Vue.prototype, '$events', {
|
||
get: function get() {
|
||
return events;
|
||
}
|
||
});
|
||
|
||
// Register a mixin that adds an `events` option to Vue 2.0 components.
|
||
Vue.mixin({
|
||
// Hook into the Vue 2.0 `beforeCreate` life-cycle event.
|
||
beforeCreate: function beforeCreate() {
|
||
// Exit if there's no `events` option.
|
||
if (_typeof(this.$options.events) !== 'object') return;
|
||
// Cache of events to bound functions for automatic unsubscriptions
|
||
var eventMap = {};
|
||
// Loop through each event.
|
||
for (var key in this.$options.events) {
|
||
// Assign event type and bound function to map
|
||
eventMap[key] = this.$options.events[key].bind(this);
|
||
}
|
||
// Listen for the `hook:beforeMount` Vue 2.0 life-cycle event.
|
||
this.$once('hook:beforeMount', function () {
|
||
// Loop through each event.
|
||
for (var key in eventMap) {
|
||
// Register a listener for the event.
|
||
events.$on(key, eventMap[key]);
|
||
}
|
||
});
|
||
// Listen for the `hook:beforeDestroy` Vue 2.0 life-cycle event.
|
||
this.$once('hook:beforeDestroy', function () {
|
||
// Loop through each event.
|
||
for (var key in eventMap) {
|
||
// Register a listener for the event.
|
||
events.$off(key, eventMap[key]);
|
||
}
|
||
// Release cache
|
||
eventMap = null;
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
// Check for `window.Vue`
|
||
if (typeof window !== 'undefined' && window.Vue) {
|
||
// Install plugin automatically.
|
||
window.Vue.use(plugin);
|
||
}
|
||
|
||
exports.default = plugin;
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/component-normalizer.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
/* globals __VUE_SSR_CONTEXT__ */
|
||
|
||
// IMPORTANT: Do NOT use ES2015 features in this file.
|
||
// This module is a runtime utility for cleaner component module output and will
|
||
// be included in the final webpack user bundle.
|
||
|
||
module.exports = function normalizeComponent (
|
||
rawScriptExports,
|
||
compiledTemplate,
|
||
functionalTemplate,
|
||
injectStyles,
|
||
scopeId,
|
||
moduleIdentifier /* server only */
|
||
) {
|
||
var esModule
|
||
var scriptExports = rawScriptExports = rawScriptExports || {}
|
||
|
||
// ES6 modules interop
|
||
var type = typeof rawScriptExports.default
|
||
if (type === 'object' || type === 'function') {
|
||
esModule = rawScriptExports
|
||
scriptExports = rawScriptExports.default
|
||
}
|
||
|
||
// Vue.extend constructor export interop
|
||
var options = typeof scriptExports === 'function'
|
||
? scriptExports.options
|
||
: scriptExports
|
||
|
||
// render functions
|
||
if (compiledTemplate) {
|
||
options.render = compiledTemplate.render
|
||
options.staticRenderFns = compiledTemplate.staticRenderFns
|
||
options._compiled = true
|
||
}
|
||
|
||
// functional template
|
||
if (functionalTemplate) {
|
||
options.functional = true
|
||
}
|
||
|
||
// scopedId
|
||
if (scopeId) {
|
||
options._scopeId = scopeId
|
||
}
|
||
|
||
var hook
|
||
if (moduleIdentifier) { // server build
|
||
hook = function (context) {
|
||
// 2.3 injection
|
||
context =
|
||
context || // cached call
|
||
(this.$vnode && this.$vnode.ssrContext) || // stateful
|
||
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
|
||
// 2.2 with runInNewContext: true
|
||
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
|
||
context = __VUE_SSR_CONTEXT__
|
||
}
|
||
// inject component styles
|
||
if (injectStyles) {
|
||
injectStyles.call(this, context)
|
||
}
|
||
// register component module identifier for async chunk inferrence
|
||
if (context && context._registeredComponents) {
|
||
context._registeredComponents.add(moduleIdentifier)
|
||
}
|
||
}
|
||
// used by ssr in case component is cached and beforeCreate
|
||
// never gets called
|
||
options._ssrRegister = hook
|
||
} else if (injectStyles) {
|
||
hook = injectStyles
|
||
}
|
||
|
||
if (hook) {
|
||
var functional = options.functional
|
||
var existing = functional
|
||
? options.render
|
||
: options.beforeCreate
|
||
|
||
if (!functional) {
|
||
// inject component registration as beforeCreate hook
|
||
options.beforeCreate = existing
|
||
? [].concat(existing, hook)
|
||
: [hook]
|
||
} else {
|
||
// for template-only hot-reload because in that case the render fn doesn't
|
||
// go through the normalizer
|
||
options._injectStyles = hook
|
||
// register for functioal component in vue file
|
||
options.render = function renderWithStyleInjection (h, context) {
|
||
hook.call(context)
|
||
return existing(h, context)
|
||
}
|
||
}
|
||
}
|
||
|
||
return {
|
||
esModule: esModule,
|
||
exports: scriptExports,
|
||
options: options
|
||
}
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-0086b528\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/client/ClientFilters.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c("div", [_c("vuetable-filter-bar")], 1)
|
||
}
|
||
var staticRenderFns = []
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-0086b528", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-03f135bf\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/util/VuetablePaginationBootstrap.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c(
|
||
"ul",
|
||
{ staticClass: "pagination" },
|
||
[
|
||
_c("li", { class: { disabled: _vm.isOnFirstPage } }, [
|
||
_c(
|
||
"a",
|
||
{
|
||
attrs: { href: "" },
|
||
on: {
|
||
click: function($event) {
|
||
$event.preventDefault()
|
||
_vm.loadPage("prev")
|
||
}
|
||
}
|
||
},
|
||
[_c("span", [_vm._v("«")])]
|
||
)
|
||
]),
|
||
_vm._v(" "),
|
||
_vm.notEnoughPages
|
||
? _vm._l(_vm.totalPage, function(n) {
|
||
return _c("li", { class: { active: _vm.isCurrentPage(n) } }, [
|
||
_c("a", {
|
||
domProps: { innerHTML: _vm._s(n) },
|
||
on: {
|
||
click: function($event) {
|
||
$event.preventDefault()
|
||
_vm.loadPage(n)
|
||
}
|
||
}
|
||
})
|
||
])
|
||
})
|
||
: _vm._l(_vm.windowSize, function(n) {
|
||
return _c(
|
||
"li",
|
||
{ class: { active: _vm.isCurrentPage(_vm.windowStart + n - 1) } },
|
||
[
|
||
_c("a", {
|
||
domProps: { innerHTML: _vm._s(_vm.windowStart + n - 1) },
|
||
on: {
|
||
click: function($event) {
|
||
$event.preventDefault()
|
||
_vm.loadPage(_vm.windowStart + n - 1)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
)
|
||
}),
|
||
_vm._v(" "),
|
||
_c("li", { class: { disabled: _vm.isOnLastPage } }, [
|
||
_c(
|
||
"a",
|
||
{
|
||
attrs: { href: "" },
|
||
on: {
|
||
click: function($event) {
|
||
$event.preventDefault()
|
||
_vm.loadPage("next")
|
||
}
|
||
}
|
||
},
|
||
[_c("span", [_vm._v("»")])]
|
||
)
|
||
])
|
||
],
|
||
2
|
||
)
|
||
}
|
||
var staticRenderFns = []
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-03f135bf", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-15965e3b\",\"hasScoped\":true,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./node_modules/vuetable-2/src/components/Vuetable.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _vm.isFixedHeader
|
||
? _c("div", [
|
||
_c("div", { staticClass: "vuetable-head-wrapper" }, [
|
||
_c(
|
||
"table",
|
||
{
|
||
class: ["vuetable", _vm.css.tableClass, _vm.css.tableHeaderClass]
|
||
},
|
||
[
|
||
_c("thead", [
|
||
_c(
|
||
"tr",
|
||
[
|
||
_vm._l(_vm.tableFields, function(field, fieldIndex) {
|
||
return [
|
||
field.visible
|
||
? [
|
||
_vm.isSpecialField(field.name)
|
||
? [
|
||
_vm.extractName(field.name) == "__checkbox"
|
||
? _c(
|
||
"th",
|
||
{
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-checkbox-" +
|
||
_vm.trackBy,
|
||
field.titleClass
|
||
],
|
||
style: { width: field.width }
|
||
},
|
||
[
|
||
_c("input", {
|
||
attrs: { type: "checkbox" },
|
||
domProps: {
|
||
checked: _vm.checkCheckboxesState(
|
||
field.name
|
||
)
|
||
},
|
||
on: {
|
||
change: function($event) {
|
||
_vm.toggleAllCheckboxes(
|
||
field.name,
|
||
$event
|
||
)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
)
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) == "__component"
|
||
? _c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-component-" +
|
||
_vm.trackBy,
|
||
field.titleClass,
|
||
_vm.sortClass(field),
|
||
{ sortable: _vm.isSortable(field) }
|
||
],
|
||
style: { width: field.width },
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderTitle(field)
|
||
)
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.orderBy(field, $event)
|
||
}
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) == "__slot"
|
||
? _c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-slot-" +
|
||
_vm.extractArgs(field.name),
|
||
field.titleClass,
|
||
_vm.sortClass(field),
|
||
{ sortable: _vm.isSortable(field) }
|
||
],
|
||
style: { width: field.width },
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderTitle(field)
|
||
)
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.orderBy(field, $event)
|
||
}
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) == "__sequence"
|
||
? _c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-sequence",
|
||
field.titleClass || ""
|
||
],
|
||
style: { width: field.width },
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderTitle(field)
|
||
)
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.notIn(_vm.extractName(field.name), [
|
||
"__sequence",
|
||
"__checkbox",
|
||
"__component",
|
||
"__slot"
|
||
])
|
||
? _c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-" + field.name,
|
||
field.titleClass || ""
|
||
],
|
||
style: { width: field.width },
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderTitle(field)
|
||
)
|
||
}
|
||
})
|
||
: _vm._e()
|
||
]
|
||
: [
|
||
_c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-" + field.name,
|
||
field.titleClass,
|
||
_vm.sortClass(field),
|
||
{ sortable: _vm.isSortable(field) }
|
||
],
|
||
style: { width: field.width },
|
||
attrs: { id: "_" + field.name },
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderTitle(field)
|
||
)
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.orderBy(field, $event)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
]
|
||
: _vm._e()
|
||
]
|
||
}),
|
||
_vm._v(" "),
|
||
_vm.scrollVisible
|
||
? _c("th", {
|
||
staticClass: "vuetable-gutter-col",
|
||
style: { width: _vm.scrollBarWidth }
|
||
})
|
||
: _vm._e()
|
||
],
|
||
2
|
||
)
|
||
])
|
||
]
|
||
)
|
||
]),
|
||
_vm._v(" "),
|
||
_c(
|
||
"div",
|
||
{
|
||
staticClass: "vuetable-body-wrapper",
|
||
style: { height: _vm.tableHeight }
|
||
},
|
||
[
|
||
_c(
|
||
"table",
|
||
{
|
||
class: ["vuetable", _vm.css.tableClass, _vm.css.tableBodyClass]
|
||
},
|
||
[
|
||
_c(
|
||
"colgroup",
|
||
[
|
||
_vm._l(_vm.tableFields, function(field, fieldIndex) {
|
||
return [
|
||
field.visible
|
||
? [
|
||
_c("col", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-" + field.name,
|
||
field.titleClass
|
||
],
|
||
style: { width: field.width },
|
||
attrs: { id: "_col_" + field.name }
|
||
})
|
||
]
|
||
: _vm._e()
|
||
]
|
||
})
|
||
],
|
||
2
|
||
),
|
||
_vm._v(" "),
|
||
_c(
|
||
"tbody",
|
||
{ staticClass: "vuetable-body" },
|
||
[
|
||
_vm._l(_vm.tableData, function(item, itemIndex) {
|
||
return [
|
||
_c(
|
||
"tr",
|
||
{
|
||
key: itemIndex,
|
||
class: _vm.onRowClass(item, itemIndex),
|
||
attrs: {
|
||
"item-index": itemIndex,
|
||
render: _vm.onRowChanged(item)
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.onRowClicked(item, $event)
|
||
},
|
||
dblclick: function($event) {
|
||
_vm.onRowDoubleClicked(item, $event)
|
||
}
|
||
}
|
||
},
|
||
[
|
||
_vm._l(_vm.tableFields, function(
|
||
field,
|
||
fieldIndex
|
||
) {
|
||
return [
|
||
field.visible
|
||
? [
|
||
_vm.isSpecialField(field.name)
|
||
? [
|
||
_vm.extractName(field.name) ==
|
||
"__sequence"
|
||
? _c("td", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-sequence",
|
||
field.dataClass
|
||
],
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderSequence(
|
||
itemIndex
|
||
)
|
||
)
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) ==
|
||
"__handle"
|
||
? _c("td", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-handle",
|
||
field.dataClass
|
||
],
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderIconTag([
|
||
"handle-icon",
|
||
_vm.css.handleIcon
|
||
])
|
||
)
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) ==
|
||
"__checkbox"
|
||
? _c(
|
||
"td",
|
||
{
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-checkboxes",
|
||
field.dataClass
|
||
]
|
||
},
|
||
[
|
||
_c("input", {
|
||
attrs: {
|
||
type: "checkbox"
|
||
},
|
||
domProps: {
|
||
checked: _vm.rowSelected(
|
||
item,
|
||
field.name
|
||
)
|
||
},
|
||
on: {
|
||
change: function(
|
||
$event
|
||
) {
|
||
_vm.toggleCheckbox(
|
||
item,
|
||
field.name,
|
||
$event
|
||
)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
)
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) ===
|
||
"__component"
|
||
? _c(
|
||
"td",
|
||
{
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-component",
|
||
field.dataClass
|
||
]
|
||
},
|
||
[
|
||
_c(
|
||
_vm.extractArgs(
|
||
field.name
|
||
),
|
||
{
|
||
tag: "component",
|
||
attrs: {
|
||
"row-data": item,
|
||
"row-index": itemIndex,
|
||
"row-field":
|
||
field.sortField
|
||
}
|
||
}
|
||
)
|
||
],
|
||
1
|
||
)
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) ===
|
||
"__slot"
|
||
? _c(
|
||
"td",
|
||
{
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-slot",
|
||
field.dataClass
|
||
]
|
||
},
|
||
[
|
||
_vm._t(
|
||
_vm.extractArgs(
|
||
field.name
|
||
),
|
||
null,
|
||
{
|
||
rowData: item,
|
||
rowIndex: itemIndex,
|
||
rowField:
|
||
field.sortField
|
||
}
|
||
)
|
||
],
|
||
2
|
||
)
|
||
: _vm._e()
|
||
]
|
||
: [
|
||
_c("td", {
|
||
key: fieldIndex,
|
||
class: field.dataClass,
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderNormalField(
|
||
field,
|
||
item
|
||
)
|
||
)
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.onCellClicked(
|
||
item,
|
||
field,
|
||
$event
|
||
)
|
||
},
|
||
dblclick: function($event) {
|
||
_vm.onCellDoubleClicked(
|
||
item,
|
||
field,
|
||
$event
|
||
)
|
||
},
|
||
contextmenu: function($event) {
|
||
_vm.onCellRightClicked(
|
||
item,
|
||
field,
|
||
$event
|
||
)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
]
|
||
: _vm._e()
|
||
]
|
||
})
|
||
],
|
||
2
|
||
),
|
||
_vm._v(" "),
|
||
_vm.useDetailRow
|
||
? [
|
||
_c(
|
||
"transition",
|
||
{
|
||
key: itemIndex,
|
||
attrs: { name: _vm.detailRowTransition }
|
||
},
|
||
[
|
||
_vm.isVisibleDetailRow(item[_vm.trackBy])
|
||
? _c(
|
||
"tr",
|
||
{
|
||
class: [_vm.css.detailRowClass],
|
||
on: {
|
||
click: function($event) {
|
||
_vm.onDetailRowClick(item, $event)
|
||
}
|
||
}
|
||
},
|
||
[
|
||
_c(
|
||
"td",
|
||
{
|
||
attrs: {
|
||
colspan: _vm.countVisibleFields
|
||
}
|
||
},
|
||
[
|
||
_c(_vm.detailRowComponent, {
|
||
tag: "component",
|
||
attrs: {
|
||
"row-data": item,
|
||
"row-index": itemIndex
|
||
}
|
||
})
|
||
],
|
||
1
|
||
)
|
||
]
|
||
)
|
||
: _vm._e()
|
||
]
|
||
)
|
||
]
|
||
: _vm._e()
|
||
]
|
||
}),
|
||
_vm._v(" "),
|
||
_vm.displayEmptyDataRow
|
||
? [
|
||
_c("tr", [
|
||
_c("td", {
|
||
staticClass: "vuetable-empty-result",
|
||
attrs: { colspan: _vm.countVisibleFields },
|
||
domProps: {
|
||
innerHTML: _vm._s(_vm.noDataTemplate)
|
||
}
|
||
})
|
||
])
|
||
]
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.lessThanMinRows
|
||
? _vm._l(_vm.blankRows, function(i) {
|
||
return _c(
|
||
"tr",
|
||
{ key: i, staticClass: "blank-row" },
|
||
[
|
||
_vm._l(_vm.tableFields, function(
|
||
field,
|
||
fieldIndex
|
||
) {
|
||
return [
|
||
field.visible
|
||
? _c("td", { key: fieldIndex }, [
|
||
_vm._v(" ")
|
||
])
|
||
: _vm._e()
|
||
]
|
||
})
|
||
],
|
||
2
|
||
)
|
||
})
|
||
: _vm._e()
|
||
],
|
||
2
|
||
)
|
||
]
|
||
)
|
||
]
|
||
)
|
||
])
|
||
: _c("table", { class: ["vuetable", _vm.css.tableClass] }, [
|
||
_c("thead", [
|
||
_c(
|
||
"tr",
|
||
[
|
||
_vm._l(_vm.tableFields, function(field, fieldIndex) {
|
||
return [
|
||
field.visible
|
||
? [
|
||
_vm.isSpecialField(field.name)
|
||
? [
|
||
_vm.extractName(field.name) == "__checkbox"
|
||
? _c(
|
||
"th",
|
||
{
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-checkbox-" + _vm.trackBy,
|
||
field.titleClass
|
||
],
|
||
style: { width: field.width }
|
||
},
|
||
[
|
||
_c("input", {
|
||
attrs: { type: "checkbox" },
|
||
domProps: {
|
||
checked: _vm.checkCheckboxesState(
|
||
field.name
|
||
)
|
||
},
|
||
on: {
|
||
change: function($event) {
|
||
_vm.toggleAllCheckboxes(
|
||
field.name,
|
||
$event
|
||
)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
)
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) == "__component"
|
||
? _c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-component-" + _vm.trackBy,
|
||
field.titleClass,
|
||
_vm.sortClass(field),
|
||
{ sortable: _vm.isSortable(field) }
|
||
],
|
||
style: { width: field.width },
|
||
domProps: {
|
||
innerHTML: _vm._s(_vm.renderTitle(field))
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.orderBy(field, $event)
|
||
}
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) == "__slot"
|
||
? _c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-slot-" +
|
||
_vm.extractArgs(field.name),
|
||
field.titleClass,
|
||
_vm.sortClass(field),
|
||
{ sortable: _vm.isSortable(field) }
|
||
],
|
||
style: { width: field.width },
|
||
domProps: {
|
||
innerHTML: _vm._s(_vm.renderTitle(field))
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.orderBy(field, $event)
|
||
}
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) == "__sequence"
|
||
? _c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-sequence",
|
||
field.titleClass || "",
|
||
_vm.sortClass(field)
|
||
],
|
||
style: { width: field.width },
|
||
domProps: {
|
||
innerHTML: _vm._s(_vm.renderTitle(field))
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.notIn(_vm.extractName(field.name), [
|
||
"__sequence",
|
||
"__checkbox",
|
||
"__component",
|
||
"__slot"
|
||
])
|
||
? _c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-" + field.name,
|
||
field.titleClass || "",
|
||
_vm.sortClass(field)
|
||
],
|
||
style: { width: field.width },
|
||
domProps: {
|
||
innerHTML: _vm._s(_vm.renderTitle(field))
|
||
}
|
||
})
|
||
: _vm._e()
|
||
]
|
||
: [
|
||
_c("th", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-th-" + field.name,
|
||
field.titleClass,
|
||
_vm.sortClass(field),
|
||
{ sortable: _vm.isSortable(field) }
|
||
],
|
||
style: { width: field.width },
|
||
attrs: { id: "_" + field.name },
|
||
domProps: {
|
||
innerHTML: _vm._s(_vm.renderTitle(field))
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.orderBy(field, $event)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
]
|
||
: _vm._e()
|
||
]
|
||
})
|
||
],
|
||
2
|
||
)
|
||
]),
|
||
_vm._v(" "),
|
||
_c(
|
||
"tbody",
|
||
{ staticClass: "vuetable-body" },
|
||
[
|
||
_vm._l(_vm.tableData, function(item, itemIndex) {
|
||
return [
|
||
_c(
|
||
"tr",
|
||
{
|
||
key: itemIndex,
|
||
class: _vm.onRowClass(item, itemIndex),
|
||
attrs: {
|
||
"item-index": itemIndex,
|
||
render: _vm.onRowChanged(item)
|
||
},
|
||
on: {
|
||
dblclick: function($event) {
|
||
_vm.onRowDoubleClicked(item, $event)
|
||
},
|
||
click: function($event) {
|
||
_vm.onRowClicked(item, $event)
|
||
}
|
||
}
|
||
},
|
||
[
|
||
_vm._l(_vm.tableFields, function(field, fieldIndex) {
|
||
return [
|
||
field.visible
|
||
? [
|
||
_vm.isSpecialField(field.name)
|
||
? [
|
||
_vm.extractName(field.name) == "__sequence"
|
||
? _c("td", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-sequence",
|
||
field.dataClass
|
||
],
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderSequence(itemIndex)
|
||
)
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) == "__handle"
|
||
? _c("td", {
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-handle",
|
||
field.dataClass
|
||
],
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.renderIconTag([
|
||
"handle-icon",
|
||
_vm.css.handleIcon
|
||
])
|
||
)
|
||
}
|
||
})
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) == "__checkbox"
|
||
? _c(
|
||
"td",
|
||
{
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-checkboxes",
|
||
field.dataClass
|
||
]
|
||
},
|
||
[
|
||
_c("input", {
|
||
attrs: { type: "checkbox" },
|
||
domProps: {
|
||
checked: _vm.rowSelected(
|
||
item,
|
||
field.name
|
||
)
|
||
},
|
||
on: {
|
||
change: function($event) {
|
||
_vm.toggleCheckbox(
|
||
item,
|
||
field.name,
|
||
$event
|
||
)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
)
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) ===
|
||
"__component"
|
||
? _c(
|
||
"td",
|
||
{
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-component",
|
||
field.dataClass
|
||
]
|
||
},
|
||
[
|
||
_c(_vm.extractArgs(field.name), {
|
||
tag: "component",
|
||
attrs: {
|
||
"row-data": item,
|
||
"row-index": itemIndex,
|
||
"row-field": field.sortField
|
||
}
|
||
})
|
||
],
|
||
1
|
||
)
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.extractName(field.name) === "__slot"
|
||
? _c(
|
||
"td",
|
||
{
|
||
key: fieldIndex,
|
||
class: [
|
||
"vuetable-slot",
|
||
field.dataClass
|
||
]
|
||
},
|
||
[
|
||
_vm._t(
|
||
_vm.extractArgs(field.name),
|
||
null,
|
||
{
|
||
rowData: item,
|
||
rowIndex: itemIndex,
|
||
rowField: field.sortField
|
||
}
|
||
)
|
||
],
|
||
2
|
||
)
|
||
: _vm._e()
|
||
]
|
||
: [
|
||
_vm.hasCallback(field)
|
||
? _c("td", {
|
||
key: fieldIndex,
|
||
class: field.dataClass,
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.callCallback(field, item)
|
||
)
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.onCellClicked(
|
||
item,
|
||
field,
|
||
$event
|
||
)
|
||
},
|
||
dblclick: function($event) {
|
||
_vm.onCellDoubleClicked(
|
||
item,
|
||
field,
|
||
$event
|
||
)
|
||
},
|
||
contextmenu: function($event) {
|
||
_vm.onCellRightClicked(
|
||
item,
|
||
field,
|
||
$event
|
||
)
|
||
}
|
||
}
|
||
})
|
||
: _c("td", {
|
||
key: fieldIndex,
|
||
class: field.dataClass,
|
||
domProps: {
|
||
innerHTML: _vm._s(
|
||
_vm.getObjectValue(
|
||
item,
|
||
field.name,
|
||
""
|
||
)
|
||
)
|
||
},
|
||
on: {
|
||
click: function($event) {
|
||
_vm.onCellClicked(
|
||
item,
|
||
field,
|
||
$event
|
||
)
|
||
},
|
||
dblclick: function($event) {
|
||
_vm.onCellDoubleClicked(
|
||
item,
|
||
field,
|
||
$event
|
||
)
|
||
},
|
||
contextmenu: function($event) {
|
||
_vm.onCellRightClicked(
|
||
item,
|
||
field,
|
||
$event
|
||
)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
]
|
||
: _vm._e()
|
||
]
|
||
})
|
||
],
|
||
2
|
||
),
|
||
_vm._v(" "),
|
||
_vm.useDetailRow
|
||
? [
|
||
_c(
|
||
"transition",
|
||
{
|
||
key: itemIndex,
|
||
attrs: { name: _vm.detailRowTransition }
|
||
},
|
||
[
|
||
_vm.isVisibleDetailRow(item[_vm.trackBy])
|
||
? _c(
|
||
"tr",
|
||
{
|
||
class: [_vm.css.detailRowClass],
|
||
on: {
|
||
click: function($event) {
|
||
_vm.onDetailRowClick(item, $event)
|
||
}
|
||
}
|
||
},
|
||
[
|
||
_c(
|
||
"td",
|
||
{
|
||
attrs: { colspan: _vm.countVisibleFields }
|
||
},
|
||
[
|
||
_c(_vm.detailRowComponent, {
|
||
tag: "component",
|
||
attrs: {
|
||
"row-data": item,
|
||
"row-index": itemIndex
|
||
}
|
||
})
|
||
],
|
||
1
|
||
)
|
||
]
|
||
)
|
||
: _vm._e()
|
||
]
|
||
)
|
||
]
|
||
: _vm._e()
|
||
]
|
||
}),
|
||
_vm._v(" "),
|
||
_vm.displayEmptyDataRow
|
||
? [
|
||
_c("tr", [
|
||
_c("td", {
|
||
staticClass: "vuetable-empty-result",
|
||
attrs: { colspan: _vm.countVisibleFields },
|
||
domProps: { innerHTML: _vm._s(_vm.noDataTemplate) }
|
||
})
|
||
])
|
||
]
|
||
: _vm._e(),
|
||
_vm._v(" "),
|
||
_vm.lessThanMinRows
|
||
? _vm._l(_vm.blankRows, function(i) {
|
||
return _c(
|
||
"tr",
|
||
{ key: i, staticClass: "blank-row" },
|
||
[
|
||
_vm._l(_vm.tableFields, function(field, fieldIndex) {
|
||
return [
|
||
field.visible
|
||
? _c("td", { key: fieldIndex }, [_vm._v(" ")])
|
||
: _vm._e()
|
||
]
|
||
})
|
||
],
|
||
2
|
||
)
|
||
})
|
||
: _vm._e()
|
||
],
|
||
2
|
||
)
|
||
])
|
||
}
|
||
var staticRenderFns = []
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-15965e3b", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-17724083\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c("div", {
|
||
class: ["vuetable-pagination-info", _vm.css.infoClass],
|
||
domProps: { innerHTML: _vm._s(_vm.paginationInfo) }
|
||
})
|
||
}
|
||
var staticRenderFns = []
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-17724083", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-1a665214\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/util/VueListActions.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c("div", { staticClass: "d-flex justify-content-start" }, [
|
||
_vm._m(0),
|
||
_vm._v(" "),
|
||
_c("div", { staticClass: "mr-auto p-2" }, [_c("vuetable-multi-select")], 1),
|
||
_vm._v(" "),
|
||
_c("div", { staticClass: "ml-auto p-2" }, [_c("vuetable-query-filter")], 1),
|
||
_vm._v(" "),
|
||
_c("div", { staticClass: "p-2" }, [
|
||
_c("button", { staticClass: "btn btn-primary btn-lg " }, [
|
||
_vm._v(_vm._s(_vm.trans("texts.new_client")))
|
||
])
|
||
])
|
||
])
|
||
}
|
||
var staticRenderFns = [
|
||
function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c("div", { staticClass: "p-2" }, [
|
||
_c("div", { staticClass: "btn-group" }, [
|
||
_c(
|
||
"button",
|
||
{ staticClass: "btn btn-primary btn-lg", attrs: { type: "button" } },
|
||
[_vm._v("Archive")]
|
||
),
|
||
_vm._v(" "),
|
||
_c(
|
||
"button",
|
||
{
|
||
staticClass:
|
||
"btn btn-primary dropdown-toggle dropdown-toggle-split",
|
||
attrs: {
|
||
type: "button",
|
||
"data-toggle": "dropdown",
|
||
"aria-haspopup": "true",
|
||
"aria-expanded": "false"
|
||
}
|
||
},
|
||
[_c("span", { staticClass: "sr-only" }, [_vm._v("Toggle Dropdown")])]
|
||
),
|
||
_vm._v(" "),
|
||
_c(
|
||
"div",
|
||
{
|
||
staticClass: "dropdown-menu",
|
||
staticStyle: {
|
||
position: "absolute",
|
||
"will-change": "transform",
|
||
top: "0px",
|
||
left: "0px",
|
||
transform: "translate3d(81px, 38px, 0px)"
|
||
},
|
||
attrs: { "x-placement": "bottom-start" }
|
||
},
|
||
[
|
||
_c("a", { staticClass: "dropdown-item", attrs: { href: "#" } }, [
|
||
_vm._v("Archive")
|
||
]),
|
||
_vm._v(" "),
|
||
_c("a", { staticClass: "dropdown-item", attrs: { href: "#" } }, [
|
||
_vm._v("Delete")
|
||
])
|
||
]
|
||
)
|
||
])
|
||
])
|
||
}
|
||
]
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-1a665214", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-3cd1b306\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/client/ClientList.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c(
|
||
"div",
|
||
[
|
||
_c("vuetable", {
|
||
ref: "vuetable",
|
||
attrs: {
|
||
"api-url": "/clients",
|
||
fields: _vm.fields,
|
||
"per-page": _vm.perPage,
|
||
"sort-order": _vm.sortOrder,
|
||
"append-params": _vm.moreParams,
|
||
css: _vm.css.table,
|
||
"pagination-path": ""
|
||
},
|
||
on: { "vuetable:pagination-data": _vm.onPaginationData }
|
||
}),
|
||
_vm._v(" "),
|
||
_c(
|
||
"div",
|
||
{ staticClass: "vuetable-pagination ui basic segment grid" },
|
||
[
|
||
_c("vuetable-pagination-info", { ref: "paginationInfo" }),
|
||
_vm._v(" "),
|
||
_c("vuetable-pagination", {
|
||
ref: "pagination",
|
||
attrs: { css: _vm.css.pagination },
|
||
on: { "vuetable-pagination:change-page": _vm.onChangePage }
|
||
})
|
||
],
|
||
1
|
||
)
|
||
],
|
||
1
|
||
)
|
||
}
|
||
var staticRenderFns = []
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-3cd1b306", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-3efdd596\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./node_modules/vuetable-2/src/components/VuetablePagination.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c(
|
||
"div",
|
||
{
|
||
directives: [
|
||
{
|
||
name: "show",
|
||
rawName: "v-show",
|
||
value: _vm.tablePagination && _vm.tablePagination.last_page > 1,
|
||
expression: "tablePagination && tablePagination.last_page > 1"
|
||
}
|
||
],
|
||
class: _vm.css.wrapperClass
|
||
},
|
||
[
|
||
_c(
|
||
"a",
|
||
{
|
||
class: [
|
||
"btn-nav",
|
||
_vm.css.linkClass,
|
||
_vm.isOnFirstPage ? _vm.css.disabledClass : ""
|
||
],
|
||
on: {
|
||
click: function($event) {
|
||
_vm.loadPage(1)
|
||
}
|
||
}
|
||
},
|
||
[
|
||
_vm.css.icons.first != ""
|
||
? _c("i", { class: [_vm.css.icons.first] })
|
||
: _c("span", [_vm._v("«")])
|
||
]
|
||
),
|
||
_vm._v(" "),
|
||
_c(
|
||
"a",
|
||
{
|
||
class: [
|
||
"btn-nav",
|
||
_vm.css.linkClass,
|
||
_vm.isOnFirstPage ? _vm.css.disabledClass : ""
|
||
],
|
||
on: {
|
||
click: function($event) {
|
||
_vm.loadPage("prev")
|
||
}
|
||
}
|
||
},
|
||
[
|
||
_vm.css.icons.next != ""
|
||
? _c("i", { class: [_vm.css.icons.prev] })
|
||
: _c("span", [_vm._v(" ‹")])
|
||
]
|
||
),
|
||
_vm._v(" "),
|
||
_vm.notEnoughPages
|
||
? [
|
||
_vm._l(_vm.totalPage, function(n) {
|
||
return [
|
||
_c("a", {
|
||
class: [
|
||
_vm.css.pageClass,
|
||
_vm.isCurrentPage(n) ? _vm.css.activeClass : ""
|
||
],
|
||
domProps: { innerHTML: _vm._s(n) },
|
||
on: {
|
||
click: function($event) {
|
||
_vm.loadPage(n)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
})
|
||
]
|
||
: [
|
||
_vm._l(_vm.windowSize, function(n) {
|
||
return [
|
||
_c("a", {
|
||
class: [
|
||
_vm.css.pageClass,
|
||
_vm.isCurrentPage(_vm.windowStart + n - 1)
|
||
? _vm.css.activeClass
|
||
: ""
|
||
],
|
||
domProps: { innerHTML: _vm._s(_vm.windowStart + n - 1) },
|
||
on: {
|
||
click: function($event) {
|
||
_vm.loadPage(_vm.windowStart + n - 1)
|
||
}
|
||
}
|
||
})
|
||
]
|
||
})
|
||
],
|
||
_vm._v(" "),
|
||
_c(
|
||
"a",
|
||
{
|
||
class: [
|
||
"btn-nav",
|
||
_vm.css.linkClass,
|
||
_vm.isOnLastPage ? _vm.css.disabledClass : ""
|
||
],
|
||
on: {
|
||
click: function($event) {
|
||
_vm.loadPage("next")
|
||
}
|
||
}
|
||
},
|
||
[
|
||
_vm.css.icons.next != ""
|
||
? _c("i", { class: [_vm.css.icons.next] })
|
||
: _c("span", [_vm._v("› ")])
|
||
]
|
||
),
|
||
_vm._v(" "),
|
||
_c(
|
||
"a",
|
||
{
|
||
class: [
|
||
"btn-nav",
|
||
_vm.css.linkClass,
|
||
_vm.isOnLastPage ? _vm.css.disabledClass : ""
|
||
],
|
||
on: {
|
||
click: function($event) {
|
||
_vm.loadPage(_vm.totalPage)
|
||
}
|
||
}
|
||
},
|
||
[
|
||
_vm.css.icons.last != ""
|
||
? _c("i", { class: [_vm.css.icons.last] })
|
||
: _c("span", [_vm._v("»")])
|
||
]
|
||
)
|
||
],
|
||
2
|
||
)
|
||
}
|
||
var staticRenderFns = []
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-3efdd596", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-5e03b840\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/util/VuetableMultiSelect.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c(
|
||
"div",
|
||
{ staticStyle: { width: "300px" } },
|
||
[
|
||
_c("multiselect", {
|
||
attrs: {
|
||
options: _vm.options,
|
||
multiple: true,
|
||
placeholder: _vm.trans("texts.status")
|
||
},
|
||
on: { input: _vm.onChange },
|
||
model: {
|
||
value: _vm.value,
|
||
callback: function($$v) {
|
||
_vm.value = $$v
|
||
},
|
||
expression: "value"
|
||
}
|
||
})
|
||
],
|
||
1
|
||
)
|
||
}
|
||
var staticRenderFns = []
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-5e03b840", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-be66a0f4\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/util/VuetableFilterBar.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c("div", { staticClass: "input-group" }, [
|
||
_c("input", {
|
||
directives: [
|
||
{
|
||
name: "model",
|
||
rawName: "v-model",
|
||
value: _vm.filterText,
|
||
expression: "filterText"
|
||
}
|
||
],
|
||
staticClass: "form-control",
|
||
attrs: { type: "text", placeholder: "search" },
|
||
domProps: { value: _vm.filterText },
|
||
on: {
|
||
keyup: function($event) {
|
||
if (
|
||
!("button" in $event) &&
|
||
_vm._k($event.keyCode, "enter", 13, $event.key, "Enter")
|
||
) {
|
||
return null
|
||
}
|
||
return _vm.doFilter($event)
|
||
},
|
||
input: function($event) {
|
||
if ($event.target.composing) {
|
||
return
|
||
}
|
||
_vm.filterText = $event.target.value
|
||
}
|
||
}
|
||
}),
|
||
_vm._v(" "),
|
||
_c(
|
||
"button",
|
||
{ staticClass: "btn btn-primary", on: { click: _vm.doFilter } },
|
||
[_vm._v("Go")]
|
||
),
|
||
_vm._v(" "),
|
||
_c(
|
||
"button",
|
||
{ staticClass: "btn btn-light", on: { click: _vm.resetFilter } },
|
||
[_vm._v("Reset")]
|
||
)
|
||
])
|
||
}
|
||
var staticRenderFns = []
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-be66a0f4", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-d9a40d24\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/client/ClientActions.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var render = function() {
|
||
var _vm = this
|
||
var _h = _vm.$createElement
|
||
var _c = _vm._self._c || _h
|
||
return _c("div", { staticClass: "dropdown" }, [
|
||
_c(
|
||
"button",
|
||
{
|
||
staticClass: "btn btn-secondary dropdown-toggle",
|
||
attrs: {
|
||
type: "button",
|
||
id: "dropdownMenu",
|
||
"data-toggle": "dropdown",
|
||
"aria-haspopup": "true",
|
||
"aria-expanded": "false"
|
||
}
|
||
},
|
||
[_vm._v("\n\tSelect\n\t")]
|
||
),
|
||
_vm._v(" "),
|
||
_c(
|
||
"div",
|
||
{
|
||
staticClass: "dropdown-menu",
|
||
attrs: { "aria-labelledby": "dropdownMenu" }
|
||
},
|
||
[
|
||
_vm._l(_vm.rowData.actions, function(action) {
|
||
return _c(
|
||
"a",
|
||
{ staticClass: "dropdown-item", attrs: { href: action.url } },
|
||
[_vm._v(_vm._s(action.name))]
|
||
)
|
||
}),
|
||
_vm._v(" "),
|
||
_c(
|
||
"a",
|
||
{
|
||
staticClass: "dropdown-item",
|
||
attrs: { href: "#" },
|
||
on: {
|
||
click: function($event) {
|
||
_vm.itemAction("view-item", _vm.rowData, _vm.rowIndex)
|
||
}
|
||
}
|
||
},
|
||
[_vm._v("One more item")]
|
||
)
|
||
],
|
||
2
|
||
)
|
||
])
|
||
}
|
||
var staticRenderFns = []
|
||
render._withStripped = true
|
||
module.exports = { render: render, staticRenderFns: staticRenderFns }
|
||
if (false) {
|
||
module.hot.accept()
|
||
if (module.hot.data) {
|
||
require("vue-hot-reload-api") .rerender("data-v-d9a40d24", module.exports)
|
||
}
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-multiselect/dist/vue-multiselect.min.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
!function(t,e){ true?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.VueMultiselect=e():t.VueMultiselect=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/",e(e.s=60)}([function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e,n){var i=n(49)("wks"),r=n(30),o=n(0).Symbol,s="function"==typeof o;(t.exports=function(t){return i[t]||(i[t]=s&&o[t]||(s?o:r)("Symbol."+t))}).store=i},function(t,e,n){var i=n(5);t.exports=function(t){if(!i(t))throw TypeError(t+" is not an object!");return t}},function(t,e,n){var i=n(0),r=n(10),o=n(8),s=n(6),u=n(11),a=function(t,e,n){var l,c,f,p,h=t&a.F,d=t&a.G,v=t&a.S,g=t&a.P,m=t&a.B,y=d?i:v?i[e]||(i[e]={}):(i[e]||{}).prototype,b=d?r:r[e]||(r[e]={}),_=b.prototype||(b.prototype={});d&&(n=e);for(l in n)c=!h&&y&&void 0!==y[l],f=(c?y:n)[l],p=m&&c?u(f,i):g&&"function"==typeof f?u(Function.call,f):f,y&&s(y,l,f,t&a.U),b[l]!=f&&o(b,l,p),g&&_[l]!=f&&(_[l]=f)};i.core=r,a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e,n){t.exports=!n(7)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){var i=n(0),r=n(8),o=n(12),s=n(30)("src"),u=Function.toString,a=(""+u).split("toString");n(10).inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,u){var l="function"==typeof n;l&&(o(n,"name")||r(n,"name",e)),t[e]!==n&&(l&&(o(n,s)||r(n,s,t[e]?""+t[e]:a.join(String(e)))),t===i?t[e]=n:u?t[e]?t[e]=n:r(t,e,n):(delete t[e],r(t,e,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[s]||u.call(this)})},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var i=n(13),r=n(25);t.exports=n(4)?function(t,e,n){return i.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){var n=t.exports={version:"2.5.7"};"number"==typeof __e&&(__e=n)},function(t,e,n){var i=n(14);t.exports=function(t,e,n){if(i(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}}},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var i=n(2),r=n(41),o=n(29),s=Object.defineProperty;e.f=n(4)?Object.defineProperty:function(t,e,n){if(i(t),e=o(e,!0),i(n),r)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e){t.exports={}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){"use strict";var i=n(7);t.exports=function(t,e){return!!t&&i(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e,n){var i=n(23),r=n(16);t.exports=function(t){return i(r(t))}},function(t,e,n){var i=n(53),r=Math.min;t.exports=function(t){return t>0?r(i(t),9007199254740991):0}},function(t,e,n){var i=n(11),r=n(23),o=n(28),s=n(19),u=n(64);t.exports=function(t,e){var n=1==t,a=2==t,l=3==t,c=4==t,f=6==t,p=5==t||f,h=e||u;return function(e,u,d){for(var v,g,m=o(e),y=r(m),b=i(u,d,3),_=s(y.length),x=0,w=n?h(e,_):a?h(e,0):void 0;_>x;x++)if((p||x in y)&&(v=y[x],g=b(v,x,m),t))if(n)w[x]=g;else if(g)switch(t){case 3:return!0;case 5:return v;case 6:return x;case 2:w.push(v)}else if(c)return!1;return f?-1:l||c?c:w}}},function(t,e,n){var i=n(5),r=n(0).document,o=i(r)&&i(r.createElement);t.exports=function(t){return o?r.createElement(t):{}}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var i=n(9);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==i(t)?t.split(""):Object(t)}},function(t,e){t.exports=!1},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var i=n(13).f,r=n(12),o=n(1)("toStringTag");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,o)&&i(t,o,{configurable:!0,value:e})}},function(t,e,n){var i=n(49)("keys"),r=n(30);t.exports=function(t){return i[t]||(i[t]=r(t))}},function(t,e,n){var i=n(16);t.exports=function(t){return Object(i(t))}},function(t,e,n){var i=n(5);t.exports=function(t,e){if(!i(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!i(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},function(t,e){var n=0,i=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+i).toString(36))}},function(t,e,n){"use strict";var i=n(0),r=n(12),o=n(9),s=n(67),u=n(29),a=n(7),l=n(77).f,c=n(45).f,f=n(13).f,p=n(51).trim,h=i.Number,d=h,v=h.prototype,g="Number"==o(n(44)(v)),m="trim"in String.prototype,y=function(t){var e=u(t,!1);if("string"==typeof e&&e.length>2){e=m?e.trim():p(e,3);var n,i,r,o=e.charCodeAt(0);if(43===o||45===o){if(88===(n=e.charCodeAt(2))||120===n)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:i=2,r=49;break;case 79:case 111:i=8,r=55;break;default:return+e}for(var s,a=e.slice(2),l=0,c=a.length;l<c;l++)if((s=a.charCodeAt(l))<48||s>r)return NaN;return parseInt(a,i)}}return+e};if(!h(" 0o1")||!h("0b1")||h("+0x1")){h=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof h&&(g?a(function(){v.valueOf.call(n)}):"Number"!=o(n))?s(new d(y(e)),n,h):y(e)};for(var b,_=n(4)?l(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),x=0;_.length>x;x++)r(d,b=_[x])&&!r(h,b)&&f(h,b,c(d,b));h.prototype=v,v.constructor=h,n(6)(i,"Number",h)}},function(t,e,n){"use strict";function i(t){return 0!==t&&(!(!Array.isArray(t)||0!==t.length)||!t)}function r(t){return function(){return!t.apply(void 0,arguments)}}function o(t,e){return void 0===t&&(t="undefined"),null===t&&(t="null"),!1===t&&(t="false"),-1!==t.toString().toLowerCase().indexOf(e.trim())}function s(t,e,n,i){return t.filter(function(t){return o(i(t,n),e)})}function u(t){return t.filter(function(t){return!t.$isLabel})}function a(t,e){return function(n){return n.reduce(function(n,i){return i[t]&&i[t].length?(n.push({$groupLabel:i[e],$isLabel:!0}),n.concat(i[t])):n},[])}}function l(t,e,i,r,o){return function(u){return u.map(function(u){var a;if(!u[i])return console.warn("Options passed to vue-multiselect do not contain groups, despite the config."),[];var l=s(u[i],t,e,o);return l.length?(a={},n.i(d.a)(a,r,u[r]),n.i(d.a)(a,i,l),a):[]})}}var c=n(59),f=n(54),p=(n.n(f),n(95)),h=(n.n(p),n(31)),d=(n.n(h),n(58)),v=n(91),g=(n.n(v),n(98)),m=(n.n(g),n(92)),y=(n.n(m),n(88)),b=(n.n(y),n(97)),_=(n.n(b),n(89)),x=(n.n(_),n(96)),w=(n.n(x),n(93)),S=(n.n(w),n(90)),O=(n.n(S),function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return function(t){return e.reduce(function(t,e){return e(t)},t)}});e.a={data:function(){return{search:"",isOpen:!1,prefferedOpenDirection:"below",optimizedHeight:this.maxHeight}},props:{internalSearch:{type:Boolean,default:!0},options:{type:Array,required:!0},multiple:{type:Boolean,default:!1},value:{type:null,default:function(){return[]}},trackBy:{type:String},label:{type:String},searchable:{type:Boolean,default:!0},clearOnSelect:{type:Boolean,default:!0},hideSelected:{type:Boolean,default:!1},placeholder:{type:String,default:"Select option"},allowEmpty:{type:Boolean,default:!0},resetAfter:{type:Boolean,default:!1},closeOnSelect:{type:Boolean,default:!0},customLabel:{type:Function,default:function(t,e){return i(t)?"":e?t[e]:t}},taggable:{type:Boolean,default:!1},tagPlaceholder:{type:String,default:"Press enter to create a tag"},tagPosition:{type:String,default:"top"},max:{type:[Number,Boolean],default:!1},id:{default:null},optionsLimit:{type:Number,default:1e3},groupValues:{type:String},groupLabel:{type:String},groupSelect:{type:Boolean,default:!1},blockKeys:{type:Array,default:function(){return[]}},preserveSearch:{type:Boolean,default:!1},preselectFirst:{type:Boolean,default:!1}},mounted:function(){this.multiple||this.clearOnSelect||console.warn("[Vue-Multiselect warn]: ClearOnSelect and Multiple props can’t be both set to false."),!this.multiple&&this.max&&console.warn("[Vue-Multiselect warn]: Max prop should not be used when prop Multiple equals false."),this.preselectFirst&&!this.internalValue.length&&this.options.length&&this.select(this.filteredOptions[0])},computed:{internalValue:function(){return this.value||0===this.value?Array.isArray(this.value)?this.value:[this.value]:[]},filteredOptions:function(){var t=this.search||"",e=t.toLowerCase().trim(),n=this.options.concat();return n=this.internalSearch?this.groupValues?this.filterAndFlat(n,e,this.label):s(n,e,this.label,this.customLabel):this.groupValues?a(this.groupValues,this.groupLabel)(n):n,n=this.hideSelected?n.filter(r(this.isSelected)):n,this.taggable&&e.length&&!this.isExistingOption(e)&&("bottom"===this.tagPosition?n.push({isTag:!0,label:t}):n.unshift({isTag:!0,label:t})),n.slice(0,this.optionsLimit)},valueKeys:function(){var t=this;return this.trackBy?this.internalValue.map(function(e){return e[t.trackBy]}):this.internalValue},optionKeys:function(){var t=this;return(this.groupValues?this.flatAndStrip(this.options):this.options).map(function(e){return t.customLabel(e,t.label).toString().toLowerCase()})},currentOptionLabel:function(){return this.multiple?this.searchable?"":this.placeholder:this.internalValue.length?this.getOptionLabel(this.internalValue[0]):this.searchable?"":this.placeholder}},watch:{internalValue:function(){this.resetAfter&&this.internalValue.length&&(this.search="",this.$emit("input",this.multiple?[]:null))},search:function(){this.$emit("search-change",this.search,this.id)}},methods:{getValue:function(){return this.multiple?this.internalValue:0===this.internalValue.length?null:this.internalValue[0]},filterAndFlat:function(t,e,n){return O(l(e,n,this.groupValues,this.groupLabel,this.customLabel),a(this.groupValues,this.groupLabel))(t)},flatAndStrip:function(t){return O(a(this.groupValues,this.groupLabel),u)(t)},updateSearch:function(t){this.search=t},isExistingOption:function(t){return!!this.options&&this.optionKeys.indexOf(t)>-1},isSelected:function(t){var e=this.trackBy?t[this.trackBy]:t;return this.valueKeys.indexOf(e)>-1},getOptionLabel:function(t){if(i(t))return"";if(t.isTag)return t.label;if(t.$isLabel)return t.$groupLabel;var e=this.customLabel(t,this.label);return i(e)?"":e},select:function(t,e){if(t.$isLabel&&this.groupSelect)return void this.selectGroup(t);if(!(-1!==this.blockKeys.indexOf(e)||this.disabled||t.$isDisabled||t.$isLabel)&&(!this.max||!this.multiple||this.internalValue.length!==this.max)&&("Tab"!==e||this.pointerDirty)){if(t.isTag)this.$emit("tag",t.label,this.id),this.search="",this.closeOnSelect&&!this.multiple&&this.deactivate();else{if(this.isSelected(t))return void("Tab"!==e&&this.removeElement(t));this.$emit("select",t,this.id),this.multiple?this.$emit("input",this.internalValue.concat([t]),this.id):this.$emit("input",t,this.id),this.clearOnSelect&&(this.search="")}this.closeOnSelect&&this.deactivate()}},selectGroup:function(t){var e=this,n=this.options.find(function(n){return n[e.groupLabel]===t.$groupLabel});if(n)if(this.wholeGroupSelected(n)){this.$emit("remove",n[this.groupValues],this.id);var i=this.internalValue.filter(function(t){return-1===n[e.groupValues].indexOf(t)});this.$emit("input",i,this.id)}else{var o=n[this.groupValues].filter(r(this.isSelected));this.$emit("select",o,this.id),this.$emit("input",this.internalValue.concat(o),this.id)}},wholeGroupSelected:function(t){return t[this.groupValues].every(this.isSelected)},removeElement:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!this.disabled){if(!this.allowEmpty&&this.internalValue.length<=1)return void this.deactivate();var i="object"===n.i(c.a)(t)?this.valueKeys.indexOf(t[this.trackBy]):this.valueKeys.indexOf(t);if(this.$emit("remove",t,this.id),this.multiple){var r=this.internalValue.slice(0,i).concat(this.internalValue.slice(i+1));this.$emit("input",r,this.id)}else this.$emit("input",null,this.id);this.closeOnSelect&&e&&this.deactivate()}},removeLastElement:function(){-1===this.blockKeys.indexOf("Delete")&&0===this.search.length&&Array.isArray(this.internalValue)&&this.removeElement(this.internalValue[this.internalValue.length-1],!1)},activate:function(){var t=this;this.isOpen||this.disabled||(this.adjustPosition(),this.groupValues&&0===this.pointer&&this.filteredOptions.length&&(this.pointer=1),this.isOpen=!0,this.searchable?(this.preserveSearch||(this.search=""),this.$nextTick(function(){return t.$refs.search.focus()})):this.$el.focus(),this.$emit("open",this.id))},deactivate:function(){this.isOpen&&(this.isOpen=!1,this.searchable?this.$refs.search.blur():this.$el.blur(),this.preserveSearch||(this.search=""),this.$emit("close",this.getValue(),this.id))},toggle:function(){this.isOpen?this.deactivate():this.activate()},adjustPosition:function(){if("undefined"!=typeof window){var t=this.$el.getBoundingClientRect().top,e=window.innerHeight-this.$el.getBoundingClientRect().bottom;e>this.maxHeight||e>t||"below"===this.openDirection||"bottom"===this.openDirection?(this.prefferedOpenDirection="below",this.optimizedHeight=Math.min(e-40,this.maxHeight)):(this.prefferedOpenDirection="above",this.optimizedHeight=Math.min(t-40,this.maxHeight))}}}}},function(t,e,n){"use strict";var i=n(54),r=(n.n(i),n(31));n.n(r);e.a={data:function(){return{pointer:0,pointerDirty:!1}},props:{showPointer:{type:Boolean,default:!0},optionHeight:{type:Number,default:40}},computed:{pointerPosition:function(){return this.pointer*this.optionHeight},visibleElements:function(){return this.optimizedHeight/this.optionHeight}},watch:{filteredOptions:function(){this.pointerAdjust()},isOpen:function(){this.pointerDirty=!1}},methods:{optionHighlight:function(t,e){return{"multiselect__option--highlight":t===this.pointer&&this.showPointer,"multiselect__option--selected":this.isSelected(e)}},groupHighlight:function(t,e){var n=this;if(!this.groupSelect)return["multiselect__option--group","multiselect__option--disabled"];var i=this.options.find(function(t){return t[n.groupLabel]===e.$groupLabel});return["multiselect__option--group",{"multiselect__option--highlight":t===this.pointer&&this.showPointer},{"multiselect__option--group-selected":this.wholeGroupSelected(i)}]},addPointerElement:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Enter",e=t.key;this.filteredOptions.length>0&&this.select(this.filteredOptions[this.pointer],e),this.pointerReset()},pointerForward:function(){this.pointer<this.filteredOptions.length-1&&(this.pointer++,this.$refs.list.scrollTop<=this.pointerPosition-(this.visibleElements-1)*this.optionHeight&&(this.$refs.list.scrollTop=this.pointerPosition-(this.visibleElements-1)*this.optionHeight),this.filteredOptions[this.pointer]&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerForward()),this.pointerDirty=!0},pointerBackward:function(){this.pointer>0?(this.pointer--,this.$refs.list.scrollTop>=this.pointerPosition&&(this.$refs.list.scrollTop=this.pointerPosition),this.filteredOptions[this.pointer]&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerBackward()):this.filteredOptions[this.pointer]&&this.filteredOptions[0].$isLabel&&!this.groupSelect&&this.pointerForward(),this.pointerDirty=!0},pointerReset:function(){this.closeOnSelect&&(this.pointer=0,this.$refs.list&&(this.$refs.list.scrollTop=0))},pointerAdjust:function(){this.pointer>=this.filteredOptions.length-1&&(this.pointer=this.filteredOptions.length?this.filteredOptions.length-1:0),this.filteredOptions.length>0&&this.filteredOptions[this.pointer].$isLabel&&!this.groupSelect&&this.pointerForward()},pointerSet:function(t){this.pointer=t,this.pointerDirty=!0}}}},function(t,e,n){"use strict";var i=n(36),r=n(74),o=n(15),s=n(18);t.exports=n(72)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,r(1)):"keys"==e?r(0,n):"values"==e?r(0,t[n]):r(0,[n,t[n]])},"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},function(t,e,n){"use strict";var i=n(31),r=(n.n(i),n(32)),o=n(33);e.a={name:"vue-multiselect",mixins:[r.a,o.a],props:{name:{type:String,default:""},selectLabel:{type:String,default:"Press enter to select"},selectGroupLabel:{type:String,default:"Press enter to select group"},selectedLabel:{type:String,default:"Selected"},deselectLabel:{type:String,default:"Press enter to remove"},deselectGroupLabel:{type:String,default:"Press enter to deselect group"},showLabels:{type:Boolean,default:!0},limit:{type:Number,default:99999},maxHeight:{type:Number,default:300},limitText:{type:Function,default:function(t){return"and ".concat(t," more")}},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},openDirection:{type:String,default:""},showNoOptions:{type:Boolean,default:!0},showNoResults:{type:Boolean,default:!0},tabindex:{type:Number,default:0}},computed:{isSingleLabelVisible:function(){return this.singleValue&&(!this.isOpen||!this.searchable)&&!this.visibleValues.length},isPlaceholderVisible:function(){return!(this.internalValue.length||this.searchable&&this.isOpen)},visibleValues:function(){return this.multiple?this.internalValue.slice(0,this.limit):[]},singleValue:function(){return this.internalValue[0]},deselectLabelText:function(){return this.showLabels?this.deselectLabel:""},deselectGroupLabelText:function(){return this.showLabels?this.deselectGroupLabel:""},selectLabelText:function(){return this.showLabels?this.selectLabel:""},selectGroupLabelText:function(){return this.showLabels?this.selectGroupLabel:""},selectedLabelText:function(){return this.showLabels?this.selectedLabel:""},inputStyle:function(){if(this.searchable||this.multiple&&this.value&&this.value.length)return this.isOpen?{width:"auto"}:{width:"0",position:"absolute",padding:"0"}},contentStyle:function(){return this.options.length?{display:"inline-block"}:{display:"block"}},isAbove:function(){return"above"===this.openDirection||"top"===this.openDirection||"below"!==this.openDirection&&"bottom"!==this.openDirection&&"above"===this.prefferedOpenDirection},showSearchInput:function(){return this.searchable&&(!this.hasSingleSelectedSlot||!this.visibleSingleValue&&0!==this.visibleSingleValue||this.isOpen)}}}},function(t,e,n){var i=n(1)("unscopables"),r=Array.prototype;void 0==r[i]&&n(8)(r,i,{}),t.exports=function(t){r[i][t]=!0}},function(t,e,n){var i=n(18),r=n(19),o=n(85);t.exports=function(t){return function(e,n,s){var u,a=i(e),l=r(a.length),c=o(s,l);if(t&&n!=n){for(;l>c;)if((u=a[c++])!=u)return!0}else for(;l>c;c++)if((t||c in a)&&a[c]===n)return t||c||0;return!t&&-1}}},function(t,e,n){var i=n(9),r=n(1)("toStringTag"),o="Arguments"==i(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,u;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=s(e=Object(t),r))?n:o?i(e):"Object"==(u=i(e))&&"function"==typeof e.callee?"Arguments":u}},function(t,e,n){"use strict";var i=n(2);t.exports=function(){var t=i(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){var i=n(0).document;t.exports=i&&i.documentElement},function(t,e,n){t.exports=!n(4)&&!n(7)(function(){return 7!=Object.defineProperty(n(21)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){var i=n(9);t.exports=Array.isArray||function(t){return"Array"==i(t)}},function(t,e,n){"use strict";function i(t){var e,n;this.promise=new t(function(t,i){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=i}),this.resolve=r(e),this.reject=r(n)}var r=n(14);t.exports.f=function(t){return new i(t)}},function(t,e,n){var i=n(2),r=n(76),o=n(22),s=n(27)("IE_PROTO"),u=function(){},a=function(){var t,e=n(21)("iframe"),i=o.length;for(e.style.display="none",n(40).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("<script>document.F=Object<\/script>"),t.close(),a=t.F;i--;)delete a.prototype[o[i]];return a()};t.exports=Object.create||function(t,e){var n;return null!==t?(u.prototype=i(t),n=new u,u.prototype=null,n[s]=t):n=a(),void 0===e?n:r(n,e)}},function(t,e,n){var i=n(79),r=n(25),o=n(18),s=n(29),u=n(12),a=n(41),l=Object.getOwnPropertyDescriptor;e.f=n(4)?l:function(t,e){if(t=o(t),e=s(e,!0),a)try{return l(t,e)}catch(t){}if(u(t,e))return r(!i.f.call(t,e),t[e])}},function(t,e,n){var i=n(12),r=n(18),o=n(37)(!1),s=n(27)("IE_PROTO");t.exports=function(t,e){var n,u=r(t),a=0,l=[];for(n in u)n!=s&&i(u,n)&&l.push(n);for(;e.length>a;)i(u,n=e[a++])&&(~o(l,n)||l.push(n));return l}},function(t,e,n){var i=n(46),r=n(22);t.exports=Object.keys||function(t){return i(t,r)}},function(t,e,n){var i=n(2),r=n(5),o=n(43);t.exports=function(t,e){if(i(t),r(e)&&e.constructor===t)return e;var n=o.f(t);return(0,n.resolve)(e),n.promise}},function(t,e,n){var i=n(10),r=n(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:i.version,mode:n(24)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(t,e,n){var i=n(2),r=n(14),o=n(1)("species");t.exports=function(t,e){var n,s=i(t).constructor;return void 0===s||void 0==(n=i(s)[o])?e:r(n)}},function(t,e,n){var i=n(3),r=n(16),o=n(7),s=n(84),u="["+s+"]",a="
",l=RegExp("^"+u+u+"*"),c=RegExp(u+u+"*$"),f=function(t,e,n){var r={},u=o(function(){return!!s[t]()||a[t]()!=a}),l=r[t]=u?e(p):s[t];n&&(r[n]=l),i(i.P+i.F*u,"String",r)},p=f.trim=function(t,e){return t=String(r(t)),1&e&&(t=t.replace(l,"")),2&e&&(t=t.replace(c,"")),t};t.exports=f},function(t,e,n){var i,r,o,s=n(11),u=n(68),a=n(40),l=n(21),c=n(0),f=c.process,p=c.setImmediate,h=c.clearImmediate,d=c.MessageChannel,v=c.Dispatch,g=0,m={},y=function(){var t=+this;if(m.hasOwnProperty(t)){var e=m[t];delete m[t],e()}},b=function(t){y.call(t.data)};p&&h||(p=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return m[++g]=function(){u("function"==typeof t?t:Function(t),e)},i(g),g},h=function(t){delete m[t]},"process"==n(9)(f)?i=function(t){f.nextTick(s(y,t,1))}:v&&v.now?i=function(t){v.now(s(y,t,1))}:d?(r=new d,o=r.port2,r.port1.onmessage=b,i=s(o.postMessage,o,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(i=function(t){c.postMessage(t+"","*")},c.addEventListener("message",b,!1)):i="onreadystatechange"in l("script")?function(t){a.appendChild(l("script")).onreadystatechange=function(){a.removeChild(this),y.call(t)}}:function(t){setTimeout(s(y,t,1),0)}),t.exports={set:p,clear:h}},function(t,e){var n=Math.ceil,i=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?i:n)(t)}},function(t,e,n){"use strict";var i=n(3),r=n(20)(5),o=!0;"find"in[]&&Array(1).find(function(){o=!1}),i(i.P+i.F*o,"Array",{find:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),n(36)("find")},function(t,e,n){"use strict";var i,r,o,s,u=n(24),a=n(0),l=n(11),c=n(38),f=n(3),p=n(5),h=n(14),d=n(61),v=n(66),g=n(50),m=n(52).set,y=n(75)(),b=n(43),_=n(80),x=n(86),w=n(48),S=a.TypeError,O=a.process,L=O&&O.versions,P=L&&L.v8||"",k=a.Promise,T="process"==c(O),E=function(){},V=r=b.f,A=!!function(){try{var t=k.resolve(1),e=(t.constructor={})[n(1)("species")]=function(t){t(E,E)};return(T||"function"==typeof PromiseRejectionEvent)&&t.then(E)instanceof e&&0!==P.indexOf("6.6")&&-1===x.indexOf("Chrome/66")}catch(t){}}(),C=function(t){var e;return!(!p(t)||"function"!=typeof(e=t.then))&&e},j=function(t,e){if(!t._n){t._n=!0;var n=t._c;y(function(){for(var i=t._v,r=1==t._s,o=0;n.length>o;)!function(e){var n,o,s,u=r?e.ok:e.fail,a=e.resolve,l=e.reject,c=e.domain;try{u?(r||(2==t._h&&$(t),t._h=1),!0===u?n=i:(c&&c.enter(),n=u(i),c&&(c.exit(),s=!0)),n===e.promise?l(S("Promise-chain cycle")):(o=C(n))?o.call(n,a,l):a(n)):l(i)}catch(t){c&&!s&&c.exit(),l(t)}}(n[o++]);t._c=[],t._n=!1,e&&!t._h&&N(t)})}},N=function(t){m.call(a,function(){var e,n,i,r=t._v,o=D(t);if(o&&(e=_(function(){T?O.emit("unhandledRejection",r,t):(n=a.onunhandledrejection)?n({promise:t,reason:r}):(i=a.console)&&i.error&&i.error("Unhandled promise rejection",r)}),t._h=T||D(t)?2:1),t._a=void 0,o&&e.e)throw e.v})},D=function(t){return 1!==t._h&&0===(t._a||t._c).length},$=function(t){m.call(a,function(){var e;T?O.emit("rejectionHandled",t):(e=a.onrejectionhandled)&&e({promise:t,reason:t._v})})},M=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),j(e,!0))},F=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw S("Promise can't be resolved itself");(e=C(t))?y(function(){var i={_w:n,_d:!1};try{e.call(t,l(F,i,1),l(M,i,1))}catch(t){M.call(i,t)}}):(n._v=t,n._s=1,j(n,!1))}catch(t){M.call({_w:n,_d:!1},t)}}};A||(k=function(t){d(this,k,"Promise","_h"),h(t),i.call(this);try{t(l(F,this,1),l(M,this,1))}catch(t){M.call(this,t)}},i=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},i.prototype=n(81)(k.prototype,{then:function(t,e){var n=V(g(this,k));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=T?O.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&j(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new i;this.promise=t,this.resolve=l(F,t,1),this.reject=l(M,t,1)},b.f=V=function(t){return t===k||t===s?new o(t):r(t)}),f(f.G+f.W+f.F*!A,{Promise:k}),n(26)(k,"Promise"),n(83)("Promise"),s=n(10).Promise,f(f.S+f.F*!A,"Promise",{reject:function(t){var e=V(this);return(0,e.reject)(t),e.promise}}),f(f.S+f.F*(u||!A),"Promise",{resolve:function(t){return w(u&&this===s?k:this,t)}}),f(f.S+f.F*!(A&&n(73)(function(t){k.all(t).catch(E)})),"Promise",{all:function(t){var e=this,n=V(e),i=n.resolve,r=n.reject,o=_(function(){var n=[],o=0,s=1;v(t,!1,function(t){var u=o++,a=!1;n.push(void 0),s++,e.resolve(t).then(function(t){a||(a=!0,n[u]=t,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(t){var e=this,n=V(e),i=n.reject,r=_(function(){v(t,!1,function(t){e.resolve(t).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}})},function(t,e,n){"use strict";var i=n(3),r=n(10),o=n(0),s=n(50),u=n(48);i(i.P+i.R,"Promise",{finally:function(t){var e=s(this,r.Promise||o.Promise),n="function"==typeof t;return this.then(n?function(n){return u(e,t()).then(function(){return n})}:t,n?function(n){return u(e,t()).then(function(){throw n})}:t)}})},function(t,e,n){"use strict";function i(t){n(99)}var r=n(35),o=n(101),s=n(100),u=i,a=s(r.a,o.a,!1,u,null,null);e.a=a.exports},function(t,e,n){"use strict";function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.a=i},function(t,e,n){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t){return(r="function"==typeof Symbol&&"symbol"===i(Symbol.iterator)?function(t){return i(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":i(t)})(t)}e.a=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(34),r=(n.n(i),n(55)),o=(n.n(r),n(56)),s=(n.n(o),n(57)),u=n(32),a=n(33);n.d(e,"Multiselect",function(){return s.a}),n.d(e,"multiselectMixin",function(){return u.a}),n.d(e,"pointerMixin",function(){return a.a}),e.default=s.a},function(t,e){t.exports=function(t,e,n,i){if(!(t instanceof e)||void 0!==i&&i in t)throw TypeError(n+": incorrect invocation!");return t}},function(t,e,n){var i=n(14),r=n(28),o=n(23),s=n(19);t.exports=function(t,e,n,u,a){i(e);var l=r(t),c=o(l),f=s(l.length),p=a?f-1:0,h=a?-1:1;if(n<2)for(;;){if(p in c){u=c[p],p+=h;break}if(p+=h,a?p<0:f<=p)throw TypeError("Reduce of empty array with no initial value")}for(;a?p>=0:f>p;p+=h)p in c&&(u=e(u,c[p],p,l));return u}},function(t,e,n){var i=n(5),r=n(42),o=n(1)("species");t.exports=function(t){var e;return r(t)&&(e=t.constructor,"function"!=typeof e||e!==Array&&!r(e.prototype)||(e=void 0),i(e)&&null===(e=e[o])&&(e=void 0)),void 0===e?Array:e}},function(t,e,n){var i=n(63);t.exports=function(t,e){return new(i(t))(e)}},function(t,e,n){"use strict";var i=n(8),r=n(6),o=n(7),s=n(16),u=n(1);t.exports=function(t,e,n){var a=u(t),l=n(s,a,""[t]),c=l[0],f=l[1];o(function(){var e={};return e[a]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,c),i(RegExp.prototype,a,2==e?function(t,e){return f.call(t,this,e)}:function(t){return f.call(t,this)}))}},function(t,e,n){var i=n(11),r=n(70),o=n(69),s=n(2),u=n(19),a=n(87),l={},c={},e=t.exports=function(t,e,n,f,p){var h,d,v,g,m=p?function(){return t}:a(t),y=i(n,f,e?2:1),b=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(o(m)){for(h=u(t.length);h>b;b++)if((g=e?y(s(d=t[b])[0],d[1]):y(t[b]))===l||g===c)return g}else for(v=m.call(t);!(d=v.next()).done;)if((g=r(v,y,d.value,e))===l||g===c)return g};e.BREAK=l,e.RETURN=c},function(t,e,n){var i=n(5),r=n(82).set;t.exports=function(t,e,n){var o,s=e.constructor;return s!==n&&"function"==typeof s&&(o=s.prototype)!==n.prototype&&i(o)&&r&&r(t,o),t}},function(t,e){t.exports=function(t,e,n){var i=void 0===n;switch(e.length){case 0:return i?t():t.call(n);case 1:return i?t(e[0]):t.call(n,e[0]);case 2:return i?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return i?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return i?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},function(t,e,n){var i=n(15),r=n(1)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(i.Array===t||o[r]===t)}},function(t,e,n){var i=n(2);t.exports=function(t,e,n,r){try{return r?e(i(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&i(o.call(t)),e}}},function(t,e,n){"use strict";var i=n(44),r=n(25),o=n(26),s={};n(8)(s,n(1)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=i(s,{next:r(1,n)}),o(t,e+" Iterator")}},function(t,e,n){"use strict";var i=n(24),r=n(3),o=n(6),s=n(8),u=n(15),a=n(71),l=n(26),c=n(78),f=n(1)("iterator"),p=!([].keys&&"next"in[].keys()),h=function(){return this};t.exports=function(t,e,n,d,v,g,m){a(n,e,d);var y,b,_,x=function(t){if(!p&&t in L)return L[t];switch(t){case"keys":case"values":return function(){return new n(this,t)}}return function(){return new n(this,t)}},w=e+" Iterator",S="values"==v,O=!1,L=t.prototype,P=L[f]||L["@@iterator"]||v&&L[v],k=P||x(v),T=v?S?x("entries"):k:void 0,E="Array"==e?L.entries||P:P;if(E&&(_=c(E.call(new t)))!==Object.prototype&&_.next&&(l(_,w,!0),i||"function"==typeof _[f]||s(_,f,h)),S&&P&&"values"!==P.name&&(O=!0,k=function(){return P.call(this)}),i&&!m||!p&&!O&&L[f]||s(L,f,k),u[e]=k,u[w]=h,v)if(y={values:S?k:x("values"),keys:g?k:x("keys"),entries:T},m)for(b in y)b in L||o(L,b,y[b]);else r(r.P+r.F*(p||O),e,y);return y}},function(t,e,n){var i=n(1)("iterator"),r=!1;try{var o=[7][i]();o.return=function(){r=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var o=[7],s=o[i]();s.next=function(){return{done:n=!0}},o[i]=function(){return s},t(o)}catch(t){}return n}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){var i=n(0),r=n(52).set,o=i.MutationObserver||i.WebKitMutationObserver,s=i.process,u=i.Promise,a="process"==n(9)(s);t.exports=function(){var t,e,n,l=function(){var i,r;for(a&&(i=s.domain)&&i.exit();t;){r=t.fn,t=t.next;try{r()}catch(i){throw t?n():e=void 0,i}}e=void 0,i&&i.enter()};if(a)n=function(){s.nextTick(l)};else if(!o||i.navigator&&i.navigator.standalone)if(u&&u.resolve){var c=u.resolve(void 0);n=function(){c.then(l)}}else n=function(){r.call(i,l)};else{var f=!0,p=document.createTextNode("");new o(l).observe(p,{characterData:!0}),n=function(){p.data=f=!f}}return function(i){var r={fn:i,next:void 0};e&&(e.next=r),t||(t=r,n()),e=r}}},function(t,e,n){var i=n(13),r=n(2),o=n(47);t.exports=n(4)?Object.defineProperties:function(t,e){r(t);for(var n,s=o(e),u=s.length,a=0;u>a;)i.f(t,n=s[a++],e[n]);return t}},function(t,e,n){var i=n(46),r=n(22).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return i(t,r)}},function(t,e,n){var i=n(12),r=n(28),o=n(27)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=r(t),i(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,n){var i=n(6);t.exports=function(t,e,n){for(var r in e)i(t,r,e[r],n);return t}},function(t,e,n){var i=n(5),r=n(2),o=function(t,e){if(r(t),!i(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,i){try{i=n(11)(Function.call,n(45).f(Object.prototype,"__proto__").set,2),i(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,n){return o(t,n),e?t.__proto__=n:i(t,n),t}}({},!1):void 0),check:o}},function(t,e,n){"use strict";var i=n(0),r=n(13),o=n(4),s=n(1)("species");t.exports=function(t){var e=i[t];o&&e&&!e[s]&&r.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e){t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},function(t,e,n){var i=n(53),r=Math.max,o=Math.min;t.exports=function(t,e){return t=i(t),t<0?r(t+e,0):o(t,e)}},function(t,e,n){var i=n(0),r=i.navigator;t.exports=r&&r.userAgent||""},function(t,e,n){var i=n(38),r=n(1)("iterator"),o=n(15);t.exports=n(10).getIteratorMethod=function(t){if(void 0!=t)return t[r]||t["@@iterator"]||o[i(t)]}},function(t,e,n){"use strict";var i=n(3),r=n(20)(2);i(i.P+i.F*!n(17)([].filter,!0),"Array",{filter:function(t){return r(this,t,arguments[1])}})},function(t,e,n){"use strict";var i=n(3),r=n(37)(!1),o=[].indexOf,s=!!o&&1/[1].indexOf(1,-0)<0;i(i.P+i.F*(s||!n(17)(o)),"Array",{indexOf:function(t){return s?o.apply(this,arguments)||0:r(this,t,arguments[1])}})},function(t,e,n){var i=n(3);i(i.S,"Array",{isArray:n(42)})},function(t,e,n){"use strict";var i=n(3),r=n(20)(1);i(i.P+i.F*!n(17)([].map,!0),"Array",{map:function(t){return r(this,t,arguments[1])}})},function(t,e,n){"use strict";var i=n(3),r=n(62);i(i.P+i.F*!n(17)([].reduce,!0),"Array",{reduce:function(t){return r(this,t,arguments.length,arguments[1],!1)}})},function(t,e,n){var i=Date.prototype,r=i.toString,o=i.getTime;new Date(NaN)+""!="Invalid Date"&&n(6)(i,"toString",function(){var t=o.call(this);return t===t?r.call(this):"Invalid Date"})},function(t,e,n){n(4)&&"g"!=/./g.flags&&n(13).f(RegExp.prototype,"flags",{configurable:!0,get:n(39)})},function(t,e,n){n(65)("search",1,function(t,e,n){return[function(n){"use strict";var i=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,i):new RegExp(n)[e](String(i))},n]})},function(t,e,n){"use strict";n(94);var i=n(2),r=n(39),o=n(4),s=/./.toString,u=function(t){n(6)(RegExp.prototype,"toString",t,!0)};n(7)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?u(function(){var t=i(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?r.call(t):void 0)}):"toString"!=s.name&&u(function(){return s.call(this)})},function(t,e,n){"use strict";n(51)("trim",function(t){return function(){return t(this,3)}})},function(t,e,n){for(var i=n(34),r=n(47),o=n(6),s=n(0),u=n(8),a=n(15),l=n(1),c=l("iterator"),f=l("toStringTag"),p=a.Array,h={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=r(h),v=0;v<d.length;v++){var g,m=d[v],y=h[m],b=s[m],_=b&&b.prototype;if(_&&(_[c]||u(_,c,p),_[f]||u(_,f,m),a[m]=p,y))for(g in i)_[g]||o(_,g,i[g],!0)}},function(t,e){},function(t,e){t.exports=function(t,e,n,i,r,o){var s,u=t=t||{},a=typeof t.default;"object"!==a&&"function"!==a||(s=t,u=t.default);var l="function"==typeof u?u.options:u;e&&(l.render=e.render,l.staticRenderFns=e.staticRenderFns,l._compiled=!0),n&&(l.functional=!0),r&&(l._scopeId=r);var c;if(o?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(o)},l._ssrRegister=c):i&&(c=i),c){var f=l.functional,p=f?l.render:l.beforeCreate;f?(l._injectStyles=c,l.render=function(t,e){return c.call(e),p(t,e)}):l.beforeCreate=p?[].concat(p,c):[c]}return{esModule:s,exports:u,options:l}}},function(t,e,n){"use strict";var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"multiselect",class:{"multiselect--active":t.isOpen,"multiselect--disabled":t.disabled,"multiselect--above":t.isAbove},attrs:{tabindex:t.searchable?-1:t.tabindex},on:{focus:function(e){t.activate()},blur:function(e){!t.searchable&&t.deactivate()},keydown:[function(e){return"button"in e||!t._k(e.keyCode,"down",40,e.key,["Down","ArrowDown"])?e.target!==e.currentTarget?null:(e.preventDefault(),void t.pointerForward()):null},function(e){return"button"in e||!t._k(e.keyCode,"up",38,e.key,["Up","ArrowUp"])?e.target!==e.currentTarget?null:(e.preventDefault(),void t.pointerBackward()):null},function(e){return"button"in e||!t._k(e.keyCode,"enter",13,e.key,"Enter")||!t._k(e.keyCode,"tab",9,e.key,"Tab")?(e.stopPropagation(),e.target!==e.currentTarget?null:void t.addPointerElement(e)):null}],keyup:function(e){if(!("button"in e)&&t._k(e.keyCode,"esc",27,e.key,"Escape"))return null;t.deactivate()}}},[t._t("caret",[n("div",{staticClass:"multiselect__select",on:{mousedown:function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}}})],{toggle:t.toggle}),t._v(" "),t._t("clear",null,{search:t.search}),t._v(" "),n("div",{ref:"tags",staticClass:"multiselect__tags"},[t._t("selection",[n("div",{directives:[{name:"show",rawName:"v-show",value:t.visibleValues.length>0,expression:"visibleValues.length > 0"}],staticClass:"multiselect__tags-wrap"},[t._l(t.visibleValues,function(e,i){return[t._t("tag",[n("span",{key:i,staticClass:"multiselect__tag"},[n("span",{domProps:{textContent:t._s(t.getOptionLabel(e))}}),t._v(" "),n("i",{staticClass:"multiselect__tag-icon",attrs:{"aria-hidden":"true",tabindex:"1"},on:{keydown:function(n){if(!("button"in n)&&t._k(n.keyCode,"enter",13,n.key,"Enter"))return null;n.preventDefault(),t.removeElement(e)},mousedown:function(n){n.preventDefault(),t.removeElement(e)}}})])],{option:e,search:t.search,remove:t.removeElement})]})],2),t._v(" "),t.internalValue&&t.internalValue.length>t.limit?[t._t("limit",[n("strong",{staticClass:"multiselect__strong",domProps:{textContent:t._s(t.limitText(t.internalValue.length-t.limit))}})])]:t._e()],{search:t.search,remove:t.removeElement,values:t.visibleValues,isOpen:t.isOpen}),t._v(" "),n("transition",{attrs:{name:"multiselect__loading"}},[t._t("loading",[n("div",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],staticClass:"multiselect__spinner"})])],2),t._v(" "),t.searchable?n("input",{ref:"search",staticClass:"multiselect__input",style:t.inputStyle,attrs:{name:t.name,id:t.id,type:"text",autocomplete:"off",placeholder:t.placeholder,disabled:t.disabled,tabindex:t.tabindex},domProps:{value:t.search},on:{input:function(e){t.updateSearch(e.target.value)},focus:function(e){e.preventDefault(),t.activate()},blur:function(e){e.preventDefault(),t.deactivate()},keyup:function(e){if(!("button"in e)&&t._k(e.keyCode,"esc",27,e.key,"Escape"))return null;t.deactivate()},keydown:[function(e){if(!("button"in e)&&t._k(e.keyCode,"down",40,e.key,["Down","ArrowDown"]))return null;e.preventDefault(),t.pointerForward()},function(e){if(!("button"in e)&&t._k(e.keyCode,"up",38,e.key,["Up","ArrowUp"]))return null;e.preventDefault(),t.pointerBackward()},function(e){return"button"in e||!t._k(e.keyCode,"enter",13,e.key,"Enter")?(e.preventDefault(),e.stopPropagation(),e.target!==e.currentTarget?null:void t.addPointerElement(e)):null},function(e){if(!("button"in e)&&t._k(e.keyCode,"delete",[8,46],e.key,["Backspace","Delete"]))return null;e.stopPropagation(),t.removeLastElement()}]}}):t._e(),t._v(" "),t.isSingleLabelVisible?n("span",{staticClass:"multiselect__single",on:{mousedown:function(e){return e.preventDefault(),t.toggle(e)}}},[t._t("singleLabel",[[t._v(t._s(t.currentOptionLabel))]],{option:t.singleValue})],2):t._e(),t._v(" "),t.isPlaceholderVisible?n("span",{staticClass:"multiselect__placeholder",on:{mousedown:function(e){return e.preventDefault(),t.toggle(e)}}},[t._t("placeholder",[t._v("\n "+t._s(t.placeholder)+"\n ")])],2):t._e()],2),t._v(" "),n("transition",{attrs:{name:"multiselect"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.isOpen,expression:"isOpen"}],ref:"list",staticClass:"multiselect__content-wrapper",style:{maxHeight:t.optimizedHeight+"px"},attrs:{tabindex:"-1"},on:{focus:t.activate,mousedown:function(t){t.preventDefault()}}},[n("ul",{staticClass:"multiselect__content",style:t.contentStyle},[t._t("beforeList"),t._v(" "),t.multiple&&t.max===t.internalValue.length?n("li",[n("span",{staticClass:"multiselect__option"},[t._t("maxElements",[t._v("Maximum of "+t._s(t.max)+" options selected. First remove a selected option to select another.")])],2)]):t._e(),t._v(" "),!t.max||t.internalValue.length<t.max?t._l(t.filteredOptions,function(e,i){return n("li",{key:i,staticClass:"multiselect__element"},[e&&(e.$isLabel||e.$isDisabled)?t._e():n("span",{staticClass:"multiselect__option",class:t.optionHighlight(i,e),attrs:{"data-select":e&&e.isTag?t.tagPlaceholder:t.selectLabelText,"data-selected":t.selectedLabelText,"data-deselect":t.deselectLabelText},on:{click:function(n){n.stopPropagation(),t.select(e)},mouseenter:function(e){if(e.target!==e.currentTarget)return null;t.pointerSet(i)}}},[t._t("option",[n("span",[t._v(t._s(t.getOptionLabel(e)))])],{option:e,search:t.search})],2),t._v(" "),e&&(e.$isLabel||e.$isDisabled)?n("span",{staticClass:"multiselect__option",class:t.groupHighlight(i,e),attrs:{"data-select":t.groupSelect&&t.selectGroupLabelText,"data-deselect":t.groupSelect&&t.deselectGroupLabelText},on:{mouseenter:function(e){if(e.target!==e.currentTarget)return null;t.groupSelect&&t.pointerSet(i)},mousedown:function(n){n.preventDefault(),t.selectGroup(e)}}},[t._t("option",[n("span",[t._v(t._s(t.getOptionLabel(e)))])],{option:e,search:t.search})],2):t._e()])}):t._e(),t._v(" "),n("li",{directives:[{name:"show",rawName:"v-show",value:t.showNoResults&&0===t.filteredOptions.length&&t.search&&!t.loading,expression:"showNoResults && (filteredOptions.length === 0 && search && !loading)"}]},[n("span",{staticClass:"multiselect__option"},[t._t("noResult",[t._v("No elements found. Consider changing the search query.")])],2)]),t._v(" "),n("li",{directives:[{name:"show",rawName:"v-show",value:t.showNoOptions&&0===t.options.length&&!t.search&&!t.loading,expression:"showNoOptions && (options.length === 0 && !search && !loading)"}]},[n("span",{staticClass:"multiselect__option"},[t._t("noOptions",[t._v("List is empty.")])],2)]),t._v(" "),t._t("afterList")],2)])])],2)},r=[],o={render:i,staticRenderFns:r};e.a=o}])});
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-0086b528\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientFilters.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// style-loader: Adds some css to the DOM by adding a <style> tag
|
||
|
||
// load the styles
|
||
var content = __webpack_require__("./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-0086b528\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientFilters.vue");
|
||
if(typeof content === 'string') content = [[module.i, content, '']];
|
||
if(content.locals) module.exports = content.locals;
|
||
// add the styles to the DOM
|
||
var update = __webpack_require__("./node_modules/vue-style-loader/lib/addStylesClient.js")("488ed548", content, false, {});
|
||
// Hot Module Replacement
|
||
if(false) {
|
||
// When the styles change, update the <style> tags
|
||
if(!content.locals) {
|
||
module.hot.accept("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-0086b528\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./ClientFilters.vue", function() {
|
||
var newContent = require("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-0086b528\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./ClientFilters.vue");
|
||
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
||
update(newContent);
|
||
});
|
||
}
|
||
// When the module is disposed, remove the <style> tags
|
||
module.hot.dispose(function() { update(); });
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-15965e3b\",\"scoped\":true,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./node_modules/vuetable-2/src/components/Vuetable.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// style-loader: Adds some css to the DOM by adding a <style> tag
|
||
|
||
// load the styles
|
||
var content = __webpack_require__("./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-15965e3b\",\"scoped\":true,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./node_modules/vuetable-2/src/components/Vuetable.vue");
|
||
if(typeof content === 'string') content = [[module.i, content, '']];
|
||
if(content.locals) module.exports = content.locals;
|
||
// add the styles to the DOM
|
||
var update = __webpack_require__("./node_modules/vue-style-loader/lib/addStylesClient.js")("c96b1a10", content, false, {});
|
||
// Hot Module Replacement
|
||
if(false) {
|
||
// When the styles change, update the <style> tags
|
||
if(!content.locals) {
|
||
module.hot.accept("!!../../../css-loader/index.js!../../../vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-15965e3b\",\"scoped\":true,\"hasInlineConfig\":true}!../../../vue-loader/lib/selector.js?type=styles&index=0!./Vuetable.vue", function() {
|
||
var newContent = require("!!../../../css-loader/index.js!../../../vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-15965e3b\",\"scoped\":true,\"hasInlineConfig\":true}!../../../vue-loader/lib/selector.js?type=styles&index=0!./Vuetable.vue");
|
||
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
||
update(newContent);
|
||
});
|
||
}
|
||
// When the module is disposed, remove the <style> tags
|
||
module.hot.dispose(function() { update(); });
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-1a665214\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/util/VueListActions.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// style-loader: Adds some css to the DOM by adding a <style> tag
|
||
|
||
// load the styles
|
||
var content = __webpack_require__("./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-1a665214\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/util/VueListActions.vue");
|
||
if(typeof content === 'string') content = [[module.i, content, '']];
|
||
if(content.locals) module.exports = content.locals;
|
||
// add the styles to the DOM
|
||
var update = __webpack_require__("./node_modules/vue-style-loader/lib/addStylesClient.js")("0f8008ee", content, false, {});
|
||
// Hot Module Replacement
|
||
if(false) {
|
||
// When the styles change, update the <style> tags
|
||
if(!content.locals) {
|
||
module.hot.accept("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-1a665214\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./VueListActions.vue", function() {
|
||
var newContent = require("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-1a665214\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./VueListActions.vue");
|
||
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
||
update(newContent);
|
||
});
|
||
}
|
||
// When the module is disposed, remove the <style> tags
|
||
module.hot.dispose(function() { update(); });
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-3cd1b306\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientList.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// style-loader: Adds some css to the DOM by adding a <style> tag
|
||
|
||
// load the styles
|
||
var content = __webpack_require__("./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-3cd1b306\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientList.vue");
|
||
if(typeof content === 'string') content = [[module.i, content, '']];
|
||
if(content.locals) module.exports = content.locals;
|
||
// add the styles to the DOM
|
||
var update = __webpack_require__("./node_modules/vue-style-loader/lib/addStylesClient.js")("1b86cec1", content, false, {});
|
||
// Hot Module Replacement
|
||
if(false) {
|
||
// When the styles change, update the <style> tags
|
||
if(!content.locals) {
|
||
module.hot.accept("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-3cd1b306\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./ClientList.vue", function() {
|
||
var newContent = require("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-3cd1b306\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./ClientList.vue");
|
||
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
||
update(newContent);
|
||
});
|
||
}
|
||
// When the module is disposed, remove the <style> tags
|
||
module.hot.dispose(function() { update(); });
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=1!./resources/js/src/components/util/VuetableMultiSelect.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// style-loader: Adds some css to the DOM by adding a <style> tag
|
||
|
||
// load the styles
|
||
var content = __webpack_require__("./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=1!./resources/js/src/components/util/VuetableMultiSelect.vue");
|
||
if(typeof content === 'string') content = [[module.i, content, '']];
|
||
if(content.locals) module.exports = content.locals;
|
||
// add the styles to the DOM
|
||
var update = __webpack_require__("./node_modules/vue-style-loader/lib/addStylesClient.js")("1569c304", content, false, {});
|
||
// Hot Module Replacement
|
||
if(false) {
|
||
// When the styles change, update the <style> tags
|
||
if(!content.locals) {
|
||
module.hot.accept("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=1!./VuetableMultiSelect.vue", function() {
|
||
var newContent = require("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=1!./VuetableMultiSelect.vue");
|
||
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
||
update(newContent);
|
||
});
|
||
}
|
||
// When the module is disposed, remove the <style> tags
|
||
module.hot.dispose(function() { update(); });
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-multiselect/dist/vue-multiselect.min.css":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// style-loader: Adds some css to the DOM by adding a <style> tag
|
||
|
||
// load the styles
|
||
var content = __webpack_require__("./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-multiselect/dist/vue-multiselect.min.css");
|
||
if(typeof content === 'string') content = [[module.i, content, '']];
|
||
if(content.locals) module.exports = content.locals;
|
||
// add the styles to the DOM
|
||
var update = __webpack_require__("./node_modules/vue-style-loader/lib/addStylesClient.js")("afbcb114", content, false, {});
|
||
// Hot Module Replacement
|
||
if(false) {
|
||
// When the styles change, update the <style> tags
|
||
if(!content.locals) {
|
||
module.hot.accept("!!../../css-loader/index.js!../../vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./vue-multiselect.min.css", function() {
|
||
var newContent = require("!!../../css-loader/index.js!../../vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./vue-multiselect.min.css");
|
||
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
||
update(newContent);
|
||
});
|
||
}
|
||
// When the module is disposed, remove the <style> tags
|
||
module.hot.dispose(function() { update(); });
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-be66a0f4\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/util/VuetableFilterBar.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// style-loader: Adds some css to the DOM by adding a <style> tag
|
||
|
||
// load the styles
|
||
var content = __webpack_require__("./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-be66a0f4\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/util/VuetableFilterBar.vue");
|
||
if(typeof content === 'string') content = [[module.i, content, '']];
|
||
if(content.locals) module.exports = content.locals;
|
||
// add the styles to the DOM
|
||
var update = __webpack_require__("./node_modules/vue-style-loader/lib/addStylesClient.js")("789b43ea", content, false, {});
|
||
// Hot Module Replacement
|
||
if(false) {
|
||
// When the styles change, update the <style> tags
|
||
if(!content.locals) {
|
||
module.hot.accept("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-be66a0f4\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./VuetableFilterBar.vue", function() {
|
||
var newContent = require("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-be66a0f4\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./VuetableFilterBar.vue");
|
||
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
||
update(newContent);
|
||
});
|
||
}
|
||
// When the module is disposed, remove the <style> tags
|
||
module.hot.dispose(function() { update(); });
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-d9a40d24\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientActions.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// style-loader: Adds some css to the DOM by adding a <style> tag
|
||
|
||
// load the styles
|
||
var content = __webpack_require__("./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-d9a40d24\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientActions.vue");
|
||
if(typeof content === 'string') content = [[module.i, content, '']];
|
||
if(content.locals) module.exports = content.locals;
|
||
// add the styles to the DOM
|
||
var update = __webpack_require__("./node_modules/vue-style-loader/lib/addStylesClient.js")("c5093156", content, false, {});
|
||
// Hot Module Replacement
|
||
if(false) {
|
||
// When the styles change, update the <style> tags
|
||
if(!content.locals) {
|
||
module.hot.accept("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-d9a40d24\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./ClientActions.vue", function() {
|
||
var newContent = require("!!../../../../../node_modules/css-loader/index.js!../../../../../node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-d9a40d24\",\"scoped\":false,\"hasInlineConfig\":true}!../../../../../node_modules/vue-loader/lib/selector.js?type=styles&index=0!./ClientActions.vue");
|
||
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
||
update(newContent);
|
||
});
|
||
}
|
||
// When the module is disposed, remove the <style> tags
|
||
module.hot.dispose(function() { update(); });
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/lib/addStylesClient.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
/*
|
||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||
Author Tobias Koppers @sokra
|
||
Modified by Evan You @yyx990803
|
||
*/
|
||
|
||
var hasDocument = typeof document !== 'undefined'
|
||
|
||
if (typeof DEBUG !== 'undefined' && DEBUG) {
|
||
if (!hasDocument) {
|
||
throw new Error(
|
||
'vue-style-loader cannot be used in a non-browser environment. ' +
|
||
"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment."
|
||
) }
|
||
}
|
||
|
||
var listToStyles = __webpack_require__("./node_modules/vue-style-loader/lib/listToStyles.js")
|
||
|
||
/*
|
||
type StyleObject = {
|
||
id: number;
|
||
parts: Array<StyleObjectPart>
|
||
}
|
||
|
||
type StyleObjectPart = {
|
||
css: string;
|
||
media: string;
|
||
sourceMap: ?string
|
||
}
|
||
*/
|
||
|
||
var stylesInDom = {/*
|
||
[id: number]: {
|
||
id: number,
|
||
refs: number,
|
||
parts: Array<(obj?: StyleObjectPart) => void>
|
||
}
|
||
*/}
|
||
|
||
var head = hasDocument && (document.head || document.getElementsByTagName('head')[0])
|
||
var singletonElement = null
|
||
var singletonCounter = 0
|
||
var isProduction = false
|
||
var noop = function () {}
|
||
var options = null
|
||
var ssrIdKey = 'data-vue-ssr-id'
|
||
|
||
// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
|
||
// tags it will allow on a page
|
||
var isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\b/.test(navigator.userAgent.toLowerCase())
|
||
|
||
module.exports = function (parentId, list, _isProduction, _options) {
|
||
isProduction = _isProduction
|
||
|
||
options = _options || {}
|
||
|
||
var styles = listToStyles(parentId, list)
|
||
addStylesToDom(styles)
|
||
|
||
return function update (newList) {
|
||
var mayRemove = []
|
||
for (var i = 0; i < styles.length; i++) {
|
||
var item = styles[i]
|
||
var domStyle = stylesInDom[item.id]
|
||
domStyle.refs--
|
||
mayRemove.push(domStyle)
|
||
}
|
||
if (newList) {
|
||
styles = listToStyles(parentId, newList)
|
||
addStylesToDom(styles)
|
||
} else {
|
||
styles = []
|
||
}
|
||
for (var i = 0; i < mayRemove.length; i++) {
|
||
var domStyle = mayRemove[i]
|
||
if (domStyle.refs === 0) {
|
||
for (var j = 0; j < domStyle.parts.length; j++) {
|
||
domStyle.parts[j]()
|
||
}
|
||
delete stylesInDom[domStyle.id]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function addStylesToDom (styles /* Array<StyleObject> */) {
|
||
for (var i = 0; i < styles.length; i++) {
|
||
var item = styles[i]
|
||
var domStyle = stylesInDom[item.id]
|
||
if (domStyle) {
|
||
domStyle.refs++
|
||
for (var j = 0; j < domStyle.parts.length; j++) {
|
||
domStyle.parts[j](item.parts[j])
|
||
}
|
||
for (; j < item.parts.length; j++) {
|
||
domStyle.parts.push(addStyle(item.parts[j]))
|
||
}
|
||
if (domStyle.parts.length > item.parts.length) {
|
||
domStyle.parts.length = item.parts.length
|
||
}
|
||
} else {
|
||
var parts = []
|
||
for (var j = 0; j < item.parts.length; j++) {
|
||
parts.push(addStyle(item.parts[j]))
|
||
}
|
||
stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }
|
||
}
|
||
}
|
||
}
|
||
|
||
function createStyleElement () {
|
||
var styleElement = document.createElement('style')
|
||
styleElement.type = 'text/css'
|
||
head.appendChild(styleElement)
|
||
return styleElement
|
||
}
|
||
|
||
function addStyle (obj /* StyleObjectPart */) {
|
||
var update, remove
|
||
var styleElement = document.querySelector('style[' + ssrIdKey + '~="' + obj.id + '"]')
|
||
|
||
if (styleElement) {
|
||
if (isProduction) {
|
||
// has SSR styles and in production mode.
|
||
// simply do nothing.
|
||
return noop
|
||
} else {
|
||
// has SSR styles but in dev mode.
|
||
// for some reason Chrome can't handle source map in server-rendered
|
||
// style tags - source maps in <style> only works if the style tag is
|
||
// created and inserted dynamically. So we remove the server rendered
|
||
// styles and inject new ones.
|
||
styleElement.parentNode.removeChild(styleElement)
|
||
}
|
||
}
|
||
|
||
if (isOldIE) {
|
||
// use singleton mode for IE9.
|
||
var styleIndex = singletonCounter++
|
||
styleElement = singletonElement || (singletonElement = createStyleElement())
|
||
update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)
|
||
remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)
|
||
} else {
|
||
// use multi-style-tag mode in all other cases
|
||
styleElement = createStyleElement()
|
||
update = applyToTag.bind(null, styleElement)
|
||
remove = function () {
|
||
styleElement.parentNode.removeChild(styleElement)
|
||
}
|
||
}
|
||
|
||
update(obj)
|
||
|
||
return function updateStyle (newObj /* StyleObjectPart */) {
|
||
if (newObj) {
|
||
if (newObj.css === obj.css &&
|
||
newObj.media === obj.media &&
|
||
newObj.sourceMap === obj.sourceMap) {
|
||
return
|
||
}
|
||
update(obj = newObj)
|
||
} else {
|
||
remove()
|
||
}
|
||
}
|
||
}
|
||
|
||
var replaceText = (function () {
|
||
var textStore = []
|
||
|
||
return function (index, replacement) {
|
||
textStore[index] = replacement
|
||
return textStore.filter(Boolean).join('\n')
|
||
}
|
||
})()
|
||
|
||
function applyToSingletonTag (styleElement, index, remove, obj) {
|
||
var css = remove ? '' : obj.css
|
||
|
||
if (styleElement.styleSheet) {
|
||
styleElement.styleSheet.cssText = replaceText(index, css)
|
||
} else {
|
||
var cssNode = document.createTextNode(css)
|
||
var childNodes = styleElement.childNodes
|
||
if (childNodes[index]) styleElement.removeChild(childNodes[index])
|
||
if (childNodes.length) {
|
||
styleElement.insertBefore(cssNode, childNodes[index])
|
||
} else {
|
||
styleElement.appendChild(cssNode)
|
||
}
|
||
}
|
||
}
|
||
|
||
function applyToTag (styleElement, obj) {
|
||
var css = obj.css
|
||
var media = obj.media
|
||
var sourceMap = obj.sourceMap
|
||
|
||
if (media) {
|
||
styleElement.setAttribute('media', media)
|
||
}
|
||
if (options.ssrId) {
|
||
styleElement.setAttribute(ssrIdKey, obj.id)
|
||
}
|
||
|
||
if (sourceMap) {
|
||
// https://developer.chrome.com/devtools/docs/javascript-debugging
|
||
// this makes source maps inside style tags work properly in Chrome
|
||
css += '\n/*# sourceURL=' + sourceMap.sources[0] + ' */'
|
||
// http://stackoverflow.com/a/26603875
|
||
css += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'
|
||
}
|
||
|
||
if (styleElement.styleSheet) {
|
||
styleElement.styleSheet.cssText = css
|
||
} else {
|
||
while (styleElement.firstChild) {
|
||
styleElement.removeChild(styleElement.firstChild)
|
||
}
|
||
styleElement.appendChild(document.createTextNode(css))
|
||
}
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-style-loader/lib/listToStyles.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
/**
|
||
* Translates the list format produced by css-loader into something
|
||
* easier to manipulate.
|
||
*/
|
||
module.exports = function listToStyles (parentId, list) {
|
||
var styles = []
|
||
var newStyles = {}
|
||
for (var i = 0; i < list.length; i++) {
|
||
var item = list[i]
|
||
var id = item[0]
|
||
var css = item[1]
|
||
var media = item[2]
|
||
var sourceMap = item[3]
|
||
var part = {
|
||
id: parentId + ':' + i,
|
||
css: css,
|
||
media: media,
|
||
sourceMap: sourceMap
|
||
}
|
||
if (!newStyles[id]) {
|
||
styles.push(newStyles[id] = { id: id, parts: [part] })
|
||
} else {
|
||
newStyles[id].parts.push(part)
|
||
}
|
||
}
|
||
return styles
|
||
}
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-toastr/dist/vue-toastr.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
(function webpackUniversalModuleDefinition(root, factory) {
|
||
if(true)
|
||
module.exports = factory();
|
||
else if(typeof define === 'function' && define.amd)
|
||
define([], factory);
|
||
else if(typeof exports === 'object')
|
||
exports["vueToastr"] = factory();
|
||
else
|
||
root["vueToastr"] = factory();
|
||
})(this, function() {
|
||
return /******/ (function(modules) { // webpackBootstrap
|
||
/******/ // The module cache
|
||
/******/ var installedModules = {};
|
||
/******/
|
||
/******/ // The require function
|
||
/******/ function __webpack_require__(moduleId) {
|
||
/******/
|
||
/******/ // Check if module is in cache
|
||
/******/ if(installedModules[moduleId])
|
||
/******/ return installedModules[moduleId].exports;
|
||
/******/
|
||
/******/ // Create a new module (and put it into the cache)
|
||
/******/ var module = installedModules[moduleId] = {
|
||
/******/ exports: {},
|
||
/******/ id: moduleId,
|
||
/******/ loaded: false
|
||
/******/ };
|
||
/******/
|
||
/******/ // Execute the module function
|
||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||
/******/
|
||
/******/ // Flag the module as loaded
|
||
/******/ module.loaded = true;
|
||
/******/
|
||
/******/ // Return the exports of the module
|
||
/******/ return module.exports;
|
||
/******/ }
|
||
/******/
|
||
/******/
|
||
/******/ // expose the modules object (__webpack_modules__)
|
||
/******/ __webpack_require__.m = modules;
|
||
/******/
|
||
/******/ // expose the module cache
|
||
/******/ __webpack_require__.c = installedModules;
|
||
/******/
|
||
/******/ // __webpack_public_path__
|
||
/******/ __webpack_require__.p = "/dist/";
|
||
/******/
|
||
/******/ // Load entry module and return exports
|
||
/******/ return __webpack_require__(0);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ([
|
||
/* 0 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _vueToastr = __webpack_require__(17);
|
||
|
||
var _vueToastr2 = _interopRequireDefault(_vueToastr);
|
||
|
||
__webpack_require__(41);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
// Add Plugin capability.
|
||
_vueToastr2.default.install = function (Vue, options) {
|
||
// console.log("install vuetoastr")
|
||
// Create component instance
|
||
var MyComponent = Vue.extend({
|
||
template: '<vue-toastr :options="options" ref="vueToastr"></vue-toastr>',
|
||
components: {
|
||
'vue-toastr': _vueToastr2.default
|
||
},
|
||
data: function data() {
|
||
return {
|
||
options: options || {}
|
||
};
|
||
}
|
||
});
|
||
// or, render off-document and append afterwards:
|
||
var component = new MyComponent().$mount();
|
||
// console.log(document.body, component.$el)
|
||
document.body.appendChild(component.$el);
|
||
// 4. add an instance method
|
||
Vue.prototype.$toastr = component.$refs.vueToastr;
|
||
};
|
||
// Install by default if using the script tag
|
||
// equal to Vue.use(window.vueToastr)
|
||
|
||
// import './vue-toastr.less'
|
||
|
||
// Change less to sass
|
||
if (typeof window !== 'undefined' && window.Vue) {
|
||
// console.log(window.Vue)
|
||
window.Vue.use(_vueToastr2.default);
|
||
}
|
||
exports.default = _vueToastr2.default;
|
||
module.exports = exports['default'];
|
||
|
||
/***/ }),
|
||
/* 1 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var $Object = Object;
|
||
module.exports = {
|
||
create: $Object.create,
|
||
getProto: $Object.getPrototypeOf,
|
||
isEnum: {}.propertyIsEnumerable,
|
||
getDesc: $Object.getOwnPropertyDescriptor,
|
||
setDesc: $Object.defineProperty,
|
||
setDescs: $Object.defineProperties,
|
||
getKeys: $Object.keys,
|
||
getNames: $Object.getOwnPropertyNames,
|
||
getSymbols: $Object.getOwnPropertySymbols,
|
||
each: [].forEach
|
||
};
|
||
|
||
/***/ }),
|
||
/* 2 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var core = module.exports = {version: '1.2.6'};
|
||
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
|
||
|
||
/***/ }),
|
||
/* 3 */
|
||
/***/ (function(module, exports) {
|
||
|
||
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
|
||
var global = module.exports = typeof window != 'undefined' && window.Math == Math
|
||
? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
|
||
if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
|
||
|
||
/***/ }),
|
||
/* 4 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function(exec){
|
||
try {
|
||
return !!exec();
|
||
} catch(e){
|
||
return true;
|
||
}
|
||
};
|
||
|
||
/***/ }),
|
||
/* 5 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// to indexed object, toObject with fallback for non-array-like ES3 strings
|
||
var IObject = __webpack_require__(29)
|
||
, defined = __webpack_require__(7);
|
||
module.exports = function(it){
|
||
return IObject(defined(it));
|
||
};
|
||
|
||
/***/ }),
|
||
/* 6 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var toString = {}.toString;
|
||
|
||
module.exports = function(it){
|
||
return toString.call(it).slice(8, -1);
|
||
};
|
||
|
||
/***/ }),
|
||
/* 7 */
|
||
/***/ (function(module, exports) {
|
||
|
||
// 7.2.1 RequireObjectCoercible(argument)
|
||
module.exports = function(it){
|
||
if(it == undefined)throw TypeError("Can't call method on " + it);
|
||
return it;
|
||
};
|
||
|
||
/***/ }),
|
||
/* 8 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// Thank's IE8 for his funny defineProperty
|
||
module.exports = !__webpack_require__(4)(function(){
|
||
return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
|
||
});
|
||
|
||
/***/ }),
|
||
/* 9 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var global = __webpack_require__(3)
|
||
, core = __webpack_require__(2)
|
||
, ctx = __webpack_require__(25)
|
||
, PROTOTYPE = 'prototype';
|
||
|
||
var $export = function(type, name, source){
|
||
var IS_FORCED = type & $export.F
|
||
, IS_GLOBAL = type & $export.G
|
||
, IS_STATIC = type & $export.S
|
||
, IS_PROTO = type & $export.P
|
||
, IS_BIND = type & $export.B
|
||
, IS_WRAP = type & $export.W
|
||
, exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
|
||
, target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
|
||
, key, own, out;
|
||
if(IS_GLOBAL)source = name;
|
||
for(key in source){
|
||
// contains in native
|
||
own = !IS_FORCED && target && key in target;
|
||
if(own && key in exports)continue;
|
||
// export native or passed
|
||
out = own ? target[key] : source[key];
|
||
// prevent global pollution for namespaces
|
||
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
|
||
// bind timers to global for call from export context
|
||
: IS_BIND && own ? ctx(out, global)
|
||
// wrap global constructors for prevent change them in library
|
||
: IS_WRAP && target[key] == out ? (function(C){
|
||
var F = function(param){
|
||
return this instanceof C ? new C(param) : C(param);
|
||
};
|
||
F[PROTOTYPE] = C[PROTOTYPE];
|
||
return F;
|
||
// make static versions for prototype methods
|
||
})(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
|
||
if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;
|
||
}
|
||
};
|
||
// type bitmap
|
||
$export.F = 1; // forced
|
||
$export.G = 2; // global
|
||
$export.S = 4; // static
|
||
$export.P = 8; // proto
|
||
$export.B = 16; // bind
|
||
$export.W = 32; // wrap
|
||
module.exports = $export;
|
||
|
||
/***/ }),
|
||
/* 10 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var hasOwnProperty = {}.hasOwnProperty;
|
||
module.exports = function(it, key){
|
||
return hasOwnProperty.call(it, key);
|
||
};
|
||
|
||
/***/ }),
|
||
/* 11 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function(bitmap, value){
|
||
return {
|
||
enumerable : !(bitmap & 1),
|
||
configurable: !(bitmap & 2),
|
||
writable : !(bitmap & 4),
|
||
value : value
|
||
};
|
||
};
|
||
|
||
/***/ }),
|
||
/* 12 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var global = __webpack_require__(3)
|
||
, SHARED = '__core-js_shared__'
|
||
, store = global[SHARED] || (global[SHARED] = {});
|
||
module.exports = function(key){
|
||
return store[key] || (store[key] = {});
|
||
};
|
||
|
||
/***/ }),
|
||
/* 13 */
|
||
/***/ (function(module, exports) {
|
||
|
||
var id = 0
|
||
, px = Math.random();
|
||
module.exports = function(key){
|
||
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
|
||
};
|
||
|
||
/***/ }),
|
||
/* 14 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var store = __webpack_require__(12)('wks')
|
||
, uid = __webpack_require__(13)
|
||
, Symbol = __webpack_require__(3).Symbol;
|
||
module.exports = function(name){
|
||
return store[name] || (store[name] =
|
||
Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name));
|
||
};
|
||
|
||
/***/ }),
|
||
/* 15 */
|
||
/***/ (function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
exports.default = {
|
||
template: '<div class="toast-progress" v-bind:style="style"></div>',
|
||
props: ['data'],
|
||
data: function data() {
|
||
return {
|
||
intervalId: false,
|
||
hideEta: false,
|
||
progressBarValue: this.data.progressBarValue,
|
||
style: {
|
||
width: '100%'
|
||
}
|
||
};
|
||
},
|
||
mounted: function mounted() {
|
||
if (this.progressBarValue === null) {
|
||
this.hideEta = new Date().getTime() + this.data.timeout;
|
||
this.setTimer();
|
||
} else {
|
||
this.updateProgress();
|
||
}
|
||
},
|
||
destroyed: function destroyed() {
|
||
clearInterval(this.intervalId);
|
||
},
|
||
|
||
methods: {
|
||
setTimer: function setTimer() {
|
||
var _this = this;
|
||
|
||
// console.log(this.hideEta)
|
||
this.intervalId = setInterval(function () {
|
||
_this.updateProgress();
|
||
}, 10);
|
||
// console.log(this.data.intervalId)
|
||
},
|
||
setValue: function setValue(newValue) {
|
||
this.progressBarValue = newValue;
|
||
this.updateProgress();
|
||
},
|
||
updateProgress: function updateProgress() {
|
||
var percentage;
|
||
if (this.progressBarValue === null) {
|
||
var diff = this.hideEta - new Date().getTime();
|
||
percentage = diff / this.data.timeout * 100;
|
||
percentage = Math.floor(percentage);
|
||
// console.log(diff, this.data.timeout, percentage)
|
||
this.style.width = percentage + '%';
|
||
} else {
|
||
percentage = Math.floor(this.progressBarValue);
|
||
this.style.width = percentage + '%';
|
||
}
|
||
}
|
||
}
|
||
|
||
};
|
||
module.exports = exports['default'];
|
||
|
||
/***/ }),
|
||
/* 16 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _toast = __webpack_require__(42);
|
||
|
||
var _toast2 = _interopRequireDefault(_toast);
|
||
|
||
var _toastProgress = __webpack_require__(15);
|
||
|
||
var _toastProgress2 = _interopRequireDefault(_toastProgress);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = {
|
||
components: {
|
||
toastProgress: _toastProgress2.default
|
||
},
|
||
template: _toast2.default,
|
||
props: ['data'],
|
||
data: function data() {
|
||
return { progressbar: false, intervalId: false };
|
||
},
|
||
mounted: function mounted() {
|
||
// console.log("ready", this.data);
|
||
},
|
||
created: function created() {
|
||
// console.log("created", this.data);
|
||
if (typeof this.data.timeout !== 'undefined' && this.data.timeout !== 0) {
|
||
if (this.data.progressbar !== false) {
|
||
this.progressbar = true;
|
||
}
|
||
this.setTimeout();
|
||
} else if (this.data.progressBarValue !== null && this.data.progressbar !== false) {
|
||
this.progressbar = true;
|
||
}
|
||
},
|
||
|
||
watch: {
|
||
data: {
|
||
handler: function handler(val, oldVal) {
|
||
this.setProgressBarValue(val.progressBarValue);
|
||
},
|
||
deep: true
|
||
}
|
||
},
|
||
beforeDestroy: function beforeDestroy() {
|
||
this.clearIntervalID();
|
||
},
|
||
|
||
methods: {
|
||
clearIntervalID: function clearIntervalID() {
|
||
// console.log(this.intervalId)
|
||
if (this.intervalId !== false) {
|
||
clearInterval(this.intervalId);
|
||
}
|
||
this.intervalId = false;
|
||
},
|
||
|
||
// Enter Hover
|
||
onMouseOver: function onMouseOver() {
|
||
// console.log("onMouseOver")
|
||
if (typeof this.data.onMouseOver !== 'undefined') {
|
||
this.data.onMouseOver();
|
||
}
|
||
if (!this.data.closeOnHover) {
|
||
this.clearIntervalID();
|
||
}
|
||
},
|
||
|
||
// Leave Hover
|
||
onMouseOut: function onMouseOut() {
|
||
// console.log("onMouseOut")
|
||
if (typeof this.data.onMouseOut !== 'undefined') {
|
||
this.data.onMouseOut();
|
||
}
|
||
if (!this.data.closeOnHover) {
|
||
this.setTimeout();
|
||
}
|
||
},
|
||
|
||
// Set timeout to close
|
||
setTimeout: function (_setTimeout) {
|
||
function setTimeout() {
|
||
return _setTimeout.apply(this, arguments);
|
||
}
|
||
|
||
setTimeout.toString = function () {
|
||
return _setTimeout.toString();
|
||
};
|
||
|
||
return setTimeout;
|
||
}(function () {
|
||
var _this = this;
|
||
|
||
// console.log("setTimeout")
|
||
this.intervalId = setTimeout(function () {
|
||
_this.close();
|
||
}, this.data.timeout);
|
||
// console.log(this.data.intervalId)
|
||
}),
|
||
|
||
// Set progress bar value if manually managed
|
||
setProgressBarValue: function setProgressBarValue(newValue) {
|
||
if (this.data.progressBarValue !== null) {
|
||
this.$refs.progressBar.setValue(newValue);
|
||
}
|
||
},
|
||
|
||
// Clicked Toast
|
||
clicked: function clicked() {
|
||
if (typeof this.data.onClicked !== 'undefined') {
|
||
this.data.onClicked();
|
||
}
|
||
this.cclose();
|
||
},
|
||
|
||
// Click Close?
|
||
cclose: function cclose() {
|
||
if (typeof this.data.clickClose !== 'undefined' && this.data.clickClose === false) {
|
||
return;
|
||
}
|
||
this.close();
|
||
},
|
||
|
||
// Close Toast
|
||
close: function close() {
|
||
// console.log(typeof this.$parent, this);
|
||
// if toast not manuel closed.
|
||
if (this.$parent != null) {
|
||
this.$parent.Close(this.data);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
module.exports = exports['default'];
|
||
|
||
/***/ }),
|
||
/* 17 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _keys = __webpack_require__(18);
|
||
|
||
var _keys2 = _interopRequireDefault(_keys);
|
||
|
||
var _typeof2 = __webpack_require__(20);
|
||
|
||
var _typeof3 = _interopRequireDefault(_typeof2);
|
||
|
||
var _vueToastr = __webpack_require__(43);
|
||
|
||
var _vueToastr2 = _interopRequireDefault(_vueToastr);
|
||
|
||
var _toast = __webpack_require__(16);
|
||
|
||
var _toast2 = _interopRequireDefault(_toast);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = {
|
||
template: _vueToastr2.default,
|
||
name: 'vueToastr',
|
||
props: ['options'],
|
||
data: function data() {
|
||
var positions = ['toast-top-right', 'toast-bottom-right', 'toast-bottom-left', 'toast-top-left', 'toast-top-full-width', 'toast-bottom-full-width', 'toast-top-center', 'toast-bottom-center'];
|
||
var list = {};
|
||
for (var i = 0; i <= positions.length - 1; i++) {
|
||
list[positions[i]] = {};
|
||
}
|
||
return {
|
||
positions: positions,
|
||
defaultPosition: this.processOption('defaultPosition', 'toast-top-right'),
|
||
defaultType: this.processOption('defaultType', 'success'),
|
||
defaultCloseOnHover: this.processOption('defaultCloseOnHover', true),
|
||
defaultTimeout: this.processOption('defaultTimeout', 5000),
|
||
defaultProgressBar: this.processOption('defaultProgressBar', true),
|
||
defaultProgressBarValue: this.processOption('defaultProgressBarValue', null),
|
||
defaultPreventDuplicates: this.processOption('defaultPreventDuplicates', false),
|
||
defaultStyle: this.processOption('defaultStyle', {}),
|
||
list: list,
|
||
index: 0,
|
||
savedNames: {}
|
||
};
|
||
},
|
||
created: function created() {
|
||
// console.log("Created");
|
||
},
|
||
mounted: function mounted() {
|
||
// console.log("ready", this.list);
|
||
},
|
||
|
||
components: {
|
||
toast: _toast2.default
|
||
},
|
||
methods: {
|
||
addToast: function addToast(data) {
|
||
this.index++;
|
||
data['index'] = this.index;
|
||
this.$set(this.list[data.position], this.index, data);
|
||
if (typeof data['name'] !== 'undefined') {
|
||
this.$set(this.savedNames, data['name'], data);
|
||
}
|
||
// if have onCreated
|
||
if (typeof data.onCreated !== 'undefined') {
|
||
// wait doom update after call cb
|
||
this.$nextTick(function () {
|
||
data.onCreated();
|
||
});
|
||
}
|
||
},
|
||
removeByName: function removeByName(name) {
|
||
if (typeof this.savedNames[name] !== 'undefined') {
|
||
this.Close(this.savedNames[name]);
|
||
this.$delete(this.savedNames, name);
|
||
}
|
||
},
|
||
removeToast: function removeToast(data) {
|
||
var item = this.list[data.position][data.index];
|
||
// console.log("remove toast", data, item);
|
||
if (typeof item !== 'undefined') {
|
||
this.$delete(this.list[data.position], data.index);
|
||
// if have onClosed
|
||
if (typeof data.onClosed !== 'undefined') {
|
||
// wait doom update after call cb
|
||
this.$nextTick(function () {
|
||
data.onClosed();
|
||
});
|
||
}
|
||
}
|
||
},
|
||
setProgress: function setProgress(data, newValue) {
|
||
var item = this.list[data.position][data.index];
|
||
if (typeof item !== 'undefined') {
|
||
this.$set(item, 'progressBarValue', newValue);
|
||
}
|
||
},
|
||
Add: function Add(d) {
|
||
return this.AddData(this.processObjectData(d));
|
||
},
|
||
AddData: function AddData(data) {
|
||
if ((typeof data === 'undefined' ? 'undefined' : (0, _typeof3.default)(data)) !== 'object') {
|
||
console.log('AddData accept only Object', data);
|
||
return false;
|
||
}
|
||
if (data.preventDuplicates) {
|
||
var listKeys = (0, _keys2.default)(this.list[data.position]);
|
||
for (var i = 0; i < listKeys.length; i++) {
|
||
if (this.list[data.position][listKeys[i]].title === data.title && this.list[data.position][listKeys[i]].msg === data.msg) {
|
||
console.log('Prevent Duplicates', data);
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
this.addToast(data);
|
||
return data;
|
||
},
|
||
processOption: function processOption(optionValue, defaultValue) {
|
||
if (!this.options) {
|
||
return defaultValue;
|
||
}
|
||
return typeof this.options[optionValue] !== 'undefined' ? this.options[optionValue] : defaultValue;
|
||
},
|
||
processObjectData: function processObjectData(data) {
|
||
// if Object
|
||
if ((typeof data === 'undefined' ? 'undefined' : (0, _typeof3.default)(data)) === 'object' && typeof data.msg !== 'undefined') {
|
||
if (typeof data.position === 'undefined') {
|
||
data.position = this.defaultPosition;
|
||
}
|
||
if (typeof data.type === 'undefined') {
|
||
data.type = this.defaultType;
|
||
}
|
||
if (typeof data.timeout === 'undefined') {
|
||
data.timeout = this.defaultTimeout;
|
||
}
|
||
// have progressBar ?
|
||
if (typeof data.progressbar === 'undefined') {
|
||
data.progressbar = this.defaultProgressBar;
|
||
}
|
||
// should progressBar be bound to timer or is set manually ?
|
||
if (typeof data.progressBarValue === 'undefined') {
|
||
data.progressBarValue = this.defaultProgressBarValue;
|
||
}
|
||
|
||
if (typeof data.closeOnHover === 'undefined') {
|
||
data.closeOnHover = this.defaultCloseOnHover;
|
||
}
|
||
|
||
if (typeof data.preventDuplicates === 'undefined') {
|
||
data.preventDuplicates = this.defaultPreventDuplicates;
|
||
}
|
||
|
||
if (typeof data.style === 'undefined') {
|
||
data.style = this.defaultStyle;
|
||
}
|
||
return data;
|
||
}
|
||
// if String
|
||
return {
|
||
msg: data.toString(),
|
||
position: this.defaultPosition,
|
||
type: this.defaultType,
|
||
timeout: this.defaultTimeout,
|
||
closeOnHover: this.defaultCloseOnHover,
|
||
progressbar: this.defaultProgressBar,
|
||
progressBarValue: this.defaultProgressBarValue,
|
||
preventDuplicates: this.defaultPreventDuplicates,
|
||
style: this.defaultStyle
|
||
};
|
||
},
|
||
e: function e(msg, title) {
|
||
var data = this.processObjectData(msg);
|
||
data['type'] = 'error';
|
||
if (typeof title !== 'undefined') {
|
||
data['title'] = title;
|
||
}
|
||
return this.AddData(data);
|
||
},
|
||
s: function s(msg, title) {
|
||
var data = this.processObjectData(msg);
|
||
data['type'] = 'success';
|
||
if (typeof title !== 'undefined') {
|
||
data['title'] = title;
|
||
}
|
||
return this.AddData(data);
|
||
},
|
||
w: function w(msg, title) {
|
||
var data = this.processObjectData(msg);
|
||
data['type'] = 'warning';
|
||
if (typeof title !== 'undefined') {
|
||
data['title'] = title;
|
||
}
|
||
return this.AddData(data);
|
||
},
|
||
i: function i(msg, title) {
|
||
var data = this.processObjectData(msg);
|
||
data['type'] = 'info';
|
||
if (typeof title !== 'undefined') {
|
||
data['title'] = title;
|
||
}
|
||
return this.AddData(data);
|
||
},
|
||
Close: function Close(data) {
|
||
// console.log(data)
|
||
this.removeToast(data);
|
||
},
|
||
removeByType: function removeByType(toastType) {
|
||
for (var i = 0; i < this.positions.length; i++) {
|
||
var listKeys = (0, _keys2.default)(this.list[this.positions[i]]);
|
||
for (var j = 0; j < listKeys.length; j++) {
|
||
if (this.list[this.positions[i]][listKeys[j]]['type'] === toastType) {
|
||
this.Close(this.list[this.positions[i]][listKeys[j]]);
|
||
}
|
||
}
|
||
}
|
||
},
|
||
clearAll: function clearAll() {
|
||
for (var i = 0; i < this.positions.length; i++) {
|
||
var listKeys = (0, _keys2.default)(this.list[this.positions[i]]);
|
||
for (var j = 0; j < listKeys.length; j++) {
|
||
this.Close(this.list[this.positions[i]][listKeys[j]]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
module.exports = exports['default'];
|
||
|
||
/***/ }),
|
||
/* 18 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = { "default": __webpack_require__(21), __esModule: true };
|
||
|
||
/***/ }),
|
||
/* 19 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = { "default": __webpack_require__(22), __esModule: true };
|
||
|
||
/***/ }),
|
||
/* 20 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var _Symbol = __webpack_require__(19)["default"];
|
||
|
||
exports["default"] = function (obj) {
|
||
return obj && obj.constructor === _Symbol ? "symbol" : typeof obj;
|
||
};
|
||
|
||
exports.__esModule = true;
|
||
|
||
/***/ }),
|
||
/* 21 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
__webpack_require__(38);
|
||
module.exports = __webpack_require__(2).Object.keys;
|
||
|
||
/***/ }),
|
||
/* 22 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
__webpack_require__(40);
|
||
__webpack_require__(39);
|
||
module.exports = __webpack_require__(2).Symbol;
|
||
|
||
/***/ }),
|
||
/* 23 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function(it){
|
||
if(typeof it != 'function')throw TypeError(it + ' is not a function!');
|
||
return it;
|
||
};
|
||
|
||
/***/ }),
|
||
/* 24 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var isObject = __webpack_require__(31);
|
||
module.exports = function(it){
|
||
if(!isObject(it))throw TypeError(it + ' is not an object!');
|
||
return it;
|
||
};
|
||
|
||
/***/ }),
|
||
/* 25 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// optional / simple context binding
|
||
var aFunction = __webpack_require__(23);
|
||
module.exports = function(fn, that, length){
|
||
aFunction(fn);
|
||
if(that === undefined)return fn;
|
||
switch(length){
|
||
case 1: return function(a){
|
||
return fn.call(that, a);
|
||
};
|
||
case 2: return function(a, b){
|
||
return fn.call(that, a, b);
|
||
};
|
||
case 3: return function(a, b, c){
|
||
return fn.call(that, a, b, c);
|
||
};
|
||
}
|
||
return function(/* ...args */){
|
||
return fn.apply(that, arguments);
|
||
};
|
||
};
|
||
|
||
/***/ }),
|
||
/* 26 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// all enumerable object keys, includes symbols
|
||
var $ = __webpack_require__(1);
|
||
module.exports = function(it){
|
||
var keys = $.getKeys(it)
|
||
, getSymbols = $.getSymbols;
|
||
if(getSymbols){
|
||
var symbols = getSymbols(it)
|
||
, isEnum = $.isEnum
|
||
, i = 0
|
||
, key;
|
||
while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key);
|
||
}
|
||
return keys;
|
||
};
|
||
|
||
/***/ }),
|
||
/* 27 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
|
||
var toIObject = __webpack_require__(5)
|
||
, getNames = __webpack_require__(1).getNames
|
||
, toString = {}.toString;
|
||
|
||
var windowNames = typeof window == 'object' && Object.getOwnPropertyNames
|
||
? Object.getOwnPropertyNames(window) : [];
|
||
|
||
var getWindowNames = function(it){
|
||
try {
|
||
return getNames(it);
|
||
} catch(e){
|
||
return windowNames.slice();
|
||
}
|
||
};
|
||
|
||
module.exports.get = function getOwnPropertyNames(it){
|
||
if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it);
|
||
return getNames(toIObject(it));
|
||
};
|
||
|
||
/***/ }),
|
||
/* 28 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var $ = __webpack_require__(1)
|
||
, createDesc = __webpack_require__(11);
|
||
module.exports = __webpack_require__(8) ? function(object, key, value){
|
||
return $.setDesc(object, key, createDesc(1, value));
|
||
} : function(object, key, value){
|
||
object[key] = value;
|
||
return object;
|
||
};
|
||
|
||
/***/ }),
|
||
/* 29 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// fallback for non-array-like ES3 and non-enumerable old V8 strings
|
||
var cof = __webpack_require__(6);
|
||
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
|
||
return cof(it) == 'String' ? it.split('') : Object(it);
|
||
};
|
||
|
||
/***/ }),
|
||
/* 30 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 7.2.2 IsArray(argument)
|
||
var cof = __webpack_require__(6);
|
||
module.exports = Array.isArray || function(arg){
|
||
return cof(arg) == 'Array';
|
||
};
|
||
|
||
/***/ }),
|
||
/* 31 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function(it){
|
||
return typeof it === 'object' ? it !== null : typeof it === 'function';
|
||
};
|
||
|
||
/***/ }),
|
||
/* 32 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var $ = __webpack_require__(1)
|
||
, toIObject = __webpack_require__(5);
|
||
module.exports = function(object, el){
|
||
var O = toIObject(object)
|
||
, keys = $.getKeys(O)
|
||
, length = keys.length
|
||
, index = 0
|
||
, key;
|
||
while(length > index)if(O[key = keys[index++]] === el)return key;
|
||
};
|
||
|
||
/***/ }),
|
||
/* 33 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = true;
|
||
|
||
/***/ }),
|
||
/* 34 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// most Object methods by ES6 should accept primitives
|
||
var $export = __webpack_require__(9)
|
||
, core = __webpack_require__(2)
|
||
, fails = __webpack_require__(4);
|
||
module.exports = function(KEY, exec){
|
||
var fn = (core.Object || {})[KEY] || Object[KEY]
|
||
, exp = {};
|
||
exp[KEY] = exec(fn);
|
||
$export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
|
||
};
|
||
|
||
/***/ }),
|
||
/* 35 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__(28);
|
||
|
||
/***/ }),
|
||
/* 36 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var def = __webpack_require__(1).setDesc
|
||
, has = __webpack_require__(10)
|
||
, TAG = __webpack_require__(14)('toStringTag');
|
||
|
||
module.exports = function(it, tag, stat){
|
||
if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
|
||
};
|
||
|
||
/***/ }),
|
||
/* 37 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 7.1.13 ToObject(argument)
|
||
var defined = __webpack_require__(7);
|
||
module.exports = function(it){
|
||
return Object(defined(it));
|
||
};
|
||
|
||
/***/ }),
|
||
/* 38 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// 19.1.2.14 Object.keys(O)
|
||
var toObject = __webpack_require__(37);
|
||
|
||
__webpack_require__(34)('keys', function($keys){
|
||
return function keys(it){
|
||
return $keys(toObject(it));
|
||
};
|
||
});
|
||
|
||
/***/ }),
|
||
/* 39 */
|
||
/***/ (function(module, exports) {
|
||
|
||
|
||
|
||
/***/ }),
|
||
/* 40 */
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
// ECMAScript 6 symbols shim
|
||
var $ = __webpack_require__(1)
|
||
, global = __webpack_require__(3)
|
||
, has = __webpack_require__(10)
|
||
, DESCRIPTORS = __webpack_require__(8)
|
||
, $export = __webpack_require__(9)
|
||
, redefine = __webpack_require__(35)
|
||
, $fails = __webpack_require__(4)
|
||
, shared = __webpack_require__(12)
|
||
, setToStringTag = __webpack_require__(36)
|
||
, uid = __webpack_require__(13)
|
||
, wks = __webpack_require__(14)
|
||
, keyOf = __webpack_require__(32)
|
||
, $names = __webpack_require__(27)
|
||
, enumKeys = __webpack_require__(26)
|
||
, isArray = __webpack_require__(30)
|
||
, anObject = __webpack_require__(24)
|
||
, toIObject = __webpack_require__(5)
|
||
, createDesc = __webpack_require__(11)
|
||
, getDesc = $.getDesc
|
||
, setDesc = $.setDesc
|
||
, _create = $.create
|
||
, getNames = $names.get
|
||
, $Symbol = global.Symbol
|
||
, $JSON = global.JSON
|
||
, _stringify = $JSON && $JSON.stringify
|
||
, setter = false
|
||
, HIDDEN = wks('_hidden')
|
||
, isEnum = $.isEnum
|
||
, SymbolRegistry = shared('symbol-registry')
|
||
, AllSymbols = shared('symbols')
|
||
, useNative = typeof $Symbol == 'function'
|
||
, ObjectProto = Object.prototype;
|
||
|
||
// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
|
||
var setSymbolDesc = DESCRIPTORS && $fails(function(){
|
||
return _create(setDesc({}, 'a', {
|
||
get: function(){ return setDesc(this, 'a', {value: 7}).a; }
|
||
})).a != 7;
|
||
}) ? function(it, key, D){
|
||
var protoDesc = getDesc(ObjectProto, key);
|
||
if(protoDesc)delete ObjectProto[key];
|
||
setDesc(it, key, D);
|
||
if(protoDesc && it !== ObjectProto)setDesc(ObjectProto, key, protoDesc);
|
||
} : setDesc;
|
||
|
||
var wrap = function(tag){
|
||
var sym = AllSymbols[tag] = _create($Symbol.prototype);
|
||
sym._k = tag;
|
||
DESCRIPTORS && setter && setSymbolDesc(ObjectProto, tag, {
|
||
configurable: true,
|
||
set: function(value){
|
||
if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
|
||
setSymbolDesc(this, tag, createDesc(1, value));
|
||
}
|
||
});
|
||
return sym;
|
||
};
|
||
|
||
var isSymbol = function(it){
|
||
return typeof it == 'symbol';
|
||
};
|
||
|
||
var $defineProperty = function defineProperty(it, key, D){
|
||
if(D && has(AllSymbols, key)){
|
||
if(!D.enumerable){
|
||
if(!has(it, HIDDEN))setDesc(it, HIDDEN, createDesc(1, {}));
|
||
it[HIDDEN][key] = true;
|
||
} else {
|
||
if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
|
||
D = _create(D, {enumerable: createDesc(0, false)});
|
||
} return setSymbolDesc(it, key, D);
|
||
} return setDesc(it, key, D);
|
||
};
|
||
var $defineProperties = function defineProperties(it, P){
|
||
anObject(it);
|
||
var keys = enumKeys(P = toIObject(P))
|
||
, i = 0
|
||
, l = keys.length
|
||
, key;
|
||
while(l > i)$defineProperty(it, key = keys[i++], P[key]);
|
||
return it;
|
||
};
|
||
var $create = function create(it, P){
|
||
return P === undefined ? _create(it) : $defineProperties(_create(it), P);
|
||
};
|
||
var $propertyIsEnumerable = function propertyIsEnumerable(key){
|
||
var E = isEnum.call(this, key);
|
||
return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key]
|
||
? E : true;
|
||
};
|
||
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
|
||
var D = getDesc(it = toIObject(it), key);
|
||
if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
|
||
return D;
|
||
};
|
||
var $getOwnPropertyNames = function getOwnPropertyNames(it){
|
||
var names = getNames(toIObject(it))
|
||
, result = []
|
||
, i = 0
|
||
, key;
|
||
while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN)result.push(key);
|
||
return result;
|
||
};
|
||
var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
|
||
var names = getNames(toIObject(it))
|
||
, result = []
|
||
, i = 0
|
||
, key;
|
||
while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]);
|
||
return result;
|
||
};
|
||
var $stringify = function stringify(it){
|
||
if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
|
||
var args = [it]
|
||
, i = 1
|
||
, $$ = arguments
|
||
, replacer, $replacer;
|
||
while($$.length > i)args.push($$[i++]);
|
||
replacer = args[1];
|
||
if(typeof replacer == 'function')$replacer = replacer;
|
||
if($replacer || !isArray(replacer))replacer = function(key, value){
|
||
if($replacer)value = $replacer.call(this, key, value);
|
||
if(!isSymbol(value))return value;
|
||
};
|
||
args[1] = replacer;
|
||
return _stringify.apply($JSON, args);
|
||
};
|
||
var buggyJSON = $fails(function(){
|
||
var S = $Symbol();
|
||
// MS Edge converts symbol values to JSON as {}
|
||
// WebKit converts symbol values to JSON as null
|
||
// V8 throws on boxed symbols
|
||
return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
|
||
});
|
||
|
||
// 19.4.1.1 Symbol([description])
|
||
if(!useNative){
|
||
$Symbol = function Symbol(){
|
||
if(isSymbol(this))throw TypeError('Symbol is not a constructor');
|
||
return wrap(uid(arguments.length > 0 ? arguments[0] : undefined));
|
||
};
|
||
redefine($Symbol.prototype, 'toString', function toString(){
|
||
return this._k;
|
||
});
|
||
|
||
isSymbol = function(it){
|
||
return it instanceof $Symbol;
|
||
};
|
||
|
||
$.create = $create;
|
||
$.isEnum = $propertyIsEnumerable;
|
||
$.getDesc = $getOwnPropertyDescriptor;
|
||
$.setDesc = $defineProperty;
|
||
$.setDescs = $defineProperties;
|
||
$.getNames = $names.get = $getOwnPropertyNames;
|
||
$.getSymbols = $getOwnPropertySymbols;
|
||
|
||
if(DESCRIPTORS && !__webpack_require__(33)){
|
||
redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
|
||
}
|
||
}
|
||
|
||
var symbolStatics = {
|
||
// 19.4.2.1 Symbol.for(key)
|
||
'for': function(key){
|
||
return has(SymbolRegistry, key += '')
|
||
? SymbolRegistry[key]
|
||
: SymbolRegistry[key] = $Symbol(key);
|
||
},
|
||
// 19.4.2.5 Symbol.keyFor(sym)
|
||
keyFor: function keyFor(key){
|
||
return keyOf(SymbolRegistry, key);
|
||
},
|
||
useSetter: function(){ setter = true; },
|
||
useSimple: function(){ setter = false; }
|
||
};
|
||
// 19.4.2.2 Symbol.hasInstance
|
||
// 19.4.2.3 Symbol.isConcatSpreadable
|
||
// 19.4.2.4 Symbol.iterator
|
||
// 19.4.2.6 Symbol.match
|
||
// 19.4.2.8 Symbol.replace
|
||
// 19.4.2.9 Symbol.search
|
||
// 19.4.2.10 Symbol.species
|
||
// 19.4.2.11 Symbol.split
|
||
// 19.4.2.12 Symbol.toPrimitive
|
||
// 19.4.2.13 Symbol.toStringTag
|
||
// 19.4.2.14 Symbol.unscopables
|
||
$.each.call((
|
||
'hasInstance,isConcatSpreadable,iterator,match,replace,search,' +
|
||
'species,split,toPrimitive,toStringTag,unscopables'
|
||
).split(','), function(it){
|
||
var sym = wks(it);
|
||
symbolStatics[it] = useNative ? sym : wrap(sym);
|
||
});
|
||
|
||
setter = true;
|
||
|
||
$export($export.G + $export.W, {Symbol: $Symbol});
|
||
|
||
$export($export.S, 'Symbol', symbolStatics);
|
||
|
||
$export($export.S + $export.F * !useNative, 'Object', {
|
||
// 19.1.2.2 Object.create(O [, Properties])
|
||
create: $create,
|
||
// 19.1.2.4 Object.defineProperty(O, P, Attributes)
|
||
defineProperty: $defineProperty,
|
||
// 19.1.2.3 Object.defineProperties(O, Properties)
|
||
defineProperties: $defineProperties,
|
||
// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
|
||
getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
|
||
// 19.1.2.7 Object.getOwnPropertyNames(O)
|
||
getOwnPropertyNames: $getOwnPropertyNames,
|
||
// 19.1.2.8 Object.getOwnPropertySymbols(O)
|
||
getOwnPropertySymbols: $getOwnPropertySymbols
|
||
});
|
||
|
||
// 24.3.2 JSON.stringify(value [, replacer [, space]])
|
||
$JSON && $export($export.S + $export.F * (!useNative || buggyJSON), 'JSON', {stringify: $stringify});
|
||
|
||
// 19.4.3.5 Symbol.prototype[@@toStringTag]
|
||
setToStringTag($Symbol, 'Symbol');
|
||
// 20.2.1.9 Math[@@toStringTag]
|
||
setToStringTag(Math, 'Math', true);
|
||
// 24.3.3 JSON[@@toStringTag]
|
||
setToStringTag(global.JSON, 'JSON', true);
|
||
|
||
/***/ }),
|
||
/* 41 */
|
||
/***/ (function(module, exports) {
|
||
|
||
// removed by extract-text-webpack-plugin
|
||
|
||
/***/ }),
|
||
/* 42 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<div v-bind:style=\"data.style\" v-bind:class=\"'toast toast-' + data.type\" style=\"display: block;\" @click=\"clicked()\" v-on:mouseover=\"onMouseOver\" v-on:mouseout=\"onMouseOut\">\n <toast-progress v-if=\"progressbar\" :data=\"data\" ref=\"progressBar\"></toast-progress>\n <div class=\"toast-title\" v-html=\"data.title\">\n </div>\n <div class=\"toast-message\" v-html=\"data.msg\">\n </div>\n</div>\n";
|
||
|
||
/***/ }),
|
||
/* 43 */
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = "<div>\n <div v-bind:class=\"'toast-container ' + position\" v-for=\"(toasts, position) in list\" :key=\"position\">\n <toast :data=\"toast\" v-for=\"(toast, index) in toasts\" :key=\"index\">\n </toast>\n </div>\n</div>\n";
|
||
|
||
/***/ })
|
||
/******/ ])
|
||
});
|
||
;
|
||
//# sourceMappingURL=vue-toastr.js.map
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue-toastr/src/vue-toastr.scss":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
// style-loader: Adds some css to the DOM by adding a <style> tag
|
||
|
||
// load the styles
|
||
var content = __webpack_require__("./node_modules/css-loader/index.js!./node_modules/sass-loader/lib/loader.js!./node_modules/vue-toastr/src/vue-toastr.scss");
|
||
if(typeof content === 'string') content = [[module.i, content, '']];
|
||
// Prepare cssTransformation
|
||
var transform;
|
||
|
||
var options = {}
|
||
options.transform = transform
|
||
// add the styles to the DOM
|
||
var update = __webpack_require__("./node_modules/style-loader/lib/addStyles.js")(content, options);
|
||
if(content.locals) module.exports = content.locals;
|
||
// Hot Module Replacement
|
||
if(false) {
|
||
// When the styles change, update the <style> tags
|
||
if(!content.locals) {
|
||
module.hot.accept("!!../../css-loader/index.js!../../sass-loader/lib/loader.js!./vue-toastr.scss", function() {
|
||
var newContent = require("!!../../css-loader/index.js!../../sass-loader/lib/loader.js!./vue-toastr.scss");
|
||
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
|
||
update(newContent);
|
||
});
|
||
}
|
||
// When the module is disposed, remove the <style> tags
|
||
module.hot.dispose(function() { update(); });
|
||
}
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vue/dist/vue.common.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*!
|
||
* Vue.js v2.5.17
|
||
* (c) 2014-2018 Evan You
|
||
* Released under the MIT License.
|
||
*/
|
||
|
||
|
||
/* */
|
||
|
||
var emptyObject = Object.freeze({});
|
||
|
||
// these helpers produces better vm code in JS engines due to their
|
||
// explicitness and function inlining
|
||
function isUndef (v) {
|
||
return v === undefined || v === null
|
||
}
|
||
|
||
function isDef (v) {
|
||
return v !== undefined && v !== null
|
||
}
|
||
|
||
function isTrue (v) {
|
||
return v === true
|
||
}
|
||
|
||
function isFalse (v) {
|
||
return v === false
|
||
}
|
||
|
||
/**
|
||
* Check if value is primitive
|
||
*/
|
||
function isPrimitive (value) {
|
||
return (
|
||
typeof value === 'string' ||
|
||
typeof value === 'number' ||
|
||
// $flow-disable-line
|
||
typeof value === 'symbol' ||
|
||
typeof value === 'boolean'
|
||
)
|
||
}
|
||
|
||
/**
|
||
* Quick object check - this is primarily used to tell
|
||
* Objects from primitive values when we know the value
|
||
* is a JSON-compliant type.
|
||
*/
|
||
function isObject (obj) {
|
||
return obj !== null && typeof obj === 'object'
|
||
}
|
||
|
||
/**
|
||
* Get the raw type string of a value e.g. [object Object]
|
||
*/
|
||
var _toString = Object.prototype.toString;
|
||
|
||
function toRawType (value) {
|
||
return _toString.call(value).slice(8, -1)
|
||
}
|
||
|
||
/**
|
||
* Strict object type check. Only returns true
|
||
* for plain JavaScript objects.
|
||
*/
|
||
function isPlainObject (obj) {
|
||
return _toString.call(obj) === '[object Object]'
|
||
}
|
||
|
||
function isRegExp (v) {
|
||
return _toString.call(v) === '[object RegExp]'
|
||
}
|
||
|
||
/**
|
||
* Check if val is a valid array index.
|
||
*/
|
||
function isValidArrayIndex (val) {
|
||
var n = parseFloat(String(val));
|
||
return n >= 0 && Math.floor(n) === n && isFinite(val)
|
||
}
|
||
|
||
/**
|
||
* Convert a value to a string that is actually rendered.
|
||
*/
|
||
function toString (val) {
|
||
return val == null
|
||
? ''
|
||
: typeof val === 'object'
|
||
? JSON.stringify(val, null, 2)
|
||
: String(val)
|
||
}
|
||
|
||
/**
|
||
* Convert a input value to a number for persistence.
|
||
* If the conversion fails, return original string.
|
||
*/
|
||
function toNumber (val) {
|
||
var n = parseFloat(val);
|
||
return isNaN(n) ? val : n
|
||
}
|
||
|
||
/**
|
||
* Make a map and return a function for checking if a key
|
||
* is in that map.
|
||
*/
|
||
function makeMap (
|
||
str,
|
||
expectsLowerCase
|
||
) {
|
||
var map = Object.create(null);
|
||
var list = str.split(',');
|
||
for (var i = 0; i < list.length; i++) {
|
||
map[list[i]] = true;
|
||
}
|
||
return expectsLowerCase
|
||
? function (val) { return map[val.toLowerCase()]; }
|
||
: function (val) { return map[val]; }
|
||
}
|
||
|
||
/**
|
||
* Check if a tag is a built-in tag.
|
||
*/
|
||
var isBuiltInTag = makeMap('slot,component', true);
|
||
|
||
/**
|
||
* Check if a attribute is a reserved attribute.
|
||
*/
|
||
var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
|
||
|
||
/**
|
||
* Remove an item from an array
|
||
*/
|
||
function remove (arr, item) {
|
||
if (arr.length) {
|
||
var index = arr.indexOf(item);
|
||
if (index > -1) {
|
||
return arr.splice(index, 1)
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Check whether the object has the property.
|
||
*/
|
||
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
||
function hasOwn (obj, key) {
|
||
return hasOwnProperty.call(obj, key)
|
||
}
|
||
|
||
/**
|
||
* Create a cached version of a pure function.
|
||
*/
|
||
function cached (fn) {
|
||
var cache = Object.create(null);
|
||
return (function cachedFn (str) {
|
||
var hit = cache[str];
|
||
return hit || (cache[str] = fn(str))
|
||
})
|
||
}
|
||
|
||
/**
|
||
* Camelize a hyphen-delimited string.
|
||
*/
|
||
var camelizeRE = /-(\w)/g;
|
||
var camelize = cached(function (str) {
|
||
return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
|
||
});
|
||
|
||
/**
|
||
* Capitalize a string.
|
||
*/
|
||
var capitalize = cached(function (str) {
|
||
return str.charAt(0).toUpperCase() + str.slice(1)
|
||
});
|
||
|
||
/**
|
||
* Hyphenate a camelCase string.
|
||
*/
|
||
var hyphenateRE = /\B([A-Z])/g;
|
||
var hyphenate = cached(function (str) {
|
||
return str.replace(hyphenateRE, '-$1').toLowerCase()
|
||
});
|
||
|
||
/**
|
||
* Simple bind polyfill for environments that do not support it... e.g.
|
||
* PhantomJS 1.x. Technically we don't need this anymore since native bind is
|
||
* now more performant in most browsers, but removing it would be breaking for
|
||
* code that was able to run in PhantomJS 1.x, so this must be kept for
|
||
* backwards compatibility.
|
||
*/
|
||
|
||
/* istanbul ignore next */
|
||
function polyfillBind (fn, ctx) {
|
||
function boundFn (a) {
|
||
var l = arguments.length;
|
||
return l
|
||
? l > 1
|
||
? fn.apply(ctx, arguments)
|
||
: fn.call(ctx, a)
|
||
: fn.call(ctx)
|
||
}
|
||
|
||
boundFn._length = fn.length;
|
||
return boundFn
|
||
}
|
||
|
||
function nativeBind (fn, ctx) {
|
||
return fn.bind(ctx)
|
||
}
|
||
|
||
var bind = Function.prototype.bind
|
||
? nativeBind
|
||
: polyfillBind;
|
||
|
||
/**
|
||
* Convert an Array-like object to a real Array.
|
||
*/
|
||
function toArray (list, start) {
|
||
start = start || 0;
|
||
var i = list.length - start;
|
||
var ret = new Array(i);
|
||
while (i--) {
|
||
ret[i] = list[i + start];
|
||
}
|
||
return ret
|
||
}
|
||
|
||
/**
|
||
* Mix properties into target object.
|
||
*/
|
||
function extend (to, _from) {
|
||
for (var key in _from) {
|
||
to[key] = _from[key];
|
||
}
|
||
return to
|
||
}
|
||
|
||
/**
|
||
* Merge an Array of Objects into a single Object.
|
||
*/
|
||
function toObject (arr) {
|
||
var res = {};
|
||
for (var i = 0; i < arr.length; i++) {
|
||
if (arr[i]) {
|
||
extend(res, arr[i]);
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
/**
|
||
* Perform no operation.
|
||
* Stubbing args to make Flow happy without leaving useless transpiled code
|
||
* with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)
|
||
*/
|
||
function noop (a, b, c) {}
|
||
|
||
/**
|
||
* Always return false.
|
||
*/
|
||
var no = function (a, b, c) { return false; };
|
||
|
||
/**
|
||
* Return same value
|
||
*/
|
||
var identity = function (_) { return _; };
|
||
|
||
/**
|
||
* Generate a static keys string from compiler modules.
|
||
*/
|
||
function genStaticKeys (modules) {
|
||
return modules.reduce(function (keys, m) {
|
||
return keys.concat(m.staticKeys || [])
|
||
}, []).join(',')
|
||
}
|
||
|
||
/**
|
||
* Check if two values are loosely equal - that is,
|
||
* if they are plain objects, do they have the same shape?
|
||
*/
|
||
function looseEqual (a, b) {
|
||
if (a === b) { return true }
|
||
var isObjectA = isObject(a);
|
||
var isObjectB = isObject(b);
|
||
if (isObjectA && isObjectB) {
|
||
try {
|
||
var isArrayA = Array.isArray(a);
|
||
var isArrayB = Array.isArray(b);
|
||
if (isArrayA && isArrayB) {
|
||
return a.length === b.length && a.every(function (e, i) {
|
||
return looseEqual(e, b[i])
|
||
})
|
||
} else if (!isArrayA && !isArrayB) {
|
||
var keysA = Object.keys(a);
|
||
var keysB = Object.keys(b);
|
||
return keysA.length === keysB.length && keysA.every(function (key) {
|
||
return looseEqual(a[key], b[key])
|
||
})
|
||
} else {
|
||
/* istanbul ignore next */
|
||
return false
|
||
}
|
||
} catch (e) {
|
||
/* istanbul ignore next */
|
||
return false
|
||
}
|
||
} else if (!isObjectA && !isObjectB) {
|
||
return String(a) === String(b)
|
||
} else {
|
||
return false
|
||
}
|
||
}
|
||
|
||
function looseIndexOf (arr, val) {
|
||
for (var i = 0; i < arr.length; i++) {
|
||
if (looseEqual(arr[i], val)) { return i }
|
||
}
|
||
return -1
|
||
}
|
||
|
||
/**
|
||
* Ensure a function is called only once.
|
||
*/
|
||
function once (fn) {
|
||
var called = false;
|
||
return function () {
|
||
if (!called) {
|
||
called = true;
|
||
fn.apply(this, arguments);
|
||
}
|
||
}
|
||
}
|
||
|
||
var SSR_ATTR = 'data-server-rendered';
|
||
|
||
var ASSET_TYPES = [
|
||
'component',
|
||
'directive',
|
||
'filter'
|
||
];
|
||
|
||
var LIFECYCLE_HOOKS = [
|
||
'beforeCreate',
|
||
'created',
|
||
'beforeMount',
|
||
'mounted',
|
||
'beforeUpdate',
|
||
'updated',
|
||
'beforeDestroy',
|
||
'destroyed',
|
||
'activated',
|
||
'deactivated',
|
||
'errorCaptured'
|
||
];
|
||
|
||
/* */
|
||
|
||
var config = ({
|
||
/**
|
||
* Option merge strategies (used in core/util/options)
|
||
*/
|
||
// $flow-disable-line
|
||
optionMergeStrategies: Object.create(null),
|
||
|
||
/**
|
||
* Whether to suppress warnings.
|
||
*/
|
||
silent: false,
|
||
|
||
/**
|
||
* Show production mode tip message on boot?
|
||
*/
|
||
productionTip: "development" !== 'production',
|
||
|
||
/**
|
||
* Whether to enable devtools
|
||
*/
|
||
devtools: "development" !== 'production',
|
||
|
||
/**
|
||
* Whether to record perf
|
||
*/
|
||
performance: false,
|
||
|
||
/**
|
||
* Error handler for watcher errors
|
||
*/
|
||
errorHandler: null,
|
||
|
||
/**
|
||
* Warn handler for watcher warns
|
||
*/
|
||
warnHandler: null,
|
||
|
||
/**
|
||
* Ignore certain custom elements
|
||
*/
|
||
ignoredElements: [],
|
||
|
||
/**
|
||
* Custom user key aliases for v-on
|
||
*/
|
||
// $flow-disable-line
|
||
keyCodes: Object.create(null),
|
||
|
||
/**
|
||
* Check if a tag is reserved so that it cannot be registered as a
|
||
* component. This is platform-dependent and may be overwritten.
|
||
*/
|
||
isReservedTag: no,
|
||
|
||
/**
|
||
* Check if an attribute is reserved so that it cannot be used as a component
|
||
* prop. This is platform-dependent and may be overwritten.
|
||
*/
|
||
isReservedAttr: no,
|
||
|
||
/**
|
||
* Check if a tag is an unknown element.
|
||
* Platform-dependent.
|
||
*/
|
||
isUnknownElement: no,
|
||
|
||
/**
|
||
* Get the namespace of an element
|
||
*/
|
||
getTagNamespace: noop,
|
||
|
||
/**
|
||
* Parse the real tag name for the specific platform.
|
||
*/
|
||
parsePlatformTagName: identity,
|
||
|
||
/**
|
||
* Check if an attribute must be bound using property, e.g. value
|
||
* Platform-dependent.
|
||
*/
|
||
mustUseProp: no,
|
||
|
||
/**
|
||
* Exposed for legacy reasons
|
||
*/
|
||
_lifecycleHooks: LIFECYCLE_HOOKS
|
||
})
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Check if a string starts with $ or _
|
||
*/
|
||
function isReserved (str) {
|
||
var c = (str + '').charCodeAt(0);
|
||
return c === 0x24 || c === 0x5F
|
||
}
|
||
|
||
/**
|
||
* Define a property.
|
||
*/
|
||
function def (obj, key, val, enumerable) {
|
||
Object.defineProperty(obj, key, {
|
||
value: val,
|
||
enumerable: !!enumerable,
|
||
writable: true,
|
||
configurable: true
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Parse simple path.
|
||
*/
|
||
var bailRE = /[^\w.$]/;
|
||
function parsePath (path) {
|
||
if (bailRE.test(path)) {
|
||
return
|
||
}
|
||
var segments = path.split('.');
|
||
return function (obj) {
|
||
for (var i = 0; i < segments.length; i++) {
|
||
if (!obj) { return }
|
||
obj = obj[segments[i]];
|
||
}
|
||
return obj
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
// can we use __proto__?
|
||
var hasProto = '__proto__' in {};
|
||
|
||
// Browser environment sniffing
|
||
var inBrowser = typeof window !== 'undefined';
|
||
var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
|
||
var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
|
||
var UA = inBrowser && window.navigator.userAgent.toLowerCase();
|
||
var isIE = UA && /msie|trident/.test(UA);
|
||
var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
|
||
var isEdge = UA && UA.indexOf('edge/') > 0;
|
||
var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
|
||
var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
|
||
var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
|
||
|
||
// Firefox has a "watch" function on Object.prototype...
|
||
var nativeWatch = ({}).watch;
|
||
|
||
var supportsPassive = false;
|
||
if (inBrowser) {
|
||
try {
|
||
var opts = {};
|
||
Object.defineProperty(opts, 'passive', ({
|
||
get: function get () {
|
||
/* istanbul ignore next */
|
||
supportsPassive = true;
|
||
}
|
||
})); // https://github.com/facebook/flow/issues/285
|
||
window.addEventListener('test-passive', null, opts);
|
||
} catch (e) {}
|
||
}
|
||
|
||
// this needs to be lazy-evaled because vue may be required before
|
||
// vue-server-renderer can set VUE_ENV
|
||
var _isServer;
|
||
var isServerRendering = function () {
|
||
if (_isServer === undefined) {
|
||
/* istanbul ignore if */
|
||
if (!inBrowser && !inWeex && typeof global !== 'undefined') {
|
||
// detect presence of vue-server-renderer and avoid
|
||
// Webpack shimming the process
|
||
_isServer = global['process'].env.VUE_ENV === 'server';
|
||
} else {
|
||
_isServer = false;
|
||
}
|
||
}
|
||
return _isServer
|
||
};
|
||
|
||
// detect devtools
|
||
var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
|
||
|
||
/* istanbul ignore next */
|
||
function isNative (Ctor) {
|
||
return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
|
||
}
|
||
|
||
var hasSymbol =
|
||
typeof Symbol !== 'undefined' && isNative(Symbol) &&
|
||
typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
|
||
|
||
var _Set;
|
||
/* istanbul ignore if */ // $flow-disable-line
|
||
if (typeof Set !== 'undefined' && isNative(Set)) {
|
||
// use native Set when available.
|
||
_Set = Set;
|
||
} else {
|
||
// a non-standard Set polyfill that only works with primitive keys.
|
||
_Set = (function () {
|
||
function Set () {
|
||
this.set = Object.create(null);
|
||
}
|
||
Set.prototype.has = function has (key) {
|
||
return this.set[key] === true
|
||
};
|
||
Set.prototype.add = function add (key) {
|
||
this.set[key] = true;
|
||
};
|
||
Set.prototype.clear = function clear () {
|
||
this.set = Object.create(null);
|
||
};
|
||
|
||
return Set;
|
||
}());
|
||
}
|
||
|
||
/* */
|
||
|
||
var warn = noop;
|
||
var tip = noop;
|
||
var generateComponentTrace = (noop); // work around flow check
|
||
var formatComponentName = (noop);
|
||
|
||
if (true) {
|
||
var hasConsole = typeof console !== 'undefined';
|
||
var classifyRE = /(?:^|[-_])(\w)/g;
|
||
var classify = function (str) { return str
|
||
.replace(classifyRE, function (c) { return c.toUpperCase(); })
|
||
.replace(/[-_]/g, ''); };
|
||
|
||
warn = function (msg, vm) {
|
||
var trace = vm ? generateComponentTrace(vm) : '';
|
||
|
||
if (config.warnHandler) {
|
||
config.warnHandler.call(null, msg, vm, trace);
|
||
} else if (hasConsole && (!config.silent)) {
|
||
console.error(("[Vue warn]: " + msg + trace));
|
||
}
|
||
};
|
||
|
||
tip = function (msg, vm) {
|
||
if (hasConsole && (!config.silent)) {
|
||
console.warn("[Vue tip]: " + msg + (
|
||
vm ? generateComponentTrace(vm) : ''
|
||
));
|
||
}
|
||
};
|
||
|
||
formatComponentName = function (vm, includeFile) {
|
||
if (vm.$root === vm) {
|
||
return '<Root>'
|
||
}
|
||
var options = typeof vm === 'function' && vm.cid != null
|
||
? vm.options
|
||
: vm._isVue
|
||
? vm.$options || vm.constructor.options
|
||
: vm || {};
|
||
var name = options.name || options._componentTag;
|
||
var file = options.__file;
|
||
if (!name && file) {
|
||
var match = file.match(/([^/\\]+)\.vue$/);
|
||
name = match && match[1];
|
||
}
|
||
|
||
return (
|
||
(name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
|
||
(file && includeFile !== false ? (" at " + file) : '')
|
||
)
|
||
};
|
||
|
||
var repeat = function (str, n) {
|
||
var res = '';
|
||
while (n) {
|
||
if (n % 2 === 1) { res += str; }
|
||
if (n > 1) { str += str; }
|
||
n >>= 1;
|
||
}
|
||
return res
|
||
};
|
||
|
||
generateComponentTrace = function (vm) {
|
||
if (vm._isVue && vm.$parent) {
|
||
var tree = [];
|
||
var currentRecursiveSequence = 0;
|
||
while (vm) {
|
||
if (tree.length > 0) {
|
||
var last = tree[tree.length - 1];
|
||
if (last.constructor === vm.constructor) {
|
||
currentRecursiveSequence++;
|
||
vm = vm.$parent;
|
||
continue
|
||
} else if (currentRecursiveSequence > 0) {
|
||
tree[tree.length - 1] = [last, currentRecursiveSequence];
|
||
currentRecursiveSequence = 0;
|
||
}
|
||
}
|
||
tree.push(vm);
|
||
vm = vm.$parent;
|
||
}
|
||
return '\n\nfound in\n\n' + tree
|
||
.map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
|
||
? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
|
||
: formatComponentName(vm))); })
|
||
.join('\n')
|
||
} else {
|
||
return ("\n\n(found in " + (formatComponentName(vm)) + ")")
|
||
}
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
|
||
var uid = 0;
|
||
|
||
/**
|
||
* A dep is an observable that can have multiple
|
||
* directives subscribing to it.
|
||
*/
|
||
var Dep = function Dep () {
|
||
this.id = uid++;
|
||
this.subs = [];
|
||
};
|
||
|
||
Dep.prototype.addSub = function addSub (sub) {
|
||
this.subs.push(sub);
|
||
};
|
||
|
||
Dep.prototype.removeSub = function removeSub (sub) {
|
||
remove(this.subs, sub);
|
||
};
|
||
|
||
Dep.prototype.depend = function depend () {
|
||
if (Dep.target) {
|
||
Dep.target.addDep(this);
|
||
}
|
||
};
|
||
|
||
Dep.prototype.notify = function notify () {
|
||
// stabilize the subscriber list first
|
||
var subs = this.subs.slice();
|
||
for (var i = 0, l = subs.length; i < l; i++) {
|
||
subs[i].update();
|
||
}
|
||
};
|
||
|
||
// the current target watcher being evaluated.
|
||
// this is globally unique because there could be only one
|
||
// watcher being evaluated at any time.
|
||
Dep.target = null;
|
||
var targetStack = [];
|
||
|
||
function pushTarget (_target) {
|
||
if (Dep.target) { targetStack.push(Dep.target); }
|
||
Dep.target = _target;
|
||
}
|
||
|
||
function popTarget () {
|
||
Dep.target = targetStack.pop();
|
||
}
|
||
|
||
/* */
|
||
|
||
var VNode = function VNode (
|
||
tag,
|
||
data,
|
||
children,
|
||
text,
|
||
elm,
|
||
context,
|
||
componentOptions,
|
||
asyncFactory
|
||
) {
|
||
this.tag = tag;
|
||
this.data = data;
|
||
this.children = children;
|
||
this.text = text;
|
||
this.elm = elm;
|
||
this.ns = undefined;
|
||
this.context = context;
|
||
this.fnContext = undefined;
|
||
this.fnOptions = undefined;
|
||
this.fnScopeId = undefined;
|
||
this.key = data && data.key;
|
||
this.componentOptions = componentOptions;
|
||
this.componentInstance = undefined;
|
||
this.parent = undefined;
|
||
this.raw = false;
|
||
this.isStatic = false;
|
||
this.isRootInsert = true;
|
||
this.isComment = false;
|
||
this.isCloned = false;
|
||
this.isOnce = false;
|
||
this.asyncFactory = asyncFactory;
|
||
this.asyncMeta = undefined;
|
||
this.isAsyncPlaceholder = false;
|
||
};
|
||
|
||
var prototypeAccessors = { child: { configurable: true } };
|
||
|
||
// DEPRECATED: alias for componentInstance for backwards compat.
|
||
/* istanbul ignore next */
|
||
prototypeAccessors.child.get = function () {
|
||
return this.componentInstance
|
||
};
|
||
|
||
Object.defineProperties( VNode.prototype, prototypeAccessors );
|
||
|
||
var createEmptyVNode = function (text) {
|
||
if ( text === void 0 ) text = '';
|
||
|
||
var node = new VNode();
|
||
node.text = text;
|
||
node.isComment = true;
|
||
return node
|
||
};
|
||
|
||
function createTextVNode (val) {
|
||
return new VNode(undefined, undefined, undefined, String(val))
|
||
}
|
||
|
||
// optimized shallow clone
|
||
// used for static nodes and slot nodes because they may be reused across
|
||
// multiple renders, cloning them avoids errors when DOM manipulations rely
|
||
// on their elm reference.
|
||
function cloneVNode (vnode) {
|
||
var cloned = new VNode(
|
||
vnode.tag,
|
||
vnode.data,
|
||
vnode.children,
|
||
vnode.text,
|
||
vnode.elm,
|
||
vnode.context,
|
||
vnode.componentOptions,
|
||
vnode.asyncFactory
|
||
);
|
||
cloned.ns = vnode.ns;
|
||
cloned.isStatic = vnode.isStatic;
|
||
cloned.key = vnode.key;
|
||
cloned.isComment = vnode.isComment;
|
||
cloned.fnContext = vnode.fnContext;
|
||
cloned.fnOptions = vnode.fnOptions;
|
||
cloned.fnScopeId = vnode.fnScopeId;
|
||
cloned.isCloned = true;
|
||
return cloned
|
||
}
|
||
|
||
/*
|
||
* not type checking this file because flow doesn't play well with
|
||
* dynamically accessing methods on Array prototype
|
||
*/
|
||
|
||
var arrayProto = Array.prototype;
|
||
var arrayMethods = Object.create(arrayProto);
|
||
|
||
var methodsToPatch = [
|
||
'push',
|
||
'pop',
|
||
'shift',
|
||
'unshift',
|
||
'splice',
|
||
'sort',
|
||
'reverse'
|
||
];
|
||
|
||
/**
|
||
* Intercept mutating methods and emit events
|
||
*/
|
||
methodsToPatch.forEach(function (method) {
|
||
// cache original method
|
||
var original = arrayProto[method];
|
||
def(arrayMethods, method, function mutator () {
|
||
var args = [], len = arguments.length;
|
||
while ( len-- ) args[ len ] = arguments[ len ];
|
||
|
||
var result = original.apply(this, args);
|
||
var ob = this.__ob__;
|
||
var inserted;
|
||
switch (method) {
|
||
case 'push':
|
||
case 'unshift':
|
||
inserted = args;
|
||
break
|
||
case 'splice':
|
||
inserted = args.slice(2);
|
||
break
|
||
}
|
||
if (inserted) { ob.observeArray(inserted); }
|
||
// notify change
|
||
ob.dep.notify();
|
||
return result
|
||
});
|
||
});
|
||
|
||
/* */
|
||
|
||
var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
|
||
|
||
/**
|
||
* In some cases we may want to disable observation inside a component's
|
||
* update computation.
|
||
*/
|
||
var shouldObserve = true;
|
||
|
||
function toggleObserving (value) {
|
||
shouldObserve = value;
|
||
}
|
||
|
||
/**
|
||
* Observer class that is attached to each observed
|
||
* object. Once attached, the observer converts the target
|
||
* object's property keys into getter/setters that
|
||
* collect dependencies and dispatch updates.
|
||
*/
|
||
var Observer = function Observer (value) {
|
||
this.value = value;
|
||
this.dep = new Dep();
|
||
this.vmCount = 0;
|
||
def(value, '__ob__', this);
|
||
if (Array.isArray(value)) {
|
||
var augment = hasProto
|
||
? protoAugment
|
||
: copyAugment;
|
||
augment(value, arrayMethods, arrayKeys);
|
||
this.observeArray(value);
|
||
} else {
|
||
this.walk(value);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Walk through each property and convert them into
|
||
* getter/setters. This method should only be called when
|
||
* value type is Object.
|
||
*/
|
||
Observer.prototype.walk = function walk (obj) {
|
||
var keys = Object.keys(obj);
|
||
for (var i = 0; i < keys.length; i++) {
|
||
defineReactive(obj, keys[i]);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Observe a list of Array items.
|
||
*/
|
||
Observer.prototype.observeArray = function observeArray (items) {
|
||
for (var i = 0, l = items.length; i < l; i++) {
|
||
observe(items[i]);
|
||
}
|
||
};
|
||
|
||
// helpers
|
||
|
||
/**
|
||
* Augment an target Object or Array by intercepting
|
||
* the prototype chain using __proto__
|
||
*/
|
||
function protoAugment (target, src, keys) {
|
||
/* eslint-disable no-proto */
|
||
target.__proto__ = src;
|
||
/* eslint-enable no-proto */
|
||
}
|
||
|
||
/**
|
||
* Augment an target Object or Array by defining
|
||
* hidden properties.
|
||
*/
|
||
/* istanbul ignore next */
|
||
function copyAugment (target, src, keys) {
|
||
for (var i = 0, l = keys.length; i < l; i++) {
|
||
var key = keys[i];
|
||
def(target, key, src[key]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Attempt to create an observer instance for a value,
|
||
* returns the new observer if successfully observed,
|
||
* or the existing observer if the value already has one.
|
||
*/
|
||
function observe (value, asRootData) {
|
||
if (!isObject(value) || value instanceof VNode) {
|
||
return
|
||
}
|
||
var ob;
|
||
if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
|
||
ob = value.__ob__;
|
||
} else if (
|
||
shouldObserve &&
|
||
!isServerRendering() &&
|
||
(Array.isArray(value) || isPlainObject(value)) &&
|
||
Object.isExtensible(value) &&
|
||
!value._isVue
|
||
) {
|
||
ob = new Observer(value);
|
||
}
|
||
if (asRootData && ob) {
|
||
ob.vmCount++;
|
||
}
|
||
return ob
|
||
}
|
||
|
||
/**
|
||
* Define a reactive property on an Object.
|
||
*/
|
||
function defineReactive (
|
||
obj,
|
||
key,
|
||
val,
|
||
customSetter,
|
||
shallow
|
||
) {
|
||
var dep = new Dep();
|
||
|
||
var property = Object.getOwnPropertyDescriptor(obj, key);
|
||
if (property && property.configurable === false) {
|
||
return
|
||
}
|
||
|
||
// cater for pre-defined getter/setters
|
||
var getter = property && property.get;
|
||
if (!getter && arguments.length === 2) {
|
||
val = obj[key];
|
||
}
|
||
var setter = property && property.set;
|
||
|
||
var childOb = !shallow && observe(val);
|
||
Object.defineProperty(obj, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: function reactiveGetter () {
|
||
var value = getter ? getter.call(obj) : val;
|
||
if (Dep.target) {
|
||
dep.depend();
|
||
if (childOb) {
|
||
childOb.dep.depend();
|
||
if (Array.isArray(value)) {
|
||
dependArray(value);
|
||
}
|
||
}
|
||
}
|
||
return value
|
||
},
|
||
set: function reactiveSetter (newVal) {
|
||
var value = getter ? getter.call(obj) : val;
|
||
/* eslint-disable no-self-compare */
|
||
if (newVal === value || (newVal !== newVal && value !== value)) {
|
||
return
|
||
}
|
||
/* eslint-enable no-self-compare */
|
||
if ("development" !== 'production' && customSetter) {
|
||
customSetter();
|
||
}
|
||
if (setter) {
|
||
setter.call(obj, newVal);
|
||
} else {
|
||
val = newVal;
|
||
}
|
||
childOb = !shallow && observe(newVal);
|
||
dep.notify();
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Set a property on an object. Adds the new property and
|
||
* triggers change notification if the property doesn't
|
||
* already exist.
|
||
*/
|
||
function set (target, key, val) {
|
||
if ("development" !== 'production' &&
|
||
(isUndef(target) || isPrimitive(target))
|
||
) {
|
||
warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
|
||
}
|
||
if (Array.isArray(target) && isValidArrayIndex(key)) {
|
||
target.length = Math.max(target.length, key);
|
||
target.splice(key, 1, val);
|
||
return val
|
||
}
|
||
if (key in target && !(key in Object.prototype)) {
|
||
target[key] = val;
|
||
return val
|
||
}
|
||
var ob = (target).__ob__;
|
||
if (target._isVue || (ob && ob.vmCount)) {
|
||
"development" !== 'production' && warn(
|
||
'Avoid adding reactive properties to a Vue instance or its root $data ' +
|
||
'at runtime - declare it upfront in the data option.'
|
||
);
|
||
return val
|
||
}
|
||
if (!ob) {
|
||
target[key] = val;
|
||
return val
|
||
}
|
||
defineReactive(ob.value, key, val);
|
||
ob.dep.notify();
|
||
return val
|
||
}
|
||
|
||
/**
|
||
* Delete a property and trigger change if necessary.
|
||
*/
|
||
function del (target, key) {
|
||
if ("development" !== 'production' &&
|
||
(isUndef(target) || isPrimitive(target))
|
||
) {
|
||
warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
|
||
}
|
||
if (Array.isArray(target) && isValidArrayIndex(key)) {
|
||
target.splice(key, 1);
|
||
return
|
||
}
|
||
var ob = (target).__ob__;
|
||
if (target._isVue || (ob && ob.vmCount)) {
|
||
"development" !== 'production' && warn(
|
||
'Avoid deleting properties on a Vue instance or its root $data ' +
|
||
'- just set it to null.'
|
||
);
|
||
return
|
||
}
|
||
if (!hasOwn(target, key)) {
|
||
return
|
||
}
|
||
delete target[key];
|
||
if (!ob) {
|
||
return
|
||
}
|
||
ob.dep.notify();
|
||
}
|
||
|
||
/**
|
||
* Collect dependencies on array elements when the array is touched, since
|
||
* we cannot intercept array element access like property getters.
|
||
*/
|
||
function dependArray (value) {
|
||
for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
|
||
e = value[i];
|
||
e && e.__ob__ && e.__ob__.dep.depend();
|
||
if (Array.isArray(e)) {
|
||
dependArray(e);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Option overwriting strategies are functions that handle
|
||
* how to merge a parent option value and a child option
|
||
* value into the final value.
|
||
*/
|
||
var strats = config.optionMergeStrategies;
|
||
|
||
/**
|
||
* Options with restrictions
|
||
*/
|
||
if (true) {
|
||
strats.el = strats.propsData = function (parent, child, vm, key) {
|
||
if (!vm) {
|
||
warn(
|
||
"option \"" + key + "\" can only be used during instance " +
|
||
'creation with the `new` keyword.'
|
||
);
|
||
}
|
||
return defaultStrat(parent, child)
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Helper that recursively merges two data objects together.
|
||
*/
|
||
function mergeData (to, from) {
|
||
if (!from) { return to }
|
||
var key, toVal, fromVal;
|
||
var keys = Object.keys(from);
|
||
for (var i = 0; i < keys.length; i++) {
|
||
key = keys[i];
|
||
toVal = to[key];
|
||
fromVal = from[key];
|
||
if (!hasOwn(to, key)) {
|
||
set(to, key, fromVal);
|
||
} else if (isPlainObject(toVal) && isPlainObject(fromVal)) {
|
||
mergeData(toVal, fromVal);
|
||
}
|
||
}
|
||
return to
|
||
}
|
||
|
||
/**
|
||
* Data
|
||
*/
|
||
function mergeDataOrFn (
|
||
parentVal,
|
||
childVal,
|
||
vm
|
||
) {
|
||
if (!vm) {
|
||
// in a Vue.extend merge, both should be functions
|
||
if (!childVal) {
|
||
return parentVal
|
||
}
|
||
if (!parentVal) {
|
||
return childVal
|
||
}
|
||
// when parentVal & childVal are both present,
|
||
// we need to return a function that returns the
|
||
// merged result of both functions... no need to
|
||
// check if parentVal is a function here because
|
||
// it has to be a function to pass previous merges.
|
||
return function mergedDataFn () {
|
||
return mergeData(
|
||
typeof childVal === 'function' ? childVal.call(this, this) : childVal,
|
||
typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
|
||
)
|
||
}
|
||
} else {
|
||
return function mergedInstanceDataFn () {
|
||
// instance merge
|
||
var instanceData = typeof childVal === 'function'
|
||
? childVal.call(vm, vm)
|
||
: childVal;
|
||
var defaultData = typeof parentVal === 'function'
|
||
? parentVal.call(vm, vm)
|
||
: parentVal;
|
||
if (instanceData) {
|
||
return mergeData(instanceData, defaultData)
|
||
} else {
|
||
return defaultData
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
strats.data = function (
|
||
parentVal,
|
||
childVal,
|
||
vm
|
||
) {
|
||
if (!vm) {
|
||
if (childVal && typeof childVal !== 'function') {
|
||
"development" !== 'production' && warn(
|
||
'The "data" option should be a function ' +
|
||
'that returns a per-instance value in component ' +
|
||
'definitions.',
|
||
vm
|
||
);
|
||
|
||
return parentVal
|
||
}
|
||
return mergeDataOrFn(parentVal, childVal)
|
||
}
|
||
|
||
return mergeDataOrFn(parentVal, childVal, vm)
|
||
};
|
||
|
||
/**
|
||
* Hooks and props are merged as arrays.
|
||
*/
|
||
function mergeHook (
|
||
parentVal,
|
||
childVal
|
||
) {
|
||
return childVal
|
||
? parentVal
|
||
? parentVal.concat(childVal)
|
||
: Array.isArray(childVal)
|
||
? childVal
|
||
: [childVal]
|
||
: parentVal
|
||
}
|
||
|
||
LIFECYCLE_HOOKS.forEach(function (hook) {
|
||
strats[hook] = mergeHook;
|
||
});
|
||
|
||
/**
|
||
* Assets
|
||
*
|
||
* When a vm is present (instance creation), we need to do
|
||
* a three-way merge between constructor options, instance
|
||
* options and parent options.
|
||
*/
|
||
function mergeAssets (
|
||
parentVal,
|
||
childVal,
|
||
vm,
|
||
key
|
||
) {
|
||
var res = Object.create(parentVal || null);
|
||
if (childVal) {
|
||
"development" !== 'production' && assertObjectType(key, childVal, vm);
|
||
return extend(res, childVal)
|
||
} else {
|
||
return res
|
||
}
|
||
}
|
||
|
||
ASSET_TYPES.forEach(function (type) {
|
||
strats[type + 's'] = mergeAssets;
|
||
});
|
||
|
||
/**
|
||
* Watchers.
|
||
*
|
||
* Watchers hashes should not overwrite one
|
||
* another, so we merge them as arrays.
|
||
*/
|
||
strats.watch = function (
|
||
parentVal,
|
||
childVal,
|
||
vm,
|
||
key
|
||
) {
|
||
// work around Firefox's Object.prototype.watch...
|
||
if (parentVal === nativeWatch) { parentVal = undefined; }
|
||
if (childVal === nativeWatch) { childVal = undefined; }
|
||
/* istanbul ignore if */
|
||
if (!childVal) { return Object.create(parentVal || null) }
|
||
if (true) {
|
||
assertObjectType(key, childVal, vm);
|
||
}
|
||
if (!parentVal) { return childVal }
|
||
var ret = {};
|
||
extend(ret, parentVal);
|
||
for (var key$1 in childVal) {
|
||
var parent = ret[key$1];
|
||
var child = childVal[key$1];
|
||
if (parent && !Array.isArray(parent)) {
|
||
parent = [parent];
|
||
}
|
||
ret[key$1] = parent
|
||
? parent.concat(child)
|
||
: Array.isArray(child) ? child : [child];
|
||
}
|
||
return ret
|
||
};
|
||
|
||
/**
|
||
* Other object hashes.
|
||
*/
|
||
strats.props =
|
||
strats.methods =
|
||
strats.inject =
|
||
strats.computed = function (
|
||
parentVal,
|
||
childVal,
|
||
vm,
|
||
key
|
||
) {
|
||
if (childVal && "development" !== 'production') {
|
||
assertObjectType(key, childVal, vm);
|
||
}
|
||
if (!parentVal) { return childVal }
|
||
var ret = Object.create(null);
|
||
extend(ret, parentVal);
|
||
if (childVal) { extend(ret, childVal); }
|
||
return ret
|
||
};
|
||
strats.provide = mergeDataOrFn;
|
||
|
||
/**
|
||
* Default strategy.
|
||
*/
|
||
var defaultStrat = function (parentVal, childVal) {
|
||
return childVal === undefined
|
||
? parentVal
|
||
: childVal
|
||
};
|
||
|
||
/**
|
||
* Validate component names
|
||
*/
|
||
function checkComponents (options) {
|
||
for (var key in options.components) {
|
||
validateComponentName(key);
|
||
}
|
||
}
|
||
|
||
function validateComponentName (name) {
|
||
if (!/^[a-zA-Z][\w-]*$/.test(name)) {
|
||
warn(
|
||
'Invalid component name: "' + name + '". Component names ' +
|
||
'can only contain alphanumeric characters and the hyphen, ' +
|
||
'and must start with a letter.'
|
||
);
|
||
}
|
||
if (isBuiltInTag(name) || config.isReservedTag(name)) {
|
||
warn(
|
||
'Do not use built-in or reserved HTML elements as component ' +
|
||
'id: ' + name
|
||
);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Ensure all props option syntax are normalized into the
|
||
* Object-based format.
|
||
*/
|
||
function normalizeProps (options, vm) {
|
||
var props = options.props;
|
||
if (!props) { return }
|
||
var res = {};
|
||
var i, val, name;
|
||
if (Array.isArray(props)) {
|
||
i = props.length;
|
||
while (i--) {
|
||
val = props[i];
|
||
if (typeof val === 'string') {
|
||
name = camelize(val);
|
||
res[name] = { type: null };
|
||
} else if (true) {
|
||
warn('props must be strings when using array syntax.');
|
||
}
|
||
}
|
||
} else if (isPlainObject(props)) {
|
||
for (var key in props) {
|
||
val = props[key];
|
||
name = camelize(key);
|
||
res[name] = isPlainObject(val)
|
||
? val
|
||
: { type: val };
|
||
}
|
||
} else if (true) {
|
||
warn(
|
||
"Invalid value for option \"props\": expected an Array or an Object, " +
|
||
"but got " + (toRawType(props)) + ".",
|
||
vm
|
||
);
|
||
}
|
||
options.props = res;
|
||
}
|
||
|
||
/**
|
||
* Normalize all injections into Object-based format
|
||
*/
|
||
function normalizeInject (options, vm) {
|
||
var inject = options.inject;
|
||
if (!inject) { return }
|
||
var normalized = options.inject = {};
|
||
if (Array.isArray(inject)) {
|
||
for (var i = 0; i < inject.length; i++) {
|
||
normalized[inject[i]] = { from: inject[i] };
|
||
}
|
||
} else if (isPlainObject(inject)) {
|
||
for (var key in inject) {
|
||
var val = inject[key];
|
||
normalized[key] = isPlainObject(val)
|
||
? extend({ from: key }, val)
|
||
: { from: val };
|
||
}
|
||
} else if (true) {
|
||
warn(
|
||
"Invalid value for option \"inject\": expected an Array or an Object, " +
|
||
"but got " + (toRawType(inject)) + ".",
|
||
vm
|
||
);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Normalize raw function directives into object format.
|
||
*/
|
||
function normalizeDirectives (options) {
|
||
var dirs = options.directives;
|
||
if (dirs) {
|
||
for (var key in dirs) {
|
||
var def = dirs[key];
|
||
if (typeof def === 'function') {
|
||
dirs[key] = { bind: def, update: def };
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function assertObjectType (name, value, vm) {
|
||
if (!isPlainObject(value)) {
|
||
warn(
|
||
"Invalid value for option \"" + name + "\": expected an Object, " +
|
||
"but got " + (toRawType(value)) + ".",
|
||
vm
|
||
);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Merge two option objects into a new one.
|
||
* Core utility used in both instantiation and inheritance.
|
||
*/
|
||
function mergeOptions (
|
||
parent,
|
||
child,
|
||
vm
|
||
) {
|
||
if (true) {
|
||
checkComponents(child);
|
||
}
|
||
|
||
if (typeof child === 'function') {
|
||
child = child.options;
|
||
}
|
||
|
||
normalizeProps(child, vm);
|
||
normalizeInject(child, vm);
|
||
normalizeDirectives(child);
|
||
var extendsFrom = child.extends;
|
||
if (extendsFrom) {
|
||
parent = mergeOptions(parent, extendsFrom, vm);
|
||
}
|
||
if (child.mixins) {
|
||
for (var i = 0, l = child.mixins.length; i < l; i++) {
|
||
parent = mergeOptions(parent, child.mixins[i], vm);
|
||
}
|
||
}
|
||
var options = {};
|
||
var key;
|
||
for (key in parent) {
|
||
mergeField(key);
|
||
}
|
||
for (key in child) {
|
||
if (!hasOwn(parent, key)) {
|
||
mergeField(key);
|
||
}
|
||
}
|
||
function mergeField (key) {
|
||
var strat = strats[key] || defaultStrat;
|
||
options[key] = strat(parent[key], child[key], vm, key);
|
||
}
|
||
return options
|
||
}
|
||
|
||
/**
|
||
* Resolve an asset.
|
||
* This function is used because child instances need access
|
||
* to assets defined in its ancestor chain.
|
||
*/
|
||
function resolveAsset (
|
||
options,
|
||
type,
|
||
id,
|
||
warnMissing
|
||
) {
|
||
/* istanbul ignore if */
|
||
if (typeof id !== 'string') {
|
||
return
|
||
}
|
||
var assets = options[type];
|
||
// check local registration variations first
|
||
if (hasOwn(assets, id)) { return assets[id] }
|
||
var camelizedId = camelize(id);
|
||
if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
|
||
var PascalCaseId = capitalize(camelizedId);
|
||
if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
|
||
// fallback to prototype chain
|
||
var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
|
||
if ("development" !== 'production' && warnMissing && !res) {
|
||
warn(
|
||
'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
|
||
options
|
||
);
|
||
}
|
||
return res
|
||
}
|
||
|
||
/* */
|
||
|
||
function validateProp (
|
||
key,
|
||
propOptions,
|
||
propsData,
|
||
vm
|
||
) {
|
||
var prop = propOptions[key];
|
||
var absent = !hasOwn(propsData, key);
|
||
var value = propsData[key];
|
||
// boolean casting
|
||
var booleanIndex = getTypeIndex(Boolean, prop.type);
|
||
if (booleanIndex > -1) {
|
||
if (absent && !hasOwn(prop, 'default')) {
|
||
value = false;
|
||
} else if (value === '' || value === hyphenate(key)) {
|
||
// only cast empty string / same name to boolean if
|
||
// boolean has higher priority
|
||
var stringIndex = getTypeIndex(String, prop.type);
|
||
if (stringIndex < 0 || booleanIndex < stringIndex) {
|
||
value = true;
|
||
}
|
||
}
|
||
}
|
||
// check default value
|
||
if (value === undefined) {
|
||
value = getPropDefaultValue(vm, prop, key);
|
||
// since the default value is a fresh copy,
|
||
// make sure to observe it.
|
||
var prevShouldObserve = shouldObserve;
|
||
toggleObserving(true);
|
||
observe(value);
|
||
toggleObserving(prevShouldObserve);
|
||
}
|
||
if (
|
||
true
|
||
) {
|
||
assertProp(prop, key, value, vm, absent);
|
||
}
|
||
return value
|
||
}
|
||
|
||
/**
|
||
* Get the default value of a prop.
|
||
*/
|
||
function getPropDefaultValue (vm, prop, key) {
|
||
// no default, return undefined
|
||
if (!hasOwn(prop, 'default')) {
|
||
return undefined
|
||
}
|
||
var def = prop.default;
|
||
// warn against non-factory defaults for Object & Array
|
||
if ("development" !== 'production' && isObject(def)) {
|
||
warn(
|
||
'Invalid default value for prop "' + key + '": ' +
|
||
'Props with type Object/Array must use a factory function ' +
|
||
'to return the default value.',
|
||
vm
|
||
);
|
||
}
|
||
// the raw prop value was also undefined from previous render,
|
||
// return previous default value to avoid unnecessary watcher trigger
|
||
if (vm && vm.$options.propsData &&
|
||
vm.$options.propsData[key] === undefined &&
|
||
vm._props[key] !== undefined
|
||
) {
|
||
return vm._props[key]
|
||
}
|
||
// call factory function for non-Function types
|
||
// a value is Function if its prototype is function even across different execution context
|
||
return typeof def === 'function' && getType(prop.type) !== 'Function'
|
||
? def.call(vm)
|
||
: def
|
||
}
|
||
|
||
/**
|
||
* Assert whether a prop is valid.
|
||
*/
|
||
function assertProp (
|
||
prop,
|
||
name,
|
||
value,
|
||
vm,
|
||
absent
|
||
) {
|
||
if (prop.required && absent) {
|
||
warn(
|
||
'Missing required prop: "' + name + '"',
|
||
vm
|
||
);
|
||
return
|
||
}
|
||
if (value == null && !prop.required) {
|
||
return
|
||
}
|
||
var type = prop.type;
|
||
var valid = !type || type === true;
|
||
var expectedTypes = [];
|
||
if (type) {
|
||
if (!Array.isArray(type)) {
|
||
type = [type];
|
||
}
|
||
for (var i = 0; i < type.length && !valid; i++) {
|
||
var assertedType = assertType(value, type[i]);
|
||
expectedTypes.push(assertedType.expectedType || '');
|
||
valid = assertedType.valid;
|
||
}
|
||
}
|
||
if (!valid) {
|
||
warn(
|
||
"Invalid prop: type check failed for prop \"" + name + "\"." +
|
||
" Expected " + (expectedTypes.map(capitalize).join(', ')) +
|
||
", got " + (toRawType(value)) + ".",
|
||
vm
|
||
);
|
||
return
|
||
}
|
||
var validator = prop.validator;
|
||
if (validator) {
|
||
if (!validator(value)) {
|
||
warn(
|
||
'Invalid prop: custom validator check failed for prop "' + name + '".',
|
||
vm
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;
|
||
|
||
function assertType (value, type) {
|
||
var valid;
|
||
var expectedType = getType(type);
|
||
if (simpleCheckRE.test(expectedType)) {
|
||
var t = typeof value;
|
||
valid = t === expectedType.toLowerCase();
|
||
// for primitive wrapper objects
|
||
if (!valid && t === 'object') {
|
||
valid = value instanceof type;
|
||
}
|
||
} else if (expectedType === 'Object') {
|
||
valid = isPlainObject(value);
|
||
} else if (expectedType === 'Array') {
|
||
valid = Array.isArray(value);
|
||
} else {
|
||
valid = value instanceof type;
|
||
}
|
||
return {
|
||
valid: valid,
|
||
expectedType: expectedType
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Use function string name to check built-in types,
|
||
* because a simple equality check will fail when running
|
||
* across different vms / iframes.
|
||
*/
|
||
function getType (fn) {
|
||
var match = fn && fn.toString().match(/^\s*function (\w+)/);
|
||
return match ? match[1] : ''
|
||
}
|
||
|
||
function isSameType (a, b) {
|
||
return getType(a) === getType(b)
|
||
}
|
||
|
||
function getTypeIndex (type, expectedTypes) {
|
||
if (!Array.isArray(expectedTypes)) {
|
||
return isSameType(expectedTypes, type) ? 0 : -1
|
||
}
|
||
for (var i = 0, len = expectedTypes.length; i < len; i++) {
|
||
if (isSameType(expectedTypes[i], type)) {
|
||
return i
|
||
}
|
||
}
|
||
return -1
|
||
}
|
||
|
||
/* */
|
||
|
||
function handleError (err, vm, info) {
|
||
if (vm) {
|
||
var cur = vm;
|
||
while ((cur = cur.$parent)) {
|
||
var hooks = cur.$options.errorCaptured;
|
||
if (hooks) {
|
||
for (var i = 0; i < hooks.length; i++) {
|
||
try {
|
||
var capture = hooks[i].call(cur, err, vm, info) === false;
|
||
if (capture) { return }
|
||
} catch (e) {
|
||
globalHandleError(e, cur, 'errorCaptured hook');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
globalHandleError(err, vm, info);
|
||
}
|
||
|
||
function globalHandleError (err, vm, info) {
|
||
if (config.errorHandler) {
|
||
try {
|
||
return config.errorHandler.call(null, err, vm, info)
|
||
} catch (e) {
|
||
logError(e, null, 'config.errorHandler');
|
||
}
|
||
}
|
||
logError(err, vm, info);
|
||
}
|
||
|
||
function logError (err, vm, info) {
|
||
if (true) {
|
||
warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
|
||
}
|
||
/* istanbul ignore else */
|
||
if ((inBrowser || inWeex) && typeof console !== 'undefined') {
|
||
console.error(err);
|
||
} else {
|
||
throw err
|
||
}
|
||
}
|
||
|
||
/* */
|
||
/* globals MessageChannel */
|
||
|
||
var callbacks = [];
|
||
var pending = false;
|
||
|
||
function flushCallbacks () {
|
||
pending = false;
|
||
var copies = callbacks.slice(0);
|
||
callbacks.length = 0;
|
||
for (var i = 0; i < copies.length; i++) {
|
||
copies[i]();
|
||
}
|
||
}
|
||
|
||
// Here we have async deferring wrappers using both microtasks and (macro) tasks.
|
||
// In < 2.4 we used microtasks everywhere, but there are some scenarios where
|
||
// microtasks have too high a priority and fire in between supposedly
|
||
// sequential events (e.g. #4521, #6690) or even between bubbling of the same
|
||
// event (#6566). However, using (macro) tasks everywhere also has subtle problems
|
||
// when state is changed right before repaint (e.g. #6813, out-in transitions).
|
||
// Here we use microtask by default, but expose a way to force (macro) task when
|
||
// needed (e.g. in event handlers attached by v-on).
|
||
var microTimerFunc;
|
||
var macroTimerFunc;
|
||
var useMacroTask = false;
|
||
|
||
// Determine (macro) task defer implementation.
|
||
// Technically setImmediate should be the ideal choice, but it's only available
|
||
// in IE. The only polyfill that consistently queues the callback after all DOM
|
||
// events triggered in the same loop is by using MessageChannel.
|
||
/* istanbul ignore if */
|
||
if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
|
||
macroTimerFunc = function () {
|
||
setImmediate(flushCallbacks);
|
||
};
|
||
} else if (typeof MessageChannel !== 'undefined' && (
|
||
isNative(MessageChannel) ||
|
||
// PhantomJS
|
||
MessageChannel.toString() === '[object MessageChannelConstructor]'
|
||
)) {
|
||
var channel = new MessageChannel();
|
||
var port = channel.port2;
|
||
channel.port1.onmessage = flushCallbacks;
|
||
macroTimerFunc = function () {
|
||
port.postMessage(1);
|
||
};
|
||
} else {
|
||
/* istanbul ignore next */
|
||
macroTimerFunc = function () {
|
||
setTimeout(flushCallbacks, 0);
|
||
};
|
||
}
|
||
|
||
// Determine microtask defer implementation.
|
||
/* istanbul ignore next, $flow-disable-line */
|
||
if (typeof Promise !== 'undefined' && isNative(Promise)) {
|
||
var p = Promise.resolve();
|
||
microTimerFunc = function () {
|
||
p.then(flushCallbacks);
|
||
// in problematic UIWebViews, Promise.then doesn't completely break, but
|
||
// it can get stuck in a weird state where callbacks are pushed into the
|
||
// microtask queue but the queue isn't being flushed, until the browser
|
||
// needs to do some other work, e.g. handle a timer. Therefore we can
|
||
// "force" the microtask queue to be flushed by adding an empty timer.
|
||
if (isIOS) { setTimeout(noop); }
|
||
};
|
||
} else {
|
||
// fallback to macro
|
||
microTimerFunc = macroTimerFunc;
|
||
}
|
||
|
||
/**
|
||
* Wrap a function so that if any code inside triggers state change,
|
||
* the changes are queued using a (macro) task instead of a microtask.
|
||
*/
|
||
function withMacroTask (fn) {
|
||
return fn._withTask || (fn._withTask = function () {
|
||
useMacroTask = true;
|
||
var res = fn.apply(null, arguments);
|
||
useMacroTask = false;
|
||
return res
|
||
})
|
||
}
|
||
|
||
function nextTick (cb, ctx) {
|
||
var _resolve;
|
||
callbacks.push(function () {
|
||
if (cb) {
|
||
try {
|
||
cb.call(ctx);
|
||
} catch (e) {
|
||
handleError(e, ctx, 'nextTick');
|
||
}
|
||
} else if (_resolve) {
|
||
_resolve(ctx);
|
||
}
|
||
});
|
||
if (!pending) {
|
||
pending = true;
|
||
if (useMacroTask) {
|
||
macroTimerFunc();
|
||
} else {
|
||
microTimerFunc();
|
||
}
|
||
}
|
||
// $flow-disable-line
|
||
if (!cb && typeof Promise !== 'undefined') {
|
||
return new Promise(function (resolve) {
|
||
_resolve = resolve;
|
||
})
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var mark;
|
||
var measure;
|
||
|
||
if (true) {
|
||
var perf = inBrowser && window.performance;
|
||
/* istanbul ignore if */
|
||
if (
|
||
perf &&
|
||
perf.mark &&
|
||
perf.measure &&
|
||
perf.clearMarks &&
|
||
perf.clearMeasures
|
||
) {
|
||
mark = function (tag) { return perf.mark(tag); };
|
||
measure = function (name, startTag, endTag) {
|
||
perf.measure(name, startTag, endTag);
|
||
perf.clearMarks(startTag);
|
||
perf.clearMarks(endTag);
|
||
perf.clearMeasures(name);
|
||
};
|
||
}
|
||
}
|
||
|
||
/* not type checking this file because flow doesn't play well with Proxy */
|
||
|
||
var initProxy;
|
||
|
||
if (true) {
|
||
var allowedGlobals = makeMap(
|
||
'Infinity,undefined,NaN,isFinite,isNaN,' +
|
||
'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
|
||
'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
|
||
'require' // for Webpack/Browserify
|
||
);
|
||
|
||
var warnNonPresent = function (target, key) {
|
||
warn(
|
||
"Property or method \"" + key + "\" is not defined on the instance but " +
|
||
'referenced during render. Make sure that this property is reactive, ' +
|
||
'either in the data option, or for class-based components, by ' +
|
||
'initializing the property. ' +
|
||
'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
|
||
target
|
||
);
|
||
};
|
||
|
||
var hasProxy =
|
||
typeof Proxy !== 'undefined' && isNative(Proxy);
|
||
|
||
if (hasProxy) {
|
||
var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
|
||
config.keyCodes = new Proxy(config.keyCodes, {
|
||
set: function set (target, key, value) {
|
||
if (isBuiltInModifier(key)) {
|
||
warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
|
||
return false
|
||
} else {
|
||
target[key] = value;
|
||
return true
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
var hasHandler = {
|
||
has: function has (target, key) {
|
||
var has = key in target;
|
||
var isAllowed = allowedGlobals(key) || key.charAt(0) === '_';
|
||
if (!has && !isAllowed) {
|
||
warnNonPresent(target, key);
|
||
}
|
||
return has || !isAllowed
|
||
}
|
||
};
|
||
|
||
var getHandler = {
|
||
get: function get (target, key) {
|
||
if (typeof key === 'string' && !(key in target)) {
|
||
warnNonPresent(target, key);
|
||
}
|
||
return target[key]
|
||
}
|
||
};
|
||
|
||
initProxy = function initProxy (vm) {
|
||
if (hasProxy) {
|
||
// determine which proxy handler to use
|
||
var options = vm.$options;
|
||
var handlers = options.render && options.render._withStripped
|
||
? getHandler
|
||
: hasHandler;
|
||
vm._renderProxy = new Proxy(vm, handlers);
|
||
} else {
|
||
vm._renderProxy = vm;
|
||
}
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
var seenObjects = new _Set();
|
||
|
||
/**
|
||
* Recursively traverse an object to evoke all converted
|
||
* getters, so that every nested property inside the object
|
||
* is collected as a "deep" dependency.
|
||
*/
|
||
function traverse (val) {
|
||
_traverse(val, seenObjects);
|
||
seenObjects.clear();
|
||
}
|
||
|
||
function _traverse (val, seen) {
|
||
var i, keys;
|
||
var isA = Array.isArray(val);
|
||
if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {
|
||
return
|
||
}
|
||
if (val.__ob__) {
|
||
var depId = val.__ob__.dep.id;
|
||
if (seen.has(depId)) {
|
||
return
|
||
}
|
||
seen.add(depId);
|
||
}
|
||
if (isA) {
|
||
i = val.length;
|
||
while (i--) { _traverse(val[i], seen); }
|
||
} else {
|
||
keys = Object.keys(val);
|
||
i = keys.length;
|
||
while (i--) { _traverse(val[keys[i]], seen); }
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var normalizeEvent = cached(function (name) {
|
||
var passive = name.charAt(0) === '&';
|
||
name = passive ? name.slice(1) : name;
|
||
var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
|
||
name = once$$1 ? name.slice(1) : name;
|
||
var capture = name.charAt(0) === '!';
|
||
name = capture ? name.slice(1) : name;
|
||
return {
|
||
name: name,
|
||
once: once$$1,
|
||
capture: capture,
|
||
passive: passive
|
||
}
|
||
});
|
||
|
||
function createFnInvoker (fns) {
|
||
function invoker () {
|
||
var arguments$1 = arguments;
|
||
|
||
var fns = invoker.fns;
|
||
if (Array.isArray(fns)) {
|
||
var cloned = fns.slice();
|
||
for (var i = 0; i < cloned.length; i++) {
|
||
cloned[i].apply(null, arguments$1);
|
||
}
|
||
} else {
|
||
// return handler return value for single handlers
|
||
return fns.apply(null, arguments)
|
||
}
|
||
}
|
||
invoker.fns = fns;
|
||
return invoker
|
||
}
|
||
|
||
function updateListeners (
|
||
on,
|
||
oldOn,
|
||
add,
|
||
remove$$1,
|
||
vm
|
||
) {
|
||
var name, def, cur, old, event;
|
||
for (name in on) {
|
||
def = cur = on[name];
|
||
old = oldOn[name];
|
||
event = normalizeEvent(name);
|
||
/* istanbul ignore if */
|
||
if (isUndef(cur)) {
|
||
"development" !== 'production' && warn(
|
||
"Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
|
||
vm
|
||
);
|
||
} else if (isUndef(old)) {
|
||
if (isUndef(cur.fns)) {
|
||
cur = on[name] = createFnInvoker(cur);
|
||
}
|
||
add(event.name, cur, event.once, event.capture, event.passive, event.params);
|
||
} else if (cur !== old) {
|
||
old.fns = cur;
|
||
on[name] = old;
|
||
}
|
||
}
|
||
for (name in oldOn) {
|
||
if (isUndef(on[name])) {
|
||
event = normalizeEvent(name);
|
||
remove$$1(event.name, oldOn[name], event.capture);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function mergeVNodeHook (def, hookKey, hook) {
|
||
if (def instanceof VNode) {
|
||
def = def.data.hook || (def.data.hook = {});
|
||
}
|
||
var invoker;
|
||
var oldHook = def[hookKey];
|
||
|
||
function wrappedHook () {
|
||
hook.apply(this, arguments);
|
||
// important: remove merged hook to ensure it's called only once
|
||
// and prevent memory leak
|
||
remove(invoker.fns, wrappedHook);
|
||
}
|
||
|
||
if (isUndef(oldHook)) {
|
||
// no existing hook
|
||
invoker = createFnInvoker([wrappedHook]);
|
||
} else {
|
||
/* istanbul ignore if */
|
||
if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
|
||
// already a merged invoker
|
||
invoker = oldHook;
|
||
invoker.fns.push(wrappedHook);
|
||
} else {
|
||
// existing plain hook
|
||
invoker = createFnInvoker([oldHook, wrappedHook]);
|
||
}
|
||
}
|
||
|
||
invoker.merged = true;
|
||
def[hookKey] = invoker;
|
||
}
|
||
|
||
/* */
|
||
|
||
function extractPropsFromVNodeData (
|
||
data,
|
||
Ctor,
|
||
tag
|
||
) {
|
||
// we are only extracting raw values here.
|
||
// validation and default values are handled in the child
|
||
// component itself.
|
||
var propOptions = Ctor.options.props;
|
||
if (isUndef(propOptions)) {
|
||
return
|
||
}
|
||
var res = {};
|
||
var attrs = data.attrs;
|
||
var props = data.props;
|
||
if (isDef(attrs) || isDef(props)) {
|
||
for (var key in propOptions) {
|
||
var altKey = hyphenate(key);
|
||
if (true) {
|
||
var keyInLowerCase = key.toLowerCase();
|
||
if (
|
||
key !== keyInLowerCase &&
|
||
attrs && hasOwn(attrs, keyInLowerCase)
|
||
) {
|
||
tip(
|
||
"Prop \"" + keyInLowerCase + "\" is passed to component " +
|
||
(formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
|
||
" \"" + key + "\". " +
|
||
"Note that HTML attributes are case-insensitive and camelCased " +
|
||
"props need to use their kebab-case equivalents when using in-DOM " +
|
||
"templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
|
||
);
|
||
}
|
||
}
|
||
checkProp(res, props, key, altKey, true) ||
|
||
checkProp(res, attrs, key, altKey, false);
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
function checkProp (
|
||
res,
|
||
hash,
|
||
key,
|
||
altKey,
|
||
preserve
|
||
) {
|
||
if (isDef(hash)) {
|
||
if (hasOwn(hash, key)) {
|
||
res[key] = hash[key];
|
||
if (!preserve) {
|
||
delete hash[key];
|
||
}
|
||
return true
|
||
} else if (hasOwn(hash, altKey)) {
|
||
res[key] = hash[altKey];
|
||
if (!preserve) {
|
||
delete hash[altKey];
|
||
}
|
||
return true
|
||
}
|
||
}
|
||
return false
|
||
}
|
||
|
||
/* */
|
||
|
||
// The template compiler attempts to minimize the need for normalization by
|
||
// statically analyzing the template at compile time.
|
||
//
|
||
// For plain HTML markup, normalization can be completely skipped because the
|
||
// generated render function is guaranteed to return Array<VNode>. There are
|
||
// two cases where extra normalization is needed:
|
||
|
||
// 1. When the children contains components - because a functional component
|
||
// may return an Array instead of a single root. In this case, just a simple
|
||
// normalization is needed - if any child is an Array, we flatten the whole
|
||
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
|
||
// because functional components already normalize their own children.
|
||
function simpleNormalizeChildren (children) {
|
||
for (var i = 0; i < children.length; i++) {
|
||
if (Array.isArray(children[i])) {
|
||
return Array.prototype.concat.apply([], children)
|
||
}
|
||
}
|
||
return children
|
||
}
|
||
|
||
// 2. When the children contains constructs that always generated nested Arrays,
|
||
// e.g. <template>, <slot>, v-for, or when the children is provided by user
|
||
// with hand-written render functions / JSX. In such cases a full normalization
|
||
// is needed to cater to all possible types of children values.
|
||
function normalizeChildren (children) {
|
||
return isPrimitive(children)
|
||
? [createTextVNode(children)]
|
||
: Array.isArray(children)
|
||
? normalizeArrayChildren(children)
|
||
: undefined
|
||
}
|
||
|
||
function isTextNode (node) {
|
||
return isDef(node) && isDef(node.text) && isFalse(node.isComment)
|
||
}
|
||
|
||
function normalizeArrayChildren (children, nestedIndex) {
|
||
var res = [];
|
||
var i, c, lastIndex, last;
|
||
for (i = 0; i < children.length; i++) {
|
||
c = children[i];
|
||
if (isUndef(c) || typeof c === 'boolean') { continue }
|
||
lastIndex = res.length - 1;
|
||
last = res[lastIndex];
|
||
// nested
|
||
if (Array.isArray(c)) {
|
||
if (c.length > 0) {
|
||
c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i));
|
||
// merge adjacent text nodes
|
||
if (isTextNode(c[0]) && isTextNode(last)) {
|
||
res[lastIndex] = createTextVNode(last.text + (c[0]).text);
|
||
c.shift();
|
||
}
|
||
res.push.apply(res, c);
|
||
}
|
||
} else if (isPrimitive(c)) {
|
||
if (isTextNode(last)) {
|
||
// merge adjacent text nodes
|
||
// this is necessary for SSR hydration because text nodes are
|
||
// essentially merged when rendered to HTML strings
|
||
res[lastIndex] = createTextVNode(last.text + c);
|
||
} else if (c !== '') {
|
||
// convert primitive to vnode
|
||
res.push(createTextVNode(c));
|
||
}
|
||
} else {
|
||
if (isTextNode(c) && isTextNode(last)) {
|
||
// merge adjacent text nodes
|
||
res[lastIndex] = createTextVNode(last.text + c.text);
|
||
} else {
|
||
// default key for nested array children (likely generated by v-for)
|
||
if (isTrue(children._isVList) &&
|
||
isDef(c.tag) &&
|
||
isUndef(c.key) &&
|
||
isDef(nestedIndex)) {
|
||
c.key = "__vlist" + nestedIndex + "_" + i + "__";
|
||
}
|
||
res.push(c);
|
||
}
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
/* */
|
||
|
||
function ensureCtor (comp, base) {
|
||
if (
|
||
comp.__esModule ||
|
||
(hasSymbol && comp[Symbol.toStringTag] === 'Module')
|
||
) {
|
||
comp = comp.default;
|
||
}
|
||
return isObject(comp)
|
||
? base.extend(comp)
|
||
: comp
|
||
}
|
||
|
||
function createAsyncPlaceholder (
|
||
factory,
|
||
data,
|
||
context,
|
||
children,
|
||
tag
|
||
) {
|
||
var node = createEmptyVNode();
|
||
node.asyncFactory = factory;
|
||
node.asyncMeta = { data: data, context: context, children: children, tag: tag };
|
||
return node
|
||
}
|
||
|
||
function resolveAsyncComponent (
|
||
factory,
|
||
baseCtor,
|
||
context
|
||
) {
|
||
if (isTrue(factory.error) && isDef(factory.errorComp)) {
|
||
return factory.errorComp
|
||
}
|
||
|
||
if (isDef(factory.resolved)) {
|
||
return factory.resolved
|
||
}
|
||
|
||
if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
|
||
return factory.loadingComp
|
||
}
|
||
|
||
if (isDef(factory.contexts)) {
|
||
// already pending
|
||
factory.contexts.push(context);
|
||
} else {
|
||
var contexts = factory.contexts = [context];
|
||
var sync = true;
|
||
|
||
var forceRender = function () {
|
||
for (var i = 0, l = contexts.length; i < l; i++) {
|
||
contexts[i].$forceUpdate();
|
||
}
|
||
};
|
||
|
||
var resolve = once(function (res) {
|
||
// cache resolved
|
||
factory.resolved = ensureCtor(res, baseCtor);
|
||
// invoke callbacks only if this is not a synchronous resolve
|
||
// (async resolves are shimmed as synchronous during SSR)
|
||
if (!sync) {
|
||
forceRender();
|
||
}
|
||
});
|
||
|
||
var reject = once(function (reason) {
|
||
"development" !== 'production' && warn(
|
||
"Failed to resolve async component: " + (String(factory)) +
|
||
(reason ? ("\nReason: " + reason) : '')
|
||
);
|
||
if (isDef(factory.errorComp)) {
|
||
factory.error = true;
|
||
forceRender();
|
||
}
|
||
});
|
||
|
||
var res = factory(resolve, reject);
|
||
|
||
if (isObject(res)) {
|
||
if (typeof res.then === 'function') {
|
||
// () => Promise
|
||
if (isUndef(factory.resolved)) {
|
||
res.then(resolve, reject);
|
||
}
|
||
} else if (isDef(res.component) && typeof res.component.then === 'function') {
|
||
res.component.then(resolve, reject);
|
||
|
||
if (isDef(res.error)) {
|
||
factory.errorComp = ensureCtor(res.error, baseCtor);
|
||
}
|
||
|
||
if (isDef(res.loading)) {
|
||
factory.loadingComp = ensureCtor(res.loading, baseCtor);
|
||
if (res.delay === 0) {
|
||
factory.loading = true;
|
||
} else {
|
||
setTimeout(function () {
|
||
if (isUndef(factory.resolved) && isUndef(factory.error)) {
|
||
factory.loading = true;
|
||
forceRender();
|
||
}
|
||
}, res.delay || 200);
|
||
}
|
||
}
|
||
|
||
if (isDef(res.timeout)) {
|
||
setTimeout(function () {
|
||
if (isUndef(factory.resolved)) {
|
||
reject(
|
||
true
|
||
? ("timeout (" + (res.timeout) + "ms)")
|
||
: null
|
||
);
|
||
}
|
||
}, res.timeout);
|
||
}
|
||
}
|
||
}
|
||
|
||
sync = false;
|
||
// return in case resolved synchronously
|
||
return factory.loading
|
||
? factory.loadingComp
|
||
: factory.resolved
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function isAsyncPlaceholder (node) {
|
||
return node.isComment && node.asyncFactory
|
||
}
|
||
|
||
/* */
|
||
|
||
function getFirstComponentChild (children) {
|
||
if (Array.isArray(children)) {
|
||
for (var i = 0; i < children.length; i++) {
|
||
var c = children[i];
|
||
if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
|
||
return c
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/* */
|
||
|
||
function initEvents (vm) {
|
||
vm._events = Object.create(null);
|
||
vm._hasHookEvent = false;
|
||
// init parent attached events
|
||
var listeners = vm.$options._parentListeners;
|
||
if (listeners) {
|
||
updateComponentListeners(vm, listeners);
|
||
}
|
||
}
|
||
|
||
var target;
|
||
|
||
function add (event, fn, once) {
|
||
if (once) {
|
||
target.$once(event, fn);
|
||
} else {
|
||
target.$on(event, fn);
|
||
}
|
||
}
|
||
|
||
function remove$1 (event, fn) {
|
||
target.$off(event, fn);
|
||
}
|
||
|
||
function updateComponentListeners (
|
||
vm,
|
||
listeners,
|
||
oldListeners
|
||
) {
|
||
target = vm;
|
||
updateListeners(listeners, oldListeners || {}, add, remove$1, vm);
|
||
target = undefined;
|
||
}
|
||
|
||
function eventsMixin (Vue) {
|
||
var hookRE = /^hook:/;
|
||
Vue.prototype.$on = function (event, fn) {
|
||
var this$1 = this;
|
||
|
||
var vm = this;
|
||
if (Array.isArray(event)) {
|
||
for (var i = 0, l = event.length; i < l; i++) {
|
||
this$1.$on(event[i], fn);
|
||
}
|
||
} else {
|
||
(vm._events[event] || (vm._events[event] = [])).push(fn);
|
||
// optimize hook:event cost by using a boolean flag marked at registration
|
||
// instead of a hash lookup
|
||
if (hookRE.test(event)) {
|
||
vm._hasHookEvent = true;
|
||
}
|
||
}
|
||
return vm
|
||
};
|
||
|
||
Vue.prototype.$once = function (event, fn) {
|
||
var vm = this;
|
||
function on () {
|
||
vm.$off(event, on);
|
||
fn.apply(vm, arguments);
|
||
}
|
||
on.fn = fn;
|
||
vm.$on(event, on);
|
||
return vm
|
||
};
|
||
|
||
Vue.prototype.$off = function (event, fn) {
|
||
var this$1 = this;
|
||
|
||
var vm = this;
|
||
// all
|
||
if (!arguments.length) {
|
||
vm._events = Object.create(null);
|
||
return vm
|
||
}
|
||
// array of events
|
||
if (Array.isArray(event)) {
|
||
for (var i = 0, l = event.length; i < l; i++) {
|
||
this$1.$off(event[i], fn);
|
||
}
|
||
return vm
|
||
}
|
||
// specific event
|
||
var cbs = vm._events[event];
|
||
if (!cbs) {
|
||
return vm
|
||
}
|
||
if (!fn) {
|
||
vm._events[event] = null;
|
||
return vm
|
||
}
|
||
if (fn) {
|
||
// specific handler
|
||
var cb;
|
||
var i$1 = cbs.length;
|
||
while (i$1--) {
|
||
cb = cbs[i$1];
|
||
if (cb === fn || cb.fn === fn) {
|
||
cbs.splice(i$1, 1);
|
||
break
|
||
}
|
||
}
|
||
}
|
||
return vm
|
||
};
|
||
|
||
Vue.prototype.$emit = function (event) {
|
||
var vm = this;
|
||
if (true) {
|
||
var lowerCaseEvent = event.toLowerCase();
|
||
if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
|
||
tip(
|
||
"Event \"" + lowerCaseEvent + "\" is emitted in component " +
|
||
(formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
|
||
"Note that HTML attributes are case-insensitive and you cannot use " +
|
||
"v-on to listen to camelCase events when using in-DOM templates. " +
|
||
"You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
|
||
);
|
||
}
|
||
}
|
||
var cbs = vm._events[event];
|
||
if (cbs) {
|
||
cbs = cbs.length > 1 ? toArray(cbs) : cbs;
|
||
var args = toArray(arguments, 1);
|
||
for (var i = 0, l = cbs.length; i < l; i++) {
|
||
try {
|
||
cbs[i].apply(vm, args);
|
||
} catch (e) {
|
||
handleError(e, vm, ("event handler for \"" + event + "\""));
|
||
}
|
||
}
|
||
}
|
||
return vm
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
|
||
|
||
/**
|
||
* Runtime helper for resolving raw children VNodes into a slot object.
|
||
*/
|
||
function resolveSlots (
|
||
children,
|
||
context
|
||
) {
|
||
var slots = {};
|
||
if (!children) {
|
||
return slots
|
||
}
|
||
for (var i = 0, l = children.length; i < l; i++) {
|
||
var child = children[i];
|
||
var data = child.data;
|
||
// remove slot attribute if the node is resolved as a Vue slot node
|
||
if (data && data.attrs && data.attrs.slot) {
|
||
delete data.attrs.slot;
|
||
}
|
||
// named slots should only be respected if the vnode was rendered in the
|
||
// same context.
|
||
if ((child.context === context || child.fnContext === context) &&
|
||
data && data.slot != null
|
||
) {
|
||
var name = data.slot;
|
||
var slot = (slots[name] || (slots[name] = []));
|
||
if (child.tag === 'template') {
|
||
slot.push.apply(slot, child.children || []);
|
||
} else {
|
||
slot.push(child);
|
||
}
|
||
} else {
|
||
(slots.default || (slots.default = [])).push(child);
|
||
}
|
||
}
|
||
// ignore slots that contains only whitespace
|
||
for (var name$1 in slots) {
|
||
if (slots[name$1].every(isWhitespace)) {
|
||
delete slots[name$1];
|
||
}
|
||
}
|
||
return slots
|
||
}
|
||
|
||
function isWhitespace (node) {
|
||
return (node.isComment && !node.asyncFactory) || node.text === ' '
|
||
}
|
||
|
||
function resolveScopedSlots (
|
||
fns, // see flow/vnode
|
||
res
|
||
) {
|
||
res = res || {};
|
||
for (var i = 0; i < fns.length; i++) {
|
||
if (Array.isArray(fns[i])) {
|
||
resolveScopedSlots(fns[i], res);
|
||
} else {
|
||
res[fns[i].key] = fns[i].fn;
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
/* */
|
||
|
||
var activeInstance = null;
|
||
var isUpdatingChildComponent = false;
|
||
|
||
function initLifecycle (vm) {
|
||
var options = vm.$options;
|
||
|
||
// locate first non-abstract parent
|
||
var parent = options.parent;
|
||
if (parent && !options.abstract) {
|
||
while (parent.$options.abstract && parent.$parent) {
|
||
parent = parent.$parent;
|
||
}
|
||
parent.$children.push(vm);
|
||
}
|
||
|
||
vm.$parent = parent;
|
||
vm.$root = parent ? parent.$root : vm;
|
||
|
||
vm.$children = [];
|
||
vm.$refs = {};
|
||
|
||
vm._watcher = null;
|
||
vm._inactive = null;
|
||
vm._directInactive = false;
|
||
vm._isMounted = false;
|
||
vm._isDestroyed = false;
|
||
vm._isBeingDestroyed = false;
|
||
}
|
||
|
||
function lifecycleMixin (Vue) {
|
||
Vue.prototype._update = function (vnode, hydrating) {
|
||
var vm = this;
|
||
if (vm._isMounted) {
|
||
callHook(vm, 'beforeUpdate');
|
||
}
|
||
var prevEl = vm.$el;
|
||
var prevVnode = vm._vnode;
|
||
var prevActiveInstance = activeInstance;
|
||
activeInstance = vm;
|
||
vm._vnode = vnode;
|
||
// Vue.prototype.__patch__ is injected in entry points
|
||
// based on the rendering backend used.
|
||
if (!prevVnode) {
|
||
// initial render
|
||
vm.$el = vm.__patch__(
|
||
vm.$el, vnode, hydrating, false /* removeOnly */,
|
||
vm.$options._parentElm,
|
||
vm.$options._refElm
|
||
);
|
||
// no need for the ref nodes after initial patch
|
||
// this prevents keeping a detached DOM tree in memory (#5851)
|
||
vm.$options._parentElm = vm.$options._refElm = null;
|
||
} else {
|
||
// updates
|
||
vm.$el = vm.__patch__(prevVnode, vnode);
|
||
}
|
||
activeInstance = prevActiveInstance;
|
||
// update __vue__ reference
|
||
if (prevEl) {
|
||
prevEl.__vue__ = null;
|
||
}
|
||
if (vm.$el) {
|
||
vm.$el.__vue__ = vm;
|
||
}
|
||
// if parent is an HOC, update its $el as well
|
||
if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
|
||
vm.$parent.$el = vm.$el;
|
||
}
|
||
// updated hook is called by the scheduler to ensure that children are
|
||
// updated in a parent's updated hook.
|
||
};
|
||
|
||
Vue.prototype.$forceUpdate = function () {
|
||
var vm = this;
|
||
if (vm._watcher) {
|
||
vm._watcher.update();
|
||
}
|
||
};
|
||
|
||
Vue.prototype.$destroy = function () {
|
||
var vm = this;
|
||
if (vm._isBeingDestroyed) {
|
||
return
|
||
}
|
||
callHook(vm, 'beforeDestroy');
|
||
vm._isBeingDestroyed = true;
|
||
// remove self from parent
|
||
var parent = vm.$parent;
|
||
if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
|
||
remove(parent.$children, vm);
|
||
}
|
||
// teardown watchers
|
||
if (vm._watcher) {
|
||
vm._watcher.teardown();
|
||
}
|
||
var i = vm._watchers.length;
|
||
while (i--) {
|
||
vm._watchers[i].teardown();
|
||
}
|
||
// remove reference from data ob
|
||
// frozen object may not have observer.
|
||
if (vm._data.__ob__) {
|
||
vm._data.__ob__.vmCount--;
|
||
}
|
||
// call the last hook...
|
||
vm._isDestroyed = true;
|
||
// invoke destroy hooks on current rendered tree
|
||
vm.__patch__(vm._vnode, null);
|
||
// fire destroyed hook
|
||
callHook(vm, 'destroyed');
|
||
// turn off all instance listeners.
|
||
vm.$off();
|
||
// remove __vue__ reference
|
||
if (vm.$el) {
|
||
vm.$el.__vue__ = null;
|
||
}
|
||
// release circular reference (#6759)
|
||
if (vm.$vnode) {
|
||
vm.$vnode.parent = null;
|
||
}
|
||
};
|
||
}
|
||
|
||
function mountComponent (
|
||
vm,
|
||
el,
|
||
hydrating
|
||
) {
|
||
vm.$el = el;
|
||
if (!vm.$options.render) {
|
||
vm.$options.render = createEmptyVNode;
|
||
if (true) {
|
||
/* istanbul ignore if */
|
||
if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
|
||
vm.$options.el || el) {
|
||
warn(
|
||
'You are using the runtime-only build of Vue where the template ' +
|
||
'compiler is not available. Either pre-compile the templates into ' +
|
||
'render functions, or use the compiler-included build.',
|
||
vm
|
||
);
|
||
} else {
|
||
warn(
|
||
'Failed to mount component: template or render function not defined.',
|
||
vm
|
||
);
|
||
}
|
||
}
|
||
}
|
||
callHook(vm, 'beforeMount');
|
||
|
||
var updateComponent;
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' && config.performance && mark) {
|
||
updateComponent = function () {
|
||
var name = vm._name;
|
||
var id = vm._uid;
|
||
var startTag = "vue-perf-start:" + id;
|
||
var endTag = "vue-perf-end:" + id;
|
||
|
||
mark(startTag);
|
||
var vnode = vm._render();
|
||
mark(endTag);
|
||
measure(("vue " + name + " render"), startTag, endTag);
|
||
|
||
mark(startTag);
|
||
vm._update(vnode, hydrating);
|
||
mark(endTag);
|
||
measure(("vue " + name + " patch"), startTag, endTag);
|
||
};
|
||
} else {
|
||
updateComponent = function () {
|
||
vm._update(vm._render(), hydrating);
|
||
};
|
||
}
|
||
|
||
// we set this to vm._watcher inside the watcher's constructor
|
||
// since the watcher's initial patch may call $forceUpdate (e.g. inside child
|
||
// component's mounted hook), which relies on vm._watcher being already defined
|
||
new Watcher(vm, updateComponent, noop, null, true /* isRenderWatcher */);
|
||
hydrating = false;
|
||
|
||
// manually mounted instance, call mounted on self
|
||
// mounted is called for render-created child components in its inserted hook
|
||
if (vm.$vnode == null) {
|
||
vm._isMounted = true;
|
||
callHook(vm, 'mounted');
|
||
}
|
||
return vm
|
||
}
|
||
|
||
function updateChildComponent (
|
||
vm,
|
||
propsData,
|
||
listeners,
|
||
parentVnode,
|
||
renderChildren
|
||
) {
|
||
if (true) {
|
||
isUpdatingChildComponent = true;
|
||
}
|
||
|
||
// determine whether component has slot children
|
||
// we need to do this before overwriting $options._renderChildren
|
||
var hasChildren = !!(
|
||
renderChildren || // has new static slots
|
||
vm.$options._renderChildren || // has old static slots
|
||
parentVnode.data.scopedSlots || // has new scoped slots
|
||
vm.$scopedSlots !== emptyObject // has old scoped slots
|
||
);
|
||
|
||
vm.$options._parentVnode = parentVnode;
|
||
vm.$vnode = parentVnode; // update vm's placeholder node without re-render
|
||
|
||
if (vm._vnode) { // update child tree's parent
|
||
vm._vnode.parent = parentVnode;
|
||
}
|
||
vm.$options._renderChildren = renderChildren;
|
||
|
||
// update $attrs and $listeners hash
|
||
// these are also reactive so they may trigger child update if the child
|
||
// used them during render
|
||
vm.$attrs = parentVnode.data.attrs || emptyObject;
|
||
vm.$listeners = listeners || emptyObject;
|
||
|
||
// update props
|
||
if (propsData && vm.$options.props) {
|
||
toggleObserving(false);
|
||
var props = vm._props;
|
||
var propKeys = vm.$options._propKeys || [];
|
||
for (var i = 0; i < propKeys.length; i++) {
|
||
var key = propKeys[i];
|
||
var propOptions = vm.$options.props; // wtf flow?
|
||
props[key] = validateProp(key, propOptions, propsData, vm);
|
||
}
|
||
toggleObserving(true);
|
||
// keep a copy of raw propsData
|
||
vm.$options.propsData = propsData;
|
||
}
|
||
|
||
// update listeners
|
||
listeners = listeners || emptyObject;
|
||
var oldListeners = vm.$options._parentListeners;
|
||
vm.$options._parentListeners = listeners;
|
||
updateComponentListeners(vm, listeners, oldListeners);
|
||
|
||
// resolve slots + force update if has children
|
||
if (hasChildren) {
|
||
vm.$slots = resolveSlots(renderChildren, parentVnode.context);
|
||
vm.$forceUpdate();
|
||
}
|
||
|
||
if (true) {
|
||
isUpdatingChildComponent = false;
|
||
}
|
||
}
|
||
|
||
function isInInactiveTree (vm) {
|
||
while (vm && (vm = vm.$parent)) {
|
||
if (vm._inactive) { return true }
|
||
}
|
||
return false
|
||
}
|
||
|
||
function activateChildComponent (vm, direct) {
|
||
if (direct) {
|
||
vm._directInactive = false;
|
||
if (isInInactiveTree(vm)) {
|
||
return
|
||
}
|
||
} else if (vm._directInactive) {
|
||
return
|
||
}
|
||
if (vm._inactive || vm._inactive === null) {
|
||
vm._inactive = false;
|
||
for (var i = 0; i < vm.$children.length; i++) {
|
||
activateChildComponent(vm.$children[i]);
|
||
}
|
||
callHook(vm, 'activated');
|
||
}
|
||
}
|
||
|
||
function deactivateChildComponent (vm, direct) {
|
||
if (direct) {
|
||
vm._directInactive = true;
|
||
if (isInInactiveTree(vm)) {
|
||
return
|
||
}
|
||
}
|
||
if (!vm._inactive) {
|
||
vm._inactive = true;
|
||
for (var i = 0; i < vm.$children.length; i++) {
|
||
deactivateChildComponent(vm.$children[i]);
|
||
}
|
||
callHook(vm, 'deactivated');
|
||
}
|
||
}
|
||
|
||
function callHook (vm, hook) {
|
||
// #7573 disable dep collection when invoking lifecycle hooks
|
||
pushTarget();
|
||
var handlers = vm.$options[hook];
|
||
if (handlers) {
|
||
for (var i = 0, j = handlers.length; i < j; i++) {
|
||
try {
|
||
handlers[i].call(vm);
|
||
} catch (e) {
|
||
handleError(e, vm, (hook + " hook"));
|
||
}
|
||
}
|
||
}
|
||
if (vm._hasHookEvent) {
|
||
vm.$emit('hook:' + hook);
|
||
}
|
||
popTarget();
|
||
}
|
||
|
||
/* */
|
||
|
||
|
||
var MAX_UPDATE_COUNT = 100;
|
||
|
||
var queue = [];
|
||
var activatedChildren = [];
|
||
var has = {};
|
||
var circular = {};
|
||
var waiting = false;
|
||
var flushing = false;
|
||
var index = 0;
|
||
|
||
/**
|
||
* Reset the scheduler's state.
|
||
*/
|
||
function resetSchedulerState () {
|
||
index = queue.length = activatedChildren.length = 0;
|
||
has = {};
|
||
if (true) {
|
||
circular = {};
|
||
}
|
||
waiting = flushing = false;
|
||
}
|
||
|
||
/**
|
||
* Flush both queues and run the watchers.
|
||
*/
|
||
function flushSchedulerQueue () {
|
||
flushing = true;
|
||
var watcher, id;
|
||
|
||
// Sort queue before flush.
|
||
// This ensures that:
|
||
// 1. Components are updated from parent to child. (because parent is always
|
||
// created before the child)
|
||
// 2. A component's user watchers are run before its render watcher (because
|
||
// user watchers are created before the render watcher)
|
||
// 3. If a component is destroyed during a parent component's watcher run,
|
||
// its watchers can be skipped.
|
||
queue.sort(function (a, b) { return a.id - b.id; });
|
||
|
||
// do not cache length because more watchers might be pushed
|
||
// as we run existing watchers
|
||
for (index = 0; index < queue.length; index++) {
|
||
watcher = queue[index];
|
||
id = watcher.id;
|
||
has[id] = null;
|
||
watcher.run();
|
||
// in dev build, check and stop circular updates.
|
||
if ("development" !== 'production' && has[id] != null) {
|
||
circular[id] = (circular[id] || 0) + 1;
|
||
if (circular[id] > MAX_UPDATE_COUNT) {
|
||
warn(
|
||
'You may have an infinite update loop ' + (
|
||
watcher.user
|
||
? ("in watcher with expression \"" + (watcher.expression) + "\"")
|
||
: "in a component render function."
|
||
),
|
||
watcher.vm
|
||
);
|
||
break
|
||
}
|
||
}
|
||
}
|
||
|
||
// keep copies of post queues before resetting state
|
||
var activatedQueue = activatedChildren.slice();
|
||
var updatedQueue = queue.slice();
|
||
|
||
resetSchedulerState();
|
||
|
||
// call component updated and activated hooks
|
||
callActivatedHooks(activatedQueue);
|
||
callUpdatedHooks(updatedQueue);
|
||
|
||
// devtool hook
|
||
/* istanbul ignore if */
|
||
if (devtools && config.devtools) {
|
||
devtools.emit('flush');
|
||
}
|
||
}
|
||
|
||
function callUpdatedHooks (queue) {
|
||
var i = queue.length;
|
||
while (i--) {
|
||
var watcher = queue[i];
|
||
var vm = watcher.vm;
|
||
if (vm._watcher === watcher && vm._isMounted) {
|
||
callHook(vm, 'updated');
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Queue a kept-alive component that was activated during patch.
|
||
* The queue will be processed after the entire tree has been patched.
|
||
*/
|
||
function queueActivatedComponent (vm) {
|
||
// setting _inactive to false here so that a render function can
|
||
// rely on checking whether it's in an inactive tree (e.g. router-view)
|
||
vm._inactive = false;
|
||
activatedChildren.push(vm);
|
||
}
|
||
|
||
function callActivatedHooks (queue) {
|
||
for (var i = 0; i < queue.length; i++) {
|
||
queue[i]._inactive = true;
|
||
activateChildComponent(queue[i], true /* true */);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Push a watcher into the watcher queue.
|
||
* Jobs with duplicate IDs will be skipped unless it's
|
||
* pushed when the queue is being flushed.
|
||
*/
|
||
function queueWatcher (watcher) {
|
||
var id = watcher.id;
|
||
if (has[id] == null) {
|
||
has[id] = true;
|
||
if (!flushing) {
|
||
queue.push(watcher);
|
||
} else {
|
||
// if already flushing, splice the watcher based on its id
|
||
// if already past its id, it will be run next immediately.
|
||
var i = queue.length - 1;
|
||
while (i > index && queue[i].id > watcher.id) {
|
||
i--;
|
||
}
|
||
queue.splice(i + 1, 0, watcher);
|
||
}
|
||
// queue the flush
|
||
if (!waiting) {
|
||
waiting = true;
|
||
nextTick(flushSchedulerQueue);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var uid$1 = 0;
|
||
|
||
/**
|
||
* A watcher parses an expression, collects dependencies,
|
||
* and fires callback when the expression value changes.
|
||
* This is used for both the $watch() api and directives.
|
||
*/
|
||
var Watcher = function Watcher (
|
||
vm,
|
||
expOrFn,
|
||
cb,
|
||
options,
|
||
isRenderWatcher
|
||
) {
|
||
this.vm = vm;
|
||
if (isRenderWatcher) {
|
||
vm._watcher = this;
|
||
}
|
||
vm._watchers.push(this);
|
||
// options
|
||
if (options) {
|
||
this.deep = !!options.deep;
|
||
this.user = !!options.user;
|
||
this.lazy = !!options.lazy;
|
||
this.sync = !!options.sync;
|
||
} else {
|
||
this.deep = this.user = this.lazy = this.sync = false;
|
||
}
|
||
this.cb = cb;
|
||
this.id = ++uid$1; // uid for batching
|
||
this.active = true;
|
||
this.dirty = this.lazy; // for lazy watchers
|
||
this.deps = [];
|
||
this.newDeps = [];
|
||
this.depIds = new _Set();
|
||
this.newDepIds = new _Set();
|
||
this.expression = true
|
||
? expOrFn.toString()
|
||
: '';
|
||
// parse expression for getter
|
||
if (typeof expOrFn === 'function') {
|
||
this.getter = expOrFn;
|
||
} else {
|
||
this.getter = parsePath(expOrFn);
|
||
if (!this.getter) {
|
||
this.getter = function () {};
|
||
"development" !== 'production' && warn(
|
||
"Failed watching path: \"" + expOrFn + "\" " +
|
||
'Watcher only accepts simple dot-delimited paths. ' +
|
||
'For full control, use a function instead.',
|
||
vm
|
||
);
|
||
}
|
||
}
|
||
this.value = this.lazy
|
||
? undefined
|
||
: this.get();
|
||
};
|
||
|
||
/**
|
||
* Evaluate the getter, and re-collect dependencies.
|
||
*/
|
||
Watcher.prototype.get = function get () {
|
||
pushTarget(this);
|
||
var value;
|
||
var vm = this.vm;
|
||
try {
|
||
value = this.getter.call(vm, vm);
|
||
} catch (e) {
|
||
if (this.user) {
|
||
handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
|
||
} else {
|
||
throw e
|
||
}
|
||
} finally {
|
||
// "touch" every property so they are all tracked as
|
||
// dependencies for deep watching
|
||
if (this.deep) {
|
||
traverse(value);
|
||
}
|
||
popTarget();
|
||
this.cleanupDeps();
|
||
}
|
||
return value
|
||
};
|
||
|
||
/**
|
||
* Add a dependency to this directive.
|
||
*/
|
||
Watcher.prototype.addDep = function addDep (dep) {
|
||
var id = dep.id;
|
||
if (!this.newDepIds.has(id)) {
|
||
this.newDepIds.add(id);
|
||
this.newDeps.push(dep);
|
||
if (!this.depIds.has(id)) {
|
||
dep.addSub(this);
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Clean up for dependency collection.
|
||
*/
|
||
Watcher.prototype.cleanupDeps = function cleanupDeps () {
|
||
var this$1 = this;
|
||
|
||
var i = this.deps.length;
|
||
while (i--) {
|
||
var dep = this$1.deps[i];
|
||
if (!this$1.newDepIds.has(dep.id)) {
|
||
dep.removeSub(this$1);
|
||
}
|
||
}
|
||
var tmp = this.depIds;
|
||
this.depIds = this.newDepIds;
|
||
this.newDepIds = tmp;
|
||
this.newDepIds.clear();
|
||
tmp = this.deps;
|
||
this.deps = this.newDeps;
|
||
this.newDeps = tmp;
|
||
this.newDeps.length = 0;
|
||
};
|
||
|
||
/**
|
||
* Subscriber interface.
|
||
* Will be called when a dependency changes.
|
||
*/
|
||
Watcher.prototype.update = function update () {
|
||
/* istanbul ignore else */
|
||
if (this.lazy) {
|
||
this.dirty = true;
|
||
} else if (this.sync) {
|
||
this.run();
|
||
} else {
|
||
queueWatcher(this);
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Scheduler job interface.
|
||
* Will be called by the scheduler.
|
||
*/
|
||
Watcher.prototype.run = function run () {
|
||
if (this.active) {
|
||
var value = this.get();
|
||
if (
|
||
value !== this.value ||
|
||
// Deep watchers and watchers on Object/Arrays should fire even
|
||
// when the value is the same, because the value may
|
||
// have mutated.
|
||
isObject(value) ||
|
||
this.deep
|
||
) {
|
||
// set new value
|
||
var oldValue = this.value;
|
||
this.value = value;
|
||
if (this.user) {
|
||
try {
|
||
this.cb.call(this.vm, value, oldValue);
|
||
} catch (e) {
|
||
handleError(e, this.vm, ("callback for watcher \"" + (this.expression) + "\""));
|
||
}
|
||
} else {
|
||
this.cb.call(this.vm, value, oldValue);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Evaluate the value of the watcher.
|
||
* This only gets called for lazy watchers.
|
||
*/
|
||
Watcher.prototype.evaluate = function evaluate () {
|
||
this.value = this.get();
|
||
this.dirty = false;
|
||
};
|
||
|
||
/**
|
||
* Depend on all deps collected by this watcher.
|
||
*/
|
||
Watcher.prototype.depend = function depend () {
|
||
var this$1 = this;
|
||
|
||
var i = this.deps.length;
|
||
while (i--) {
|
||
this$1.deps[i].depend();
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Remove self from all dependencies' subscriber list.
|
||
*/
|
||
Watcher.prototype.teardown = function teardown () {
|
||
var this$1 = this;
|
||
|
||
if (this.active) {
|
||
// remove self from vm's watcher list
|
||
// this is a somewhat expensive operation so we skip it
|
||
// if the vm is being destroyed.
|
||
if (!this.vm._isBeingDestroyed) {
|
||
remove(this.vm._watchers, this);
|
||
}
|
||
var i = this.deps.length;
|
||
while (i--) {
|
||
this$1.deps[i].removeSub(this$1);
|
||
}
|
||
this.active = false;
|
||
}
|
||
};
|
||
|
||
/* */
|
||
|
||
var sharedPropertyDefinition = {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: noop,
|
||
set: noop
|
||
};
|
||
|
||
function proxy (target, sourceKey, key) {
|
||
sharedPropertyDefinition.get = function proxyGetter () {
|
||
return this[sourceKey][key]
|
||
};
|
||
sharedPropertyDefinition.set = function proxySetter (val) {
|
||
this[sourceKey][key] = val;
|
||
};
|
||
Object.defineProperty(target, key, sharedPropertyDefinition);
|
||
}
|
||
|
||
function initState (vm) {
|
||
vm._watchers = [];
|
||
var opts = vm.$options;
|
||
if (opts.props) { initProps(vm, opts.props); }
|
||
if (opts.methods) { initMethods(vm, opts.methods); }
|
||
if (opts.data) {
|
||
initData(vm);
|
||
} else {
|
||
observe(vm._data = {}, true /* asRootData */);
|
||
}
|
||
if (opts.computed) { initComputed(vm, opts.computed); }
|
||
if (opts.watch && opts.watch !== nativeWatch) {
|
||
initWatch(vm, opts.watch);
|
||
}
|
||
}
|
||
|
||
function initProps (vm, propsOptions) {
|
||
var propsData = vm.$options.propsData || {};
|
||
var props = vm._props = {};
|
||
// cache prop keys so that future props updates can iterate using Array
|
||
// instead of dynamic object key enumeration.
|
||
var keys = vm.$options._propKeys = [];
|
||
var isRoot = !vm.$parent;
|
||
// root instance props should be converted
|
||
if (!isRoot) {
|
||
toggleObserving(false);
|
||
}
|
||
var loop = function ( key ) {
|
||
keys.push(key);
|
||
var value = validateProp(key, propsOptions, propsData, vm);
|
||
/* istanbul ignore else */
|
||
if (true) {
|
||
var hyphenatedKey = hyphenate(key);
|
||
if (isReservedAttribute(hyphenatedKey) ||
|
||
config.isReservedAttr(hyphenatedKey)) {
|
||
warn(
|
||
("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."),
|
||
vm
|
||
);
|
||
}
|
||
defineReactive(props, key, value, function () {
|
||
if (vm.$parent && !isUpdatingChildComponent) {
|
||
warn(
|
||
"Avoid mutating a prop directly since the value will be " +
|
||
"overwritten whenever the parent component re-renders. " +
|
||
"Instead, use a data or computed property based on the prop's " +
|
||
"value. Prop being mutated: \"" + key + "\"",
|
||
vm
|
||
);
|
||
}
|
||
});
|
||
} else {
|
||
defineReactive(props, key, value);
|
||
}
|
||
// static props are already proxied on the component's prototype
|
||
// during Vue.extend(). We only need to proxy props defined at
|
||
// instantiation here.
|
||
if (!(key in vm)) {
|
||
proxy(vm, "_props", key);
|
||
}
|
||
};
|
||
|
||
for (var key in propsOptions) loop( key );
|
||
toggleObserving(true);
|
||
}
|
||
|
||
function initData (vm) {
|
||
var data = vm.$options.data;
|
||
data = vm._data = typeof data === 'function'
|
||
? getData(data, vm)
|
||
: data || {};
|
||
if (!isPlainObject(data)) {
|
||
data = {};
|
||
"development" !== 'production' && warn(
|
||
'data functions should return an object:\n' +
|
||
'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
|
||
vm
|
||
);
|
||
}
|
||
// proxy data on instance
|
||
var keys = Object.keys(data);
|
||
var props = vm.$options.props;
|
||
var methods = vm.$options.methods;
|
||
var i = keys.length;
|
||
while (i--) {
|
||
var key = keys[i];
|
||
if (true) {
|
||
if (methods && hasOwn(methods, key)) {
|
||
warn(
|
||
("Method \"" + key + "\" has already been defined as a data property."),
|
||
vm
|
||
);
|
||
}
|
||
}
|
||
if (props && hasOwn(props, key)) {
|
||
"development" !== 'production' && warn(
|
||
"The data property \"" + key + "\" is already declared as a prop. " +
|
||
"Use prop default value instead.",
|
||
vm
|
||
);
|
||
} else if (!isReserved(key)) {
|
||
proxy(vm, "_data", key);
|
||
}
|
||
}
|
||
// observe data
|
||
observe(data, true /* asRootData */);
|
||
}
|
||
|
||
function getData (data, vm) {
|
||
// #7573 disable dep collection when invoking data getters
|
||
pushTarget();
|
||
try {
|
||
return data.call(vm, vm)
|
||
} catch (e) {
|
||
handleError(e, vm, "data()");
|
||
return {}
|
||
} finally {
|
||
popTarget();
|
||
}
|
||
}
|
||
|
||
var computedWatcherOptions = { lazy: true };
|
||
|
||
function initComputed (vm, computed) {
|
||
// $flow-disable-line
|
||
var watchers = vm._computedWatchers = Object.create(null);
|
||
// computed properties are just getters during SSR
|
||
var isSSR = isServerRendering();
|
||
|
||
for (var key in computed) {
|
||
var userDef = computed[key];
|
||
var getter = typeof userDef === 'function' ? userDef : userDef.get;
|
||
if ("development" !== 'production' && getter == null) {
|
||
warn(
|
||
("Getter is missing for computed property \"" + key + "\"."),
|
||
vm
|
||
);
|
||
}
|
||
|
||
if (!isSSR) {
|
||
// create internal watcher for the computed property.
|
||
watchers[key] = new Watcher(
|
||
vm,
|
||
getter || noop,
|
||
noop,
|
||
computedWatcherOptions
|
||
);
|
||
}
|
||
|
||
// component-defined computed properties are already defined on the
|
||
// component prototype. We only need to define computed properties defined
|
||
// at instantiation here.
|
||
if (!(key in vm)) {
|
||
defineComputed(vm, key, userDef);
|
||
} else if (true) {
|
||
if (key in vm.$data) {
|
||
warn(("The computed property \"" + key + "\" is already defined in data."), vm);
|
||
} else if (vm.$options.props && key in vm.$options.props) {
|
||
warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function defineComputed (
|
||
target,
|
||
key,
|
||
userDef
|
||
) {
|
||
var shouldCache = !isServerRendering();
|
||
if (typeof userDef === 'function') {
|
||
sharedPropertyDefinition.get = shouldCache
|
||
? createComputedGetter(key)
|
||
: userDef;
|
||
sharedPropertyDefinition.set = noop;
|
||
} else {
|
||
sharedPropertyDefinition.get = userDef.get
|
||
? shouldCache && userDef.cache !== false
|
||
? createComputedGetter(key)
|
||
: userDef.get
|
||
: noop;
|
||
sharedPropertyDefinition.set = userDef.set
|
||
? userDef.set
|
||
: noop;
|
||
}
|
||
if ("development" !== 'production' &&
|
||
sharedPropertyDefinition.set === noop) {
|
||
sharedPropertyDefinition.set = function () {
|
||
warn(
|
||
("Computed property \"" + key + "\" was assigned to but it has no setter."),
|
||
this
|
||
);
|
||
};
|
||
}
|
||
Object.defineProperty(target, key, sharedPropertyDefinition);
|
||
}
|
||
|
||
function createComputedGetter (key) {
|
||
return function computedGetter () {
|
||
var watcher = this._computedWatchers && this._computedWatchers[key];
|
||
if (watcher) {
|
||
if (watcher.dirty) {
|
||
watcher.evaluate();
|
||
}
|
||
if (Dep.target) {
|
||
watcher.depend();
|
||
}
|
||
return watcher.value
|
||
}
|
||
}
|
||
}
|
||
|
||
function initMethods (vm, methods) {
|
||
var props = vm.$options.props;
|
||
for (var key in methods) {
|
||
if (true) {
|
||
if (methods[key] == null) {
|
||
warn(
|
||
"Method \"" + key + "\" has an undefined value in the component definition. " +
|
||
"Did you reference the function correctly?",
|
||
vm
|
||
);
|
||
}
|
||
if (props && hasOwn(props, key)) {
|
||
warn(
|
||
("Method \"" + key + "\" has already been defined as a prop."),
|
||
vm
|
||
);
|
||
}
|
||
if ((key in vm) && isReserved(key)) {
|
||
warn(
|
||
"Method \"" + key + "\" conflicts with an existing Vue instance method. " +
|
||
"Avoid defining component methods that start with _ or $."
|
||
);
|
||
}
|
||
}
|
||
vm[key] = methods[key] == null ? noop : bind(methods[key], vm);
|
||
}
|
||
}
|
||
|
||
function initWatch (vm, watch) {
|
||
for (var key in watch) {
|
||
var handler = watch[key];
|
||
if (Array.isArray(handler)) {
|
||
for (var i = 0; i < handler.length; i++) {
|
||
createWatcher(vm, key, handler[i]);
|
||
}
|
||
} else {
|
||
createWatcher(vm, key, handler);
|
||
}
|
||
}
|
||
}
|
||
|
||
function createWatcher (
|
||
vm,
|
||
expOrFn,
|
||
handler,
|
||
options
|
||
) {
|
||
if (isPlainObject(handler)) {
|
||
options = handler;
|
||
handler = handler.handler;
|
||
}
|
||
if (typeof handler === 'string') {
|
||
handler = vm[handler];
|
||
}
|
||
return vm.$watch(expOrFn, handler, options)
|
||
}
|
||
|
||
function stateMixin (Vue) {
|
||
// flow somehow has problems with directly declared definition object
|
||
// when using Object.defineProperty, so we have to procedurally build up
|
||
// the object here.
|
||
var dataDef = {};
|
||
dataDef.get = function () { return this._data };
|
||
var propsDef = {};
|
||
propsDef.get = function () { return this._props };
|
||
if (true) {
|
||
dataDef.set = function (newData) {
|
||
warn(
|
||
'Avoid replacing instance root $data. ' +
|
||
'Use nested data properties instead.',
|
||
this
|
||
);
|
||
};
|
||
propsDef.set = function () {
|
||
warn("$props is readonly.", this);
|
||
};
|
||
}
|
||
Object.defineProperty(Vue.prototype, '$data', dataDef);
|
||
Object.defineProperty(Vue.prototype, '$props', propsDef);
|
||
|
||
Vue.prototype.$set = set;
|
||
Vue.prototype.$delete = del;
|
||
|
||
Vue.prototype.$watch = function (
|
||
expOrFn,
|
||
cb,
|
||
options
|
||
) {
|
||
var vm = this;
|
||
if (isPlainObject(cb)) {
|
||
return createWatcher(vm, expOrFn, cb, options)
|
||
}
|
||
options = options || {};
|
||
options.user = true;
|
||
var watcher = new Watcher(vm, expOrFn, cb, options);
|
||
if (options.immediate) {
|
||
cb.call(vm, watcher.value);
|
||
}
|
||
return function unwatchFn () {
|
||
watcher.teardown();
|
||
}
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
function initProvide (vm) {
|
||
var provide = vm.$options.provide;
|
||
if (provide) {
|
||
vm._provided = typeof provide === 'function'
|
||
? provide.call(vm)
|
||
: provide;
|
||
}
|
||
}
|
||
|
||
function initInjections (vm) {
|
||
var result = resolveInject(vm.$options.inject, vm);
|
||
if (result) {
|
||
toggleObserving(false);
|
||
Object.keys(result).forEach(function (key) {
|
||
/* istanbul ignore else */
|
||
if (true) {
|
||
defineReactive(vm, key, result[key], function () {
|
||
warn(
|
||
"Avoid mutating an injected value directly since the changes will be " +
|
||
"overwritten whenever the provided component re-renders. " +
|
||
"injection being mutated: \"" + key + "\"",
|
||
vm
|
||
);
|
||
});
|
||
} else {
|
||
defineReactive(vm, key, result[key]);
|
||
}
|
||
});
|
||
toggleObserving(true);
|
||
}
|
||
}
|
||
|
||
function resolveInject (inject, vm) {
|
||
if (inject) {
|
||
// inject is :any because flow is not smart enough to figure out cached
|
||
var result = Object.create(null);
|
||
var keys = hasSymbol
|
||
? Reflect.ownKeys(inject).filter(function (key) {
|
||
/* istanbul ignore next */
|
||
return Object.getOwnPropertyDescriptor(inject, key).enumerable
|
||
})
|
||
: Object.keys(inject);
|
||
|
||
for (var i = 0; i < keys.length; i++) {
|
||
var key = keys[i];
|
||
var provideKey = inject[key].from;
|
||
var source = vm;
|
||
while (source) {
|
||
if (source._provided && hasOwn(source._provided, provideKey)) {
|
||
result[key] = source._provided[provideKey];
|
||
break
|
||
}
|
||
source = source.$parent;
|
||
}
|
||
if (!source) {
|
||
if ('default' in inject[key]) {
|
||
var provideDefault = inject[key].default;
|
||
result[key] = typeof provideDefault === 'function'
|
||
? provideDefault.call(vm)
|
||
: provideDefault;
|
||
} else if (true) {
|
||
warn(("Injection \"" + key + "\" not found"), vm);
|
||
}
|
||
}
|
||
}
|
||
return result
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for rendering v-for lists.
|
||
*/
|
||
function renderList (
|
||
val,
|
||
render
|
||
) {
|
||
var ret, i, l, keys, key;
|
||
if (Array.isArray(val) || typeof val === 'string') {
|
||
ret = new Array(val.length);
|
||
for (i = 0, l = val.length; i < l; i++) {
|
||
ret[i] = render(val[i], i);
|
||
}
|
||
} else if (typeof val === 'number') {
|
||
ret = new Array(val);
|
||
for (i = 0; i < val; i++) {
|
||
ret[i] = render(i + 1, i);
|
||
}
|
||
} else if (isObject(val)) {
|
||
keys = Object.keys(val);
|
||
ret = new Array(keys.length);
|
||
for (i = 0, l = keys.length; i < l; i++) {
|
||
key = keys[i];
|
||
ret[i] = render(val[key], key, i);
|
||
}
|
||
}
|
||
if (isDef(ret)) {
|
||
(ret)._isVList = true;
|
||
}
|
||
return ret
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for rendering <slot>
|
||
*/
|
||
function renderSlot (
|
||
name,
|
||
fallback,
|
||
props,
|
||
bindObject
|
||
) {
|
||
var scopedSlotFn = this.$scopedSlots[name];
|
||
var nodes;
|
||
if (scopedSlotFn) { // scoped slot
|
||
props = props || {};
|
||
if (bindObject) {
|
||
if ("development" !== 'production' && !isObject(bindObject)) {
|
||
warn(
|
||
'slot v-bind without argument expects an Object',
|
||
this
|
||
);
|
||
}
|
||
props = extend(extend({}, bindObject), props);
|
||
}
|
||
nodes = scopedSlotFn(props) || fallback;
|
||
} else {
|
||
var slotNodes = this.$slots[name];
|
||
// warn duplicate slot usage
|
||
if (slotNodes) {
|
||
if ("development" !== 'production' && slotNodes._rendered) {
|
||
warn(
|
||
"Duplicate presence of slot \"" + name + "\" found in the same render tree " +
|
||
"- this will likely cause render errors.",
|
||
this
|
||
);
|
||
}
|
||
slotNodes._rendered = true;
|
||
}
|
||
nodes = slotNodes || fallback;
|
||
}
|
||
|
||
var target = props && props.slot;
|
||
if (target) {
|
||
return this.$createElement('template', { slot: target }, nodes)
|
||
} else {
|
||
return nodes
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for resolving filters
|
||
*/
|
||
function resolveFilter (id) {
|
||
return resolveAsset(this.$options, 'filters', id, true) || identity
|
||
}
|
||
|
||
/* */
|
||
|
||
function isKeyNotMatch (expect, actual) {
|
||
if (Array.isArray(expect)) {
|
||
return expect.indexOf(actual) === -1
|
||
} else {
|
||
return expect !== actual
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Runtime helper for checking keyCodes from config.
|
||
* exposed as Vue.prototype._k
|
||
* passing in eventKeyName as last argument separately for backwards compat
|
||
*/
|
||
function checkKeyCodes (
|
||
eventKeyCode,
|
||
key,
|
||
builtInKeyCode,
|
||
eventKeyName,
|
||
builtInKeyName
|
||
) {
|
||
var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
|
||
if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
|
||
return isKeyNotMatch(builtInKeyName, eventKeyName)
|
||
} else if (mappedKeyCode) {
|
||
return isKeyNotMatch(mappedKeyCode, eventKeyCode)
|
||
} else if (eventKeyName) {
|
||
return hyphenate(eventKeyName) !== key
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for merging v-bind="object" into a VNode's data.
|
||
*/
|
||
function bindObjectProps (
|
||
data,
|
||
tag,
|
||
value,
|
||
asProp,
|
||
isSync
|
||
) {
|
||
if (value) {
|
||
if (!isObject(value)) {
|
||
"development" !== 'production' && warn(
|
||
'v-bind without argument expects an Object or Array value',
|
||
this
|
||
);
|
||
} else {
|
||
if (Array.isArray(value)) {
|
||
value = toObject(value);
|
||
}
|
||
var hash;
|
||
var loop = function ( key ) {
|
||
if (
|
||
key === 'class' ||
|
||
key === 'style' ||
|
||
isReservedAttribute(key)
|
||
) {
|
||
hash = data;
|
||
} else {
|
||
var type = data.attrs && data.attrs.type;
|
||
hash = asProp || config.mustUseProp(tag, type, key)
|
||
? data.domProps || (data.domProps = {})
|
||
: data.attrs || (data.attrs = {});
|
||
}
|
||
if (!(key in hash)) {
|
||
hash[key] = value[key];
|
||
|
||
if (isSync) {
|
||
var on = data.on || (data.on = {});
|
||
on[("update:" + key)] = function ($event) {
|
||
value[key] = $event;
|
||
};
|
||
}
|
||
}
|
||
};
|
||
|
||
for (var key in value) loop( key );
|
||
}
|
||
}
|
||
return data
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for rendering static trees.
|
||
*/
|
||
function renderStatic (
|
||
index,
|
||
isInFor
|
||
) {
|
||
var cached = this._staticTrees || (this._staticTrees = []);
|
||
var tree = cached[index];
|
||
// if has already-rendered static tree and not inside v-for,
|
||
// we can reuse the same tree.
|
||
if (tree && !isInFor) {
|
||
return tree
|
||
}
|
||
// otherwise, render a fresh tree.
|
||
tree = cached[index] = this.$options.staticRenderFns[index].call(
|
||
this._renderProxy,
|
||
null,
|
||
this // for render fns generated for functional component templates
|
||
);
|
||
markStatic(tree, ("__static__" + index), false);
|
||
return tree
|
||
}
|
||
|
||
/**
|
||
* Runtime helper for v-once.
|
||
* Effectively it means marking the node as static with a unique key.
|
||
*/
|
||
function markOnce (
|
||
tree,
|
||
index,
|
||
key
|
||
) {
|
||
markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
|
||
return tree
|
||
}
|
||
|
||
function markStatic (
|
||
tree,
|
||
key,
|
||
isOnce
|
||
) {
|
||
if (Array.isArray(tree)) {
|
||
for (var i = 0; i < tree.length; i++) {
|
||
if (tree[i] && typeof tree[i] !== 'string') {
|
||
markStaticNode(tree[i], (key + "_" + i), isOnce);
|
||
}
|
||
}
|
||
} else {
|
||
markStaticNode(tree, key, isOnce);
|
||
}
|
||
}
|
||
|
||
function markStaticNode (node, key, isOnce) {
|
||
node.isStatic = true;
|
||
node.key = key;
|
||
node.isOnce = isOnce;
|
||
}
|
||
|
||
/* */
|
||
|
||
function bindObjectListeners (data, value) {
|
||
if (value) {
|
||
if (!isPlainObject(value)) {
|
||
"development" !== 'production' && warn(
|
||
'v-on without argument expects an Object value',
|
||
this
|
||
);
|
||
} else {
|
||
var on = data.on = data.on ? extend({}, data.on) : {};
|
||
for (var key in value) {
|
||
var existing = on[key];
|
||
var ours = value[key];
|
||
on[key] = existing ? [].concat(existing, ours) : ours;
|
||
}
|
||
}
|
||
}
|
||
return data
|
||
}
|
||
|
||
/* */
|
||
|
||
function installRenderHelpers (target) {
|
||
target._o = markOnce;
|
||
target._n = toNumber;
|
||
target._s = toString;
|
||
target._l = renderList;
|
||
target._t = renderSlot;
|
||
target._q = looseEqual;
|
||
target._i = looseIndexOf;
|
||
target._m = renderStatic;
|
||
target._f = resolveFilter;
|
||
target._k = checkKeyCodes;
|
||
target._b = bindObjectProps;
|
||
target._v = createTextVNode;
|
||
target._e = createEmptyVNode;
|
||
target._u = resolveScopedSlots;
|
||
target._g = bindObjectListeners;
|
||
}
|
||
|
||
/* */
|
||
|
||
function FunctionalRenderContext (
|
||
data,
|
||
props,
|
||
children,
|
||
parent,
|
||
Ctor
|
||
) {
|
||
var options = Ctor.options;
|
||
// ensure the createElement function in functional components
|
||
// gets a unique context - this is necessary for correct named slot check
|
||
var contextVm;
|
||
if (hasOwn(parent, '_uid')) {
|
||
contextVm = Object.create(parent);
|
||
// $flow-disable-line
|
||
contextVm._original = parent;
|
||
} else {
|
||
// the context vm passed in is a functional context as well.
|
||
// in this case we want to make sure we are able to get a hold to the
|
||
// real context instance.
|
||
contextVm = parent;
|
||
// $flow-disable-line
|
||
parent = parent._original;
|
||
}
|
||
var isCompiled = isTrue(options._compiled);
|
||
var needNormalization = !isCompiled;
|
||
|
||
this.data = data;
|
||
this.props = props;
|
||
this.children = children;
|
||
this.parent = parent;
|
||
this.listeners = data.on || emptyObject;
|
||
this.injections = resolveInject(options.inject, parent);
|
||
this.slots = function () { return resolveSlots(children, parent); };
|
||
|
||
// support for compiled functional template
|
||
if (isCompiled) {
|
||
// exposing $options for renderStatic()
|
||
this.$options = options;
|
||
// pre-resolve slots for renderSlot()
|
||
this.$slots = this.slots();
|
||
this.$scopedSlots = data.scopedSlots || emptyObject;
|
||
}
|
||
|
||
if (options._scopeId) {
|
||
this._c = function (a, b, c, d) {
|
||
var vnode = createElement(contextVm, a, b, c, d, needNormalization);
|
||
if (vnode && !Array.isArray(vnode)) {
|
||
vnode.fnScopeId = options._scopeId;
|
||
vnode.fnContext = parent;
|
||
}
|
||
return vnode
|
||
};
|
||
} else {
|
||
this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };
|
||
}
|
||
}
|
||
|
||
installRenderHelpers(FunctionalRenderContext.prototype);
|
||
|
||
function createFunctionalComponent (
|
||
Ctor,
|
||
propsData,
|
||
data,
|
||
contextVm,
|
||
children
|
||
) {
|
||
var options = Ctor.options;
|
||
var props = {};
|
||
var propOptions = options.props;
|
||
if (isDef(propOptions)) {
|
||
for (var key in propOptions) {
|
||
props[key] = validateProp(key, propOptions, propsData || emptyObject);
|
||
}
|
||
} else {
|
||
if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
|
||
if (isDef(data.props)) { mergeProps(props, data.props); }
|
||
}
|
||
|
||
var renderContext = new FunctionalRenderContext(
|
||
data,
|
||
props,
|
||
children,
|
||
contextVm,
|
||
Ctor
|
||
);
|
||
|
||
var vnode = options.render.call(null, renderContext._c, renderContext);
|
||
|
||
if (vnode instanceof VNode) {
|
||
return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options)
|
||
} else if (Array.isArray(vnode)) {
|
||
var vnodes = normalizeChildren(vnode) || [];
|
||
var res = new Array(vnodes.length);
|
||
for (var i = 0; i < vnodes.length; i++) {
|
||
res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options);
|
||
}
|
||
return res
|
||
}
|
||
}
|
||
|
||
function cloneAndMarkFunctionalResult (vnode, data, contextVm, options) {
|
||
// #7817 clone node before setting fnContext, otherwise if the node is reused
|
||
// (e.g. it was from a cached normal slot) the fnContext causes named slots
|
||
// that should not be matched to match.
|
||
var clone = cloneVNode(vnode);
|
||
clone.fnContext = contextVm;
|
||
clone.fnOptions = options;
|
||
if (data.slot) {
|
||
(clone.data || (clone.data = {})).slot = data.slot;
|
||
}
|
||
return clone
|
||
}
|
||
|
||
function mergeProps (to, from) {
|
||
for (var key in from) {
|
||
to[camelize(key)] = from[key];
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
|
||
|
||
|
||
// Register the component hook to weex native render engine.
|
||
// The hook will be triggered by native, not javascript.
|
||
|
||
|
||
// Updates the state of the component to weex native render engine.
|
||
|
||
/* */
|
||
|
||
// https://github.com/Hanks10100/weex-native-directive/tree/master/component
|
||
|
||
// listening on native callback
|
||
|
||
/* */
|
||
|
||
/* */
|
||
|
||
// inline hooks to be invoked on component VNodes during patch
|
||
var componentVNodeHooks = {
|
||
init: function init (
|
||
vnode,
|
||
hydrating,
|
||
parentElm,
|
||
refElm
|
||
) {
|
||
if (
|
||
vnode.componentInstance &&
|
||
!vnode.componentInstance._isDestroyed &&
|
||
vnode.data.keepAlive
|
||
) {
|
||
// kept-alive components, treat as a patch
|
||
var mountedNode = vnode; // work around flow
|
||
componentVNodeHooks.prepatch(mountedNode, mountedNode);
|
||
} else {
|
||
var child = vnode.componentInstance = createComponentInstanceForVnode(
|
||
vnode,
|
||
activeInstance,
|
||
parentElm,
|
||
refElm
|
||
);
|
||
child.$mount(hydrating ? vnode.elm : undefined, hydrating);
|
||
}
|
||
},
|
||
|
||
prepatch: function prepatch (oldVnode, vnode) {
|
||
var options = vnode.componentOptions;
|
||
var child = vnode.componentInstance = oldVnode.componentInstance;
|
||
updateChildComponent(
|
||
child,
|
||
options.propsData, // updated props
|
||
options.listeners, // updated listeners
|
||
vnode, // new parent vnode
|
||
options.children // new children
|
||
);
|
||
},
|
||
|
||
insert: function insert (vnode) {
|
||
var context = vnode.context;
|
||
var componentInstance = vnode.componentInstance;
|
||
if (!componentInstance._isMounted) {
|
||
componentInstance._isMounted = true;
|
||
callHook(componentInstance, 'mounted');
|
||
}
|
||
if (vnode.data.keepAlive) {
|
||
if (context._isMounted) {
|
||
// vue-router#1212
|
||
// During updates, a kept-alive component's child components may
|
||
// change, so directly walking the tree here may call activated hooks
|
||
// on incorrect children. Instead we push them into a queue which will
|
||
// be processed after the whole patch process ended.
|
||
queueActivatedComponent(componentInstance);
|
||
} else {
|
||
activateChildComponent(componentInstance, true /* direct */);
|
||
}
|
||
}
|
||
},
|
||
|
||
destroy: function destroy (vnode) {
|
||
var componentInstance = vnode.componentInstance;
|
||
if (!componentInstance._isDestroyed) {
|
||
if (!vnode.data.keepAlive) {
|
||
componentInstance.$destroy();
|
||
} else {
|
||
deactivateChildComponent(componentInstance, true /* direct */);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
var hooksToMerge = Object.keys(componentVNodeHooks);
|
||
|
||
function createComponent (
|
||
Ctor,
|
||
data,
|
||
context,
|
||
children,
|
||
tag
|
||
) {
|
||
if (isUndef(Ctor)) {
|
||
return
|
||
}
|
||
|
||
var baseCtor = context.$options._base;
|
||
|
||
// plain options object: turn it into a constructor
|
||
if (isObject(Ctor)) {
|
||
Ctor = baseCtor.extend(Ctor);
|
||
}
|
||
|
||
// if at this stage it's not a constructor or an async component factory,
|
||
// reject.
|
||
if (typeof Ctor !== 'function') {
|
||
if (true) {
|
||
warn(("Invalid Component definition: " + (String(Ctor))), context);
|
||
}
|
||
return
|
||
}
|
||
|
||
// async component
|
||
var asyncFactory;
|
||
if (isUndef(Ctor.cid)) {
|
||
asyncFactory = Ctor;
|
||
Ctor = resolveAsyncComponent(asyncFactory, baseCtor, context);
|
||
if (Ctor === undefined) {
|
||
// return a placeholder node for async component, which is rendered
|
||
// as a comment node but preserves all the raw information for the node.
|
||
// the information will be used for async server-rendering and hydration.
|
||
return createAsyncPlaceholder(
|
||
asyncFactory,
|
||
data,
|
||
context,
|
||
children,
|
||
tag
|
||
)
|
||
}
|
||
}
|
||
|
||
data = data || {};
|
||
|
||
// resolve constructor options in case global mixins are applied after
|
||
// component constructor creation
|
||
resolveConstructorOptions(Ctor);
|
||
|
||
// transform component v-model data into props & events
|
||
if (isDef(data.model)) {
|
||
transformModel(Ctor.options, data);
|
||
}
|
||
|
||
// extract props
|
||
var propsData = extractPropsFromVNodeData(data, Ctor, tag);
|
||
|
||
// functional component
|
||
if (isTrue(Ctor.options.functional)) {
|
||
return createFunctionalComponent(Ctor, propsData, data, context, children)
|
||
}
|
||
|
||
// extract listeners, since these needs to be treated as
|
||
// child component listeners instead of DOM listeners
|
||
var listeners = data.on;
|
||
// replace with listeners with .native modifier
|
||
// so it gets processed during parent component patch.
|
||
data.on = data.nativeOn;
|
||
|
||
if (isTrue(Ctor.options.abstract)) {
|
||
// abstract components do not keep anything
|
||
// other than props & listeners & slot
|
||
|
||
// work around flow
|
||
var slot = data.slot;
|
||
data = {};
|
||
if (slot) {
|
||
data.slot = slot;
|
||
}
|
||
}
|
||
|
||
// install component management hooks onto the placeholder node
|
||
installComponentHooks(data);
|
||
|
||
// return a placeholder vnode
|
||
var name = Ctor.options.name || tag;
|
||
var vnode = new VNode(
|
||
("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
|
||
data, undefined, undefined, undefined, context,
|
||
{ Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },
|
||
asyncFactory
|
||
);
|
||
|
||
// Weex specific: invoke recycle-list optimized @render function for
|
||
// extracting cell-slot template.
|
||
// https://github.com/Hanks10100/weex-native-directive/tree/master/component
|
||
/* istanbul ignore if */
|
||
return vnode
|
||
}
|
||
|
||
function createComponentInstanceForVnode (
|
||
vnode, // we know it's MountedComponentVNode but flow doesn't
|
||
parent, // activeInstance in lifecycle state
|
||
parentElm,
|
||
refElm
|
||
) {
|
||
var options = {
|
||
_isComponent: true,
|
||
parent: parent,
|
||
_parentVnode: vnode,
|
||
_parentElm: parentElm || null,
|
||
_refElm: refElm || null
|
||
};
|
||
// check inline-template render functions
|
||
var inlineTemplate = vnode.data.inlineTemplate;
|
||
if (isDef(inlineTemplate)) {
|
||
options.render = inlineTemplate.render;
|
||
options.staticRenderFns = inlineTemplate.staticRenderFns;
|
||
}
|
||
return new vnode.componentOptions.Ctor(options)
|
||
}
|
||
|
||
function installComponentHooks (data) {
|
||
var hooks = data.hook || (data.hook = {});
|
||
for (var i = 0; i < hooksToMerge.length; i++) {
|
||
var key = hooksToMerge[i];
|
||
hooks[key] = componentVNodeHooks[key];
|
||
}
|
||
}
|
||
|
||
// transform component v-model info (value and callback) into
|
||
// prop and event handler respectively.
|
||
function transformModel (options, data) {
|
||
var prop = (options.model && options.model.prop) || 'value';
|
||
var event = (options.model && options.model.event) || 'input';(data.props || (data.props = {}))[prop] = data.model.value;
|
||
var on = data.on || (data.on = {});
|
||
if (isDef(on[event])) {
|
||
on[event] = [data.model.callback].concat(on[event]);
|
||
} else {
|
||
on[event] = data.model.callback;
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var SIMPLE_NORMALIZE = 1;
|
||
var ALWAYS_NORMALIZE = 2;
|
||
|
||
// wrapper function for providing a more flexible interface
|
||
// without getting yelled at by flow
|
||
function createElement (
|
||
context,
|
||
tag,
|
||
data,
|
||
children,
|
||
normalizationType,
|
||
alwaysNormalize
|
||
) {
|
||
if (Array.isArray(data) || isPrimitive(data)) {
|
||
normalizationType = children;
|
||
children = data;
|
||
data = undefined;
|
||
}
|
||
if (isTrue(alwaysNormalize)) {
|
||
normalizationType = ALWAYS_NORMALIZE;
|
||
}
|
||
return _createElement(context, tag, data, children, normalizationType)
|
||
}
|
||
|
||
function _createElement (
|
||
context,
|
||
tag,
|
||
data,
|
||
children,
|
||
normalizationType
|
||
) {
|
||
if (isDef(data) && isDef((data).__ob__)) {
|
||
"development" !== 'production' && warn(
|
||
"Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
|
||
'Always create fresh vnode data objects in each render!',
|
||
context
|
||
);
|
||
return createEmptyVNode()
|
||
}
|
||
// object syntax in v-bind
|
||
if (isDef(data) && isDef(data.is)) {
|
||
tag = data.is;
|
||
}
|
||
if (!tag) {
|
||
// in case of component :is set to falsy value
|
||
return createEmptyVNode()
|
||
}
|
||
// warn against non-primitive key
|
||
if ("development" !== 'production' &&
|
||
isDef(data) && isDef(data.key) && !isPrimitive(data.key)
|
||
) {
|
||
{
|
||
warn(
|
||
'Avoid using non-primitive value as key, ' +
|
||
'use string/number value instead.',
|
||
context
|
||
);
|
||
}
|
||
}
|
||
// support single function children as default scoped slot
|
||
if (Array.isArray(children) &&
|
||
typeof children[0] === 'function'
|
||
) {
|
||
data = data || {};
|
||
data.scopedSlots = { default: children[0] };
|
||
children.length = 0;
|
||
}
|
||
if (normalizationType === ALWAYS_NORMALIZE) {
|
||
children = normalizeChildren(children);
|
||
} else if (normalizationType === SIMPLE_NORMALIZE) {
|
||
children = simpleNormalizeChildren(children);
|
||
}
|
||
var vnode, ns;
|
||
if (typeof tag === 'string') {
|
||
var Ctor;
|
||
ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
|
||
if (config.isReservedTag(tag)) {
|
||
// platform built-in elements
|
||
vnode = new VNode(
|
||
config.parsePlatformTagName(tag), data, children,
|
||
undefined, undefined, context
|
||
);
|
||
} else if (isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
|
||
// component
|
||
vnode = createComponent(Ctor, data, context, children, tag);
|
||
} else {
|
||
// unknown or unlisted namespaced elements
|
||
// check at runtime because it may get assigned a namespace when its
|
||
// parent normalizes children
|
||
vnode = new VNode(
|
||
tag, data, children,
|
||
undefined, undefined, context
|
||
);
|
||
}
|
||
} else {
|
||
// direct component options / constructor
|
||
vnode = createComponent(tag, data, context, children);
|
||
}
|
||
if (Array.isArray(vnode)) {
|
||
return vnode
|
||
} else if (isDef(vnode)) {
|
||
if (isDef(ns)) { applyNS(vnode, ns); }
|
||
if (isDef(data)) { registerDeepBindings(data); }
|
||
return vnode
|
||
} else {
|
||
return createEmptyVNode()
|
||
}
|
||
}
|
||
|
||
function applyNS (vnode, ns, force) {
|
||
vnode.ns = ns;
|
||
if (vnode.tag === 'foreignObject') {
|
||
// use default namespace inside foreignObject
|
||
ns = undefined;
|
||
force = true;
|
||
}
|
||
if (isDef(vnode.children)) {
|
||
for (var i = 0, l = vnode.children.length; i < l; i++) {
|
||
var child = vnode.children[i];
|
||
if (isDef(child.tag) && (
|
||
isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
|
||
applyNS(child, ns, force);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// ref #5318
|
||
// necessary to ensure parent re-render when deep bindings like :style and
|
||
// :class are used on slot nodes
|
||
function registerDeepBindings (data) {
|
||
if (isObject(data.style)) {
|
||
traverse(data.style);
|
||
}
|
||
if (isObject(data.class)) {
|
||
traverse(data.class);
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function initRender (vm) {
|
||
vm._vnode = null; // the root of the child tree
|
||
vm._staticTrees = null; // v-once cached trees
|
||
var options = vm.$options;
|
||
var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
|
||
var renderContext = parentVnode && parentVnode.context;
|
||
vm.$slots = resolveSlots(options._renderChildren, renderContext);
|
||
vm.$scopedSlots = emptyObject;
|
||
// bind the createElement fn to this instance
|
||
// so that we get proper render context inside it.
|
||
// args order: tag, data, children, normalizationType, alwaysNormalize
|
||
// internal version is used by render functions compiled from templates
|
||
vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
|
||
// normalization is always applied for the public version, used in
|
||
// user-written render functions.
|
||
vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
|
||
|
||
// $attrs & $listeners are exposed for easier HOC creation.
|
||
// they need to be reactive so that HOCs using them are always updated
|
||
var parentData = parentVnode && parentVnode.data;
|
||
|
||
/* istanbul ignore else */
|
||
if (true) {
|
||
defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
|
||
!isUpdatingChildComponent && warn("$attrs is readonly.", vm);
|
||
}, true);
|
||
defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
|
||
!isUpdatingChildComponent && warn("$listeners is readonly.", vm);
|
||
}, true);
|
||
} else {
|
||
defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);
|
||
defineReactive(vm, '$listeners', options._parentListeners || emptyObject, null, true);
|
||
}
|
||
}
|
||
|
||
function renderMixin (Vue) {
|
||
// install runtime convenience helpers
|
||
installRenderHelpers(Vue.prototype);
|
||
|
||
Vue.prototype.$nextTick = function (fn) {
|
||
return nextTick(fn, this)
|
||
};
|
||
|
||
Vue.prototype._render = function () {
|
||
var vm = this;
|
||
var ref = vm.$options;
|
||
var render = ref.render;
|
||
var _parentVnode = ref._parentVnode;
|
||
|
||
// reset _rendered flag on slots for duplicate slot check
|
||
if (true) {
|
||
for (var key in vm.$slots) {
|
||
// $flow-disable-line
|
||
vm.$slots[key]._rendered = false;
|
||
}
|
||
}
|
||
|
||
if (_parentVnode) {
|
||
vm.$scopedSlots = _parentVnode.data.scopedSlots || emptyObject;
|
||
}
|
||
|
||
// set parent vnode. this allows render functions to have access
|
||
// to the data on the placeholder node.
|
||
vm.$vnode = _parentVnode;
|
||
// render self
|
||
var vnode;
|
||
try {
|
||
vnode = render.call(vm._renderProxy, vm.$createElement);
|
||
} catch (e) {
|
||
handleError(e, vm, "render");
|
||
// return error render result,
|
||
// or previous vnode to prevent render error causing blank component
|
||
/* istanbul ignore else */
|
||
if (true) {
|
||
if (vm.$options.renderError) {
|
||
try {
|
||
vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
|
||
} catch (e) {
|
||
handleError(e, vm, "renderError");
|
||
vnode = vm._vnode;
|
||
}
|
||
} else {
|
||
vnode = vm._vnode;
|
||
}
|
||
} else {
|
||
vnode = vm._vnode;
|
||
}
|
||
}
|
||
// return empty vnode in case the render function errored out
|
||
if (!(vnode instanceof VNode)) {
|
||
if ("development" !== 'production' && Array.isArray(vnode)) {
|
||
warn(
|
||
'Multiple root nodes returned from render function. Render function ' +
|
||
'should return a single root node.',
|
||
vm
|
||
);
|
||
}
|
||
vnode = createEmptyVNode();
|
||
}
|
||
// set parent
|
||
vnode.parent = _parentVnode;
|
||
return vnode
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
var uid$3 = 0;
|
||
|
||
function initMixin (Vue) {
|
||
Vue.prototype._init = function (options) {
|
||
var vm = this;
|
||
// a uid
|
||
vm._uid = uid$3++;
|
||
|
||
var startTag, endTag;
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' && config.performance && mark) {
|
||
startTag = "vue-perf-start:" + (vm._uid);
|
||
endTag = "vue-perf-end:" + (vm._uid);
|
||
mark(startTag);
|
||
}
|
||
|
||
// a flag to avoid this being observed
|
||
vm._isVue = true;
|
||
// merge options
|
||
if (options && options._isComponent) {
|
||
// optimize internal component instantiation
|
||
// since dynamic options merging is pretty slow, and none of the
|
||
// internal component options needs special treatment.
|
||
initInternalComponent(vm, options);
|
||
} else {
|
||
vm.$options = mergeOptions(
|
||
resolveConstructorOptions(vm.constructor),
|
||
options || {},
|
||
vm
|
||
);
|
||
}
|
||
/* istanbul ignore else */
|
||
if (true) {
|
||
initProxy(vm);
|
||
} else {
|
||
vm._renderProxy = vm;
|
||
}
|
||
// expose real self
|
||
vm._self = vm;
|
||
initLifecycle(vm);
|
||
initEvents(vm);
|
||
initRender(vm);
|
||
callHook(vm, 'beforeCreate');
|
||
initInjections(vm); // resolve injections before data/props
|
||
initState(vm);
|
||
initProvide(vm); // resolve provide after data/props
|
||
callHook(vm, 'created');
|
||
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' && config.performance && mark) {
|
||
vm._name = formatComponentName(vm, false);
|
||
mark(endTag);
|
||
measure(("vue " + (vm._name) + " init"), startTag, endTag);
|
||
}
|
||
|
||
if (vm.$options.el) {
|
||
vm.$mount(vm.$options.el);
|
||
}
|
||
};
|
||
}
|
||
|
||
function initInternalComponent (vm, options) {
|
||
var opts = vm.$options = Object.create(vm.constructor.options);
|
||
// doing this because it's faster than dynamic enumeration.
|
||
var parentVnode = options._parentVnode;
|
||
opts.parent = options.parent;
|
||
opts._parentVnode = parentVnode;
|
||
opts._parentElm = options._parentElm;
|
||
opts._refElm = options._refElm;
|
||
|
||
var vnodeComponentOptions = parentVnode.componentOptions;
|
||
opts.propsData = vnodeComponentOptions.propsData;
|
||
opts._parentListeners = vnodeComponentOptions.listeners;
|
||
opts._renderChildren = vnodeComponentOptions.children;
|
||
opts._componentTag = vnodeComponentOptions.tag;
|
||
|
||
if (options.render) {
|
||
opts.render = options.render;
|
||
opts.staticRenderFns = options.staticRenderFns;
|
||
}
|
||
}
|
||
|
||
function resolveConstructorOptions (Ctor) {
|
||
var options = Ctor.options;
|
||
if (Ctor.super) {
|
||
var superOptions = resolveConstructorOptions(Ctor.super);
|
||
var cachedSuperOptions = Ctor.superOptions;
|
||
if (superOptions !== cachedSuperOptions) {
|
||
// super option changed,
|
||
// need to resolve new options.
|
||
Ctor.superOptions = superOptions;
|
||
// check if there are any late-modified/attached options (#4976)
|
||
var modifiedOptions = resolveModifiedOptions(Ctor);
|
||
// update base extend options
|
||
if (modifiedOptions) {
|
||
extend(Ctor.extendOptions, modifiedOptions);
|
||
}
|
||
options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
|
||
if (options.name) {
|
||
options.components[options.name] = Ctor;
|
||
}
|
||
}
|
||
}
|
||
return options
|
||
}
|
||
|
||
function resolveModifiedOptions (Ctor) {
|
||
var modified;
|
||
var latest = Ctor.options;
|
||
var extended = Ctor.extendOptions;
|
||
var sealed = Ctor.sealedOptions;
|
||
for (var key in latest) {
|
||
if (latest[key] !== sealed[key]) {
|
||
if (!modified) { modified = {}; }
|
||
modified[key] = dedupe(latest[key], extended[key], sealed[key]);
|
||
}
|
||
}
|
||
return modified
|
||
}
|
||
|
||
function dedupe (latest, extended, sealed) {
|
||
// compare latest and sealed to ensure lifecycle hooks won't be duplicated
|
||
// between merges
|
||
if (Array.isArray(latest)) {
|
||
var res = [];
|
||
sealed = Array.isArray(sealed) ? sealed : [sealed];
|
||
extended = Array.isArray(extended) ? extended : [extended];
|
||
for (var i = 0; i < latest.length; i++) {
|
||
// push original options and not sealed options to exclude duplicated options
|
||
if (extended.indexOf(latest[i]) >= 0 || sealed.indexOf(latest[i]) < 0) {
|
||
res.push(latest[i]);
|
||
}
|
||
}
|
||
return res
|
||
} else {
|
||
return latest
|
||
}
|
||
}
|
||
|
||
function Vue (options) {
|
||
if ("development" !== 'production' &&
|
||
!(this instanceof Vue)
|
||
) {
|
||
warn('Vue is a constructor and should be called with the `new` keyword');
|
||
}
|
||
this._init(options);
|
||
}
|
||
|
||
initMixin(Vue);
|
||
stateMixin(Vue);
|
||
eventsMixin(Vue);
|
||
lifecycleMixin(Vue);
|
||
renderMixin(Vue);
|
||
|
||
/* */
|
||
|
||
function initUse (Vue) {
|
||
Vue.use = function (plugin) {
|
||
var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
|
||
if (installedPlugins.indexOf(plugin) > -1) {
|
||
return this
|
||
}
|
||
|
||
// additional parameters
|
||
var args = toArray(arguments, 1);
|
||
args.unshift(this);
|
||
if (typeof plugin.install === 'function') {
|
||
plugin.install.apply(plugin, args);
|
||
} else if (typeof plugin === 'function') {
|
||
plugin.apply(null, args);
|
||
}
|
||
installedPlugins.push(plugin);
|
||
return this
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
function initMixin$1 (Vue) {
|
||
Vue.mixin = function (mixin) {
|
||
this.options = mergeOptions(this.options, mixin);
|
||
return this
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
function initExtend (Vue) {
|
||
/**
|
||
* Each instance constructor, including Vue, has a unique
|
||
* cid. This enables us to create wrapped "child
|
||
* constructors" for prototypal inheritance and cache them.
|
||
*/
|
||
Vue.cid = 0;
|
||
var cid = 1;
|
||
|
||
/**
|
||
* Class inheritance
|
||
*/
|
||
Vue.extend = function (extendOptions) {
|
||
extendOptions = extendOptions || {};
|
||
var Super = this;
|
||
var SuperId = Super.cid;
|
||
var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
|
||
if (cachedCtors[SuperId]) {
|
||
return cachedCtors[SuperId]
|
||
}
|
||
|
||
var name = extendOptions.name || Super.options.name;
|
||
if ("development" !== 'production' && name) {
|
||
validateComponentName(name);
|
||
}
|
||
|
||
var Sub = function VueComponent (options) {
|
||
this._init(options);
|
||
};
|
||
Sub.prototype = Object.create(Super.prototype);
|
||
Sub.prototype.constructor = Sub;
|
||
Sub.cid = cid++;
|
||
Sub.options = mergeOptions(
|
||
Super.options,
|
||
extendOptions
|
||
);
|
||
Sub['super'] = Super;
|
||
|
||
// For props and computed properties, we define the proxy getters on
|
||
// the Vue instances at extension time, on the extended prototype. This
|
||
// avoids Object.defineProperty calls for each instance created.
|
||
if (Sub.options.props) {
|
||
initProps$1(Sub);
|
||
}
|
||
if (Sub.options.computed) {
|
||
initComputed$1(Sub);
|
||
}
|
||
|
||
// allow further extension/mixin/plugin usage
|
||
Sub.extend = Super.extend;
|
||
Sub.mixin = Super.mixin;
|
||
Sub.use = Super.use;
|
||
|
||
// create asset registers, so extended classes
|
||
// can have their private assets too.
|
||
ASSET_TYPES.forEach(function (type) {
|
||
Sub[type] = Super[type];
|
||
});
|
||
// enable recursive self-lookup
|
||
if (name) {
|
||
Sub.options.components[name] = Sub;
|
||
}
|
||
|
||
// keep a reference to the super options at extension time.
|
||
// later at instantiation we can check if Super's options have
|
||
// been updated.
|
||
Sub.superOptions = Super.options;
|
||
Sub.extendOptions = extendOptions;
|
||
Sub.sealedOptions = extend({}, Sub.options);
|
||
|
||
// cache constructor
|
||
cachedCtors[SuperId] = Sub;
|
||
return Sub
|
||
};
|
||
}
|
||
|
||
function initProps$1 (Comp) {
|
||
var props = Comp.options.props;
|
||
for (var key in props) {
|
||
proxy(Comp.prototype, "_props", key);
|
||
}
|
||
}
|
||
|
||
function initComputed$1 (Comp) {
|
||
var computed = Comp.options.computed;
|
||
for (var key in computed) {
|
||
defineComputed(Comp.prototype, key, computed[key]);
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function initAssetRegisters (Vue) {
|
||
/**
|
||
* Create asset registration methods.
|
||
*/
|
||
ASSET_TYPES.forEach(function (type) {
|
||
Vue[type] = function (
|
||
id,
|
||
definition
|
||
) {
|
||
if (!definition) {
|
||
return this.options[type + 's'][id]
|
||
} else {
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' && type === 'component') {
|
||
validateComponentName(id);
|
||
}
|
||
if (type === 'component' && isPlainObject(definition)) {
|
||
definition.name = definition.name || id;
|
||
definition = this.options._base.extend(definition);
|
||
}
|
||
if (type === 'directive' && typeof definition === 'function') {
|
||
definition = { bind: definition, update: definition };
|
||
}
|
||
this.options[type + 's'][id] = definition;
|
||
return definition
|
||
}
|
||
};
|
||
});
|
||
}
|
||
|
||
/* */
|
||
|
||
function getComponentName (opts) {
|
||
return opts && (opts.Ctor.options.name || opts.tag)
|
||
}
|
||
|
||
function matches (pattern, name) {
|
||
if (Array.isArray(pattern)) {
|
||
return pattern.indexOf(name) > -1
|
||
} else if (typeof pattern === 'string') {
|
||
return pattern.split(',').indexOf(name) > -1
|
||
} else if (isRegExp(pattern)) {
|
||
return pattern.test(name)
|
||
}
|
||
/* istanbul ignore next */
|
||
return false
|
||
}
|
||
|
||
function pruneCache (keepAliveInstance, filter) {
|
||
var cache = keepAliveInstance.cache;
|
||
var keys = keepAliveInstance.keys;
|
||
var _vnode = keepAliveInstance._vnode;
|
||
for (var key in cache) {
|
||
var cachedNode = cache[key];
|
||
if (cachedNode) {
|
||
var name = getComponentName(cachedNode.componentOptions);
|
||
if (name && !filter(name)) {
|
||
pruneCacheEntry(cache, key, keys, _vnode);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function pruneCacheEntry (
|
||
cache,
|
||
key,
|
||
keys,
|
||
current
|
||
) {
|
||
var cached$$1 = cache[key];
|
||
if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {
|
||
cached$$1.componentInstance.$destroy();
|
||
}
|
||
cache[key] = null;
|
||
remove(keys, key);
|
||
}
|
||
|
||
var patternTypes = [String, RegExp, Array];
|
||
|
||
var KeepAlive = {
|
||
name: 'keep-alive',
|
||
abstract: true,
|
||
|
||
props: {
|
||
include: patternTypes,
|
||
exclude: patternTypes,
|
||
max: [String, Number]
|
||
},
|
||
|
||
created: function created () {
|
||
this.cache = Object.create(null);
|
||
this.keys = [];
|
||
},
|
||
|
||
destroyed: function destroyed () {
|
||
var this$1 = this;
|
||
|
||
for (var key in this$1.cache) {
|
||
pruneCacheEntry(this$1.cache, key, this$1.keys);
|
||
}
|
||
},
|
||
|
||
mounted: function mounted () {
|
||
var this$1 = this;
|
||
|
||
this.$watch('include', function (val) {
|
||
pruneCache(this$1, function (name) { return matches(val, name); });
|
||
});
|
||
this.$watch('exclude', function (val) {
|
||
pruneCache(this$1, function (name) { return !matches(val, name); });
|
||
});
|
||
},
|
||
|
||
render: function render () {
|
||
var slot = this.$slots.default;
|
||
var vnode = getFirstComponentChild(slot);
|
||
var componentOptions = vnode && vnode.componentOptions;
|
||
if (componentOptions) {
|
||
// check pattern
|
||
var name = getComponentName(componentOptions);
|
||
var ref = this;
|
||
var include = ref.include;
|
||
var exclude = ref.exclude;
|
||
if (
|
||
// not included
|
||
(include && (!name || !matches(include, name))) ||
|
||
// excluded
|
||
(exclude && name && matches(exclude, name))
|
||
) {
|
||
return vnode
|
||
}
|
||
|
||
var ref$1 = this;
|
||
var cache = ref$1.cache;
|
||
var keys = ref$1.keys;
|
||
var key = vnode.key == null
|
||
// same constructor may get registered as different local components
|
||
// so cid alone is not enough (#3269)
|
||
? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '')
|
||
: vnode.key;
|
||
if (cache[key]) {
|
||
vnode.componentInstance = cache[key].componentInstance;
|
||
// make current key freshest
|
||
remove(keys, key);
|
||
keys.push(key);
|
||
} else {
|
||
cache[key] = vnode;
|
||
keys.push(key);
|
||
// prune oldest entry
|
||
if (this.max && keys.length > parseInt(this.max)) {
|
||
pruneCacheEntry(cache, keys[0], keys, this._vnode);
|
||
}
|
||
}
|
||
|
||
vnode.data.keepAlive = true;
|
||
}
|
||
return vnode || (slot && slot[0])
|
||
}
|
||
}
|
||
|
||
var builtInComponents = {
|
||
KeepAlive: KeepAlive
|
||
}
|
||
|
||
/* */
|
||
|
||
function initGlobalAPI (Vue) {
|
||
// config
|
||
var configDef = {};
|
||
configDef.get = function () { return config; };
|
||
if (true) {
|
||
configDef.set = function () {
|
||
warn(
|
||
'Do not replace the Vue.config object, set individual fields instead.'
|
||
);
|
||
};
|
||
}
|
||
Object.defineProperty(Vue, 'config', configDef);
|
||
|
||
// exposed util methods.
|
||
// NOTE: these are not considered part of the public API - avoid relying on
|
||
// them unless you are aware of the risk.
|
||
Vue.util = {
|
||
warn: warn,
|
||
extend: extend,
|
||
mergeOptions: mergeOptions,
|
||
defineReactive: defineReactive
|
||
};
|
||
|
||
Vue.set = set;
|
||
Vue.delete = del;
|
||
Vue.nextTick = nextTick;
|
||
|
||
Vue.options = Object.create(null);
|
||
ASSET_TYPES.forEach(function (type) {
|
||
Vue.options[type + 's'] = Object.create(null);
|
||
});
|
||
|
||
// this is used to identify the "base" constructor to extend all plain-object
|
||
// components with in Weex's multi-instance scenarios.
|
||
Vue.options._base = Vue;
|
||
|
||
extend(Vue.options.components, builtInComponents);
|
||
|
||
initUse(Vue);
|
||
initMixin$1(Vue);
|
||
initExtend(Vue);
|
||
initAssetRegisters(Vue);
|
||
}
|
||
|
||
initGlobalAPI(Vue);
|
||
|
||
Object.defineProperty(Vue.prototype, '$isServer', {
|
||
get: isServerRendering
|
||
});
|
||
|
||
Object.defineProperty(Vue.prototype, '$ssrContext', {
|
||
get: function get () {
|
||
/* istanbul ignore next */
|
||
return this.$vnode && this.$vnode.ssrContext
|
||
}
|
||
});
|
||
|
||
// expose FunctionalRenderContext for ssr runtime helper installation
|
||
Object.defineProperty(Vue, 'FunctionalRenderContext', {
|
||
value: FunctionalRenderContext
|
||
});
|
||
|
||
Vue.version = '2.5.17';
|
||
|
||
/* */
|
||
|
||
// these are reserved for web because they are directly compiled away
|
||
// during template compilation
|
||
var isReservedAttr = makeMap('style,class');
|
||
|
||
// attributes that should be using props for binding
|
||
var acceptValue = makeMap('input,textarea,option,select,progress');
|
||
var mustUseProp = function (tag, type, attr) {
|
||
return (
|
||
(attr === 'value' && acceptValue(tag)) && type !== 'button' ||
|
||
(attr === 'selected' && tag === 'option') ||
|
||
(attr === 'checked' && tag === 'input') ||
|
||
(attr === 'muted' && tag === 'video')
|
||
)
|
||
};
|
||
|
||
var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
|
||
|
||
var isBooleanAttr = makeMap(
|
||
'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
|
||
'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
|
||
'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
|
||
'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
|
||
'required,reversed,scoped,seamless,selected,sortable,translate,' +
|
||
'truespeed,typemustmatch,visible'
|
||
);
|
||
|
||
var xlinkNS = 'http://www.w3.org/1999/xlink';
|
||
|
||
var isXlink = function (name) {
|
||
return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'
|
||
};
|
||
|
||
var getXlinkProp = function (name) {
|
||
return isXlink(name) ? name.slice(6, name.length) : ''
|
||
};
|
||
|
||
var isFalsyAttrValue = function (val) {
|
||
return val == null || val === false
|
||
};
|
||
|
||
/* */
|
||
|
||
function genClassForVnode (vnode) {
|
||
var data = vnode.data;
|
||
var parentNode = vnode;
|
||
var childNode = vnode;
|
||
while (isDef(childNode.componentInstance)) {
|
||
childNode = childNode.componentInstance._vnode;
|
||
if (childNode && childNode.data) {
|
||
data = mergeClassData(childNode.data, data);
|
||
}
|
||
}
|
||
while (isDef(parentNode = parentNode.parent)) {
|
||
if (parentNode && parentNode.data) {
|
||
data = mergeClassData(data, parentNode.data);
|
||
}
|
||
}
|
||
return renderClass(data.staticClass, data.class)
|
||
}
|
||
|
||
function mergeClassData (child, parent) {
|
||
return {
|
||
staticClass: concat(child.staticClass, parent.staticClass),
|
||
class: isDef(child.class)
|
||
? [child.class, parent.class]
|
||
: parent.class
|
||
}
|
||
}
|
||
|
||
function renderClass (
|
||
staticClass,
|
||
dynamicClass
|
||
) {
|
||
if (isDef(staticClass) || isDef(dynamicClass)) {
|
||
return concat(staticClass, stringifyClass(dynamicClass))
|
||
}
|
||
/* istanbul ignore next */
|
||
return ''
|
||
}
|
||
|
||
function concat (a, b) {
|
||
return a ? b ? (a + ' ' + b) : a : (b || '')
|
||
}
|
||
|
||
function stringifyClass (value) {
|
||
if (Array.isArray(value)) {
|
||
return stringifyArray(value)
|
||
}
|
||
if (isObject(value)) {
|
||
return stringifyObject(value)
|
||
}
|
||
if (typeof value === 'string') {
|
||
return value
|
||
}
|
||
/* istanbul ignore next */
|
||
return ''
|
||
}
|
||
|
||
function stringifyArray (value) {
|
||
var res = '';
|
||
var stringified;
|
||
for (var i = 0, l = value.length; i < l; i++) {
|
||
if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
|
||
if (res) { res += ' '; }
|
||
res += stringified;
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
function stringifyObject (value) {
|
||
var res = '';
|
||
for (var key in value) {
|
||
if (value[key]) {
|
||
if (res) { res += ' '; }
|
||
res += key;
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
/* */
|
||
|
||
var namespaceMap = {
|
||
svg: 'http://www.w3.org/2000/svg',
|
||
math: 'http://www.w3.org/1998/Math/MathML'
|
||
};
|
||
|
||
var isHTMLTag = makeMap(
|
||
'html,body,base,head,link,meta,style,title,' +
|
||
'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
|
||
'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
|
||
'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
|
||
's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
|
||
'embed,object,param,source,canvas,script,noscript,del,ins,' +
|
||
'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
|
||
'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
|
||
'output,progress,select,textarea,' +
|
||
'details,dialog,menu,menuitem,summary,' +
|
||
'content,element,shadow,template,blockquote,iframe,tfoot'
|
||
);
|
||
|
||
// this map is intentionally selective, only covering SVG elements that may
|
||
// contain child elements.
|
||
var isSVG = makeMap(
|
||
'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
|
||
'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
|
||
'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
|
||
true
|
||
);
|
||
|
||
var isPreTag = function (tag) { return tag === 'pre'; };
|
||
|
||
var isReservedTag = function (tag) {
|
||
return isHTMLTag(tag) || isSVG(tag)
|
||
};
|
||
|
||
function getTagNamespace (tag) {
|
||
if (isSVG(tag)) {
|
||
return 'svg'
|
||
}
|
||
// basic support for MathML
|
||
// note it doesn't support other MathML elements being component roots
|
||
if (tag === 'math') {
|
||
return 'math'
|
||
}
|
||
}
|
||
|
||
var unknownElementCache = Object.create(null);
|
||
function isUnknownElement (tag) {
|
||
/* istanbul ignore if */
|
||
if (!inBrowser) {
|
||
return true
|
||
}
|
||
if (isReservedTag(tag)) {
|
||
return false
|
||
}
|
||
tag = tag.toLowerCase();
|
||
/* istanbul ignore if */
|
||
if (unknownElementCache[tag] != null) {
|
||
return unknownElementCache[tag]
|
||
}
|
||
var el = document.createElement(tag);
|
||
if (tag.indexOf('-') > -1) {
|
||
// http://stackoverflow.com/a/28210364/1070244
|
||
return (unknownElementCache[tag] = (
|
||
el.constructor === window.HTMLUnknownElement ||
|
||
el.constructor === window.HTMLElement
|
||
))
|
||
} else {
|
||
return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))
|
||
}
|
||
}
|
||
|
||
var isTextInputType = makeMap('text,number,password,search,email,tel,url');
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Query an element selector if it's not an element already.
|
||
*/
|
||
function query (el) {
|
||
if (typeof el === 'string') {
|
||
var selected = document.querySelector(el);
|
||
if (!selected) {
|
||
"development" !== 'production' && warn(
|
||
'Cannot find element: ' + el
|
||
);
|
||
return document.createElement('div')
|
||
}
|
||
return selected
|
||
} else {
|
||
return el
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function createElement$1 (tagName, vnode) {
|
||
var elm = document.createElement(tagName);
|
||
if (tagName !== 'select') {
|
||
return elm
|
||
}
|
||
// false or null will remove the attribute but undefined will not
|
||
if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {
|
||
elm.setAttribute('multiple', 'multiple');
|
||
}
|
||
return elm
|
||
}
|
||
|
||
function createElementNS (namespace, tagName) {
|
||
return document.createElementNS(namespaceMap[namespace], tagName)
|
||
}
|
||
|
||
function createTextNode (text) {
|
||
return document.createTextNode(text)
|
||
}
|
||
|
||
function createComment (text) {
|
||
return document.createComment(text)
|
||
}
|
||
|
||
function insertBefore (parentNode, newNode, referenceNode) {
|
||
parentNode.insertBefore(newNode, referenceNode);
|
||
}
|
||
|
||
function removeChild (node, child) {
|
||
node.removeChild(child);
|
||
}
|
||
|
||
function appendChild (node, child) {
|
||
node.appendChild(child);
|
||
}
|
||
|
||
function parentNode (node) {
|
||
return node.parentNode
|
||
}
|
||
|
||
function nextSibling (node) {
|
||
return node.nextSibling
|
||
}
|
||
|
||
function tagName (node) {
|
||
return node.tagName
|
||
}
|
||
|
||
function setTextContent (node, text) {
|
||
node.textContent = text;
|
||
}
|
||
|
||
function setStyleScope (node, scopeId) {
|
||
node.setAttribute(scopeId, '');
|
||
}
|
||
|
||
|
||
var nodeOps = Object.freeze({
|
||
createElement: createElement$1,
|
||
createElementNS: createElementNS,
|
||
createTextNode: createTextNode,
|
||
createComment: createComment,
|
||
insertBefore: insertBefore,
|
||
removeChild: removeChild,
|
||
appendChild: appendChild,
|
||
parentNode: parentNode,
|
||
nextSibling: nextSibling,
|
||
tagName: tagName,
|
||
setTextContent: setTextContent,
|
||
setStyleScope: setStyleScope
|
||
});
|
||
|
||
/* */
|
||
|
||
var ref = {
|
||
create: function create (_, vnode) {
|
||
registerRef(vnode);
|
||
},
|
||
update: function update (oldVnode, vnode) {
|
||
if (oldVnode.data.ref !== vnode.data.ref) {
|
||
registerRef(oldVnode, true);
|
||
registerRef(vnode);
|
||
}
|
||
},
|
||
destroy: function destroy (vnode) {
|
||
registerRef(vnode, true);
|
||
}
|
||
}
|
||
|
||
function registerRef (vnode, isRemoval) {
|
||
var key = vnode.data.ref;
|
||
if (!isDef(key)) { return }
|
||
|
||
var vm = vnode.context;
|
||
var ref = vnode.componentInstance || vnode.elm;
|
||
var refs = vm.$refs;
|
||
if (isRemoval) {
|
||
if (Array.isArray(refs[key])) {
|
||
remove(refs[key], ref);
|
||
} else if (refs[key] === ref) {
|
||
refs[key] = undefined;
|
||
}
|
||
} else {
|
||
if (vnode.data.refInFor) {
|
||
if (!Array.isArray(refs[key])) {
|
||
refs[key] = [ref];
|
||
} else if (refs[key].indexOf(ref) < 0) {
|
||
// $flow-disable-line
|
||
refs[key].push(ref);
|
||
}
|
||
} else {
|
||
refs[key] = ref;
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Virtual DOM patching algorithm based on Snabbdom by
|
||
* Simon Friis Vindum (@paldepind)
|
||
* Licensed under the MIT License
|
||
* https://github.com/paldepind/snabbdom/blob/master/LICENSE
|
||
*
|
||
* modified by Evan You (@yyx990803)
|
||
*
|
||
* Not type-checking this because this file is perf-critical and the cost
|
||
* of making flow understand it is not worth it.
|
||
*/
|
||
|
||
var emptyNode = new VNode('', {}, []);
|
||
|
||
var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
|
||
|
||
function sameVnode (a, b) {
|
||
return (
|
||
a.key === b.key && (
|
||
(
|
||
a.tag === b.tag &&
|
||
a.isComment === b.isComment &&
|
||
isDef(a.data) === isDef(b.data) &&
|
||
sameInputType(a, b)
|
||
) || (
|
||
isTrue(a.isAsyncPlaceholder) &&
|
||
a.asyncFactory === b.asyncFactory &&
|
||
isUndef(b.asyncFactory.error)
|
||
)
|
||
)
|
||
)
|
||
}
|
||
|
||
function sameInputType (a, b) {
|
||
if (a.tag !== 'input') { return true }
|
||
var i;
|
||
var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;
|
||
var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;
|
||
return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)
|
||
}
|
||
|
||
function createKeyToOldIdx (children, beginIdx, endIdx) {
|
||
var i, key;
|
||
var map = {};
|
||
for (i = beginIdx; i <= endIdx; ++i) {
|
||
key = children[i].key;
|
||
if (isDef(key)) { map[key] = i; }
|
||
}
|
||
return map
|
||
}
|
||
|
||
function createPatchFunction (backend) {
|
||
var i, j;
|
||
var cbs = {};
|
||
|
||
var modules = backend.modules;
|
||
var nodeOps = backend.nodeOps;
|
||
|
||
for (i = 0; i < hooks.length; ++i) {
|
||
cbs[hooks[i]] = [];
|
||
for (j = 0; j < modules.length; ++j) {
|
||
if (isDef(modules[j][hooks[i]])) {
|
||
cbs[hooks[i]].push(modules[j][hooks[i]]);
|
||
}
|
||
}
|
||
}
|
||
|
||
function emptyNodeAt (elm) {
|
||
return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)
|
||
}
|
||
|
||
function createRmCb (childElm, listeners) {
|
||
function remove () {
|
||
if (--remove.listeners === 0) {
|
||
removeNode(childElm);
|
||
}
|
||
}
|
||
remove.listeners = listeners;
|
||
return remove
|
||
}
|
||
|
||
function removeNode (el) {
|
||
var parent = nodeOps.parentNode(el);
|
||
// element may have already been removed due to v-html / v-text
|
||
if (isDef(parent)) {
|
||
nodeOps.removeChild(parent, el);
|
||
}
|
||
}
|
||
|
||
function isUnknownElement$$1 (vnode, inVPre) {
|
||
return (
|
||
!inVPre &&
|
||
!vnode.ns &&
|
||
!(
|
||
config.ignoredElements.length &&
|
||
config.ignoredElements.some(function (ignore) {
|
||
return isRegExp(ignore)
|
||
? ignore.test(vnode.tag)
|
||
: ignore === vnode.tag
|
||
})
|
||
) &&
|
||
config.isUnknownElement(vnode.tag)
|
||
)
|
||
}
|
||
|
||
var creatingElmInVPre = 0;
|
||
|
||
function createElm (
|
||
vnode,
|
||
insertedVnodeQueue,
|
||
parentElm,
|
||
refElm,
|
||
nested,
|
||
ownerArray,
|
||
index
|
||
) {
|
||
if (isDef(vnode.elm) && isDef(ownerArray)) {
|
||
// This vnode was used in a previous render!
|
||
// now it's used as a new node, overwriting its elm would cause
|
||
// potential patch errors down the road when it's used as an insertion
|
||
// reference node. Instead, we clone the node on-demand before creating
|
||
// associated DOM element for it.
|
||
vnode = ownerArray[index] = cloneVNode(vnode);
|
||
}
|
||
|
||
vnode.isRootInsert = !nested; // for transition enter check
|
||
if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
|
||
return
|
||
}
|
||
|
||
var data = vnode.data;
|
||
var children = vnode.children;
|
||
var tag = vnode.tag;
|
||
if (isDef(tag)) {
|
||
if (true) {
|
||
if (data && data.pre) {
|
||
creatingElmInVPre++;
|
||
}
|
||
if (isUnknownElement$$1(vnode, creatingElmInVPre)) {
|
||
warn(
|
||
'Unknown custom element: <' + tag + '> - did you ' +
|
||
'register the component correctly? For recursive components, ' +
|
||
'make sure to provide the "name" option.',
|
||
vnode.context
|
||
);
|
||
}
|
||
}
|
||
|
||
vnode.elm = vnode.ns
|
||
? nodeOps.createElementNS(vnode.ns, tag)
|
||
: nodeOps.createElement(tag, vnode);
|
||
setScope(vnode);
|
||
|
||
/* istanbul ignore if */
|
||
{
|
||
createChildren(vnode, children, insertedVnodeQueue);
|
||
if (isDef(data)) {
|
||
invokeCreateHooks(vnode, insertedVnodeQueue);
|
||
}
|
||
insert(parentElm, vnode.elm, refElm);
|
||
}
|
||
|
||
if ("development" !== 'production' && data && data.pre) {
|
||
creatingElmInVPre--;
|
||
}
|
||
} else if (isTrue(vnode.isComment)) {
|
||
vnode.elm = nodeOps.createComment(vnode.text);
|
||
insert(parentElm, vnode.elm, refElm);
|
||
} else {
|
||
vnode.elm = nodeOps.createTextNode(vnode.text);
|
||
insert(parentElm, vnode.elm, refElm);
|
||
}
|
||
}
|
||
|
||
function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
|
||
var i = vnode.data;
|
||
if (isDef(i)) {
|
||
var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
|
||
if (isDef(i = i.hook) && isDef(i = i.init)) {
|
||
i(vnode, false /* hydrating */, parentElm, refElm);
|
||
}
|
||
// after calling the init hook, if the vnode is a child component
|
||
// it should've created a child instance and mounted it. the child
|
||
// component also has set the placeholder vnode's elm.
|
||
// in that case we can just return the element and be done.
|
||
if (isDef(vnode.componentInstance)) {
|
||
initComponent(vnode, insertedVnodeQueue);
|
||
if (isTrue(isReactivated)) {
|
||
reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
|
||
}
|
||
return true
|
||
}
|
||
}
|
||
}
|
||
|
||
function initComponent (vnode, insertedVnodeQueue) {
|
||
if (isDef(vnode.data.pendingInsert)) {
|
||
insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
|
||
vnode.data.pendingInsert = null;
|
||
}
|
||
vnode.elm = vnode.componentInstance.$el;
|
||
if (isPatchable(vnode)) {
|
||
invokeCreateHooks(vnode, insertedVnodeQueue);
|
||
setScope(vnode);
|
||
} else {
|
||
// empty component root.
|
||
// skip all element-related modules except for ref (#3455)
|
||
registerRef(vnode);
|
||
// make sure to invoke the insert hook
|
||
insertedVnodeQueue.push(vnode);
|
||
}
|
||
}
|
||
|
||
function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {
|
||
var i;
|
||
// hack for #4339: a reactivated component with inner transition
|
||
// does not trigger because the inner node's created hooks are not called
|
||
// again. It's not ideal to involve module-specific logic in here but
|
||
// there doesn't seem to be a better way to do it.
|
||
var innerNode = vnode;
|
||
while (innerNode.componentInstance) {
|
||
innerNode = innerNode.componentInstance._vnode;
|
||
if (isDef(i = innerNode.data) && isDef(i = i.transition)) {
|
||
for (i = 0; i < cbs.activate.length; ++i) {
|
||
cbs.activate[i](emptyNode, innerNode);
|
||
}
|
||
insertedVnodeQueue.push(innerNode);
|
||
break
|
||
}
|
||
}
|
||
// unlike a newly created component,
|
||
// a reactivated keep-alive component doesn't insert itself
|
||
insert(parentElm, vnode.elm, refElm);
|
||
}
|
||
|
||
function insert (parent, elm, ref$$1) {
|
||
if (isDef(parent)) {
|
||
if (isDef(ref$$1)) {
|
||
if (ref$$1.parentNode === parent) {
|
||
nodeOps.insertBefore(parent, elm, ref$$1);
|
||
}
|
||
} else {
|
||
nodeOps.appendChild(parent, elm);
|
||
}
|
||
}
|
||
}
|
||
|
||
function createChildren (vnode, children, insertedVnodeQueue) {
|
||
if (Array.isArray(children)) {
|
||
if (true) {
|
||
checkDuplicateKeys(children);
|
||
}
|
||
for (var i = 0; i < children.length; ++i) {
|
||
createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);
|
||
}
|
||
} else if (isPrimitive(vnode.text)) {
|
||
nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
|
||
}
|
||
}
|
||
|
||
function isPatchable (vnode) {
|
||
while (vnode.componentInstance) {
|
||
vnode = vnode.componentInstance._vnode;
|
||
}
|
||
return isDef(vnode.tag)
|
||
}
|
||
|
||
function invokeCreateHooks (vnode, insertedVnodeQueue) {
|
||
for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {
|
||
cbs.create[i$1](emptyNode, vnode);
|
||
}
|
||
i = vnode.data.hook; // Reuse variable
|
||
if (isDef(i)) {
|
||
if (isDef(i.create)) { i.create(emptyNode, vnode); }
|
||
if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }
|
||
}
|
||
}
|
||
|
||
// set scope id attribute for scoped CSS.
|
||
// this is implemented as a special case to avoid the overhead
|
||
// of going through the normal attribute patching process.
|
||
function setScope (vnode) {
|
||
var i;
|
||
if (isDef(i = vnode.fnScopeId)) {
|
||
nodeOps.setStyleScope(vnode.elm, i);
|
||
} else {
|
||
var ancestor = vnode;
|
||
while (ancestor) {
|
||
if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {
|
||
nodeOps.setStyleScope(vnode.elm, i);
|
||
}
|
||
ancestor = ancestor.parent;
|
||
}
|
||
}
|
||
// for slot content they should also get the scopeId from the host instance.
|
||
if (isDef(i = activeInstance) &&
|
||
i !== vnode.context &&
|
||
i !== vnode.fnContext &&
|
||
isDef(i = i.$options._scopeId)
|
||
) {
|
||
nodeOps.setStyleScope(vnode.elm, i);
|
||
}
|
||
}
|
||
|
||
function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
|
||
for (; startIdx <= endIdx; ++startIdx) {
|
||
createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
|
||
}
|
||
}
|
||
|
||
function invokeDestroyHook (vnode) {
|
||
var i, j;
|
||
var data = vnode.data;
|
||
if (isDef(data)) {
|
||
if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }
|
||
for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }
|
||
}
|
||
if (isDef(i = vnode.children)) {
|
||
for (j = 0; j < vnode.children.length; ++j) {
|
||
invokeDestroyHook(vnode.children[j]);
|
||
}
|
||
}
|
||
}
|
||
|
||
function removeVnodes (parentElm, vnodes, startIdx, endIdx) {
|
||
for (; startIdx <= endIdx; ++startIdx) {
|
||
var ch = vnodes[startIdx];
|
||
if (isDef(ch)) {
|
||
if (isDef(ch.tag)) {
|
||
removeAndInvokeRemoveHook(ch);
|
||
invokeDestroyHook(ch);
|
||
} else { // Text node
|
||
removeNode(ch.elm);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function removeAndInvokeRemoveHook (vnode, rm) {
|
||
if (isDef(rm) || isDef(vnode.data)) {
|
||
var i;
|
||
var listeners = cbs.remove.length + 1;
|
||
if (isDef(rm)) {
|
||
// we have a recursively passed down rm callback
|
||
// increase the listeners count
|
||
rm.listeners += listeners;
|
||
} else {
|
||
// directly removing
|
||
rm = createRmCb(vnode.elm, listeners);
|
||
}
|
||
// recursively invoke hooks on child component root node
|
||
if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {
|
||
removeAndInvokeRemoveHook(i, rm);
|
||
}
|
||
for (i = 0; i < cbs.remove.length; ++i) {
|
||
cbs.remove[i](vnode, rm);
|
||
}
|
||
if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {
|
||
i(vnode, rm);
|
||
} else {
|
||
rm();
|
||
}
|
||
} else {
|
||
removeNode(vnode.elm);
|
||
}
|
||
}
|
||
|
||
function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
|
||
var oldStartIdx = 0;
|
||
var newStartIdx = 0;
|
||
var oldEndIdx = oldCh.length - 1;
|
||
var oldStartVnode = oldCh[0];
|
||
var oldEndVnode = oldCh[oldEndIdx];
|
||
var newEndIdx = newCh.length - 1;
|
||
var newStartVnode = newCh[0];
|
||
var newEndVnode = newCh[newEndIdx];
|
||
var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
|
||
|
||
// removeOnly is a special flag used only by <transition-group>
|
||
// to ensure removed elements stay in correct relative positions
|
||
// during leaving transitions
|
||
var canMove = !removeOnly;
|
||
|
||
if (true) {
|
||
checkDuplicateKeys(newCh);
|
||
}
|
||
|
||
while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
|
||
if (isUndef(oldStartVnode)) {
|
||
oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
|
||
} else if (isUndef(oldEndVnode)) {
|
||
oldEndVnode = oldCh[--oldEndIdx];
|
||
} else if (sameVnode(oldStartVnode, newStartVnode)) {
|
||
patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);
|
||
oldStartVnode = oldCh[++oldStartIdx];
|
||
newStartVnode = newCh[++newStartIdx];
|
||
} else if (sameVnode(oldEndVnode, newEndVnode)) {
|
||
patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);
|
||
oldEndVnode = oldCh[--oldEndIdx];
|
||
newEndVnode = newCh[--newEndIdx];
|
||
} else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right
|
||
patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);
|
||
canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
|
||
oldStartVnode = oldCh[++oldStartIdx];
|
||
newEndVnode = newCh[--newEndIdx];
|
||
} else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left
|
||
patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);
|
||
canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
|
||
oldEndVnode = oldCh[--oldEndIdx];
|
||
newStartVnode = newCh[++newStartIdx];
|
||
} else {
|
||
if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }
|
||
idxInOld = isDef(newStartVnode.key)
|
||
? oldKeyToIdx[newStartVnode.key]
|
||
: findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
|
||
if (isUndef(idxInOld)) { // New element
|
||
createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
|
||
} else {
|
||
vnodeToMove = oldCh[idxInOld];
|
||
if (sameVnode(vnodeToMove, newStartVnode)) {
|
||
patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue);
|
||
oldCh[idxInOld] = undefined;
|
||
canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
|
||
} else {
|
||
// same key but different element. treat as new element
|
||
createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
|
||
}
|
||
}
|
||
newStartVnode = newCh[++newStartIdx];
|
||
}
|
||
}
|
||
if (oldStartIdx > oldEndIdx) {
|
||
refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
|
||
addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
|
||
} else if (newStartIdx > newEndIdx) {
|
||
removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);
|
||
}
|
||
}
|
||
|
||
function checkDuplicateKeys (children) {
|
||
var seenKeys = {};
|
||
for (var i = 0; i < children.length; i++) {
|
||
var vnode = children[i];
|
||
var key = vnode.key;
|
||
if (isDef(key)) {
|
||
if (seenKeys[key]) {
|
||
warn(
|
||
("Duplicate keys detected: '" + key + "'. This may cause an update error."),
|
||
vnode.context
|
||
);
|
||
} else {
|
||
seenKeys[key] = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function findIdxInOld (node, oldCh, start, end) {
|
||
for (var i = start; i < end; i++) {
|
||
var c = oldCh[i];
|
||
if (isDef(c) && sameVnode(node, c)) { return i }
|
||
}
|
||
}
|
||
|
||
function patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {
|
||
if (oldVnode === vnode) {
|
||
return
|
||
}
|
||
|
||
var elm = vnode.elm = oldVnode.elm;
|
||
|
||
if (isTrue(oldVnode.isAsyncPlaceholder)) {
|
||
if (isDef(vnode.asyncFactory.resolved)) {
|
||
hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
|
||
} else {
|
||
vnode.isAsyncPlaceholder = true;
|
||
}
|
||
return
|
||
}
|
||
|
||
// reuse element for static trees.
|
||
// note we only do this if the vnode is cloned -
|
||
// if the new node is not cloned it means the render functions have been
|
||
// reset by the hot-reload-api and we need to do a proper re-render.
|
||
if (isTrue(vnode.isStatic) &&
|
||
isTrue(oldVnode.isStatic) &&
|
||
vnode.key === oldVnode.key &&
|
||
(isTrue(vnode.isCloned) || isTrue(vnode.isOnce))
|
||
) {
|
||
vnode.componentInstance = oldVnode.componentInstance;
|
||
return
|
||
}
|
||
|
||
var i;
|
||
var data = vnode.data;
|
||
if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {
|
||
i(oldVnode, vnode);
|
||
}
|
||
|
||
var oldCh = oldVnode.children;
|
||
var ch = vnode.children;
|
||
if (isDef(data) && isPatchable(vnode)) {
|
||
for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }
|
||
if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }
|
||
}
|
||
if (isUndef(vnode.text)) {
|
||
if (isDef(oldCh) && isDef(ch)) {
|
||
if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }
|
||
} else if (isDef(ch)) {
|
||
if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }
|
||
addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
|
||
} else if (isDef(oldCh)) {
|
||
removeVnodes(elm, oldCh, 0, oldCh.length - 1);
|
||
} else if (isDef(oldVnode.text)) {
|
||
nodeOps.setTextContent(elm, '');
|
||
}
|
||
} else if (oldVnode.text !== vnode.text) {
|
||
nodeOps.setTextContent(elm, vnode.text);
|
||
}
|
||
if (isDef(data)) {
|
||
if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }
|
||
}
|
||
}
|
||
|
||
function invokeInsertHook (vnode, queue, initial) {
|
||
// delay insert hooks for component root nodes, invoke them after the
|
||
// element is really inserted
|
||
if (isTrue(initial) && isDef(vnode.parent)) {
|
||
vnode.parent.data.pendingInsert = queue;
|
||
} else {
|
||
for (var i = 0; i < queue.length; ++i) {
|
||
queue[i].data.hook.insert(queue[i]);
|
||
}
|
||
}
|
||
}
|
||
|
||
var hydrationBailed = false;
|
||
// list of modules that can skip create hook during hydration because they
|
||
// are already rendered on the client or has no need for initialization
|
||
// Note: style is excluded because it relies on initial clone for future
|
||
// deep updates (#7063).
|
||
var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
|
||
|
||
// Note: this is a browser-only function so we can assume elms are DOM nodes.
|
||
function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {
|
||
var i;
|
||
var tag = vnode.tag;
|
||
var data = vnode.data;
|
||
var children = vnode.children;
|
||
inVPre = inVPre || (data && data.pre);
|
||
vnode.elm = elm;
|
||
|
||
if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
|
||
vnode.isAsyncPlaceholder = true;
|
||
return true
|
||
}
|
||
// assert node match
|
||
if (true) {
|
||
if (!assertNodeMatch(elm, vnode, inVPre)) {
|
||
return false
|
||
}
|
||
}
|
||
if (isDef(data)) {
|
||
if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }
|
||
if (isDef(i = vnode.componentInstance)) {
|
||
// child component. it should have hydrated its own tree.
|
||
initComponent(vnode, insertedVnodeQueue);
|
||
return true
|
||
}
|
||
}
|
||
if (isDef(tag)) {
|
||
if (isDef(children)) {
|
||
// empty element, allow client to pick up and populate children
|
||
if (!elm.hasChildNodes()) {
|
||
createChildren(vnode, children, insertedVnodeQueue);
|
||
} else {
|
||
// v-html and domProps: innerHTML
|
||
if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {
|
||
if (i !== elm.innerHTML) {
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' &&
|
||
typeof console !== 'undefined' &&
|
||
!hydrationBailed
|
||
) {
|
||
hydrationBailed = true;
|
||
console.warn('Parent: ', elm);
|
||
console.warn('server innerHTML: ', i);
|
||
console.warn('client innerHTML: ', elm.innerHTML);
|
||
}
|
||
return false
|
||
}
|
||
} else {
|
||
// iterate and compare children lists
|
||
var childrenMatch = true;
|
||
var childNode = elm.firstChild;
|
||
for (var i$1 = 0; i$1 < children.length; i$1++) {
|
||
if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {
|
||
childrenMatch = false;
|
||
break
|
||
}
|
||
childNode = childNode.nextSibling;
|
||
}
|
||
// if childNode is not null, it means the actual childNodes list is
|
||
// longer than the virtual children list.
|
||
if (!childrenMatch || childNode) {
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' &&
|
||
typeof console !== 'undefined' &&
|
||
!hydrationBailed
|
||
) {
|
||
hydrationBailed = true;
|
||
console.warn('Parent: ', elm);
|
||
console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
|
||
}
|
||
return false
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (isDef(data)) {
|
||
var fullInvoke = false;
|
||
for (var key in data) {
|
||
if (!isRenderedModule(key)) {
|
||
fullInvoke = true;
|
||
invokeCreateHooks(vnode, insertedVnodeQueue);
|
||
break
|
||
}
|
||
}
|
||
if (!fullInvoke && data['class']) {
|
||
// ensure collecting deps for deep class bindings for future updates
|
||
traverse(data['class']);
|
||
}
|
||
}
|
||
} else if (elm.data !== vnode.text) {
|
||
elm.data = vnode.text;
|
||
}
|
||
return true
|
||
}
|
||
|
||
function assertNodeMatch (node, vnode, inVPre) {
|
||
if (isDef(vnode.tag)) {
|
||
return vnode.tag.indexOf('vue-component') === 0 || (
|
||
!isUnknownElement$$1(vnode, inVPre) &&
|
||
vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())
|
||
)
|
||
} else {
|
||
return node.nodeType === (vnode.isComment ? 8 : 3)
|
||
}
|
||
}
|
||
|
||
return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {
|
||
if (isUndef(vnode)) {
|
||
if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }
|
||
return
|
||
}
|
||
|
||
var isInitialPatch = false;
|
||
var insertedVnodeQueue = [];
|
||
|
||
if (isUndef(oldVnode)) {
|
||
// empty mount (likely as component), create new root element
|
||
isInitialPatch = true;
|
||
createElm(vnode, insertedVnodeQueue, parentElm, refElm);
|
||
} else {
|
||
var isRealElement = isDef(oldVnode.nodeType);
|
||
if (!isRealElement && sameVnode(oldVnode, vnode)) {
|
||
// patch existing root node
|
||
patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly);
|
||
} else {
|
||
if (isRealElement) {
|
||
// mounting to a real element
|
||
// check if this is server-rendered content and if we can perform
|
||
// a successful hydration.
|
||
if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
|
||
oldVnode.removeAttribute(SSR_ATTR);
|
||
hydrating = true;
|
||
}
|
||
if (isTrue(hydrating)) {
|
||
if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
|
||
invokeInsertHook(vnode, insertedVnodeQueue, true);
|
||
return oldVnode
|
||
} else if (true) {
|
||
warn(
|
||
'The client-side rendered virtual DOM tree is not matching ' +
|
||
'server-rendered content. This is likely caused by incorrect ' +
|
||
'HTML markup, for example nesting block-level elements inside ' +
|
||
'<p>, or missing <tbody>. Bailing hydration and performing ' +
|
||
'full client-side render.'
|
||
);
|
||
}
|
||
}
|
||
// either not server-rendered, or hydration failed.
|
||
// create an empty node and replace it
|
||
oldVnode = emptyNodeAt(oldVnode);
|
||
}
|
||
|
||
// replacing existing element
|
||
var oldElm = oldVnode.elm;
|
||
var parentElm$1 = nodeOps.parentNode(oldElm);
|
||
|
||
// create new node
|
||
createElm(
|
||
vnode,
|
||
insertedVnodeQueue,
|
||
// extremely rare edge case: do not insert if old element is in a
|
||
// leaving transition. Only happens when combining transition +
|
||
// keep-alive + HOCs. (#4590)
|
||
oldElm._leaveCb ? null : parentElm$1,
|
||
nodeOps.nextSibling(oldElm)
|
||
);
|
||
|
||
// update parent placeholder node element, recursively
|
||
if (isDef(vnode.parent)) {
|
||
var ancestor = vnode.parent;
|
||
var patchable = isPatchable(vnode);
|
||
while (ancestor) {
|
||
for (var i = 0; i < cbs.destroy.length; ++i) {
|
||
cbs.destroy[i](ancestor);
|
||
}
|
||
ancestor.elm = vnode.elm;
|
||
if (patchable) {
|
||
for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {
|
||
cbs.create[i$1](emptyNode, ancestor);
|
||
}
|
||
// #6513
|
||
// invoke insert hooks that may have been merged by create hooks.
|
||
// e.g. for directives that uses the "inserted" hook.
|
||
var insert = ancestor.data.hook.insert;
|
||
if (insert.merged) {
|
||
// start at index 1 to avoid re-invoking component mounted hook
|
||
for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {
|
||
insert.fns[i$2]();
|
||
}
|
||
}
|
||
} else {
|
||
registerRef(ancestor);
|
||
}
|
||
ancestor = ancestor.parent;
|
||
}
|
||
}
|
||
|
||
// destroy old node
|
||
if (isDef(parentElm$1)) {
|
||
removeVnodes(parentElm$1, [oldVnode], 0, 0);
|
||
} else if (isDef(oldVnode.tag)) {
|
||
invokeDestroyHook(oldVnode);
|
||
}
|
||
}
|
||
}
|
||
|
||
invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
|
||
return vnode.elm
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var directives = {
|
||
create: updateDirectives,
|
||
update: updateDirectives,
|
||
destroy: function unbindDirectives (vnode) {
|
||
updateDirectives(vnode, emptyNode);
|
||
}
|
||
}
|
||
|
||
function updateDirectives (oldVnode, vnode) {
|
||
if (oldVnode.data.directives || vnode.data.directives) {
|
||
_update(oldVnode, vnode);
|
||
}
|
||
}
|
||
|
||
function _update (oldVnode, vnode) {
|
||
var isCreate = oldVnode === emptyNode;
|
||
var isDestroy = vnode === emptyNode;
|
||
var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);
|
||
var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);
|
||
|
||
var dirsWithInsert = [];
|
||
var dirsWithPostpatch = [];
|
||
|
||
var key, oldDir, dir;
|
||
for (key in newDirs) {
|
||
oldDir = oldDirs[key];
|
||
dir = newDirs[key];
|
||
if (!oldDir) {
|
||
// new directive, bind
|
||
callHook$1(dir, 'bind', vnode, oldVnode);
|
||
if (dir.def && dir.def.inserted) {
|
||
dirsWithInsert.push(dir);
|
||
}
|
||
} else {
|
||
// existing directive, update
|
||
dir.oldValue = oldDir.value;
|
||
callHook$1(dir, 'update', vnode, oldVnode);
|
||
if (dir.def && dir.def.componentUpdated) {
|
||
dirsWithPostpatch.push(dir);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (dirsWithInsert.length) {
|
||
var callInsert = function () {
|
||
for (var i = 0; i < dirsWithInsert.length; i++) {
|
||
callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);
|
||
}
|
||
};
|
||
if (isCreate) {
|
||
mergeVNodeHook(vnode, 'insert', callInsert);
|
||
} else {
|
||
callInsert();
|
||
}
|
||
}
|
||
|
||
if (dirsWithPostpatch.length) {
|
||
mergeVNodeHook(vnode, 'postpatch', function () {
|
||
for (var i = 0; i < dirsWithPostpatch.length; i++) {
|
||
callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
|
||
}
|
||
});
|
||
}
|
||
|
||
if (!isCreate) {
|
||
for (key in oldDirs) {
|
||
if (!newDirs[key]) {
|
||
// no longer present, unbind
|
||
callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
var emptyModifiers = Object.create(null);
|
||
|
||
function normalizeDirectives$1 (
|
||
dirs,
|
||
vm
|
||
) {
|
||
var res = Object.create(null);
|
||
if (!dirs) {
|
||
// $flow-disable-line
|
||
return res
|
||
}
|
||
var i, dir;
|
||
for (i = 0; i < dirs.length; i++) {
|
||
dir = dirs[i];
|
||
if (!dir.modifiers) {
|
||
// $flow-disable-line
|
||
dir.modifiers = emptyModifiers;
|
||
}
|
||
res[getRawDirName(dir)] = dir;
|
||
dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);
|
||
}
|
||
// $flow-disable-line
|
||
return res
|
||
}
|
||
|
||
function getRawDirName (dir) {
|
||
return dir.rawName || ((dir.name) + "." + (Object.keys(dir.modifiers || {}).join('.')))
|
||
}
|
||
|
||
function callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {
|
||
var fn = dir.def && dir.def[hook];
|
||
if (fn) {
|
||
try {
|
||
fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
|
||
} catch (e) {
|
||
handleError(e, vnode.context, ("directive " + (dir.name) + " " + hook + " hook"));
|
||
}
|
||
}
|
||
}
|
||
|
||
var baseModules = [
|
||
ref,
|
||
directives
|
||
]
|
||
|
||
/* */
|
||
|
||
function updateAttrs (oldVnode, vnode) {
|
||
var opts = vnode.componentOptions;
|
||
if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
|
||
return
|
||
}
|
||
if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
|
||
return
|
||
}
|
||
var key, cur, old;
|
||
var elm = vnode.elm;
|
||
var oldAttrs = oldVnode.data.attrs || {};
|
||
var attrs = vnode.data.attrs || {};
|
||
// clone observed objects, as the user probably wants to mutate it
|
||
if (isDef(attrs.__ob__)) {
|
||
attrs = vnode.data.attrs = extend({}, attrs);
|
||
}
|
||
|
||
for (key in attrs) {
|
||
cur = attrs[key];
|
||
old = oldAttrs[key];
|
||
if (old !== cur) {
|
||
setAttr(elm, key, cur);
|
||
}
|
||
}
|
||
// #4391: in IE9, setting type can reset value for input[type=radio]
|
||
// #6666: IE/Edge forces progress value down to 1 before setting a max
|
||
/* istanbul ignore if */
|
||
if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
|
||
setAttr(elm, 'value', attrs.value);
|
||
}
|
||
for (key in oldAttrs) {
|
||
if (isUndef(attrs[key])) {
|
||
if (isXlink(key)) {
|
||
elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
|
||
} else if (!isEnumeratedAttr(key)) {
|
||
elm.removeAttribute(key);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function setAttr (el, key, value) {
|
||
if (el.tagName.indexOf('-') > -1) {
|
||
baseSetAttr(el, key, value);
|
||
} else if (isBooleanAttr(key)) {
|
||
// set attribute for blank value
|
||
// e.g. <option disabled>Select one</option>
|
||
if (isFalsyAttrValue(value)) {
|
||
el.removeAttribute(key);
|
||
} else {
|
||
// technically allowfullscreen is a boolean attribute for <iframe>,
|
||
// but Flash expects a value of "true" when used on <embed> tag
|
||
value = key === 'allowfullscreen' && el.tagName === 'EMBED'
|
||
? 'true'
|
||
: key;
|
||
el.setAttribute(key, value);
|
||
}
|
||
} else if (isEnumeratedAttr(key)) {
|
||
el.setAttribute(key, isFalsyAttrValue(value) || value === 'false' ? 'false' : 'true');
|
||
} else if (isXlink(key)) {
|
||
if (isFalsyAttrValue(value)) {
|
||
el.removeAttributeNS(xlinkNS, getXlinkProp(key));
|
||
} else {
|
||
el.setAttributeNS(xlinkNS, key, value);
|
||
}
|
||
} else {
|
||
baseSetAttr(el, key, value);
|
||
}
|
||
}
|
||
|
||
function baseSetAttr (el, key, value) {
|
||
if (isFalsyAttrValue(value)) {
|
||
el.removeAttribute(key);
|
||
} else {
|
||
// #7138: IE10 & 11 fires input event when setting placeholder on
|
||
// <textarea>... block the first input event and remove the blocker
|
||
// immediately.
|
||
/* istanbul ignore if */
|
||
if (
|
||
isIE && !isIE9 &&
|
||
el.tagName === 'TEXTAREA' &&
|
||
key === 'placeholder' && !el.__ieph
|
||
) {
|
||
var blocker = function (e) {
|
||
e.stopImmediatePropagation();
|
||
el.removeEventListener('input', blocker);
|
||
};
|
||
el.addEventListener('input', blocker);
|
||
// $flow-disable-line
|
||
el.__ieph = true; /* IE placeholder patched */
|
||
}
|
||
el.setAttribute(key, value);
|
||
}
|
||
}
|
||
|
||
var attrs = {
|
||
create: updateAttrs,
|
||
update: updateAttrs
|
||
}
|
||
|
||
/* */
|
||
|
||
function updateClass (oldVnode, vnode) {
|
||
var el = vnode.elm;
|
||
var data = vnode.data;
|
||
var oldData = oldVnode.data;
|
||
if (
|
||
isUndef(data.staticClass) &&
|
||
isUndef(data.class) && (
|
||
isUndef(oldData) || (
|
||
isUndef(oldData.staticClass) &&
|
||
isUndef(oldData.class)
|
||
)
|
||
)
|
||
) {
|
||
return
|
||
}
|
||
|
||
var cls = genClassForVnode(vnode);
|
||
|
||
// handle transition classes
|
||
var transitionClass = el._transitionClasses;
|
||
if (isDef(transitionClass)) {
|
||
cls = concat(cls, stringifyClass(transitionClass));
|
||
}
|
||
|
||
// set the class
|
||
if (cls !== el._prevClass) {
|
||
el.setAttribute('class', cls);
|
||
el._prevClass = cls;
|
||
}
|
||
}
|
||
|
||
var klass = {
|
||
create: updateClass,
|
||
update: updateClass
|
||
}
|
||
|
||
/* */
|
||
|
||
var validDivisionCharRE = /[\w).+\-_$\]]/;
|
||
|
||
function parseFilters (exp) {
|
||
var inSingle = false;
|
||
var inDouble = false;
|
||
var inTemplateString = false;
|
||
var inRegex = false;
|
||
var curly = 0;
|
||
var square = 0;
|
||
var paren = 0;
|
||
var lastFilterIndex = 0;
|
||
var c, prev, i, expression, filters;
|
||
|
||
for (i = 0; i < exp.length; i++) {
|
||
prev = c;
|
||
c = exp.charCodeAt(i);
|
||
if (inSingle) {
|
||
if (c === 0x27 && prev !== 0x5C) { inSingle = false; }
|
||
} else if (inDouble) {
|
||
if (c === 0x22 && prev !== 0x5C) { inDouble = false; }
|
||
} else if (inTemplateString) {
|
||
if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }
|
||
} else if (inRegex) {
|
||
if (c === 0x2f && prev !== 0x5C) { inRegex = false; }
|
||
} else if (
|
||
c === 0x7C && // pipe
|
||
exp.charCodeAt(i + 1) !== 0x7C &&
|
||
exp.charCodeAt(i - 1) !== 0x7C &&
|
||
!curly && !square && !paren
|
||
) {
|
||
if (expression === undefined) {
|
||
// first filter, end of expression
|
||
lastFilterIndex = i + 1;
|
||
expression = exp.slice(0, i).trim();
|
||
} else {
|
||
pushFilter();
|
||
}
|
||
} else {
|
||
switch (c) {
|
||
case 0x22: inDouble = true; break // "
|
||
case 0x27: inSingle = true; break // '
|
||
case 0x60: inTemplateString = true; break // `
|
||
case 0x28: paren++; break // (
|
||
case 0x29: paren--; break // )
|
||
case 0x5B: square++; break // [
|
||
case 0x5D: square--; break // ]
|
||
case 0x7B: curly++; break // {
|
||
case 0x7D: curly--; break // }
|
||
}
|
||
if (c === 0x2f) { // /
|
||
var j = i - 1;
|
||
var p = (void 0);
|
||
// find first non-whitespace prev char
|
||
for (; j >= 0; j--) {
|
||
p = exp.charAt(j);
|
||
if (p !== ' ') { break }
|
||
}
|
||
if (!p || !validDivisionCharRE.test(p)) {
|
||
inRegex = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (expression === undefined) {
|
||
expression = exp.slice(0, i).trim();
|
||
} else if (lastFilterIndex !== 0) {
|
||
pushFilter();
|
||
}
|
||
|
||
function pushFilter () {
|
||
(filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
|
||
lastFilterIndex = i + 1;
|
||
}
|
||
|
||
if (filters) {
|
||
for (i = 0; i < filters.length; i++) {
|
||
expression = wrapFilter(expression, filters[i]);
|
||
}
|
||
}
|
||
|
||
return expression
|
||
}
|
||
|
||
function wrapFilter (exp, filter) {
|
||
var i = filter.indexOf('(');
|
||
if (i < 0) {
|
||
// _f: resolveFilter
|
||
return ("_f(\"" + filter + "\")(" + exp + ")")
|
||
} else {
|
||
var name = filter.slice(0, i);
|
||
var args = filter.slice(i + 1);
|
||
return ("_f(\"" + name + "\")(" + exp + (args !== ')' ? ',' + args : args))
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function baseWarn (msg) {
|
||
console.error(("[Vue compiler]: " + msg));
|
||
}
|
||
|
||
function pluckModuleFunction (
|
||
modules,
|
||
key
|
||
) {
|
||
return modules
|
||
? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })
|
||
: []
|
||
}
|
||
|
||
function addProp (el, name, value) {
|
||
(el.props || (el.props = [])).push({ name: name, value: value });
|
||
el.plain = false;
|
||
}
|
||
|
||
function addAttr (el, name, value) {
|
||
(el.attrs || (el.attrs = [])).push({ name: name, value: value });
|
||
el.plain = false;
|
||
}
|
||
|
||
// add a raw attr (use this in preTransforms)
|
||
function addRawAttr (el, name, value) {
|
||
el.attrsMap[name] = value;
|
||
el.attrsList.push({ name: name, value: value });
|
||
}
|
||
|
||
function addDirective (
|
||
el,
|
||
name,
|
||
rawName,
|
||
value,
|
||
arg,
|
||
modifiers
|
||
) {
|
||
(el.directives || (el.directives = [])).push({ name: name, rawName: rawName, value: value, arg: arg, modifiers: modifiers });
|
||
el.plain = false;
|
||
}
|
||
|
||
function addHandler (
|
||
el,
|
||
name,
|
||
value,
|
||
modifiers,
|
||
important,
|
||
warn
|
||
) {
|
||
modifiers = modifiers || emptyObject;
|
||
// warn prevent and passive modifier
|
||
/* istanbul ignore if */
|
||
if (
|
||
"development" !== 'production' && warn &&
|
||
modifiers.prevent && modifiers.passive
|
||
) {
|
||
warn(
|
||
'passive and prevent can\'t be used together. ' +
|
||
'Passive handler can\'t prevent default event.'
|
||
);
|
||
}
|
||
|
||
// check capture modifier
|
||
if (modifiers.capture) {
|
||
delete modifiers.capture;
|
||
name = '!' + name; // mark the event as captured
|
||
}
|
||
if (modifiers.once) {
|
||
delete modifiers.once;
|
||
name = '~' + name; // mark the event as once
|
||
}
|
||
/* istanbul ignore if */
|
||
if (modifiers.passive) {
|
||
delete modifiers.passive;
|
||
name = '&' + name; // mark the event as passive
|
||
}
|
||
|
||
// normalize click.right and click.middle since they don't actually fire
|
||
// this is technically browser-specific, but at least for now browsers are
|
||
// the only target envs that have right/middle clicks.
|
||
if (name === 'click') {
|
||
if (modifiers.right) {
|
||
name = 'contextmenu';
|
||
delete modifiers.right;
|
||
} else if (modifiers.middle) {
|
||
name = 'mouseup';
|
||
}
|
||
}
|
||
|
||
var events;
|
||
if (modifiers.native) {
|
||
delete modifiers.native;
|
||
events = el.nativeEvents || (el.nativeEvents = {});
|
||
} else {
|
||
events = el.events || (el.events = {});
|
||
}
|
||
|
||
var newHandler = {
|
||
value: value.trim()
|
||
};
|
||
if (modifiers !== emptyObject) {
|
||
newHandler.modifiers = modifiers;
|
||
}
|
||
|
||
var handlers = events[name];
|
||
/* istanbul ignore if */
|
||
if (Array.isArray(handlers)) {
|
||
important ? handlers.unshift(newHandler) : handlers.push(newHandler);
|
||
} else if (handlers) {
|
||
events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
|
||
} else {
|
||
events[name] = newHandler;
|
||
}
|
||
|
||
el.plain = false;
|
||
}
|
||
|
||
function getBindingAttr (
|
||
el,
|
||
name,
|
||
getStatic
|
||
) {
|
||
var dynamicValue =
|
||
getAndRemoveAttr(el, ':' + name) ||
|
||
getAndRemoveAttr(el, 'v-bind:' + name);
|
||
if (dynamicValue != null) {
|
||
return parseFilters(dynamicValue)
|
||
} else if (getStatic !== false) {
|
||
var staticValue = getAndRemoveAttr(el, name);
|
||
if (staticValue != null) {
|
||
return JSON.stringify(staticValue)
|
||
}
|
||
}
|
||
}
|
||
|
||
// note: this only removes the attr from the Array (attrsList) so that it
|
||
// doesn't get processed by processAttrs.
|
||
// By default it does NOT remove it from the map (attrsMap) because the map is
|
||
// needed during codegen.
|
||
function getAndRemoveAttr (
|
||
el,
|
||
name,
|
||
removeFromMap
|
||
) {
|
||
var val;
|
||
if ((val = el.attrsMap[name]) != null) {
|
||
var list = el.attrsList;
|
||
for (var i = 0, l = list.length; i < l; i++) {
|
||
if (list[i].name === name) {
|
||
list.splice(i, 1);
|
||
break
|
||
}
|
||
}
|
||
}
|
||
if (removeFromMap) {
|
||
delete el.attrsMap[name];
|
||
}
|
||
return val
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Cross-platform code generation for component v-model
|
||
*/
|
||
function genComponentModel (
|
||
el,
|
||
value,
|
||
modifiers
|
||
) {
|
||
var ref = modifiers || {};
|
||
var number = ref.number;
|
||
var trim = ref.trim;
|
||
|
||
var baseValueExpression = '$$v';
|
||
var valueExpression = baseValueExpression;
|
||
if (trim) {
|
||
valueExpression =
|
||
"(typeof " + baseValueExpression + " === 'string'" +
|
||
"? " + baseValueExpression + ".trim()" +
|
||
": " + baseValueExpression + ")";
|
||
}
|
||
if (number) {
|
||
valueExpression = "_n(" + valueExpression + ")";
|
||
}
|
||
var assignment = genAssignmentCode(value, valueExpression);
|
||
|
||
el.model = {
|
||
value: ("(" + value + ")"),
|
||
expression: ("\"" + value + "\""),
|
||
callback: ("function (" + baseValueExpression + ") {" + assignment + "}")
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Cross-platform codegen helper for generating v-model value assignment code.
|
||
*/
|
||
function genAssignmentCode (
|
||
value,
|
||
assignment
|
||
) {
|
||
var res = parseModel(value);
|
||
if (res.key === null) {
|
||
return (value + "=" + assignment)
|
||
} else {
|
||
return ("$set(" + (res.exp) + ", " + (res.key) + ", " + assignment + ")")
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Parse a v-model expression into a base path and a final key segment.
|
||
* Handles both dot-path and possible square brackets.
|
||
*
|
||
* Possible cases:
|
||
*
|
||
* - test
|
||
* - test[key]
|
||
* - test[test1[key]]
|
||
* - test["a"][key]
|
||
* - xxx.test[a[a].test1[key]]
|
||
* - test.xxx.a["asa"][test1[key]]
|
||
*
|
||
*/
|
||
|
||
var len;
|
||
var str;
|
||
var chr;
|
||
var index$1;
|
||
var expressionPos;
|
||
var expressionEndPos;
|
||
|
||
|
||
|
||
function parseModel (val) {
|
||
// Fix https://github.com/vuejs/vue/pull/7730
|
||
// allow v-model="obj.val " (trailing whitespace)
|
||
val = val.trim();
|
||
len = val.length;
|
||
|
||
if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
|
||
index$1 = val.lastIndexOf('.');
|
||
if (index$1 > -1) {
|
||
return {
|
||
exp: val.slice(0, index$1),
|
||
key: '"' + val.slice(index$1 + 1) + '"'
|
||
}
|
||
} else {
|
||
return {
|
||
exp: val,
|
||
key: null
|
||
}
|
||
}
|
||
}
|
||
|
||
str = val;
|
||
index$1 = expressionPos = expressionEndPos = 0;
|
||
|
||
while (!eof()) {
|
||
chr = next();
|
||
/* istanbul ignore if */
|
||
if (isStringStart(chr)) {
|
||
parseString(chr);
|
||
} else if (chr === 0x5B) {
|
||
parseBracket(chr);
|
||
}
|
||
}
|
||
|
||
return {
|
||
exp: val.slice(0, expressionPos),
|
||
key: val.slice(expressionPos + 1, expressionEndPos)
|
||
}
|
||
}
|
||
|
||
function next () {
|
||
return str.charCodeAt(++index$1)
|
||
}
|
||
|
||
function eof () {
|
||
return index$1 >= len
|
||
}
|
||
|
||
function isStringStart (chr) {
|
||
return chr === 0x22 || chr === 0x27
|
||
}
|
||
|
||
function parseBracket (chr) {
|
||
var inBracket = 1;
|
||
expressionPos = index$1;
|
||
while (!eof()) {
|
||
chr = next();
|
||
if (isStringStart(chr)) {
|
||
parseString(chr);
|
||
continue
|
||
}
|
||
if (chr === 0x5B) { inBracket++; }
|
||
if (chr === 0x5D) { inBracket--; }
|
||
if (inBracket === 0) {
|
||
expressionEndPos = index$1;
|
||
break
|
||
}
|
||
}
|
||
}
|
||
|
||
function parseString (chr) {
|
||
var stringQuote = chr;
|
||
while (!eof()) {
|
||
chr = next();
|
||
if (chr === stringQuote) {
|
||
break
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var warn$1;
|
||
|
||
// in some cases, the event used has to be determined at runtime
|
||
// so we used some reserved tokens during compile.
|
||
var RANGE_TOKEN = '__r';
|
||
var CHECKBOX_RADIO_TOKEN = '__c';
|
||
|
||
function model (
|
||
el,
|
||
dir,
|
||
_warn
|
||
) {
|
||
warn$1 = _warn;
|
||
var value = dir.value;
|
||
var modifiers = dir.modifiers;
|
||
var tag = el.tag;
|
||
var type = el.attrsMap.type;
|
||
|
||
if (true) {
|
||
// inputs with type="file" are read only and setting the input's
|
||
// value will throw an error.
|
||
if (tag === 'input' && type === 'file') {
|
||
warn$1(
|
||
"<" + (el.tag) + " v-model=\"" + value + "\" type=\"file\">:\n" +
|
||
"File inputs are read only. Use a v-on:change listener instead."
|
||
);
|
||
}
|
||
}
|
||
|
||
if (el.component) {
|
||
genComponentModel(el, value, modifiers);
|
||
// component v-model doesn't need extra runtime
|
||
return false
|
||
} else if (tag === 'select') {
|
||
genSelect(el, value, modifiers);
|
||
} else if (tag === 'input' && type === 'checkbox') {
|
||
genCheckboxModel(el, value, modifiers);
|
||
} else if (tag === 'input' && type === 'radio') {
|
||
genRadioModel(el, value, modifiers);
|
||
} else if (tag === 'input' || tag === 'textarea') {
|
||
genDefaultModel(el, value, modifiers);
|
||
} else if (!config.isReservedTag(tag)) {
|
||
genComponentModel(el, value, modifiers);
|
||
// component v-model doesn't need extra runtime
|
||
return false
|
||
} else if (true) {
|
||
warn$1(
|
||
"<" + (el.tag) + " v-model=\"" + value + "\">: " +
|
||
"v-model is not supported on this element type. " +
|
||
'If you are working with contenteditable, it\'s recommended to ' +
|
||
'wrap a library dedicated for that purpose inside a custom component.'
|
||
);
|
||
}
|
||
|
||
// ensure runtime directive metadata
|
||
return true
|
||
}
|
||
|
||
function genCheckboxModel (
|
||
el,
|
||
value,
|
||
modifiers
|
||
) {
|
||
var number = modifiers && modifiers.number;
|
||
var valueBinding = getBindingAttr(el, 'value') || 'null';
|
||
var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
|
||
var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
|
||
addProp(el, 'checked',
|
||
"Array.isArray(" + value + ")" +
|
||
"?_i(" + value + "," + valueBinding + ")>-1" + (
|
||
trueValueBinding === 'true'
|
||
? (":(" + value + ")")
|
||
: (":_q(" + value + "," + trueValueBinding + ")")
|
||
)
|
||
);
|
||
addHandler(el, 'change',
|
||
"var $$a=" + value + "," +
|
||
'$$el=$event.target,' +
|
||
"$$c=$$el.checked?(" + trueValueBinding + "):(" + falseValueBinding + ");" +
|
||
'if(Array.isArray($$a)){' +
|
||
"var $$v=" + (number ? '_n(' + valueBinding + ')' : valueBinding) + "," +
|
||
'$$i=_i($$a,$$v);' +
|
||
"if($$el.checked){$$i<0&&(" + (genAssignmentCode(value, '$$a.concat([$$v])')) + ")}" +
|
||
"else{$$i>-1&&(" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + ")}" +
|
||
"}else{" + (genAssignmentCode(value, '$$c')) + "}",
|
||
null, true
|
||
);
|
||
}
|
||
|
||
function genRadioModel (
|
||
el,
|
||
value,
|
||
modifiers
|
||
) {
|
||
var number = modifiers && modifiers.number;
|
||
var valueBinding = getBindingAttr(el, 'value') || 'null';
|
||
valueBinding = number ? ("_n(" + valueBinding + ")") : valueBinding;
|
||
addProp(el, 'checked', ("_q(" + value + "," + valueBinding + ")"));
|
||
addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
|
||
}
|
||
|
||
function genSelect (
|
||
el,
|
||
value,
|
||
modifiers
|
||
) {
|
||
var number = modifiers && modifiers.number;
|
||
var selectedVal = "Array.prototype.filter" +
|
||
".call($event.target.options,function(o){return o.selected})" +
|
||
".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
|
||
"return " + (number ? '_n(val)' : 'val') + "})";
|
||
|
||
var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
|
||
var code = "var $$selectedVal = " + selectedVal + ";";
|
||
code = code + " " + (genAssignmentCode(value, assignment));
|
||
addHandler(el, 'change', code, null, true);
|
||
}
|
||
|
||
function genDefaultModel (
|
||
el,
|
||
value,
|
||
modifiers
|
||
) {
|
||
var type = el.attrsMap.type;
|
||
|
||
// warn if v-bind:value conflicts with v-model
|
||
// except for inputs with v-bind:type
|
||
if (true) {
|
||
var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
|
||
var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
|
||
if (value$1 && !typeBinding) {
|
||
var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
|
||
warn$1(
|
||
binding + "=\"" + value$1 + "\" conflicts with v-model on the same element " +
|
||
'because the latter already expands to a value binding internally'
|
||
);
|
||
}
|
||
}
|
||
|
||
var ref = modifiers || {};
|
||
var lazy = ref.lazy;
|
||
var number = ref.number;
|
||
var trim = ref.trim;
|
||
var needCompositionGuard = !lazy && type !== 'range';
|
||
var event = lazy
|
||
? 'change'
|
||
: type === 'range'
|
||
? RANGE_TOKEN
|
||
: 'input';
|
||
|
||
var valueExpression = '$event.target.value';
|
||
if (trim) {
|
||
valueExpression = "$event.target.value.trim()";
|
||
}
|
||
if (number) {
|
||
valueExpression = "_n(" + valueExpression + ")";
|
||
}
|
||
|
||
var code = genAssignmentCode(value, valueExpression);
|
||
if (needCompositionGuard) {
|
||
code = "if($event.target.composing)return;" + code;
|
||
}
|
||
|
||
addProp(el, 'value', ("(" + value + ")"));
|
||
addHandler(el, event, code, null, true);
|
||
if (trim || number) {
|
||
addHandler(el, 'blur', '$forceUpdate()');
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
// normalize v-model event tokens that can only be determined at runtime.
|
||
// it's important to place the event as the first in the array because
|
||
// the whole point is ensuring the v-model callback gets called before
|
||
// user-attached handlers.
|
||
function normalizeEvents (on) {
|
||
/* istanbul ignore if */
|
||
if (isDef(on[RANGE_TOKEN])) {
|
||
// IE input[type=range] only supports `change` event
|
||
var event = isIE ? 'change' : 'input';
|
||
on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);
|
||
delete on[RANGE_TOKEN];
|
||
}
|
||
// This was originally intended to fix #4521 but no longer necessary
|
||
// after 2.5. Keeping it for backwards compat with generated code from < 2.4
|
||
/* istanbul ignore if */
|
||
if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
|
||
on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
|
||
delete on[CHECKBOX_RADIO_TOKEN];
|
||
}
|
||
}
|
||
|
||
var target$1;
|
||
|
||
function createOnceHandler (handler, event, capture) {
|
||
var _target = target$1; // save current target element in closure
|
||
return function onceHandler () {
|
||
var res = handler.apply(null, arguments);
|
||
if (res !== null) {
|
||
remove$2(event, onceHandler, capture, _target);
|
||
}
|
||
}
|
||
}
|
||
|
||
function add$1 (
|
||
event,
|
||
handler,
|
||
once$$1,
|
||
capture,
|
||
passive
|
||
) {
|
||
handler = withMacroTask(handler);
|
||
if (once$$1) { handler = createOnceHandler(handler, event, capture); }
|
||
target$1.addEventListener(
|
||
event,
|
||
handler,
|
||
supportsPassive
|
||
? { capture: capture, passive: passive }
|
||
: capture
|
||
);
|
||
}
|
||
|
||
function remove$2 (
|
||
event,
|
||
handler,
|
||
capture,
|
||
_target
|
||
) {
|
||
(_target || target$1).removeEventListener(
|
||
event,
|
||
handler._withTask || handler,
|
||
capture
|
||
);
|
||
}
|
||
|
||
function updateDOMListeners (oldVnode, vnode) {
|
||
if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
|
||
return
|
||
}
|
||
var on = vnode.data.on || {};
|
||
var oldOn = oldVnode.data.on || {};
|
||
target$1 = vnode.elm;
|
||
normalizeEvents(on);
|
||
updateListeners(on, oldOn, add$1, remove$2, vnode.context);
|
||
target$1 = undefined;
|
||
}
|
||
|
||
var events = {
|
||
create: updateDOMListeners,
|
||
update: updateDOMListeners
|
||
}
|
||
|
||
/* */
|
||
|
||
function updateDOMProps (oldVnode, vnode) {
|
||
if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
|
||
return
|
||
}
|
||
var key, cur;
|
||
var elm = vnode.elm;
|
||
var oldProps = oldVnode.data.domProps || {};
|
||
var props = vnode.data.domProps || {};
|
||
// clone observed objects, as the user probably wants to mutate it
|
||
if (isDef(props.__ob__)) {
|
||
props = vnode.data.domProps = extend({}, props);
|
||
}
|
||
|
||
for (key in oldProps) {
|
||
if (isUndef(props[key])) {
|
||
elm[key] = '';
|
||
}
|
||
}
|
||
for (key in props) {
|
||
cur = props[key];
|
||
// ignore children if the node has textContent or innerHTML,
|
||
// as these will throw away existing DOM nodes and cause removal errors
|
||
// on subsequent patches (#3360)
|
||
if (key === 'textContent' || key === 'innerHTML') {
|
||
if (vnode.children) { vnode.children.length = 0; }
|
||
if (cur === oldProps[key]) { continue }
|
||
// #6601 work around Chrome version <= 55 bug where single textNode
|
||
// replaced by innerHTML/textContent retains its parentNode property
|
||
if (elm.childNodes.length === 1) {
|
||
elm.removeChild(elm.childNodes[0]);
|
||
}
|
||
}
|
||
|
||
if (key === 'value') {
|
||
// store value as _value as well since
|
||
// non-string values will be stringified
|
||
elm._value = cur;
|
||
// avoid resetting cursor position when value is the same
|
||
var strCur = isUndef(cur) ? '' : String(cur);
|
||
if (shouldUpdateValue(elm, strCur)) {
|
||
elm.value = strCur;
|
||
}
|
||
} else {
|
||
elm[key] = cur;
|
||
}
|
||
}
|
||
}
|
||
|
||
// check platforms/web/util/attrs.js acceptValue
|
||
|
||
|
||
function shouldUpdateValue (elm, checkVal) {
|
||
return (!elm.composing && (
|
||
elm.tagName === 'OPTION' ||
|
||
isNotInFocusAndDirty(elm, checkVal) ||
|
||
isDirtyWithModifiers(elm, checkVal)
|
||
))
|
||
}
|
||
|
||
function isNotInFocusAndDirty (elm, checkVal) {
|
||
// return true when textbox (.number and .trim) loses focus and its value is
|
||
// not equal to the updated value
|
||
var notInFocus = true;
|
||
// #6157
|
||
// work around IE bug when accessing document.activeElement in an iframe
|
||
try { notInFocus = document.activeElement !== elm; } catch (e) {}
|
||
return notInFocus && elm.value !== checkVal
|
||
}
|
||
|
||
function isDirtyWithModifiers (elm, newVal) {
|
||
var value = elm.value;
|
||
var modifiers = elm._vModifiers; // injected by v-model runtime
|
||
if (isDef(modifiers)) {
|
||
if (modifiers.lazy) {
|
||
// inputs with lazy should only be updated when not in focus
|
||
return false
|
||
}
|
||
if (modifiers.number) {
|
||
return toNumber(value) !== toNumber(newVal)
|
||
}
|
||
if (modifiers.trim) {
|
||
return value.trim() !== newVal.trim()
|
||
}
|
||
}
|
||
return value !== newVal
|
||
}
|
||
|
||
var domProps = {
|
||
create: updateDOMProps,
|
||
update: updateDOMProps
|
||
}
|
||
|
||
/* */
|
||
|
||
var parseStyleText = cached(function (cssText) {
|
||
var res = {};
|
||
var listDelimiter = /;(?![^(]*\))/g;
|
||
var propertyDelimiter = /:(.+)/;
|
||
cssText.split(listDelimiter).forEach(function (item) {
|
||
if (item) {
|
||
var tmp = item.split(propertyDelimiter);
|
||
tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
|
||
}
|
||
});
|
||
return res
|
||
});
|
||
|
||
// merge static and dynamic style data on the same vnode
|
||
function normalizeStyleData (data) {
|
||
var style = normalizeStyleBinding(data.style);
|
||
// static style is pre-processed into an object during compilation
|
||
// and is always a fresh object, so it's safe to merge into it
|
||
return data.staticStyle
|
||
? extend(data.staticStyle, style)
|
||
: style
|
||
}
|
||
|
||
// normalize possible array / string values into Object
|
||
function normalizeStyleBinding (bindingStyle) {
|
||
if (Array.isArray(bindingStyle)) {
|
||
return toObject(bindingStyle)
|
||
}
|
||
if (typeof bindingStyle === 'string') {
|
||
return parseStyleText(bindingStyle)
|
||
}
|
||
return bindingStyle
|
||
}
|
||
|
||
/**
|
||
* parent component style should be after child's
|
||
* so that parent component's style could override it
|
||
*/
|
||
function getStyle (vnode, checkChild) {
|
||
var res = {};
|
||
var styleData;
|
||
|
||
if (checkChild) {
|
||
var childNode = vnode;
|
||
while (childNode.componentInstance) {
|
||
childNode = childNode.componentInstance._vnode;
|
||
if (
|
||
childNode && childNode.data &&
|
||
(styleData = normalizeStyleData(childNode.data))
|
||
) {
|
||
extend(res, styleData);
|
||
}
|
||
}
|
||
}
|
||
|
||
if ((styleData = normalizeStyleData(vnode.data))) {
|
||
extend(res, styleData);
|
||
}
|
||
|
||
var parentNode = vnode;
|
||
while ((parentNode = parentNode.parent)) {
|
||
if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
|
||
extend(res, styleData);
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
/* */
|
||
|
||
var cssVarRE = /^--/;
|
||
var importantRE = /\s*!important$/;
|
||
var setProp = function (el, name, val) {
|
||
/* istanbul ignore if */
|
||
if (cssVarRE.test(name)) {
|
||
el.style.setProperty(name, val);
|
||
} else if (importantRE.test(val)) {
|
||
el.style.setProperty(name, val.replace(importantRE, ''), 'important');
|
||
} else {
|
||
var normalizedName = normalize(name);
|
||
if (Array.isArray(val)) {
|
||
// Support values array created by autoprefixer, e.g.
|
||
// {display: ["-webkit-box", "-ms-flexbox", "flex"]}
|
||
// Set them one by one, and the browser will only set those it can recognize
|
||
for (var i = 0, len = val.length; i < len; i++) {
|
||
el.style[normalizedName] = val[i];
|
||
}
|
||
} else {
|
||
el.style[normalizedName] = val;
|
||
}
|
||
}
|
||
};
|
||
|
||
var vendorNames = ['Webkit', 'Moz', 'ms'];
|
||
|
||
var emptyStyle;
|
||
var normalize = cached(function (prop) {
|
||
emptyStyle = emptyStyle || document.createElement('div').style;
|
||
prop = camelize(prop);
|
||
if (prop !== 'filter' && (prop in emptyStyle)) {
|
||
return prop
|
||
}
|
||
var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
|
||
for (var i = 0; i < vendorNames.length; i++) {
|
||
var name = vendorNames[i] + capName;
|
||
if (name in emptyStyle) {
|
||
return name
|
||
}
|
||
}
|
||
});
|
||
|
||
function updateStyle (oldVnode, vnode) {
|
||
var data = vnode.data;
|
||
var oldData = oldVnode.data;
|
||
|
||
if (isUndef(data.staticStyle) && isUndef(data.style) &&
|
||
isUndef(oldData.staticStyle) && isUndef(oldData.style)
|
||
) {
|
||
return
|
||
}
|
||
|
||
var cur, name;
|
||
var el = vnode.elm;
|
||
var oldStaticStyle = oldData.staticStyle;
|
||
var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
|
||
|
||
// if static style exists, stylebinding already merged into it when doing normalizeStyleData
|
||
var oldStyle = oldStaticStyle || oldStyleBinding;
|
||
|
||
var style = normalizeStyleBinding(vnode.data.style) || {};
|
||
|
||
// store normalized style under a different key for next diff
|
||
// make sure to clone it if it's reactive, since the user likely wants
|
||
// to mutate it.
|
||
vnode.data.normalizedStyle = isDef(style.__ob__)
|
||
? extend({}, style)
|
||
: style;
|
||
|
||
var newStyle = getStyle(vnode, true);
|
||
|
||
for (name in oldStyle) {
|
||
if (isUndef(newStyle[name])) {
|
||
setProp(el, name, '');
|
||
}
|
||
}
|
||
for (name in newStyle) {
|
||
cur = newStyle[name];
|
||
if (cur !== oldStyle[name]) {
|
||
// ie9 setting to null has no effect, must use empty string
|
||
setProp(el, name, cur == null ? '' : cur);
|
||
}
|
||
}
|
||
}
|
||
|
||
var style = {
|
||
create: updateStyle,
|
||
update: updateStyle
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Add class with compatibility for SVG since classList is not supported on
|
||
* SVG elements in IE
|
||
*/
|
||
function addClass (el, cls) {
|
||
/* istanbul ignore if */
|
||
if (!cls || !(cls = cls.trim())) {
|
||
return
|
||
}
|
||
|
||
/* istanbul ignore else */
|
||
if (el.classList) {
|
||
if (cls.indexOf(' ') > -1) {
|
||
cls.split(/\s+/).forEach(function (c) { return el.classList.add(c); });
|
||
} else {
|
||
el.classList.add(cls);
|
||
}
|
||
} else {
|
||
var cur = " " + (el.getAttribute('class') || '') + " ";
|
||
if (cur.indexOf(' ' + cls + ' ') < 0) {
|
||
el.setAttribute('class', (cur + cls).trim());
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Remove class with compatibility for SVG since classList is not supported on
|
||
* SVG elements in IE
|
||
*/
|
||
function removeClass (el, cls) {
|
||
/* istanbul ignore if */
|
||
if (!cls || !(cls = cls.trim())) {
|
||
return
|
||
}
|
||
|
||
/* istanbul ignore else */
|
||
if (el.classList) {
|
||
if (cls.indexOf(' ') > -1) {
|
||
cls.split(/\s+/).forEach(function (c) { return el.classList.remove(c); });
|
||
} else {
|
||
el.classList.remove(cls);
|
||
}
|
||
if (!el.classList.length) {
|
||
el.removeAttribute('class');
|
||
}
|
||
} else {
|
||
var cur = " " + (el.getAttribute('class') || '') + " ";
|
||
var tar = ' ' + cls + ' ';
|
||
while (cur.indexOf(tar) >= 0) {
|
||
cur = cur.replace(tar, ' ');
|
||
}
|
||
cur = cur.trim();
|
||
if (cur) {
|
||
el.setAttribute('class', cur);
|
||
} else {
|
||
el.removeAttribute('class');
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function resolveTransition (def) {
|
||
if (!def) {
|
||
return
|
||
}
|
||
/* istanbul ignore else */
|
||
if (typeof def === 'object') {
|
||
var res = {};
|
||
if (def.css !== false) {
|
||
extend(res, autoCssTransition(def.name || 'v'));
|
||
}
|
||
extend(res, def);
|
||
return res
|
||
} else if (typeof def === 'string') {
|
||
return autoCssTransition(def)
|
||
}
|
||
}
|
||
|
||
var autoCssTransition = cached(function (name) {
|
||
return {
|
||
enterClass: (name + "-enter"),
|
||
enterToClass: (name + "-enter-to"),
|
||
enterActiveClass: (name + "-enter-active"),
|
||
leaveClass: (name + "-leave"),
|
||
leaveToClass: (name + "-leave-to"),
|
||
leaveActiveClass: (name + "-leave-active")
|
||
}
|
||
});
|
||
|
||
var hasTransition = inBrowser && !isIE9;
|
||
var TRANSITION = 'transition';
|
||
var ANIMATION = 'animation';
|
||
|
||
// Transition property/event sniffing
|
||
var transitionProp = 'transition';
|
||
var transitionEndEvent = 'transitionend';
|
||
var animationProp = 'animation';
|
||
var animationEndEvent = 'animationend';
|
||
if (hasTransition) {
|
||
/* istanbul ignore if */
|
||
if (window.ontransitionend === undefined &&
|
||
window.onwebkittransitionend !== undefined
|
||
) {
|
||
transitionProp = 'WebkitTransition';
|
||
transitionEndEvent = 'webkitTransitionEnd';
|
||
}
|
||
if (window.onanimationend === undefined &&
|
||
window.onwebkitanimationend !== undefined
|
||
) {
|
||
animationProp = 'WebkitAnimation';
|
||
animationEndEvent = 'webkitAnimationEnd';
|
||
}
|
||
}
|
||
|
||
// binding to window is necessary to make hot reload work in IE in strict mode
|
||
var raf = inBrowser
|
||
? window.requestAnimationFrame
|
||
? window.requestAnimationFrame.bind(window)
|
||
: setTimeout
|
||
: /* istanbul ignore next */ function (fn) { return fn(); };
|
||
|
||
function nextFrame (fn) {
|
||
raf(function () {
|
||
raf(fn);
|
||
});
|
||
}
|
||
|
||
function addTransitionClass (el, cls) {
|
||
var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
|
||
if (transitionClasses.indexOf(cls) < 0) {
|
||
transitionClasses.push(cls);
|
||
addClass(el, cls);
|
||
}
|
||
}
|
||
|
||
function removeTransitionClass (el, cls) {
|
||
if (el._transitionClasses) {
|
||
remove(el._transitionClasses, cls);
|
||
}
|
||
removeClass(el, cls);
|
||
}
|
||
|
||
function whenTransitionEnds (
|
||
el,
|
||
expectedType,
|
||
cb
|
||
) {
|
||
var ref = getTransitionInfo(el, expectedType);
|
||
var type = ref.type;
|
||
var timeout = ref.timeout;
|
||
var propCount = ref.propCount;
|
||
if (!type) { return cb() }
|
||
var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
|
||
var ended = 0;
|
||
var end = function () {
|
||
el.removeEventListener(event, onEnd);
|
||
cb();
|
||
};
|
||
var onEnd = function (e) {
|
||
if (e.target === el) {
|
||
if (++ended >= propCount) {
|
||
end();
|
||
}
|
||
}
|
||
};
|
||
setTimeout(function () {
|
||
if (ended < propCount) {
|
||
end();
|
||
}
|
||
}, timeout + 1);
|
||
el.addEventListener(event, onEnd);
|
||
}
|
||
|
||
var transformRE = /\b(transform|all)(,|$)/;
|
||
|
||
function getTransitionInfo (el, expectedType) {
|
||
var styles = window.getComputedStyle(el);
|
||
var transitionDelays = styles[transitionProp + 'Delay'].split(', ');
|
||
var transitionDurations = styles[transitionProp + 'Duration'].split(', ');
|
||
var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
|
||
var animationDelays = styles[animationProp + 'Delay'].split(', ');
|
||
var animationDurations = styles[animationProp + 'Duration'].split(', ');
|
||
var animationTimeout = getTimeout(animationDelays, animationDurations);
|
||
|
||
var type;
|
||
var timeout = 0;
|
||
var propCount = 0;
|
||
/* istanbul ignore if */
|
||
if (expectedType === TRANSITION) {
|
||
if (transitionTimeout > 0) {
|
||
type = TRANSITION;
|
||
timeout = transitionTimeout;
|
||
propCount = transitionDurations.length;
|
||
}
|
||
} else if (expectedType === ANIMATION) {
|
||
if (animationTimeout > 0) {
|
||
type = ANIMATION;
|
||
timeout = animationTimeout;
|
||
propCount = animationDurations.length;
|
||
}
|
||
} else {
|
||
timeout = Math.max(transitionTimeout, animationTimeout);
|
||
type = timeout > 0
|
||
? transitionTimeout > animationTimeout
|
||
? TRANSITION
|
||
: ANIMATION
|
||
: null;
|
||
propCount = type
|
||
? type === TRANSITION
|
||
? transitionDurations.length
|
||
: animationDurations.length
|
||
: 0;
|
||
}
|
||
var hasTransform =
|
||
type === TRANSITION &&
|
||
transformRE.test(styles[transitionProp + 'Property']);
|
||
return {
|
||
type: type,
|
||
timeout: timeout,
|
||
propCount: propCount,
|
||
hasTransform: hasTransform
|
||
}
|
||
}
|
||
|
||
function getTimeout (delays, durations) {
|
||
/* istanbul ignore next */
|
||
while (delays.length < durations.length) {
|
||
delays = delays.concat(delays);
|
||
}
|
||
|
||
return Math.max.apply(null, durations.map(function (d, i) {
|
||
return toMs(d) + toMs(delays[i])
|
||
}))
|
||
}
|
||
|
||
function toMs (s) {
|
||
return Number(s.slice(0, -1)) * 1000
|
||
}
|
||
|
||
/* */
|
||
|
||
function enter (vnode, toggleDisplay) {
|
||
var el = vnode.elm;
|
||
|
||
// call leave callback now
|
||
if (isDef(el._leaveCb)) {
|
||
el._leaveCb.cancelled = true;
|
||
el._leaveCb();
|
||
}
|
||
|
||
var data = resolveTransition(vnode.data.transition);
|
||
if (isUndef(data)) {
|
||
return
|
||
}
|
||
|
||
/* istanbul ignore if */
|
||
if (isDef(el._enterCb) || el.nodeType !== 1) {
|
||
return
|
||
}
|
||
|
||
var css = data.css;
|
||
var type = data.type;
|
||
var enterClass = data.enterClass;
|
||
var enterToClass = data.enterToClass;
|
||
var enterActiveClass = data.enterActiveClass;
|
||
var appearClass = data.appearClass;
|
||
var appearToClass = data.appearToClass;
|
||
var appearActiveClass = data.appearActiveClass;
|
||
var beforeEnter = data.beforeEnter;
|
||
var enter = data.enter;
|
||
var afterEnter = data.afterEnter;
|
||
var enterCancelled = data.enterCancelled;
|
||
var beforeAppear = data.beforeAppear;
|
||
var appear = data.appear;
|
||
var afterAppear = data.afterAppear;
|
||
var appearCancelled = data.appearCancelled;
|
||
var duration = data.duration;
|
||
|
||
// activeInstance will always be the <transition> component managing this
|
||
// transition. One edge case to check is when the <transition> is placed
|
||
// as the root node of a child component. In that case we need to check
|
||
// <transition>'s parent for appear check.
|
||
var context = activeInstance;
|
||
var transitionNode = activeInstance.$vnode;
|
||
while (transitionNode && transitionNode.parent) {
|
||
transitionNode = transitionNode.parent;
|
||
context = transitionNode.context;
|
||
}
|
||
|
||
var isAppear = !context._isMounted || !vnode.isRootInsert;
|
||
|
||
if (isAppear && !appear && appear !== '') {
|
||
return
|
||
}
|
||
|
||
var startClass = isAppear && appearClass
|
||
? appearClass
|
||
: enterClass;
|
||
var activeClass = isAppear && appearActiveClass
|
||
? appearActiveClass
|
||
: enterActiveClass;
|
||
var toClass = isAppear && appearToClass
|
||
? appearToClass
|
||
: enterToClass;
|
||
|
||
var beforeEnterHook = isAppear
|
||
? (beforeAppear || beforeEnter)
|
||
: beforeEnter;
|
||
var enterHook = isAppear
|
||
? (typeof appear === 'function' ? appear : enter)
|
||
: enter;
|
||
var afterEnterHook = isAppear
|
||
? (afterAppear || afterEnter)
|
||
: afterEnter;
|
||
var enterCancelledHook = isAppear
|
||
? (appearCancelled || enterCancelled)
|
||
: enterCancelled;
|
||
|
||
var explicitEnterDuration = toNumber(
|
||
isObject(duration)
|
||
? duration.enter
|
||
: duration
|
||
);
|
||
|
||
if ("development" !== 'production' && explicitEnterDuration != null) {
|
||
checkDuration(explicitEnterDuration, 'enter', vnode);
|
||
}
|
||
|
||
var expectsCSS = css !== false && !isIE9;
|
||
var userWantsControl = getHookArgumentsLength(enterHook);
|
||
|
||
var cb = el._enterCb = once(function () {
|
||
if (expectsCSS) {
|
||
removeTransitionClass(el, toClass);
|
||
removeTransitionClass(el, activeClass);
|
||
}
|
||
if (cb.cancelled) {
|
||
if (expectsCSS) {
|
||
removeTransitionClass(el, startClass);
|
||
}
|
||
enterCancelledHook && enterCancelledHook(el);
|
||
} else {
|
||
afterEnterHook && afterEnterHook(el);
|
||
}
|
||
el._enterCb = null;
|
||
});
|
||
|
||
if (!vnode.data.show) {
|
||
// remove pending leave element on enter by injecting an insert hook
|
||
mergeVNodeHook(vnode, 'insert', function () {
|
||
var parent = el.parentNode;
|
||
var pendingNode = parent && parent._pending && parent._pending[vnode.key];
|
||
if (pendingNode &&
|
||
pendingNode.tag === vnode.tag &&
|
||
pendingNode.elm._leaveCb
|
||
) {
|
||
pendingNode.elm._leaveCb();
|
||
}
|
||
enterHook && enterHook(el, cb);
|
||
});
|
||
}
|
||
|
||
// start enter transition
|
||
beforeEnterHook && beforeEnterHook(el);
|
||
if (expectsCSS) {
|
||
addTransitionClass(el, startClass);
|
||
addTransitionClass(el, activeClass);
|
||
nextFrame(function () {
|
||
removeTransitionClass(el, startClass);
|
||
if (!cb.cancelled) {
|
||
addTransitionClass(el, toClass);
|
||
if (!userWantsControl) {
|
||
if (isValidDuration(explicitEnterDuration)) {
|
||
setTimeout(cb, explicitEnterDuration);
|
||
} else {
|
||
whenTransitionEnds(el, type, cb);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
if (vnode.data.show) {
|
||
toggleDisplay && toggleDisplay();
|
||
enterHook && enterHook(el, cb);
|
||
}
|
||
|
||
if (!expectsCSS && !userWantsControl) {
|
||
cb();
|
||
}
|
||
}
|
||
|
||
function leave (vnode, rm) {
|
||
var el = vnode.elm;
|
||
|
||
// call enter callback now
|
||
if (isDef(el._enterCb)) {
|
||
el._enterCb.cancelled = true;
|
||
el._enterCb();
|
||
}
|
||
|
||
var data = resolveTransition(vnode.data.transition);
|
||
if (isUndef(data) || el.nodeType !== 1) {
|
||
return rm()
|
||
}
|
||
|
||
/* istanbul ignore if */
|
||
if (isDef(el._leaveCb)) {
|
||
return
|
||
}
|
||
|
||
var css = data.css;
|
||
var type = data.type;
|
||
var leaveClass = data.leaveClass;
|
||
var leaveToClass = data.leaveToClass;
|
||
var leaveActiveClass = data.leaveActiveClass;
|
||
var beforeLeave = data.beforeLeave;
|
||
var leave = data.leave;
|
||
var afterLeave = data.afterLeave;
|
||
var leaveCancelled = data.leaveCancelled;
|
||
var delayLeave = data.delayLeave;
|
||
var duration = data.duration;
|
||
|
||
var expectsCSS = css !== false && !isIE9;
|
||
var userWantsControl = getHookArgumentsLength(leave);
|
||
|
||
var explicitLeaveDuration = toNumber(
|
||
isObject(duration)
|
||
? duration.leave
|
||
: duration
|
||
);
|
||
|
||
if ("development" !== 'production' && isDef(explicitLeaveDuration)) {
|
||
checkDuration(explicitLeaveDuration, 'leave', vnode);
|
||
}
|
||
|
||
var cb = el._leaveCb = once(function () {
|
||
if (el.parentNode && el.parentNode._pending) {
|
||
el.parentNode._pending[vnode.key] = null;
|
||
}
|
||
if (expectsCSS) {
|
||
removeTransitionClass(el, leaveToClass);
|
||
removeTransitionClass(el, leaveActiveClass);
|
||
}
|
||
if (cb.cancelled) {
|
||
if (expectsCSS) {
|
||
removeTransitionClass(el, leaveClass);
|
||
}
|
||
leaveCancelled && leaveCancelled(el);
|
||
} else {
|
||
rm();
|
||
afterLeave && afterLeave(el);
|
||
}
|
||
el._leaveCb = null;
|
||
});
|
||
|
||
if (delayLeave) {
|
||
delayLeave(performLeave);
|
||
} else {
|
||
performLeave();
|
||
}
|
||
|
||
function performLeave () {
|
||
// the delayed leave may have already been cancelled
|
||
if (cb.cancelled) {
|
||
return
|
||
}
|
||
// record leaving element
|
||
if (!vnode.data.show) {
|
||
(el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;
|
||
}
|
||
beforeLeave && beforeLeave(el);
|
||
if (expectsCSS) {
|
||
addTransitionClass(el, leaveClass);
|
||
addTransitionClass(el, leaveActiveClass);
|
||
nextFrame(function () {
|
||
removeTransitionClass(el, leaveClass);
|
||
if (!cb.cancelled) {
|
||
addTransitionClass(el, leaveToClass);
|
||
if (!userWantsControl) {
|
||
if (isValidDuration(explicitLeaveDuration)) {
|
||
setTimeout(cb, explicitLeaveDuration);
|
||
} else {
|
||
whenTransitionEnds(el, type, cb);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
leave && leave(el, cb);
|
||
if (!expectsCSS && !userWantsControl) {
|
||
cb();
|
||
}
|
||
}
|
||
}
|
||
|
||
// only used in dev mode
|
||
function checkDuration (val, name, vnode) {
|
||
if (typeof val !== 'number') {
|
||
warn(
|
||
"<transition> explicit " + name + " duration is not a valid number - " +
|
||
"got " + (JSON.stringify(val)) + ".",
|
||
vnode.context
|
||
);
|
||
} else if (isNaN(val)) {
|
||
warn(
|
||
"<transition> explicit " + name + " duration is NaN - " +
|
||
'the duration expression might be incorrect.',
|
||
vnode.context
|
||
);
|
||
}
|
||
}
|
||
|
||
function isValidDuration (val) {
|
||
return typeof val === 'number' && !isNaN(val)
|
||
}
|
||
|
||
/**
|
||
* Normalize a transition hook's argument length. The hook may be:
|
||
* - a merged hook (invoker) with the original in .fns
|
||
* - a wrapped component method (check ._length)
|
||
* - a plain function (.length)
|
||
*/
|
||
function getHookArgumentsLength (fn) {
|
||
if (isUndef(fn)) {
|
||
return false
|
||
}
|
||
var invokerFns = fn.fns;
|
||
if (isDef(invokerFns)) {
|
||
// invoker
|
||
return getHookArgumentsLength(
|
||
Array.isArray(invokerFns)
|
||
? invokerFns[0]
|
||
: invokerFns
|
||
)
|
||
} else {
|
||
return (fn._length || fn.length) > 1
|
||
}
|
||
}
|
||
|
||
function _enter (_, vnode) {
|
||
if (vnode.data.show !== true) {
|
||
enter(vnode);
|
||
}
|
||
}
|
||
|
||
var transition = inBrowser ? {
|
||
create: _enter,
|
||
activate: _enter,
|
||
remove: function remove$$1 (vnode, rm) {
|
||
/* istanbul ignore else */
|
||
if (vnode.data.show !== true) {
|
||
leave(vnode, rm);
|
||
} else {
|
||
rm();
|
||
}
|
||
}
|
||
} : {}
|
||
|
||
var platformModules = [
|
||
attrs,
|
||
klass,
|
||
events,
|
||
domProps,
|
||
style,
|
||
transition
|
||
]
|
||
|
||
/* */
|
||
|
||
// the directive module should be applied last, after all
|
||
// built-in modules have been applied.
|
||
var modules = platformModules.concat(baseModules);
|
||
|
||
var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });
|
||
|
||
/**
|
||
* Not type checking this file because flow doesn't like attaching
|
||
* properties to Elements.
|
||
*/
|
||
|
||
/* istanbul ignore if */
|
||
if (isIE9) {
|
||
// http://www.matts411.com/post/internet-explorer-9-oninput/
|
||
document.addEventListener('selectionchange', function () {
|
||
var el = document.activeElement;
|
||
if (el && el.vmodel) {
|
||
trigger(el, 'input');
|
||
}
|
||
});
|
||
}
|
||
|
||
var directive = {
|
||
inserted: function inserted (el, binding, vnode, oldVnode) {
|
||
if (vnode.tag === 'select') {
|
||
// #6903
|
||
if (oldVnode.elm && !oldVnode.elm._vOptions) {
|
||
mergeVNodeHook(vnode, 'postpatch', function () {
|
||
directive.componentUpdated(el, binding, vnode);
|
||
});
|
||
} else {
|
||
setSelected(el, binding, vnode.context);
|
||
}
|
||
el._vOptions = [].map.call(el.options, getValue);
|
||
} else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
|
||
el._vModifiers = binding.modifiers;
|
||
if (!binding.modifiers.lazy) {
|
||
el.addEventListener('compositionstart', onCompositionStart);
|
||
el.addEventListener('compositionend', onCompositionEnd);
|
||
// Safari < 10.2 & UIWebView doesn't fire compositionend when
|
||
// switching focus before confirming composition choice
|
||
// this also fixes the issue where some browsers e.g. iOS Chrome
|
||
// fires "change" instead of "input" on autocomplete.
|
||
el.addEventListener('change', onCompositionEnd);
|
||
/* istanbul ignore if */
|
||
if (isIE9) {
|
||
el.vmodel = true;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
componentUpdated: function componentUpdated (el, binding, vnode) {
|
||
if (vnode.tag === 'select') {
|
||
setSelected(el, binding, vnode.context);
|
||
// in case the options rendered by v-for have changed,
|
||
// it's possible that the value is out-of-sync with the rendered options.
|
||
// detect such cases and filter out values that no longer has a matching
|
||
// option in the DOM.
|
||
var prevOptions = el._vOptions;
|
||
var curOptions = el._vOptions = [].map.call(el.options, getValue);
|
||
if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {
|
||
// trigger change event if
|
||
// no matching option found for at least one value
|
||
var needReset = el.multiple
|
||
? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })
|
||
: binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);
|
||
if (needReset) {
|
||
trigger(el, 'change');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
function setSelected (el, binding, vm) {
|
||
actuallySetSelected(el, binding, vm);
|
||
/* istanbul ignore if */
|
||
if (isIE || isEdge) {
|
||
setTimeout(function () {
|
||
actuallySetSelected(el, binding, vm);
|
||
}, 0);
|
||
}
|
||
}
|
||
|
||
function actuallySetSelected (el, binding, vm) {
|
||
var value = binding.value;
|
||
var isMultiple = el.multiple;
|
||
if (isMultiple && !Array.isArray(value)) {
|
||
"development" !== 'production' && warn(
|
||
"<select multiple v-model=\"" + (binding.expression) + "\"> " +
|
||
"expects an Array value for its binding, but got " + (Object.prototype.toString.call(value).slice(8, -1)),
|
||
vm
|
||
);
|
||
return
|
||
}
|
||
var selected, option;
|
||
for (var i = 0, l = el.options.length; i < l; i++) {
|
||
option = el.options[i];
|
||
if (isMultiple) {
|
||
selected = looseIndexOf(value, getValue(option)) > -1;
|
||
if (option.selected !== selected) {
|
||
option.selected = selected;
|
||
}
|
||
} else {
|
||
if (looseEqual(getValue(option), value)) {
|
||
if (el.selectedIndex !== i) {
|
||
el.selectedIndex = i;
|
||
}
|
||
return
|
||
}
|
||
}
|
||
}
|
||
if (!isMultiple) {
|
||
el.selectedIndex = -1;
|
||
}
|
||
}
|
||
|
||
function hasNoMatchingOption (value, options) {
|
||
return options.every(function (o) { return !looseEqual(o, value); })
|
||
}
|
||
|
||
function getValue (option) {
|
||
return '_value' in option
|
||
? option._value
|
||
: option.value
|
||
}
|
||
|
||
function onCompositionStart (e) {
|
||
e.target.composing = true;
|
||
}
|
||
|
||
function onCompositionEnd (e) {
|
||
// prevent triggering an input event for no reason
|
||
if (!e.target.composing) { return }
|
||
e.target.composing = false;
|
||
trigger(e.target, 'input');
|
||
}
|
||
|
||
function trigger (el, type) {
|
||
var e = document.createEvent('HTMLEvents');
|
||
e.initEvent(type, true, true);
|
||
el.dispatchEvent(e);
|
||
}
|
||
|
||
/* */
|
||
|
||
// recursively search for possible transition defined inside the component root
|
||
function locateNode (vnode) {
|
||
return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
|
||
? locateNode(vnode.componentInstance._vnode)
|
||
: vnode
|
||
}
|
||
|
||
var show = {
|
||
bind: function bind (el, ref, vnode) {
|
||
var value = ref.value;
|
||
|
||
vnode = locateNode(vnode);
|
||
var transition$$1 = vnode.data && vnode.data.transition;
|
||
var originalDisplay = el.__vOriginalDisplay =
|
||
el.style.display === 'none' ? '' : el.style.display;
|
||
if (value && transition$$1) {
|
||
vnode.data.show = true;
|
||
enter(vnode, function () {
|
||
el.style.display = originalDisplay;
|
||
});
|
||
} else {
|
||
el.style.display = value ? originalDisplay : 'none';
|
||
}
|
||
},
|
||
|
||
update: function update (el, ref, vnode) {
|
||
var value = ref.value;
|
||
var oldValue = ref.oldValue;
|
||
|
||
/* istanbul ignore if */
|
||
if (!value === !oldValue) { return }
|
||
vnode = locateNode(vnode);
|
||
var transition$$1 = vnode.data && vnode.data.transition;
|
||
if (transition$$1) {
|
||
vnode.data.show = true;
|
||
if (value) {
|
||
enter(vnode, function () {
|
||
el.style.display = el.__vOriginalDisplay;
|
||
});
|
||
} else {
|
||
leave(vnode, function () {
|
||
el.style.display = 'none';
|
||
});
|
||
}
|
||
} else {
|
||
el.style.display = value ? el.__vOriginalDisplay : 'none';
|
||
}
|
||
},
|
||
|
||
unbind: function unbind (
|
||
el,
|
||
binding,
|
||
vnode,
|
||
oldVnode,
|
||
isDestroy
|
||
) {
|
||
if (!isDestroy) {
|
||
el.style.display = el.__vOriginalDisplay;
|
||
}
|
||
}
|
||
}
|
||
|
||
var platformDirectives = {
|
||
model: directive,
|
||
show: show
|
||
}
|
||
|
||
/* */
|
||
|
||
// Provides transition support for a single element/component.
|
||
// supports transition mode (out-in / in-out)
|
||
|
||
var transitionProps = {
|
||
name: String,
|
||
appear: Boolean,
|
||
css: Boolean,
|
||
mode: String,
|
||
type: String,
|
||
enterClass: String,
|
||
leaveClass: String,
|
||
enterToClass: String,
|
||
leaveToClass: String,
|
||
enterActiveClass: String,
|
||
leaveActiveClass: String,
|
||
appearClass: String,
|
||
appearActiveClass: String,
|
||
appearToClass: String,
|
||
duration: [Number, String, Object]
|
||
};
|
||
|
||
// in case the child is also an abstract component, e.g. <keep-alive>
|
||
// we want to recursively retrieve the real component to be rendered
|
||
function getRealChild (vnode) {
|
||
var compOptions = vnode && vnode.componentOptions;
|
||
if (compOptions && compOptions.Ctor.options.abstract) {
|
||
return getRealChild(getFirstComponentChild(compOptions.children))
|
||
} else {
|
||
return vnode
|
||
}
|
||
}
|
||
|
||
function extractTransitionData (comp) {
|
||
var data = {};
|
||
var options = comp.$options;
|
||
// props
|
||
for (var key in options.propsData) {
|
||
data[key] = comp[key];
|
||
}
|
||
// events.
|
||
// extract listeners and pass them directly to the transition methods
|
||
var listeners = options._parentListeners;
|
||
for (var key$1 in listeners) {
|
||
data[camelize(key$1)] = listeners[key$1];
|
||
}
|
||
return data
|
||
}
|
||
|
||
function placeholder (h, rawChild) {
|
||
if (/\d-keep-alive$/.test(rawChild.tag)) {
|
||
return h('keep-alive', {
|
||
props: rawChild.componentOptions.propsData
|
||
})
|
||
}
|
||
}
|
||
|
||
function hasParentTransition (vnode) {
|
||
while ((vnode = vnode.parent)) {
|
||
if (vnode.data.transition) {
|
||
return true
|
||
}
|
||
}
|
||
}
|
||
|
||
function isSameChild (child, oldChild) {
|
||
return oldChild.key === child.key && oldChild.tag === child.tag
|
||
}
|
||
|
||
var Transition = {
|
||
name: 'transition',
|
||
props: transitionProps,
|
||
abstract: true,
|
||
|
||
render: function render (h) {
|
||
var this$1 = this;
|
||
|
||
var children = this.$slots.default;
|
||
if (!children) {
|
||
return
|
||
}
|
||
|
||
// filter out text nodes (possible whitespaces)
|
||
children = children.filter(function (c) { return c.tag || isAsyncPlaceholder(c); });
|
||
/* istanbul ignore if */
|
||
if (!children.length) {
|
||
return
|
||
}
|
||
|
||
// warn multiple elements
|
||
if ("development" !== 'production' && children.length > 1) {
|
||
warn(
|
||
'<transition> can only be used on a single element. Use ' +
|
||
'<transition-group> for lists.',
|
||
this.$parent
|
||
);
|
||
}
|
||
|
||
var mode = this.mode;
|
||
|
||
// warn invalid mode
|
||
if ("development" !== 'production' &&
|
||
mode && mode !== 'in-out' && mode !== 'out-in'
|
||
) {
|
||
warn(
|
||
'invalid <transition> mode: ' + mode,
|
||
this.$parent
|
||
);
|
||
}
|
||
|
||
var rawChild = children[0];
|
||
|
||
// if this is a component root node and the component's
|
||
// parent container node also has transition, skip.
|
||
if (hasParentTransition(this.$vnode)) {
|
||
return rawChild
|
||
}
|
||
|
||
// apply transition data to child
|
||
// use getRealChild() to ignore abstract components e.g. keep-alive
|
||
var child = getRealChild(rawChild);
|
||
/* istanbul ignore if */
|
||
if (!child) {
|
||
return rawChild
|
||
}
|
||
|
||
if (this._leaving) {
|
||
return placeholder(h, rawChild)
|
||
}
|
||
|
||
// ensure a key that is unique to the vnode type and to this transition
|
||
// component instance. This key will be used to remove pending leaving nodes
|
||
// during entering.
|
||
var id = "__transition-" + (this._uid) + "-";
|
||
child.key = child.key == null
|
||
? child.isComment
|
||
? id + 'comment'
|
||
: id + child.tag
|
||
: isPrimitive(child.key)
|
||
? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)
|
||
: child.key;
|
||
|
||
var data = (child.data || (child.data = {})).transition = extractTransitionData(this);
|
||
var oldRawChild = this._vnode;
|
||
var oldChild = getRealChild(oldRawChild);
|
||
|
||
// mark v-show
|
||
// so that the transition module can hand over the control to the directive
|
||
if (child.data.directives && child.data.directives.some(function (d) { return d.name === 'show'; })) {
|
||
child.data.show = true;
|
||
}
|
||
|
||
if (
|
||
oldChild &&
|
||
oldChild.data &&
|
||
!isSameChild(child, oldChild) &&
|
||
!isAsyncPlaceholder(oldChild) &&
|
||
// #6687 component root is a comment node
|
||
!(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)
|
||
) {
|
||
// replace old child transition data with fresh one
|
||
// important for dynamic transitions!
|
||
var oldData = oldChild.data.transition = extend({}, data);
|
||
// handle transition mode
|
||
if (mode === 'out-in') {
|
||
// return placeholder node and queue update when leave finishes
|
||
this._leaving = true;
|
||
mergeVNodeHook(oldData, 'afterLeave', function () {
|
||
this$1._leaving = false;
|
||
this$1.$forceUpdate();
|
||
});
|
||
return placeholder(h, rawChild)
|
||
} else if (mode === 'in-out') {
|
||
if (isAsyncPlaceholder(child)) {
|
||
return oldRawChild
|
||
}
|
||
var delayedLeave;
|
||
var performLeave = function () { delayedLeave(); };
|
||
mergeVNodeHook(data, 'afterEnter', performLeave);
|
||
mergeVNodeHook(data, 'enterCancelled', performLeave);
|
||
mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });
|
||
}
|
||
}
|
||
|
||
return rawChild
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
// Provides transition support for list items.
|
||
// supports move transitions using the FLIP technique.
|
||
|
||
// Because the vdom's children update algorithm is "unstable" - i.e.
|
||
// it doesn't guarantee the relative positioning of removed elements,
|
||
// we force transition-group to update its children into two passes:
|
||
// in the first pass, we remove all nodes that need to be removed,
|
||
// triggering their leaving transition; in the second pass, we insert/move
|
||
// into the final desired state. This way in the second pass removed
|
||
// nodes will remain where they should be.
|
||
|
||
var props = extend({
|
||
tag: String,
|
||
moveClass: String
|
||
}, transitionProps);
|
||
|
||
delete props.mode;
|
||
|
||
var TransitionGroup = {
|
||
props: props,
|
||
|
||
render: function render (h) {
|
||
var tag = this.tag || this.$vnode.data.tag || 'span';
|
||
var map = Object.create(null);
|
||
var prevChildren = this.prevChildren = this.children;
|
||
var rawChildren = this.$slots.default || [];
|
||
var children = this.children = [];
|
||
var transitionData = extractTransitionData(this);
|
||
|
||
for (var i = 0; i < rawChildren.length; i++) {
|
||
var c = rawChildren[i];
|
||
if (c.tag) {
|
||
if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
|
||
children.push(c);
|
||
map[c.key] = c
|
||
;(c.data || (c.data = {})).transition = transitionData;
|
||
} else if (true) {
|
||
var opts = c.componentOptions;
|
||
var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;
|
||
warn(("<transition-group> children must be keyed: <" + name + ">"));
|
||
}
|
||
}
|
||
}
|
||
|
||
if (prevChildren) {
|
||
var kept = [];
|
||
var removed = [];
|
||
for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {
|
||
var c$1 = prevChildren[i$1];
|
||
c$1.data.transition = transitionData;
|
||
c$1.data.pos = c$1.elm.getBoundingClientRect();
|
||
if (map[c$1.key]) {
|
||
kept.push(c$1);
|
||
} else {
|
||
removed.push(c$1);
|
||
}
|
||
}
|
||
this.kept = h(tag, null, kept);
|
||
this.removed = removed;
|
||
}
|
||
|
||
return h(tag, null, children)
|
||
},
|
||
|
||
beforeUpdate: function beforeUpdate () {
|
||
// force removing pass
|
||
this.__patch__(
|
||
this._vnode,
|
||
this.kept,
|
||
false, // hydrating
|
||
true // removeOnly (!important, avoids unnecessary moves)
|
||
);
|
||
this._vnode = this.kept;
|
||
},
|
||
|
||
updated: function updated () {
|
||
var children = this.prevChildren;
|
||
var moveClass = this.moveClass || ((this.name || 'v') + '-move');
|
||
if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
|
||
return
|
||
}
|
||
|
||
// we divide the work into three loops to avoid mixing DOM reads and writes
|
||
// in each iteration - which helps prevent layout thrashing.
|
||
children.forEach(callPendingCbs);
|
||
children.forEach(recordPosition);
|
||
children.forEach(applyTranslation);
|
||
|
||
// force reflow to put everything in position
|
||
// assign to this to avoid being removed in tree-shaking
|
||
// $flow-disable-line
|
||
this._reflow = document.body.offsetHeight;
|
||
|
||
children.forEach(function (c) {
|
||
if (c.data.moved) {
|
||
var el = c.elm;
|
||
var s = el.style;
|
||
addTransitionClass(el, moveClass);
|
||
s.transform = s.WebkitTransform = s.transitionDuration = '';
|
||
el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {
|
||
if (!e || /transform$/.test(e.propertyName)) {
|
||
el.removeEventListener(transitionEndEvent, cb);
|
||
el._moveCb = null;
|
||
removeTransitionClass(el, moveClass);
|
||
}
|
||
});
|
||
}
|
||
});
|
||
},
|
||
|
||
methods: {
|
||
hasMove: function hasMove (el, moveClass) {
|
||
/* istanbul ignore if */
|
||
if (!hasTransition) {
|
||
return false
|
||
}
|
||
/* istanbul ignore if */
|
||
if (this._hasMove) {
|
||
return this._hasMove
|
||
}
|
||
// Detect whether an element with the move class applied has
|
||
// CSS transitions. Since the element may be inside an entering
|
||
// transition at this very moment, we make a clone of it and remove
|
||
// all other transition classes applied to ensure only the move class
|
||
// is applied.
|
||
var clone = el.cloneNode();
|
||
if (el._transitionClasses) {
|
||
el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });
|
||
}
|
||
addClass(clone, moveClass);
|
||
clone.style.display = 'none';
|
||
this.$el.appendChild(clone);
|
||
var info = getTransitionInfo(clone);
|
||
this.$el.removeChild(clone);
|
||
return (this._hasMove = info.hasTransform)
|
||
}
|
||
}
|
||
}
|
||
|
||
function callPendingCbs (c) {
|
||
/* istanbul ignore if */
|
||
if (c.elm._moveCb) {
|
||
c.elm._moveCb();
|
||
}
|
||
/* istanbul ignore if */
|
||
if (c.elm._enterCb) {
|
||
c.elm._enterCb();
|
||
}
|
||
}
|
||
|
||
function recordPosition (c) {
|
||
c.data.newPos = c.elm.getBoundingClientRect();
|
||
}
|
||
|
||
function applyTranslation (c) {
|
||
var oldPos = c.data.pos;
|
||
var newPos = c.data.newPos;
|
||
var dx = oldPos.left - newPos.left;
|
||
var dy = oldPos.top - newPos.top;
|
||
if (dx || dy) {
|
||
c.data.moved = true;
|
||
var s = c.elm.style;
|
||
s.transform = s.WebkitTransform = "translate(" + dx + "px," + dy + "px)";
|
||
s.transitionDuration = '0s';
|
||
}
|
||
}
|
||
|
||
var platformComponents = {
|
||
Transition: Transition,
|
||
TransitionGroup: TransitionGroup
|
||
}
|
||
|
||
/* */
|
||
|
||
// install platform specific utils
|
||
Vue.config.mustUseProp = mustUseProp;
|
||
Vue.config.isReservedTag = isReservedTag;
|
||
Vue.config.isReservedAttr = isReservedAttr;
|
||
Vue.config.getTagNamespace = getTagNamespace;
|
||
Vue.config.isUnknownElement = isUnknownElement;
|
||
|
||
// install platform runtime directives & components
|
||
extend(Vue.options.directives, platformDirectives);
|
||
extend(Vue.options.components, platformComponents);
|
||
|
||
// install platform patch function
|
||
Vue.prototype.__patch__ = inBrowser ? patch : noop;
|
||
|
||
// public mount method
|
||
Vue.prototype.$mount = function (
|
||
el,
|
||
hydrating
|
||
) {
|
||
el = el && inBrowser ? query(el) : undefined;
|
||
return mountComponent(this, el, hydrating)
|
||
};
|
||
|
||
// devtools global hook
|
||
/* istanbul ignore next */
|
||
if (inBrowser) {
|
||
setTimeout(function () {
|
||
if (config.devtools) {
|
||
if (devtools) {
|
||
devtools.emit('init', Vue);
|
||
} else if (
|
||
"development" !== 'production' &&
|
||
"development" !== 'test' &&
|
||
isChrome
|
||
) {
|
||
console[console.info ? 'info' : 'log'](
|
||
'Download the Vue Devtools extension for a better development experience:\n' +
|
||
'https://github.com/vuejs/vue-devtools'
|
||
);
|
||
}
|
||
}
|
||
if ("development" !== 'production' &&
|
||
"development" !== 'test' &&
|
||
config.productionTip !== false &&
|
||
typeof console !== 'undefined'
|
||
) {
|
||
console[console.info ? 'info' : 'log'](
|
||
"You are running Vue in development mode.\n" +
|
||
"Make sure to turn on production mode when deploying for production.\n" +
|
||
"See more tips at https://vuejs.org/guide/deployment.html"
|
||
);
|
||
}
|
||
}, 0);
|
||
}
|
||
|
||
/* */
|
||
|
||
var defaultTagRE = /\{\{((?:.|\n)+?)\}\}/g;
|
||
var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
|
||
|
||
var buildRegex = cached(function (delimiters) {
|
||
var open = delimiters[0].replace(regexEscapeRE, '\\$&');
|
||
var close = delimiters[1].replace(regexEscapeRE, '\\$&');
|
||
return new RegExp(open + '((?:.|\\n)+?)' + close, 'g')
|
||
});
|
||
|
||
|
||
|
||
function parseText (
|
||
text,
|
||
delimiters
|
||
) {
|
||
var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
|
||
if (!tagRE.test(text)) {
|
||
return
|
||
}
|
||
var tokens = [];
|
||
var rawTokens = [];
|
||
var lastIndex = tagRE.lastIndex = 0;
|
||
var match, index, tokenValue;
|
||
while ((match = tagRE.exec(text))) {
|
||
index = match.index;
|
||
// push text token
|
||
if (index > lastIndex) {
|
||
rawTokens.push(tokenValue = text.slice(lastIndex, index));
|
||
tokens.push(JSON.stringify(tokenValue));
|
||
}
|
||
// tag token
|
||
var exp = parseFilters(match[1].trim());
|
||
tokens.push(("_s(" + exp + ")"));
|
||
rawTokens.push({ '@binding': exp });
|
||
lastIndex = index + match[0].length;
|
||
}
|
||
if (lastIndex < text.length) {
|
||
rawTokens.push(tokenValue = text.slice(lastIndex));
|
||
tokens.push(JSON.stringify(tokenValue));
|
||
}
|
||
return {
|
||
expression: tokens.join('+'),
|
||
tokens: rawTokens
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function transformNode (el, options) {
|
||
var warn = options.warn || baseWarn;
|
||
var staticClass = getAndRemoveAttr(el, 'class');
|
||
if ("development" !== 'production' && staticClass) {
|
||
var res = parseText(staticClass, options.delimiters);
|
||
if (res) {
|
||
warn(
|
||
"class=\"" + staticClass + "\": " +
|
||
'Interpolation inside attributes has been removed. ' +
|
||
'Use v-bind or the colon shorthand instead. For example, ' +
|
||
'instead of <div class="{{ val }}">, use <div :class="val">.'
|
||
);
|
||
}
|
||
}
|
||
if (staticClass) {
|
||
el.staticClass = JSON.stringify(staticClass);
|
||
}
|
||
var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
|
||
if (classBinding) {
|
||
el.classBinding = classBinding;
|
||
}
|
||
}
|
||
|
||
function genData (el) {
|
||
var data = '';
|
||
if (el.staticClass) {
|
||
data += "staticClass:" + (el.staticClass) + ",";
|
||
}
|
||
if (el.classBinding) {
|
||
data += "class:" + (el.classBinding) + ",";
|
||
}
|
||
return data
|
||
}
|
||
|
||
var klass$1 = {
|
||
staticKeys: ['staticClass'],
|
||
transformNode: transformNode,
|
||
genData: genData
|
||
}
|
||
|
||
/* */
|
||
|
||
function transformNode$1 (el, options) {
|
||
var warn = options.warn || baseWarn;
|
||
var staticStyle = getAndRemoveAttr(el, 'style');
|
||
if (staticStyle) {
|
||
/* istanbul ignore if */
|
||
if (true) {
|
||
var res = parseText(staticStyle, options.delimiters);
|
||
if (res) {
|
||
warn(
|
||
"style=\"" + staticStyle + "\": " +
|
||
'Interpolation inside attributes has been removed. ' +
|
||
'Use v-bind or the colon shorthand instead. For example, ' +
|
||
'instead of <div style="{{ val }}">, use <div :style="val">.'
|
||
);
|
||
}
|
||
}
|
||
el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
|
||
}
|
||
|
||
var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
|
||
if (styleBinding) {
|
||
el.styleBinding = styleBinding;
|
||
}
|
||
}
|
||
|
||
function genData$1 (el) {
|
||
var data = '';
|
||
if (el.staticStyle) {
|
||
data += "staticStyle:" + (el.staticStyle) + ",";
|
||
}
|
||
if (el.styleBinding) {
|
||
data += "style:(" + (el.styleBinding) + "),";
|
||
}
|
||
return data
|
||
}
|
||
|
||
var style$1 = {
|
||
staticKeys: ['staticStyle'],
|
||
transformNode: transformNode$1,
|
||
genData: genData$1
|
||
}
|
||
|
||
/* */
|
||
|
||
var decoder;
|
||
|
||
var he = {
|
||
decode: function decode (html) {
|
||
decoder = decoder || document.createElement('div');
|
||
decoder.innerHTML = html;
|
||
return decoder.textContent
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var isUnaryTag = makeMap(
|
||
'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
|
||
'link,meta,param,source,track,wbr'
|
||
);
|
||
|
||
// Elements that you can, intentionally, leave open
|
||
// (and which close themselves)
|
||
var canBeLeftOpenTag = makeMap(
|
||
'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'
|
||
);
|
||
|
||
// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
|
||
// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
|
||
var isNonPhrasingTag = makeMap(
|
||
'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
|
||
'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
|
||
'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
|
||
'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
|
||
'title,tr,track'
|
||
);
|
||
|
||
/**
|
||
* Not type-checking this file because it's mostly vendor code.
|
||
*/
|
||
|
||
/*!
|
||
* HTML Parser By John Resig (ejohn.org)
|
||
* Modified by Juriy "kangax" Zaytsev
|
||
* Original code by Erik Arvidsson, Mozilla Public License
|
||
* http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
|
||
*/
|
||
|
||
// Regular Expressions for parsing tags and attributes
|
||
var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
|
||
// could use https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName
|
||
// but for Vue templates we can enforce a simple charset
|
||
var ncname = '[a-zA-Z_][\\w\\-\\.]*';
|
||
var qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")";
|
||
var startTagOpen = new RegExp(("^<" + qnameCapture));
|
||
var startTagClose = /^\s*(\/?)>/;
|
||
var endTag = new RegExp(("^<\\/" + qnameCapture + "[^>]*>"));
|
||
var doctype = /^<!DOCTYPE [^>]+>/i;
|
||
// #7298: escape - to avoid being pased as HTML comment when inlined in page
|
||
var comment = /^<!\--/;
|
||
var conditionalComment = /^<!\[/;
|
||
|
||
var IS_REGEX_CAPTURING_BROKEN = false;
|
||
'x'.replace(/x(.)?/g, function (m, g) {
|
||
IS_REGEX_CAPTURING_BROKEN = g === '';
|
||
});
|
||
|
||
// Special Elements (can contain anything)
|
||
var isPlainTextElement = makeMap('script,style,textarea', true);
|
||
var reCache = {};
|
||
|
||
var decodingMap = {
|
||
'<': '<',
|
||
'>': '>',
|
||
'"': '"',
|
||
'&': '&',
|
||
' ': '\n',
|
||
'	': '\t'
|
||
};
|
||
var encodedAttr = /&(?:lt|gt|quot|amp);/g;
|
||
var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#10|#9);/g;
|
||
|
||
// #5992
|
||
var isIgnoreNewlineTag = makeMap('pre,textarea', true);
|
||
var shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; };
|
||
|
||
function decodeAttr (value, shouldDecodeNewlines) {
|
||
var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
|
||
return value.replace(re, function (match) { return decodingMap[match]; })
|
||
}
|
||
|
||
function parseHTML (html, options) {
|
||
var stack = [];
|
||
var expectHTML = options.expectHTML;
|
||
var isUnaryTag$$1 = options.isUnaryTag || no;
|
||
var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;
|
||
var index = 0;
|
||
var last, lastTag;
|
||
while (html) {
|
||
last = html;
|
||
// Make sure we're not in a plaintext content element like script/style
|
||
if (!lastTag || !isPlainTextElement(lastTag)) {
|
||
var textEnd = html.indexOf('<');
|
||
if (textEnd === 0) {
|
||
// Comment:
|
||
if (comment.test(html)) {
|
||
var commentEnd = html.indexOf('-->');
|
||
|
||
if (commentEnd >= 0) {
|
||
if (options.shouldKeepComment) {
|
||
options.comment(html.substring(4, commentEnd));
|
||
}
|
||
advance(commentEnd + 3);
|
||
continue
|
||
}
|
||
}
|
||
|
||
// http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
|
||
if (conditionalComment.test(html)) {
|
||
var conditionalEnd = html.indexOf(']>');
|
||
|
||
if (conditionalEnd >= 0) {
|
||
advance(conditionalEnd + 2);
|
||
continue
|
||
}
|
||
}
|
||
|
||
// Doctype:
|
||
var doctypeMatch = html.match(doctype);
|
||
if (doctypeMatch) {
|
||
advance(doctypeMatch[0].length);
|
||
continue
|
||
}
|
||
|
||
// End tag:
|
||
var endTagMatch = html.match(endTag);
|
||
if (endTagMatch) {
|
||
var curIndex = index;
|
||
advance(endTagMatch[0].length);
|
||
parseEndTag(endTagMatch[1], curIndex, index);
|
||
continue
|
||
}
|
||
|
||
// Start tag:
|
||
var startTagMatch = parseStartTag();
|
||
if (startTagMatch) {
|
||
handleStartTag(startTagMatch);
|
||
if (shouldIgnoreFirstNewline(lastTag, html)) {
|
||
advance(1);
|
||
}
|
||
continue
|
||
}
|
||
}
|
||
|
||
var text = (void 0), rest = (void 0), next = (void 0);
|
||
if (textEnd >= 0) {
|
||
rest = html.slice(textEnd);
|
||
while (
|
||
!endTag.test(rest) &&
|
||
!startTagOpen.test(rest) &&
|
||
!comment.test(rest) &&
|
||
!conditionalComment.test(rest)
|
||
) {
|
||
// < in plain text, be forgiving and treat it as text
|
||
next = rest.indexOf('<', 1);
|
||
if (next < 0) { break }
|
||
textEnd += next;
|
||
rest = html.slice(textEnd);
|
||
}
|
||
text = html.substring(0, textEnd);
|
||
advance(textEnd);
|
||
}
|
||
|
||
if (textEnd < 0) {
|
||
text = html;
|
||
html = '';
|
||
}
|
||
|
||
if (options.chars && text) {
|
||
options.chars(text);
|
||
}
|
||
} else {
|
||
var endTagLength = 0;
|
||
var stackedTag = lastTag.toLowerCase();
|
||
var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\s\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));
|
||
var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {
|
||
endTagLength = endTag.length;
|
||
if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {
|
||
text = text
|
||
.replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
|
||
.replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
|
||
}
|
||
if (shouldIgnoreFirstNewline(stackedTag, text)) {
|
||
text = text.slice(1);
|
||
}
|
||
if (options.chars) {
|
||
options.chars(text);
|
||
}
|
||
return ''
|
||
});
|
||
index += html.length - rest$1.length;
|
||
html = rest$1;
|
||
parseEndTag(stackedTag, index - endTagLength, index);
|
||
}
|
||
|
||
if (html === last) {
|
||
options.chars && options.chars(html);
|
||
if ("development" !== 'production' && !stack.length && options.warn) {
|
||
options.warn(("Mal-formatted tag at end of template: \"" + html + "\""));
|
||
}
|
||
break
|
||
}
|
||
}
|
||
|
||
// Clean up any remaining tags
|
||
parseEndTag();
|
||
|
||
function advance (n) {
|
||
index += n;
|
||
html = html.substring(n);
|
||
}
|
||
|
||
function parseStartTag () {
|
||
var start = html.match(startTagOpen);
|
||
if (start) {
|
||
var match = {
|
||
tagName: start[1],
|
||
attrs: [],
|
||
start: index
|
||
};
|
||
advance(start[0].length);
|
||
var end, attr;
|
||
while (!(end = html.match(startTagClose)) && (attr = html.match(attribute))) {
|
||
advance(attr[0].length);
|
||
match.attrs.push(attr);
|
||
}
|
||
if (end) {
|
||
match.unarySlash = end[1];
|
||
advance(end[0].length);
|
||
match.end = index;
|
||
return match
|
||
}
|
||
}
|
||
}
|
||
|
||
function handleStartTag (match) {
|
||
var tagName = match.tagName;
|
||
var unarySlash = match.unarySlash;
|
||
|
||
if (expectHTML) {
|
||
if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
|
||
parseEndTag(lastTag);
|
||
}
|
||
if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {
|
||
parseEndTag(tagName);
|
||
}
|
||
}
|
||
|
||
var unary = isUnaryTag$$1(tagName) || !!unarySlash;
|
||
|
||
var l = match.attrs.length;
|
||
var attrs = new Array(l);
|
||
for (var i = 0; i < l; i++) {
|
||
var args = match.attrs[i];
|
||
// hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778
|
||
if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('""') === -1) {
|
||
if (args[3] === '') { delete args[3]; }
|
||
if (args[4] === '') { delete args[4]; }
|
||
if (args[5] === '') { delete args[5]; }
|
||
}
|
||
var value = args[3] || args[4] || args[5] || '';
|
||
var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
|
||
? options.shouldDecodeNewlinesForHref
|
||
: options.shouldDecodeNewlines;
|
||
attrs[i] = {
|
||
name: args[1],
|
||
value: decodeAttr(value, shouldDecodeNewlines)
|
||
};
|
||
}
|
||
|
||
if (!unary) {
|
||
stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs });
|
||
lastTag = tagName;
|
||
}
|
||
|
||
if (options.start) {
|
||
options.start(tagName, attrs, unary, match.start, match.end);
|
||
}
|
||
}
|
||
|
||
function parseEndTag (tagName, start, end) {
|
||
var pos, lowerCasedTagName;
|
||
if (start == null) { start = index; }
|
||
if (end == null) { end = index; }
|
||
|
||
if (tagName) {
|
||
lowerCasedTagName = tagName.toLowerCase();
|
||
}
|
||
|
||
// Find the closest opened tag of the same type
|
||
if (tagName) {
|
||
for (pos = stack.length - 1; pos >= 0; pos--) {
|
||
if (stack[pos].lowerCasedTag === lowerCasedTagName) {
|
||
break
|
||
}
|
||
}
|
||
} else {
|
||
// If no tag name is provided, clean shop
|
||
pos = 0;
|
||
}
|
||
|
||
if (pos >= 0) {
|
||
// Close all the open elements, up the stack
|
||
for (var i = stack.length - 1; i >= pos; i--) {
|
||
if ("development" !== 'production' &&
|
||
(i > pos || !tagName) &&
|
||
options.warn
|
||
) {
|
||
options.warn(
|
||
("tag <" + (stack[i].tag) + "> has no matching end tag.")
|
||
);
|
||
}
|
||
if (options.end) {
|
||
options.end(stack[i].tag, start, end);
|
||
}
|
||
}
|
||
|
||
// Remove the open elements from the stack
|
||
stack.length = pos;
|
||
lastTag = pos && stack[pos - 1].tag;
|
||
} else if (lowerCasedTagName === 'br') {
|
||
if (options.start) {
|
||
options.start(tagName, [], true, start, end);
|
||
}
|
||
} else if (lowerCasedTagName === 'p') {
|
||
if (options.start) {
|
||
options.start(tagName, [], false, start, end);
|
||
}
|
||
if (options.end) {
|
||
options.end(tagName, start, end);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var onRE = /^@|^v-on:/;
|
||
var dirRE = /^v-|^@|^:/;
|
||
var forAliasRE = /([^]*?)\s+(?:in|of)\s+([^]*)/;
|
||
var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
|
||
var stripParensRE = /^\(|\)$/g;
|
||
|
||
var argRE = /:(.*)$/;
|
||
var bindRE = /^:|^v-bind:/;
|
||
var modifierRE = /\.[^.]+/g;
|
||
|
||
var decodeHTMLCached = cached(he.decode);
|
||
|
||
// configurable state
|
||
var warn$2;
|
||
var delimiters;
|
||
var transforms;
|
||
var preTransforms;
|
||
var postTransforms;
|
||
var platformIsPreTag;
|
||
var platformMustUseProp;
|
||
var platformGetTagNamespace;
|
||
|
||
|
||
|
||
function createASTElement (
|
||
tag,
|
||
attrs,
|
||
parent
|
||
) {
|
||
return {
|
||
type: 1,
|
||
tag: tag,
|
||
attrsList: attrs,
|
||
attrsMap: makeAttrsMap(attrs),
|
||
parent: parent,
|
||
children: []
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Convert HTML string to AST.
|
||
*/
|
||
function parse (
|
||
template,
|
||
options
|
||
) {
|
||
warn$2 = options.warn || baseWarn;
|
||
|
||
platformIsPreTag = options.isPreTag || no;
|
||
platformMustUseProp = options.mustUseProp || no;
|
||
platformGetTagNamespace = options.getTagNamespace || no;
|
||
|
||
transforms = pluckModuleFunction(options.modules, 'transformNode');
|
||
preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
|
||
postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
|
||
|
||
delimiters = options.delimiters;
|
||
|
||
var stack = [];
|
||
var preserveWhitespace = options.preserveWhitespace !== false;
|
||
var root;
|
||
var currentParent;
|
||
var inVPre = false;
|
||
var inPre = false;
|
||
var warned = false;
|
||
|
||
function warnOnce (msg) {
|
||
if (!warned) {
|
||
warned = true;
|
||
warn$2(msg);
|
||
}
|
||
}
|
||
|
||
function closeElement (element) {
|
||
// check pre state
|
||
if (element.pre) {
|
||
inVPre = false;
|
||
}
|
||
if (platformIsPreTag(element.tag)) {
|
||
inPre = false;
|
||
}
|
||
// apply post-transforms
|
||
for (var i = 0; i < postTransforms.length; i++) {
|
||
postTransforms[i](element, options);
|
||
}
|
||
}
|
||
|
||
parseHTML(template, {
|
||
warn: warn$2,
|
||
expectHTML: options.expectHTML,
|
||
isUnaryTag: options.isUnaryTag,
|
||
canBeLeftOpenTag: options.canBeLeftOpenTag,
|
||
shouldDecodeNewlines: options.shouldDecodeNewlines,
|
||
shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
|
||
shouldKeepComment: options.comments,
|
||
start: function start (tag, attrs, unary) {
|
||
// check namespace.
|
||
// inherit parent ns if there is one
|
||
var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
|
||
|
||
// handle IE svg bug
|
||
/* istanbul ignore if */
|
||
if (isIE && ns === 'svg') {
|
||
attrs = guardIESVGBug(attrs);
|
||
}
|
||
|
||
var element = createASTElement(tag, attrs, currentParent);
|
||
if (ns) {
|
||
element.ns = ns;
|
||
}
|
||
|
||
if (isForbiddenTag(element) && !isServerRendering()) {
|
||
element.forbidden = true;
|
||
"development" !== 'production' && warn$2(
|
||
'Templates should only be responsible for mapping the state to the ' +
|
||
'UI. Avoid placing tags with side-effects in your templates, such as ' +
|
||
"<" + tag + ">" + ', as they will not be parsed.'
|
||
);
|
||
}
|
||
|
||
// apply pre-transforms
|
||
for (var i = 0; i < preTransforms.length; i++) {
|
||
element = preTransforms[i](element, options) || element;
|
||
}
|
||
|
||
if (!inVPre) {
|
||
processPre(element);
|
||
if (element.pre) {
|
||
inVPre = true;
|
||
}
|
||
}
|
||
if (platformIsPreTag(element.tag)) {
|
||
inPre = true;
|
||
}
|
||
if (inVPre) {
|
||
processRawAttrs(element);
|
||
} else if (!element.processed) {
|
||
// structural directives
|
||
processFor(element);
|
||
processIf(element);
|
||
processOnce(element);
|
||
// element-scope stuff
|
||
processElement(element, options);
|
||
}
|
||
|
||
function checkRootConstraints (el) {
|
||
if (true) {
|
||
if (el.tag === 'slot' || el.tag === 'template') {
|
||
warnOnce(
|
||
"Cannot use <" + (el.tag) + "> as component root element because it may " +
|
||
'contain multiple nodes.'
|
||
);
|
||
}
|
||
if (el.attrsMap.hasOwnProperty('v-for')) {
|
||
warnOnce(
|
||
'Cannot use v-for on stateful component root element because ' +
|
||
'it renders multiple elements.'
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
// tree management
|
||
if (!root) {
|
||
root = element;
|
||
checkRootConstraints(root);
|
||
} else if (!stack.length) {
|
||
// allow root elements with v-if, v-else-if and v-else
|
||
if (root.if && (element.elseif || element.else)) {
|
||
checkRootConstraints(element);
|
||
addIfCondition(root, {
|
||
exp: element.elseif,
|
||
block: element
|
||
});
|
||
} else if (true) {
|
||
warnOnce(
|
||
"Component template should contain exactly one root element. " +
|
||
"If you are using v-if on multiple elements, " +
|
||
"use v-else-if to chain them instead."
|
||
);
|
||
}
|
||
}
|
||
if (currentParent && !element.forbidden) {
|
||
if (element.elseif || element.else) {
|
||
processIfConditions(element, currentParent);
|
||
} else if (element.slotScope) { // scoped slot
|
||
currentParent.plain = false;
|
||
var name = element.slotTarget || '"default"';(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;
|
||
} else {
|
||
currentParent.children.push(element);
|
||
element.parent = currentParent;
|
||
}
|
||
}
|
||
if (!unary) {
|
||
currentParent = element;
|
||
stack.push(element);
|
||
} else {
|
||
closeElement(element);
|
||
}
|
||
},
|
||
|
||
end: function end () {
|
||
// remove trailing whitespace
|
||
var element = stack[stack.length - 1];
|
||
var lastNode = element.children[element.children.length - 1];
|
||
if (lastNode && lastNode.type === 3 && lastNode.text === ' ' && !inPre) {
|
||
element.children.pop();
|
||
}
|
||
// pop stack
|
||
stack.length -= 1;
|
||
currentParent = stack[stack.length - 1];
|
||
closeElement(element);
|
||
},
|
||
|
||
chars: function chars (text) {
|
||
if (!currentParent) {
|
||
if (true) {
|
||
if (text === template) {
|
||
warnOnce(
|
||
'Component template requires a root element, rather than just text.'
|
||
);
|
||
} else if ((text = text.trim())) {
|
||
warnOnce(
|
||
("text \"" + text + "\" outside root element will be ignored.")
|
||
);
|
||
}
|
||
}
|
||
return
|
||
}
|
||
// IE textarea placeholder bug
|
||
/* istanbul ignore if */
|
||
if (isIE &&
|
||
currentParent.tag === 'textarea' &&
|
||
currentParent.attrsMap.placeholder === text
|
||
) {
|
||
return
|
||
}
|
||
var children = currentParent.children;
|
||
text = inPre || text.trim()
|
||
? isTextTag(currentParent) ? text : decodeHTMLCached(text)
|
||
// only preserve whitespace if its not right after a starting tag
|
||
: preserveWhitespace && children.length ? ' ' : '';
|
||
if (text) {
|
||
var res;
|
||
if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
|
||
children.push({
|
||
type: 2,
|
||
expression: res.expression,
|
||
tokens: res.tokens,
|
||
text: text
|
||
});
|
||
} else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {
|
||
children.push({
|
||
type: 3,
|
||
text: text
|
||
});
|
||
}
|
||
}
|
||
},
|
||
comment: function comment (text) {
|
||
currentParent.children.push({
|
||
type: 3,
|
||
text: text,
|
||
isComment: true
|
||
});
|
||
}
|
||
});
|
||
return root
|
||
}
|
||
|
||
function processPre (el) {
|
||
if (getAndRemoveAttr(el, 'v-pre') != null) {
|
||
el.pre = true;
|
||
}
|
||
}
|
||
|
||
function processRawAttrs (el) {
|
||
var l = el.attrsList.length;
|
||
if (l) {
|
||
var attrs = el.attrs = new Array(l);
|
||
for (var i = 0; i < l; i++) {
|
||
attrs[i] = {
|
||
name: el.attrsList[i].name,
|
||
value: JSON.stringify(el.attrsList[i].value)
|
||
};
|
||
}
|
||
} else if (!el.pre) {
|
||
// non root node in pre blocks with no attributes
|
||
el.plain = true;
|
||
}
|
||
}
|
||
|
||
function processElement (element, options) {
|
||
processKey(element);
|
||
|
||
// determine whether this is a plain element after
|
||
// removing structural attributes
|
||
element.plain = !element.key && !element.attrsList.length;
|
||
|
||
processRef(element);
|
||
processSlot(element);
|
||
processComponent(element);
|
||
for (var i = 0; i < transforms.length; i++) {
|
||
element = transforms[i](element, options) || element;
|
||
}
|
||
processAttrs(element);
|
||
}
|
||
|
||
function processKey (el) {
|
||
var exp = getBindingAttr(el, 'key');
|
||
if (exp) {
|
||
if ("development" !== 'production' && el.tag === 'template') {
|
||
warn$2("<template> cannot be keyed. Place the key on real elements instead.");
|
||
}
|
||
el.key = exp;
|
||
}
|
||
}
|
||
|
||
function processRef (el) {
|
||
var ref = getBindingAttr(el, 'ref');
|
||
if (ref) {
|
||
el.ref = ref;
|
||
el.refInFor = checkInFor(el);
|
||
}
|
||
}
|
||
|
||
function processFor (el) {
|
||
var exp;
|
||
if ((exp = getAndRemoveAttr(el, 'v-for'))) {
|
||
var res = parseFor(exp);
|
||
if (res) {
|
||
extend(el, res);
|
||
} else if (true) {
|
||
warn$2(
|
||
("Invalid v-for expression: " + exp)
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
function parseFor (exp) {
|
||
var inMatch = exp.match(forAliasRE);
|
||
if (!inMatch) { return }
|
||
var res = {};
|
||
res.for = inMatch[2].trim();
|
||
var alias = inMatch[1].trim().replace(stripParensRE, '');
|
||
var iteratorMatch = alias.match(forIteratorRE);
|
||
if (iteratorMatch) {
|
||
res.alias = alias.replace(forIteratorRE, '');
|
||
res.iterator1 = iteratorMatch[1].trim();
|
||
if (iteratorMatch[2]) {
|
||
res.iterator2 = iteratorMatch[2].trim();
|
||
}
|
||
} else {
|
||
res.alias = alias;
|
||
}
|
||
return res
|
||
}
|
||
|
||
function processIf (el) {
|
||
var exp = getAndRemoveAttr(el, 'v-if');
|
||
if (exp) {
|
||
el.if = exp;
|
||
addIfCondition(el, {
|
||
exp: exp,
|
||
block: el
|
||
});
|
||
} else {
|
||
if (getAndRemoveAttr(el, 'v-else') != null) {
|
||
el.else = true;
|
||
}
|
||
var elseif = getAndRemoveAttr(el, 'v-else-if');
|
||
if (elseif) {
|
||
el.elseif = elseif;
|
||
}
|
||
}
|
||
}
|
||
|
||
function processIfConditions (el, parent) {
|
||
var prev = findPrevElement(parent.children);
|
||
if (prev && prev.if) {
|
||
addIfCondition(prev, {
|
||
exp: el.elseif,
|
||
block: el
|
||
});
|
||
} else if (true) {
|
||
warn$2(
|
||
"v-" + (el.elseif ? ('else-if="' + el.elseif + '"') : 'else') + " " +
|
||
"used on element <" + (el.tag) + "> without corresponding v-if."
|
||
);
|
||
}
|
||
}
|
||
|
||
function findPrevElement (children) {
|
||
var i = children.length;
|
||
while (i--) {
|
||
if (children[i].type === 1) {
|
||
return children[i]
|
||
} else {
|
||
if ("development" !== 'production' && children[i].text !== ' ') {
|
||
warn$2(
|
||
"text \"" + (children[i].text.trim()) + "\" between v-if and v-else(-if) " +
|
||
"will be ignored."
|
||
);
|
||
}
|
||
children.pop();
|
||
}
|
||
}
|
||
}
|
||
|
||
function addIfCondition (el, condition) {
|
||
if (!el.ifConditions) {
|
||
el.ifConditions = [];
|
||
}
|
||
el.ifConditions.push(condition);
|
||
}
|
||
|
||
function processOnce (el) {
|
||
var once$$1 = getAndRemoveAttr(el, 'v-once');
|
||
if (once$$1 != null) {
|
||
el.once = true;
|
||
}
|
||
}
|
||
|
||
function processSlot (el) {
|
||
if (el.tag === 'slot') {
|
||
el.slotName = getBindingAttr(el, 'name');
|
||
if ("development" !== 'production' && el.key) {
|
||
warn$2(
|
||
"`key` does not work on <slot> because slots are abstract outlets " +
|
||
"and can possibly expand into multiple elements. " +
|
||
"Use the key on a wrapping element instead."
|
||
);
|
||
}
|
||
} else {
|
||
var slotScope;
|
||
if (el.tag === 'template') {
|
||
slotScope = getAndRemoveAttr(el, 'scope');
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' && slotScope) {
|
||
warn$2(
|
||
"the \"scope\" attribute for scoped slots have been deprecated and " +
|
||
"replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
|
||
"can also be used on plain elements in addition to <template> to " +
|
||
"denote scoped slots.",
|
||
true
|
||
);
|
||
}
|
||
el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
|
||
} else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' && el.attrsMap['v-for']) {
|
||
warn$2(
|
||
"Ambiguous combined usage of slot-scope and v-for on <" + (el.tag) + "> " +
|
||
"(v-for takes higher priority). Use a wrapper <template> for the " +
|
||
"scoped slot to make it clearer.",
|
||
true
|
||
);
|
||
}
|
||
el.slotScope = slotScope;
|
||
}
|
||
var slotTarget = getBindingAttr(el, 'slot');
|
||
if (slotTarget) {
|
||
el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
|
||
// preserve slot as an attribute for native shadow DOM compat
|
||
// only for non-scoped slots.
|
||
if (el.tag !== 'template' && !el.slotScope) {
|
||
addAttr(el, 'slot', slotTarget);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function processComponent (el) {
|
||
var binding;
|
||
if ((binding = getBindingAttr(el, 'is'))) {
|
||
el.component = binding;
|
||
}
|
||
if (getAndRemoveAttr(el, 'inline-template') != null) {
|
||
el.inlineTemplate = true;
|
||
}
|
||
}
|
||
|
||
function processAttrs (el) {
|
||
var list = el.attrsList;
|
||
var i, l, name, rawName, value, modifiers, isProp;
|
||
for (i = 0, l = list.length; i < l; i++) {
|
||
name = rawName = list[i].name;
|
||
value = list[i].value;
|
||
if (dirRE.test(name)) {
|
||
// mark element as dynamic
|
||
el.hasBindings = true;
|
||
// modifiers
|
||
modifiers = parseModifiers(name);
|
||
if (modifiers) {
|
||
name = name.replace(modifierRE, '');
|
||
}
|
||
if (bindRE.test(name)) { // v-bind
|
||
name = name.replace(bindRE, '');
|
||
value = parseFilters(value);
|
||
isProp = false;
|
||
if (modifiers) {
|
||
if (modifiers.prop) {
|
||
isProp = true;
|
||
name = camelize(name);
|
||
if (name === 'innerHtml') { name = 'innerHTML'; }
|
||
}
|
||
if (modifiers.camel) {
|
||
name = camelize(name);
|
||
}
|
||
if (modifiers.sync) {
|
||
addHandler(
|
||
el,
|
||
("update:" + (camelize(name))),
|
||
genAssignmentCode(value, "$event")
|
||
);
|
||
}
|
||
}
|
||
if (isProp || (
|
||
!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)
|
||
)) {
|
||
addProp(el, name, value);
|
||
} else {
|
||
addAttr(el, name, value);
|
||
}
|
||
} else if (onRE.test(name)) { // v-on
|
||
name = name.replace(onRE, '');
|
||
addHandler(el, name, value, modifiers, false, warn$2);
|
||
} else { // normal directives
|
||
name = name.replace(dirRE, '');
|
||
// parse arg
|
||
var argMatch = name.match(argRE);
|
||
var arg = argMatch && argMatch[1];
|
||
if (arg) {
|
||
name = name.slice(0, -(arg.length + 1));
|
||
}
|
||
addDirective(el, name, rawName, value, arg, modifiers);
|
||
if ("development" !== 'production' && name === 'model') {
|
||
checkForAliasModel(el, value);
|
||
}
|
||
}
|
||
} else {
|
||
// literal attribute
|
||
if (true) {
|
||
var res = parseText(value, delimiters);
|
||
if (res) {
|
||
warn$2(
|
||
name + "=\"" + value + "\": " +
|
||
'Interpolation inside attributes has been removed. ' +
|
||
'Use v-bind or the colon shorthand instead. For example, ' +
|
||
'instead of <div id="{{ val }}">, use <div :id="val">.'
|
||
);
|
||
}
|
||
}
|
||
addAttr(el, name, JSON.stringify(value));
|
||
// #6887 firefox doesn't update muted state if set via attribute
|
||
// even immediately after element creation
|
||
if (!el.component &&
|
||
name === 'muted' &&
|
||
platformMustUseProp(el.tag, el.attrsMap.type, name)) {
|
||
addProp(el, name, 'true');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function checkInFor (el) {
|
||
var parent = el;
|
||
while (parent) {
|
||
if (parent.for !== undefined) {
|
||
return true
|
||
}
|
||
parent = parent.parent;
|
||
}
|
||
return false
|
||
}
|
||
|
||
function parseModifiers (name) {
|
||
var match = name.match(modifierRE);
|
||
if (match) {
|
||
var ret = {};
|
||
match.forEach(function (m) { ret[m.slice(1)] = true; });
|
||
return ret
|
||
}
|
||
}
|
||
|
||
function makeAttrsMap (attrs) {
|
||
var map = {};
|
||
for (var i = 0, l = attrs.length; i < l; i++) {
|
||
if (
|
||
"development" !== 'production' &&
|
||
map[attrs[i].name] && !isIE && !isEdge
|
||
) {
|
||
warn$2('duplicate attribute: ' + attrs[i].name);
|
||
}
|
||
map[attrs[i].name] = attrs[i].value;
|
||
}
|
||
return map
|
||
}
|
||
|
||
// for script (e.g. type="x/template") or style, do not decode content
|
||
function isTextTag (el) {
|
||
return el.tag === 'script' || el.tag === 'style'
|
||
}
|
||
|
||
function isForbiddenTag (el) {
|
||
return (
|
||
el.tag === 'style' ||
|
||
(el.tag === 'script' && (
|
||
!el.attrsMap.type ||
|
||
el.attrsMap.type === 'text/javascript'
|
||
))
|
||
)
|
||
}
|
||
|
||
var ieNSBug = /^xmlns:NS\d+/;
|
||
var ieNSPrefix = /^NS\d+:/;
|
||
|
||
/* istanbul ignore next */
|
||
function guardIESVGBug (attrs) {
|
||
var res = [];
|
||
for (var i = 0; i < attrs.length; i++) {
|
||
var attr = attrs[i];
|
||
if (!ieNSBug.test(attr.name)) {
|
||
attr.name = attr.name.replace(ieNSPrefix, '');
|
||
res.push(attr);
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
function checkForAliasModel (el, value) {
|
||
var _el = el;
|
||
while (_el) {
|
||
if (_el.for && _el.alias === value) {
|
||
warn$2(
|
||
"<" + (el.tag) + " v-model=\"" + value + "\">: " +
|
||
"You are binding v-model directly to a v-for iteration alias. " +
|
||
"This will not be able to modify the v-for source array because " +
|
||
"writing to the alias is like modifying a function local variable. " +
|
||
"Consider using an array of objects and use v-model on an object property instead."
|
||
);
|
||
}
|
||
_el = _el.parent;
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Expand input[v-model] with dyanmic type bindings into v-if-else chains
|
||
* Turn this:
|
||
* <input v-model="data[type]" :type="type">
|
||
* into this:
|
||
* <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
|
||
* <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
|
||
* <input v-else :type="type" v-model="data[type]">
|
||
*/
|
||
|
||
function preTransformNode (el, options) {
|
||
if (el.tag === 'input') {
|
||
var map = el.attrsMap;
|
||
if (!map['v-model']) {
|
||
return
|
||
}
|
||
|
||
var typeBinding;
|
||
if (map[':type'] || map['v-bind:type']) {
|
||
typeBinding = getBindingAttr(el, 'type');
|
||
}
|
||
if (!map.type && !typeBinding && map['v-bind']) {
|
||
typeBinding = "(" + (map['v-bind']) + ").type";
|
||
}
|
||
|
||
if (typeBinding) {
|
||
var ifCondition = getAndRemoveAttr(el, 'v-if', true);
|
||
var ifConditionExtra = ifCondition ? ("&&(" + ifCondition + ")") : "";
|
||
var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
|
||
var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
|
||
// 1. checkbox
|
||
var branch0 = cloneASTElement(el);
|
||
// process for on the main node
|
||
processFor(branch0);
|
||
addRawAttr(branch0, 'type', 'checkbox');
|
||
processElement(branch0, options);
|
||
branch0.processed = true; // prevent it from double-processed
|
||
branch0.if = "(" + typeBinding + ")==='checkbox'" + ifConditionExtra;
|
||
addIfCondition(branch0, {
|
||
exp: branch0.if,
|
||
block: branch0
|
||
});
|
||
// 2. add radio else-if condition
|
||
var branch1 = cloneASTElement(el);
|
||
getAndRemoveAttr(branch1, 'v-for', true);
|
||
addRawAttr(branch1, 'type', 'radio');
|
||
processElement(branch1, options);
|
||
addIfCondition(branch0, {
|
||
exp: "(" + typeBinding + ")==='radio'" + ifConditionExtra,
|
||
block: branch1
|
||
});
|
||
// 3. other
|
||
var branch2 = cloneASTElement(el);
|
||
getAndRemoveAttr(branch2, 'v-for', true);
|
||
addRawAttr(branch2, ':type', typeBinding);
|
||
processElement(branch2, options);
|
||
addIfCondition(branch0, {
|
||
exp: ifCondition,
|
||
block: branch2
|
||
});
|
||
|
||
if (hasElse) {
|
||
branch0.else = true;
|
||
} else if (elseIfCondition) {
|
||
branch0.elseif = elseIfCondition;
|
||
}
|
||
|
||
return branch0
|
||
}
|
||
}
|
||
}
|
||
|
||
function cloneASTElement (el) {
|
||
return createASTElement(el.tag, el.attrsList.slice(), el.parent)
|
||
}
|
||
|
||
var model$2 = {
|
||
preTransformNode: preTransformNode
|
||
}
|
||
|
||
var modules$1 = [
|
||
klass$1,
|
||
style$1,
|
||
model$2
|
||
]
|
||
|
||
/* */
|
||
|
||
function text (el, dir) {
|
||
if (dir.value) {
|
||
addProp(el, 'textContent', ("_s(" + (dir.value) + ")"));
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function html (el, dir) {
|
||
if (dir.value) {
|
||
addProp(el, 'innerHTML', ("_s(" + (dir.value) + ")"));
|
||
}
|
||
}
|
||
|
||
var directives$1 = {
|
||
model: model,
|
||
text: text,
|
||
html: html
|
||
}
|
||
|
||
/* */
|
||
|
||
var baseOptions = {
|
||
expectHTML: true,
|
||
modules: modules$1,
|
||
directives: directives$1,
|
||
isPreTag: isPreTag,
|
||
isUnaryTag: isUnaryTag,
|
||
mustUseProp: mustUseProp,
|
||
canBeLeftOpenTag: canBeLeftOpenTag,
|
||
isReservedTag: isReservedTag,
|
||
getTagNamespace: getTagNamespace,
|
||
staticKeys: genStaticKeys(modules$1)
|
||
};
|
||
|
||
/* */
|
||
|
||
var isStaticKey;
|
||
var isPlatformReservedTag;
|
||
|
||
var genStaticKeysCached = cached(genStaticKeys$1);
|
||
|
||
/**
|
||
* Goal of the optimizer: walk the generated template AST tree
|
||
* and detect sub-trees that are purely static, i.e. parts of
|
||
* the DOM that never needs to change.
|
||
*
|
||
* Once we detect these sub-trees, we can:
|
||
*
|
||
* 1. Hoist them into constants, so that we no longer need to
|
||
* create fresh nodes for them on each re-render;
|
||
* 2. Completely skip them in the patching process.
|
||
*/
|
||
function optimize (root, options) {
|
||
if (!root) { return }
|
||
isStaticKey = genStaticKeysCached(options.staticKeys || '');
|
||
isPlatformReservedTag = options.isReservedTag || no;
|
||
// first pass: mark all non-static nodes.
|
||
markStatic$1(root);
|
||
// second pass: mark static roots.
|
||
markStaticRoots(root, false);
|
||
}
|
||
|
||
function genStaticKeys$1 (keys) {
|
||
return makeMap(
|
||
'type,tag,attrsList,attrsMap,plain,parent,children,attrs' +
|
||
(keys ? ',' + keys : '')
|
||
)
|
||
}
|
||
|
||
function markStatic$1 (node) {
|
||
node.static = isStatic(node);
|
||
if (node.type === 1) {
|
||
// do not make component slot content static. this avoids
|
||
// 1. components not able to mutate slot nodes
|
||
// 2. static slot content fails for hot-reloading
|
||
if (
|
||
!isPlatformReservedTag(node.tag) &&
|
||
node.tag !== 'slot' &&
|
||
node.attrsMap['inline-template'] == null
|
||
) {
|
||
return
|
||
}
|
||
for (var i = 0, l = node.children.length; i < l; i++) {
|
||
var child = node.children[i];
|
||
markStatic$1(child);
|
||
if (!child.static) {
|
||
node.static = false;
|
||
}
|
||
}
|
||
if (node.ifConditions) {
|
||
for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {
|
||
var block = node.ifConditions[i$1].block;
|
||
markStatic$1(block);
|
||
if (!block.static) {
|
||
node.static = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function markStaticRoots (node, isInFor) {
|
||
if (node.type === 1) {
|
||
if (node.static || node.once) {
|
||
node.staticInFor = isInFor;
|
||
}
|
||
// For a node to qualify as a static root, it should have children that
|
||
// are not just static text. Otherwise the cost of hoisting out will
|
||
// outweigh the benefits and it's better off to just always render it fresh.
|
||
if (node.static && node.children.length && !(
|
||
node.children.length === 1 &&
|
||
node.children[0].type === 3
|
||
)) {
|
||
node.staticRoot = true;
|
||
return
|
||
} else {
|
||
node.staticRoot = false;
|
||
}
|
||
if (node.children) {
|
||
for (var i = 0, l = node.children.length; i < l; i++) {
|
||
markStaticRoots(node.children[i], isInFor || !!node.for);
|
||
}
|
||
}
|
||
if (node.ifConditions) {
|
||
for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {
|
||
markStaticRoots(node.ifConditions[i$1].block, isInFor);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function isStatic (node) {
|
||
if (node.type === 2) { // expression
|
||
return false
|
||
}
|
||
if (node.type === 3) { // text
|
||
return true
|
||
}
|
||
return !!(node.pre || (
|
||
!node.hasBindings && // no dynamic bindings
|
||
!node.if && !node.for && // not v-if or v-for or v-else
|
||
!isBuiltInTag(node.tag) && // not a built-in
|
||
isPlatformReservedTag(node.tag) && // not a component
|
||
!isDirectChildOfTemplateFor(node) &&
|
||
Object.keys(node).every(isStaticKey)
|
||
))
|
||
}
|
||
|
||
function isDirectChildOfTemplateFor (node) {
|
||
while (node.parent) {
|
||
node = node.parent;
|
||
if (node.tag !== 'template') {
|
||
return false
|
||
}
|
||
if (node.for) {
|
||
return true
|
||
}
|
||
}
|
||
return false
|
||
}
|
||
|
||
/* */
|
||
|
||
var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function\s*\(/;
|
||
var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
|
||
|
||
// KeyboardEvent.keyCode aliases
|
||
var keyCodes = {
|
||
esc: 27,
|
||
tab: 9,
|
||
enter: 13,
|
||
space: 32,
|
||
up: 38,
|
||
left: 37,
|
||
right: 39,
|
||
down: 40,
|
||
'delete': [8, 46]
|
||
};
|
||
|
||
// KeyboardEvent.key aliases
|
||
var keyNames = {
|
||
esc: 'Escape',
|
||
tab: 'Tab',
|
||
enter: 'Enter',
|
||
space: ' ',
|
||
// #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
|
||
up: ['Up', 'ArrowUp'],
|
||
left: ['Left', 'ArrowLeft'],
|
||
right: ['Right', 'ArrowRight'],
|
||
down: ['Down', 'ArrowDown'],
|
||
'delete': ['Backspace', 'Delete']
|
||
};
|
||
|
||
// #4868: modifiers that prevent the execution of the listener
|
||
// need to explicitly return null so that we can determine whether to remove
|
||
// the listener for .once
|
||
var genGuard = function (condition) { return ("if(" + condition + ")return null;"); };
|
||
|
||
var modifierCode = {
|
||
stop: '$event.stopPropagation();',
|
||
prevent: '$event.preventDefault();',
|
||
self: genGuard("$event.target !== $event.currentTarget"),
|
||
ctrl: genGuard("!$event.ctrlKey"),
|
||
shift: genGuard("!$event.shiftKey"),
|
||
alt: genGuard("!$event.altKey"),
|
||
meta: genGuard("!$event.metaKey"),
|
||
left: genGuard("'button' in $event && $event.button !== 0"),
|
||
middle: genGuard("'button' in $event && $event.button !== 1"),
|
||
right: genGuard("'button' in $event && $event.button !== 2")
|
||
};
|
||
|
||
function genHandlers (
|
||
events,
|
||
isNative,
|
||
warn
|
||
) {
|
||
var res = isNative ? 'nativeOn:{' : 'on:{';
|
||
for (var name in events) {
|
||
res += "\"" + name + "\":" + (genHandler(name, events[name])) + ",";
|
||
}
|
||
return res.slice(0, -1) + '}'
|
||
}
|
||
|
||
function genHandler (
|
||
name,
|
||
handler
|
||
) {
|
||
if (!handler) {
|
||
return 'function(){}'
|
||
}
|
||
|
||
if (Array.isArray(handler)) {
|
||
return ("[" + (handler.map(function (handler) { return genHandler(name, handler); }).join(',')) + "]")
|
||
}
|
||
|
||
var isMethodPath = simplePathRE.test(handler.value);
|
||
var isFunctionExpression = fnExpRE.test(handler.value);
|
||
|
||
if (!handler.modifiers) {
|
||
if (isMethodPath || isFunctionExpression) {
|
||
return handler.value
|
||
}
|
||
/* istanbul ignore if */
|
||
return ("function($event){" + (handler.value) + "}") // inline statement
|
||
} else {
|
||
var code = '';
|
||
var genModifierCode = '';
|
||
var keys = [];
|
||
for (var key in handler.modifiers) {
|
||
if (modifierCode[key]) {
|
||
genModifierCode += modifierCode[key];
|
||
// left/right
|
||
if (keyCodes[key]) {
|
||
keys.push(key);
|
||
}
|
||
} else if (key === 'exact') {
|
||
var modifiers = (handler.modifiers);
|
||
genModifierCode += genGuard(
|
||
['ctrl', 'shift', 'alt', 'meta']
|
||
.filter(function (keyModifier) { return !modifiers[keyModifier]; })
|
||
.map(function (keyModifier) { return ("$event." + keyModifier + "Key"); })
|
||
.join('||')
|
||
);
|
||
} else {
|
||
keys.push(key);
|
||
}
|
||
}
|
||
if (keys.length) {
|
||
code += genKeyFilter(keys);
|
||
}
|
||
// Make sure modifiers like prevent and stop get executed after key filtering
|
||
if (genModifierCode) {
|
||
code += genModifierCode;
|
||
}
|
||
var handlerCode = isMethodPath
|
||
? ("return " + (handler.value) + "($event)")
|
||
: isFunctionExpression
|
||
? ("return (" + (handler.value) + ")($event)")
|
||
: handler.value;
|
||
/* istanbul ignore if */
|
||
return ("function($event){" + code + handlerCode + "}")
|
||
}
|
||
}
|
||
|
||
function genKeyFilter (keys) {
|
||
return ("if(!('button' in $event)&&" + (keys.map(genFilterCode).join('&&')) + ")return null;")
|
||
}
|
||
|
||
function genFilterCode (key) {
|
||
var keyVal = parseInt(key, 10);
|
||
if (keyVal) {
|
||
return ("$event.keyCode!==" + keyVal)
|
||
}
|
||
var keyCode = keyCodes[key];
|
||
var keyName = keyNames[key];
|
||
return (
|
||
"_k($event.keyCode," +
|
||
(JSON.stringify(key)) + "," +
|
||
(JSON.stringify(keyCode)) + "," +
|
||
"$event.key," +
|
||
"" + (JSON.stringify(keyName)) +
|
||
")"
|
||
)
|
||
}
|
||
|
||
/* */
|
||
|
||
function on (el, dir) {
|
||
if ("development" !== 'production' && dir.modifiers) {
|
||
warn("v-on without argument does not support modifiers.");
|
||
}
|
||
el.wrapListeners = function (code) { return ("_g(" + code + "," + (dir.value) + ")"); };
|
||
}
|
||
|
||
/* */
|
||
|
||
function bind$1 (el, dir) {
|
||
el.wrapData = function (code) {
|
||
return ("_b(" + code + ",'" + (el.tag) + "'," + (dir.value) + "," + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + ")")
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
var baseDirectives = {
|
||
on: on,
|
||
bind: bind$1,
|
||
cloak: noop
|
||
}
|
||
|
||
/* */
|
||
|
||
var CodegenState = function CodegenState (options) {
|
||
this.options = options;
|
||
this.warn = options.warn || baseWarn;
|
||
this.transforms = pluckModuleFunction(options.modules, 'transformCode');
|
||
this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
|
||
this.directives = extend(extend({}, baseDirectives), options.directives);
|
||
var isReservedTag = options.isReservedTag || no;
|
||
this.maybeComponent = function (el) { return !isReservedTag(el.tag); };
|
||
this.onceId = 0;
|
||
this.staticRenderFns = [];
|
||
};
|
||
|
||
|
||
|
||
function generate (
|
||
ast,
|
||
options
|
||
) {
|
||
var state = new CodegenState(options);
|
||
var code = ast ? genElement(ast, state) : '_c("div")';
|
||
return {
|
||
render: ("with(this){return " + code + "}"),
|
||
staticRenderFns: state.staticRenderFns
|
||
}
|
||
}
|
||
|
||
function genElement (el, state) {
|
||
if (el.staticRoot && !el.staticProcessed) {
|
||
return genStatic(el, state)
|
||
} else if (el.once && !el.onceProcessed) {
|
||
return genOnce(el, state)
|
||
} else if (el.for && !el.forProcessed) {
|
||
return genFor(el, state)
|
||
} else if (el.if && !el.ifProcessed) {
|
||
return genIf(el, state)
|
||
} else if (el.tag === 'template' && !el.slotTarget) {
|
||
return genChildren(el, state) || 'void 0'
|
||
} else if (el.tag === 'slot') {
|
||
return genSlot(el, state)
|
||
} else {
|
||
// component or element
|
||
var code;
|
||
if (el.component) {
|
||
code = genComponent(el.component, el, state);
|
||
} else {
|
||
var data = el.plain ? undefined : genData$2(el, state);
|
||
|
||
var children = el.inlineTemplate ? null : genChildren(el, state, true);
|
||
code = "_c('" + (el.tag) + "'" + (data ? ("," + data) : '') + (children ? ("," + children) : '') + ")";
|
||
}
|
||
// module transforms
|
||
for (var i = 0; i < state.transforms.length; i++) {
|
||
code = state.transforms[i](el, code);
|
||
}
|
||
return code
|
||
}
|
||
}
|
||
|
||
// hoist static sub-trees out
|
||
function genStatic (el, state) {
|
||
el.staticProcessed = true;
|
||
state.staticRenderFns.push(("with(this){return " + (genElement(el, state)) + "}"));
|
||
return ("_m(" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + ")")
|
||
}
|
||
|
||
// v-once
|
||
function genOnce (el, state) {
|
||
el.onceProcessed = true;
|
||
if (el.if && !el.ifProcessed) {
|
||
return genIf(el, state)
|
||
} else if (el.staticInFor) {
|
||
var key = '';
|
||
var parent = el.parent;
|
||
while (parent) {
|
||
if (parent.for) {
|
||
key = parent.key;
|
||
break
|
||
}
|
||
parent = parent.parent;
|
||
}
|
||
if (!key) {
|
||
"development" !== 'production' && state.warn(
|
||
"v-once can only be used inside v-for that is keyed. "
|
||
);
|
||
return genElement(el, state)
|
||
}
|
||
return ("_o(" + (genElement(el, state)) + "," + (state.onceId++) + "," + key + ")")
|
||
} else {
|
||
return genStatic(el, state)
|
||
}
|
||
}
|
||
|
||
function genIf (
|
||
el,
|
||
state,
|
||
altGen,
|
||
altEmpty
|
||
) {
|
||
el.ifProcessed = true; // avoid recursion
|
||
return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)
|
||
}
|
||
|
||
function genIfConditions (
|
||
conditions,
|
||
state,
|
||
altGen,
|
||
altEmpty
|
||
) {
|
||
if (!conditions.length) {
|
||
return altEmpty || '_e()'
|
||
}
|
||
|
||
var condition = conditions.shift();
|
||
if (condition.exp) {
|
||
return ("(" + (condition.exp) + ")?" + (genTernaryExp(condition.block)) + ":" + (genIfConditions(conditions, state, altGen, altEmpty)))
|
||
} else {
|
||
return ("" + (genTernaryExp(condition.block)))
|
||
}
|
||
|
||
// v-if with v-once should generate code like (a)?_m(0):_m(1)
|
||
function genTernaryExp (el) {
|
||
return altGen
|
||
? altGen(el, state)
|
||
: el.once
|
||
? genOnce(el, state)
|
||
: genElement(el, state)
|
||
}
|
||
}
|
||
|
||
function genFor (
|
||
el,
|
||
state,
|
||
altGen,
|
||
altHelper
|
||
) {
|
||
var exp = el.for;
|
||
var alias = el.alias;
|
||
var iterator1 = el.iterator1 ? ("," + (el.iterator1)) : '';
|
||
var iterator2 = el.iterator2 ? ("," + (el.iterator2)) : '';
|
||
|
||
if ("development" !== 'production' &&
|
||
state.maybeComponent(el) &&
|
||
el.tag !== 'slot' &&
|
||
el.tag !== 'template' &&
|
||
!el.key
|
||
) {
|
||
state.warn(
|
||
"<" + (el.tag) + " v-for=\"" + alias + " in " + exp + "\">: component lists rendered with " +
|
||
"v-for should have explicit keys. " +
|
||
"See https://vuejs.org/guide/list.html#key for more info.",
|
||
true /* tip */
|
||
);
|
||
}
|
||
|
||
el.forProcessed = true; // avoid recursion
|
||
return (altHelper || '_l') + "((" + exp + ")," +
|
||
"function(" + alias + iterator1 + iterator2 + "){" +
|
||
"return " + ((altGen || genElement)(el, state)) +
|
||
'})'
|
||
}
|
||
|
||
function genData$2 (el, state) {
|
||
var data = '{';
|
||
|
||
// directives first.
|
||
// directives may mutate the el's other properties before they are generated.
|
||
var dirs = genDirectives(el, state);
|
||
if (dirs) { data += dirs + ','; }
|
||
|
||
// key
|
||
if (el.key) {
|
||
data += "key:" + (el.key) + ",";
|
||
}
|
||
// ref
|
||
if (el.ref) {
|
||
data += "ref:" + (el.ref) + ",";
|
||
}
|
||
if (el.refInFor) {
|
||
data += "refInFor:true,";
|
||
}
|
||
// pre
|
||
if (el.pre) {
|
||
data += "pre:true,";
|
||
}
|
||
// record original tag name for components using "is" attribute
|
||
if (el.component) {
|
||
data += "tag:\"" + (el.tag) + "\",";
|
||
}
|
||
// module data generation functions
|
||
for (var i = 0; i < state.dataGenFns.length; i++) {
|
||
data += state.dataGenFns[i](el);
|
||
}
|
||
// attributes
|
||
if (el.attrs) {
|
||
data += "attrs:{" + (genProps(el.attrs)) + "},";
|
||
}
|
||
// DOM props
|
||
if (el.props) {
|
||
data += "domProps:{" + (genProps(el.props)) + "},";
|
||
}
|
||
// event handlers
|
||
if (el.events) {
|
||
data += (genHandlers(el.events, false, state.warn)) + ",";
|
||
}
|
||
if (el.nativeEvents) {
|
||
data += (genHandlers(el.nativeEvents, true, state.warn)) + ",";
|
||
}
|
||
// slot target
|
||
// only for non-scoped slots
|
||
if (el.slotTarget && !el.slotScope) {
|
||
data += "slot:" + (el.slotTarget) + ",";
|
||
}
|
||
// scoped slots
|
||
if (el.scopedSlots) {
|
||
data += (genScopedSlots(el.scopedSlots, state)) + ",";
|
||
}
|
||
// component v-model
|
||
if (el.model) {
|
||
data += "model:{value:" + (el.model.value) + ",callback:" + (el.model.callback) + ",expression:" + (el.model.expression) + "},";
|
||
}
|
||
// inline-template
|
||
if (el.inlineTemplate) {
|
||
var inlineTemplate = genInlineTemplate(el, state);
|
||
if (inlineTemplate) {
|
||
data += inlineTemplate + ",";
|
||
}
|
||
}
|
||
data = data.replace(/,$/, '') + '}';
|
||
// v-bind data wrap
|
||
if (el.wrapData) {
|
||
data = el.wrapData(data);
|
||
}
|
||
// v-on data wrap
|
||
if (el.wrapListeners) {
|
||
data = el.wrapListeners(data);
|
||
}
|
||
return data
|
||
}
|
||
|
||
function genDirectives (el, state) {
|
||
var dirs = el.directives;
|
||
if (!dirs) { return }
|
||
var res = 'directives:[';
|
||
var hasRuntime = false;
|
||
var i, l, dir, needRuntime;
|
||
for (i = 0, l = dirs.length; i < l; i++) {
|
||
dir = dirs[i];
|
||
needRuntime = true;
|
||
var gen = state.directives[dir.name];
|
||
if (gen) {
|
||
// compile-time directive that manipulates AST.
|
||
// returns true if it also needs a runtime counterpart.
|
||
needRuntime = !!gen(el, dir, state.warn);
|
||
}
|
||
if (needRuntime) {
|
||
hasRuntime = true;
|
||
res += "{name:\"" + (dir.name) + "\",rawName:\"" + (dir.rawName) + "\"" + (dir.value ? (",value:(" + (dir.value) + "),expression:" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (",arg:\"" + (dir.arg) + "\"") : '') + (dir.modifiers ? (",modifiers:" + (JSON.stringify(dir.modifiers))) : '') + "},";
|
||
}
|
||
}
|
||
if (hasRuntime) {
|
||
return res.slice(0, -1) + ']'
|
||
}
|
||
}
|
||
|
||
function genInlineTemplate (el, state) {
|
||
var ast = el.children[0];
|
||
if ("development" !== 'production' && (
|
||
el.children.length !== 1 || ast.type !== 1
|
||
)) {
|
||
state.warn('Inline-template components must have exactly one child element.');
|
||
}
|
||
if (ast.type === 1) {
|
||
var inlineRenderFns = generate(ast, state.options);
|
||
return ("inlineTemplate:{render:function(){" + (inlineRenderFns.render) + "},staticRenderFns:[" + (inlineRenderFns.staticRenderFns.map(function (code) { return ("function(){" + code + "}"); }).join(',')) + "]}")
|
||
}
|
||
}
|
||
|
||
function genScopedSlots (
|
||
slots,
|
||
state
|
||
) {
|
||
return ("scopedSlots:_u([" + (Object.keys(slots).map(function (key) {
|
||
return genScopedSlot(key, slots[key], state)
|
||
}).join(',')) + "])")
|
||
}
|
||
|
||
function genScopedSlot (
|
||
key,
|
||
el,
|
||
state
|
||
) {
|
||
if (el.for && !el.forProcessed) {
|
||
return genForScopedSlot(key, el, state)
|
||
}
|
||
var fn = "function(" + (String(el.slotScope)) + "){" +
|
||
"return " + (el.tag === 'template'
|
||
? el.if
|
||
? ((el.if) + "?" + (genChildren(el, state) || 'undefined') + ":undefined")
|
||
: genChildren(el, state) || 'undefined'
|
||
: genElement(el, state)) + "}";
|
||
return ("{key:" + key + ",fn:" + fn + "}")
|
||
}
|
||
|
||
function genForScopedSlot (
|
||
key,
|
||
el,
|
||
state
|
||
) {
|
||
var exp = el.for;
|
||
var alias = el.alias;
|
||
var iterator1 = el.iterator1 ? ("," + (el.iterator1)) : '';
|
||
var iterator2 = el.iterator2 ? ("," + (el.iterator2)) : '';
|
||
el.forProcessed = true; // avoid recursion
|
||
return "_l((" + exp + ")," +
|
||
"function(" + alias + iterator1 + iterator2 + "){" +
|
||
"return " + (genScopedSlot(key, el, state)) +
|
||
'})'
|
||
}
|
||
|
||
function genChildren (
|
||
el,
|
||
state,
|
||
checkSkip,
|
||
altGenElement,
|
||
altGenNode
|
||
) {
|
||
var children = el.children;
|
||
if (children.length) {
|
||
var el$1 = children[0];
|
||
// optimize single v-for
|
||
if (children.length === 1 &&
|
||
el$1.for &&
|
||
el$1.tag !== 'template' &&
|
||
el$1.tag !== 'slot'
|
||
) {
|
||
return (altGenElement || genElement)(el$1, state)
|
||
}
|
||
var normalizationType = checkSkip
|
||
? getNormalizationType(children, state.maybeComponent)
|
||
: 0;
|
||
var gen = altGenNode || genNode;
|
||
return ("[" + (children.map(function (c) { return gen(c, state); }).join(',')) + "]" + (normalizationType ? ("," + normalizationType) : ''))
|
||
}
|
||
}
|
||
|
||
// determine the normalization needed for the children array.
|
||
// 0: no normalization needed
|
||
// 1: simple normalization needed (possible 1-level deep nested array)
|
||
// 2: full normalization needed
|
||
function getNormalizationType (
|
||
children,
|
||
maybeComponent
|
||
) {
|
||
var res = 0;
|
||
for (var i = 0; i < children.length; i++) {
|
||
var el = children[i];
|
||
if (el.type !== 1) {
|
||
continue
|
||
}
|
||
if (needsNormalization(el) ||
|
||
(el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
|
||
res = 2;
|
||
break
|
||
}
|
||
if (maybeComponent(el) ||
|
||
(el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
|
||
res = 1;
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
function needsNormalization (el) {
|
||
return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'
|
||
}
|
||
|
||
function genNode (node, state) {
|
||
if (node.type === 1) {
|
||
return genElement(node, state)
|
||
} if (node.type === 3 && node.isComment) {
|
||
return genComment(node)
|
||
} else {
|
||
return genText(node)
|
||
}
|
||
}
|
||
|
||
function genText (text) {
|
||
return ("_v(" + (text.type === 2
|
||
? text.expression // no need for () because already wrapped in _s()
|
||
: transformSpecialNewlines(JSON.stringify(text.text))) + ")")
|
||
}
|
||
|
||
function genComment (comment) {
|
||
return ("_e(" + (JSON.stringify(comment.text)) + ")")
|
||
}
|
||
|
||
function genSlot (el, state) {
|
||
var slotName = el.slotName || '"default"';
|
||
var children = genChildren(el, state);
|
||
var res = "_t(" + slotName + (children ? ("," + children) : '');
|
||
var attrs = el.attrs && ("{" + (el.attrs.map(function (a) { return ((camelize(a.name)) + ":" + (a.value)); }).join(',')) + "}");
|
||
var bind$$1 = el.attrsMap['v-bind'];
|
||
if ((attrs || bind$$1) && !children) {
|
||
res += ",null";
|
||
}
|
||
if (attrs) {
|
||
res += "," + attrs;
|
||
}
|
||
if (bind$$1) {
|
||
res += (attrs ? '' : ',null') + "," + bind$$1;
|
||
}
|
||
return res + ')'
|
||
}
|
||
|
||
// componentName is el.component, take it as argument to shun flow's pessimistic refinement
|
||
function genComponent (
|
||
componentName,
|
||
el,
|
||
state
|
||
) {
|
||
var children = el.inlineTemplate ? null : genChildren(el, state, true);
|
||
return ("_c(" + componentName + "," + (genData$2(el, state)) + (children ? ("," + children) : '') + ")")
|
||
}
|
||
|
||
function genProps (props) {
|
||
var res = '';
|
||
for (var i = 0; i < props.length; i++) {
|
||
var prop = props[i];
|
||
/* istanbul ignore if */
|
||
{
|
||
res += "\"" + (prop.name) + "\":" + (transformSpecialNewlines(prop.value)) + ",";
|
||
}
|
||
}
|
||
return res.slice(0, -1)
|
||
}
|
||
|
||
// #3895, #4268
|
||
function transformSpecialNewlines (text) {
|
||
return text
|
||
.replace(/\u2028/g, '\\u2028')
|
||
.replace(/\u2029/g, '\\u2029')
|
||
}
|
||
|
||
/* */
|
||
|
||
// these keywords should not appear inside expressions, but operators like
|
||
// typeof, instanceof and in are allowed
|
||
var prohibitedKeywordRE = new RegExp('\\b' + (
|
||
'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
|
||
'super,throw,while,yield,delete,export,import,return,switch,default,' +
|
||
'extends,finally,continue,debugger,function,arguments'
|
||
).split(',').join('\\b|\\b') + '\\b');
|
||
|
||
// these unary operators should not be used as property/method names
|
||
var unaryOperatorsRE = new RegExp('\\b' + (
|
||
'delete,typeof,void'
|
||
).split(',').join('\\s*\\([^\\)]*\\)|\\b') + '\\s*\\([^\\)]*\\)');
|
||
|
||
// strip strings in expressions
|
||
var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
|
||
|
||
// detect problematic expressions in a template
|
||
function detectErrors (ast) {
|
||
var errors = [];
|
||
if (ast) {
|
||
checkNode(ast, errors);
|
||
}
|
||
return errors
|
||
}
|
||
|
||
function checkNode (node, errors) {
|
||
if (node.type === 1) {
|
||
for (var name in node.attrsMap) {
|
||
if (dirRE.test(name)) {
|
||
var value = node.attrsMap[name];
|
||
if (value) {
|
||
if (name === 'v-for') {
|
||
checkFor(node, ("v-for=\"" + value + "\""), errors);
|
||
} else if (onRE.test(name)) {
|
||
checkEvent(value, (name + "=\"" + value + "\""), errors);
|
||
} else {
|
||
checkExpression(value, (name + "=\"" + value + "\""), errors);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (node.children) {
|
||
for (var i = 0; i < node.children.length; i++) {
|
||
checkNode(node.children[i], errors);
|
||
}
|
||
}
|
||
} else if (node.type === 2) {
|
||
checkExpression(node.expression, node.text, errors);
|
||
}
|
||
}
|
||
|
||
function checkEvent (exp, text, errors) {
|
||
var stipped = exp.replace(stripStringRE, '');
|
||
var keywordMatch = stipped.match(unaryOperatorsRE);
|
||
if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {
|
||
errors.push(
|
||
"avoid using JavaScript unary operator as property name: " +
|
||
"\"" + (keywordMatch[0]) + "\" in expression " + (text.trim())
|
||
);
|
||
}
|
||
checkExpression(exp, text, errors);
|
||
}
|
||
|
||
function checkFor (node, text, errors) {
|
||
checkExpression(node.for || '', text, errors);
|
||
checkIdentifier(node.alias, 'v-for alias', text, errors);
|
||
checkIdentifier(node.iterator1, 'v-for iterator', text, errors);
|
||
checkIdentifier(node.iterator2, 'v-for iterator', text, errors);
|
||
}
|
||
|
||
function checkIdentifier (
|
||
ident,
|
||
type,
|
||
text,
|
||
errors
|
||
) {
|
||
if (typeof ident === 'string') {
|
||
try {
|
||
new Function(("var " + ident + "=_"));
|
||
} catch (e) {
|
||
errors.push(("invalid " + type + " \"" + ident + "\" in expression: " + (text.trim())));
|
||
}
|
||
}
|
||
}
|
||
|
||
function checkExpression (exp, text, errors) {
|
||
try {
|
||
new Function(("return " + exp));
|
||
} catch (e) {
|
||
var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);
|
||
if (keywordMatch) {
|
||
errors.push(
|
||
"avoid using JavaScript keyword as property name: " +
|
||
"\"" + (keywordMatch[0]) + "\"\n Raw expression: " + (text.trim())
|
||
);
|
||
} else {
|
||
errors.push(
|
||
"invalid expression: " + (e.message) + " in\n\n" +
|
||
" " + exp + "\n\n" +
|
||
" Raw expression: " + (text.trim()) + "\n"
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function createFunction (code, errors) {
|
||
try {
|
||
return new Function(code)
|
||
} catch (err) {
|
||
errors.push({ err: err, code: code });
|
||
return noop
|
||
}
|
||
}
|
||
|
||
function createCompileToFunctionFn (compile) {
|
||
var cache = Object.create(null);
|
||
|
||
return function compileToFunctions (
|
||
template,
|
||
options,
|
||
vm
|
||
) {
|
||
options = extend({}, options);
|
||
var warn$$1 = options.warn || warn;
|
||
delete options.warn;
|
||
|
||
/* istanbul ignore if */
|
||
if (true) {
|
||
// detect possible CSP restriction
|
||
try {
|
||
new Function('return 1');
|
||
} catch (e) {
|
||
if (e.toString().match(/unsafe-eval|CSP/)) {
|
||
warn$$1(
|
||
'It seems you are using the standalone build of Vue.js in an ' +
|
||
'environment with Content Security Policy that prohibits unsafe-eval. ' +
|
||
'The template compiler cannot work in this environment. Consider ' +
|
||
'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
|
||
'templates into render functions.'
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
// check cache
|
||
var key = options.delimiters
|
||
? String(options.delimiters) + template
|
||
: template;
|
||
if (cache[key]) {
|
||
return cache[key]
|
||
}
|
||
|
||
// compile
|
||
var compiled = compile(template, options);
|
||
|
||
// check compilation errors/tips
|
||
if (true) {
|
||
if (compiled.errors && compiled.errors.length) {
|
||
warn$$1(
|
||
"Error compiling template:\n\n" + template + "\n\n" +
|
||
compiled.errors.map(function (e) { return ("- " + e); }).join('\n') + '\n',
|
||
vm
|
||
);
|
||
}
|
||
if (compiled.tips && compiled.tips.length) {
|
||
compiled.tips.forEach(function (msg) { return tip(msg, vm); });
|
||
}
|
||
}
|
||
|
||
// turn code into functions
|
||
var res = {};
|
||
var fnGenErrors = [];
|
||
res.render = createFunction(compiled.render, fnGenErrors);
|
||
res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
|
||
return createFunction(code, fnGenErrors)
|
||
});
|
||
|
||
// check function generation errors.
|
||
// this should only happen if there is a bug in the compiler itself.
|
||
// mostly for codegen development use
|
||
/* istanbul ignore if */
|
||
if (true) {
|
||
if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
|
||
warn$$1(
|
||
"Failed to generate render function:\n\n" +
|
||
fnGenErrors.map(function (ref) {
|
||
var err = ref.err;
|
||
var code = ref.code;
|
||
|
||
return ((err.toString()) + " in\n\n" + code + "\n");
|
||
}).join('\n'),
|
||
vm
|
||
);
|
||
}
|
||
}
|
||
|
||
return (cache[key] = res)
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function createCompilerCreator (baseCompile) {
|
||
return function createCompiler (baseOptions) {
|
||
function compile (
|
||
template,
|
||
options
|
||
) {
|
||
var finalOptions = Object.create(baseOptions);
|
||
var errors = [];
|
||
var tips = [];
|
||
finalOptions.warn = function (msg, tip) {
|
||
(tip ? tips : errors).push(msg);
|
||
};
|
||
|
||
if (options) {
|
||
// merge custom modules
|
||
if (options.modules) {
|
||
finalOptions.modules =
|
||
(baseOptions.modules || []).concat(options.modules);
|
||
}
|
||
// merge custom directives
|
||
if (options.directives) {
|
||
finalOptions.directives = extend(
|
||
Object.create(baseOptions.directives || null),
|
||
options.directives
|
||
);
|
||
}
|
||
// copy other options
|
||
for (var key in options) {
|
||
if (key !== 'modules' && key !== 'directives') {
|
||
finalOptions[key] = options[key];
|
||
}
|
||
}
|
||
}
|
||
|
||
var compiled = baseCompile(template, finalOptions);
|
||
if (true) {
|
||
errors.push.apply(errors, detectErrors(compiled.ast));
|
||
}
|
||
compiled.errors = errors;
|
||
compiled.tips = tips;
|
||
return compiled
|
||
}
|
||
|
||
return {
|
||
compile: compile,
|
||
compileToFunctions: createCompileToFunctionFn(compile)
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
// `createCompilerCreator` allows creating compilers that use alternative
|
||
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
|
||
// Here we just export a default compiler using the default parts.
|
||
var createCompiler = createCompilerCreator(function baseCompile (
|
||
template,
|
||
options
|
||
) {
|
||
var ast = parse(template.trim(), options);
|
||
if (options.optimize !== false) {
|
||
optimize(ast, options);
|
||
}
|
||
var code = generate(ast, options);
|
||
return {
|
||
ast: ast,
|
||
render: code.render,
|
||
staticRenderFns: code.staticRenderFns
|
||
}
|
||
});
|
||
|
||
/* */
|
||
|
||
var ref$1 = createCompiler(baseOptions);
|
||
var compileToFunctions = ref$1.compileToFunctions;
|
||
|
||
/* */
|
||
|
||
// check whether current browser encodes a char inside attribute values
|
||
var div;
|
||
function getShouldDecode (href) {
|
||
div = div || document.createElement('div');
|
||
div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
|
||
return div.innerHTML.indexOf(' ') > 0
|
||
}
|
||
|
||
// #3663: IE encodes newlines inside attribute values while other browsers don't
|
||
var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
|
||
// #6828: chrome encodes content in a[href]
|
||
var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;
|
||
|
||
/* */
|
||
|
||
var idToTemplate = cached(function (id) {
|
||
var el = query(id);
|
||
return el && el.innerHTML
|
||
});
|
||
|
||
var mount = Vue.prototype.$mount;
|
||
Vue.prototype.$mount = function (
|
||
el,
|
||
hydrating
|
||
) {
|
||
el = el && query(el);
|
||
|
||
/* istanbul ignore if */
|
||
if (el === document.body || el === document.documentElement) {
|
||
"development" !== 'production' && warn(
|
||
"Do not mount Vue to <html> or <body> - mount to normal elements instead."
|
||
);
|
||
return this
|
||
}
|
||
|
||
var options = this.$options;
|
||
// resolve template/el and convert to render function
|
||
if (!options.render) {
|
||
var template = options.template;
|
||
if (template) {
|
||
if (typeof template === 'string') {
|
||
if (template.charAt(0) === '#') {
|
||
template = idToTemplate(template);
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' && !template) {
|
||
warn(
|
||
("Template element not found or is empty: " + (options.template)),
|
||
this
|
||
);
|
||
}
|
||
}
|
||
} else if (template.nodeType) {
|
||
template = template.innerHTML;
|
||
} else {
|
||
if (true) {
|
||
warn('invalid template option:' + template, this);
|
||
}
|
||
return this
|
||
}
|
||
} else if (el) {
|
||
template = getOuterHTML(el);
|
||
}
|
||
if (template) {
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' && config.performance && mark) {
|
||
mark('compile');
|
||
}
|
||
|
||
var ref = compileToFunctions(template, {
|
||
shouldDecodeNewlines: shouldDecodeNewlines,
|
||
shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
|
||
delimiters: options.delimiters,
|
||
comments: options.comments
|
||
}, this);
|
||
var render = ref.render;
|
||
var staticRenderFns = ref.staticRenderFns;
|
||
options.render = render;
|
||
options.staticRenderFns = staticRenderFns;
|
||
|
||
/* istanbul ignore if */
|
||
if ("development" !== 'production' && config.performance && mark) {
|
||
mark('compile end');
|
||
measure(("vue " + (this._name) + " compile"), 'compile', 'compile end');
|
||
}
|
||
}
|
||
}
|
||
return mount.call(this, el, hydrating)
|
||
};
|
||
|
||
/**
|
||
* Get outerHTML of elements, taking care
|
||
* of SVG elements in IE as well.
|
||
*/
|
||
function getOuterHTML (el) {
|
||
if (el.outerHTML) {
|
||
return el.outerHTML
|
||
} else {
|
||
var container = document.createElement('div');
|
||
container.appendChild(el.cloneNode(true));
|
||
return container.innerHTML
|
||
}
|
||
}
|
||
|
||
Vue.compile = compileToFunctions;
|
||
|
||
module.exports = Vue;
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/webpack/buildin/global.js"), __webpack_require__("./node_modules/timers-browserify/main.js").setImmediate))
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/index.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/axios.js");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/adapters/xhr.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
var settle = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/core/settle.js");
|
||
var buildURL = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/buildURL.js");
|
||
var parseHeaders = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/parseHeaders.js");
|
||
var isURLSameOrigin = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/isURLSameOrigin.js");
|
||
var createError = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/core/createError.js");
|
||
var btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/btoa.js");
|
||
|
||
module.exports = function xhrAdapter(config) {
|
||
return new Promise(function dispatchXhrRequest(resolve, reject) {
|
||
var requestData = config.data;
|
||
var requestHeaders = config.headers;
|
||
|
||
if (utils.isFormData(requestData)) {
|
||
delete requestHeaders['Content-Type']; // Let the browser set it
|
||
}
|
||
|
||
var request = new XMLHttpRequest();
|
||
var loadEvent = 'onreadystatechange';
|
||
var xDomain = false;
|
||
|
||
// For IE 8/9 CORS support
|
||
// Only supports POST and GET calls and doesn't returns the response headers.
|
||
// DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.
|
||
if ("development" !== 'test' &&
|
||
typeof window !== 'undefined' &&
|
||
window.XDomainRequest && !('withCredentials' in request) &&
|
||
!isURLSameOrigin(config.url)) {
|
||
request = new window.XDomainRequest();
|
||
loadEvent = 'onload';
|
||
xDomain = true;
|
||
request.onprogress = function handleProgress() {};
|
||
request.ontimeout = function handleTimeout() {};
|
||
}
|
||
|
||
// HTTP basic authentication
|
||
if (config.auth) {
|
||
var username = config.auth.username || '';
|
||
var password = config.auth.password || '';
|
||
requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
|
||
}
|
||
|
||
request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);
|
||
|
||
// Set the request timeout in MS
|
||
request.timeout = config.timeout;
|
||
|
||
// Listen for ready state
|
||
request[loadEvent] = function handleLoad() {
|
||
if (!request || (request.readyState !== 4 && !xDomain)) {
|
||
return;
|
||
}
|
||
|
||
// The request errored out and we didn't get a response, this will be
|
||
// handled by onerror instead
|
||
// With one exception: request that using file: protocol, most browsers
|
||
// will return status as 0 even though it's a successful request
|
||
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
|
||
return;
|
||
}
|
||
|
||
// Prepare the response
|
||
var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
|
||
var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
|
||
var response = {
|
||
data: responseData,
|
||
// IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)
|
||
status: request.status === 1223 ? 204 : request.status,
|
||
statusText: request.status === 1223 ? 'No Content' : request.statusText,
|
||
headers: responseHeaders,
|
||
config: config,
|
||
request: request
|
||
};
|
||
|
||
settle(resolve, reject, response);
|
||
|
||
// Clean up request
|
||
request = null;
|
||
};
|
||
|
||
// Handle low level network errors
|
||
request.onerror = function handleError() {
|
||
// Real errors are hidden from us by the browser
|
||
// onerror should only fire if it's a network error
|
||
reject(createError('Network Error', config));
|
||
|
||
// Clean up request
|
||
request = null;
|
||
};
|
||
|
||
// Handle timeout
|
||
request.ontimeout = function handleTimeout() {
|
||
reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED'));
|
||
|
||
// Clean up request
|
||
request = null;
|
||
};
|
||
|
||
// Add xsrf header
|
||
// This is only done if running in a standard browser environment.
|
||
// Specifically not if we're in a web worker, or react-native.
|
||
if (utils.isStandardBrowserEnv()) {
|
||
var cookies = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/cookies.js");
|
||
|
||
// Add xsrf header
|
||
var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?
|
||
cookies.read(config.xsrfCookieName) :
|
||
undefined;
|
||
|
||
if (xsrfValue) {
|
||
requestHeaders[config.xsrfHeaderName] = xsrfValue;
|
||
}
|
||
}
|
||
|
||
// Add headers to the request
|
||
if ('setRequestHeader' in request) {
|
||
utils.forEach(requestHeaders, function setRequestHeader(val, key) {
|
||
if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
|
||
// Remove Content-Type if data is undefined
|
||
delete requestHeaders[key];
|
||
} else {
|
||
// Otherwise add header to the request
|
||
request.setRequestHeader(key, val);
|
||
}
|
||
});
|
||
}
|
||
|
||
// Add withCredentials to request if needed
|
||
if (config.withCredentials) {
|
||
request.withCredentials = true;
|
||
}
|
||
|
||
// Add responseType to request if needed
|
||
if (config.responseType) {
|
||
try {
|
||
request.responseType = config.responseType;
|
||
} catch (e) {
|
||
if (request.responseType !== 'json') {
|
||
throw e;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Handle progress if needed
|
||
if (typeof config.onDownloadProgress === 'function') {
|
||
request.addEventListener('progress', config.onDownloadProgress);
|
||
}
|
||
|
||
// Not all browsers support upload events
|
||
if (typeof config.onUploadProgress === 'function' && request.upload) {
|
||
request.upload.addEventListener('progress', config.onUploadProgress);
|
||
}
|
||
|
||
if (config.cancelToken) {
|
||
// Handle cancellation
|
||
config.cancelToken.promise.then(function onCanceled(cancel) {
|
||
if (!request) {
|
||
return;
|
||
}
|
||
|
||
request.abort();
|
||
reject(cancel);
|
||
// Clean up request
|
||
request = null;
|
||
});
|
||
}
|
||
|
||
if (requestData === undefined) {
|
||
requestData = null;
|
||
}
|
||
|
||
// Send the request
|
||
request.send(requestData);
|
||
});
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/axios.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
var bind = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/bind.js");
|
||
var Axios = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/core/Axios.js");
|
||
var defaults = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/defaults.js");
|
||
|
||
/**
|
||
* Create an instance of Axios
|
||
*
|
||
* @param {Object} defaultConfig The default config for the instance
|
||
* @return {Axios} A new instance of Axios
|
||
*/
|
||
function createInstance(defaultConfig) {
|
||
var context = new Axios(defaultConfig);
|
||
var instance = bind(Axios.prototype.request, context);
|
||
|
||
// Copy axios.prototype to instance
|
||
utils.extend(instance, Axios.prototype, context);
|
||
|
||
// Copy context to instance
|
||
utils.extend(instance, context);
|
||
|
||
return instance;
|
||
}
|
||
|
||
// Create the default instance to be exported
|
||
var axios = createInstance(defaults);
|
||
|
||
// Expose Axios class to allow class inheritance
|
||
axios.Axios = Axios;
|
||
|
||
// Factory for creating new instances
|
||
axios.create = function create(instanceConfig) {
|
||
return createInstance(utils.merge(defaults, instanceConfig));
|
||
};
|
||
|
||
// Expose Cancel & CancelToken
|
||
axios.Cancel = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/cancel/Cancel.js");
|
||
axios.CancelToken = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/cancel/CancelToken.js");
|
||
axios.isCancel = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/cancel/isCancel.js");
|
||
|
||
// Expose all/spread
|
||
axios.all = function all(promises) {
|
||
return Promise.all(promises);
|
||
};
|
||
axios.spread = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/spread.js");
|
||
|
||
module.exports = axios;
|
||
|
||
// Allow use of default import syntax in TypeScript
|
||
module.exports.default = axios;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/cancel/Cancel.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* A `Cancel` is an object that is thrown when an operation is canceled.
|
||
*
|
||
* @class
|
||
* @param {string=} message The message.
|
||
*/
|
||
function Cancel(message) {
|
||
this.message = message;
|
||
}
|
||
|
||
Cancel.prototype.toString = function toString() {
|
||
return 'Cancel' + (this.message ? ': ' + this.message : '');
|
||
};
|
||
|
||
Cancel.prototype.__CANCEL__ = true;
|
||
|
||
module.exports = Cancel;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/cancel/CancelToken.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var Cancel = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/cancel/Cancel.js");
|
||
|
||
/**
|
||
* A `CancelToken` is an object that can be used to request cancellation of an operation.
|
||
*
|
||
* @class
|
||
* @param {Function} executor The executor function.
|
||
*/
|
||
function CancelToken(executor) {
|
||
if (typeof executor !== 'function') {
|
||
throw new TypeError('executor must be a function.');
|
||
}
|
||
|
||
var resolvePromise;
|
||
this.promise = new Promise(function promiseExecutor(resolve) {
|
||
resolvePromise = resolve;
|
||
});
|
||
|
||
var token = this;
|
||
executor(function cancel(message) {
|
||
if (token.reason) {
|
||
// Cancellation has already been requested
|
||
return;
|
||
}
|
||
|
||
token.reason = new Cancel(message);
|
||
resolvePromise(token.reason);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Throws a `Cancel` if cancellation has been requested.
|
||
*/
|
||
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
|
||
if (this.reason) {
|
||
throw this.reason;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Returns an object that contains a new `CancelToken` and a function that, when called,
|
||
* cancels the `CancelToken`.
|
||
*/
|
||
CancelToken.source = function source() {
|
||
var cancel;
|
||
var token = new CancelToken(function executor(c) {
|
||
cancel = c;
|
||
});
|
||
return {
|
||
token: token,
|
||
cancel: cancel
|
||
};
|
||
};
|
||
|
||
module.exports = CancelToken;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/cancel/isCancel.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
module.exports = function isCancel(value) {
|
||
return !!(value && value.__CANCEL__);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/core/Axios.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var defaults = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/defaults.js");
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
var InterceptorManager = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/core/InterceptorManager.js");
|
||
var dispatchRequest = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/core/dispatchRequest.js");
|
||
var isAbsoluteURL = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/isAbsoluteURL.js");
|
||
var combineURLs = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/combineURLs.js");
|
||
|
||
/**
|
||
* Create a new instance of Axios
|
||
*
|
||
* @param {Object} instanceConfig The default config for the instance
|
||
*/
|
||
function Axios(instanceConfig) {
|
||
this.defaults = instanceConfig;
|
||
this.interceptors = {
|
||
request: new InterceptorManager(),
|
||
response: new InterceptorManager()
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Dispatch a request
|
||
*
|
||
* @param {Object} config The config specific for this request (merged with this.defaults)
|
||
*/
|
||
Axios.prototype.request = function request(config) {
|
||
/*eslint no-param-reassign:0*/
|
||
// Allow for axios('example/url'[, config]) a la fetch API
|
||
if (typeof config === 'string') {
|
||
config = utils.merge({
|
||
url: arguments[0]
|
||
}, arguments[1]);
|
||
}
|
||
|
||
config = utils.merge(defaults, this.defaults, { method: 'get' }, config);
|
||
|
||
// Support baseURL config
|
||
if (config.baseURL && !isAbsoluteURL(config.url)) {
|
||
config.url = combineURLs(config.baseURL, config.url);
|
||
}
|
||
|
||
// Hook up interceptors middleware
|
||
var chain = [dispatchRequest, undefined];
|
||
var promise = Promise.resolve(config);
|
||
|
||
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
|
||
chain.unshift(interceptor.fulfilled, interceptor.rejected);
|
||
});
|
||
|
||
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
|
||
chain.push(interceptor.fulfilled, interceptor.rejected);
|
||
});
|
||
|
||
while (chain.length) {
|
||
promise = promise.then(chain.shift(), chain.shift());
|
||
}
|
||
|
||
return promise;
|
||
};
|
||
|
||
// Provide aliases for supported request methods
|
||
utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
|
||
/*eslint func-names:0*/
|
||
Axios.prototype[method] = function(url, config) {
|
||
return this.request(utils.merge(config || {}, {
|
||
method: method,
|
||
url: url
|
||
}));
|
||
};
|
||
});
|
||
|
||
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
|
||
/*eslint func-names:0*/
|
||
Axios.prototype[method] = function(url, data, config) {
|
||
return this.request(utils.merge(config || {}, {
|
||
method: method,
|
||
url: url,
|
||
data: data
|
||
}));
|
||
};
|
||
});
|
||
|
||
module.exports = Axios;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/core/InterceptorManager.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
|
||
function InterceptorManager() {
|
||
this.handlers = [];
|
||
}
|
||
|
||
/**
|
||
* Add a new interceptor to the stack
|
||
*
|
||
* @param {Function} fulfilled The function to handle `then` for a `Promise`
|
||
* @param {Function} rejected The function to handle `reject` for a `Promise`
|
||
*
|
||
* @return {Number} An ID used to remove interceptor later
|
||
*/
|
||
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
|
||
this.handlers.push({
|
||
fulfilled: fulfilled,
|
||
rejected: rejected
|
||
});
|
||
return this.handlers.length - 1;
|
||
};
|
||
|
||
/**
|
||
* Remove an interceptor from the stack
|
||
*
|
||
* @param {Number} id The ID that was returned by `use`
|
||
*/
|
||
InterceptorManager.prototype.eject = function eject(id) {
|
||
if (this.handlers[id]) {
|
||
this.handlers[id] = null;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Iterate over all the registered interceptors
|
||
*
|
||
* This method is particularly useful for skipping over any
|
||
* interceptors that may have become `null` calling `eject`.
|
||
*
|
||
* @param {Function} fn The function to call for each interceptor
|
||
*/
|
||
InterceptorManager.prototype.forEach = function forEach(fn) {
|
||
utils.forEach(this.handlers, function forEachHandler(h) {
|
||
if (h !== null) {
|
||
fn(h);
|
||
}
|
||
});
|
||
};
|
||
|
||
module.exports = InterceptorManager;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/core/createError.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var enhanceError = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/core/enhanceError.js");
|
||
|
||
/**
|
||
* Create an Error with the specified message, config, error code, and response.
|
||
*
|
||
* @param {string} message The error message.
|
||
* @param {Object} config The config.
|
||
* @param {string} [code] The error code (for example, 'ECONNABORTED').
|
||
@ @param {Object} [response] The response.
|
||
* @returns {Error} The created error.
|
||
*/
|
||
module.exports = function createError(message, config, code, response) {
|
||
var error = new Error(message);
|
||
return enhanceError(error, config, code, response);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/core/dispatchRequest.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
var transformData = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/core/transformData.js");
|
||
var isCancel = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/cancel/isCancel.js");
|
||
var defaults = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/defaults.js");
|
||
|
||
/**
|
||
* Throws a `Cancel` if cancellation has been requested.
|
||
*/
|
||
function throwIfCancellationRequested(config) {
|
||
if (config.cancelToken) {
|
||
config.cancelToken.throwIfRequested();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Dispatch a request to the server using the configured adapter.
|
||
*
|
||
* @param {object} config The config that is to be used for the request
|
||
* @returns {Promise} The Promise to be fulfilled
|
||
*/
|
||
module.exports = function dispatchRequest(config) {
|
||
throwIfCancellationRequested(config);
|
||
|
||
// Ensure headers exist
|
||
config.headers = config.headers || {};
|
||
|
||
// Transform request data
|
||
config.data = transformData(
|
||
config.data,
|
||
config.headers,
|
||
config.transformRequest
|
||
);
|
||
|
||
// Flatten headers
|
||
config.headers = utils.merge(
|
||
config.headers.common || {},
|
||
config.headers[config.method] || {},
|
||
config.headers || {}
|
||
);
|
||
|
||
utils.forEach(
|
||
['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
|
||
function cleanHeaderConfig(method) {
|
||
delete config.headers[method];
|
||
}
|
||
);
|
||
|
||
var adapter = config.adapter || defaults.adapter;
|
||
|
||
return adapter(config).then(function onAdapterResolution(response) {
|
||
throwIfCancellationRequested(config);
|
||
|
||
// Transform response data
|
||
response.data = transformData(
|
||
response.data,
|
||
response.headers,
|
||
config.transformResponse
|
||
);
|
||
|
||
return response;
|
||
}, function onAdapterRejection(reason) {
|
||
if (!isCancel(reason)) {
|
||
throwIfCancellationRequested(config);
|
||
|
||
// Transform response data
|
||
if (reason && reason.response) {
|
||
reason.response.data = transformData(
|
||
reason.response.data,
|
||
reason.response.headers,
|
||
config.transformResponse
|
||
);
|
||
}
|
||
}
|
||
|
||
return Promise.reject(reason);
|
||
});
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/core/enhanceError.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* Update an Error with the specified config, error code, and response.
|
||
*
|
||
* @param {Error} error The error to update.
|
||
* @param {Object} config The config.
|
||
* @param {string} [code] The error code (for example, 'ECONNABORTED').
|
||
@ @param {Object} [response] The response.
|
||
* @returns {Error} The error.
|
||
*/
|
||
module.exports = function enhanceError(error, config, code, response) {
|
||
error.config = config;
|
||
if (code) {
|
||
error.code = code;
|
||
}
|
||
error.response = response;
|
||
return error;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/core/settle.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var createError = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/core/createError.js");
|
||
|
||
/**
|
||
* Resolve or reject a Promise based on response status.
|
||
*
|
||
* @param {Function} resolve A function that resolves the promise.
|
||
* @param {Function} reject A function that rejects the promise.
|
||
* @param {object} response The response.
|
||
*/
|
||
module.exports = function settle(resolve, reject, response) {
|
||
var validateStatus = response.config.validateStatus;
|
||
// Note: status is not exposed by XDomainRequest
|
||
if (!response.status || !validateStatus || validateStatus(response.status)) {
|
||
resolve(response);
|
||
} else {
|
||
reject(createError(
|
||
'Request failed with status code ' + response.status,
|
||
response.config,
|
||
null,
|
||
response
|
||
));
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/core/transformData.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
|
||
/**
|
||
* Transform the data for a request or a response
|
||
*
|
||
* @param {Object|String} data The data to be transformed
|
||
* @param {Array} headers The headers for the request or response
|
||
* @param {Array|Function} fns A single function or Array of functions
|
||
* @returns {*} The resulting transformed data
|
||
*/
|
||
module.exports = function transformData(data, headers, fns) {
|
||
/*eslint no-param-reassign:0*/
|
||
utils.forEach(fns, function transform(fn) {
|
||
data = fn(data, headers);
|
||
});
|
||
|
||
return data;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/defaults.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
/* WEBPACK VAR INJECTION */(function(process) {
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
var normalizeHeaderName = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/normalizeHeaderName.js");
|
||
|
||
var PROTECTION_PREFIX = /^\)\]\}',?\n/;
|
||
var DEFAULT_CONTENT_TYPE = {
|
||
'Content-Type': 'application/x-www-form-urlencoded'
|
||
};
|
||
|
||
function setContentTypeIfUnset(headers, value) {
|
||
if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
|
||
headers['Content-Type'] = value;
|
||
}
|
||
}
|
||
|
||
function getDefaultAdapter() {
|
||
var adapter;
|
||
if (typeof XMLHttpRequest !== 'undefined') {
|
||
// For browsers use XHR adapter
|
||
adapter = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/adapters/xhr.js");
|
||
} else if (typeof process !== 'undefined') {
|
||
// For node use HTTP adapter
|
||
adapter = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/adapters/xhr.js");
|
||
}
|
||
return adapter;
|
||
}
|
||
|
||
var defaults = {
|
||
adapter: getDefaultAdapter(),
|
||
|
||
transformRequest: [function transformRequest(data, headers) {
|
||
normalizeHeaderName(headers, 'Content-Type');
|
||
if (utils.isFormData(data) ||
|
||
utils.isArrayBuffer(data) ||
|
||
utils.isStream(data) ||
|
||
utils.isFile(data) ||
|
||
utils.isBlob(data)
|
||
) {
|
||
return data;
|
||
}
|
||
if (utils.isArrayBufferView(data)) {
|
||
return data.buffer;
|
||
}
|
||
if (utils.isURLSearchParams(data)) {
|
||
setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
|
||
return data.toString();
|
||
}
|
||
if (utils.isObject(data)) {
|
||
setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
|
||
return JSON.stringify(data);
|
||
}
|
||
return data;
|
||
}],
|
||
|
||
transformResponse: [function transformResponse(data) {
|
||
/*eslint no-param-reassign:0*/
|
||
if (typeof data === 'string') {
|
||
data = data.replace(PROTECTION_PREFIX, '');
|
||
try {
|
||
data = JSON.parse(data);
|
||
} catch (e) { /* Ignore */ }
|
||
}
|
||
return data;
|
||
}],
|
||
|
||
timeout: 0,
|
||
|
||
xsrfCookieName: 'XSRF-TOKEN',
|
||
xsrfHeaderName: 'X-XSRF-TOKEN',
|
||
|
||
maxContentLength: -1,
|
||
|
||
validateStatus: function validateStatus(status) {
|
||
return status >= 200 && status < 300;
|
||
}
|
||
};
|
||
|
||
defaults.headers = {
|
||
common: {
|
||
'Accept': 'application/json, text/plain, */*'
|
||
}
|
||
};
|
||
|
||
utils.forEach(['delete', 'get', 'head'], function forEachMehtodNoData(method) {
|
||
defaults.headers[method] = {};
|
||
});
|
||
|
||
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
|
||
defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
|
||
});
|
||
|
||
module.exports = defaults;
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/process/browser.js")))
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/bind.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
module.exports = function bind(fn, thisArg) {
|
||
return function wrap() {
|
||
var args = new Array(arguments.length);
|
||
for (var i = 0; i < args.length; i++) {
|
||
args[i] = arguments[i];
|
||
}
|
||
return fn.apply(thisArg, args);
|
||
};
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/btoa.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js
|
||
|
||
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
||
|
||
function E() {
|
||
this.message = 'String contains an invalid character';
|
||
}
|
||
E.prototype = new Error;
|
||
E.prototype.code = 5;
|
||
E.prototype.name = 'InvalidCharacterError';
|
||
|
||
function btoa(input) {
|
||
var str = String(input);
|
||
var output = '';
|
||
for (
|
||
// initialize result and counter
|
||
var block, charCode, idx = 0, map = chars;
|
||
// if the next str index does not exist:
|
||
// change the mapping table to "="
|
||
// check if d has no fractional digits
|
||
str.charAt(idx | 0) || (map = '=', idx % 1);
|
||
// "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
|
||
output += map.charAt(63 & block >> 8 - idx % 1 * 8)
|
||
) {
|
||
charCode = str.charCodeAt(idx += 3 / 4);
|
||
if (charCode > 0xFF) {
|
||
throw new E();
|
||
}
|
||
block = block << 8 | charCode;
|
||
}
|
||
return output;
|
||
}
|
||
|
||
module.exports = btoa;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/buildURL.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
|
||
function encode(val) {
|
||
return encodeURIComponent(val).
|
||
replace(/%40/gi, '@').
|
||
replace(/%3A/gi, ':').
|
||
replace(/%24/g, '$').
|
||
replace(/%2C/gi, ',').
|
||
replace(/%20/g, '+').
|
||
replace(/%5B/gi, '[').
|
||
replace(/%5D/gi, ']');
|
||
}
|
||
|
||
/**
|
||
* Build a URL by appending params to the end
|
||
*
|
||
* @param {string} url The base of the url (e.g., http://www.google.com)
|
||
* @param {object} [params] The params to be appended
|
||
* @returns {string} The formatted url
|
||
*/
|
||
module.exports = function buildURL(url, params, paramsSerializer) {
|
||
/*eslint no-param-reassign:0*/
|
||
if (!params) {
|
||
return url;
|
||
}
|
||
|
||
var serializedParams;
|
||
if (paramsSerializer) {
|
||
serializedParams = paramsSerializer(params);
|
||
} else if (utils.isURLSearchParams(params)) {
|
||
serializedParams = params.toString();
|
||
} else {
|
||
var parts = [];
|
||
|
||
utils.forEach(params, function serialize(val, key) {
|
||
if (val === null || typeof val === 'undefined') {
|
||
return;
|
||
}
|
||
|
||
if (utils.isArray(val)) {
|
||
key = key + '[]';
|
||
}
|
||
|
||
if (!utils.isArray(val)) {
|
||
val = [val];
|
||
}
|
||
|
||
utils.forEach(val, function parseValue(v) {
|
||
if (utils.isDate(v)) {
|
||
v = v.toISOString();
|
||
} else if (utils.isObject(v)) {
|
||
v = JSON.stringify(v);
|
||
}
|
||
parts.push(encode(key) + '=' + encode(v));
|
||
});
|
||
});
|
||
|
||
serializedParams = parts.join('&');
|
||
}
|
||
|
||
if (serializedParams) {
|
||
url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
|
||
}
|
||
|
||
return url;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/combineURLs.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* Creates a new URL by combining the specified URLs
|
||
*
|
||
* @param {string} baseURL The base URL
|
||
* @param {string} relativeURL The relative URL
|
||
* @returns {string} The combined URL
|
||
*/
|
||
module.exports = function combineURLs(baseURL, relativeURL) {
|
||
return baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '');
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/cookies.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
|
||
module.exports = (
|
||
utils.isStandardBrowserEnv() ?
|
||
|
||
// Standard browser envs support document.cookie
|
||
(function standardBrowserEnv() {
|
||
return {
|
||
write: function write(name, value, expires, path, domain, secure) {
|
||
var cookie = [];
|
||
cookie.push(name + '=' + encodeURIComponent(value));
|
||
|
||
if (utils.isNumber(expires)) {
|
||
cookie.push('expires=' + new Date(expires).toGMTString());
|
||
}
|
||
|
||
if (utils.isString(path)) {
|
||
cookie.push('path=' + path);
|
||
}
|
||
|
||
if (utils.isString(domain)) {
|
||
cookie.push('domain=' + domain);
|
||
}
|
||
|
||
if (secure === true) {
|
||
cookie.push('secure');
|
||
}
|
||
|
||
document.cookie = cookie.join('; ');
|
||
},
|
||
|
||
read: function read(name) {
|
||
var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
|
||
return (match ? decodeURIComponent(match[3]) : null);
|
||
},
|
||
|
||
remove: function remove(name) {
|
||
this.write(name, '', Date.now() - 86400000);
|
||
}
|
||
};
|
||
})() :
|
||
|
||
// Non standard browser env (web workers, react-native) lack needed support.
|
||
(function nonStandardBrowserEnv() {
|
||
return {
|
||
write: function write() {},
|
||
read: function read() { return null; },
|
||
remove: function remove() {}
|
||
};
|
||
})()
|
||
);
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/isAbsoluteURL.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* Determines whether the specified URL is absolute
|
||
*
|
||
* @param {string} url The URL to test
|
||
* @returns {boolean} True if the specified URL is absolute, otherwise false
|
||
*/
|
||
module.exports = function isAbsoluteURL(url) {
|
||
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
|
||
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
|
||
// by any combination of letters, digits, plus, period, or hyphen.
|
||
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/isURLSameOrigin.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
|
||
module.exports = (
|
||
utils.isStandardBrowserEnv() ?
|
||
|
||
// Standard browser envs have full support of the APIs needed to test
|
||
// whether the request URL is of the same origin as current location.
|
||
(function standardBrowserEnv() {
|
||
var msie = /(msie|trident)/i.test(navigator.userAgent);
|
||
var urlParsingNode = document.createElement('a');
|
||
var originURL;
|
||
|
||
/**
|
||
* Parse a URL to discover it's components
|
||
*
|
||
* @param {String} url The URL to be parsed
|
||
* @returns {Object}
|
||
*/
|
||
function resolveURL(url) {
|
||
var href = url;
|
||
|
||
if (msie) {
|
||
// IE needs attribute set twice to normalize properties
|
||
urlParsingNode.setAttribute('href', href);
|
||
href = urlParsingNode.href;
|
||
}
|
||
|
||
urlParsingNode.setAttribute('href', href);
|
||
|
||
// urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
|
||
return {
|
||
href: urlParsingNode.href,
|
||
protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
|
||
host: urlParsingNode.host,
|
||
search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
|
||
hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
|
||
hostname: urlParsingNode.hostname,
|
||
port: urlParsingNode.port,
|
||
pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
|
||
urlParsingNode.pathname :
|
||
'/' + urlParsingNode.pathname
|
||
};
|
||
}
|
||
|
||
originURL = resolveURL(window.location.href);
|
||
|
||
/**
|
||
* Determine if a URL shares the same origin as the current location
|
||
*
|
||
* @param {String} requestURL The URL to test
|
||
* @returns {boolean} True if URL shares the same origin, otherwise false
|
||
*/
|
||
return function isURLSameOrigin(requestURL) {
|
||
var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
|
||
return (parsed.protocol === originURL.protocol &&
|
||
parsed.host === originURL.host);
|
||
};
|
||
})() :
|
||
|
||
// Non standard browser envs (web workers, react-native) lack needed support.
|
||
(function nonStandardBrowserEnv() {
|
||
return function isURLSameOrigin() {
|
||
return true;
|
||
};
|
||
})()
|
||
);
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/normalizeHeaderName.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
|
||
module.exports = function normalizeHeaderName(headers, normalizedName) {
|
||
utils.forEach(headers, function processHeader(value, name) {
|
||
if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
|
||
headers[normalizedName] = value;
|
||
delete headers[name];
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/parseHeaders.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var utils = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/utils.js");
|
||
|
||
/**
|
||
* Parse headers into an object
|
||
*
|
||
* ```
|
||
* Date: Wed, 27 Aug 2014 08:58:49 GMT
|
||
* Content-Type: application/json
|
||
* Connection: keep-alive
|
||
* Transfer-Encoding: chunked
|
||
* ```
|
||
*
|
||
* @param {String} headers Headers needing to be parsed
|
||
* @returns {Object} Headers parsed into an object
|
||
*/
|
||
module.exports = function parseHeaders(headers) {
|
||
var parsed = {};
|
||
var key;
|
||
var val;
|
||
var i;
|
||
|
||
if (!headers) { return parsed; }
|
||
|
||
utils.forEach(headers.split('\n'), function parser(line) {
|
||
i = line.indexOf(':');
|
||
key = utils.trim(line.substr(0, i)).toLowerCase();
|
||
val = utils.trim(line.substr(i + 1));
|
||
|
||
if (key) {
|
||
parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
|
||
}
|
||
});
|
||
|
||
return parsed;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/helpers/spread.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
/**
|
||
* Syntactic sugar for invoking a function and expanding an array for arguments.
|
||
*
|
||
* Common use case would be to use `Function.prototype.apply`.
|
||
*
|
||
* ```js
|
||
* function f(x, y, z) {}
|
||
* var args = [1, 2, 3];
|
||
* f.apply(null, args);
|
||
* ```
|
||
*
|
||
* With `spread` this example can be re-written.
|
||
*
|
||
* ```js
|
||
* spread(function(x, y, z) {})([1, 2, 3]);
|
||
* ```
|
||
*
|
||
* @param {Function} callback
|
||
* @returns {Function}
|
||
*/
|
||
module.exports = function spread(callback) {
|
||
return function wrap(arr) {
|
||
return callback.apply(null, arr);
|
||
};
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/node_modules/axios/lib/utils.js":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
|
||
var bind = __webpack_require__("./node_modules/vuetable-2/node_modules/axios/lib/helpers/bind.js");
|
||
|
||
/*global toString:true*/
|
||
|
||
// utils is a library of generic helper functions non-specific to axios
|
||
|
||
var toString = Object.prototype.toString;
|
||
|
||
/**
|
||
* Determine if a value is an Array
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is an Array, otherwise false
|
||
*/
|
||
function isArray(val) {
|
||
return toString.call(val) === '[object Array]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is an ArrayBuffer
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is an ArrayBuffer, otherwise false
|
||
*/
|
||
function isArrayBuffer(val) {
|
||
return toString.call(val) === '[object ArrayBuffer]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a FormData
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is an FormData, otherwise false
|
||
*/
|
||
function isFormData(val) {
|
||
return (typeof FormData !== 'undefined') && (val instanceof FormData);
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a view on an ArrayBuffer
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
|
||
*/
|
||
function isArrayBufferView(val) {
|
||
var result;
|
||
if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
|
||
result = ArrayBuffer.isView(val);
|
||
} else {
|
||
result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a String
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a String, otherwise false
|
||
*/
|
||
function isString(val) {
|
||
return typeof val === 'string';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Number
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Number, otherwise false
|
||
*/
|
||
function isNumber(val) {
|
||
return typeof val === 'number';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is undefined
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if the value is undefined, otherwise false
|
||
*/
|
||
function isUndefined(val) {
|
||
return typeof val === 'undefined';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is an Object
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is an Object, otherwise false
|
||
*/
|
||
function isObject(val) {
|
||
return val !== null && typeof val === 'object';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Date
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Date, otherwise false
|
||
*/
|
||
function isDate(val) {
|
||
return toString.call(val) === '[object Date]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a File
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a File, otherwise false
|
||
*/
|
||
function isFile(val) {
|
||
return toString.call(val) === '[object File]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Blob
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Blob, otherwise false
|
||
*/
|
||
function isBlob(val) {
|
||
return toString.call(val) === '[object Blob]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Function
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Function, otherwise false
|
||
*/
|
||
function isFunction(val) {
|
||
return toString.call(val) === '[object Function]';
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a Stream
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a Stream, otherwise false
|
||
*/
|
||
function isStream(val) {
|
||
return isObject(val) && isFunction(val.pipe);
|
||
}
|
||
|
||
/**
|
||
* Determine if a value is a URLSearchParams object
|
||
*
|
||
* @param {Object} val The value to test
|
||
* @returns {boolean} True if value is a URLSearchParams object, otherwise false
|
||
*/
|
||
function isURLSearchParams(val) {
|
||
return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
|
||
}
|
||
|
||
/**
|
||
* Trim excess whitespace off the beginning and end of a string
|
||
*
|
||
* @param {String} str The String to trim
|
||
* @returns {String} The String freed of excess whitespace
|
||
*/
|
||
function trim(str) {
|
||
return str.replace(/^\s*/, '').replace(/\s*$/, '');
|
||
}
|
||
|
||
/**
|
||
* Determine if we're running in a standard browser environment
|
||
*
|
||
* This allows axios to run in a web worker, and react-native.
|
||
* Both environments support XMLHttpRequest, but not fully standard globals.
|
||
*
|
||
* web workers:
|
||
* typeof window -> undefined
|
||
* typeof document -> undefined
|
||
*
|
||
* react-native:
|
||
* typeof document.createElement -> undefined
|
||
*/
|
||
function isStandardBrowserEnv() {
|
||
return (
|
||
typeof window !== 'undefined' &&
|
||
typeof document !== 'undefined' &&
|
||
typeof document.createElement === 'function'
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Iterate over an Array or an Object invoking a function for each item.
|
||
*
|
||
* If `obj` is an Array callback will be called passing
|
||
* the value, index, and complete array for each item.
|
||
*
|
||
* If 'obj' is an Object callback will be called passing
|
||
* the value, key, and complete object for each property.
|
||
*
|
||
* @param {Object|Array} obj The object to iterate
|
||
* @param {Function} fn The callback to invoke for each item
|
||
*/
|
||
function forEach(obj, fn) {
|
||
// Don't bother if no value provided
|
||
if (obj === null || typeof obj === 'undefined') {
|
||
return;
|
||
}
|
||
|
||
// Force an array if not already something iterable
|
||
if (typeof obj !== 'object' && !isArray(obj)) {
|
||
/*eslint no-param-reassign:0*/
|
||
obj = [obj];
|
||
}
|
||
|
||
if (isArray(obj)) {
|
||
// Iterate over array values
|
||
for (var i = 0, l = obj.length; i < l; i++) {
|
||
fn.call(null, obj[i], i, obj);
|
||
}
|
||
} else {
|
||
// Iterate over object keys
|
||
for (var key in obj) {
|
||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||
fn.call(null, obj[key], key, obj);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Accepts varargs expecting each argument to be an object, then
|
||
* immutably merges the properties of each object and returns result.
|
||
*
|
||
* When multiple objects contain the same key the later object in
|
||
* the arguments list will take precedence.
|
||
*
|
||
* Example:
|
||
*
|
||
* ```js
|
||
* var result = merge({foo: 123}, {foo: 456});
|
||
* console.log(result.foo); // outputs 456
|
||
* ```
|
||
*
|
||
* @param {Object} obj1 Object to merge
|
||
* @returns {Object} Result of all merge properties
|
||
*/
|
||
function merge(/* obj1, obj2, obj3, ... */) {
|
||
var result = {};
|
||
function assignValue(val, key) {
|
||
if (typeof result[key] === 'object' && typeof val === 'object') {
|
||
result[key] = merge(result[key], val);
|
||
} else {
|
||
result[key] = val;
|
||
}
|
||
}
|
||
|
||
for (var i = 0, l = arguments.length; i < l; i++) {
|
||
forEach(arguments[i], assignValue);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Extends object a by mutably adding to it the properties of object b.
|
||
*
|
||
* @param {Object} a The object to be extended
|
||
* @param {Object} b The object to copy properties from
|
||
* @param {Object} thisArg The object to bind function to
|
||
* @return {Object} The resulting value of object a
|
||
*/
|
||
function extend(a, b, thisArg) {
|
||
forEach(b, function assignValue(val, key) {
|
||
if (thisArg && typeof val === 'function') {
|
||
a[key] = bind(val, thisArg);
|
||
} else {
|
||
a[key] = val;
|
||
}
|
||
});
|
||
return a;
|
||
}
|
||
|
||
module.exports = {
|
||
isArray: isArray,
|
||
isArrayBuffer: isArrayBuffer,
|
||
isFormData: isFormData,
|
||
isArrayBufferView: isArrayBufferView,
|
||
isString: isString,
|
||
isNumber: isNumber,
|
||
isObject: isObject,
|
||
isUndefined: isUndefined,
|
||
isDate: isDate,
|
||
isFile: isFile,
|
||
isBlob: isBlob,
|
||
isFunction: isFunction,
|
||
isStream: isStream,
|
||
isURLSearchParams: isURLSearchParams,
|
||
isStandardBrowserEnv: isStandardBrowserEnv,
|
||
forEach: forEach,
|
||
merge: merge,
|
||
extend: extend,
|
||
trim: trim
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/src/components/Vuetable.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
function injectStyle (ssrContext) {
|
||
if (disposed) return
|
||
__webpack_require__("./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-15965e3b\",\"scoped\":true,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./node_modules/vuetable-2/src/components/Vuetable.vue")
|
||
}
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/Vuetable.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-15965e3b\",\"hasScoped\":true,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./node_modules/vuetable-2/src/components/Vuetable.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = injectStyle
|
||
/* scopeId */
|
||
var __vue_scopeId__ = "data-v-15965e3b"
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "node_modules/vuetable-2/src/components/Vuetable.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-15965e3b", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-15965e3b", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/src/components/VuetablePagination.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/VuetablePagination.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-3efdd596\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./node_modules/vuetable-2/src/components/VuetablePagination.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = null
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "node_modules/vuetable-2/src/components/VuetablePagination.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-3efdd596", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-3efdd596", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-17724083\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = null
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "node_modules/vuetable-2/src/components/VuetablePaginationInfo.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-17724083", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-17724083", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/src/components/VuetablePaginationInfoMixin.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/VuetablePaginationInfoMixin.vue")
|
||
/* template */
|
||
var __vue_template__ = null
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = null
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "node_modules/vuetable-2/src/components/VuetablePaginationInfoMixin.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-2f05a36e", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-2f05a36e", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/vuetable-2/src/components/VuetablePaginationMixin.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./node_modules/vuetable-2/src/components/VuetablePaginationMixin.vue")
|
||
/* template */
|
||
var __vue_template__ = null
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = null
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "node_modules/vuetable-2/src/components/VuetablePaginationMixin.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-5c4c2408", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-5c4c2408", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/webpack/buildin/global.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
var g;
|
||
|
||
// This works in non-strict mode
|
||
g = (function() {
|
||
return this;
|
||
})();
|
||
|
||
try {
|
||
// This works if eval is allowed (see CSP)
|
||
g = g || Function("return this")() || (1,eval)("this");
|
||
} catch(e) {
|
||
// This works if the window reference is available
|
||
if(typeof window === "object")
|
||
g = window;
|
||
}
|
||
|
||
// g can still be undefined, but nothing to do about it...
|
||
// We return undefined, instead of nothing here, so it's
|
||
// easier to handle this case. if(!global) { ...}
|
||
|
||
module.exports = g;
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./node_modules/webpack/buildin/module.js":
|
||
/***/ (function(module, exports) {
|
||
|
||
module.exports = function(module) {
|
||
if(!module.webpackPolyfill) {
|
||
module.deprecate = function() {};
|
||
module.paths = [];
|
||
// module.parent = undefined by default
|
||
if(!module.children) module.children = [];
|
||
Object.defineProperty(module, "loaded", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return module.l;
|
||
}
|
||
});
|
||
Object.defineProperty(module, "id", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return module.i;
|
||
}
|
||
});
|
||
module.webpackPolyfill = 1;
|
||
}
|
||
return module;
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/bootstrap.js":
|
||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||
|
||
"use strict";
|
||
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash__ = __webpack_require__("./node_modules/lodash/lodash.js");
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash__);
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue_toastr__ = __webpack_require__("./node_modules/vue-toastr/dist/vue-toastr.js");
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_vue_toastr__);
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue__ = __webpack_require__("./node_modules/vue/dist/vue.common.js");
|
||
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue__);
|
||
// lodash handles our translations
|
||
|
||
|
||
// import Toastr
|
||
|
||
|
||
// Import toastr scss file: need webpack sass-loader
|
||
__webpack_require__("./node_modules/vue-toastr/src/vue-toastr.scss");
|
||
|
||
|
||
|
||
// Register vue component
|
||
__WEBPACK_IMPORTED_MODULE_2_vue___default.a.component('vue-toastr', __WEBPACK_IMPORTED_MODULE_1_vue_toastr___default.a);
|
||
|
||
// Global translation helper
|
||
__WEBPACK_IMPORTED_MODULE_2_vue___default.a.prototype.trans = function (string) {
|
||
return __WEBPACK_IMPORTED_MODULE_0_lodash__["get"](i18n, string);
|
||
};
|
||
|
||
window.axios = __webpack_require__("./node_modules/axios/index.js");
|
||
window.Vue = __webpack_require__("./node_modules/vue/dist/vue.common.js");
|
||
|
||
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||
|
||
/* Development only*/
|
||
__WEBPACK_IMPORTED_MODULE_2_vue___default.a.config.devtools = true;
|
||
|
||
window.axios.defaults.headers.common = {
|
||
'X-Requested-With': 'XMLHttpRequest',
|
||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
|
||
};
|
||
|
||
/**
|
||
* Next we will register the CSRF Token as a common header with Axios so that
|
||
* all outgoing HTTP requests automatically have it attached. This is just
|
||
* a simple convenience so we don't have to attach every token manually.
|
||
*/
|
||
|
||
var token = document.head.querySelector('meta[name="csrf-token"]');
|
||
|
||
if (token) {
|
||
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
|
||
} else {
|
||
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
|
||
}
|
||
|
||
/**
|
||
* Echo exposes an expressive API for subscribing to channels and listening
|
||
* for events that are broadcast by Laravel. Echo and event broadcasting
|
||
* allows your team to easily build robust real-time web applications.
|
||
*/
|
||
|
||
// import Echo from 'laravel-echo'
|
||
|
||
// window.Pusher = require('pusher-js');
|
||
|
||
// window.Echo = new Echo({
|
||
// broadcaster: 'pusher',
|
||
// key: process.env.MIX_PUSHER_APP_KEY,
|
||
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
|
||
// encrypted: true
|
||
// });
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/client/client_list.ts":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
__webpack_require__("./resources/js/src/bootstrap.js");
|
||
var vue_1 = __importDefault(__webpack_require__("./node_modules/vue/dist/vue.common.js"));
|
||
vue_1.default.component('client-list', __webpack_require__("./resources/js/src/components/client/ClientList.vue"));
|
||
vue_1.default.component('client-actions', __webpack_require__("./resources/js/src/components/client/ClientActions.vue"));
|
||
vue_1.default.component('vuetable', __webpack_require__("./node_modules/vuetable-2/src/components/Vuetable.vue"));
|
||
vue_1.default.component('vuetable-pagination', __webpack_require__("./node_modules/vuetable-2/src/components/VuetablePagination.vue"));
|
||
vue_1.default.component('vuetable-pagination-bootstrap', __webpack_require__("./resources/js/src/components/util/VuetablePaginationBootstrap.vue"));
|
||
vue_1.default.component('vuetable-filter-bar', __webpack_require__("./resources/js/src/components/util/VuetableFilterBar.vue"));
|
||
vue_1.default.component('vuetable-query-filter', __webpack_require__("./resources/js/src/components/client/ClientFilters.vue"));
|
||
vue_1.default.component('vuetable-multi-select', __webpack_require__("./resources/js/src/components/util/VuetableMultiSelect.vue"));
|
||
vue_1.default.component('list-actions', __webpack_require__("./resources/js/src/components/util/VueListActions.vue"));
|
||
window.onload = function () {
|
||
var app = new vue_1.default({
|
||
el: '#client_list'
|
||
});
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/components/client/ClientActions.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
function injectStyle (ssrContext) {
|
||
if (disposed) return
|
||
__webpack_require__("./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-d9a40d24\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientActions.vue")
|
||
}
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/client/ClientActions.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-d9a40d24\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/client/ClientActions.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = injectStyle
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "resources/js/src/components/client/ClientActions.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-d9a40d24", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-d9a40d24", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/components/client/ClientFilters.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
function injectStyle (ssrContext) {
|
||
if (disposed) return
|
||
__webpack_require__("./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-0086b528\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientFilters.vue")
|
||
}
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/client/ClientFilters.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-0086b528\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/client/ClientFilters.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = injectStyle
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "resources/js/src/components/client/ClientFilters.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-0086b528", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-0086b528", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/components/client/ClientList.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
function injectStyle (ssrContext) {
|
||
if (disposed) return
|
||
__webpack_require__("./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-3cd1b306\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/client/ClientList.vue")
|
||
}
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/client/ClientList.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-3cd1b306\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/client/ClientList.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = injectStyle
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "resources/js/src/components/client/ClientList.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-3cd1b306", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-3cd1b306", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/components/util/VueListActions.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
function injectStyle (ssrContext) {
|
||
if (disposed) return
|
||
__webpack_require__("./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-1a665214\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/util/VueListActions.vue")
|
||
}
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/util/VueListActions.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-1a665214\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/util/VueListActions.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = injectStyle
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "resources/js/src/components/util/VueListActions.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-1a665214", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-1a665214", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/components/util/VuetableCss.ts":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.default = {
|
||
table: {
|
||
tableClass: 'table table-striped table-hover',
|
||
loadingClass: 'loading',
|
||
ascendingIcon: 'fa fa-angle-double-up',
|
||
descendingIcon: 'fa fa-angle-double-down',
|
||
handleIcon: 'glyphicon glyphicon-menu-hamburger',
|
||
},
|
||
pagination: {
|
||
infoClass: 'pull-left',
|
||
wrapperClass: 'vuetable-pagination pull-right',
|
||
activeClass: 'btn-primary',
|
||
disabledClass: 'disabled',
|
||
pageClass: 'btn btn-border',
|
||
linkClass: 'btn btn-border',
|
||
icons: {
|
||
first: '',
|
||
prev: '',
|
||
next: '',
|
||
last: '',
|
||
},
|
||
}
|
||
};
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/components/util/VuetableFilterBar.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
function injectStyle (ssrContext) {
|
||
if (disposed) return
|
||
__webpack_require__("./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-be66a0f4\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./resources/js/src/components/util/VuetableFilterBar.vue")
|
||
}
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/util/VuetableFilterBar.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-be66a0f4\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/util/VuetableFilterBar.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = injectStyle
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "resources/js/src/components/util/VuetableFilterBar.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-be66a0f4", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-be66a0f4", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/components/util/VuetableMultiSelect.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
function injectStyle (ssrContext) {
|
||
if (disposed) return
|
||
__webpack_require__("./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-multiselect/dist/vue-multiselect.min.css")
|
||
__webpack_require__("./node_modules/vue-style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/vue-loader/lib/style-compiler/index.js?{\"vue\":true,\"id\":\"data-v-5e03b840\",\"scoped\":false,\"hasInlineConfig\":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=1!./resources/js/src/components/util/VuetableMultiSelect.vue")
|
||
}
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/ts-loader/index.js!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/util/VuetableMultiSelect.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-5e03b840\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/util/VuetableMultiSelect.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = injectStyle
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "resources/js/src/components/util/VuetableMultiSelect.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-5e03b840", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-5e03b840", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./resources/js/src/components/util/VuetablePaginationBootstrap.vue":
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
var disposed = false
|
||
var normalizeComponent = __webpack_require__("./node_modules/vue-loader/lib/component-normalizer.js")
|
||
/* script */
|
||
var __vue_script__ = __webpack_require__("./node_modules/babel-loader/lib/index.js?{\"cacheDirectory\":true,\"presets\":[[\"env\",{\"modules\":false,\"targets\":{\"browsers\":[\"> 2%\"],\"uglify\":true}}]],\"plugins\":[\"transform-object-rest-spread\",[\"transform-runtime\",{\"polyfill\":false,\"helpers\":false}]]}!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./resources/js/src/components/util/VuetablePaginationBootstrap.vue")
|
||
/* template */
|
||
var __vue_template__ = __webpack_require__("./node_modules/vue-loader/lib/template-compiler/index.js?{\"id\":\"data-v-03f135bf\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./resources/js/src/components/util/VuetablePaginationBootstrap.vue")
|
||
/* template functional */
|
||
var __vue_template_functional__ = false
|
||
/* styles */
|
||
var __vue_styles__ = null
|
||
/* scopeId */
|
||
var __vue_scopeId__ = null
|
||
/* moduleIdentifier (server only) */
|
||
var __vue_module_identifier__ = null
|
||
var Component = normalizeComponent(
|
||
__vue_script__,
|
||
__vue_template__,
|
||
__vue_template_functional__,
|
||
__vue_styles__,
|
||
__vue_scopeId__,
|
||
__vue_module_identifier__
|
||
)
|
||
Component.options.__file = "resources/js/src/components/util/VuetablePaginationBootstrap.vue"
|
||
|
||
/* hot reload */
|
||
if (false) {(function () {
|
||
var hotAPI = require("vue-hot-reload-api")
|
||
hotAPI.install(require("vue"), false)
|
||
if (!hotAPI.compatible) return
|
||
module.hot.accept()
|
||
if (!module.hot.data) {
|
||
hotAPI.createRecord("data-v-03f135bf", Component.options)
|
||
} else {
|
||
hotAPI.reload("data-v-03f135bf", Component.options)
|
||
}
|
||
module.hot.dispose(function (data) {
|
||
disposed = true
|
||
})
|
||
})()}
|
||
|
||
module.exports = Component.exports
|
||
|
||
|
||
/***/ }),
|
||
|
||
/***/ 2:
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = __webpack_require__("./resources/js/src/client/client_list.ts");
|
||
|
||
|
||
/***/ })
|
||
|
||
/******/ }); |