mirror of
https://github.com/KevinMidboe/vue-chartjs.git
synced 2025-10-29 18:00:20 +00:00
43586 lines
1.2 MiB
43586 lines
1.2 MiB
(function webpackUniversalModuleDefinition(root, factory) {
|
||
if(typeof exports === 'object' && typeof module === 'object')
|
||
module.exports = factory();
|
||
else if(typeof define === 'function' && define.amd)
|
||
define([], factory);
|
||
else if(typeof exports === 'object')
|
||
exports["VueChartJs"] = factory();
|
||
else
|
||
root["VueChartJs"] = 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 = "";
|
||
|
||
/******/ // Load entry module and return exports
|
||
/******/ return __webpack_require__(0);
|
||
/******/ })
|
||
/************************************************************************/
|
||
/******/ ([
|
||
/* 0 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
exports.mixins = exports.Bubble = exports.Radar = exports.PolarArea = exports.Pie = exports.Line = exports.Doughnut = exports.Bar = exports.VueCharts = undefined;
|
||
|
||
var _Bar = __webpack_require__(1);
|
||
|
||
var _Bar2 = _interopRequireDefault(_Bar);
|
||
|
||
var _Doughnut = __webpack_require__(382);
|
||
|
||
var _Doughnut2 = _interopRequireDefault(_Doughnut);
|
||
|
||
var _Line = __webpack_require__(383);
|
||
|
||
var _Line2 = _interopRequireDefault(_Line);
|
||
|
||
var _Pie = __webpack_require__(384);
|
||
|
||
var _Pie2 = _interopRequireDefault(_Pie);
|
||
|
||
var _PolarArea = __webpack_require__(385);
|
||
|
||
var _PolarArea2 = _interopRequireDefault(_PolarArea);
|
||
|
||
var _Radar = __webpack_require__(386);
|
||
|
||
var _Radar2 = _interopRequireDefault(_Radar);
|
||
|
||
var _Bubble = __webpack_require__(387);
|
||
|
||
var _Bubble2 = _interopRequireDefault(_Bubble);
|
||
|
||
var _index = __webpack_require__(388);
|
||
|
||
var _index2 = _interopRequireDefault(_index);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
var VueCharts = {
|
||
Bar: _Bar2.default,
|
||
Doughnut: _Doughnut2.default,
|
||
Line: _Line2.default,
|
||
Pie: _Pie2.default,
|
||
PolarArea: _PolarArea2.default,
|
||
Radar: _Radar2.default,
|
||
Bubble: _Bubble2.default,
|
||
mixins: _index2.default
|
||
};
|
||
|
||
exports.default = VueCharts;
|
||
exports.VueCharts = VueCharts;
|
||
exports.Bar = _Bar2.default;
|
||
exports.Doughnut = _Doughnut2.default;
|
||
exports.Line = _Line2.default;
|
||
exports.Pie = _Pie2.default;
|
||
exports.PolarArea = _PolarArea2.default;
|
||
exports.Radar = _Radar2.default;
|
||
exports.Bubble = _Bubble2.default;
|
||
exports.mixins = _index2.default;
|
||
|
||
/***/ },
|
||
/* 1 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _vue = __webpack_require__(2);
|
||
|
||
var _vue2 = _interopRequireDefault(_vue);
|
||
|
||
var _chart = __webpack_require__(4);
|
||
|
||
var _chart2 = _interopRequireDefault(_chart);
|
||
|
||
var _options = __webpack_require__(162);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = _vue2.default.extend({
|
||
render: function render(createElement) {
|
||
return createElement('div', [createElement('canvas', {
|
||
attrs: {
|
||
id: this.chartId,
|
||
width: this.width,
|
||
height: this.height
|
||
},
|
||
ref: 'canvas'
|
||
})]);
|
||
},
|
||
|
||
props: {
|
||
chartId: {
|
||
default: 'bar-chart',
|
||
type: String
|
||
},
|
||
width: {
|
||
default: 400,
|
||
type: Number
|
||
},
|
||
height: {
|
||
default: 400,
|
||
type: Number
|
||
}
|
||
},
|
||
|
||
data: function data() {
|
||
return {
|
||
defaultOptions: {
|
||
scales: {
|
||
yAxes: [{
|
||
ticks: {
|
||
beginAtZero: true
|
||
},
|
||
gridLines: {
|
||
display: false
|
||
}
|
||
}],
|
||
xAxes: [{
|
||
gridLines: {
|
||
display: false
|
||
},
|
||
categoryPercentage: 0.5,
|
||
barPercentage: 0.2
|
||
}]
|
||
}
|
||
}
|
||
};
|
||
},
|
||
|
||
|
||
methods: {
|
||
renderChart: function renderChart(data, options, type) {
|
||
var chartOptions = (0, _options.mergeOptions)(this.defaultOptions, options);
|
||
this._chart = new _chart2.default(this.$refs.canvas.getContext('2d'), {
|
||
type: type || 'bar',
|
||
data: data,
|
||
options: chartOptions
|
||
});
|
||
this._chart.generateLegend();
|
||
}
|
||
},
|
||
beforeDestroy: function beforeDestroy() {
|
||
this._chart.destroy();
|
||
}
|
||
});
|
||
|
||
/***/ },
|
||
/* 2 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(process, global) {/*!
|
||
* Vue.js v2.2.1
|
||
* (c) 2014-2017 Evan You
|
||
* Released under the MIT License.
|
||
*/
|
||
'use strict';
|
||
|
||
/* */
|
||
|
||
/**
|
||
* 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);
|
||
|
||
/**
|
||
* 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)
|
||
}
|
||
|
||
/**
|
||
* Check if value is primitive
|
||
*/
|
||
function isPrimitive (value) {
|
||
return typeof value === 'string' || typeof value === 'number'
|
||
}
|
||
|
||
/**
|
||
* 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 = /([^-])([A-Z])/g;
|
||
var hyphenate = cached(function (str) {
|
||
return str
|
||
.replace(hyphenateRE, '$1-$2')
|
||
.replace(hyphenateRE, '$1-$2')
|
||
.toLowerCase()
|
||
});
|
||
|
||
/**
|
||
* Simple bind, faster than native
|
||
*/
|
||
function bind (fn, ctx) {
|
||
function boundFn (a) {
|
||
var l = arguments.length;
|
||
return l
|
||
? l > 1
|
||
? fn.apply(ctx, arguments)
|
||
: fn.call(ctx, a)
|
||
: fn.call(ctx)
|
||
}
|
||
// record original fn length
|
||
boundFn._length = fn.length;
|
||
return boundFn
|
||
}
|
||
|
||
/**
|
||
* 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
|
||
}
|
||
|
||
/**
|
||
* 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'
|
||
}
|
||
|
||
/**
|
||
* Strict object type check. Only returns true
|
||
* for plain JavaScript objects.
|
||
*/
|
||
var toString = Object.prototype.toString;
|
||
var OBJECT_STRING = '[object Object]';
|
||
function isPlainObject (obj) {
|
||
return toString.call(obj) === OBJECT_STRING
|
||
}
|
||
|
||
/**
|
||
* 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.
|
||
*/
|
||
function noop () {}
|
||
|
||
/**
|
||
* Always return false.
|
||
*/
|
||
var no = function () { return false; };
|
||
|
||
/**
|
||
* Return same value
|
||
*/
|
||
var identity = function (_) { return _; };
|
||
|
||
/**
|
||
* Generate a static keys string from compiler modules.
|
||
*/
|
||
|
||
|
||
/**
|
||
* Check if two values are loosely equal - that is,
|
||
* if they are plain objects, do they have the same shape?
|
||
*/
|
||
function looseEqual (a, b) {
|
||
var isObjectA = isObject(a);
|
||
var isObjectB = isObject(b);
|
||
if (isObjectA && isObjectB) {
|
||
return JSON.stringify(a) === JSON.stringify(b)
|
||
} 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();
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var config = {
|
||
/**
|
||
* Option merge strategies (used in core/util/options)
|
||
*/
|
||
optionMergeStrategies: Object.create(null),
|
||
|
||
/**
|
||
* Whether to suppress warnings.
|
||
*/
|
||
silent: false,
|
||
|
||
/**
|
||
* Show production mode tip message on boot?
|
||
*/
|
||
productionTip: process.env.NODE_ENV !== 'production',
|
||
|
||
/**
|
||
* Whether to enable devtools
|
||
*/
|
||
devtools: process.env.NODE_ENV !== 'production',
|
||
|
||
/**
|
||
* Whether to record perf
|
||
*/
|
||
performance: process.env.NODE_ENV !== 'production',
|
||
|
||
/**
|
||
* Error handler for watcher errors
|
||
*/
|
||
errorHandler: null,
|
||
|
||
/**
|
||
* Ignore certain custom elements
|
||
*/
|
||
ignoredElements: [],
|
||
|
||
/**
|
||
* Custom user key aliases for v-on
|
||
*/
|
||
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 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,
|
||
|
||
/**
|
||
* List of asset types that a component can own.
|
||
*/
|
||
_assetTypes: [
|
||
'component',
|
||
'directive',
|
||
'filter'
|
||
],
|
||
|
||
/**
|
||
* List of lifecycle hooks.
|
||
*/
|
||
_lifecycleHooks: [
|
||
'beforeCreate',
|
||
'created',
|
||
'beforeMount',
|
||
'mounted',
|
||
'beforeUpdate',
|
||
'updated',
|
||
'beforeDestroy',
|
||
'destroyed',
|
||
'activated',
|
||
'deactivated'
|
||
],
|
||
|
||
/**
|
||
* Max circular updates allowed in a scheduler flush cycle.
|
||
*/
|
||
_maxUpdateCount: 100
|
||
};
|
||
|
||
/* */
|
||
/* globals MutationObserver */
|
||
|
||
// can we use __proto__?
|
||
var hasProto = '__proto__' in {};
|
||
|
||
// Browser environment sniffing
|
||
var inBrowser = typeof window !== 'undefined';
|
||
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;
|
||
var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
|
||
var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
|
||
|
||
// 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 && 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 /native code/.test(Ctor.toString())
|
||
}
|
||
|
||
var hasSymbol =
|
||
typeof Symbol !== 'undefined' && isNative(Symbol) &&
|
||
typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
|
||
|
||
/**
|
||
* Defer a task to execute it asynchronously.
|
||
*/
|
||
var nextTick = (function () {
|
||
var callbacks = [];
|
||
var pending = false;
|
||
var timerFunc;
|
||
|
||
function nextTickHandler () {
|
||
pending = false;
|
||
var copies = callbacks.slice(0);
|
||
callbacks.length = 0;
|
||
for (var i = 0; i < copies.length; i++) {
|
||
copies[i]();
|
||
}
|
||
}
|
||
|
||
// the nextTick behavior leverages the microtask queue, which can be accessed
|
||
// via either native Promise.then or MutationObserver.
|
||
// MutationObserver has wider support, however it is seriously bugged in
|
||
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
|
||
// completely stops working after triggering a few times... so, if native
|
||
// Promise is available, we will use it:
|
||
/* istanbul ignore if */
|
||
if (typeof Promise !== 'undefined' && isNative(Promise)) {
|
||
var p = Promise.resolve();
|
||
var logError = function (err) { console.error(err); };
|
||
timerFunc = function () {
|
||
p.then(nextTickHandler).catch(logError);
|
||
// 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 if (typeof MutationObserver !== 'undefined' && (
|
||
isNative(MutationObserver) ||
|
||
// PhantomJS and iOS 7.x
|
||
MutationObserver.toString() === '[object MutationObserverConstructor]'
|
||
)) {
|
||
// use MutationObserver where native Promise is not available,
|
||
// e.g. PhantomJS IE11, iOS7, Android 4.4
|
||
var counter = 1;
|
||
var observer = new MutationObserver(nextTickHandler);
|
||
var textNode = document.createTextNode(String(counter));
|
||
observer.observe(textNode, {
|
||
characterData: true
|
||
});
|
||
timerFunc = function () {
|
||
counter = (counter + 1) % 2;
|
||
textNode.data = String(counter);
|
||
};
|
||
} else {
|
||
// fallback to setTimeout
|
||
/* istanbul ignore next */
|
||
timerFunc = function () {
|
||
setTimeout(nextTickHandler, 0);
|
||
};
|
||
}
|
||
|
||
return function queueNextTick (cb, ctx) {
|
||
var _resolve;
|
||
callbacks.push(function () {
|
||
if (cb) { cb.call(ctx); }
|
||
if (_resolve) { _resolve(ctx); }
|
||
});
|
||
if (!pending) {
|
||
pending = true;
|
||
timerFunc();
|
||
}
|
||
if (!cb && typeof Promise !== 'undefined') {
|
||
return new Promise(function (resolve) {
|
||
_resolve = resolve;
|
||
})
|
||
}
|
||
}
|
||
})();
|
||
|
||
var _Set;
|
||
/* istanbul ignore if */
|
||
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 perf;
|
||
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
perf = inBrowser && window.performance;
|
||
if (perf && (!perf.mark || !perf.measure)) {
|
||
perf = undefined;
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var emptyObject = Object.freeze({});
|
||
|
||
/**
|
||
* 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
|
||
} else {
|
||
var segments = path.split('.');
|
||
return function (obj) {
|
||
for (var i = 0; i < segments.length; i++) {
|
||
if (!obj) { return }
|
||
obj = obj[segments[i]];
|
||
}
|
||
return obj
|
||
}
|
||
}
|
||
}
|
||
|
||
var warn = noop;
|
||
var tip = noop;
|
||
var formatComponentName;
|
||
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
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) {
|
||
if (hasConsole && (!config.silent)) {
|
||
console.error("[Vue warn]: " + msg + " " + (
|
||
vm ? formatLocation(formatComponentName(vm)) : ''
|
||
));
|
||
}
|
||
};
|
||
|
||
tip = function (msg, vm) {
|
||
if (hasConsole && (!config.silent)) {
|
||
console.warn("[Vue tip]: " + msg + " " + (
|
||
vm ? formatLocation(formatComponentName(vm)) : ''
|
||
));
|
||
}
|
||
};
|
||
|
||
formatComponentName = function (vm, includeFile) {
|
||
if (vm.$root === vm) {
|
||
return '<Root>'
|
||
}
|
||
var name = vm._isVue
|
||
? vm.$options.name || vm.$options._componentTag
|
||
: vm.name;
|
||
|
||
var file = vm._isVue && vm.$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 formatLocation = function (str) {
|
||
if (str === "<Anonymous>") {
|
||
str += " - use the \"name\" option for better debugging messages.";
|
||
}
|
||
return ("\n(found in " + str + ")")
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
|
||
var uid$1 = 0;
|
||
|
||
/**
|
||
* A dep is an observable that can have multiple
|
||
* directives subscribing to it.
|
||
*/
|
||
var Dep = function Dep () {
|
||
this.id = uid$1++;
|
||
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 () {
|
||
// stablize 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();
|
||
}
|
||
|
||
/*
|
||
* 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);[
|
||
'push',
|
||
'pop',
|
||
'shift',
|
||
'unshift',
|
||
'splice',
|
||
'sort',
|
||
'reverse'
|
||
]
|
||
.forEach(function (method) {
|
||
// cache original method
|
||
var original = arrayProto[method];
|
||
def(arrayMethods, method, function mutator () {
|
||
var arguments$1 = arguments;
|
||
|
||
// avoid leaking arguments:
|
||
// http://jsperf.com/closure-with-arguments
|
||
var i = arguments.length;
|
||
var args = new Array(i);
|
||
while (i--) {
|
||
args[i] = arguments$1[i];
|
||
}
|
||
var result = original.apply(this, args);
|
||
var ob = this.__ob__;
|
||
var inserted;
|
||
switch (method) {
|
||
case 'push':
|
||
inserted = args;
|
||
break
|
||
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);
|
||
|
||
/**
|
||
* By default, when a reactive property is set, the new value is
|
||
* also converted to become reactive. However when passing down props,
|
||
* we don't want to force conversion because the value may be a nested value
|
||
* under a frozen data structure. Converting it would defeat the optimization.
|
||
*/
|
||
var observerState = {
|
||
shouldConvert: true,
|
||
isSettingProps: false
|
||
};
|
||
|
||
/**
|
||
* Observer class that are attached to each observed
|
||
* object. Once attached, the observer converts target
|
||
* object's property keys into getter/setters that
|
||
* collect dependencies and dispatches 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$$1(obj, keys[i], 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) {
|
||
/* 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)) {
|
||
return
|
||
}
|
||
var ob;
|
||
if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
|
||
ob = value.__ob__;
|
||
} else if (
|
||
observerState.shouldConvert &&
|
||
!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$$1 (
|
||
obj,
|
||
key,
|
||
val,
|
||
customSetter
|
||
) {
|
||
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;
|
||
var setter = property && property.set;
|
||
|
||
var childOb = 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 (process.env.NODE_ENV !== 'production' && customSetter) {
|
||
customSetter();
|
||
}
|
||
if (setter) {
|
||
setter.call(obj, newVal);
|
||
} else {
|
||
val = newVal;
|
||
}
|
||
childOb = 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 (obj, key, val) {
|
||
if (Array.isArray(obj)) {
|
||
obj.length = Math.max(obj.length, key);
|
||
obj.splice(key, 1, val);
|
||
return val
|
||
}
|
||
if (hasOwn(obj, key)) {
|
||
obj[key] = val;
|
||
return
|
||
}
|
||
var ob = obj.__ob__;
|
||
if (obj._isVue || (ob && ob.vmCount)) {
|
||
process.env.NODE_ENV !== 'production' && warn(
|
||
'Avoid adding reactive properties to a Vue instance or its root $data ' +
|
||
'at runtime - declare it upfront in the data option.'
|
||
);
|
||
return
|
||
}
|
||
if (!ob) {
|
||
obj[key] = val;
|
||
return
|
||
}
|
||
defineReactive$$1(ob.value, key, val);
|
||
ob.dep.notify();
|
||
return val
|
||
}
|
||
|
||
/**
|
||
* Delete a property and trigger change if necessary.
|
||
*/
|
||
function del (obj, key) {
|
||
if (Array.isArray(obj)) {
|
||
obj.splice(key, 1);
|
||
return
|
||
}
|
||
var ob = obj.__ob__;
|
||
if (obj._isVue || (ob && ob.vmCount)) {
|
||
process.env.NODE_ENV !== 'production' && warn(
|
||
'Avoid deleting properties on a Vue instance or its root $data ' +
|
||
'- just set it to null.'
|
||
);
|
||
return
|
||
}
|
||
if (!hasOwn(obj, key)) {
|
||
return
|
||
}
|
||
delete obj[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 (process.env.NODE_ENV !== 'production') {
|
||
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
|
||
*/
|
||
strats.data = function (
|
||
parentVal,
|
||
childVal,
|
||
vm
|
||
) {
|
||
if (!vm) {
|
||
// in a Vue.extend merge, both should be functions
|
||
if (!childVal) {
|
||
return parentVal
|
||
}
|
||
if (typeof childVal !== 'function') {
|
||
process.env.NODE_ENV !== 'production' && warn(
|
||
'The "data" option should be a function ' +
|
||
'that returns a per-instance value in component ' +
|
||
'definitions.',
|
||
vm
|
||
);
|
||
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(
|
||
childVal.call(this),
|
||
parentVal.call(this)
|
||
)
|
||
}
|
||
} else if (parentVal || childVal) {
|
||
return function mergedInstanceDataFn () {
|
||
// instance merge
|
||
var instanceData = typeof childVal === 'function'
|
||
? childVal.call(vm)
|
||
: childVal;
|
||
var defaultData = typeof parentVal === 'function'
|
||
? parentVal.call(vm)
|
||
: undefined;
|
||
if (instanceData) {
|
||
return mergeData(instanceData, defaultData)
|
||
} else {
|
||
return defaultData
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Hooks and props are merged as arrays.
|
||
*/
|
||
function mergeHook (
|
||
parentVal,
|
||
childVal
|
||
) {
|
||
return childVal
|
||
? parentVal
|
||
? parentVal.concat(childVal)
|
||
: Array.isArray(childVal)
|
||
? childVal
|
||
: [childVal]
|
||
: parentVal
|
||
}
|
||
|
||
config._lifecycleHooks.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) {
|
||
var res = Object.create(parentVal || null);
|
||
return childVal
|
||
? extend(res, childVal)
|
||
: res
|
||
}
|
||
|
||
config._assetTypes.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) {
|
||
/* istanbul ignore if */
|
||
if (!childVal) { return Object.create(parentVal || null) }
|
||
if (!parentVal) { return childVal }
|
||
var ret = {};
|
||
extend(ret, parentVal);
|
||
for (var key in childVal) {
|
||
var parent = ret[key];
|
||
var child = childVal[key];
|
||
if (parent && !Array.isArray(parent)) {
|
||
parent = [parent];
|
||
}
|
||
ret[key] = parent
|
||
? parent.concat(child)
|
||
: [child];
|
||
}
|
||
return ret
|
||
};
|
||
|
||
/**
|
||
* Other object hashes.
|
||
*/
|
||
strats.props =
|
||
strats.methods =
|
||
strats.computed = function (parentVal, childVal) {
|
||
if (!childVal) { return Object.create(parentVal || null) }
|
||
if (!parentVal) { return childVal }
|
||
var ret = Object.create(null);
|
||
extend(ret, parentVal);
|
||
extend(ret, childVal);
|
||
return ret
|
||
};
|
||
|
||
/**
|
||
* Default strategy.
|
||
*/
|
||
var defaultStrat = function (parentVal, childVal) {
|
||
return childVal === undefined
|
||
? parentVal
|
||
: childVal
|
||
};
|
||
|
||
/**
|
||
* Validate component names
|
||
*/
|
||
function checkComponents (options) {
|
||
for (var key in options.components) {
|
||
var lower = key.toLowerCase();
|
||
if (isBuiltInTag(lower) || config.isReservedTag(lower)) {
|
||
warn(
|
||
'Do not use built-in or reserved HTML elements as component ' +
|
||
'id: ' + key
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Ensure all props option syntax are normalized into the
|
||
* Object-based format.
|
||
*/
|
||
function normalizeProps (options) {
|
||
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 (process.env.NODE_ENV !== 'production') {
|
||
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 };
|
||
}
|
||
}
|
||
options.props = res;
|
||
}
|
||
|
||
/**
|
||
* 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 };
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Merge two option objects into a new one.
|
||
* Core utility used in both instantiation and inheritance.
|
||
*/
|
||
function mergeOptions (
|
||
parent,
|
||
child,
|
||
vm
|
||
) {
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
checkComponents(child);
|
||
}
|
||
normalizeProps(child);
|
||
normalizeDirectives(child);
|
||
var extendsFrom = child.extends;
|
||
if (extendsFrom) {
|
||
parent = typeof extendsFrom === 'function'
|
||
? mergeOptions(parent, extendsFrom.options, vm)
|
||
: mergeOptions(parent, extendsFrom, vm);
|
||
}
|
||
if (child.mixins) {
|
||
for (var i = 0, l = child.mixins.length; i < l; i++) {
|
||
var mixin = child.mixins[i];
|
||
if (mixin.prototype instanceof Vue$2) {
|
||
mixin = mixin.options;
|
||
}
|
||
parent = mergeOptions(parent, mixin, 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 (process.env.NODE_ENV !== '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];
|
||
// handle boolean props
|
||
if (isType(Boolean, prop.type)) {
|
||
if (absent && !hasOwn(prop, 'default')) {
|
||
value = false;
|
||
} else if (!isType(String, prop.type) && (value === '' || value === hyphenate(key))) {
|
||
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 prevShouldConvert = observerState.shouldConvert;
|
||
observerState.shouldConvert = true;
|
||
observe(value);
|
||
observerState.shouldConvert = prevShouldConvert;
|
||
}
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
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 (process.env.NODE_ENV !== '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 ' + Object.prototype.toString.call(value).slice(8, -1) + '.',
|
||
vm
|
||
);
|
||
return
|
||
}
|
||
var validator = prop.validator;
|
||
if (validator) {
|
||
if (!validator(value)) {
|
||
warn(
|
||
'Invalid prop: custom validator check failed for prop "' + name + '".',
|
||
vm
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Assert the type of a value
|
||
*/
|
||
function assertType (value, type) {
|
||
var valid;
|
||
var expectedType = getType(type);
|
||
if (expectedType === 'String') {
|
||
valid = typeof value === (expectedType = 'string');
|
||
} else if (expectedType === 'Number') {
|
||
valid = typeof value === (expectedType = 'number');
|
||
} else if (expectedType === 'Boolean') {
|
||
valid = typeof value === (expectedType = 'boolean');
|
||
} else if (expectedType === 'Function') {
|
||
valid = typeof value === (expectedType = 'function');
|
||
} 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 isType (type, fn) {
|
||
if (!Array.isArray(fn)) {
|
||
return getType(fn) === getType(type)
|
||
}
|
||
for (var i = 0, len = fn.length; i < len; i++) {
|
||
if (getType(fn[i]) === getType(type)) {
|
||
return true
|
||
}
|
||
}
|
||
/* istanbul ignore next */
|
||
return false
|
||
}
|
||
|
||
function handleError (err, vm, type) {
|
||
if (config.errorHandler) {
|
||
config.errorHandler.call(null, err, vm, type);
|
||
} else {
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
warn(("Error in " + type + ":"), vm);
|
||
}
|
||
/* istanbul ignore else */
|
||
if (inBrowser && typeof console !== 'undefined') {
|
||
console.error(err);
|
||
} else {
|
||
throw err
|
||
}
|
||
}
|
||
}
|
||
|
||
/* not type checking this file because flow doesn't play well with Proxy */
|
||
|
||
var initProxy;
|
||
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
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 to declare reactive data " +
|
||
"properties in the data option.",
|
||
target
|
||
);
|
||
};
|
||
|
||
var hasProxy =
|
||
typeof Proxy !== 'undefined' &&
|
||
Proxy.toString().match(/native code/);
|
||
|
||
if (hasProxy) {
|
||
var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta');
|
||
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 VNode = function VNode (
|
||
tag,
|
||
data,
|
||
children,
|
||
text,
|
||
elm,
|
||
context,
|
||
componentOptions
|
||
) {
|
||
this.tag = tag;
|
||
this.data = data;
|
||
this.children = children;
|
||
this.text = text;
|
||
this.elm = elm;
|
||
this.ns = undefined;
|
||
this.context = context;
|
||
this.functionalContext = 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;
|
||
};
|
||
|
||
var prototypeAccessors = { child: {} };
|
||
|
||
// 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 () {
|
||
var node = new VNode();
|
||
node.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
|
||
);
|
||
cloned.ns = vnode.ns;
|
||
cloned.isStatic = vnode.isStatic;
|
||
cloned.key = vnode.key;
|
||
cloned.isCloned = true;
|
||
return cloned
|
||
}
|
||
|
||
function cloneVNodes (vnodes) {
|
||
var res = new Array(vnodes.length);
|
||
for (var i = 0; i < vnodes.length; i++) {
|
||
res[i] = cloneVNode(vnodes[i]);
|
||
}
|
||
return res
|
||
}
|
||
|
||
/* */
|
||
|
||
var normalizeEvent = cached(function (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
|
||
}
|
||
});
|
||
|
||
function createFnInvoker (fns) {
|
||
function invoker () {
|
||
var arguments$1 = arguments;
|
||
|
||
var fns = invoker.fns;
|
||
if (Array.isArray(fns)) {
|
||
for (var i = 0; i < fns.length; i++) {
|
||
fns[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, cur, old, event;
|
||
for (name in on) {
|
||
cur = on[name];
|
||
old = oldOn[name];
|
||
event = normalizeEvent(name);
|
||
if (!cur) {
|
||
process.env.NODE_ENV !== 'production' && warn(
|
||
"Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
|
||
vm
|
||
);
|
||
} else if (!old) {
|
||
if (!cur.fns) {
|
||
cur = on[name] = createFnInvoker(cur);
|
||
}
|
||
add(event.name, cur, event.once, event.capture);
|
||
} else if (cur !== old) {
|
||
old.fns = cur;
|
||
on[name] = old;
|
||
}
|
||
}
|
||
for (name in oldOn) {
|
||
if (!on[name]) {
|
||
event = normalizeEvent(name);
|
||
remove$$1(event.name, oldOn[name], event.capture);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function mergeVNodeHook (def, hookKey, 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 (!oldHook) {
|
||
// no existing hook
|
||
invoker = createFnInvoker([wrappedHook]);
|
||
} else {
|
||
/* istanbul ignore if */
|
||
if (oldHook.fns && 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;
|
||
}
|
||
|
||
/* */
|
||
|
||
// 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 constrcuts 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 normalizeArrayChildren (children, nestedIndex) {
|
||
var res = [];
|
||
var i, c, last;
|
||
for (i = 0; i < children.length; i++) {
|
||
c = children[i];
|
||
if (c == null || typeof c === 'boolean') { continue }
|
||
last = res[res.length - 1];
|
||
// nested
|
||
if (Array.isArray(c)) {
|
||
res.push.apply(res, normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i)));
|
||
} else if (isPrimitive(c)) {
|
||
if (last && last.text) {
|
||
last.text += String(c);
|
||
} else if (c !== '') {
|
||
// convert primitive to vnode
|
||
res.push(createTextVNode(c));
|
||
}
|
||
} else {
|
||
if (c.text && last && last.text) {
|
||
res[res.length - 1] = createTextVNode(last.text + c.text);
|
||
} else {
|
||
// default key for nested array children (likely generated by v-for)
|
||
if (c.tag && c.key == null && nestedIndex != null) {
|
||
c.key = "__vlist" + nestedIndex + "_" + i + "__";
|
||
}
|
||
res.push(c);
|
||
}
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
/* */
|
||
|
||
function getFirstComponentChild (children) {
|
||
return children && children.filter(function (c) { return c && c.componentOptions; })[0]
|
||
}
|
||
|
||
/* */
|
||
|
||
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$$1) {
|
||
if (once$$1) {
|
||
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);
|
||
}
|
||
|
||
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 vm = this;
|
||
// all
|
||
if (!arguments.length) {
|
||
vm._events = Object.create(null);
|
||
return vm
|
||
}
|
||
// specific event
|
||
var cbs = vm._events[event];
|
||
if (!cbs) {
|
||
return vm
|
||
}
|
||
if (arguments.length === 1) {
|
||
vm._events[event] = null;
|
||
return vm
|
||
}
|
||
// specific handler
|
||
var cb;
|
||
var i = cbs.length;
|
||
while (i--) {
|
||
cb = cbs[i];
|
||
if (cb === fn || cb.fn === fn) {
|
||
cbs.splice(i, 1);
|
||
break
|
||
}
|
||
}
|
||
return vm
|
||
};
|
||
|
||
Vue.prototype.$emit = function (event) {
|
||
var vm = this;
|
||
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++) {
|
||
cbs[i].apply(vm, args);
|
||
}
|
||
}
|
||
return vm
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for resolving raw children VNodes into a slot object.
|
||
*/
|
||
function resolveSlots (
|
||
children,
|
||
context
|
||
) {
|
||
var slots = {};
|
||
if (!children) {
|
||
return slots
|
||
}
|
||
var defaultSlot = [];
|
||
var name, child;
|
||
for (var i = 0, l = children.length; i < l; i++) {
|
||
child = children[i];
|
||
// named slots should only be respected if the vnode was rendered in the
|
||
// same context.
|
||
if ((child.context === context || child.functionalContext === context) &&
|
||
child.data && (name = child.data.slot)) {
|
||
var slot = (slots[name] || (slots[name] = []));
|
||
if (child.tag === 'template') {
|
||
slot.push.apply(slot, child.children);
|
||
} else {
|
||
slot.push(child);
|
||
}
|
||
} else {
|
||
defaultSlot.push(child);
|
||
}
|
||
}
|
||
// ignore single whitespace
|
||
if (defaultSlot.length && !(
|
||
defaultSlot.length === 1 &&
|
||
(defaultSlot[0].text === ' ' || defaultSlot[0].isComment)
|
||
)) {
|
||
slots.default = defaultSlot;
|
||
}
|
||
return slots
|
||
}
|
||
|
||
function resolveScopedSlots (
|
||
fns
|
||
) {
|
||
var res = {};
|
||
for (var i = 0; i < fns.length; i++) {
|
||
res[fns[i][0]] = fns[i][1];
|
||
}
|
||
return res
|
||
}
|
||
|
||
/* */
|
||
|
||
var activeInstance = null;
|
||
|
||
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
|
||
);
|
||
} 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;
|
||
callHook(vm, 'destroyed');
|
||
// turn off all instance listeners.
|
||
vm.$off();
|
||
// remove __vue__ reference
|
||
if (vm.$el) {
|
||
vm.$el.__vue__ = null;
|
||
}
|
||
// invoke destroy hooks on current rendered tree
|
||
vm.__patch__(vm._vnode, null);
|
||
};
|
||
}
|
||
|
||
function mountComponent (
|
||
vm,
|
||
el,
|
||
hydrating
|
||
) {
|
||
vm.$el = el;
|
||
if (!vm.$options.render) {
|
||
vm.$options.render = createEmptyVNode;
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
/* istanbul ignore if */
|
||
if (vm.$options.template && vm.$options.template.charAt(0) !== '#') {
|
||
warn(
|
||
'You are using the runtime-only build of Vue where the template ' +
|
||
'option 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 (process.env.NODE_ENV !== 'production' && config.performance && perf) {
|
||
updateComponent = function () {
|
||
var name = vm._name;
|
||
var startTag = "start " + name;
|
||
var endTag = "end " + name;
|
||
perf.mark(startTag);
|
||
var vnode = vm._render();
|
||
perf.mark(endTag);
|
||
perf.measure((name + " render"), startTag, endTag);
|
||
perf.mark(startTag);
|
||
vm._update(vnode, hydrating);
|
||
perf.mark(endTag);
|
||
perf.measure((name + " patch"), startTag, endTag);
|
||
};
|
||
} else {
|
||
updateComponent = function () {
|
||
vm._update(vm._render(), hydrating);
|
||
};
|
||
}
|
||
|
||
vm._watcher = new Watcher(vm, updateComponent, noop);
|
||
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
|
||
) {
|
||
// 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 props
|
||
if (propsData && vm.$options.props) {
|
||
observerState.shouldConvert = false;
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
observerState.isSettingProps = true;
|
||
}
|
||
var props = vm._props;
|
||
var propKeys = vm.$options._propKeys || [];
|
||
for (var i = 0; i < propKeys.length; i++) {
|
||
var key = propKeys[i];
|
||
props[key] = validateProp(key, vm.$options.props, propsData, vm);
|
||
}
|
||
observerState.shouldConvert = true;
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
observerState.isSettingProps = false;
|
||
}
|
||
// keep a copy of raw propsData
|
||
vm.$options.propsData = propsData;
|
||
}
|
||
// update listeners
|
||
if (listeners) {
|
||
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();
|
||
}
|
||
}
|
||
|
||
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) {
|
||
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);
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
|
||
var queue = [];
|
||
var has = {};
|
||
var circular = {};
|
||
var waiting = false;
|
||
var flushing = false;
|
||
var index = 0;
|
||
|
||
/**
|
||
* Reset the scheduler's state.
|
||
*/
|
||
function resetSchedulerState () {
|
||
queue.length = 0;
|
||
has = {};
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
circular = {};
|
||
}
|
||
waiting = flushing = false;
|
||
}
|
||
|
||
/**
|
||
* Flush both queues and run the watchers.
|
||
*/
|
||
function flushSchedulerQueue () {
|
||
flushing = true;
|
||
var watcher, id, vm;
|
||
|
||
// 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 (process.env.NODE_ENV !== 'production' && has[id] != null) {
|
||
circular[id] = (circular[id] || 0) + 1;
|
||
if (circular[id] > config._maxUpdateCount) {
|
||
warn(
|
||
'You may have an infinite update loop ' + (
|
||
watcher.user
|
||
? ("in watcher with expression \"" + (watcher.expression) + "\"")
|
||
: "in a component render function."
|
||
),
|
||
watcher.vm
|
||
);
|
||
break
|
||
}
|
||
}
|
||
}
|
||
|
||
// call updated hooks
|
||
index = queue.length;
|
||
while (index--) {
|
||
watcher = queue[index];
|
||
vm = watcher.vm;
|
||
if (vm._watcher === watcher && vm._isMounted) {
|
||
callHook(vm, 'updated');
|
||
}
|
||
}
|
||
|
||
// devtool hook
|
||
/* istanbul ignore if */
|
||
if (devtools && config.devtools) {
|
||
devtools.emit('flush');
|
||
}
|
||
|
||
resetSchedulerState();
|
||
}
|
||
|
||
/**
|
||
* 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 >= 0 && queue[i].id > watcher.id) {
|
||
i--;
|
||
}
|
||
queue.splice(Math.max(i, index) + 1, 0, watcher);
|
||
}
|
||
// queue the flush
|
||
if (!waiting) {
|
||
waiting = true;
|
||
nextTick(flushSchedulerQueue);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var uid$2 = 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
|
||
) {
|
||
this.vm = vm;
|
||
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$2; // 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 = process.env.NODE_ENV !== 'production'
|
||
? expOrFn.toString()
|
||
: '';
|
||
// parse expression for getter
|
||
if (typeof expOrFn === 'function') {
|
||
this.getter = expOrFn;
|
||
} else {
|
||
this.getter = parsePath(expOrFn);
|
||
if (!this.getter) {
|
||
this.getter = function () {};
|
||
process.env.NODE_ENV !== '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;
|
||
if (this.user) {
|
||
try {
|
||
value = this.getter.call(vm, vm);
|
||
} catch (e) {
|
||
handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
|
||
}
|
||
} else {
|
||
value = this.getter.call(vm, vm);
|
||
}
|
||
// "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;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Recursively traverse an object to evoke all converted
|
||
* getters, so that every nested property inside the object
|
||
* is collected as a "deep" dependency.
|
||
*/
|
||
var seenObjects = new _Set();
|
||
function traverse (val) {
|
||
seenObjects.clear();
|
||
_traverse(val, seenObjects);
|
||
}
|
||
|
||
function _traverse (val, seen) {
|
||
var i, keys;
|
||
var isA = Array.isArray(val);
|
||
if ((!isA && !isObject(val)) || !Object.isExtensible(val)) {
|
||
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 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) { initWatch(vm, opts.watch); }
|
||
}
|
||
|
||
var isReservedProp = { key: 1, ref: 1, slot: 1 };
|
||
|
||
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
|
||
observerState.shouldConvert = isRoot;
|
||
var loop = function ( key ) {
|
||
keys.push(key);
|
||
var value = validateProp(key, propsOptions, propsData, vm);
|
||
/* istanbul ignore else */
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
if (isReservedProp[key]) {
|
||
warn(
|
||
("\"" + key + "\" is a reserved attribute and cannot be used as component prop."),
|
||
vm
|
||
);
|
||
}
|
||
defineReactive$$1(props, key, value, function () {
|
||
if (vm.$parent && !observerState.isSettingProps) {
|
||
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$$1(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 );
|
||
observerState.shouldConvert = true;
|
||
}
|
||
|
||
function initData (vm) {
|
||
var data = vm.$options.data;
|
||
data = vm._data = typeof data === 'function'
|
||
? data.call(vm)
|
||
: data || {};
|
||
if (!isPlainObject(data)) {
|
||
data = {};
|
||
process.env.NODE_ENV !== '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 i = keys.length;
|
||
while (i--) {
|
||
if (props && hasOwn(props, keys[i])) {
|
||
process.env.NODE_ENV !== 'production' && warn(
|
||
"The data property \"" + (keys[i]) + "\" is already declared as a prop. " +
|
||
"Use prop default value instead.",
|
||
vm
|
||
);
|
||
} else if (!isReserved(keys[i])) {
|
||
proxy(vm, "_data", keys[i]);
|
||
}
|
||
}
|
||
// observe data
|
||
observe(data, true /* asRootData */);
|
||
}
|
||
|
||
var computedWatcherOptions = { lazy: true };
|
||
|
||
function initComputed (vm, computed) {
|
||
var watchers = vm._computedWatchers = Object.create(null);
|
||
|
||
for (var key in computed) {
|
||
var userDef = computed[key];
|
||
var getter = typeof userDef === 'function' ? userDef : userDef.get;
|
||
// create internal watcher for the computed property.
|
||
watchers[key] = new Watcher(vm, getter, 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);
|
||
}
|
||
}
|
||
}
|
||
|
||
function defineComputed (target, key, userDef) {
|
||
if (typeof userDef === 'function') {
|
||
sharedPropertyDefinition.get = createComputedGetter(key);
|
||
sharedPropertyDefinition.set = noop;
|
||
} else {
|
||
sharedPropertyDefinition.get = userDef.get
|
||
? userDef.cache !== false
|
||
? createComputedGetter(key)
|
||
: userDef.get
|
||
: noop;
|
||
sharedPropertyDefinition.set = userDef.set
|
||
? userDef.set
|
||
: noop;
|
||
}
|
||
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) {
|
||
vm[key] = methods[key] == null ? noop : bind(methods[key], vm);
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
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
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
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, key, handler) {
|
||
var options;
|
||
if (isPlainObject(handler)) {
|
||
options = handler;
|
||
handler = handler.handler;
|
||
}
|
||
if (typeof handler === 'string') {
|
||
handler = vm[handler];
|
||
}
|
||
vm.$watch(key, 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 (process.env.NODE_ENV !== 'production') {
|
||
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;
|
||
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();
|
||
}
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
var hooks = { init: init, prepatch: prepatch, insert: insert, destroy: destroy };
|
||
var hooksToMerge = Object.keys(hooks);
|
||
|
||
function createComponent (
|
||
Ctor,
|
||
data,
|
||
context,
|
||
children,
|
||
tag
|
||
) {
|
||
if (!Ctor) {
|
||
return
|
||
}
|
||
|
||
var baseCtor = context.$options._base;
|
||
if (isObject(Ctor)) {
|
||
Ctor = baseCtor.extend(Ctor);
|
||
}
|
||
|
||
if (typeof Ctor !== 'function') {
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
warn(("Invalid Component definition: " + (String(Ctor))), context);
|
||
}
|
||
return
|
||
}
|
||
|
||
// async component
|
||
if (!Ctor.cid) {
|
||
if (Ctor.resolved) {
|
||
Ctor = Ctor.resolved;
|
||
} else {
|
||
Ctor = resolveAsyncComponent(Ctor, baseCtor, function () {
|
||
// it's ok to queue this on every render because
|
||
// $forceUpdate is buffered by the scheduler.
|
||
context.$forceUpdate();
|
||
});
|
||
if (!Ctor) {
|
||
// return nothing if this is indeed an async component
|
||
// wait for the callback to trigger parent update.
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
// resolve constructor options in case global mixins are applied after
|
||
// component constructor creation
|
||
resolveConstructorOptions(Ctor);
|
||
|
||
data = data || {};
|
||
|
||
// transform component v-model data into props & events
|
||
if (data.model) {
|
||
transformModel(Ctor.options, data);
|
||
}
|
||
|
||
// extract props
|
||
var propsData = extractProps(data, Ctor);
|
||
|
||
// functional component
|
||
if (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
|
||
data.on = data.nativeOn;
|
||
|
||
if (Ctor.options.abstract) {
|
||
// abstract components do not keep anything
|
||
// other than props & listeners
|
||
data = {};
|
||
}
|
||
|
||
// merge component management hooks onto the placeholder node
|
||
mergeHooks(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 }
|
||
);
|
||
return vnode
|
||
}
|
||
|
||
function createFunctionalComponent (
|
||
Ctor,
|
||
propsData,
|
||
data,
|
||
context,
|
||
children
|
||
) {
|
||
var props = {};
|
||
var propOptions = Ctor.options.props;
|
||
if (propOptions) {
|
||
for (var key in propOptions) {
|
||
props[key] = validateProp(key, propOptions, propsData);
|
||
}
|
||
}
|
||
// ensure the createElement function in functional components
|
||
// gets a unique context - this is necessary for correct named slot check
|
||
var _context = Object.create(context);
|
||
var h = function (a, b, c, d) { return createElement(_context, a, b, c, d, true); };
|
||
var vnode = Ctor.options.render.call(null, h, {
|
||
props: props,
|
||
data: data,
|
||
parent: context,
|
||
children: children,
|
||
slots: function () { return resolveSlots(children, context); }
|
||
});
|
||
if (vnode instanceof VNode) {
|
||
vnode.functionalContext = context;
|
||
if (data.slot) {
|
||
(vnode.data || (vnode.data = {})).slot = data.slot;
|
||
}
|
||
}
|
||
return vnode
|
||
}
|
||
|
||
function createComponentInstanceForVnode (
|
||
vnode, // we know it's MountedComponentVNode but flow doesn't
|
||
parent, // activeInstance in lifecycle state
|
||
parentElm,
|
||
refElm
|
||
) {
|
||
var vnodeComponentOptions = vnode.componentOptions;
|
||
var options = {
|
||
_isComponent: true,
|
||
parent: parent,
|
||
propsData: vnodeComponentOptions.propsData,
|
||
_componentTag: vnodeComponentOptions.tag,
|
||
_parentVnode: vnode,
|
||
_parentListeners: vnodeComponentOptions.listeners,
|
||
_renderChildren: vnodeComponentOptions.children,
|
||
_parentElm: parentElm || null,
|
||
_refElm: refElm || null
|
||
};
|
||
// check inline-template render functions
|
||
var inlineTemplate = vnode.data.inlineTemplate;
|
||
if (inlineTemplate) {
|
||
options.render = inlineTemplate.render;
|
||
options.staticRenderFns = inlineTemplate.staticRenderFns;
|
||
}
|
||
return new vnodeComponentOptions.Ctor(options)
|
||
}
|
||
|
||
function init (
|
||
vnode,
|
||
hydrating,
|
||
parentElm,
|
||
refElm
|
||
) {
|
||
if (!vnode.componentInstance || vnode.componentInstance._isDestroyed) {
|
||
var child = vnode.componentInstance = createComponentInstanceForVnode(
|
||
vnode,
|
||
activeInstance,
|
||
parentElm,
|
||
refElm
|
||
);
|
||
child.$mount(hydrating ? vnode.elm : undefined, hydrating);
|
||
} else if (vnode.data.keepAlive) {
|
||
// kept-alive components, treat as a patch
|
||
var mountedNode = vnode; // work around flow
|
||
prepatch(mountedNode, mountedNode);
|
||
}
|
||
}
|
||
|
||
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
|
||
);
|
||
}
|
||
|
||
function insert (vnode) {
|
||
if (!vnode.componentInstance._isMounted) {
|
||
vnode.componentInstance._isMounted = true;
|
||
callHook(vnode.componentInstance, 'mounted');
|
||
}
|
||
if (vnode.data.keepAlive) {
|
||
activateChildComponent(vnode.componentInstance, true /* direct */);
|
||
}
|
||
}
|
||
|
||
function destroy (vnode) {
|
||
if (!vnode.componentInstance._isDestroyed) {
|
||
if (!vnode.data.keepAlive) {
|
||
vnode.componentInstance.$destroy();
|
||
} else {
|
||
deactivateChildComponent(vnode.componentInstance, true /* direct */);
|
||
}
|
||
}
|
||
}
|
||
|
||
function resolveAsyncComponent (
|
||
factory,
|
||
baseCtor,
|
||
cb
|
||
) {
|
||
if (factory.requested) {
|
||
// pool callbacks
|
||
factory.pendingCallbacks.push(cb);
|
||
} else {
|
||
factory.requested = true;
|
||
var cbs = factory.pendingCallbacks = [cb];
|
||
var sync = true;
|
||
|
||
var resolve = function (res) {
|
||
if (isObject(res)) {
|
||
res = baseCtor.extend(res);
|
||
}
|
||
// cache resolved
|
||
factory.resolved = res;
|
||
// invoke callbacks only if this is not a synchronous resolve
|
||
// (async resolves are shimmed as synchronous during SSR)
|
||
if (!sync) {
|
||
for (var i = 0, l = cbs.length; i < l; i++) {
|
||
cbs[i](res);
|
||
}
|
||
}
|
||
};
|
||
|
||
var reject = function (reason) {
|
||
process.env.NODE_ENV !== 'production' && warn(
|
||
"Failed to resolve async component: " + (String(factory)) +
|
||
(reason ? ("\nReason: " + reason) : '')
|
||
);
|
||
};
|
||
|
||
var res = factory(resolve, reject);
|
||
|
||
// handle promise
|
||
if (res && typeof res.then === 'function' && !factory.resolved) {
|
||
res.then(resolve, reject);
|
||
}
|
||
|
||
sync = false;
|
||
// return in case resolved synchronously
|
||
return factory.resolved
|
||
}
|
||
}
|
||
|
||
function extractProps (data, Ctor) {
|
||
// we are only extracting raw values here.
|
||
// validation and default values are handled in the child
|
||
// component itself.
|
||
var propOptions = Ctor.options.props;
|
||
if (!propOptions) {
|
||
return
|
||
}
|
||
var res = {};
|
||
var attrs = data.attrs;
|
||
var props = data.props;
|
||
var domProps = data.domProps;
|
||
if (attrs || props || domProps) {
|
||
for (var key in propOptions) {
|
||
var altKey = hyphenate(key);
|
||
checkProp(res, props, key, altKey, true) ||
|
||
checkProp(res, attrs, key, altKey) ||
|
||
checkProp(res, domProps, key, altKey);
|
||
}
|
||
}
|
||
return res
|
||
}
|
||
|
||
function checkProp (
|
||
res,
|
||
hash,
|
||
key,
|
||
altKey,
|
||
preserve
|
||
) {
|
||
if (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
|
||
}
|
||
|
||
function mergeHooks (data) {
|
||
if (!data.hook) {
|
||
data.hook = {};
|
||
}
|
||
for (var i = 0; i < hooksToMerge.length; i++) {
|
||
var key = hooksToMerge[i];
|
||
var fromParent = data.hook[key];
|
||
var ours = hooks[key];
|
||
data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;
|
||
}
|
||
}
|
||
|
||
function mergeHook$1 (one, two) {
|
||
return function (a, b, c, d) {
|
||
one(a, b, c, d);
|
||
two(a, b, c, d);
|
||
}
|
||
}
|
||
|
||
// 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 (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 (alwaysNormalize) { normalizationType = ALWAYS_NORMALIZE; }
|
||
return _createElement(context, tag, data, children, normalizationType)
|
||
}
|
||
|
||
function _createElement (
|
||
context,
|
||
tag,
|
||
data,
|
||
children,
|
||
normalizationType
|
||
) {
|
||
if (data && data.__ob__) {
|
||
process.env.NODE_ENV !== '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()
|
||
}
|
||
if (!tag) {
|
||
// in case of component :is set to falsy value
|
||
return createEmptyVNode()
|
||
}
|
||
// 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 = config.getTagNamespace(tag);
|
||
if (config.isReservedTag(tag)) {
|
||
// platform built-in elements
|
||
vnode = new VNode(
|
||
config.parsePlatformTagName(tag), data, children,
|
||
undefined, undefined, context
|
||
);
|
||
} else if ((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 (vnode) {
|
||
if (ns) { applyNS(vnode, ns); }
|
||
return vnode
|
||
} else {
|
||
return createEmptyVNode()
|
||
}
|
||
}
|
||
|
||
function applyNS (vnode, ns) {
|
||
vnode.ns = ns;
|
||
if (vnode.tag === 'foreignObject') {
|
||
// use default namespace inside foreignObject
|
||
return
|
||
}
|
||
if (vnode.children) {
|
||
for (var i = 0, l = vnode.children.length; i < l; i++) {
|
||
var child = vnode.children[i];
|
||
if (child.tag && !child.ns) {
|
||
applyNS(child, ns);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
}
|
||
return ret
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for rendering <slot>
|
||
*/
|
||
function renderSlot (
|
||
name,
|
||
fallback,
|
||
props,
|
||
bindObject
|
||
) {
|
||
var scopedSlotFn = this.$scopedSlots[name];
|
||
if (scopedSlotFn) { // scoped slot
|
||
props = props || {};
|
||
if (bindObject) {
|
||
extend(props, bindObject);
|
||
}
|
||
return scopedSlotFn(props) || fallback
|
||
} else {
|
||
var slotNodes = this.$slots[name];
|
||
// warn duplicate slot usage
|
||
if (slotNodes && process.env.NODE_ENV !== '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;
|
||
}
|
||
return slotNodes || fallback
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for resolving filters
|
||
*/
|
||
function resolveFilter (id) {
|
||
return resolveAsset(this.$options, 'filters', id, true) || identity
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for checking keyCodes from config.
|
||
*/
|
||
function checkKeyCodes (
|
||
eventKeyCode,
|
||
key,
|
||
builtInAlias
|
||
) {
|
||
var keyCodes = config.keyCodes[key] || builtInAlias;
|
||
if (Array.isArray(keyCodes)) {
|
||
return keyCodes.indexOf(eventKeyCode) === -1
|
||
} else {
|
||
return keyCodes !== eventKeyCode
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for merging v-bind="object" into a VNode's data.
|
||
*/
|
||
function bindObjectProps (
|
||
data,
|
||
tag,
|
||
value,
|
||
asProp
|
||
) {
|
||
if (value) {
|
||
if (!isObject(value)) {
|
||
process.env.NODE_ENV !== 'production' && warn(
|
||
'v-bind without argument expects an Object or Array value',
|
||
this
|
||
);
|
||
} else {
|
||
if (Array.isArray(value)) {
|
||
value = toObject(value);
|
||
}
|
||
for (var key in value) {
|
||
if (key === 'class' || key === 'style') {
|
||
data[key] = value[key];
|
||
} else {
|
||
var type = data.attrs && data.attrs.type;
|
||
var hash = asProp || config.mustUseProp(tag, type, key)
|
||
? data.domProps || (data.domProps = {})
|
||
: data.attrs || (data.attrs = {});
|
||
hash[key] = value[key];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return data
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Runtime helper for rendering static trees.
|
||
*/
|
||
function renderStatic (
|
||
index,
|
||
isInFor
|
||
) {
|
||
var tree = this._staticTrees[index];
|
||
// if has already-rendered static tree and not inside v-for,
|
||
// we can reuse the same tree by doing a shallow clone.
|
||
if (tree && !isInFor) {
|
||
return Array.isArray(tree)
|
||
? cloneVNodes(tree)
|
||
: cloneVNode(tree)
|
||
}
|
||
// otherwise, render a fresh tree.
|
||
tree = this._staticTrees[index] =
|
||
this.$options.staticRenderFns[index].call(this._renderProxy);
|
||
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 initRender (vm) {
|
||
vm.$vnode = null; // the placeholder node in parent tree
|
||
vm._vnode = null; // the root of the child tree
|
||
vm._staticTrees = null;
|
||
var parentVnode = vm.$options._parentVnode;
|
||
var renderContext = parentVnode && parentVnode.context;
|
||
vm.$slots = resolveSlots(vm.$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); };
|
||
}
|
||
|
||
function renderMixin (Vue) {
|
||
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 staticRenderFns = ref.staticRenderFns;
|
||
var _parentVnode = ref._parentVnode;
|
||
|
||
if (vm._isMounted) {
|
||
// clone slot nodes on re-renders
|
||
for (var key in vm.$slots) {
|
||
vm.$slots[key] = cloneVNodes(vm.$slots[key]);
|
||
}
|
||
}
|
||
|
||
vm.$scopedSlots = (_parentVnode && _parentVnode.data.scopedSlots) || emptyObject;
|
||
|
||
if (staticRenderFns && !vm._staticTrees) {
|
||
vm._staticTrees = [];
|
||
}
|
||
// 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 function");
|
||
// return error render result,
|
||
// or previous vnode to prevent render error causing blank component
|
||
/* istanbul ignore else */
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
vnode = vm.$options.renderError
|
||
? vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e)
|
||
: vm._vnode;
|
||
} else {
|
||
vnode = vm._vnode;
|
||
}
|
||
}
|
||
// return empty vnode in case the render function errored out
|
||
if (!(vnode instanceof VNode)) {
|
||
if (process.env.NODE_ENV !== '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
|
||
};
|
||
|
||
// internal render helpers.
|
||
// these are exposed on the instance prototype to reduce generated render
|
||
// code size.
|
||
Vue.prototype._o = markOnce;
|
||
Vue.prototype._n = toNumber;
|
||
Vue.prototype._s = _toString;
|
||
Vue.prototype._l = renderList;
|
||
Vue.prototype._t = renderSlot;
|
||
Vue.prototype._q = looseEqual;
|
||
Vue.prototype._i = looseIndexOf;
|
||
Vue.prototype._m = renderStatic;
|
||
Vue.prototype._f = resolveFilter;
|
||
Vue.prototype._k = checkKeyCodes;
|
||
Vue.prototype._b = bindObjectProps;
|
||
Vue.prototype._v = createTextVNode;
|
||
Vue.prototype._e = createEmptyVNode;
|
||
Vue.prototype._u = resolveScopedSlots;
|
||
}
|
||
|
||
/* */
|
||
|
||
function initInjections (vm) {
|
||
var provide = vm.$options.provide;
|
||
var inject = vm.$options.inject;
|
||
if (provide) {
|
||
vm._provided = typeof provide === 'function'
|
||
? provide.call(vm)
|
||
: provide;
|
||
}
|
||
if (inject) {
|
||
// inject is :any because flow is not smart enough to figure out cached
|
||
// isArray here
|
||
var isArray = Array.isArray(inject);
|
||
var keys = isArray
|
||
? inject
|
||
: hasSymbol
|
||
? Reflect.ownKeys(inject)
|
||
: Object.keys(inject);
|
||
|
||
for (var i = 0; i < keys.length; i++) {
|
||
var key = keys[i];
|
||
var provideKey = isArray ? key : inject[key];
|
||
var source = vm;
|
||
while (source) {
|
||
if (source._provided && source._provided[provideKey]) {
|
||
vm[key] = source._provided[provideKey];
|
||
break
|
||
}
|
||
source = source.$parent;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
var uid = 0;
|
||
|
||
function initMixin (Vue) {
|
||
Vue.prototype._init = function (options) {
|
||
/* istanbul ignore if */
|
||
if (process.env.NODE_ENV !== 'production' && config.performance && perf) {
|
||
perf.mark('init');
|
||
}
|
||
|
||
var vm = this;
|
||
// a uid
|
||
vm._uid = uid++;
|
||
// 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 (process.env.NODE_ENV !== 'production') {
|
||
initProxy(vm);
|
||
} else {
|
||
vm._renderProxy = vm;
|
||
}
|
||
// expose real self
|
||
vm._self = vm;
|
||
initLifecycle(vm);
|
||
initEvents(vm);
|
||
initRender(vm);
|
||
callHook(vm, 'beforeCreate');
|
||
initState(vm);
|
||
initInjections(vm);
|
||
callHook(vm, 'created');
|
||
|
||
/* istanbul ignore if */
|
||
if (process.env.NODE_ENV !== 'production' && config.performance && perf) {
|
||
vm._name = formatComponentName(vm, false);
|
||
perf.mark('init end');
|
||
perf.measure(((vm._name) + " init"), 'init', 'init end');
|
||
}
|
||
|
||
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.
|
||
opts.parent = options.parent;
|
||
opts.propsData = options.propsData;
|
||
opts._parentVnode = options._parentVnode;
|
||
opts._parentListeners = options._parentListeners;
|
||
opts._renderChildren = options._renderChildren;
|
||
opts._componentTag = options._componentTag;
|
||
opts._parentElm = options._parentElm;
|
||
opts._refElm = options._refElm;
|
||
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 sealed = Ctor.sealedOptions;
|
||
for (var key in latest) {
|
||
if (latest[key] !== sealed[key]) {
|
||
if (!modified) { modified = {}; }
|
||
modified[key] = dedupe(latest[key], sealed[key]);
|
||
}
|
||
}
|
||
return modified
|
||
}
|
||
|
||
function dedupe (latest, 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];
|
||
for (var i = 0; i < latest.length; i++) {
|
||
if (sealed.indexOf(latest[i]) < 0) {
|
||
res.push(latest[i]);
|
||
}
|
||
}
|
||
return res
|
||
} else {
|
||
return latest
|
||
}
|
||
}
|
||
|
||
function Vue$2 (options) {
|
||
if (process.env.NODE_ENV !== 'production' &&
|
||
!(this instanceof Vue$2)) {
|
||
warn('Vue is a constructor and should be called with the `new` keyword');
|
||
}
|
||
this._init(options);
|
||
}
|
||
|
||
initMixin(Vue$2);
|
||
stateMixin(Vue$2);
|
||
eventsMixin(Vue$2);
|
||
lifecycleMixin(Vue$2);
|
||
renderMixin(Vue$2);
|
||
|
||
/* */
|
||
|
||
function initUse (Vue) {
|
||
Vue.use = function (plugin) {
|
||
/* istanbul ignore if */
|
||
if (plugin.installed) {
|
||
return
|
||
}
|
||
// 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);
|
||
}
|
||
plugin.installed = true;
|
||
return this
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
function initMixin$1 (Vue) {
|
||
Vue.mixin = function (mixin) {
|
||
this.options = mergeOptions(this.options, mixin);
|
||
};
|
||
}
|
||
|
||
/* */
|
||
|
||
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 (process.env.NODE_ENV !== 'production') {
|
||
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.'
|
||
);
|
||
}
|
||
}
|
||
|
||
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.
|
||
config._assetTypes.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.
|
||
*/
|
||
config._assetTypes.forEach(function (type) {
|
||
Vue[type] = function (
|
||
id,
|
||
definition
|
||
) {
|
||
if (!definition) {
|
||
return this.options[type + 's'][id]
|
||
} else {
|
||
/* istanbul ignore if */
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
if (type === 'component' && config.isReservedTag(id)) {
|
||
warn(
|
||
'Do not use built-in or reserved HTML elements as component ' +
|
||
'id: ' + 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
|
||
}
|
||
};
|
||
});
|
||
}
|
||
|
||
/* */
|
||
|
||
var patternTypes = [String, RegExp];
|
||
|
||
function getComponentName (opts) {
|
||
return opts && (opts.Ctor.options.name || opts.tag)
|
||
}
|
||
|
||
function matches (pattern, name) {
|
||
if (typeof pattern === 'string') {
|
||
return pattern.split(',').indexOf(name) > -1
|
||
} else if (pattern instanceof RegExp) {
|
||
return pattern.test(name)
|
||
}
|
||
/* istanbul ignore next */
|
||
return false
|
||
}
|
||
|
||
function pruneCache (cache, filter) {
|
||
for (var key in cache) {
|
||
var cachedNode = cache[key];
|
||
if (cachedNode) {
|
||
var name = getComponentName(cachedNode.componentOptions);
|
||
if (name && !filter(name)) {
|
||
pruneCacheEntry(cachedNode);
|
||
cache[key] = null;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function pruneCacheEntry (vnode) {
|
||
if (vnode) {
|
||
if (!vnode.componentInstance._inactive) {
|
||
callHook(vnode.componentInstance, 'deactivated');
|
||
}
|
||
vnode.componentInstance.$destroy();
|
||
}
|
||
}
|
||
|
||
var KeepAlive = {
|
||
name: 'keep-alive',
|
||
abstract: true,
|
||
|
||
props: {
|
||
include: patternTypes,
|
||
exclude: patternTypes
|
||
},
|
||
|
||
created: function created () {
|
||
this.cache = Object.create(null);
|
||
},
|
||
|
||
destroyed: function destroyed () {
|
||
var this$1 = this;
|
||
|
||
for (var key in this$1.cache) {
|
||
pruneCacheEntry(this$1.cache[key]);
|
||
}
|
||
},
|
||
|
||
watch: {
|
||
include: function include (val) {
|
||
pruneCache(this.cache, function (name) { return matches(val, name); });
|
||
},
|
||
exclude: function exclude (val) {
|
||
pruneCache(this.cache, function (name) { return !matches(val, name); });
|
||
}
|
||
},
|
||
|
||
render: function render () {
|
||
var vnode = getFirstComponentChild(this.$slots.default);
|
||
var componentOptions = vnode && vnode.componentOptions;
|
||
if (componentOptions) {
|
||
// check pattern
|
||
var name = getComponentName(componentOptions);
|
||
if (name && (
|
||
(this.include && !matches(this.include, name)) ||
|
||
(this.exclude && matches(this.exclude, name))
|
||
)) {
|
||
return vnode
|
||
}
|
||
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 (this.cache[key]) {
|
||
vnode.componentInstance = this.cache[key].componentInstance;
|
||
} else {
|
||
this.cache[key] = vnode;
|
||
}
|
||
vnode.data.keepAlive = true;
|
||
}
|
||
return vnode
|
||
}
|
||
};
|
||
|
||
var builtInComponents = {
|
||
KeepAlive: KeepAlive
|
||
};
|
||
|
||
/* */
|
||
|
||
function initGlobalAPI (Vue) {
|
||
// config
|
||
var configDef = {};
|
||
configDef.get = function () { return config; };
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
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$$1
|
||
};
|
||
|
||
Vue.set = set;
|
||
Vue.delete = del;
|
||
Vue.nextTick = nextTick;
|
||
|
||
Vue.options = Object.create(null);
|
||
config._assetTypes.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$2);
|
||
|
||
Object.defineProperty(Vue$2.prototype, '$isServer', {
|
||
get: isServerRendering
|
||
});
|
||
|
||
Vue$2.version = '2.2.1';
|
||
|
||
/* */
|
||
|
||
// attributes that should be using props for binding
|
||
var acceptValue = makeMap('input,textarea,option,select');
|
||
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 (childNode.componentInstance) {
|
||
childNode = childNode.componentInstance._vnode;
|
||
if (childNode.data) {
|
||
data = mergeClassData(childNode.data, data);
|
||
}
|
||
}
|
||
while ((parentNode = parentNode.parent)) {
|
||
if (parentNode.data) {
|
||
data = mergeClassData(data, parentNode.data);
|
||
}
|
||
}
|
||
return genClassFromData(data)
|
||
}
|
||
|
||
function mergeClassData (child, parent) {
|
||
return {
|
||
staticClass: concat(child.staticClass, parent.staticClass),
|
||
class: child.class
|
||
? [child.class, parent.class]
|
||
: parent.class
|
||
}
|
||
}
|
||
|
||
function genClassFromData (data) {
|
||
var dynamicClass = data.class;
|
||
var staticClass = data.staticClass;
|
||
if (staticClass || dynamicClass) {
|
||
return concat(staticClass, stringifyClass(dynamicClass))
|
||
}
|
||
/* istanbul ignore next */
|
||
return ''
|
||
}
|
||
|
||
function concat (a, b) {
|
||
return a ? b ? (a + ' ' + b) : a : (b || '')
|
||
}
|
||
|
||
function stringifyClass (value) {
|
||
var res = '';
|
||
if (!value) {
|
||
return res
|
||
}
|
||
if (typeof value === 'string') {
|
||
return value
|
||
}
|
||
if (Array.isArray(value)) {
|
||
var stringified;
|
||
for (var i = 0, l = value.length; i < l; i++) {
|
||
if (value[i]) {
|
||
if ((stringified = stringifyClass(value[i]))) {
|
||
res += stringified + ' ';
|
||
}
|
||
}
|
||
}
|
||
return res.slice(0, -1)
|
||
}
|
||
if (isObject(value)) {
|
||
for (var key in value) {
|
||
if (value[key]) { res += key + ' '; }
|
||
}
|
||
return res.slice(0, -1)
|
||
}
|
||
/* istanbul ignore next */
|
||
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,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'
|
||
);
|
||
|
||
// 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 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()))
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/**
|
||
* 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) {
|
||
process.env.NODE_ENV !== '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 setAttribute (node, key, val) {
|
||
node.setAttribute(key, val);
|
||
}
|
||
|
||
|
||
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,
|
||
setAttribute: setAttribute
|
||
});
|
||
|
||
/* */
|
||
|
||
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 (!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].indexOf(ref) < 0) {
|
||
refs[key].push(ref);
|
||
} else {
|
||
refs[key] = [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$1 = ['create', 'activate', 'update', 'remove', 'destroy'];
|
||
|
||
function isUndef (s) {
|
||
return s == null
|
||
}
|
||
|
||
function isDef (s) {
|
||
return s != null
|
||
}
|
||
|
||
function sameVnode (vnode1, vnode2) {
|
||
return (
|
||
vnode1.key === vnode2.key &&
|
||
vnode1.tag === vnode2.tag &&
|
||
vnode1.isComment === vnode2.isComment &&
|
||
!vnode1.data === !vnode2.data
|
||
)
|
||
}
|
||
|
||
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$1.length; ++i) {
|
||
cbs[hooks$1[i]] = [];
|
||
for (j = 0; j < modules.length; ++j) {
|
||
if (modules[j][hooks$1[i]] !== undefined) { cbs[hooks$1[i]].push(modules[j][hooks$1[i]]); }
|
||
}
|
||
}
|
||
|
||
function emptyNodeAt (elm) {
|
||
return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)
|
||
}
|
||
|
||
function createRmCb (childElm, listeners) {
|
||
function remove$$1 () {
|
||
if (--remove$$1.listeners === 0) {
|
||
removeNode(childElm);
|
||
}
|
||
}
|
||
remove$$1.listeners = listeners;
|
||
return remove$$1
|
||
}
|
||
|
||
function removeNode (el) {
|
||
var parent = nodeOps.parentNode(el);
|
||
// element may have already been removed due to v-html / v-text
|
||
if (parent) {
|
||
nodeOps.removeChild(parent, el);
|
||
}
|
||
}
|
||
|
||
var inPre = 0;
|
||
function createElm (vnode, insertedVnodeQueue, parentElm, refElm, nested) {
|
||
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 (process.env.NODE_ENV !== 'production') {
|
||
if (data && data.pre) {
|
||
inPre++;
|
||
}
|
||
if (
|
||
!inPre &&
|
||
!vnode.ns &&
|
||
!(config.ignoredElements.length && config.ignoredElements.indexOf(tag) > -1) &&
|
||
config.isUnknownElement(tag)
|
||
) {
|
||
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 (process.env.NODE_ENV !== 'production' && data && data.pre) {
|
||
inPre--;
|
||
}
|
||
} else if (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 (isReactivated) {
|
||
reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
|
||
}
|
||
return true
|
||
}
|
||
}
|
||
}
|
||
|
||
function initComponent (vnode, insertedVnodeQueue) {
|
||
if (vnode.data.pendingInsert) {
|
||
insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
|
||
}
|
||
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) {
|
||
if (parent) {
|
||
if (ref) {
|
||
nodeOps.insertBefore(parent, elm, ref);
|
||
} else {
|
||
nodeOps.appendChild(parent, elm);
|
||
}
|
||
}
|
||
}
|
||
|
||
function createChildren (vnode, children, insertedVnodeQueue) {
|
||
if (Array.isArray(children)) {
|
||
for (var i = 0; i < children.length; ++i) {
|
||
createElm(children[i], insertedVnodeQueue, vnode.elm, null, true);
|
||
}
|
||
} else if (isPrimitive(vnode.text)) {
|
||
nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(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 (i.create) { i.create(emptyNode, vnode); }
|
||
if (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;
|
||
var ancestor = vnode;
|
||
while (ancestor) {
|
||
if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {
|
||
nodeOps.setAttribute(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 &&
|
||
isDef(i = i.$options._scopeId)) {
|
||
nodeOps.setAttribute(vnode.elm, i, '');
|
||
}
|
||
}
|
||
|
||
function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
|
||
for (; startIdx <= endIdx; ++startIdx) {
|
||
createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm);
|
||
}
|
||
}
|
||
|
||
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 (rm || isDef(vnode.data)) {
|
||
var listeners = cbs.remove.length + 1;
|
||
if (!rm) {
|
||
// directly removing
|
||
rm = createRmCb(vnode.elm, listeners);
|
||
} else {
|
||
// we have a recursively passed down rm callback
|
||
// increase the listeners count
|
||
rm.listeners += 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, elmToMove, 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;
|
||
|
||
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] : null;
|
||
if (isUndef(idxInOld)) { // New element
|
||
createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);
|
||
newStartVnode = newCh[++newStartIdx];
|
||
} else {
|
||
elmToMove = oldCh[idxInOld];
|
||
/* istanbul ignore if */
|
||
if (process.env.NODE_ENV !== 'production' && !elmToMove) {
|
||
warn(
|
||
'It seems there are duplicate keys that is causing an update error. ' +
|
||
'Make sure each v-for item has a unique key.'
|
||
);
|
||
}
|
||
if (sameVnode(elmToMove, newStartVnode)) {
|
||
patchVnode(elmToMove, newStartVnode, insertedVnodeQueue);
|
||
oldCh[idxInOld] = undefined;
|
||
canMove && nodeOps.insertBefore(parentElm, newStartVnode.elm, oldStartVnode.elm);
|
||
newStartVnode = newCh[++newStartIdx];
|
||
} else {
|
||
// same key but different element. treat as new element
|
||
createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);
|
||
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 patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {
|
||
if (oldVnode === vnode) {
|
||
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 (vnode.isStatic &&
|
||
oldVnode.isStatic &&
|
||
vnode.key === oldVnode.key &&
|
||
(vnode.isCloned || vnode.isOnce)) {
|
||
vnode.elm = oldVnode.elm;
|
||
vnode.componentInstance = oldVnode.componentInstance;
|
||
return
|
||
}
|
||
var i;
|
||
var data = vnode.data;
|
||
var hasData = isDef(data);
|
||
if (hasData && isDef(i = data.hook) && isDef(i = i.prepatch)) {
|
||
i(oldVnode, vnode);
|
||
}
|
||
var elm = vnode.elm = oldVnode.elm;
|
||
var oldCh = oldVnode.children;
|
||
var ch = vnode.children;
|
||
if (hasData && 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 (hasData) {
|
||
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 (initial && vnode.parent) {
|
||
vnode.parent.data.pendingInsert = queue;
|
||
} else {
|
||
for (var i = 0; i < queue.length; ++i) {
|
||
queue[i].data.hook.insert(queue[i]);
|
||
}
|
||
}
|
||
}
|
||
|
||
var bailed = 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
|
||
var isRenderedModule = makeMap('attrs,style,class,staticClass,staticStyle,key');
|
||
|
||
// Note: this is a browser-only function so we can assume elms are DOM nodes.
|
||
function hydrate (elm, vnode, insertedVnodeQueue) {
|
||
if (process.env.NODE_ENV !== 'production') {
|
||
if (!assertNodeMatch(elm, vnode)) {
|
||
return false
|
||
}
|
||
}
|
||
vnode.elm = elm;
|
||
var tag = vnode.tag;
|
||
var data = vnode.data;
|
||
var children = vnode.children;
|
||
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 {
|
||
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)) {
|
||
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) {
|
||
if (process.env.NODE_ENV !== 'production' &&
|
||
typeof console !== 'undefined' &&
|
||
!bailed) {
|
||
bailed = true;
|
||
console.warn('Parent: ', elm);
|
||
console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
|
||
}
|
||
return false
|
||
}
|
||
}
|
||
}
|
||
if (isDef(data)) {
|
||
for (var key in data) {
|
||
if (!isRenderedModule(key)) {
|
||
invokeCreateHooks(vnode, insertedVnodeQueue);
|
||
break
|
||
}
|
||
}
|
||
}
|
||
} else if (elm.data !== vnode.text) {
|
||
elm.data = vnode.text;
|
||
}
|
||
return true
|
||
}
|
||
|
||
function assertNodeMatch (node, vnode) {
|
||
if (vnode.tag) {
|
||
return (
|
||
vnode.tag.indexOf('vue-component') === 0 ||
|
||
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 (!vnode) {
|
||
if (oldVnode) { invokeDestroyHook(oldVnode); }
|
||
return
|
||
}
|
||
|
||
var isInitialPatch = false;
|
||
var insertedVnodeQueue = [];
|
||
|
||
if (!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('server-rendered')) {
|
||
oldVnode.removeAttribute('server-rendered');
|
||
hydrating = true;
|
||
}
|
||
if (hydrating) {
|
||
if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
|
||
invokeInsertHook(vnode, insertedVnodeQueue, true);
|
||
return oldVnode
|
||
} else if (process.env.NODE_ENV !== 'production') {
|
||
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);
|
||
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)
|
||
);
|
||
|
||
if (vnode.parent) {
|
||
// component root element replaced.
|
||
// update parent placeholder node element, recursively
|
||
var ancestor = vnode.parent;
|
||
while (ancestor) {
|
||
ancestor.elm = vnode.elm;
|
||
ancestor = ancestor.parent;
|
||
}
|
||
if (isPatchable(vnode)) {
|
||
for (var i = 0; i < cbs.create.length; ++i) {
|
||
cbs.create[i](emptyNode, vnode.parent);
|
||
}
|
||
}
|
||
}
|
||
|
||
if (parentElm$1 !== null) {
|
||
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.data.hook || (vnode.data.hook = {}), 'insert', callInsert);
|
||
} else {
|
||
callInsert();
|
||
}
|
||
}
|
||
|
||
if (dirsWithPostpatch.length) {
|
||
mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), '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) {
|
||
return res
|
||
}
|
||
var i, dir;
|
||
for (i = 0; i < dirs.length; i++) {
|
||
dir = dirs[i];
|
||
if (!dir.modifiers) {
|
||
dir.modifiers = emptyModifiers;
|
||
}
|
||
res[getRawDirName(dir)] = dir;
|
||
dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);
|
||
}
|
||
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) {
|
||
fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
|
||
}
|
||
}
|
||
|
||
var baseModules = [
|
||
ref,
|
||
directives
|
||
];
|
||
|
||
/* */
|
||
|
||
function updateAttrs (oldVnode, vnode) {
|
||
if (!oldVnode.data.attrs && !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 (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]
|
||
/* istanbul ignore if */
|
||
if (isIE9 && attrs.value !== oldAttrs.value) {
|
||
setAttr(elm, 'value', attrs.value);
|
||
}
|
||
for (key in oldAttrs) {
|
||
if (attrs[key] == null) {
|
||
if (isXlink(key)) {
|
||
elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
|
||
} else if (!isEnumeratedAttr(key)) {
|
||
elm.removeAttribute(key);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function setAttr (el, key, value) {
|
||
if (isBooleanAttr(key)) {
|
||
// set attribute for blank value
|
||
// e.g. <option disabled>Select one</option>
|
||
if (isFalsyAttrValue(value)) {
|
||
el.removeAttribute(key);
|
||
} else {
|
||
el.setAttribute(key, key);
|
||
}
|
||
} 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 {
|
||
if (isFalsyAttrValue(value)) {
|
||
el.removeAttribute(key);
|
||
} else {
|
||
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 (!data.staticClass && !data.class &&
|
||
(!oldData || (!oldData.staticClass && !oldData.class))) {
|
||
return
|
||
}
|
||
|
||
var cls = genClassForVnode(vnode);
|
||
|
||
// handle transition classes
|
||
var transitionClass = el._transitionClasses;
|
||
if (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 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)
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
/* */
|
||
|
||
/**
|
||
* Cross-platform code generation for component v-model
|
||
*/
|
||
|
||
|
||
/**
|
||
* Cross-platform codegen helper for generating v-model value assignment code.
|
||
*/
|
||
|
||
|
||
/**
|
||
* parse directive model to do the array update transform. a[idx] = val => $$a.splice($$idx, 1, val)
|
||
*
|
||
* for loop possible cases:
|
||
*
|
||
* - test
|
||
* - test[idx]
|
||
* - test[test1[idx]]
|
||
* - test["a"][idx]
|
||
* - xxx.test[a[a].test1[idx]]
|
||
* - test.xxx.a["asa"][test1[idx]]
|
||
*
|
||
*/
|
||
|
||
var str;
|
||
var index$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';
|
||
|
||
/* */
|
||
|
||
// 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) {
|
||
var event;
|
||
/* istanbul ignore if */
|
||
if (on[RANGE_TOKEN]) {
|
||
// IE input[type=range] only supports `change` event
|
||
event = isIE ? 'change' : 'input';
|
||
on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);
|
||
delete on[RANGE_TOKEN];
|
||
}
|
||
if (on[CHECKBOX_RADIO_TOKEN]) {
|
||
// Chrome fires microtasks in between click/change, leads to #4521
|
||
event = isChrome ? 'click' : 'change';
|
||
on[event] = [].concat(on[CHECKBOX_RADIO_TOKEN], on[event] || []);
|
||
delete on[CHECKBOX_RADIO_TOKEN];
|
||
}
|
||
}
|
||
|
||
var target$1;
|
||
|
||
function add$1 (
|
||
event,
|
||
handler,
|
||
once,
|
||
capture
|
||
) {
|
||
if (once) {
|
||
var oldHandler = handler;
|
||
var _target = target$1; // save current target element in closure
|
||
handler = function (ev) {
|
||
var res = arguments.length === 1
|
||
? oldHandler(ev)
|
||
: oldHandler.apply(null, arguments);
|
||
if (res !== null) {
|
||
remove$2(event, handler, capture, _target);
|
||
}
|
||
};
|
||
}
|
||
target$1.addEventListener(event, handler, capture);
|
||
}
|
||
|
||
function remove$2 (
|
||
event,
|
||
handler,
|
||
capture,
|
||
_target
|
||
) {
|
||
(_target || target$1).removeEventListener(event, handler, capture);
|
||
}
|
||
|
||
function updateDOMListeners (oldVnode, vnode) {
|
||
if (!oldVnode.data.on && !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);
|
||
}
|
||
|
||
var events = {
|
||
create: updateDOMListeners,
|
||
update: updateDOMListeners
|
||
};
|
||
|
||
/* */
|
||
|
||
function updateDOMProps (oldVnode, vnode) {
|
||
if (!oldVnode.data.domProps && !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 (props.__ob__) {
|
||
props = vnode.data.domProps = extend({}, props);
|
||
}
|
||
|
||
for (key in oldProps) {
|
||
if (props[key] == null) {
|
||
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 }
|
||
}
|
||
|
||
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 = cur == null ? '' : String(cur);
|
||
if (shouldUpdateValue(elm, vnode, strCur)) {
|
||
elm.value = strCur;
|
||
}
|
||
} else {
|
||
elm[key] = cur;
|
||
}
|
||
}
|
||
}
|
||
|
||
// check platforms/web/util/attrs.js acceptValue
|
||
|
||
|
||
function shouldUpdateValue (
|
||
elm,
|
||
vnode,
|
||
checkVal
|
||
) {
|
||
return (!elm.composing && (
|
||
vnode.tag === 'option' ||
|
||
isDirty(elm, checkVal) ||
|
||
isInputChanged(elm, checkVal)
|
||
))
|
||
}
|
||
|
||
function isDirty (elm, checkVal) {
|
||
// return true when textbox (.number and .trim) loses focus and its value is not equal to the updated value
|
||
return document.activeElement !== elm && elm.value !== checkVal
|
||
}
|
||
|
||
function isInputChanged (elm, newVal) {
|
||
var value = elm.value;
|
||
var modifiers = elm._vModifiers; // injected by v-model runtime
|
||
if ((modifiers && modifiers.number) || elm.type === 'number') {
|
||
return toNumber(value) !== toNumber(newVal)
|
||
}
|
||
if (modifiers && 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.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 {
|
||
el.style[normalize(name)] = val;
|
||
}
|
||
};
|
||
|
||
var prefixes = ['Webkit', 'Moz', 'ms'];
|
||
|
||
var testEl;
|
||
var normalize = cached(function (prop) {
|
||
testEl = testEl || document.createElement('div');
|
||
prop = camelize(prop);
|
||
if (prop !== 'filter' && (prop in testEl.style)) {
|
||
return prop
|
||
}
|
||
var upper = prop.charAt(0).toUpperCase() + prop.slice(1);
|
||
for (var i = 0; i < prefixes.length; i++) {
|
||
var prefixed = prefixes[i] + upper;
|
||
if (prefixed in testEl.style) {
|
||
return prefixed
|
||
}
|
||
}
|
||
});
|
||
|
||
function updateStyle (oldVnode, vnode) {
|
||
var data = vnode.data;
|
||
var oldData = oldVnode.data;
|
||
|
||
if (!data.staticStyle && !data.style &&
|
||
!oldData.staticStyle && !oldData.style) {
|
||
return
|
||
}
|
||
|
||
var cur, name;
|
||
var el = vnode.elm;
|
||
var oldStaticStyle = oldVnode.data.staticStyle;
|
||
var oldStyleBinding = oldVnode.data.style || {};
|
||
|
||
// if static style exists, stylebinding already merged into it when doing normalizeStyleData
|
||
var oldStyle = oldStaticStyle || oldStyleBinding;
|
||
|
||
var style = normalizeStyleBinding(vnode.data.style) || {};
|
||
|
||
vnode.data.style = style.__ob__ ? extend({}, style) : style;
|
||
|
||
var newStyle = getStyle(vnode, true);
|
||
|
||
for (name in oldStyle) {
|
||
if (newStyle[name] == null) {
|
||
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);
|
||
}
|
||
} else {
|
||
var cur = " " + (el.getAttribute('class') || '') + " ";
|
||
var tar = ' ' + cls + ' ';
|
||
while (cur.indexOf(tar) >= 0) {
|
||
cur = cur.replace(tar, ' ');
|
||
}
|
||
el.setAttribute('class', cur.trim());
|
||
}
|
||
}
|
||
|
||
/* */
|
||
|
||
function resolveTransition (def$$1) {
|
||
if (!def$$1) {
|
||
return
|
||
}
|
||
/* istanbul ignore else */
|
||
if (typeof def$$1 === 'object') {
|
||
var res = {};
|
||
if (def$$1.css !== false) {
|
||
extend(res, autoCssTransition(def$$1.name || 'v'));
|
||
}
|
||
extend(res, def$$1);
|
||
return res
|
||
} else if (typeof def$$1 === 'string') {
|
||
return autoCssTransition(def$$1)
|
||
}
|
||
}
|
||
|
||
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;
|
||
|
||
function nextFrame (fn) {
|
||
raf(function () {
|
||
raf(fn);
|
||
});
|
||
}
|
||
|
||
function addTransitionClass (el, cls) {
|
||
(el._transitionClasses || (el._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 transitioneDelays = styles[transitionProp + 'Delay'].split(', ');
|
||
var transitionDurations = styles[transitionProp + 'Duration'].split(', ');
|
||
var transitionTimeout = getTimeout(transitioneDelays, 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 (el._leaveCb) {
|
||
el._leaveCb.cancelled = true;
|
||
el._leaveCb();
|
||
}
|
||
|
||
var data = resolveTransition(vnode.data.transition);
|
||
if (!data) {
|
||
return
|
||
}
|
||
|
||
/* istanbul ignore if */
|
||
if (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 (process.env.NODE_ENV !== 'production' && explicitEnterDuration != null) {
|
||
checkDuration(explicitEnterDuration, 'enter', vnode);
|
||
}
|
||
|
||
var expectsCSS = css !== false && !isIE9;
|
||
var userWantsControl = getHookAgumentsLength(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.data.hook || (vnode.data.hook = {}), '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 () {
|
||
addTransitionClass(el, toClass);
|
||
removeTransitionClass(el, startClass);
|
||
if (!cb.cancelled && !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 (el._enterCb) {
|
||
el._enterCb.cancelled = true;
|
||
el._enterCb();
|
||
}
|
||
|
||
var data = resolveTransition(vnode.data.transition);
|
||
if (!data) {
|
||
return rm()
|
||
}
|
||
|
||
/* istanbul ignore if */
|
||
if (el._leaveCb || el.nodeType !== 1) {
|
||
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 = getHookAgumentsLength(leave);
|
||
|
||
var explicitLeaveDuration = toNumber(
|
||
isObject(duration)
|
||
? duration.leave
|
||
: duration
|
||
);
|
||
|
||
if (process.env.NODE_ENV !== 'production' && explicitLeaveDuration != null) {
|
||
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 () {
|
||
addTransitionClass(el, leaveToClass);
|
||
removeTransitionClass(el, leaveClass);
|
||
if (!cb.cancelled && !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 getHookAgumentsLength (fn) {
|
||
if (!fn) { return false }
|
||
var invokerFns = fn.fns;
|
||
if (invokerFns) {
|
||
// invoker
|
||
return getHookAgumentsLength(
|
||
Array.isArray(invokerFns)
|
||
? invokerFns[0]
|
||
: invokerFns
|
||
)
|
||
} else {
|
||
return (fn._length || fn.length) > 1
|
||
}
|
||
}
|
||
|
||
function _enter (_, vnode) {
|
||
if (!vnode.data.show) {
|
||
enter(vnode);
|
||
}
|
||
}
|
||
|
||
var transition = inBrowser ? {
|
||
create: _enter,
|
||
activate: _enter,
|
||
remove: function remove$$1 (vnode, rm) {
|
||
/* istanbul ignore else */
|
||
if (!vnode.data.show) {
|
||
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 model$1 = {
|
||
inserted: function inserted (el, binding, vnode) {
|
||
if (vnode.tag === 'select') {
|
||
var cb = function () {
|
||
setSelected(el, binding, vnode.context);
|
||
};
|
||
cb();
|
||
/* istanbul ignore if */
|
||
if (isIE || isEdge) {
|
||
setTimeout(cb, 0);
|
||
}
|
||
} else if (vnode.tag === 'textarea' || el.type === 'text') {
|
||
el._vModifiers = binding.modifiers;
|
||
if (!binding.modifiers.lazy) {
|
||
if (!isAndroid) {
|
||
el.addEventListener('compositionstart', onCompositionStart);
|
||
el.addEventListener('compositionend', 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 needReset = el.multiple
|
||
? binding.value.some(function (v) { return hasNoMatchingOption(v, el.options); })
|
||
: binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, el.options);
|
||
if (needReset) {
|
||
trigger(el, 'change');
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
function setSelected (el, binding, vm) {
|
||
var value = binding.value;
|
||
var isMultiple = el.multiple;
|
||
if (isMultiple && !Array.isArray(value)) {
|
||
process.env.NODE_ENV !== '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) {
|
||
for (var i = 0, l = options.length; i < l; i++) {
|
||
if (looseEqual(getValue(options[i]), value)) {
|
||
return false
|
||
}
|
||
}
|
||
return true
|
||
}
|
||
|
||
function getValue (option) {
|
||
return '_value' in option
|
||
? option._value
|
||
: option.value
|
||
}
|
||
|
||
function onCompositionStart (e) {
|
||
e.target.composing = true;
|
||
}
|
||
|
||
function onCompositionEnd (e) {
|
||
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 = vnode.data && vnode.data.transition;
|
||
var originalDisplay = el.__vOriginalDisplay =
|
||
el.style.display === 'none' ? '' : el.style.display;
|
||
if (value && transition && !isIE9) {
|
||
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 = vnode.data && vnode.data.transition;
|
||
if (transition && !isIE9) {
|
||
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: model$1,
|
||
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) {
|
||
return /\d-keep-alive$/.test(rawChild.tag)
|
||
? h('keep-alive')
|
||
: null
|
||
}
|
||
|
||
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; });
|
||
/* istanbul ignore if */
|
||
if (!children.length) {
|
||
return
|
||
}
|
||
|
||
// warn multiple elements
|
||
if (process.env.NODE_ENV !== '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 (process.env.NODE_ENV !== '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
|
||
? 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)) {
|
||
// replace old child transition data with fresh one
|
||
// important for dynamic transitions!
|
||
var oldData = oldChild && (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') {
|
||
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 disired 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 (process.env.NODE_ENV !== 'production') {
|
||
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
|
||
var body = document.body;
|
||
var f = body.offsetHeight; // eslint-disable-line
|
||
|
||
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
|
||
}
|
||
if (this._hasMove != null) {
|
||
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$2.config.mustUseProp = mustUseProp;
|
||
Vue$2.config.isReservedTag = isReservedTag;
|
||
Vue$2.config.getTagNamespace = getTagNamespace;
|
||
Vue$2.config.isUnknownElement = isUnknownElement;
|
||
|
||
// install platform runtime directives & components
|
||
extend(Vue$2.options.directives, platformDirectives);
|
||
extend(Vue$2.options.components, platformComponents);
|
||
|
||
// install platform patch function
|
||
Vue$2.prototype.__patch__ = inBrowser ? patch : noop;
|
||
|
||
// public mount method
|
||
Vue$2.prototype.$mount = function (
|
||
el,
|
||
hydrating
|
||
) {
|
||
el = el && inBrowser ? query(el) : undefined;
|
||
return mountComponent(this, el, hydrating)
|
||
};
|
||
|
||
// devtools global hook
|
||
/* istanbul ignore next */
|
||
setTimeout(function () {
|
||
if (config.devtools) {
|
||
if (devtools) {
|
||
devtools.emit('init', Vue$2);
|
||
} else if (process.env.NODE_ENV !== 'production' && isChrome) {
|
||
console[console.info ? 'info' : 'log'](
|
||
'Download the Vue Devtools extension for a better development experience:\n' +
|
||
'https://github.com/vuejs/vue-devtools'
|
||
);
|
||
}
|
||
}
|
||
if (process.env.NODE_ENV !== 'production' &&
|
||
config.productionTip !== false &&
|
||
inBrowser && 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);
|
||
|
||
module.exports = Vue$2;
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3), (function() { return this; }())))
|
||
|
||
/***/ },
|
||
/* 3 */
|
||
/***/ 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.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; };
|
||
|
||
|
||
/***/ },
|
||
/* 4 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/**
|
||
* @namespace Chart
|
||
*/
|
||
var Chart = __webpack_require__(5)();
|
||
|
||
__webpack_require__(6)(Chart);
|
||
__webpack_require__(12)(Chart);
|
||
__webpack_require__(14)(Chart);
|
||
__webpack_require__(15)(Chart);
|
||
__webpack_require__(16)(Chart);
|
||
__webpack_require__(17)(Chart);
|
||
__webpack_require__(18)(Chart);
|
||
__webpack_require__(19)(Chart);
|
||
__webpack_require__(20)(Chart);
|
||
__webpack_require__(21)(Chart);
|
||
__webpack_require__(22)(Chart);
|
||
__webpack_require__(23)(Chart);
|
||
__webpack_require__(24)(Chart);
|
||
__webpack_require__(25)(Chart);
|
||
__webpack_require__(26)(Chart);
|
||
__webpack_require__(27)(Chart);
|
||
|
||
__webpack_require__(28)(Chart);
|
||
__webpack_require__(29)(Chart);
|
||
__webpack_require__(30)(Chart);
|
||
__webpack_require__(31)(Chart);
|
||
|
||
__webpack_require__(32)(Chart);
|
||
__webpack_require__(33)(Chart);
|
||
__webpack_require__(34)(Chart);
|
||
__webpack_require__(35)(Chart);
|
||
__webpack_require__(36)(Chart);
|
||
__webpack_require__(37)(Chart);
|
||
|
||
// Controllers must be loaded after elements
|
||
// See Chart.core.datasetController.dataElementType
|
||
__webpack_require__(149)(Chart);
|
||
__webpack_require__(150)(Chart);
|
||
__webpack_require__(151)(Chart);
|
||
__webpack_require__(152)(Chart);
|
||
__webpack_require__(153)(Chart);
|
||
__webpack_require__(154)(Chart);
|
||
|
||
__webpack_require__(155)(Chart);
|
||
__webpack_require__(156)(Chart);
|
||
__webpack_require__(157)(Chart);
|
||
__webpack_require__(158)(Chart);
|
||
__webpack_require__(159)(Chart);
|
||
__webpack_require__(160)(Chart);
|
||
__webpack_require__(161)(Chart);
|
||
|
||
window.Chart = module.exports = Chart;
|
||
|
||
|
||
/***/ },
|
||
/* 5 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function() {
|
||
|
||
// Occupy the global variable of Chart, and create a simple base class
|
||
var Chart = function(item, config) {
|
||
this.controller = new Chart.Controller(item, config, this);
|
||
return this.controller;
|
||
};
|
||
|
||
// Globally expose the defaults to allow for user updating/changing
|
||
Chart.defaults = {
|
||
global: {
|
||
responsive: true,
|
||
responsiveAnimationDuration: 0,
|
||
maintainAspectRatio: true,
|
||
events: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],
|
||
hover: {
|
||
onHover: null,
|
||
mode: 'nearest',
|
||
intersect: true,
|
||
animationDuration: 400
|
||
},
|
||
onClick: null,
|
||
defaultColor: 'rgba(0,0,0,0.1)',
|
||
defaultFontColor: '#666',
|
||
defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
|
||
defaultFontSize: 12,
|
||
defaultFontStyle: 'normal',
|
||
showLines: true,
|
||
|
||
// Element defaults defined in element extensions
|
||
elements: {},
|
||
|
||
// Legend callback string
|
||
legendCallback: function(chart) {
|
||
var text = [];
|
||
text.push('<ul class="' + chart.id + '-legend">');
|
||
for (var i = 0; i < chart.data.datasets.length; i++) {
|
||
text.push('<li><span style="background-color:' + chart.data.datasets[i].backgroundColor + '"></span>');
|
||
if (chart.data.datasets[i].label) {
|
||
text.push(chart.data.datasets[i].label);
|
||
}
|
||
text.push('</li>');
|
||
}
|
||
text.push('</ul>');
|
||
|
||
return text.join('');
|
||
}
|
||
}
|
||
};
|
||
|
||
Chart.Chart = Chart;
|
||
|
||
return Chart;
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 6 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/* global window: false */
|
||
/* global document: false */
|
||
'use strict';
|
||
|
||
var color = __webpack_require__(7);
|
||
|
||
module.exports = function(Chart) {
|
||
// Global Chart helpers object for utility methods and classes
|
||
var helpers = Chart.helpers = {};
|
||
|
||
// -- Basic js utility methods
|
||
helpers.each = function(loopable, callback, self, reverse) {
|
||
// Check to see if null or undefined firstly.
|
||
var i, len;
|
||
if (helpers.isArray(loopable)) {
|
||
len = loopable.length;
|
||
if (reverse) {
|
||
for (i = len - 1; i >= 0; i--) {
|
||
callback.call(self, loopable[i], i);
|
||
}
|
||
} else {
|
||
for (i = 0; i < len; i++) {
|
||
callback.call(self, loopable[i], i);
|
||
}
|
||
}
|
||
} else if (typeof loopable === 'object') {
|
||
var keys = Object.keys(loopable);
|
||
len = keys.length;
|
||
for (i = 0; i < len; i++) {
|
||
callback.call(self, loopable[keys[i]], keys[i]);
|
||
}
|
||
}
|
||
};
|
||
helpers.clone = function(obj) {
|
||
var objClone = {};
|
||
helpers.each(obj, function(value, key) {
|
||
if (helpers.isArray(value)) {
|
||
objClone[key] = value.slice(0);
|
||
} else if (typeof value === 'object' && value !== null) {
|
||
objClone[key] = helpers.clone(value);
|
||
} else {
|
||
objClone[key] = value;
|
||
}
|
||
});
|
||
return objClone;
|
||
};
|
||
helpers.extend = function(base) {
|
||
var setFn = function(value, key) {
|
||
base[key] = value;
|
||
};
|
||
for (var i = 1, ilen = arguments.length; i < ilen; i++) {
|
||
helpers.each(arguments[i], setFn);
|
||
}
|
||
return base;
|
||
};
|
||
// Need a special merge function to chart configs since they are now grouped
|
||
helpers.configMerge = function(_base) {
|
||
var base = helpers.clone(_base);
|
||
helpers.each(Array.prototype.slice.call(arguments, 1), function(extension) {
|
||
helpers.each(extension, function(value, key) {
|
||
var baseHasProperty = base.hasOwnProperty(key);
|
||
var baseVal = baseHasProperty ? base[key] : {};
|
||
|
||
if (key === 'scales') {
|
||
// Scale config merging is complex. Add our own function here for that
|
||
base[key] = helpers.scaleMerge(baseVal, value);
|
||
} else if (key === 'scale') {
|
||
// Used in polar area & radar charts since there is only one scale
|
||
base[key] = helpers.configMerge(baseVal, Chart.scaleService.getScaleDefaults(value.type), value);
|
||
} else if (baseHasProperty
|
||
&& typeof baseVal === 'object'
|
||
&& !helpers.isArray(baseVal)
|
||
&& baseVal !== null
|
||
&& typeof value === 'object'
|
||
&& !helpers.isArray(value)) {
|
||
// If we are overwriting an object with an object, do a merge of the properties.
|
||
base[key] = helpers.configMerge(baseVal, value);
|
||
} else {
|
||
// can just overwrite the value in this case
|
||
base[key] = value;
|
||
}
|
||
});
|
||
});
|
||
|
||
return base;
|
||
};
|
||
helpers.scaleMerge = function(_base, extension) {
|
||
var base = helpers.clone(_base);
|
||
|
||
helpers.each(extension, function(value, key) {
|
||
if (key === 'xAxes' || key === 'yAxes') {
|
||
// These properties are arrays of items
|
||
if (base.hasOwnProperty(key)) {
|
||
helpers.each(value, function(valueObj, index) {
|
||
var axisType = helpers.getValueOrDefault(valueObj.type, key === 'xAxes' ? 'category' : 'linear');
|
||
var axisDefaults = Chart.scaleService.getScaleDefaults(axisType);
|
||
if (index >= base[key].length || !base[key][index].type) {
|
||
base[key].push(helpers.configMerge(axisDefaults, valueObj));
|
||
} else if (valueObj.type && valueObj.type !== base[key][index].type) {
|
||
// Type changed. Bring in the new defaults before we bring in valueObj so that valueObj can override the correct scale defaults
|
||
base[key][index] = helpers.configMerge(base[key][index], axisDefaults, valueObj);
|
||
} else {
|
||
// Type is the same
|
||
base[key][index] = helpers.configMerge(base[key][index], valueObj);
|
||
}
|
||
});
|
||
} else {
|
||
base[key] = [];
|
||
helpers.each(value, function(valueObj) {
|
||
var axisType = helpers.getValueOrDefault(valueObj.type, key === 'xAxes' ? 'category' : 'linear');
|
||
base[key].push(helpers.configMerge(Chart.scaleService.getScaleDefaults(axisType), valueObj));
|
||
});
|
||
}
|
||
} else if (base.hasOwnProperty(key) && typeof base[key] === 'object' && base[key] !== null && typeof value === 'object') {
|
||
// If we are overwriting an object with an object, do a merge of the properties.
|
||
base[key] = helpers.configMerge(base[key], value);
|
||
|
||
} else {
|
||
// can just overwrite the value in this case
|
||
base[key] = value;
|
||
}
|
||
});
|
||
|
||
return base;
|
||
};
|
||
helpers.getValueAtIndexOrDefault = function(value, index, defaultValue) {
|
||
if (value === undefined || value === null) {
|
||
return defaultValue;
|
||
}
|
||
|
||
if (helpers.isArray(value)) {
|
||
return index < value.length ? value[index] : defaultValue;
|
||
}
|
||
|
||
return value;
|
||
};
|
||
helpers.getValueOrDefault = function(value, defaultValue) {
|
||
return value === undefined ? defaultValue : value;
|
||
};
|
||
helpers.indexOf = Array.prototype.indexOf?
|
||
function(array, item) {
|
||
return array.indexOf(item);
|
||
}:
|
||
function(array, item) {
|
||
for (var i = 0, ilen = array.length; i < ilen; ++i) {
|
||
if (array[i] === item) {
|
||
return i;
|
||
}
|
||
}
|
||
return -1;
|
||
};
|
||
helpers.where = function(collection, filterCallback) {
|
||
if (helpers.isArray(collection) && Array.prototype.filter) {
|
||
return collection.filter(filterCallback);
|
||
}
|
||
var filtered = [];
|
||
|
||
helpers.each(collection, function(item) {
|
||
if (filterCallback(item)) {
|
||
filtered.push(item);
|
||
}
|
||
});
|
||
|
||
return filtered;
|
||
};
|
||
helpers.findIndex = Array.prototype.findIndex?
|
||
function(array, callback, scope) {
|
||
return array.findIndex(callback, scope);
|
||
} :
|
||
function(array, callback, scope) {
|
||
scope = scope === undefined? array : scope;
|
||
for (var i = 0, ilen = array.length; i < ilen; ++i) {
|
||
if (callback.call(scope, array[i], i, array)) {
|
||
return i;
|
||
}
|
||
}
|
||
return -1;
|
||
};
|
||
helpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {
|
||
// Default to start of the array
|
||
if (startIndex === undefined || startIndex === null) {
|
||
startIndex = -1;
|
||
}
|
||
for (var i = startIndex + 1; i < arrayToSearch.length; i++) {
|
||
var currentItem = arrayToSearch[i];
|
||
if (filterCallback(currentItem)) {
|
||
return currentItem;
|
||
}
|
||
}
|
||
};
|
||
helpers.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {
|
||
// Default to end of the array
|
||
if (startIndex === undefined || startIndex === null) {
|
||
startIndex = arrayToSearch.length;
|
||
}
|
||
for (var i = startIndex - 1; i >= 0; i--) {
|
||
var currentItem = arrayToSearch[i];
|
||
if (filterCallback(currentItem)) {
|
||
return currentItem;
|
||
}
|
||
}
|
||
};
|
||
helpers.inherits = function(extensions) {
|
||
// Basic javascript inheritance based on the model created in Backbone.js
|
||
var me = this;
|
||
var ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {
|
||
return me.apply(this, arguments);
|
||
};
|
||
|
||
var Surrogate = function() {
|
||
this.constructor = ChartElement;
|
||
};
|
||
Surrogate.prototype = me.prototype;
|
||
ChartElement.prototype = new Surrogate();
|
||
|
||
ChartElement.extend = helpers.inherits;
|
||
|
||
if (extensions) {
|
||
helpers.extend(ChartElement.prototype, extensions);
|
||
}
|
||
|
||
ChartElement.__super__ = me.prototype;
|
||
|
||
return ChartElement;
|
||
};
|
||
helpers.noop = function() {};
|
||
helpers.uid = (function() {
|
||
var id = 0;
|
||
return function() {
|
||
return id++;
|
||
};
|
||
}());
|
||
// -- Math methods
|
||
helpers.isNumber = function(n) {
|
||
return !isNaN(parseFloat(n)) && isFinite(n);
|
||
};
|
||
helpers.almostEquals = function(x, y, epsilon) {
|
||
return Math.abs(x - y) < epsilon;
|
||
};
|
||
helpers.almostWhole = function(x, epsilon) {
|
||
var rounded = Math.round(x);
|
||
return (((rounded - epsilon) < x) && ((rounded + epsilon) > x));
|
||
};
|
||
helpers.max = function(array) {
|
||
return array.reduce(function(max, value) {
|
||
if (!isNaN(value)) {
|
||
return Math.max(max, value);
|
||
}
|
||
return max;
|
||
}, Number.NEGATIVE_INFINITY);
|
||
};
|
||
helpers.min = function(array) {
|
||
return array.reduce(function(min, value) {
|
||
if (!isNaN(value)) {
|
||
return Math.min(min, value);
|
||
}
|
||
return min;
|
||
}, Number.POSITIVE_INFINITY);
|
||
};
|
||
helpers.sign = Math.sign?
|
||
function(x) {
|
||
return Math.sign(x);
|
||
} :
|
||
function(x) {
|
||
x = +x; // convert to a number
|
||
if (x === 0 || isNaN(x)) {
|
||
return x;
|
||
}
|
||
return x > 0 ? 1 : -1;
|
||
};
|
||
helpers.log10 = Math.log10?
|
||
function(x) {
|
||
return Math.log10(x);
|
||
} :
|
||
function(x) {
|
||
return Math.log(x) / Math.LN10;
|
||
};
|
||
helpers.toRadians = function(degrees) {
|
||
return degrees * (Math.PI / 180);
|
||
};
|
||
helpers.toDegrees = function(radians) {
|
||
return radians * (180 / Math.PI);
|
||
};
|
||
// Gets the angle from vertical upright to the point about a centre.
|
||
helpers.getAngleFromPoint = function(centrePoint, anglePoint) {
|
||
var distanceFromXCenter = anglePoint.x - centrePoint.x,
|
||
distanceFromYCenter = anglePoint.y - centrePoint.y,
|
||
radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
|
||
|
||
var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
|
||
|
||
if (angle < (-0.5 * Math.PI)) {
|
||
angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]
|
||
}
|
||
|
||
return {
|
||
angle: angle,
|
||
distance: radialDistanceFromCenter
|
||
};
|
||
};
|
||
helpers.distanceBetweenPoints = function(pt1, pt2) {
|
||
return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
|
||
};
|
||
helpers.aliasPixel = function(pixelWidth) {
|
||
return (pixelWidth % 2 === 0) ? 0 : 0.5;
|
||
};
|
||
helpers.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {
|
||
// Props to Rob Spencer at scaled innovation for his post on splining between points
|
||
// http://scaledinnovation.com/analytics/splines/aboutSplines.html
|
||
|
||
// This function must also respect "skipped" points
|
||
|
||
var previous = firstPoint.skip ? middlePoint : firstPoint,
|
||
current = middlePoint,
|
||
next = afterPoint.skip ? middlePoint : afterPoint;
|
||
|
||
var d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));
|
||
var d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));
|
||
|
||
var s01 = d01 / (d01 + d12);
|
||
var s12 = d12 / (d01 + d12);
|
||
|
||
// If all points are the same, s01 & s02 will be inf
|
||
s01 = isNaN(s01) ? 0 : s01;
|
||
s12 = isNaN(s12) ? 0 : s12;
|
||
|
||
var fa = t * s01; // scaling factor for triangle Ta
|
||
var fb = t * s12;
|
||
|
||
return {
|
||
previous: {
|
||
x: current.x - fa * (next.x - previous.x),
|
||
y: current.y - fa * (next.y - previous.y)
|
||
},
|
||
next: {
|
||
x: current.x + fb * (next.x - previous.x),
|
||
y: current.y + fb * (next.y - previous.y)
|
||
}
|
||
};
|
||
};
|
||
helpers.EPSILON = Number.EPSILON || 1e-14;
|
||
helpers.splineCurveMonotone = function(points) {
|
||
// This function calculates Bézier control points in a similar way than |splineCurve|,
|
||
// but preserves monotonicity of the provided data and ensures no local extremums are added
|
||
// between the dataset discrete points due to the interpolation.
|
||
// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation
|
||
|
||
var pointsWithTangents = (points || []).map(function(point) {
|
||
return {
|
||
model: point._model,
|
||
deltaK: 0,
|
||
mK: 0
|
||
};
|
||
});
|
||
|
||
// Calculate slopes (deltaK) and initialize tangents (mK)
|
||
var pointsLen = pointsWithTangents.length;
|
||
var i, pointBefore, pointCurrent, pointAfter;
|
||
for (i = 0; i < pointsLen; ++i) {
|
||
pointCurrent = pointsWithTangents[i];
|
||
if (pointCurrent.model.skip) {
|
||
continue;
|
||
}
|
||
|
||
pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;
|
||
pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;
|
||
if (pointAfter && !pointAfter.model.skip) {
|
||
var slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);
|
||
|
||
// In the case of two points that appear at the same x pixel, slopeDeltaX is 0
|
||
pointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;
|
||
}
|
||
|
||
if (!pointBefore || pointBefore.model.skip) {
|
||
pointCurrent.mK = pointCurrent.deltaK;
|
||
} else if (!pointAfter || pointAfter.model.skip) {
|
||
pointCurrent.mK = pointBefore.deltaK;
|
||
} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {
|
||
pointCurrent.mK = 0;
|
||
} else {
|
||
pointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;
|
||
}
|
||
}
|
||
|
||
// Adjust tangents to ensure monotonic properties
|
||
var alphaK, betaK, tauK, squaredMagnitude;
|
||
for (i = 0; i < pointsLen - 1; ++i) {
|
||
pointCurrent = pointsWithTangents[i];
|
||
pointAfter = pointsWithTangents[i + 1];
|
||
if (pointCurrent.model.skip || pointAfter.model.skip) {
|
||
continue;
|
||
}
|
||
|
||
if (helpers.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {
|
||
pointCurrent.mK = pointAfter.mK = 0;
|
||
continue;
|
||
}
|
||
|
||
alphaK = pointCurrent.mK / pointCurrent.deltaK;
|
||
betaK = pointAfter.mK / pointCurrent.deltaK;
|
||
squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);
|
||
if (squaredMagnitude <= 9) {
|
||
continue;
|
||
}
|
||
|
||
tauK = 3 / Math.sqrt(squaredMagnitude);
|
||
pointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;
|
||
pointAfter.mK = betaK * tauK * pointCurrent.deltaK;
|
||
}
|
||
|
||
// Compute control points
|
||
var deltaX;
|
||
for (i = 0; i < pointsLen; ++i) {
|
||
pointCurrent = pointsWithTangents[i];
|
||
if (pointCurrent.model.skip) {
|
||
continue;
|
||
}
|
||
|
||
pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;
|
||
pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;
|
||
if (pointBefore && !pointBefore.model.skip) {
|
||
deltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;
|
||
pointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;
|
||
pointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;
|
||
}
|
||
if (pointAfter && !pointAfter.model.skip) {
|
||
deltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;
|
||
pointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;
|
||
pointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;
|
||
}
|
||
}
|
||
};
|
||
helpers.nextItem = function(collection, index, loop) {
|
||
if (loop) {
|
||
return index >= collection.length - 1 ? collection[0] : collection[index + 1];
|
||
}
|
||
return index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];
|
||
};
|
||
helpers.previousItem = function(collection, index, loop) {
|
||
if (loop) {
|
||
return index <= 0 ? collection[collection.length - 1] : collection[index - 1];
|
||
}
|
||
return index <= 0 ? collection[0] : collection[index - 1];
|
||
};
|
||
// Implementation of the nice number algorithm used in determining where axis labels will go
|
||
helpers.niceNum = function(range, round) {
|
||
var exponent = Math.floor(helpers.log10(range));
|
||
var fraction = range / Math.pow(10, exponent);
|
||
var niceFraction;
|
||
|
||
if (round) {
|
||
if (fraction < 1.5) {
|
||
niceFraction = 1;
|
||
} else if (fraction < 3) {
|
||
niceFraction = 2;
|
||
} else if (fraction < 7) {
|
||
niceFraction = 5;
|
||
} else {
|
||
niceFraction = 10;
|
||
}
|
||
} else if (fraction <= 1.0) {
|
||
niceFraction = 1;
|
||
} else if (fraction <= 2) {
|
||
niceFraction = 2;
|
||
} else if (fraction <= 5) {
|
||
niceFraction = 5;
|
||
} else {
|
||
niceFraction = 10;
|
||
}
|
||
|
||
return niceFraction * Math.pow(10, exponent);
|
||
};
|
||
// Easing functions adapted from Robert Penner's easing equations
|
||
// http://www.robertpenner.com/easing/
|
||
var easingEffects = helpers.easingEffects = {
|
||
linear: function(t) {
|
||
return t;
|
||
},
|
||
easeInQuad: function(t) {
|
||
return t * t;
|
||
},
|
||
easeOutQuad: function(t) {
|
||
return -1 * t * (t - 2);
|
||
},
|
||
easeInOutQuad: function(t) {
|
||
if ((t /= 1 / 2) < 1) {
|
||
return 1 / 2 * t * t;
|
||
}
|
||
return -1 / 2 * ((--t) * (t - 2) - 1);
|
||
},
|
||
easeInCubic: function(t) {
|
||
return t * t * t;
|
||
},
|
||
easeOutCubic: function(t) {
|
||
return 1 * ((t = t / 1 - 1) * t * t + 1);
|
||
},
|
||
easeInOutCubic: function(t) {
|
||
if ((t /= 1 / 2) < 1) {
|
||
return 1 / 2 * t * t * t;
|
||
}
|
||
return 1 / 2 * ((t -= 2) * t * t + 2);
|
||
},
|
||
easeInQuart: function(t) {
|
||
return t * t * t * t;
|
||
},
|
||
easeOutQuart: function(t) {
|
||
return -1 * ((t = t / 1 - 1) * t * t * t - 1);
|
||
},
|
||
easeInOutQuart: function(t) {
|
||
if ((t /= 1 / 2) < 1) {
|
||
return 1 / 2 * t * t * t * t;
|
||
}
|
||
return -1 / 2 * ((t -= 2) * t * t * t - 2);
|
||
},
|
||
easeInQuint: function(t) {
|
||
return 1 * (t /= 1) * t * t * t * t;
|
||
},
|
||
easeOutQuint: function(t) {
|
||
return 1 * ((t = t / 1 - 1) * t * t * t * t + 1);
|
||
},
|
||
easeInOutQuint: function(t) {
|
||
if ((t /= 1 / 2) < 1) {
|
||
return 1 / 2 * t * t * t * t * t;
|
||
}
|
||
return 1 / 2 * ((t -= 2) * t * t * t * t + 2);
|
||
},
|
||
easeInSine: function(t) {
|
||
return -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1;
|
||
},
|
||
easeOutSine: function(t) {
|
||
return 1 * Math.sin(t / 1 * (Math.PI / 2));
|
||
},
|
||
easeInOutSine: function(t) {
|
||
return -1 / 2 * (Math.cos(Math.PI * t / 1) - 1);
|
||
},
|
||
easeInExpo: function(t) {
|
||
return (t === 0) ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1));
|
||
},
|
||
easeOutExpo: function(t) {
|
||
return (t === 1) ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1);
|
||
},
|
||
easeInOutExpo: function(t) {
|
||
if (t === 0) {
|
||
return 0;
|
||
}
|
||
if (t === 1) {
|
||
return 1;
|
||
}
|
||
if ((t /= 1 / 2) < 1) {
|
||
return 1 / 2 * Math.pow(2, 10 * (t - 1));
|
||
}
|
||
return 1 / 2 * (-Math.pow(2, -10 * --t) + 2);
|
||
},
|
||
easeInCirc: function(t) {
|
||
if (t >= 1) {
|
||
return t;
|
||
}
|
||
return -1 * (Math.sqrt(1 - (t /= 1) * t) - 1);
|
||
},
|
||
easeOutCirc: function(t) {
|
||
return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t);
|
||
},
|
||
easeInOutCirc: function(t) {
|
||
if ((t /= 1 / 2) < 1) {
|
||
return -1 / 2 * (Math.sqrt(1 - t * t) - 1);
|
||
}
|
||
return 1 / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1);
|
||
},
|
||
easeInElastic: function(t) {
|
||
var s = 1.70158;
|
||
var p = 0;
|
||
var a = 1;
|
||
if (t === 0) {
|
||
return 0;
|
||
}
|
||
if ((t /= 1) === 1) {
|
||
return 1;
|
||
}
|
||
if (!p) {
|
||
p = 1 * 0.3;
|
||
}
|
||
if (a < Math.abs(1)) {
|
||
a = 1;
|
||
s = p / 4;
|
||
} else {
|
||
s = p / (2 * Math.PI) * Math.asin(1 / a);
|
||
}
|
||
return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));
|
||
},
|
||
easeOutElastic: function(t) {
|
||
var s = 1.70158;
|
||
var p = 0;
|
||
var a = 1;
|
||
if (t === 0) {
|
||
return 0;
|
||
}
|
||
if ((t /= 1) === 1) {
|
||
return 1;
|
||
}
|
||
if (!p) {
|
||
p = 1 * 0.3;
|
||
}
|
||
if (a < Math.abs(1)) {
|
||
a = 1;
|
||
s = p / 4;
|
||
} else {
|
||
s = p / (2 * Math.PI) * Math.asin(1 / a);
|
||
}
|
||
return a * Math.pow(2, -10 * t) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) + 1;
|
||
},
|
||
easeInOutElastic: function(t) {
|
||
var s = 1.70158;
|
||
var p = 0;
|
||
var a = 1;
|
||
if (t === 0) {
|
||
return 0;
|
||
}
|
||
if ((t /= 1 / 2) === 2) {
|
||
return 1;
|
||
}
|
||
if (!p) {
|
||
p = 1 * (0.3 * 1.5);
|
||
}
|
||
if (a < Math.abs(1)) {
|
||
a = 1;
|
||
s = p / 4;
|
||
} else {
|
||
s = p / (2 * Math.PI) * Math.asin(1 / a);
|
||
}
|
||
if (t < 1) {
|
||
return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));
|
||
}
|
||
return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) * 0.5 + 1;
|
||
},
|
||
easeInBack: function(t) {
|
||
var s = 1.70158;
|
||
return 1 * (t /= 1) * t * ((s + 1) * t - s);
|
||
},
|
||
easeOutBack: function(t) {
|
||
var s = 1.70158;
|
||
return 1 * ((t = t / 1 - 1) * t * ((s + 1) * t + s) + 1);
|
||
},
|
||
easeInOutBack: function(t) {
|
||
var s = 1.70158;
|
||
if ((t /= 1 / 2) < 1) {
|
||
return 1 / 2 * (t * t * (((s *= (1.525)) + 1) * t - s));
|
||
}
|
||
return 1 / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);
|
||
},
|
||
easeInBounce: function(t) {
|
||
return 1 - easingEffects.easeOutBounce(1 - t);
|
||
},
|
||
easeOutBounce: function(t) {
|
||
if ((t /= 1) < (1 / 2.75)) {
|
||
return 1 * (7.5625 * t * t);
|
||
} else if (t < (2 / 2.75)) {
|
||
return 1 * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75);
|
||
} else if (t < (2.5 / 2.75)) {
|
||
return 1 * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375);
|
||
}
|
||
return 1 * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375);
|
||
},
|
||
easeInOutBounce: function(t) {
|
||
if (t < 1 / 2) {
|
||
return easingEffects.easeInBounce(t * 2) * 0.5;
|
||
}
|
||
return easingEffects.easeOutBounce(t * 2 - 1) * 0.5 + 1 * 0.5;
|
||
}
|
||
};
|
||
// Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/
|
||
helpers.requestAnimFrame = (function() {
|
||
return window.requestAnimationFrame ||
|
||
window.webkitRequestAnimationFrame ||
|
||
window.mozRequestAnimationFrame ||
|
||
window.oRequestAnimationFrame ||
|
||
window.msRequestAnimationFrame ||
|
||
function(callback) {
|
||
return window.setTimeout(callback, 1000 / 60);
|
||
};
|
||
}());
|
||
// -- DOM methods
|
||
helpers.getRelativePosition = function(evt, chart) {
|
||
var mouseX, mouseY;
|
||
var e = evt.originalEvent || evt,
|
||
canvas = evt.currentTarget || evt.srcElement,
|
||
boundingRect = canvas.getBoundingClientRect();
|
||
|
||
var touches = e.touches;
|
||
if (touches && touches.length > 0) {
|
||
mouseX = touches[0].clientX;
|
||
mouseY = touches[0].clientY;
|
||
|
||
} else {
|
||
mouseX = e.clientX;
|
||
mouseY = e.clientY;
|
||
}
|
||
|
||
// Scale mouse coordinates into canvas coordinates
|
||
// by following the pattern laid out by 'jerryj' in the comments of
|
||
// http://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/
|
||
var paddingLeft = parseFloat(helpers.getStyle(canvas, 'padding-left'));
|
||
var paddingTop = parseFloat(helpers.getStyle(canvas, 'padding-top'));
|
||
var paddingRight = parseFloat(helpers.getStyle(canvas, 'padding-right'));
|
||
var paddingBottom = parseFloat(helpers.getStyle(canvas, 'padding-bottom'));
|
||
var width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;
|
||
var height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;
|
||
|
||
// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However
|
||
// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here
|
||
mouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);
|
||
mouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);
|
||
|
||
return {
|
||
x: mouseX,
|
||
y: mouseY
|
||
};
|
||
|
||
};
|
||
helpers.addEvent = function(node, eventType, method) {
|
||
if (node.addEventListener) {
|
||
node.addEventListener(eventType, method);
|
||
} else if (node.attachEvent) {
|
||
node.attachEvent('on' + eventType, method);
|
||
} else {
|
||
node['on' + eventType] = method;
|
||
}
|
||
};
|
||
helpers.removeEvent = function(node, eventType, handler) {
|
||
if (node.removeEventListener) {
|
||
node.removeEventListener(eventType, handler, false);
|
||
} else if (node.detachEvent) {
|
||
node.detachEvent('on' + eventType, handler);
|
||
} else {
|
||
node['on' + eventType] = helpers.noop;
|
||
}
|
||
};
|
||
|
||
// Private helper function to convert max-width/max-height values that may be percentages into a number
|
||
function parseMaxStyle(styleValue, node, parentProperty) {
|
||
var valueInPixels;
|
||
if (typeof(styleValue) === 'string') {
|
||
valueInPixels = parseInt(styleValue, 10);
|
||
|
||
if (styleValue.indexOf('%') !== -1) {
|
||
// percentage * size in dimension
|
||
valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
|
||
}
|
||
} else {
|
||
valueInPixels = styleValue;
|
||
}
|
||
|
||
return valueInPixels;
|
||
}
|
||
|
||
/**
|
||
* Returns if the given value contains an effective constraint.
|
||
* @private
|
||
*/
|
||
function isConstrainedValue(value) {
|
||
return value !== undefined && value !== null && value !== 'none';
|
||
}
|
||
|
||
// Private helper to get a constraint dimension
|
||
// @param domNode : the node to check the constraint on
|
||
// @param maxStyle : the style that defines the maximum for the direction we are using (maxWidth / maxHeight)
|
||
// @param percentageProperty : property of parent to use when calculating width as a percentage
|
||
// @see http://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser
|
||
function getConstraintDimension(domNode, maxStyle, percentageProperty) {
|
||
var view = document.defaultView;
|
||
var parentNode = domNode.parentNode;
|
||
var constrainedNode = view.getComputedStyle(domNode)[maxStyle];
|
||
var constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];
|
||
var hasCNode = isConstrainedValue(constrainedNode);
|
||
var hasCContainer = isConstrainedValue(constrainedContainer);
|
||
var infinity = Number.POSITIVE_INFINITY;
|
||
|
||
if (hasCNode || hasCContainer) {
|
||
return Math.min(
|
||
hasCNode? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,
|
||
hasCContainer? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);
|
||
}
|
||
|
||
return 'none';
|
||
}
|
||
// returns Number or undefined if no constraint
|
||
helpers.getConstraintWidth = function(domNode) {
|
||
return getConstraintDimension(domNode, 'max-width', 'clientWidth');
|
||
};
|
||
// returns Number or undefined if no constraint
|
||
helpers.getConstraintHeight = function(domNode) {
|
||
return getConstraintDimension(domNode, 'max-height', 'clientHeight');
|
||
};
|
||
helpers.getMaximumWidth = function(domNode) {
|
||
var container = domNode.parentNode;
|
||
var paddingLeft = parseInt(helpers.getStyle(container, 'padding-left'), 10);
|
||
var paddingRight = parseInt(helpers.getStyle(container, 'padding-right'), 10);
|
||
var w = container.clientWidth - paddingLeft - paddingRight;
|
||
var cw = helpers.getConstraintWidth(domNode);
|
||
return isNaN(cw)? w : Math.min(w, cw);
|
||
};
|
||
helpers.getMaximumHeight = function(domNode) {
|
||
var container = domNode.parentNode;
|
||
var paddingTop = parseInt(helpers.getStyle(container, 'padding-top'), 10);
|
||
var paddingBottom = parseInt(helpers.getStyle(container, 'padding-bottom'), 10);
|
||
var h = container.clientHeight - paddingTop - paddingBottom;
|
||
var ch = helpers.getConstraintHeight(domNode);
|
||
return isNaN(ch)? h : Math.min(h, ch);
|
||
};
|
||
helpers.getStyle = function(el, property) {
|
||
return el.currentStyle ?
|
||
el.currentStyle[property] :
|
||
document.defaultView.getComputedStyle(el, null).getPropertyValue(property);
|
||
};
|
||
helpers.retinaScale = function(chart) {
|
||
var pixelRatio = chart.currentDevicePixelRatio = window.devicePixelRatio || 1;
|
||
if (pixelRatio === 1) {
|
||
return;
|
||
}
|
||
|
||
var canvas = chart.canvas;
|
||
var height = chart.height;
|
||
var width = chart.width;
|
||
|
||
canvas.height = height * pixelRatio;
|
||
canvas.width = width * pixelRatio;
|
||
chart.ctx.scale(pixelRatio, pixelRatio);
|
||
|
||
// If no style has been set on the canvas, the render size is used as display size,
|
||
// making the chart visually bigger, so let's enforce it to the "correct" values.
|
||
// See https://github.com/chartjs/Chart.js/issues/3575
|
||
canvas.style.height = height + 'px';
|
||
canvas.style.width = width + 'px';
|
||
};
|
||
// -- Canvas methods
|
||
helpers.clear = function(chart) {
|
||
chart.ctx.clearRect(0, 0, chart.width, chart.height);
|
||
};
|
||
helpers.fontString = function(pixelSize, fontStyle, fontFamily) {
|
||
return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;
|
||
};
|
||
helpers.longestText = function(ctx, font, arrayOfThings, cache) {
|
||
cache = cache || {};
|
||
var data = cache.data = cache.data || {};
|
||
var gc = cache.garbageCollect = cache.garbageCollect || [];
|
||
|
||
if (cache.font !== font) {
|
||
data = cache.data = {};
|
||
gc = cache.garbageCollect = [];
|
||
cache.font = font;
|
||
}
|
||
|
||
ctx.font = font;
|
||
var longest = 0;
|
||
helpers.each(arrayOfThings, function(thing) {
|
||
// Undefined strings and arrays should not be measured
|
||
if (thing !== undefined && thing !== null && helpers.isArray(thing) !== true) {
|
||
longest = helpers.measureText(ctx, data, gc, longest, thing);
|
||
} else if (helpers.isArray(thing)) {
|
||
// if it is an array lets measure each element
|
||
// to do maybe simplify this function a bit so we can do this more recursively?
|
||
helpers.each(thing, function(nestedThing) {
|
||
// Undefined strings and arrays should not be measured
|
||
if (nestedThing !== undefined && nestedThing !== null && !helpers.isArray(nestedThing)) {
|
||
longest = helpers.measureText(ctx, data, gc, longest, nestedThing);
|
||
}
|
||
});
|
||
}
|
||
});
|
||
|
||
var gcLen = gc.length / 2;
|
||
if (gcLen > arrayOfThings.length) {
|
||
for (var i = 0; i < gcLen; i++) {
|
||
delete data[gc[i]];
|
||
}
|
||
gc.splice(0, gcLen);
|
||
}
|
||
return longest;
|
||
};
|
||
helpers.measureText = function(ctx, data, gc, longest, string) {
|
||
var textWidth = data[string];
|
||
if (!textWidth) {
|
||
textWidth = data[string] = ctx.measureText(string).width;
|
||
gc.push(string);
|
||
}
|
||
if (textWidth > longest) {
|
||
longest = textWidth;
|
||
}
|
||
return longest;
|
||
};
|
||
helpers.numberOfLabelLines = function(arrayOfThings) {
|
||
var numberOfLines = 1;
|
||
helpers.each(arrayOfThings, function(thing) {
|
||
if (helpers.isArray(thing)) {
|
||
if (thing.length > numberOfLines) {
|
||
numberOfLines = thing.length;
|
||
}
|
||
}
|
||
});
|
||
return numberOfLines;
|
||
};
|
||
helpers.drawRoundedRectangle = function(ctx, x, y, width, height, radius) {
|
||
ctx.beginPath();
|
||
ctx.moveTo(x + radius, y);
|
||
ctx.lineTo(x + width - radius, y);
|
||
ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
|
||
ctx.lineTo(x + width, y + height - radius);
|
||
ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
|
||
ctx.lineTo(x + radius, y + height);
|
||
ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
|
||
ctx.lineTo(x, y + radius);
|
||
ctx.quadraticCurveTo(x, y, x + radius, y);
|
||
ctx.closePath();
|
||
};
|
||
helpers.color = function(c) {
|
||
if (!color) {
|
||
console.error('Color.js not found!');
|
||
return c;
|
||
}
|
||
|
||
/* global CanvasGradient */
|
||
if (c instanceof CanvasGradient) {
|
||
return color(Chart.defaults.global.defaultColor);
|
||
}
|
||
|
||
return color(c);
|
||
};
|
||
helpers.isArray = Array.isArray?
|
||
function(obj) {
|
||
return Array.isArray(obj);
|
||
} :
|
||
function(obj) {
|
||
return Object.prototype.toString.call(obj) === '[object Array]';
|
||
};
|
||
// ! @see http://stackoverflow.com/a/14853974
|
||
helpers.arrayEquals = function(a0, a1) {
|
||
var i, ilen, v0, v1;
|
||
|
||
if (!a0 || !a1 || a0.length !== a1.length) {
|
||
return false;
|
||
}
|
||
|
||
for (i = 0, ilen=a0.length; i < ilen; ++i) {
|
||
v0 = a0[i];
|
||
v1 = a1[i];
|
||
|
||
if (v0 instanceof Array && v1 instanceof Array) {
|
||
if (!helpers.arrayEquals(v0, v1)) {
|
||
return false;
|
||
}
|
||
} else if (v0 !== v1) {
|
||
// NOTE: two different object instances will never be equal: {x:20} != {x:20}
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
};
|
||
helpers.callCallback = function(fn, args, _tArg) {
|
||
if (fn && typeof fn.call === 'function') {
|
||
fn.apply(_tArg, args);
|
||
}
|
||
};
|
||
helpers.getHoverColor = function(colorValue) {
|
||
/* global CanvasPattern */
|
||
return (colorValue instanceof CanvasPattern) ?
|
||
colorValue :
|
||
helpers.color(colorValue).saturate(0.5).darken(0.1).rgbString();
|
||
};
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 7 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/* MIT license */
|
||
var convert = __webpack_require__(8);
|
||
var string = __webpack_require__(10);
|
||
|
||
var Color = function (obj) {
|
||
if (obj instanceof Color) {
|
||
return obj;
|
||
}
|
||
if (!(this instanceof Color)) {
|
||
return new Color(obj);
|
||
}
|
||
|
||
this.values = {
|
||
rgb: [0, 0, 0],
|
||
hsl: [0, 0, 0],
|
||
hsv: [0, 0, 0],
|
||
hwb: [0, 0, 0],
|
||
cmyk: [0, 0, 0, 0],
|
||
alpha: 1
|
||
};
|
||
|
||
// parse Color() argument
|
||
var vals;
|
||
if (typeof obj === 'string') {
|
||
vals = string.getRgba(obj);
|
||
if (vals) {
|
||
this.setValues('rgb', vals);
|
||
} else if (vals = string.getHsla(obj)) {
|
||
this.setValues('hsl', vals);
|
||
} else if (vals = string.getHwb(obj)) {
|
||
this.setValues('hwb', vals);
|
||
} else {
|
||
throw new Error('Unable to parse color from string "' + obj + '"');
|
||
}
|
||
} else if (typeof obj === 'object') {
|
||
vals = obj;
|
||
if (vals.r !== undefined || vals.red !== undefined) {
|
||
this.setValues('rgb', vals);
|
||
} else if (vals.l !== undefined || vals.lightness !== undefined) {
|
||
this.setValues('hsl', vals);
|
||
} else if (vals.v !== undefined || vals.value !== undefined) {
|
||
this.setValues('hsv', vals);
|
||
} else if (vals.w !== undefined || vals.whiteness !== undefined) {
|
||
this.setValues('hwb', vals);
|
||
} else if (vals.c !== undefined || vals.cyan !== undefined) {
|
||
this.setValues('cmyk', vals);
|
||
} else {
|
||
throw new Error('Unable to parse color from object ' + JSON.stringify(obj));
|
||
}
|
||
}
|
||
};
|
||
|
||
Color.prototype = {
|
||
rgb: function () {
|
||
return this.setSpace('rgb', arguments);
|
||
},
|
||
hsl: function () {
|
||
return this.setSpace('hsl', arguments);
|
||
},
|
||
hsv: function () {
|
||
return this.setSpace('hsv', arguments);
|
||
},
|
||
hwb: function () {
|
||
return this.setSpace('hwb', arguments);
|
||
},
|
||
cmyk: function () {
|
||
return this.setSpace('cmyk', arguments);
|
||
},
|
||
|
||
rgbArray: function () {
|
||
return this.values.rgb;
|
||
},
|
||
hslArray: function () {
|
||
return this.values.hsl;
|
||
},
|
||
hsvArray: function () {
|
||
return this.values.hsv;
|
||
},
|
||
hwbArray: function () {
|
||
var values = this.values;
|
||
if (values.alpha !== 1) {
|
||
return values.hwb.concat([values.alpha]);
|
||
}
|
||
return values.hwb;
|
||
},
|
||
cmykArray: function () {
|
||
return this.values.cmyk;
|
||
},
|
||
rgbaArray: function () {
|
||
var values = this.values;
|
||
return values.rgb.concat([values.alpha]);
|
||
},
|
||
hslaArray: function () {
|
||
var values = this.values;
|
||
return values.hsl.concat([values.alpha]);
|
||
},
|
||
alpha: function (val) {
|
||
if (val === undefined) {
|
||
return this.values.alpha;
|
||
}
|
||
this.setValues('alpha', val);
|
||
return this;
|
||
},
|
||
|
||
red: function (val) {
|
||
return this.setChannel('rgb', 0, val);
|
||
},
|
||
green: function (val) {
|
||
return this.setChannel('rgb', 1, val);
|
||
},
|
||
blue: function (val) {
|
||
return this.setChannel('rgb', 2, val);
|
||
},
|
||
hue: function (val) {
|
||
if (val) {
|
||
val %= 360;
|
||
val = val < 0 ? 360 + val : val;
|
||
}
|
||
return this.setChannel('hsl', 0, val);
|
||
},
|
||
saturation: function (val) {
|
||
return this.setChannel('hsl', 1, val);
|
||
},
|
||
lightness: function (val) {
|
||
return this.setChannel('hsl', 2, val);
|
||
},
|
||
saturationv: function (val) {
|
||
return this.setChannel('hsv', 1, val);
|
||
},
|
||
whiteness: function (val) {
|
||
return this.setChannel('hwb', 1, val);
|
||
},
|
||
blackness: function (val) {
|
||
return this.setChannel('hwb', 2, val);
|
||
},
|
||
value: function (val) {
|
||
return this.setChannel('hsv', 2, val);
|
||
},
|
||
cyan: function (val) {
|
||
return this.setChannel('cmyk', 0, val);
|
||
},
|
||
magenta: function (val) {
|
||
return this.setChannel('cmyk', 1, val);
|
||
},
|
||
yellow: function (val) {
|
||
return this.setChannel('cmyk', 2, val);
|
||
},
|
||
black: function (val) {
|
||
return this.setChannel('cmyk', 3, val);
|
||
},
|
||
|
||
hexString: function () {
|
||
return string.hexString(this.values.rgb);
|
||
},
|
||
rgbString: function () {
|
||
return string.rgbString(this.values.rgb, this.values.alpha);
|
||
},
|
||
rgbaString: function () {
|
||
return string.rgbaString(this.values.rgb, this.values.alpha);
|
||
},
|
||
percentString: function () {
|
||
return string.percentString(this.values.rgb, this.values.alpha);
|
||
},
|
||
hslString: function () {
|
||
return string.hslString(this.values.hsl, this.values.alpha);
|
||
},
|
||
hslaString: function () {
|
||
return string.hslaString(this.values.hsl, this.values.alpha);
|
||
},
|
||
hwbString: function () {
|
||
return string.hwbString(this.values.hwb, this.values.alpha);
|
||
},
|
||
keyword: function () {
|
||
return string.keyword(this.values.rgb, this.values.alpha);
|
||
},
|
||
|
||
rgbNumber: function () {
|
||
var rgb = this.values.rgb;
|
||
return (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];
|
||
},
|
||
|
||
luminosity: function () {
|
||
// http://www.w3.org/TR/WCAG20/#relativeluminancedef
|
||
var rgb = this.values.rgb;
|
||
var lum = [];
|
||
for (var i = 0; i < rgb.length; i++) {
|
||
var chan = rgb[i] / 255;
|
||
lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);
|
||
}
|
||
return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];
|
||
},
|
||
|
||
contrast: function (color2) {
|
||
// http://www.w3.org/TR/WCAG20/#contrast-ratiodef
|
||
var lum1 = this.luminosity();
|
||
var lum2 = color2.luminosity();
|
||
if (lum1 > lum2) {
|
||
return (lum1 + 0.05) / (lum2 + 0.05);
|
||
}
|
||
return (lum2 + 0.05) / (lum1 + 0.05);
|
||
},
|
||
|
||
level: function (color2) {
|
||
var contrastRatio = this.contrast(color2);
|
||
if (contrastRatio >= 7.1) {
|
||
return 'AAA';
|
||
}
|
||
|
||
return (contrastRatio >= 4.5) ? 'AA' : '';
|
||
},
|
||
|
||
dark: function () {
|
||
// YIQ equation from http://24ways.org/2010/calculating-color-contrast
|
||
var rgb = this.values.rgb;
|
||
var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;
|
||
return yiq < 128;
|
||
},
|
||
|
||
light: function () {
|
||
return !this.dark();
|
||
},
|
||
|
||
negate: function () {
|
||
var rgb = [];
|
||
for (var i = 0; i < 3; i++) {
|
||
rgb[i] = 255 - this.values.rgb[i];
|
||
}
|
||
this.setValues('rgb', rgb);
|
||
return this;
|
||
},
|
||
|
||
lighten: function (ratio) {
|
||
var hsl = this.values.hsl;
|
||
hsl[2] += hsl[2] * ratio;
|
||
this.setValues('hsl', hsl);
|
||
return this;
|
||
},
|
||
|
||
darken: function (ratio) {
|
||
var hsl = this.values.hsl;
|
||
hsl[2] -= hsl[2] * ratio;
|
||
this.setValues('hsl', hsl);
|
||
return this;
|
||
},
|
||
|
||
saturate: function (ratio) {
|
||
var hsl = this.values.hsl;
|
||
hsl[1] += hsl[1] * ratio;
|
||
this.setValues('hsl', hsl);
|
||
return this;
|
||
},
|
||
|
||
desaturate: function (ratio) {
|
||
var hsl = this.values.hsl;
|
||
hsl[1] -= hsl[1] * ratio;
|
||
this.setValues('hsl', hsl);
|
||
return this;
|
||
},
|
||
|
||
whiten: function (ratio) {
|
||
var hwb = this.values.hwb;
|
||
hwb[1] += hwb[1] * ratio;
|
||
this.setValues('hwb', hwb);
|
||
return this;
|
||
},
|
||
|
||
blacken: function (ratio) {
|
||
var hwb = this.values.hwb;
|
||
hwb[2] += hwb[2] * ratio;
|
||
this.setValues('hwb', hwb);
|
||
return this;
|
||
},
|
||
|
||
greyscale: function () {
|
||
var rgb = this.values.rgb;
|
||
// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
|
||
var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;
|
||
this.setValues('rgb', [val, val, val]);
|
||
return this;
|
||
},
|
||
|
||
clearer: function (ratio) {
|
||
var alpha = this.values.alpha;
|
||
this.setValues('alpha', alpha - (alpha * ratio));
|
||
return this;
|
||
},
|
||
|
||
opaquer: function (ratio) {
|
||
var alpha = this.values.alpha;
|
||
this.setValues('alpha', alpha + (alpha * ratio));
|
||
return this;
|
||
},
|
||
|
||
rotate: function (degrees) {
|
||
var hsl = this.values.hsl;
|
||
var hue = (hsl[0] + degrees) % 360;
|
||
hsl[0] = hue < 0 ? 360 + hue : hue;
|
||
this.setValues('hsl', hsl);
|
||
return this;
|
||
},
|
||
|
||
/**
|
||
* Ported from sass implementation in C
|
||
* https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209
|
||
*/
|
||
mix: function (mixinColor, weight) {
|
||
var color1 = this;
|
||
var color2 = mixinColor;
|
||
var p = weight === undefined ? 0.5 : weight;
|
||
|
||
var w = 2 * p - 1;
|
||
var a = color1.alpha() - color2.alpha();
|
||
|
||
var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
|
||
var w2 = 1 - w1;
|
||
|
||
return this
|
||
.rgb(
|
||
w1 * color1.red() + w2 * color2.red(),
|
||
w1 * color1.green() + w2 * color2.green(),
|
||
w1 * color1.blue() + w2 * color2.blue()
|
||
)
|
||
.alpha(color1.alpha() * p + color2.alpha() * (1 - p));
|
||
},
|
||
|
||
toJSON: function () {
|
||
return this.rgb();
|
||
},
|
||
|
||
clone: function () {
|
||
// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,
|
||
// making the final build way to big to embed in Chart.js. So let's do it manually,
|
||
// assuming that values to clone are 1 dimension arrays containing only numbers,
|
||
// except 'alpha' which is a number.
|
||
var result = new Color();
|
||
var source = this.values;
|
||
var target = result.values;
|
||
var value, type;
|
||
|
||
for (var prop in source) {
|
||
if (source.hasOwnProperty(prop)) {
|
||
value = source[prop];
|
||
type = ({}).toString.call(value);
|
||
if (type === '[object Array]') {
|
||
target[prop] = value.slice(0);
|
||
} else if (type === '[object Number]') {
|
||
target[prop] = value;
|
||
} else {
|
||
console.error('unexpected color value:', value);
|
||
}
|
||
}
|
||
}
|
||
|
||
return result;
|
||
}
|
||
};
|
||
|
||
Color.prototype.spaces = {
|
||
rgb: ['red', 'green', 'blue'],
|
||
hsl: ['hue', 'saturation', 'lightness'],
|
||
hsv: ['hue', 'saturation', 'value'],
|
||
hwb: ['hue', 'whiteness', 'blackness'],
|
||
cmyk: ['cyan', 'magenta', 'yellow', 'black']
|
||
};
|
||
|
||
Color.prototype.maxes = {
|
||
rgb: [255, 255, 255],
|
||
hsl: [360, 100, 100],
|
||
hsv: [360, 100, 100],
|
||
hwb: [360, 100, 100],
|
||
cmyk: [100, 100, 100, 100]
|
||
};
|
||
|
||
Color.prototype.getValues = function (space) {
|
||
var values = this.values;
|
||
var vals = {};
|
||
|
||
for (var i = 0; i < space.length; i++) {
|
||
vals[space.charAt(i)] = values[space][i];
|
||
}
|
||
|
||
if (values.alpha !== 1) {
|
||
vals.a = values.alpha;
|
||
}
|
||
|
||
// {r: 255, g: 255, b: 255, a: 0.4}
|
||
return vals;
|
||
};
|
||
|
||
Color.prototype.setValues = function (space, vals) {
|
||
var values = this.values;
|
||
var spaces = this.spaces;
|
||
var maxes = this.maxes;
|
||
var alpha = 1;
|
||
var i;
|
||
|
||
if (space === 'alpha') {
|
||
alpha = vals;
|
||
} else if (vals.length) {
|
||
// [10, 10, 10]
|
||
values[space] = vals.slice(0, space.length);
|
||
alpha = vals[space.length];
|
||
} else if (vals[space.charAt(0)] !== undefined) {
|
||
// {r: 10, g: 10, b: 10}
|
||
for (i = 0; i < space.length; i++) {
|
||
values[space][i] = vals[space.charAt(i)];
|
||
}
|
||
|
||
alpha = vals.a;
|
||
} else if (vals[spaces[space][0]] !== undefined) {
|
||
// {red: 10, green: 10, blue: 10}
|
||
var chans = spaces[space];
|
||
|
||
for (i = 0; i < space.length; i++) {
|
||
values[space][i] = vals[chans[i]];
|
||
}
|
||
|
||
alpha = vals.alpha;
|
||
}
|
||
|
||
values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));
|
||
|
||
if (space === 'alpha') {
|
||
return false;
|
||
}
|
||
|
||
var capped;
|
||
|
||
// cap values of the space prior converting all values
|
||
for (i = 0; i < space.length; i++) {
|
||
capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));
|
||
values[space][i] = Math.round(capped);
|
||
}
|
||
|
||
// convert to all the other color spaces
|
||
for (var sname in spaces) {
|
||
if (sname !== space) {
|
||
values[sname] = convert[space][sname](values[space]);
|
||
}
|
||
}
|
||
|
||
return true;
|
||
};
|
||
|
||
Color.prototype.setSpace = function (space, args) {
|
||
var vals = args[0];
|
||
|
||
if (vals === undefined) {
|
||
// color.rgb()
|
||
return this.getValues(space);
|
||
}
|
||
|
||
// color.rgb(10, 10, 10)
|
||
if (typeof vals === 'number') {
|
||
vals = Array.prototype.slice.call(args);
|
||
}
|
||
|
||
this.setValues(space, vals);
|
||
return this;
|
||
};
|
||
|
||
Color.prototype.setChannel = function (space, index, val) {
|
||
var svalues = this.values[space];
|
||
if (val === undefined) {
|
||
// color.red()
|
||
return svalues[index];
|
||
} else if (val === svalues[index]) {
|
||
// color.red(color.red())
|
||
return this;
|
||
}
|
||
|
||
// color.red(100)
|
||
svalues[index] = val;
|
||
this.setValues(space, svalues);
|
||
|
||
return this;
|
||
};
|
||
|
||
if (typeof window !== 'undefined') {
|
||
window.Color = Color;
|
||
}
|
||
|
||
module.exports = Color;
|
||
|
||
|
||
/***/ },
|
||
/* 8 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var conversions = __webpack_require__(9);
|
||
|
||
var convert = function() {
|
||
return new Converter();
|
||
}
|
||
|
||
for (var func in conversions) {
|
||
// export Raw versions
|
||
convert[func + "Raw"] = (function(func) {
|
||
// accept array or plain args
|
||
return function(arg) {
|
||
if (typeof arg == "number")
|
||
arg = Array.prototype.slice.call(arguments);
|
||
return conversions[func](arg);
|
||
}
|
||
})(func);
|
||
|
||
var pair = /(\w+)2(\w+)/.exec(func),
|
||
from = pair[1],
|
||
to = pair[2];
|
||
|
||
// export rgb2hsl and ["rgb"]["hsl"]
|
||
convert[from] = convert[from] || {};
|
||
|
||
convert[from][to] = convert[func] = (function(func) {
|
||
return function(arg) {
|
||
if (typeof arg == "number")
|
||
arg = Array.prototype.slice.call(arguments);
|
||
|
||
var val = conversions[func](arg);
|
||
if (typeof val == "string" || val === undefined)
|
||
return val; // keyword
|
||
|
||
for (var i = 0; i < val.length; i++)
|
||
val[i] = Math.round(val[i]);
|
||
return val;
|
||
}
|
||
})(func);
|
||
}
|
||
|
||
|
||
/* Converter does lazy conversion and caching */
|
||
var Converter = function() {
|
||
this.convs = {};
|
||
};
|
||
|
||
/* Either get the values for a space or
|
||
set the values for a space, depending on args */
|
||
Converter.prototype.routeSpace = function(space, args) {
|
||
var values = args[0];
|
||
if (values === undefined) {
|
||
// color.rgb()
|
||
return this.getValues(space);
|
||
}
|
||
// color.rgb(10, 10, 10)
|
||
if (typeof values == "number") {
|
||
values = Array.prototype.slice.call(args);
|
||
}
|
||
|
||
return this.setValues(space, values);
|
||
};
|
||
|
||
/* Set the values for a space, invalidating cache */
|
||
Converter.prototype.setValues = function(space, values) {
|
||
this.space = space;
|
||
this.convs = {};
|
||
this.convs[space] = values;
|
||
return this;
|
||
};
|
||
|
||
/* Get the values for a space. If there's already
|
||
a conversion for the space, fetch it, otherwise
|
||
compute it */
|
||
Converter.prototype.getValues = function(space) {
|
||
var vals = this.convs[space];
|
||
if (!vals) {
|
||
var fspace = this.space,
|
||
from = this.convs[fspace];
|
||
vals = convert[fspace][space](from);
|
||
|
||
this.convs[space] = vals;
|
||
}
|
||
return vals;
|
||
};
|
||
|
||
["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function(space) {
|
||
Converter.prototype[space] = function(vals) {
|
||
return this.routeSpace(space, arguments);
|
||
}
|
||
});
|
||
|
||
module.exports = convert;
|
||
|
||
/***/ },
|
||
/* 9 */
|
||
/***/ function(module, exports) {
|
||
|
||
/* MIT license */
|
||
|
||
module.exports = {
|
||
rgb2hsl: rgb2hsl,
|
||
rgb2hsv: rgb2hsv,
|
||
rgb2hwb: rgb2hwb,
|
||
rgb2cmyk: rgb2cmyk,
|
||
rgb2keyword: rgb2keyword,
|
||
rgb2xyz: rgb2xyz,
|
||
rgb2lab: rgb2lab,
|
||
rgb2lch: rgb2lch,
|
||
|
||
hsl2rgb: hsl2rgb,
|
||
hsl2hsv: hsl2hsv,
|
||
hsl2hwb: hsl2hwb,
|
||
hsl2cmyk: hsl2cmyk,
|
||
hsl2keyword: hsl2keyword,
|
||
|
||
hsv2rgb: hsv2rgb,
|
||
hsv2hsl: hsv2hsl,
|
||
hsv2hwb: hsv2hwb,
|
||
hsv2cmyk: hsv2cmyk,
|
||
hsv2keyword: hsv2keyword,
|
||
|
||
hwb2rgb: hwb2rgb,
|
||
hwb2hsl: hwb2hsl,
|
||
hwb2hsv: hwb2hsv,
|
||
hwb2cmyk: hwb2cmyk,
|
||
hwb2keyword: hwb2keyword,
|
||
|
||
cmyk2rgb: cmyk2rgb,
|
||
cmyk2hsl: cmyk2hsl,
|
||
cmyk2hsv: cmyk2hsv,
|
||
cmyk2hwb: cmyk2hwb,
|
||
cmyk2keyword: cmyk2keyword,
|
||
|
||
keyword2rgb: keyword2rgb,
|
||
keyword2hsl: keyword2hsl,
|
||
keyword2hsv: keyword2hsv,
|
||
keyword2hwb: keyword2hwb,
|
||
keyword2cmyk: keyword2cmyk,
|
||
keyword2lab: keyword2lab,
|
||
keyword2xyz: keyword2xyz,
|
||
|
||
xyz2rgb: xyz2rgb,
|
||
xyz2lab: xyz2lab,
|
||
xyz2lch: xyz2lch,
|
||
|
||
lab2xyz: lab2xyz,
|
||
lab2rgb: lab2rgb,
|
||
lab2lch: lab2lch,
|
||
|
||
lch2lab: lch2lab,
|
||
lch2xyz: lch2xyz,
|
||
lch2rgb: lch2rgb
|
||
}
|
||
|
||
|
||
function rgb2hsl(rgb) {
|
||
var r = rgb[0]/255,
|
||
g = rgb[1]/255,
|
||
b = rgb[2]/255,
|
||
min = Math.min(r, g, b),
|
||
max = Math.max(r, g, b),
|
||
delta = max - min,
|
||
h, s, l;
|
||
|
||
if (max == min)
|
||
h = 0;
|
||
else if (r == max)
|
||
h = (g - b) / delta;
|
||
else if (g == max)
|
||
h = 2 + (b - r) / delta;
|
||
else if (b == max)
|
||
h = 4 + (r - g)/ delta;
|
||
|
||
h = Math.min(h * 60, 360);
|
||
|
||
if (h < 0)
|
||
h += 360;
|
||
|
||
l = (min + max) / 2;
|
||
|
||
if (max == min)
|
||
s = 0;
|
||
else if (l <= 0.5)
|
||
s = delta / (max + min);
|
||
else
|
||
s = delta / (2 - max - min);
|
||
|
||
return [h, s * 100, l * 100];
|
||
}
|
||
|
||
function rgb2hsv(rgb) {
|
||
var r = rgb[0],
|
||
g = rgb[1],
|
||
b = rgb[2],
|
||
min = Math.min(r, g, b),
|
||
max = Math.max(r, g, b),
|
||
delta = max - min,
|
||
h, s, v;
|
||
|
||
if (max == 0)
|
||
s = 0;
|
||
else
|
||
s = (delta/max * 1000)/10;
|
||
|
||
if (max == min)
|
||
h = 0;
|
||
else if (r == max)
|
||
h = (g - b) / delta;
|
||
else if (g == max)
|
||
h = 2 + (b - r) / delta;
|
||
else if (b == max)
|
||
h = 4 + (r - g) / delta;
|
||
|
||
h = Math.min(h * 60, 360);
|
||
|
||
if (h < 0)
|
||
h += 360;
|
||
|
||
v = ((max / 255) * 1000) / 10;
|
||
|
||
return [h, s, v];
|
||
}
|
||
|
||
function rgb2hwb(rgb) {
|
||
var r = rgb[0],
|
||
g = rgb[1],
|
||
b = rgb[2],
|
||
h = rgb2hsl(rgb)[0],
|
||
w = 1/255 * Math.min(r, Math.min(g, b)),
|
||
b = 1 - 1/255 * Math.max(r, Math.max(g, b));
|
||
|
||
return [h, w * 100, b * 100];
|
||
}
|
||
|
||
function rgb2cmyk(rgb) {
|
||
var r = rgb[0] / 255,
|
||
g = rgb[1] / 255,
|
||
b = rgb[2] / 255,
|
||
c, m, y, k;
|
||
|
||
k = Math.min(1 - r, 1 - g, 1 - b);
|
||
c = (1 - r - k) / (1 - k) || 0;
|
||
m = (1 - g - k) / (1 - k) || 0;
|
||
y = (1 - b - k) / (1 - k) || 0;
|
||
return [c * 100, m * 100, y * 100, k * 100];
|
||
}
|
||
|
||
function rgb2keyword(rgb) {
|
||
return reverseKeywords[JSON.stringify(rgb)];
|
||
}
|
||
|
||
function rgb2xyz(rgb) {
|
||
var r = rgb[0] / 255,
|
||
g = rgb[1] / 255,
|
||
b = rgb[2] / 255;
|
||
|
||
// assume sRGB
|
||
r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
|
||
g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
|
||
b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
|
||
|
||
var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
|
||
var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
|
||
var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
|
||
|
||
return [x * 100, y *100, z * 100];
|
||
}
|
||
|
||
function rgb2lab(rgb) {
|
||
var xyz = rgb2xyz(rgb),
|
||
x = xyz[0],
|
||
y = xyz[1],
|
||
z = xyz[2],
|
||
l, a, b;
|
||
|
||
x /= 95.047;
|
||
y /= 100;
|
||
z /= 108.883;
|
||
|
||
x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);
|
||
y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);
|
||
z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);
|
||
|
||
l = (116 * y) - 16;
|
||
a = 500 * (x - y);
|
||
b = 200 * (y - z);
|
||
|
||
return [l, a, b];
|
||
}
|
||
|
||
function rgb2lch(args) {
|
||
return lab2lch(rgb2lab(args));
|
||
}
|
||
|
||
function hsl2rgb(hsl) {
|
||
var h = hsl[0] / 360,
|
||
s = hsl[1] / 100,
|
||
l = hsl[2] / 100,
|
||
t1, t2, t3, rgb, val;
|
||
|
||
if (s == 0) {
|
||
val = l * 255;
|
||
return [val, val, val];
|
||
}
|
||
|
||
if (l < 0.5)
|
||
t2 = l * (1 + s);
|
||
else
|
||
t2 = l + s - l * s;
|
||
t1 = 2 * l - t2;
|
||
|
||
rgb = [0, 0, 0];
|
||
for (var i = 0; i < 3; i++) {
|
||
t3 = h + 1 / 3 * - (i - 1);
|
||
t3 < 0 && t3++;
|
||
t3 > 1 && t3--;
|
||
|
||
if (6 * t3 < 1)
|
||
val = t1 + (t2 - t1) * 6 * t3;
|
||
else if (2 * t3 < 1)
|
||
val = t2;
|
||
else if (3 * t3 < 2)
|
||
val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
|
||
else
|
||
val = t1;
|
||
|
||
rgb[i] = val * 255;
|
||
}
|
||
|
||
return rgb;
|
||
}
|
||
|
||
function hsl2hsv(hsl) {
|
||
var h = hsl[0],
|
||
s = hsl[1] / 100,
|
||
l = hsl[2] / 100,
|
||
sv, v;
|
||
|
||
if(l === 0) {
|
||
// no need to do calc on black
|
||
// also avoids divide by 0 error
|
||
return [0, 0, 0];
|
||
}
|
||
|
||
l *= 2;
|
||
s *= (l <= 1) ? l : 2 - l;
|
||
v = (l + s) / 2;
|
||
sv = (2 * s) / (l + s);
|
||
return [h, sv * 100, v * 100];
|
||
}
|
||
|
||
function hsl2hwb(args) {
|
||
return rgb2hwb(hsl2rgb(args));
|
||
}
|
||
|
||
function hsl2cmyk(args) {
|
||
return rgb2cmyk(hsl2rgb(args));
|
||
}
|
||
|
||
function hsl2keyword(args) {
|
||
return rgb2keyword(hsl2rgb(args));
|
||
}
|
||
|
||
|
||
function hsv2rgb(hsv) {
|
||
var h = hsv[0] / 60,
|
||
s = hsv[1] / 100,
|
||
v = hsv[2] / 100,
|
||
hi = Math.floor(h) % 6;
|
||
|
||
var f = h - Math.floor(h),
|
||
p = 255 * v * (1 - s),
|
||
q = 255 * v * (1 - (s * f)),
|
||
t = 255 * v * (1 - (s * (1 - f))),
|
||
v = 255 * v;
|
||
|
||
switch(hi) {
|
||
case 0:
|
||
return [v, t, p];
|
||
case 1:
|
||
return [q, v, p];
|
||
case 2:
|
||
return [p, v, t];
|
||
case 3:
|
||
return [p, q, v];
|
||
case 4:
|
||
return [t, p, v];
|
||
case 5:
|
||
return [v, p, q];
|
||
}
|
||
}
|
||
|
||
function hsv2hsl(hsv) {
|
||
var h = hsv[0],
|
||
s = hsv[1] / 100,
|
||
v = hsv[2] / 100,
|
||
sl, l;
|
||
|
||
l = (2 - s) * v;
|
||
sl = s * v;
|
||
sl /= (l <= 1) ? l : 2 - l;
|
||
sl = sl || 0;
|
||
l /= 2;
|
||
return [h, sl * 100, l * 100];
|
||
}
|
||
|
||
function hsv2hwb(args) {
|
||
return rgb2hwb(hsv2rgb(args))
|
||
}
|
||
|
||
function hsv2cmyk(args) {
|
||
return rgb2cmyk(hsv2rgb(args));
|
||
}
|
||
|
||
function hsv2keyword(args) {
|
||
return rgb2keyword(hsv2rgb(args));
|
||
}
|
||
|
||
// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
|
||
function hwb2rgb(hwb) {
|
||
var h = hwb[0] / 360,
|
||
wh = hwb[1] / 100,
|
||
bl = hwb[2] / 100,
|
||
ratio = wh + bl,
|
||
i, v, f, n;
|
||
|
||
// wh + bl cant be > 1
|
||
if (ratio > 1) {
|
||
wh /= ratio;
|
||
bl /= ratio;
|
||
}
|
||
|
||
i = Math.floor(6 * h);
|
||
v = 1 - bl;
|
||
f = 6 * h - i;
|
||
if ((i & 0x01) != 0) {
|
||
f = 1 - f;
|
||
}
|
||
n = wh + f * (v - wh); // linear interpolation
|
||
|
||
switch (i) {
|
||
default:
|
||
case 6:
|
||
case 0: r = v; g = n; b = wh; break;
|
||
case 1: r = n; g = v; b = wh; break;
|
||
case 2: r = wh; g = v; b = n; break;
|
||
case 3: r = wh; g = n; b = v; break;
|
||
case 4: r = n; g = wh; b = v; break;
|
||
case 5: r = v; g = wh; b = n; break;
|
||
}
|
||
|
||
return [r * 255, g * 255, b * 255];
|
||
}
|
||
|
||
function hwb2hsl(args) {
|
||
return rgb2hsl(hwb2rgb(args));
|
||
}
|
||
|
||
function hwb2hsv(args) {
|
||
return rgb2hsv(hwb2rgb(args));
|
||
}
|
||
|
||
function hwb2cmyk(args) {
|
||
return rgb2cmyk(hwb2rgb(args));
|
||
}
|
||
|
||
function hwb2keyword(args) {
|
||
return rgb2keyword(hwb2rgb(args));
|
||
}
|
||
|
||
function cmyk2rgb(cmyk) {
|
||
var c = cmyk[0] / 100,
|
||
m = cmyk[1] / 100,
|
||
y = cmyk[2] / 100,
|
||
k = cmyk[3] / 100,
|
||
r, g, b;
|
||
|
||
r = 1 - Math.min(1, c * (1 - k) + k);
|
||
g = 1 - Math.min(1, m * (1 - k) + k);
|
||
b = 1 - Math.min(1, y * (1 - k) + k);
|
||
return [r * 255, g * 255, b * 255];
|
||
}
|
||
|
||
function cmyk2hsl(args) {
|
||
return rgb2hsl(cmyk2rgb(args));
|
||
}
|
||
|
||
function cmyk2hsv(args) {
|
||
return rgb2hsv(cmyk2rgb(args));
|
||
}
|
||
|
||
function cmyk2hwb(args) {
|
||
return rgb2hwb(cmyk2rgb(args));
|
||
}
|
||
|
||
function cmyk2keyword(args) {
|
||
return rgb2keyword(cmyk2rgb(args));
|
||
}
|
||
|
||
|
||
function xyz2rgb(xyz) {
|
||
var x = xyz[0] / 100,
|
||
y = xyz[1] / 100,
|
||
z = xyz[2] / 100,
|
||
r, g, b;
|
||
|
||
r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
|
||
g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
|
||
b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
|
||
|
||
// assume sRGB
|
||
r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
|
||
: r = (r * 12.92);
|
||
|
||
g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
|
||
: g = (g * 12.92);
|
||
|
||
b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
|
||
: b = (b * 12.92);
|
||
|
||
r = Math.min(Math.max(0, r), 1);
|
||
g = Math.min(Math.max(0, g), 1);
|
||
b = Math.min(Math.max(0, b), 1);
|
||
|
||
return [r * 255, g * 255, b * 255];
|
||
}
|
||
|
||
function xyz2lab(xyz) {
|
||
var x = xyz[0],
|
||
y = xyz[1],
|
||
z = xyz[2],
|
||
l, a, b;
|
||
|
||
x /= 95.047;
|
||
y /= 100;
|
||
z /= 108.883;
|
||
|
||
x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);
|
||
y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);
|
||
z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);
|
||
|
||
l = (116 * y) - 16;
|
||
a = 500 * (x - y);
|
||
b = 200 * (y - z);
|
||
|
||
return [l, a, b];
|
||
}
|
||
|
||
function xyz2lch(args) {
|
||
return lab2lch(xyz2lab(args));
|
||
}
|
||
|
||
function lab2xyz(lab) {
|
||
var l = lab[0],
|
||
a = lab[1],
|
||
b = lab[2],
|
||
x, y, z, y2;
|
||
|
||
if (l <= 8) {
|
||
y = (l * 100) / 903.3;
|
||
y2 = (7.787 * (y / 100)) + (16 / 116);
|
||
} else {
|
||
y = 100 * Math.pow((l + 16) / 116, 3);
|
||
y2 = Math.pow(y / 100, 1/3);
|
||
}
|
||
|
||
x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);
|
||
|
||
z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);
|
||
|
||
return [x, y, z];
|
||
}
|
||
|
||
function lab2lch(lab) {
|
||
var l = lab[0],
|
||
a = lab[1],
|
||
b = lab[2],
|
||
hr, h, c;
|
||
|
||
hr = Math.atan2(b, a);
|
||
h = hr * 360 / 2 / Math.PI;
|
||
if (h < 0) {
|
||
h += 360;
|
||
}
|
||
c = Math.sqrt(a * a + b * b);
|
||
return [l, c, h];
|
||
}
|
||
|
||
function lab2rgb(args) {
|
||
return xyz2rgb(lab2xyz(args));
|
||
}
|
||
|
||
function lch2lab(lch) {
|
||
var l = lch[0],
|
||
c = lch[1],
|
||
h = lch[2],
|
||
a, b, hr;
|
||
|
||
hr = h / 360 * 2 * Math.PI;
|
||
a = c * Math.cos(hr);
|
||
b = c * Math.sin(hr);
|
||
return [l, a, b];
|
||
}
|
||
|
||
function lch2xyz(args) {
|
||
return lab2xyz(lch2lab(args));
|
||
}
|
||
|
||
function lch2rgb(args) {
|
||
return lab2rgb(lch2lab(args));
|
||
}
|
||
|
||
function keyword2rgb(keyword) {
|
||
return cssKeywords[keyword];
|
||
}
|
||
|
||
function keyword2hsl(args) {
|
||
return rgb2hsl(keyword2rgb(args));
|
||
}
|
||
|
||
function keyword2hsv(args) {
|
||
return rgb2hsv(keyword2rgb(args));
|
||
}
|
||
|
||
function keyword2hwb(args) {
|
||
return rgb2hwb(keyword2rgb(args));
|
||
}
|
||
|
||
function keyword2cmyk(args) {
|
||
return rgb2cmyk(keyword2rgb(args));
|
||
}
|
||
|
||
function keyword2lab(args) {
|
||
return rgb2lab(keyword2rgb(args));
|
||
}
|
||
|
||
function keyword2xyz(args) {
|
||
return rgb2xyz(keyword2rgb(args));
|
||
}
|
||
|
||
var cssKeywords = {
|
||
aliceblue: [240,248,255],
|
||
antiquewhite: [250,235,215],
|
||
aqua: [0,255,255],
|
||
aquamarine: [127,255,212],
|
||
azure: [240,255,255],
|
||
beige: [245,245,220],
|
||
bisque: [255,228,196],
|
||
black: [0,0,0],
|
||
blanchedalmond: [255,235,205],
|
||
blue: [0,0,255],
|
||
blueviolet: [138,43,226],
|
||
brown: [165,42,42],
|
||
burlywood: [222,184,135],
|
||
cadetblue: [95,158,160],
|
||
chartreuse: [127,255,0],
|
||
chocolate: [210,105,30],
|
||
coral: [255,127,80],
|
||
cornflowerblue: [100,149,237],
|
||
cornsilk: [255,248,220],
|
||
crimson: [220,20,60],
|
||
cyan: [0,255,255],
|
||
darkblue: [0,0,139],
|
||
darkcyan: [0,139,139],
|
||
darkgoldenrod: [184,134,11],
|
||
darkgray: [169,169,169],
|
||
darkgreen: [0,100,0],
|
||
darkgrey: [169,169,169],
|
||
darkkhaki: [189,183,107],
|
||
darkmagenta: [139,0,139],
|
||
darkolivegreen: [85,107,47],
|
||
darkorange: [255,140,0],
|
||
darkorchid: [153,50,204],
|
||
darkred: [139,0,0],
|
||
darksalmon: [233,150,122],
|
||
darkseagreen: [143,188,143],
|
||
darkslateblue: [72,61,139],
|
||
darkslategray: [47,79,79],
|
||
darkslategrey: [47,79,79],
|
||
darkturquoise: [0,206,209],
|
||
darkviolet: [148,0,211],
|
||
deeppink: [255,20,147],
|
||
deepskyblue: [0,191,255],
|
||
dimgray: [105,105,105],
|
||
dimgrey: [105,105,105],
|
||
dodgerblue: [30,144,255],
|
||
firebrick: [178,34,34],
|
||
floralwhite: [255,250,240],
|
||
forestgreen: [34,139,34],
|
||
fuchsia: [255,0,255],
|
||
gainsboro: [220,220,220],
|
||
ghostwhite: [248,248,255],
|
||
gold: [255,215,0],
|
||
goldenrod: [218,165,32],
|
||
gray: [128,128,128],
|
||
green: [0,128,0],
|
||
greenyellow: [173,255,47],
|
||
grey: [128,128,128],
|
||
honeydew: [240,255,240],
|
||
hotpink: [255,105,180],
|
||
indianred: [205,92,92],
|
||
indigo: [75,0,130],
|
||
ivory: [255,255,240],
|
||
khaki: [240,230,140],
|
||
lavender: [230,230,250],
|
||
lavenderblush: [255,240,245],
|
||
lawngreen: [124,252,0],
|
||
lemonchiffon: [255,250,205],
|
||
lightblue: [173,216,230],
|
||
lightcoral: [240,128,128],
|
||
lightcyan: [224,255,255],
|
||
lightgoldenrodyellow: [250,250,210],
|
||
lightgray: [211,211,211],
|
||
lightgreen: [144,238,144],
|
||
lightgrey: [211,211,211],
|
||
lightpink: [255,182,193],
|
||
lightsalmon: [255,160,122],
|
||
lightseagreen: [32,178,170],
|
||
lightskyblue: [135,206,250],
|
||
lightslategray: [119,136,153],
|
||
lightslategrey: [119,136,153],
|
||
lightsteelblue: [176,196,222],
|
||
lightyellow: [255,255,224],
|
||
lime: [0,255,0],
|
||
limegreen: [50,205,50],
|
||
linen: [250,240,230],
|
||
magenta: [255,0,255],
|
||
maroon: [128,0,0],
|
||
mediumaquamarine: [102,205,170],
|
||
mediumblue: [0,0,205],
|
||
mediumorchid: [186,85,211],
|
||
mediumpurple: [147,112,219],
|
||
mediumseagreen: [60,179,113],
|
||
mediumslateblue: [123,104,238],
|
||
mediumspringgreen: [0,250,154],
|
||
mediumturquoise: [72,209,204],
|
||
mediumvioletred: [199,21,133],
|
||
midnightblue: [25,25,112],
|
||
mintcream: [245,255,250],
|
||
mistyrose: [255,228,225],
|
||
moccasin: [255,228,181],
|
||
navajowhite: [255,222,173],
|
||
navy: [0,0,128],
|
||
oldlace: [253,245,230],
|
||
olive: [128,128,0],
|
||
olivedrab: [107,142,35],
|
||
orange: [255,165,0],
|
||
orangered: [255,69,0],
|
||
orchid: [218,112,214],
|
||
palegoldenrod: [238,232,170],
|
||
palegreen: [152,251,152],
|
||
paleturquoise: [175,238,238],
|
||
palevioletred: [219,112,147],
|
||
papayawhip: [255,239,213],
|
||
peachpuff: [255,218,185],
|
||
peru: [205,133,63],
|
||
pink: [255,192,203],
|
||
plum: [221,160,221],
|
||
powderblue: [176,224,230],
|
||
purple: [128,0,128],
|
||
rebeccapurple: [102, 51, 153],
|
||
red: [255,0,0],
|
||
rosybrown: [188,143,143],
|
||
royalblue: [65,105,225],
|
||
saddlebrown: [139,69,19],
|
||
salmon: [250,128,114],
|
||
sandybrown: [244,164,96],
|
||
seagreen: [46,139,87],
|
||
seashell: [255,245,238],
|
||
sienna: [160,82,45],
|
||
silver: [192,192,192],
|
||
skyblue: [135,206,235],
|
||
slateblue: [106,90,205],
|
||
slategray: [112,128,144],
|
||
slategrey: [112,128,144],
|
||
snow: [255,250,250],
|
||
springgreen: [0,255,127],
|
||
steelblue: [70,130,180],
|
||
tan: [210,180,140],
|
||
teal: [0,128,128],
|
||
thistle: [216,191,216],
|
||
tomato: [255,99,71],
|
||
turquoise: [64,224,208],
|
||
violet: [238,130,238],
|
||
wheat: [245,222,179],
|
||
white: [255,255,255],
|
||
whitesmoke: [245,245,245],
|
||
yellow: [255,255,0],
|
||
yellowgreen: [154,205,50]
|
||
};
|
||
|
||
var reverseKeywords = {};
|
||
for (var key in cssKeywords) {
|
||
reverseKeywords[JSON.stringify(cssKeywords[key])] = key;
|
||
}
|
||
|
||
|
||
/***/ },
|
||
/* 10 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/* MIT license */
|
||
var colorNames = __webpack_require__(11);
|
||
|
||
module.exports = {
|
||
getRgba: getRgba,
|
||
getHsla: getHsla,
|
||
getRgb: getRgb,
|
||
getHsl: getHsl,
|
||
getHwb: getHwb,
|
||
getAlpha: getAlpha,
|
||
|
||
hexString: hexString,
|
||
rgbString: rgbString,
|
||
rgbaString: rgbaString,
|
||
percentString: percentString,
|
||
percentaString: percentaString,
|
||
hslString: hslString,
|
||
hslaString: hslaString,
|
||
hwbString: hwbString,
|
||
keyword: keyword
|
||
}
|
||
|
||
function getRgba(string) {
|
||
if (!string) {
|
||
return;
|
||
}
|
||
var abbr = /^#([a-fA-F0-9]{3})$/,
|
||
hex = /^#([a-fA-F0-9]{6})$/,
|
||
rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,
|
||
per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,
|
||
keyword = /(\w+)/;
|
||
|
||
var rgb = [0, 0, 0],
|
||
a = 1,
|
||
match = string.match(abbr);
|
||
if (match) {
|
||
match = match[1];
|
||
for (var i = 0; i < rgb.length; i++) {
|
||
rgb[i] = parseInt(match[i] + match[i], 16);
|
||
}
|
||
}
|
||
else if (match = string.match(hex)) {
|
||
match = match[1];
|
||
for (var i = 0; i < rgb.length; i++) {
|
||
rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);
|
||
}
|
||
}
|
||
else if (match = string.match(rgba)) {
|
||
for (var i = 0; i < rgb.length; i++) {
|
||
rgb[i] = parseInt(match[i + 1]);
|
||
}
|
||
a = parseFloat(match[4]);
|
||
}
|
||
else if (match = string.match(per)) {
|
||
for (var i = 0; i < rgb.length; i++) {
|
||
rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);
|
||
}
|
||
a = parseFloat(match[4]);
|
||
}
|
||
else if (match = string.match(keyword)) {
|
||
if (match[1] == "transparent") {
|
||
return [0, 0, 0, 0];
|
||
}
|
||
rgb = colorNames[match[1]];
|
||
if (!rgb) {
|
||
return;
|
||
}
|
||
}
|
||
|
||
for (var i = 0; i < rgb.length; i++) {
|
||
rgb[i] = scale(rgb[i], 0, 255);
|
||
}
|
||
if (!a && a != 0) {
|
||
a = 1;
|
||
}
|
||
else {
|
||
a = scale(a, 0, 1);
|
||
}
|
||
rgb[3] = a;
|
||
return rgb;
|
||
}
|
||
|
||
function getHsla(string) {
|
||
if (!string) {
|
||
return;
|
||
}
|
||
var hsl = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
|
||
var match = string.match(hsl);
|
||
if (match) {
|
||
var alpha = parseFloat(match[4]);
|
||
var h = scale(parseInt(match[1]), 0, 360),
|
||
s = scale(parseFloat(match[2]), 0, 100),
|
||
l = scale(parseFloat(match[3]), 0, 100),
|
||
a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
|
||
return [h, s, l, a];
|
||
}
|
||
}
|
||
|
||
function getHwb(string) {
|
||
if (!string) {
|
||
return;
|
||
}
|
||
var hwb = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
|
||
var match = string.match(hwb);
|
||
if (match) {
|
||
var alpha = parseFloat(match[4]);
|
||
var h = scale(parseInt(match[1]), 0, 360),
|
||
w = scale(parseFloat(match[2]), 0, 100),
|
||
b = scale(parseFloat(match[3]), 0, 100),
|
||
a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
|
||
return [h, w, b, a];
|
||
}
|
||
}
|
||
|
||
function getRgb(string) {
|
||
var rgba = getRgba(string);
|
||
return rgba && rgba.slice(0, 3);
|
||
}
|
||
|
||
function getHsl(string) {
|
||
var hsla = getHsla(string);
|
||
return hsla && hsla.slice(0, 3);
|
||
}
|
||
|
||
function getAlpha(string) {
|
||
var vals = getRgba(string);
|
||
if (vals) {
|
||
return vals[3];
|
||
}
|
||
else if (vals = getHsla(string)) {
|
||
return vals[3];
|
||
}
|
||
else if (vals = getHwb(string)) {
|
||
return vals[3];
|
||
}
|
||
}
|
||
|
||
// generators
|
||
function hexString(rgb) {
|
||
return "#" + hexDouble(rgb[0]) + hexDouble(rgb[1])
|
||
+ hexDouble(rgb[2]);
|
||
}
|
||
|
||
function rgbString(rgba, alpha) {
|
||
if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
|
||
return rgbaString(rgba, alpha);
|
||
}
|
||
return "rgb(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ")";
|
||
}
|
||
|
||
function rgbaString(rgba, alpha) {
|
||
if (alpha === undefined) {
|
||
alpha = (rgba[3] !== undefined ? rgba[3] : 1);
|
||
}
|
||
return "rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2]
|
||
+ ", " + alpha + ")";
|
||
}
|
||
|
||
function percentString(rgba, alpha) {
|
||
if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
|
||
return percentaString(rgba, alpha);
|
||
}
|
||
var r = Math.round(rgba[0]/255 * 100),
|
||
g = Math.round(rgba[1]/255 * 100),
|
||
b = Math.round(rgba[2]/255 * 100);
|
||
|
||
return "rgb(" + r + "%, " + g + "%, " + b + "%)";
|
||
}
|
||
|
||
function percentaString(rgba, alpha) {
|
||
var r = Math.round(rgba[0]/255 * 100),
|
||
g = Math.round(rgba[1]/255 * 100),
|
||
b = Math.round(rgba[2]/255 * 100);
|
||
return "rgba(" + r + "%, " + g + "%, " + b + "%, " + (alpha || rgba[3] || 1) + ")";
|
||
}
|
||
|
||
function hslString(hsla, alpha) {
|
||
if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {
|
||
return hslaString(hsla, alpha);
|
||
}
|
||
return "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)";
|
||
}
|
||
|
||
function hslaString(hsla, alpha) {
|
||
if (alpha === undefined) {
|
||
alpha = (hsla[3] !== undefined ? hsla[3] : 1);
|
||
}
|
||
return "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, "
|
||
+ alpha + ")";
|
||
}
|
||
|
||
// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax
|
||
// (hwb have alpha optional & 1 is default value)
|
||
function hwbString(hwb, alpha) {
|
||
if (alpha === undefined) {
|
||
alpha = (hwb[3] !== undefined ? hwb[3] : 1);
|
||
}
|
||
return "hwb(" + hwb[0] + ", " + hwb[1] + "%, " + hwb[2] + "%"
|
||
+ (alpha !== undefined && alpha !== 1 ? ", " + alpha : "") + ")";
|
||
}
|
||
|
||
function keyword(rgb) {
|
||
return reverseNames[rgb.slice(0, 3)];
|
||
}
|
||
|
||
// helpers
|
||
function scale(num, min, max) {
|
||
return Math.min(Math.max(min, num), max);
|
||
}
|
||
|
||
function hexDouble(num) {
|
||
var str = num.toString(16).toUpperCase();
|
||
return (str.length < 2) ? "0" + str : str;
|
||
}
|
||
|
||
|
||
//create a list of reverse color names
|
||
var reverseNames = {};
|
||
for (var name in colorNames) {
|
||
reverseNames[colorNames[name]] = name;
|
||
}
|
||
|
||
|
||
/***/ },
|
||
/* 11 */
|
||
/***/ function(module, exports) {
|
||
|
||
module.exports = {
|
||
"aliceblue": [240, 248, 255],
|
||
"antiquewhite": [250, 235, 215],
|
||
"aqua": [0, 255, 255],
|
||
"aquamarine": [127, 255, 212],
|
||
"azure": [240, 255, 255],
|
||
"beige": [245, 245, 220],
|
||
"bisque": [255, 228, 196],
|
||
"black": [0, 0, 0],
|
||
"blanchedalmond": [255, 235, 205],
|
||
"blue": [0, 0, 255],
|
||
"blueviolet": [138, 43, 226],
|
||
"brown": [165, 42, 42],
|
||
"burlywood": [222, 184, 135],
|
||
"cadetblue": [95, 158, 160],
|
||
"chartreuse": [127, 255, 0],
|
||
"chocolate": [210, 105, 30],
|
||
"coral": [255, 127, 80],
|
||
"cornflowerblue": [100, 149, 237],
|
||
"cornsilk": [255, 248, 220],
|
||
"crimson": [220, 20, 60],
|
||
"cyan": [0, 255, 255],
|
||
"darkblue": [0, 0, 139],
|
||
"darkcyan": [0, 139, 139],
|
||
"darkgoldenrod": [184, 134, 11],
|
||
"darkgray": [169, 169, 169],
|
||
"darkgreen": [0, 100, 0],
|
||
"darkgrey": [169, 169, 169],
|
||
"darkkhaki": [189, 183, 107],
|
||
"darkmagenta": [139, 0, 139],
|
||
"darkolivegreen": [85, 107, 47],
|
||
"darkorange": [255, 140, 0],
|
||
"darkorchid": [153, 50, 204],
|
||
"darkred": [139, 0, 0],
|
||
"darksalmon": [233, 150, 122],
|
||
"darkseagreen": [143, 188, 143],
|
||
"darkslateblue": [72, 61, 139],
|
||
"darkslategray": [47, 79, 79],
|
||
"darkslategrey": [47, 79, 79],
|
||
"darkturquoise": [0, 206, 209],
|
||
"darkviolet": [148, 0, 211],
|
||
"deeppink": [255, 20, 147],
|
||
"deepskyblue": [0, 191, 255],
|
||
"dimgray": [105, 105, 105],
|
||
"dimgrey": [105, 105, 105],
|
||
"dodgerblue": [30, 144, 255],
|
||
"firebrick": [178, 34, 34],
|
||
"floralwhite": [255, 250, 240],
|
||
"forestgreen": [34, 139, 34],
|
||
"fuchsia": [255, 0, 255],
|
||
"gainsboro": [220, 220, 220],
|
||
"ghostwhite": [248, 248, 255],
|
||
"gold": [255, 215, 0],
|
||
"goldenrod": [218, 165, 32],
|
||
"gray": [128, 128, 128],
|
||
"green": [0, 128, 0],
|
||
"greenyellow": [173, 255, 47],
|
||
"grey": [128, 128, 128],
|
||
"honeydew": [240, 255, 240],
|
||
"hotpink": [255, 105, 180],
|
||
"indianred": [205, 92, 92],
|
||
"indigo": [75, 0, 130],
|
||
"ivory": [255, 255, 240],
|
||
"khaki": [240, 230, 140],
|
||
"lavender": [230, 230, 250],
|
||
"lavenderblush": [255, 240, 245],
|
||
"lawngreen": [124, 252, 0],
|
||
"lemonchiffon": [255, 250, 205],
|
||
"lightblue": [173, 216, 230],
|
||
"lightcoral": [240, 128, 128],
|
||
"lightcyan": [224, 255, 255],
|
||
"lightgoldenrodyellow": [250, 250, 210],
|
||
"lightgray": [211, 211, 211],
|
||
"lightgreen": [144, 238, 144],
|
||
"lightgrey": [211, 211, 211],
|
||
"lightpink": [255, 182, 193],
|
||
"lightsalmon": [255, 160, 122],
|
||
"lightseagreen": [32, 178, 170],
|
||
"lightskyblue": [135, 206, 250],
|
||
"lightslategray": [119, 136, 153],
|
||
"lightslategrey": [119, 136, 153],
|
||
"lightsteelblue": [176, 196, 222],
|
||
"lightyellow": [255, 255, 224],
|
||
"lime": [0, 255, 0],
|
||
"limegreen": [50, 205, 50],
|
||
"linen": [250, 240, 230],
|
||
"magenta": [255, 0, 255],
|
||
"maroon": [128, 0, 0],
|
||
"mediumaquamarine": [102, 205, 170],
|
||
"mediumblue": [0, 0, 205],
|
||
"mediumorchid": [186, 85, 211],
|
||
"mediumpurple": [147, 112, 219],
|
||
"mediumseagreen": [60, 179, 113],
|
||
"mediumslateblue": [123, 104, 238],
|
||
"mediumspringgreen": [0, 250, 154],
|
||
"mediumturquoise": [72, 209, 204],
|
||
"mediumvioletred": [199, 21, 133],
|
||
"midnightblue": [25, 25, 112],
|
||
"mintcream": [245, 255, 250],
|
||
"mistyrose": [255, 228, 225],
|
||
"moccasin": [255, 228, 181],
|
||
"navajowhite": [255, 222, 173],
|
||
"navy": [0, 0, 128],
|
||
"oldlace": [253, 245, 230],
|
||
"olive": [128, 128, 0],
|
||
"olivedrab": [107, 142, 35],
|
||
"orange": [255, 165, 0],
|
||
"orangered": [255, 69, 0],
|
||
"orchid": [218, 112, 214],
|
||
"palegoldenrod": [238, 232, 170],
|
||
"palegreen": [152, 251, 152],
|
||
"paleturquoise": [175, 238, 238],
|
||
"palevioletred": [219, 112, 147],
|
||
"papayawhip": [255, 239, 213],
|
||
"peachpuff": [255, 218, 185],
|
||
"peru": [205, 133, 63],
|
||
"pink": [255, 192, 203],
|
||
"plum": [221, 160, 221],
|
||
"powderblue": [176, 224, 230],
|
||
"purple": [128, 0, 128],
|
||
"rebeccapurple": [102, 51, 153],
|
||
"red": [255, 0, 0],
|
||
"rosybrown": [188, 143, 143],
|
||
"royalblue": [65, 105, 225],
|
||
"saddlebrown": [139, 69, 19],
|
||
"salmon": [250, 128, 114],
|
||
"sandybrown": [244, 164, 96],
|
||
"seagreen": [46, 139, 87],
|
||
"seashell": [255, 245, 238],
|
||
"sienna": [160, 82, 45],
|
||
"silver": [192, 192, 192],
|
||
"skyblue": [135, 206, 235],
|
||
"slateblue": [106, 90, 205],
|
||
"slategray": [112, 128, 144],
|
||
"slategrey": [112, 128, 144],
|
||
"snow": [255, 250, 250],
|
||
"springgreen": [0, 255, 127],
|
||
"steelblue": [70, 130, 180],
|
||
"tan": [210, 180, 140],
|
||
"teal": [0, 128, 128],
|
||
"thistle": [216, 191, 216],
|
||
"tomato": [255, 99, 71],
|
||
"turquoise": [64, 224, 208],
|
||
"violet": [238, 130, 238],
|
||
"wheat": [245, 222, 179],
|
||
"white": [255, 255, 255],
|
||
"whitesmoke": [245, 245, 245],
|
||
"yellow": [255, 255, 0],
|
||
"yellowgreen": [154, 205, 50]
|
||
};
|
||
|
||
/***/ },
|
||
/* 12 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
// By default, select the browser (DOM) platform.
|
||
// @TODO Make possible to select another platform at build time.
|
||
var implementation = __webpack_require__(13);
|
||
|
||
module.exports = function(Chart) {
|
||
/**
|
||
* @namespace Chart.platform
|
||
* @see https://chartjs.gitbooks.io/proposals/content/Platform.html
|
||
* @since 2.4.0
|
||
*/
|
||
Chart.platform = {
|
||
/**
|
||
* Called at chart construction time, returns a context2d instance implementing
|
||
* the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.
|
||
* @param {*} item - The native item from which to acquire context (platform specific)
|
||
* @param {Object} options - The chart options
|
||
* @returns {CanvasRenderingContext2D} context2d instance
|
||
*/
|
||
acquireContext: function() {},
|
||
|
||
/**
|
||
* Called at chart destruction time, releases any resources associated to the context
|
||
* previously returned by the acquireContext() method.
|
||
* @param {CanvasRenderingContext2D} context - The context2d instance
|
||
* @returns {Boolean} true if the method succeeded, else false
|
||
*/
|
||
releaseContext: function() {},
|
||
|
||
/**
|
||
* Registers the specified listener on the given chart.
|
||
* @param {Chart} chart - Chart from which to listen for event
|
||
* @param {String} type - The ({@link IEvent}) type to listen for
|
||
* @param {Function} listener - Receives a notification (an object that implements
|
||
* the {@link IEvent} interface) when an event of the specified type occurs.
|
||
*/
|
||
addEventListener: function() {},
|
||
|
||
/**
|
||
* Removes the specified listener previously registered with addEventListener.
|
||
* @param {Chart} chart -Chart from which to remove the listener
|
||
* @param {String} type - The ({@link IEvent}) type to remove
|
||
* @param {Function} listener - The listener function to remove from the event target.
|
||
*/
|
||
removeEventListener: function() {}
|
||
};
|
||
|
||
/**
|
||
* @interface IPlatform
|
||
* Allows abstracting platform dependencies away from the chart
|
||
* @borrows Chart.platform.acquireContext as acquireContext
|
||
* @borrows Chart.platform.releaseContext as releaseContext
|
||
* @borrows Chart.platform.addEventListener as addEventListener
|
||
* @borrows Chart.platform.removeEventListener as removeEventListener
|
||
*/
|
||
|
||
/**
|
||
* @interface IEvent
|
||
* @prop {String} type - The event type name, possible values are:
|
||
* 'contextmenu', 'mouseenter', 'mousedown', 'mousemove', 'mouseup', 'mouseout',
|
||
* 'click', 'dblclick', 'keydown', 'keypress', 'keyup' and 'resize'
|
||
* @prop {*} native - The original native event (null for emulated events, e.g. 'resize')
|
||
* @prop {Number} x - The mouse x position, relative to the canvas (null for incompatible events)
|
||
* @prop {Number} y - The mouse y position, relative to the canvas (null for incompatible events)
|
||
*/
|
||
|
||
Chart.helpers.extend(Chart.platform, implementation(Chart));
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 13 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
// Chart.Platform implementation for targeting a web browser
|
||
module.exports = function(Chart) {
|
||
var helpers = Chart.helpers;
|
||
|
||
// DOM event types -> Chart.js event types.
|
||
// Note: only events with different types are mapped.
|
||
// https://developer.mozilla.org/en-US/docs/Web/Events
|
||
var eventTypeMap = {
|
||
// Touch events
|
||
touchstart: 'mousedown',
|
||
touchmove: 'mousemove',
|
||
touchend: 'mouseup',
|
||
|
||
// Pointer events
|
||
pointerenter: 'mouseenter',
|
||
pointerdown: 'mousedown',
|
||
pointermove: 'mousemove',
|
||
pointerup: 'mouseup',
|
||
pointerleave: 'mouseout',
|
||
pointerout: 'mouseout'
|
||
};
|
||
|
||
/**
|
||
* The "used" size is the final value of a dimension property after all calculations have
|
||
* been performed. This method uses the computed style of `element` but returns undefined
|
||
* if the computed style is not expressed in pixels. That can happen in some cases where
|
||
* `element` has a size relative to its parent and this last one is not yet displayed,
|
||
* for example because of `display: none` on a parent node.
|
||
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
|
||
* @returns {Number} Size in pixels or undefined if unknown.
|
||
*/
|
||
function readUsedSize(element, property) {
|
||
var value = helpers.getStyle(element, property);
|
||
var matches = value && value.match(/(\d+)px/);
|
||
return matches? Number(matches[1]) : undefined;
|
||
}
|
||
|
||
/**
|
||
* Initializes the canvas style and render size without modifying the canvas display size,
|
||
* since responsiveness is handled by the controller.resize() method. The config is used
|
||
* to determine the aspect ratio to apply in case no explicit height has been specified.
|
||
*/
|
||
function initCanvas(canvas, config) {
|
||
var style = canvas.style;
|
||
|
||
// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it
|
||
// returns null or '' if no explicit value has been set to the canvas attribute.
|
||
var renderHeight = canvas.getAttribute('height');
|
||
var renderWidth = canvas.getAttribute('width');
|
||
|
||
// Chart.js modifies some canvas values that we want to restore on destroy
|
||
canvas._chartjs = {
|
||
initial: {
|
||
height: renderHeight,
|
||
width: renderWidth,
|
||
style: {
|
||
display: style.display,
|
||
height: style.height,
|
||
width: style.width
|
||
}
|
||
}
|
||
};
|
||
|
||
// Force canvas to display as block to avoid extra space caused by inline
|
||
// elements, which would interfere with the responsive resize process.
|
||
// https://github.com/chartjs/Chart.js/issues/2538
|
||
style.display = style.display || 'block';
|
||
|
||
if (renderWidth === null || renderWidth === '') {
|
||
var displayWidth = readUsedSize(canvas, 'width');
|
||
if (displayWidth !== undefined) {
|
||
canvas.width = displayWidth;
|
||
}
|
||
}
|
||
|
||
if (renderHeight === null || renderHeight === '') {
|
||
if (canvas.style.height === '') {
|
||
// If no explicit render height and style height, let's apply the aspect ratio,
|
||
// which one can be specified by the user but also by charts as default option
|
||
// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.
|
||
canvas.height = canvas.width / (config.options.aspectRatio || 2);
|
||
} else {
|
||
var displayHeight = readUsedSize(canvas, 'height');
|
||
if (displayWidth !== undefined) {
|
||
canvas.height = displayHeight;
|
||
}
|
||
}
|
||
}
|
||
|
||
return canvas;
|
||
}
|
||
|
||
function createEvent(type, chart, x, y, native) {
|
||
return {
|
||
type: type,
|
||
chart: chart,
|
||
native: native || null,
|
||
x: x !== undefined? x : null,
|
||
y: y !== undefined? y : null,
|
||
};
|
||
}
|
||
|
||
function fromNativeEvent(event, chart) {
|
||
var type = eventTypeMap[event.type] || event.type;
|
||
var pos = helpers.getRelativePosition(event, chart);
|
||
return createEvent(type, chart, pos.x, pos.y, event);
|
||
}
|
||
|
||
function createResizer(handler) {
|
||
var iframe = document.createElement('iframe');
|
||
iframe.className = 'chartjs-hidden-iframe';
|
||
iframe.style.cssText =
|
||
'display:block;'+
|
||
'overflow:hidden;'+
|
||
'border:0;'+
|
||
'margin:0;'+
|
||
'top:0;'+
|
||
'left:0;'+
|
||
'bottom:0;'+
|
||
'right:0;'+
|
||
'height:100%;'+
|
||
'width:100%;'+
|
||
'position:absolute;'+
|
||
'pointer-events:none;'+
|
||
'z-index:-1;';
|
||
|
||
// Prevent the iframe to gain focus on tab.
|
||
// https://github.com/chartjs/Chart.js/issues/3090
|
||
iframe.tabIndex = -1;
|
||
|
||
// If the iframe is re-attached to the DOM, the resize listener is removed because the
|
||
// content is reloaded, so make sure to install the handler after the iframe is loaded.
|
||
// https://github.com/chartjs/Chart.js/issues/3521
|
||
helpers.addEvent(iframe, 'load', function() {
|
||
helpers.addEvent(iframe.contentWindow || iframe, 'resize', handler);
|
||
|
||
// The iframe size might have changed while loading, which can also
|
||
// happen if the size has been changed while detached from the DOM.
|
||
handler();
|
||
});
|
||
|
||
return iframe;
|
||
}
|
||
|
||
function addResizeListener(node, listener, chart) {
|
||
var stub = node._chartjs = {
|
||
ticking: false
|
||
};
|
||
|
||
// Throttle the callback notification until the next animation frame.
|
||
var notify = function() {
|
||
if (!stub.ticking) {
|
||
stub.ticking = true;
|
||
helpers.requestAnimFrame.call(window, function() {
|
||
if (stub.resizer) {
|
||
stub.ticking = false;
|
||
return listener(createEvent('resize', chart));
|
||
}
|
||
});
|
||
}
|
||
};
|
||
|
||
// Let's keep track of this added iframe and thus avoid DOM query when removing it.
|
||
stub.resizer = createResizer(notify);
|
||
|
||
node.insertBefore(stub.resizer, node.firstChild);
|
||
}
|
||
|
||
function removeResizeListener(node) {
|
||
if (!node || !node._chartjs) {
|
||
return;
|
||
}
|
||
|
||
var resizer = node._chartjs.resizer;
|
||
if (resizer) {
|
||
resizer.parentNode.removeChild(resizer);
|
||
node._chartjs.resizer = null;
|
||
}
|
||
|
||
delete node._chartjs;
|
||
}
|
||
|
||
return {
|
||
acquireContext: function(item, config) {
|
||
if (typeof item === 'string') {
|
||
item = document.getElementById(item);
|
||
} else if (item.length) {
|
||
// Support for array based queries (such as jQuery)
|
||
item = item[0];
|
||
}
|
||
|
||
if (item && item.canvas) {
|
||
// Support for any object associated to a canvas (including a context2d)
|
||
item = item.canvas;
|
||
}
|
||
|
||
if (item instanceof HTMLCanvasElement) {
|
||
// To prevent canvas fingerprinting, some add-ons undefine the getContext
|
||
// method, for example: https://github.com/kkapsner/CanvasBlocker
|
||
// https://github.com/chartjs/Chart.js/issues/2807
|
||
var context = item.getContext && item.getContext('2d');
|
||
if (context instanceof CanvasRenderingContext2D) {
|
||
initCanvas(item, config);
|
||
return context;
|
||
}
|
||
}
|
||
|
||
return null;
|
||
},
|
||
|
||
releaseContext: function(context) {
|
||
var canvas = context.canvas;
|
||
if (!canvas._chartjs) {
|
||
return;
|
||
}
|
||
|
||
var initial = canvas._chartjs.initial;
|
||
['height', 'width'].forEach(function(prop) {
|
||
var value = initial[prop];
|
||
if (value === undefined || value === null) {
|
||
canvas.removeAttribute(prop);
|
||
} else {
|
||
canvas.setAttribute(prop, value);
|
||
}
|
||
});
|
||
|
||
helpers.each(initial.style || {}, function(value, key) {
|
||
canvas.style[key] = value;
|
||
});
|
||
|
||
// The canvas render size might have been changed (and thus the state stack discarded),
|
||
// we can't use save() and restore() to restore the initial state. So make sure that at
|
||
// least the canvas context is reset to the default state by setting the canvas width.
|
||
// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html
|
||
canvas.width = canvas.width;
|
||
|
||
delete canvas._chartjs;
|
||
},
|
||
|
||
addEventListener: function(chart, type, listener) {
|
||
var canvas = chart.chart.canvas;
|
||
if (type === 'resize') {
|
||
// Note: the resize event is not supported on all browsers.
|
||
addResizeListener(canvas.parentNode, listener, chart.chart);
|
||
return;
|
||
}
|
||
|
||
var stub = listener._chartjs || (listener._chartjs = {});
|
||
var proxies = stub.proxies || (stub.proxies = {});
|
||
var proxy = proxies[chart.id + '_' + type] = function(event) {
|
||
listener(fromNativeEvent(event, chart.chart));
|
||
};
|
||
|
||
helpers.addEvent(canvas, type, proxy);
|
||
},
|
||
|
||
removeEventListener: function(chart, type, listener) {
|
||
var canvas = chart.chart.canvas;
|
||
if (type === 'resize') {
|
||
// Note: the resize event is not supported on all browsers.
|
||
removeResizeListener(canvas.parentNode, listener);
|
||
return;
|
||
}
|
||
|
||
var stub = listener._chartjs || {};
|
||
var proxies = stub.proxies || {};
|
||
var proxy = proxies[chart.id + '_' + type];
|
||
if (!proxy) {
|
||
return;
|
||
}
|
||
|
||
helpers.removeEvent(canvas, type, proxy);
|
||
}
|
||
};
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 14 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
// Global Chart canvas helpers object for drawing items to canvas
|
||
var helpers = Chart.canvasHelpers = {};
|
||
|
||
helpers.drawPoint = function(ctx, pointStyle, radius, x, y) {
|
||
var type, edgeLength, xOffset, yOffset, height, size;
|
||
|
||
if (typeof pointStyle === 'object') {
|
||
type = pointStyle.toString();
|
||
if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {
|
||
ctx.drawImage(pointStyle, x - pointStyle.width / 2, y - pointStyle.height / 2);
|
||
return;
|
||
}
|
||
}
|
||
|
||
if (isNaN(radius) || radius <= 0) {
|
||
return;
|
||
}
|
||
|
||
switch (pointStyle) {
|
||
// Default includes circle
|
||
default:
|
||
ctx.beginPath();
|
||
ctx.arc(x, y, radius, 0, Math.PI * 2);
|
||
ctx.closePath();
|
||
ctx.fill();
|
||
break;
|
||
case 'triangle':
|
||
ctx.beginPath();
|
||
edgeLength = 3 * radius / Math.sqrt(3);
|
||
height = edgeLength * Math.sqrt(3) / 2;
|
||
ctx.moveTo(x - edgeLength / 2, y + height / 3);
|
||
ctx.lineTo(x + edgeLength / 2, y + height / 3);
|
||
ctx.lineTo(x, y - 2 * height / 3);
|
||
ctx.closePath();
|
||
ctx.fill();
|
||
break;
|
||
case 'rect':
|
||
size = 1 / Math.SQRT2 * radius;
|
||
ctx.beginPath();
|
||
ctx.fillRect(x - size, y - size, 2 * size, 2 * size);
|
||
ctx.strokeRect(x - size, y - size, 2 * size, 2 * size);
|
||
break;
|
||
case 'rectRounded':
|
||
var offset = radius / Math.SQRT2;
|
||
var leftX = x - offset;
|
||
var topY = y - offset;
|
||
var sideSize = Math.SQRT2 * radius;
|
||
Chart.helpers.drawRoundedRectangle(ctx, leftX, topY, sideSize, sideSize, radius / 2);
|
||
ctx.fill();
|
||
break;
|
||
case 'rectRot':
|
||
size = 1 / Math.SQRT2 * radius;
|
||
ctx.beginPath();
|
||
ctx.moveTo(x - size, y);
|
||
ctx.lineTo(x, y + size);
|
||
ctx.lineTo(x + size, y);
|
||
ctx.lineTo(x, y - size);
|
||
ctx.closePath();
|
||
ctx.fill();
|
||
break;
|
||
case 'cross':
|
||
ctx.beginPath();
|
||
ctx.moveTo(x, y + radius);
|
||
ctx.lineTo(x, y - radius);
|
||
ctx.moveTo(x - radius, y);
|
||
ctx.lineTo(x + radius, y);
|
||
ctx.closePath();
|
||
break;
|
||
case 'crossRot':
|
||
ctx.beginPath();
|
||
xOffset = Math.cos(Math.PI / 4) * radius;
|
||
yOffset = Math.sin(Math.PI / 4) * radius;
|
||
ctx.moveTo(x - xOffset, y - yOffset);
|
||
ctx.lineTo(x + xOffset, y + yOffset);
|
||
ctx.moveTo(x - xOffset, y + yOffset);
|
||
ctx.lineTo(x + xOffset, y - yOffset);
|
||
ctx.closePath();
|
||
break;
|
||
case 'star':
|
||
ctx.beginPath();
|
||
ctx.moveTo(x, y + radius);
|
||
ctx.lineTo(x, y - radius);
|
||
ctx.moveTo(x - radius, y);
|
||
ctx.lineTo(x + radius, y);
|
||
xOffset = Math.cos(Math.PI / 4) * radius;
|
||
yOffset = Math.sin(Math.PI / 4) * radius;
|
||
ctx.moveTo(x - xOffset, y - yOffset);
|
||
ctx.lineTo(x + xOffset, y + yOffset);
|
||
ctx.moveTo(x - xOffset, y + yOffset);
|
||
ctx.lineTo(x + xOffset, y - yOffset);
|
||
ctx.closePath();
|
||
break;
|
||
case 'line':
|
||
ctx.beginPath();
|
||
ctx.moveTo(x - radius, y);
|
||
ctx.lineTo(x + radius, y);
|
||
ctx.closePath();
|
||
break;
|
||
case 'dash':
|
||
ctx.beginPath();
|
||
ctx.moveTo(x, y);
|
||
ctx.lineTo(x + radius, y);
|
||
ctx.closePath();
|
||
break;
|
||
}
|
||
|
||
ctx.stroke();
|
||
};
|
||
|
||
helpers.clipArea = function(ctx, clipArea) {
|
||
ctx.save();
|
||
ctx.beginPath();
|
||
ctx.rect(clipArea.left, clipArea.top, clipArea.right - clipArea.left, clipArea.bottom - clipArea.top);
|
||
ctx.clip();
|
||
};
|
||
|
||
helpers.unclipArea = function(ctx) {
|
||
ctx.restore();
|
||
};
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 15 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.defaults.global.plugins = {};
|
||
|
||
/**
|
||
* The plugin service singleton
|
||
* @namespace Chart.plugins
|
||
* @since 2.1.0
|
||
*/
|
||
Chart.plugins = {
|
||
/**
|
||
* Globally registered plugins.
|
||
* @private
|
||
*/
|
||
_plugins: [],
|
||
|
||
/**
|
||
* This identifier is used to invalidate the descriptors cache attached to each chart
|
||
* when a global plugin is registered or unregistered. In this case, the cache ID is
|
||
* incremented and descriptors are regenerated during following API calls.
|
||
* @private
|
||
*/
|
||
_cacheId: 0,
|
||
|
||
/**
|
||
* Registers the given plugin(s) if not already registered.
|
||
* @param {Array|Object} plugins plugin instance(s).
|
||
*/
|
||
register: function(plugins) {
|
||
var p = this._plugins;
|
||
([]).concat(plugins).forEach(function(plugin) {
|
||
if (p.indexOf(plugin) === -1) {
|
||
p.push(plugin);
|
||
}
|
||
});
|
||
|
||
this._cacheId++;
|
||
},
|
||
|
||
/**
|
||
* Unregisters the given plugin(s) only if registered.
|
||
* @param {Array|Object} plugins plugin instance(s).
|
||
*/
|
||
unregister: function(plugins) {
|
||
var p = this._plugins;
|
||
([]).concat(plugins).forEach(function(plugin) {
|
||
var idx = p.indexOf(plugin);
|
||
if (idx !== -1) {
|
||
p.splice(idx, 1);
|
||
}
|
||
});
|
||
|
||
this._cacheId++;
|
||
},
|
||
|
||
/**
|
||
* Remove all registered plugins.
|
||
* @since 2.1.5
|
||
*/
|
||
clear: function() {
|
||
this._plugins = [];
|
||
this._cacheId++;
|
||
},
|
||
|
||
/**
|
||
* Returns the number of registered plugins?
|
||
* @returns {Number}
|
||
* @since 2.1.5
|
||
*/
|
||
count: function() {
|
||
return this._plugins.length;
|
||
},
|
||
|
||
/**
|
||
* Returns all registered plugin instances.
|
||
* @returns {Array} array of plugin objects.
|
||
* @since 2.1.5
|
||
*/
|
||
getAll: function() {
|
||
return this._plugins;
|
||
},
|
||
|
||
/**
|
||
* Calls enabled plugins for `chart` on the specified hook and with the given args.
|
||
* This method immediately returns as soon as a plugin explicitly returns false. The
|
||
* returned value can be used, for instance, to interrupt the current action.
|
||
* @param {Object} chart - The chart instance for which plugins should be called.
|
||
* @param {String} hook - The name of the plugin method to call (e.g. 'beforeUpdate').
|
||
* @param {Array} [args] - Extra arguments to apply to the hook call.
|
||
* @returns {Boolean} false if any of the plugins return false, else returns true.
|
||
*/
|
||
notify: function(chart, hook, args) {
|
||
var descriptors = this.descriptors(chart);
|
||
var ilen = descriptors.length;
|
||
var i, descriptor, plugin, params, method;
|
||
|
||
for (i=0; i<ilen; ++i) {
|
||
descriptor = descriptors[i];
|
||
plugin = descriptor.plugin;
|
||
method = plugin[hook];
|
||
if (typeof method === 'function') {
|
||
params = [chart].concat(args || []);
|
||
params.push(descriptor.options);
|
||
if (method.apply(plugin, params) === false) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
return true;
|
||
},
|
||
|
||
/**
|
||
* Returns descriptors of enabled plugins for the given chart.
|
||
* @returns {Array} [{ plugin, options }]
|
||
* @private
|
||
*/
|
||
descriptors: function(chart) {
|
||
var cache = chart._plugins || (chart._plugins = {});
|
||
if (cache.id === this._cacheId) {
|
||
return cache.descriptors;
|
||
}
|
||
|
||
var plugins = [];
|
||
var descriptors = [];
|
||
var config = (chart && chart.config) || {};
|
||
var defaults = Chart.defaults.global.plugins;
|
||
var options = (config.options && config.options.plugins) || {};
|
||
|
||
this._plugins.concat(config.plugins || []).forEach(function(plugin) {
|
||
var idx = plugins.indexOf(plugin);
|
||
if (idx !== -1) {
|
||
return;
|
||
}
|
||
|
||
var id = plugin.id;
|
||
var opts = options[id];
|
||
if (opts === false) {
|
||
return;
|
||
}
|
||
|
||
if (opts === true) {
|
||
opts = helpers.clone(defaults[id]);
|
||
}
|
||
|
||
plugins.push(plugin);
|
||
descriptors.push({
|
||
plugin: plugin,
|
||
options: opts || {}
|
||
});
|
||
});
|
||
|
||
cache.descriptors = descriptors;
|
||
cache.id = this._cacheId;
|
||
return descriptors;
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Plugin extension hooks.
|
||
* @interface IPlugin
|
||
* @since 2.1.0
|
||
*/
|
||
/**
|
||
* @method IPlugin#beforeInit
|
||
* @desc Called before initializing `chart`.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#afterInit
|
||
* @desc Called after `chart` has been initialized and before the first update.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#beforeUpdate
|
||
* @desc Called before updating `chart`. If any plugin returns `false`, the update
|
||
* is cancelled (and thus subsequent render(s)) until another `update` is triggered.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
* @returns {Boolean} `false` to cancel the chart update.
|
||
*/
|
||
/**
|
||
* @method IPlugin#afterUpdate
|
||
* @desc Called after `chart` has been updated and before rendering. Note that this
|
||
* hook will not be called if the chart update has been previously cancelled.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#beforeDatasetsUpdate
|
||
* @desc Called before updating the `chart` datasets. If any plugin returns `false`,
|
||
* the datasets update is cancelled until another `update` is triggered.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
* @returns {Boolean} false to cancel the datasets update.
|
||
* @since version 2.1.5
|
||
*/
|
||
/**
|
||
* @method IPlugin#afterDatasetsUpdate
|
||
* @desc Called after the `chart` datasets have been updated. Note that this hook
|
||
* will not be called if the datasets update has been previously cancelled.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
* @since version 2.1.5
|
||
*/
|
||
/**
|
||
* @method IPlugin#beforeLayout
|
||
* @desc Called before laying out `chart`. If any plugin returns `false`,
|
||
* the layout update is cancelled until another `update` is triggered.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
* @returns {Boolean} `false` to cancel the chart layout.
|
||
*/
|
||
/**
|
||
* @method IPlugin#afterLayout
|
||
* @desc Called after the `chart` has been layed out. Note that this hook will not
|
||
* be called if the layout update has been previously cancelled.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#beforeRender
|
||
* @desc Called before rendering `chart`. If any plugin returns `false`,
|
||
* the rendering is cancelled until another `render` is triggered.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
* @returns {Boolean} `false` to cancel the chart rendering.
|
||
*/
|
||
/**
|
||
* @method IPlugin#afterRender
|
||
* @desc Called after the `chart` has been fully rendered (and animation completed). Note
|
||
* that this hook will not be called if the rendering has been previously cancelled.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#beforeDraw
|
||
* @desc Called before drawing `chart` at every animation frame specified by the given
|
||
* easing value. If any plugin returns `false`, the frame drawing is cancelled until
|
||
* another `render` is triggered.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Number} easingValue - The current animation value, between 0.0 and 1.0.
|
||
* @param {Object} options - The plugin options.
|
||
* @returns {Boolean} `false` to cancel the chart drawing.
|
||
*/
|
||
/**
|
||
* @method IPlugin#afterDraw
|
||
* @desc Called after the `chart` has been drawn for the specific easing value. Note
|
||
* that this hook will not be called if the drawing has been previously cancelled.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Number} easingValue - The current animation value, between 0.0 and 1.0.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#beforeDatasetsDraw
|
||
* @desc Called before drawing the `chart` datasets. If any plugin returns `false`,
|
||
* the datasets drawing is cancelled until another `render` is triggered.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Number} easingValue - The current animation value, between 0.0 and 1.0.
|
||
* @param {Object} options - The plugin options.
|
||
* @returns {Boolean} `false` to cancel the chart datasets drawing.
|
||
*/
|
||
/**
|
||
* @method IPlugin#afterDatasetsDraw
|
||
* @desc Called after the `chart` datasets have been drawn. Note that this hook
|
||
* will not be called if the datasets drawing has been previously cancelled.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Number} easingValue - The current animation value, between 0.0 and 1.0.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#beforeEvent
|
||
* @desc Called before processing the specified `event`. If any plugin returns `false`,
|
||
* the event will be discarded.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {IEvent} event - The event object.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#afterEvent
|
||
* @desc Called after the `event` has been consumed. Note that this hook
|
||
* will not be called if the `event` has been previously discarded.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {IEvent} event - The event object.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#resize
|
||
* @desc Called after the chart as been resized.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Number} size - The new canvas display size (eq. canvas.style width & height).
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
/**
|
||
* @method IPlugin#destroy
|
||
* @desc Called after the chart as been destroyed.
|
||
* @param {Chart.Controller} chart - The chart instance.
|
||
* @param {Object} options - The plugin options.
|
||
*/
|
||
|
||
/**
|
||
* Provided for backward compatibility, use Chart.plugins instead
|
||
* @namespace Chart.pluginService
|
||
* @deprecated since version 2.1.5
|
||
* @todo remove at version 3
|
||
* @private
|
||
*/
|
||
Chart.pluginService = Chart.plugins;
|
||
|
||
/**
|
||
* Provided for backward compatibility, inheriting from Chart.PlugingBase has no
|
||
* effect, instead simply create/register plugins via plain JavaScript objects.
|
||
* @interface Chart.PluginBase
|
||
* @deprecated since version 2.5.0
|
||
* @todo remove at version 3
|
||
* @private
|
||
*/
|
||
Chart.PluginBase = helpers.inherits({});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 16 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.elements = {};
|
||
|
||
Chart.Element = function(configuration) {
|
||
helpers.extend(this, configuration);
|
||
this.initialize.apply(this, arguments);
|
||
};
|
||
|
||
helpers.extend(Chart.Element.prototype, {
|
||
|
||
initialize: function() {
|
||
this.hidden = false;
|
||
},
|
||
|
||
pivot: function() {
|
||
var me = this;
|
||
if (!me._view) {
|
||
me._view = helpers.clone(me._model);
|
||
}
|
||
me._start = helpers.clone(me._view);
|
||
return me;
|
||
},
|
||
|
||
transition: function(ease) {
|
||
var me = this;
|
||
|
||
if (!me._view) {
|
||
me._view = helpers.clone(me._model);
|
||
}
|
||
|
||
// No animation -> No Transition
|
||
if (ease === 1) {
|
||
me._view = me._model;
|
||
me._start = null;
|
||
return me;
|
||
}
|
||
|
||
if (!me._start) {
|
||
me.pivot();
|
||
}
|
||
|
||
helpers.each(me._model, function(value, key) {
|
||
|
||
if (key[0] === '_') {
|
||
// Only non-underscored properties
|
||
// Init if doesn't exist
|
||
} else if (!me._view.hasOwnProperty(key)) {
|
||
if (typeof value === 'number' && !isNaN(me._view[key])) {
|
||
me._view[key] = value * ease;
|
||
} else {
|
||
me._view[key] = value;
|
||
}
|
||
// No unnecessary computations
|
||
} else if (value === me._view[key]) {
|
||
// It's the same! Woohoo!
|
||
// Color transitions if possible
|
||
} else if (typeof value === 'string') {
|
||
try {
|
||
var color = helpers.color(me._model[key]).mix(helpers.color(me._start[key]), ease);
|
||
me._view[key] = color.rgbString();
|
||
} catch (err) {
|
||
me._view[key] = value;
|
||
}
|
||
// Number transitions
|
||
} else if (typeof value === 'number') {
|
||
var startVal = me._start[key] !== undefined && isNaN(me._start[key]) === false ? me._start[key] : 0;
|
||
me._view[key] = ((me._model[key] - startVal) * ease) + startVal;
|
||
// Everything else
|
||
} else {
|
||
me._view[key] = value;
|
||
}
|
||
}, me);
|
||
|
||
return me;
|
||
},
|
||
|
||
tooltipPosition: function() {
|
||
return {
|
||
x: this._model.x,
|
||
y: this._model.y
|
||
};
|
||
},
|
||
|
||
hasValue: function() {
|
||
return helpers.isNumber(this._model.x) && helpers.isNumber(this._model.y);
|
||
}
|
||
});
|
||
|
||
Chart.Element.extend = helpers.inherits;
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 17 */
|
||
/***/ function(module, exports) {
|
||
|
||
/* global window: false */
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.defaults.global.animation = {
|
||
duration: 1000,
|
||
easing: 'easeOutQuart',
|
||
onProgress: helpers.noop,
|
||
onComplete: helpers.noop
|
||
};
|
||
|
||
Chart.Animation = Chart.Element.extend({
|
||
currentStep: null, // the current animation step
|
||
numSteps: 60, // default number of steps
|
||
easing: '', // the easing to use for this animation
|
||
render: null, // render function used by the animation service
|
||
|
||
onAnimationProgress: null, // user specified callback to fire on each step of the animation
|
||
onAnimationComplete: null // user specified callback to fire when the animation finishes
|
||
});
|
||
|
||
Chart.animationService = {
|
||
frameDuration: 17,
|
||
animations: [],
|
||
dropFrames: 0,
|
||
request: null,
|
||
|
||
/**
|
||
* @function Chart.animationService.addAnimation
|
||
* @param chartInstance {ChartController} the chart to animate
|
||
* @param animationObject {IAnimation} the animation that we will animate
|
||
* @param duration {Number} length of animation in ms
|
||
* @param lazy {Boolean} if true, the chart is not marked as animating to enable more responsive interactions
|
||
*/
|
||
addAnimation: function(chartInstance, animationObject, duration, lazy) {
|
||
var me = this;
|
||
|
||
if (!lazy) {
|
||
chartInstance.animating = true;
|
||
}
|
||
|
||
for (var index = 0; index < me.animations.length; ++index) {
|
||
if (me.animations[index].chartInstance === chartInstance) {
|
||
// replacing an in progress animation
|
||
me.animations[index].animationObject = animationObject;
|
||
return;
|
||
}
|
||
}
|
||
|
||
me.animations.push({
|
||
chartInstance: chartInstance,
|
||
animationObject: animationObject
|
||
});
|
||
|
||
// If there are no animations queued, manually kickstart a digest, for lack of a better word
|
||
if (me.animations.length === 1) {
|
||
me.requestAnimationFrame();
|
||
}
|
||
},
|
||
// Cancel the animation for a given chart instance
|
||
cancelAnimation: function(chartInstance) {
|
||
var index = helpers.findIndex(this.animations, function(animationWrapper) {
|
||
return animationWrapper.chartInstance === chartInstance;
|
||
});
|
||
|
||
if (index !== -1) {
|
||
this.animations.splice(index, 1);
|
||
chartInstance.animating = false;
|
||
}
|
||
},
|
||
requestAnimationFrame: function() {
|
||
var me = this;
|
||
if (me.request === null) {
|
||
// Skip animation frame requests until the active one is executed.
|
||
// This can happen when processing mouse events, e.g. 'mousemove'
|
||
// and 'mouseout' events will trigger multiple renders.
|
||
me.request = helpers.requestAnimFrame.call(window, function() {
|
||
me.request = null;
|
||
me.startDigest();
|
||
});
|
||
}
|
||
},
|
||
startDigest: function() {
|
||
var me = this;
|
||
|
||
var startTime = Date.now();
|
||
var framesToDrop = 0;
|
||
|
||
if (me.dropFrames > 1) {
|
||
framesToDrop = Math.floor(me.dropFrames);
|
||
me.dropFrames = me.dropFrames % 1;
|
||
}
|
||
|
||
var i = 0;
|
||
while (i < me.animations.length) {
|
||
if (me.animations[i].animationObject.currentStep === null) {
|
||
me.animations[i].animationObject.currentStep = 0;
|
||
}
|
||
|
||
me.animations[i].animationObject.currentStep += 1 + framesToDrop;
|
||
|
||
if (me.animations[i].animationObject.currentStep > me.animations[i].animationObject.numSteps) {
|
||
me.animations[i].animationObject.currentStep = me.animations[i].animationObject.numSteps;
|
||
}
|
||
|
||
me.animations[i].animationObject.render(me.animations[i].chartInstance, me.animations[i].animationObject);
|
||
if (me.animations[i].animationObject.onAnimationProgress && me.animations[i].animationObject.onAnimationProgress.call) {
|
||
me.animations[i].animationObject.onAnimationProgress.call(me.animations[i].chartInstance, me.animations[i]);
|
||
}
|
||
|
||
if (me.animations[i].animationObject.currentStep === me.animations[i].animationObject.numSteps) {
|
||
if (me.animations[i].animationObject.onAnimationComplete && me.animations[i].animationObject.onAnimationComplete.call) {
|
||
me.animations[i].animationObject.onAnimationComplete.call(me.animations[i].chartInstance, me.animations[i]);
|
||
}
|
||
|
||
// executed the last frame. Remove the animation.
|
||
me.animations[i].chartInstance.animating = false;
|
||
|
||
me.animations.splice(i, 1);
|
||
} else {
|
||
++i;
|
||
}
|
||
}
|
||
|
||
var endTime = Date.now();
|
||
var dropFrames = (endTime - startTime) / me.frameDuration;
|
||
|
||
me.dropFrames += dropFrames;
|
||
|
||
// Do we have more stuff to animate?
|
||
if (me.animations.length > 0) {
|
||
me.requestAnimationFrame();
|
||
}
|
||
}
|
||
};
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 18 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
var plugins = Chart.plugins;
|
||
var platform = Chart.platform;
|
||
|
||
// Create a dictionary of chart types, to allow for extension of existing types
|
||
Chart.types = {};
|
||
|
||
// Store a reference to each instance - allowing us to globally resize chart instances on window resize.
|
||
// Destroy method on the chart will remove the instance of the chart from this reference.
|
||
Chart.instances = {};
|
||
|
||
// Controllers available for dataset visualization eg. bar, line, slice, etc.
|
||
Chart.controllers = {};
|
||
|
||
/**
|
||
* Initializes the given config with global and chart default values.
|
||
*/
|
||
function initConfig(config) {
|
||
config = config || {};
|
||
|
||
// Do NOT use configMerge() for the data object because this method merges arrays
|
||
// and so would change references to labels and datasets, preventing data updates.
|
||
var data = config.data = config.data || {};
|
||
data.datasets = data.datasets || [];
|
||
data.labels = data.labels || [];
|
||
|
||
config.options = helpers.configMerge(
|
||
Chart.defaults.global,
|
||
Chart.defaults[config.type],
|
||
config.options || {});
|
||
|
||
return config;
|
||
}
|
||
|
||
/**
|
||
* Updates the config of the chart
|
||
* @param chart {Chart.Controller} chart to update the options for
|
||
*/
|
||
function updateConfig(chart) {
|
||
var newOptions = chart.options;
|
||
|
||
// Update Scale(s) with options
|
||
if (newOptions.scale) {
|
||
chart.scale.options = newOptions.scale;
|
||
} else if (newOptions.scales) {
|
||
newOptions.scales.xAxes.concat(newOptions.scales.yAxes).forEach(function(scaleOptions) {
|
||
chart.scales[scaleOptions.id].options = scaleOptions;
|
||
});
|
||
}
|
||
|
||
// Tooltip
|
||
chart.tooltip._options = newOptions.tooltips;
|
||
}
|
||
|
||
/**
|
||
* @class Chart.Controller
|
||
* The main controller of a chart.
|
||
*/
|
||
Chart.Controller = function(item, config, instance) {
|
||
var me = this;
|
||
|
||
config = initConfig(config);
|
||
|
||
var context = platform.acquireContext(item, config);
|
||
var canvas = context && context.canvas;
|
||
var height = canvas && canvas.height;
|
||
var width = canvas && canvas.width;
|
||
|
||
instance.ctx = context;
|
||
instance.canvas = canvas;
|
||
instance.config = config;
|
||
instance.width = width;
|
||
instance.height = height;
|
||
instance.aspectRatio = height? width / height : null;
|
||
|
||
me.id = helpers.uid();
|
||
me.chart = instance;
|
||
me.config = config;
|
||
me.options = config.options;
|
||
me._bufferedRender = false;
|
||
|
||
// Add the chart instance to the global namespace
|
||
Chart.instances[me.id] = me;
|
||
|
||
Object.defineProperty(me, 'data', {
|
||
get: function() {
|
||
return me.config.data;
|
||
}
|
||
});
|
||
|
||
if (!context || !canvas) {
|
||
// The given item is not a compatible context2d element, let's return before finalizing
|
||
// the chart initialization but after setting basic chart / controller properties that
|
||
// can help to figure out that the chart is not valid (e.g chart.canvas !== null);
|
||
// https://github.com/chartjs/Chart.js/issues/2807
|
||
console.error("Failed to create chart: can't acquire context from the given item");
|
||
return me;
|
||
}
|
||
|
||
me.initialize();
|
||
me.update();
|
||
|
||
return me;
|
||
};
|
||
|
||
helpers.extend(Chart.Controller.prototype, /** @lends Chart.Controller.prototype */ {
|
||
initialize: function() {
|
||
var me = this;
|
||
|
||
// Before init plugin notification
|
||
plugins.notify(me, 'beforeInit');
|
||
|
||
helpers.retinaScale(me.chart);
|
||
|
||
me.bindEvents();
|
||
|
||
if (me.options.responsive) {
|
||
// Initial resize before chart draws (must be silent to preserve initial animations).
|
||
me.resize(true);
|
||
}
|
||
|
||
// Make sure scales have IDs and are built before we build any controllers.
|
||
me.ensureScalesHaveIDs();
|
||
me.buildScales();
|
||
me.initToolTip();
|
||
|
||
// After init plugin notification
|
||
plugins.notify(me, 'afterInit');
|
||
|
||
return me;
|
||
},
|
||
|
||
clear: function() {
|
||
helpers.clear(this.chart);
|
||
return this;
|
||
},
|
||
|
||
stop: function() {
|
||
// Stops any current animation loop occurring
|
||
Chart.animationService.cancelAnimation(this);
|
||
return this;
|
||
},
|
||
|
||
resize: function(silent) {
|
||
var me = this;
|
||
var chart = me.chart;
|
||
var options = me.options;
|
||
var canvas = chart.canvas;
|
||
var aspectRatio = (options.maintainAspectRatio && chart.aspectRatio) || null;
|
||
|
||
// the canvas render width and height will be casted to integers so make sure that
|
||
// the canvas display style uses the same integer values to avoid blurring effect.
|
||
var newWidth = Math.floor(helpers.getMaximumWidth(canvas));
|
||
var newHeight = Math.floor(aspectRatio? newWidth / aspectRatio : helpers.getMaximumHeight(canvas));
|
||
|
||
if (chart.width === newWidth && chart.height === newHeight) {
|
||
return;
|
||
}
|
||
|
||
canvas.width = chart.width = newWidth;
|
||
canvas.height = chart.height = newHeight;
|
||
canvas.style.width = newWidth + 'px';
|
||
canvas.style.height = newHeight + 'px';
|
||
|
||
helpers.retinaScale(chart);
|
||
|
||
if (!silent) {
|
||
// Notify any plugins about the resize
|
||
var newSize = {width: newWidth, height: newHeight};
|
||
plugins.notify(me, 'resize', [newSize]);
|
||
|
||
// Notify of resize
|
||
if (me.options.onResize) {
|
||
me.options.onResize(me, newSize);
|
||
}
|
||
|
||
me.stop();
|
||
me.update(me.options.responsiveAnimationDuration);
|
||
}
|
||
},
|
||
|
||
ensureScalesHaveIDs: function() {
|
||
var options = this.options;
|
||
var scalesOptions = options.scales || {};
|
||
var scaleOptions = options.scale;
|
||
|
||
helpers.each(scalesOptions.xAxes, function(xAxisOptions, index) {
|
||
xAxisOptions.id = xAxisOptions.id || ('x-axis-' + index);
|
||
});
|
||
|
||
helpers.each(scalesOptions.yAxes, function(yAxisOptions, index) {
|
||
yAxisOptions.id = yAxisOptions.id || ('y-axis-' + index);
|
||
});
|
||
|
||
if (scaleOptions) {
|
||
scaleOptions.id = scaleOptions.id || 'scale';
|
||
}
|
||
},
|
||
|
||
/**
|
||
* Builds a map of scale ID to scale object for future lookup.
|
||
*/
|
||
buildScales: function() {
|
||
var me = this;
|
||
var options = me.options;
|
||
var scales = me.scales = {};
|
||
var items = [];
|
||
|
||
if (options.scales) {
|
||
items = items.concat(
|
||
(options.scales.xAxes || []).map(function(xAxisOptions) {
|
||
return {options: xAxisOptions, dtype: 'category'};
|
||
}),
|
||
(options.scales.yAxes || []).map(function(yAxisOptions) {
|
||
return {options: yAxisOptions, dtype: 'linear'};
|
||
})
|
||
);
|
||
}
|
||
|
||
if (options.scale) {
|
||
items.push({options: options.scale, dtype: 'radialLinear', isDefault: true});
|
||
}
|
||
|
||
helpers.each(items, function(item) {
|
||
var scaleOptions = item.options;
|
||
var scaleType = helpers.getValueOrDefault(scaleOptions.type, item.dtype);
|
||
var scaleClass = Chart.scaleService.getScaleConstructor(scaleType);
|
||
if (!scaleClass) {
|
||
return;
|
||
}
|
||
|
||
var scale = new scaleClass({
|
||
id: scaleOptions.id,
|
||
options: scaleOptions,
|
||
ctx: me.chart.ctx,
|
||
chart: me
|
||
});
|
||
|
||
scales[scale.id] = scale;
|
||
|
||
// TODO(SB): I think we should be able to remove this custom case (options.scale)
|
||
// and consider it as a regular scale part of the "scales"" map only! This would
|
||
// make the logic easier and remove some useless? custom code.
|
||
if (item.isDefault) {
|
||
me.scale = scale;
|
||
}
|
||
});
|
||
|
||
Chart.scaleService.addScalesToLayout(this);
|
||
},
|
||
|
||
buildOrUpdateControllers: function() {
|
||
var me = this;
|
||
var types = [];
|
||
var newControllers = [];
|
||
|
||
helpers.each(me.data.datasets, function(dataset, datasetIndex) {
|
||
var meta = me.getDatasetMeta(datasetIndex);
|
||
if (!meta.type) {
|
||
meta.type = dataset.type || me.config.type;
|
||
}
|
||
|
||
types.push(meta.type);
|
||
|
||
if (meta.controller) {
|
||
meta.controller.updateIndex(datasetIndex);
|
||
} else {
|
||
meta.controller = new Chart.controllers[meta.type](me, datasetIndex);
|
||
newControllers.push(meta.controller);
|
||
}
|
||
}, me);
|
||
|
||
if (types.length > 1) {
|
||
for (var i = 1; i < types.length; i++) {
|
||
if (types[i] !== types[i - 1]) {
|
||
me.isCombo = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
return newControllers;
|
||
},
|
||
|
||
/**
|
||
* Reset the elements of all datasets
|
||
* @private
|
||
*/
|
||
resetElements: function() {
|
||
var me = this;
|
||
helpers.each(me.data.datasets, function(dataset, datasetIndex) {
|
||
me.getDatasetMeta(datasetIndex).controller.reset();
|
||
}, me);
|
||
},
|
||
|
||
/**
|
||
* Resets the chart back to it's state before the initial animation
|
||
*/
|
||
reset: function() {
|
||
this.resetElements();
|
||
this.tooltip.initialize();
|
||
},
|
||
|
||
update: function(animationDuration, lazy) {
|
||
var me = this;
|
||
|
||
updateConfig(me);
|
||
|
||
if (plugins.notify(me, 'beforeUpdate') === false) {
|
||
return;
|
||
}
|
||
|
||
// In case the entire data object changed
|
||
me.tooltip._data = me.data;
|
||
|
||
// Make sure dataset controllers are updated and new controllers are reset
|
||
var newControllers = me.buildOrUpdateControllers();
|
||
|
||
// Make sure all dataset controllers have correct meta data counts
|
||
helpers.each(me.data.datasets, function(dataset, datasetIndex) {
|
||
me.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();
|
||
}, me);
|
||
|
||
me.updateLayout();
|
||
|
||
// Can only reset the new controllers after the scales have been updated
|
||
helpers.each(newControllers, function(controller) {
|
||
controller.reset();
|
||
});
|
||
|
||
me.updateDatasets();
|
||
|
||
// Do this before render so that any plugins that need final scale updates can use it
|
||
plugins.notify(me, 'afterUpdate');
|
||
|
||
if (me._bufferedRender) {
|
||
me._bufferedRequest = {
|
||
lazy: lazy,
|
||
duration: animationDuration
|
||
};
|
||
} else {
|
||
me.render(animationDuration, lazy);
|
||
}
|
||
},
|
||
|
||
/**
|
||
* Updates the chart layout unless a plugin returns `false` to the `beforeLayout`
|
||
* hook, in which case, plugins will not be called on `afterLayout`.
|
||
* @private
|
||
*/
|
||
updateLayout: function() {
|
||
var me = this;
|
||
|
||
if (plugins.notify(me, 'beforeLayout') === false) {
|
||
return;
|
||
}
|
||
|
||
Chart.layoutService.update(this, this.chart.width, this.chart.height);
|
||
|
||
/**
|
||
* Provided for backward compatibility, use `afterLayout` instead.
|
||
* @method IPlugin#afterScaleUpdate
|
||
* @deprecated since version 2.5.0
|
||
* @todo remove at version 3
|
||
*/
|
||
plugins.notify(me, 'afterScaleUpdate');
|
||
plugins.notify(me, 'afterLayout');
|
||
},
|
||
|
||
/**
|
||
* Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`
|
||
* hook, in which case, plugins will not be called on `afterDatasetsUpdate`.
|
||
* @private
|
||
*/
|
||
updateDatasets: function() {
|
||
var me = this;
|
||
|
||
if (plugins.notify(me, 'beforeDatasetsUpdate') === false) {
|
||
return;
|
||
}
|
||
|
||
for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
|
||
me.getDatasetMeta(i).controller.update();
|
||
}
|
||
|
||
plugins.notify(me, 'afterDatasetsUpdate');
|
||
},
|
||
|
||
render: function(duration, lazy) {
|
||
var me = this;
|
||
|
||
if (plugins.notify(me, 'beforeRender') === false) {
|
||
return;
|
||
}
|
||
|
||
var animationOptions = me.options.animation;
|
||
var onComplete = function() {
|
||
plugins.notify(me, 'afterRender');
|
||
var callback = animationOptions && animationOptions.onComplete;
|
||
if (callback && callback.call) {
|
||
callback.call(me);
|
||
}
|
||
};
|
||
|
||
if (animationOptions && ((typeof duration !== 'undefined' && duration !== 0) || (typeof duration === 'undefined' && animationOptions.duration !== 0))) {
|
||
var animation = new Chart.Animation();
|
||
animation.numSteps = (duration || animationOptions.duration) / 16.66; // 60 fps
|
||
animation.easing = animationOptions.easing;
|
||
|
||
// render function
|
||
animation.render = function(chartInstance, animationObject) {
|
||
var easingFunction = helpers.easingEffects[animationObject.easing];
|
||
var stepDecimal = animationObject.currentStep / animationObject.numSteps;
|
||
var easeDecimal = easingFunction(stepDecimal);
|
||
|
||
chartInstance.draw(easeDecimal, stepDecimal, animationObject.currentStep);
|
||
};
|
||
|
||
// user events
|
||
animation.onAnimationProgress = animationOptions.onProgress;
|
||
animation.onAnimationComplete = onComplete;
|
||
|
||
Chart.animationService.addAnimation(me, animation, duration, lazy);
|
||
} else {
|
||
me.draw();
|
||
onComplete();
|
||
}
|
||
|
||
return me;
|
||
},
|
||
|
||
draw: function(easingValue) {
|
||
var me = this;
|
||
|
||
me.clear();
|
||
|
||
if (easingValue === undefined || easingValue === null) {
|
||
easingValue = 1;
|
||
}
|
||
|
||
if (plugins.notify(me, 'beforeDraw', [easingValue]) === false) {
|
||
return;
|
||
}
|
||
|
||
// Draw all the scales
|
||
helpers.each(me.boxes, function(box) {
|
||
box.draw(me.chartArea);
|
||
}, me);
|
||
|
||
if (me.scale) {
|
||
me.scale.draw();
|
||
}
|
||
|
||
me.drawDatasets(easingValue);
|
||
|
||
// Finally draw the tooltip
|
||
me.tooltip.transition(easingValue).draw();
|
||
|
||
plugins.notify(me, 'afterDraw', [easingValue]);
|
||
},
|
||
|
||
/**
|
||
* Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`
|
||
* hook, in which case, plugins will not be called on `afterDatasetsDraw`.
|
||
* @private
|
||
*/
|
||
drawDatasets: function(easingValue) {
|
||
var me = this;
|
||
|
||
if (plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {
|
||
return;
|
||
}
|
||
|
||
// Draw each dataset via its respective controller (reversed to support proper line stacking)
|
||
helpers.each(me.data.datasets, function(dataset, datasetIndex) {
|
||
if (me.isDatasetVisible(datasetIndex)) {
|
||
me.getDatasetMeta(datasetIndex).controller.draw(easingValue);
|
||
}
|
||
}, me, true);
|
||
|
||
plugins.notify(me, 'afterDatasetsDraw', [easingValue]);
|
||
},
|
||
|
||
// Get the single element that was clicked on
|
||
// @return : An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw
|
||
getElementAtEvent: function(e) {
|
||
return Chart.Interaction.modes.single(this, e);
|
||
},
|
||
|
||
getElementsAtEvent: function(e) {
|
||
return Chart.Interaction.modes.label(this, e, {intersect: true});
|
||
},
|
||
|
||
getElementsAtXAxis: function(e) {
|
||
return Chart.Interaction.modes['x-axis'](this, e, {intersect: true});
|
||
},
|
||
|
||
getElementsAtEventForMode: function(e, mode, options) {
|
||
var method = Chart.Interaction.modes[mode];
|
||
if (typeof method === 'function') {
|
||
return method(this, e, options);
|
||
}
|
||
|
||
return [];
|
||
},
|
||
|
||
getDatasetAtEvent: function(e) {
|
||
return Chart.Interaction.modes.dataset(this, e, {intersect: true});
|
||
},
|
||
|
||
getDatasetMeta: function(datasetIndex) {
|
||
var me = this;
|
||
var dataset = me.data.datasets[datasetIndex];
|
||
if (!dataset._meta) {
|
||
dataset._meta = {};
|
||
}
|
||
|
||
var meta = dataset._meta[me.id];
|
||
if (!meta) {
|
||
meta = dataset._meta[me.id] = {
|
||
type: null,
|
||
data: [],
|
||
dataset: null,
|
||
controller: null,
|
||
hidden: null, // See isDatasetVisible() comment
|
||
xAxisID: null,
|
||
yAxisID: null
|
||
};
|
||
}
|
||
|
||
return meta;
|
||
},
|
||
|
||
getVisibleDatasetCount: function() {
|
||
var count = 0;
|
||
for (var i = 0, ilen = this.data.datasets.length; i<ilen; ++i) {
|
||
if (this.isDatasetVisible(i)) {
|
||
count++;
|
||
}
|
||
}
|
||
return count;
|
||
},
|
||
|
||
isDatasetVisible: function(datasetIndex) {
|
||
var meta = this.getDatasetMeta(datasetIndex);
|
||
|
||
// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,
|
||
// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.
|
||
return typeof meta.hidden === 'boolean'? !meta.hidden : !this.data.datasets[datasetIndex].hidden;
|
||
},
|
||
|
||
generateLegend: function() {
|
||
return this.options.legendCallback(this);
|
||
},
|
||
|
||
destroy: function() {
|
||
var me = this;
|
||
var canvas = me.chart.canvas;
|
||
var meta, i, ilen;
|
||
|
||
me.stop();
|
||
|
||
// dataset controllers need to cleanup associated data
|
||
for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
|
||
meta = me.getDatasetMeta(i);
|
||
if (meta.controller) {
|
||
meta.controller.destroy();
|
||
meta.controller = null;
|
||
}
|
||
}
|
||
|
||
if (canvas) {
|
||
me.unbindEvents();
|
||
helpers.clear(me.chart);
|
||
platform.releaseContext(me.chart.ctx);
|
||
me.chart.canvas = null;
|
||
me.chart.ctx = null;
|
||
}
|
||
|
||
plugins.notify(me, 'destroy');
|
||
|
||
delete Chart.instances[me.id];
|
||
},
|
||
|
||
toBase64Image: function() {
|
||
return this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments);
|
||
},
|
||
|
||
initToolTip: function() {
|
||
var me = this;
|
||
me.tooltip = new Chart.Tooltip({
|
||
_chart: me.chart,
|
||
_chartInstance: me,
|
||
_data: me.data,
|
||
_options: me.options.tooltips
|
||
}, me);
|
||
me.tooltip.initialize();
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
bindEvents: function() {
|
||
var me = this;
|
||
var listeners = me._listeners = {};
|
||
var listener = function() {
|
||
me.eventHandler.apply(me, arguments);
|
||
};
|
||
|
||
helpers.each(me.options.events, function(type) {
|
||
platform.addEventListener(me, type, listener);
|
||
listeners[type] = listener;
|
||
});
|
||
|
||
// Responsiveness is currently based on the use of an iframe, however this method causes
|
||
// performance issues and could be troublesome when used with ad blockers. So make sure
|
||
// that the user is still able to create a chart without iframe when responsive is false.
|
||
// See https://github.com/chartjs/Chart.js/issues/2210
|
||
if (me.options.responsive) {
|
||
listener = function() {
|
||
me.resize();
|
||
};
|
||
|
||
platform.addEventListener(me, 'resize', listener);
|
||
listeners.resize = listener;
|
||
}
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
unbindEvents: function() {
|
||
var me = this;
|
||
var listeners = me._listeners;
|
||
if (!listeners) {
|
||
return;
|
||
}
|
||
|
||
delete me._listeners;
|
||
helpers.each(listeners, function(listener, type) {
|
||
platform.removeEventListener(me, type, listener);
|
||
});
|
||
},
|
||
|
||
updateHoverStyle: function(elements, mode, enabled) {
|
||
var method = enabled? 'setHoverStyle' : 'removeHoverStyle';
|
||
var element, i, ilen;
|
||
|
||
for (i=0, ilen=elements.length; i<ilen; ++i) {
|
||
element = elements[i];
|
||
if (element) {
|
||
this.getDatasetMeta(element._datasetIndex).controller[method](element);
|
||
}
|
||
}
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
eventHandler: function(e) {
|
||
var me = this;
|
||
var tooltip = me.tooltip;
|
||
|
||
if (plugins.notify(me, 'beforeEvent', [e]) === false) {
|
||
return;
|
||
}
|
||
|
||
// Buffer any update calls so that renders do not occur
|
||
me._bufferedRender = true;
|
||
me._bufferedRequest = null;
|
||
|
||
var changed = me.handleEvent(e);
|
||
changed |= tooltip && tooltip.handleEvent(e);
|
||
|
||
plugins.notify(me, 'afterEvent', [e]);
|
||
|
||
var bufferedRequest = me._bufferedRequest;
|
||
if (bufferedRequest) {
|
||
// If we have an update that was triggered, we need to do a normal render
|
||
me.render(bufferedRequest.duration, bufferedRequest.lazy);
|
||
} else if (changed && !me.animating) {
|
||
// If entering, leaving, or changing elements, animate the change via pivot
|
||
me.stop();
|
||
|
||
// We only need to render at this point. Updating will cause scales to be
|
||
// recomputed generating flicker & using more memory than necessary.
|
||
me.render(me.options.hover.animationDuration, true);
|
||
}
|
||
|
||
me._bufferedRender = false;
|
||
me._bufferedRequest = null;
|
||
|
||
return me;
|
||
},
|
||
|
||
/**
|
||
* Handle an event
|
||
* @private
|
||
* @param {IEvent} event the event to handle
|
||
* @return {Boolean} true if the chart needs to re-render
|
||
*/
|
||
handleEvent: function(e) {
|
||
var me = this;
|
||
var options = me.options || {};
|
||
var hoverOptions = options.hover;
|
||
var changed = false;
|
||
|
||
me.lastActive = me.lastActive || [];
|
||
|
||
// Find Active Elements for hover and tooltips
|
||
if (e.type === 'mouseout') {
|
||
me.active = [];
|
||
} else {
|
||
me.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);
|
||
}
|
||
|
||
// On Hover hook
|
||
if (hoverOptions.onHover) {
|
||
// Need to call with native event here to not break backwards compatibility
|
||
hoverOptions.onHover.call(me, e.native, me.active);
|
||
}
|
||
|
||
if (e.type === 'mouseup' || e.type === 'click') {
|
||
if (options.onClick) {
|
||
// Use e.native here for backwards compatibility
|
||
options.onClick.call(me, e.native, me.active);
|
||
}
|
||
}
|
||
|
||
// Remove styling for last active (even if it may still be active)
|
||
if (me.lastActive.length) {
|
||
me.updateHoverStyle(me.lastActive, hoverOptions.mode, false);
|
||
}
|
||
|
||
// Built in hover styling
|
||
if (me.active.length && hoverOptions.mode) {
|
||
me.updateHoverStyle(me.active, hoverOptions.mode, true);
|
||
}
|
||
|
||
changed = !helpers.arrayEquals(me.active, me.lastActive);
|
||
|
||
// Remember Last Actives
|
||
me.lastActive = me.active;
|
||
|
||
return changed;
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 19 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];
|
||
|
||
/**
|
||
* Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',
|
||
* 'unshift') and notify the listener AFTER the array has been altered. Listeners are
|
||
* called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.
|
||
*/
|
||
function listenArrayEvents(array, listener) {
|
||
if (array._chartjs) {
|
||
array._chartjs.listeners.push(listener);
|
||
return;
|
||
}
|
||
|
||
Object.defineProperty(array, '_chartjs', {
|
||
configurable: true,
|
||
enumerable: false,
|
||
value: {
|
||
listeners: [listener]
|
||
}
|
||
});
|
||
|
||
arrayEvents.forEach(function(key) {
|
||
var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);
|
||
var base = array[key];
|
||
|
||
Object.defineProperty(array, key, {
|
||
configurable: true,
|
||
enumerable: false,
|
||
value: function() {
|
||
var args = Array.prototype.slice.call(arguments);
|
||
var res = base.apply(this, args);
|
||
|
||
helpers.each(array._chartjs.listeners, function(object) {
|
||
if (typeof object[method] === 'function') {
|
||
object[method].apply(object, args);
|
||
}
|
||
});
|
||
|
||
return res;
|
||
}
|
||
});
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Removes the given array event listener and cleanup extra attached properties (such as
|
||
* the _chartjs stub and overridden methods) if array doesn't have any more listeners.
|
||
*/
|
||
function unlistenArrayEvents(array, listener) {
|
||
var stub = array._chartjs;
|
||
if (!stub) {
|
||
return;
|
||
}
|
||
|
||
var listeners = stub.listeners;
|
||
var index = listeners.indexOf(listener);
|
||
if (index !== -1) {
|
||
listeners.splice(index, 1);
|
||
}
|
||
|
||
if (listeners.length > 0) {
|
||
return;
|
||
}
|
||
|
||
arrayEvents.forEach(function(key) {
|
||
delete array[key];
|
||
});
|
||
|
||
delete array._chartjs;
|
||
}
|
||
|
||
// Base class for all dataset controllers (line, bar, etc)
|
||
Chart.DatasetController = function(chart, datasetIndex) {
|
||
this.initialize(chart, datasetIndex);
|
||
};
|
||
|
||
helpers.extend(Chart.DatasetController.prototype, {
|
||
|
||
/**
|
||
* Element type used to generate a meta dataset (e.g. Chart.element.Line).
|
||
* @type {Chart.core.element}
|
||
*/
|
||
datasetElementType: null,
|
||
|
||
/**
|
||
* Element type used to generate a meta data (e.g. Chart.element.Point).
|
||
* @type {Chart.core.element}
|
||
*/
|
||
dataElementType: null,
|
||
|
||
initialize: function(chart, datasetIndex) {
|
||
var me = this;
|
||
me.chart = chart;
|
||
me.index = datasetIndex;
|
||
me.linkScales();
|
||
me.addElements();
|
||
},
|
||
|
||
updateIndex: function(datasetIndex) {
|
||
this.index = datasetIndex;
|
||
},
|
||
|
||
linkScales: function() {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var dataset = me.getDataset();
|
||
|
||
if (meta.xAxisID === null) {
|
||
meta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;
|
||
}
|
||
if (meta.yAxisID === null) {
|
||
meta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;
|
||
}
|
||
},
|
||
|
||
getDataset: function() {
|
||
return this.chart.data.datasets[this.index];
|
||
},
|
||
|
||
getMeta: function() {
|
||
return this.chart.getDatasetMeta(this.index);
|
||
},
|
||
|
||
getScaleForId: function(scaleID) {
|
||
return this.chart.scales[scaleID];
|
||
},
|
||
|
||
reset: function() {
|
||
this.update(true);
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
destroy: function() {
|
||
if (this._data) {
|
||
unlistenArrayEvents(this._data, this);
|
||
}
|
||
},
|
||
|
||
createMetaDataset: function() {
|
||
var me = this;
|
||
var type = me.datasetElementType;
|
||
return type && new type({
|
||
_chart: me.chart.chart,
|
||
_datasetIndex: me.index
|
||
});
|
||
},
|
||
|
||
createMetaData: function(index) {
|
||
var me = this;
|
||
var type = me.dataElementType;
|
||
return type && new type({
|
||
_chart: me.chart.chart,
|
||
_datasetIndex: me.index,
|
||
_index: index
|
||
});
|
||
},
|
||
|
||
addElements: function() {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var data = me.getDataset().data || [];
|
||
var metaData = meta.data;
|
||
var i, ilen;
|
||
|
||
for (i=0, ilen=data.length; i<ilen; ++i) {
|
||
metaData[i] = metaData[i] || me.createMetaData(i);
|
||
}
|
||
|
||
meta.dataset = meta.dataset || me.createMetaDataset();
|
||
},
|
||
|
||
addElementAndReset: function(index) {
|
||
var element = this.createMetaData(index);
|
||
this.getMeta().data.splice(index, 0, element);
|
||
this.updateElement(element, index, true);
|
||
},
|
||
|
||
buildOrUpdateElements: function() {
|
||
var me = this;
|
||
var dataset = me.getDataset();
|
||
var data = dataset.data || (dataset.data = []);
|
||
|
||
// In order to correctly handle data addition/deletion animation (an thus simulate
|
||
// real-time charts), we need to monitor these data modifications and synchronize
|
||
// the internal meta data accordingly.
|
||
if (me._data !== data) {
|
||
if (me._data) {
|
||
// This case happens when the user replaced the data array instance.
|
||
unlistenArrayEvents(me._data, me);
|
||
}
|
||
|
||
listenArrayEvents(data, me);
|
||
me._data = data;
|
||
}
|
||
|
||
// Re-sync meta data in case the user replaced the data array or if we missed
|
||
// any updates and so make sure that we handle number of datapoints changing.
|
||
me.resyncElements();
|
||
},
|
||
|
||
update: helpers.noop,
|
||
|
||
draw: function(ease) {
|
||
var easingDecimal = ease || 1;
|
||
var i, len;
|
||
var metaData = this.getMeta().data;
|
||
for (i = 0, len = metaData.length; i < len; ++i) {
|
||
metaData[i].transition(easingDecimal).draw();
|
||
}
|
||
},
|
||
|
||
removeHoverStyle: function(element, elementOpts) {
|
||
var dataset = this.chart.data.datasets[element._datasetIndex],
|
||
index = element._index,
|
||
custom = element.custom || {},
|
||
valueOrDefault = helpers.getValueAtIndexOrDefault,
|
||
model = element._model;
|
||
|
||
model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : valueOrDefault(dataset.backgroundColor, index, elementOpts.backgroundColor);
|
||
model.borderColor = custom.borderColor ? custom.borderColor : valueOrDefault(dataset.borderColor, index, elementOpts.borderColor);
|
||
model.borderWidth = custom.borderWidth ? custom.borderWidth : valueOrDefault(dataset.borderWidth, index, elementOpts.borderWidth);
|
||
},
|
||
|
||
setHoverStyle: function(element) {
|
||
var dataset = this.chart.data.datasets[element._datasetIndex],
|
||
index = element._index,
|
||
custom = element.custom || {},
|
||
valueOrDefault = helpers.getValueAtIndexOrDefault,
|
||
getHoverColor = helpers.getHoverColor,
|
||
model = element._model;
|
||
|
||
model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : valueOrDefault(dataset.hoverBackgroundColor, index, getHoverColor(model.backgroundColor));
|
||
model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : valueOrDefault(dataset.hoverBorderColor, index, getHoverColor(model.borderColor));
|
||
model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : valueOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
resyncElements: function() {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var data = me.getDataset().data;
|
||
var numMeta = meta.data.length;
|
||
var numData = data.length;
|
||
|
||
if (numData < numMeta) {
|
||
meta.data.splice(numData, numMeta - numData);
|
||
} else if (numData > numMeta) {
|
||
me.insertElements(numMeta, numData - numMeta);
|
||
}
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
insertElements: function(start, count) {
|
||
for (var i=0; i<count; ++i) {
|
||
this.addElementAndReset(start + i);
|
||
}
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
onDataPush: function() {
|
||
this.insertElements(this.getDataset().data.length-1, arguments.length);
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
onDataPop: function() {
|
||
this.getMeta().data.pop();
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
onDataShift: function() {
|
||
this.getMeta().data.shift();
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
onDataSplice: function(start, count) {
|
||
this.getMeta().data.splice(start, count);
|
||
this.insertElements(start, arguments.length - 2);
|
||
},
|
||
|
||
/**
|
||
* @private
|
||
*/
|
||
onDataUnshift: function() {
|
||
this.insertElements(0, arguments.length);
|
||
}
|
||
});
|
||
|
||
Chart.DatasetController.extend = helpers.inherits;
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 20 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
// The layout service is very self explanatory. It's responsible for the layout within a chart.
|
||
// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need
|
||
// It is this service's responsibility of carrying out that layout.
|
||
Chart.layoutService = {
|
||
defaults: {},
|
||
|
||
// Register a box to a chartInstance. A box is simply a reference to an object that requires layout. eg. Scales, Legend, Plugins.
|
||
addBox: function(chartInstance, box) {
|
||
if (!chartInstance.boxes) {
|
||
chartInstance.boxes = [];
|
||
}
|
||
chartInstance.boxes.push(box);
|
||
},
|
||
|
||
removeBox: function(chartInstance, box) {
|
||
if (!chartInstance.boxes) {
|
||
return;
|
||
}
|
||
chartInstance.boxes.splice(chartInstance.boxes.indexOf(box), 1);
|
||
},
|
||
|
||
// The most important function
|
||
update: function(chartInstance, width, height) {
|
||
|
||
if (!chartInstance) {
|
||
return;
|
||
}
|
||
|
||
var layoutOptions = chartInstance.options.layout;
|
||
var padding = layoutOptions ? layoutOptions.padding : null;
|
||
|
||
var leftPadding = 0;
|
||
var rightPadding = 0;
|
||
var topPadding = 0;
|
||
var bottomPadding = 0;
|
||
|
||
if (!isNaN(padding)) {
|
||
// options.layout.padding is a number. assign to all
|
||
leftPadding = padding;
|
||
rightPadding = padding;
|
||
topPadding = padding;
|
||
bottomPadding = padding;
|
||
} else {
|
||
leftPadding = padding.left || 0;
|
||
rightPadding = padding.right || 0;
|
||
topPadding = padding.top || 0;
|
||
bottomPadding = padding.bottom || 0;
|
||
}
|
||
|
||
var leftBoxes = helpers.where(chartInstance.boxes, function(box) {
|
||
return box.options.position === 'left';
|
||
});
|
||
var rightBoxes = helpers.where(chartInstance.boxes, function(box) {
|
||
return box.options.position === 'right';
|
||
});
|
||
var topBoxes = helpers.where(chartInstance.boxes, function(box) {
|
||
return box.options.position === 'top';
|
||
});
|
||
var bottomBoxes = helpers.where(chartInstance.boxes, function(box) {
|
||
return box.options.position === 'bottom';
|
||
});
|
||
|
||
// Boxes that overlay the chartarea such as the radialLinear scale
|
||
var chartAreaBoxes = helpers.where(chartInstance.boxes, function(box) {
|
||
return box.options.position === 'chartArea';
|
||
});
|
||
|
||
// Ensure that full width boxes are at the very top / bottom
|
||
topBoxes.sort(function(a, b) {
|
||
return (b.options.fullWidth ? 1 : 0) - (a.options.fullWidth ? 1 : 0);
|
||
});
|
||
bottomBoxes.sort(function(a, b) {
|
||
return (a.options.fullWidth ? 1 : 0) - (b.options.fullWidth ? 1 : 0);
|
||
});
|
||
|
||
// Essentially we now have any number of boxes on each of the 4 sides.
|
||
// Our canvas looks like the following.
|
||
// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and
|
||
// B1 is the bottom axis
|
||
// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays
|
||
// These locations are single-box locations only, when trying to register a chartArea location that is already taken,
|
||
// an error will be thrown.
|
||
//
|
||
// |----------------------------------------------------|
|
||
// | T1 (Full Width) |
|
||
// |----------------------------------------------------|
|
||
// | | | T2 | |
|
||
// | |----|-------------------------------------|----|
|
||
// | | | C1 | | C2 | |
|
||
// | | |----| |----| |
|
||
// | | | | |
|
||
// | L1 | L2 | ChartArea (C0) | R1 |
|
||
// | | | | |
|
||
// | | |----| |----| |
|
||
// | | | C3 | | C4 | |
|
||
// | |----|-------------------------------------|----|
|
||
// | | | B1 | |
|
||
// |----------------------------------------------------|
|
||
// | B2 (Full Width) |
|
||
// |----------------------------------------------------|
|
||
//
|
||
// What we do to find the best sizing, we do the following
|
||
// 1. Determine the minimum size of the chart area.
|
||
// 2. Split the remaining width equally between each vertical axis
|
||
// 3. Split the remaining height equally between each horizontal axis
|
||
// 4. Give each layout the maximum size it can be. The layout will return it's minimum size
|
||
// 5. Adjust the sizes of each axis based on it's minimum reported size.
|
||
// 6. Refit each axis
|
||
// 7. Position each axis in the final location
|
||
// 8. Tell the chart the final location of the chart area
|
||
// 9. Tell any axes that overlay the chart area the positions of the chart area
|
||
|
||
// Step 1
|
||
var chartWidth = width - leftPadding - rightPadding;
|
||
var chartHeight = height - topPadding - bottomPadding;
|
||
var chartAreaWidth = chartWidth / 2; // min 50%
|
||
var chartAreaHeight = chartHeight / 2; // min 50%
|
||
|
||
// Step 2
|
||
var verticalBoxWidth = (width - chartAreaWidth) / (leftBoxes.length + rightBoxes.length);
|
||
|
||
// Step 3
|
||
var horizontalBoxHeight = (height - chartAreaHeight) / (topBoxes.length + bottomBoxes.length);
|
||
|
||
// Step 4
|
||
var maxChartAreaWidth = chartWidth;
|
||
var maxChartAreaHeight = chartHeight;
|
||
var minBoxSizes = [];
|
||
|
||
function getMinimumBoxSize(box) {
|
||
var minSize;
|
||
var isHorizontal = box.isHorizontal();
|
||
|
||
if (isHorizontal) {
|
||
minSize = box.update(box.options.fullWidth ? chartWidth : maxChartAreaWidth, horizontalBoxHeight);
|
||
maxChartAreaHeight -= minSize.height;
|
||
} else {
|
||
minSize = box.update(verticalBoxWidth, chartAreaHeight);
|
||
maxChartAreaWidth -= minSize.width;
|
||
}
|
||
|
||
minBoxSizes.push({
|
||
horizontal: isHorizontal,
|
||
minSize: minSize,
|
||
box: box,
|
||
});
|
||
}
|
||
|
||
helpers.each(leftBoxes.concat(rightBoxes, topBoxes, bottomBoxes), getMinimumBoxSize);
|
||
|
||
// If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)
|
||
var maxHorizontalLeftPadding = 0;
|
||
var maxHorizontalRightPadding = 0;
|
||
var maxVerticalTopPadding = 0;
|
||
var maxVerticalBottomPadding = 0;
|
||
|
||
helpers.each(topBoxes.concat(bottomBoxes), function(horizontalBox) {
|
||
if (horizontalBox.getPadding) {
|
||
var boxPadding = horizontalBox.getPadding();
|
||
maxHorizontalLeftPadding = Math.max(maxHorizontalLeftPadding, boxPadding.left);
|
||
maxHorizontalRightPadding = Math.max(maxHorizontalRightPadding, boxPadding.right);
|
||
}
|
||
});
|
||
|
||
helpers.each(leftBoxes.concat(rightBoxes), function(verticalBox) {
|
||
if (verticalBox.getPadding) {
|
||
var boxPadding = verticalBox.getPadding();
|
||
maxVerticalTopPadding = Math.max(maxVerticalTopPadding, boxPadding.top);
|
||
maxVerticalBottomPadding = Math.max(maxVerticalBottomPadding, boxPadding.bottom);
|
||
}
|
||
});
|
||
|
||
// At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could
|
||
// be if the axes are drawn at their minimum sizes.
|
||
// Steps 5 & 6
|
||
var totalLeftBoxesWidth = leftPadding;
|
||
var totalRightBoxesWidth = rightPadding;
|
||
var totalTopBoxesHeight = topPadding;
|
||
var totalBottomBoxesHeight = bottomPadding;
|
||
|
||
// Function to fit a box
|
||
function fitBox(box) {
|
||
var minBoxSize = helpers.findNextWhere(minBoxSizes, function(minBox) {
|
||
return minBox.box === box;
|
||
});
|
||
|
||
if (minBoxSize) {
|
||
if (box.isHorizontal()) {
|
||
var scaleMargin = {
|
||
left: Math.max(totalLeftBoxesWidth, maxHorizontalLeftPadding),
|
||
right: Math.max(totalRightBoxesWidth, maxHorizontalRightPadding),
|
||
top: 0,
|
||
bottom: 0
|
||
};
|
||
|
||
// Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends
|
||
// on the margin. Sometimes they need to increase in size slightly
|
||
box.update(box.options.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);
|
||
} else {
|
||
box.update(minBoxSize.minSize.width, maxChartAreaHeight);
|
||
}
|
||
}
|
||
}
|
||
|
||
// Update, and calculate the left and right margins for the horizontal boxes
|
||
helpers.each(leftBoxes.concat(rightBoxes), fitBox);
|
||
|
||
helpers.each(leftBoxes, function(box) {
|
||
totalLeftBoxesWidth += box.width;
|
||
});
|
||
|
||
helpers.each(rightBoxes, function(box) {
|
||
totalRightBoxesWidth += box.width;
|
||
});
|
||
|
||
// Set the Left and Right margins for the horizontal boxes
|
||
helpers.each(topBoxes.concat(bottomBoxes), fitBox);
|
||
|
||
// Figure out how much margin is on the top and bottom of the vertical boxes
|
||
helpers.each(topBoxes, function(box) {
|
||
totalTopBoxesHeight += box.height;
|
||
});
|
||
|
||
helpers.each(bottomBoxes, function(box) {
|
||
totalBottomBoxesHeight += box.height;
|
||
});
|
||
|
||
function finalFitVerticalBox(box) {
|
||
var minBoxSize = helpers.findNextWhere(minBoxSizes, function(minSize) {
|
||
return minSize.box === box;
|
||
});
|
||
|
||
var scaleMargin = {
|
||
left: 0,
|
||
right: 0,
|
||
top: totalTopBoxesHeight,
|
||
bottom: totalBottomBoxesHeight
|
||
};
|
||
|
||
if (minBoxSize) {
|
||
box.update(minBoxSize.minSize.width, maxChartAreaHeight, scaleMargin);
|
||
}
|
||
}
|
||
|
||
// Let the left layout know the final margin
|
||
helpers.each(leftBoxes.concat(rightBoxes), finalFitVerticalBox);
|
||
|
||
// Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)
|
||
totalLeftBoxesWidth = leftPadding;
|
||
totalRightBoxesWidth = rightPadding;
|
||
totalTopBoxesHeight = topPadding;
|
||
totalBottomBoxesHeight = bottomPadding;
|
||
|
||
helpers.each(leftBoxes, function(box) {
|
||
totalLeftBoxesWidth += box.width;
|
||
});
|
||
|
||
helpers.each(rightBoxes, function(box) {
|
||
totalRightBoxesWidth += box.width;
|
||
});
|
||
|
||
helpers.each(topBoxes, function(box) {
|
||
totalTopBoxesHeight += box.height;
|
||
});
|
||
helpers.each(bottomBoxes, function(box) {
|
||
totalBottomBoxesHeight += box.height;
|
||
});
|
||
|
||
// We may be adding some padding to account for rotated x axis labels
|
||
var leftPaddingAddition = Math.max(maxHorizontalLeftPadding - totalLeftBoxesWidth, 0);
|
||
totalLeftBoxesWidth += leftPaddingAddition;
|
||
totalRightBoxesWidth += Math.max(maxHorizontalRightPadding - totalRightBoxesWidth, 0);
|
||
|
||
var topPaddingAddition = Math.max(maxVerticalTopPadding - totalTopBoxesHeight, 0);
|
||
totalTopBoxesHeight += topPaddingAddition;
|
||
totalBottomBoxesHeight += Math.max(maxVerticalBottomPadding - totalBottomBoxesHeight, 0);
|
||
|
||
// Figure out if our chart area changed. This would occur if the dataset layout label rotation
|
||
// changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do
|
||
// without calling `fit` again
|
||
var newMaxChartAreaHeight = height - totalTopBoxesHeight - totalBottomBoxesHeight;
|
||
var newMaxChartAreaWidth = width - totalLeftBoxesWidth - totalRightBoxesWidth;
|
||
|
||
if (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {
|
||
helpers.each(leftBoxes, function(box) {
|
||
box.height = newMaxChartAreaHeight;
|
||
});
|
||
|
||
helpers.each(rightBoxes, function(box) {
|
||
box.height = newMaxChartAreaHeight;
|
||
});
|
||
|
||
helpers.each(topBoxes, function(box) {
|
||
if (!box.options.fullWidth) {
|
||
box.width = newMaxChartAreaWidth;
|
||
}
|
||
});
|
||
|
||
helpers.each(bottomBoxes, function(box) {
|
||
if (!box.options.fullWidth) {
|
||
box.width = newMaxChartAreaWidth;
|
||
}
|
||
});
|
||
|
||
maxChartAreaHeight = newMaxChartAreaHeight;
|
||
maxChartAreaWidth = newMaxChartAreaWidth;
|
||
}
|
||
|
||
// Step 7 - Position the boxes
|
||
var left = leftPadding + leftPaddingAddition;
|
||
var top = topPadding + topPaddingAddition;
|
||
|
||
function placeBox(box) {
|
||
if (box.isHorizontal()) {
|
||
box.left = box.options.fullWidth ? leftPadding : totalLeftBoxesWidth;
|
||
box.right = box.options.fullWidth ? width - rightPadding : totalLeftBoxesWidth + maxChartAreaWidth;
|
||
box.top = top;
|
||
box.bottom = top + box.height;
|
||
|
||
// Move to next point
|
||
top = box.bottom;
|
||
|
||
} else {
|
||
|
||
box.left = left;
|
||
box.right = left + box.width;
|
||
box.top = totalTopBoxesHeight;
|
||
box.bottom = totalTopBoxesHeight + maxChartAreaHeight;
|
||
|
||
// Move to next point
|
||
left = box.right;
|
||
}
|
||
}
|
||
|
||
helpers.each(leftBoxes.concat(topBoxes), placeBox);
|
||
|
||
// Account for chart width and height
|
||
left += maxChartAreaWidth;
|
||
top += maxChartAreaHeight;
|
||
|
||
helpers.each(rightBoxes, placeBox);
|
||
helpers.each(bottomBoxes, placeBox);
|
||
|
||
// Step 8
|
||
chartInstance.chartArea = {
|
||
left: totalLeftBoxesWidth,
|
||
top: totalTopBoxesHeight,
|
||
right: totalLeftBoxesWidth + maxChartAreaWidth,
|
||
bottom: totalTopBoxesHeight + maxChartAreaHeight
|
||
};
|
||
|
||
// Step 9
|
||
helpers.each(chartAreaBoxes, function(box) {
|
||
box.left = chartInstance.chartArea.left;
|
||
box.top = chartInstance.chartArea.top;
|
||
box.right = chartInstance.chartArea.right;
|
||
box.bottom = chartInstance.chartArea.bottom;
|
||
|
||
box.update(maxChartAreaWidth, maxChartAreaHeight);
|
||
});
|
||
}
|
||
};
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 21 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.scaleService = {
|
||
// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then
|
||
// use the new chart options to grab the correct scale
|
||
constructors: {},
|
||
// Use a registration function so that we can move to an ES6 map when we no longer need to support
|
||
// old browsers
|
||
|
||
// Scale config defaults
|
||
defaults: {},
|
||
registerScaleType: function(type, scaleConstructor, defaults) {
|
||
this.constructors[type] = scaleConstructor;
|
||
this.defaults[type] = helpers.clone(defaults);
|
||
},
|
||
getScaleConstructor: function(type) {
|
||
return this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;
|
||
},
|
||
getScaleDefaults: function(type) {
|
||
// Return the scale defaults merged with the global settings so that we always use the latest ones
|
||
return this.defaults.hasOwnProperty(type) ? helpers.scaleMerge(Chart.defaults.scale, this.defaults[type]) : {};
|
||
},
|
||
updateScaleDefaults: function(type, additions) {
|
||
var defaults = this.defaults;
|
||
if (defaults.hasOwnProperty(type)) {
|
||
defaults[type] = helpers.extend(defaults[type], additions);
|
||
}
|
||
},
|
||
addScalesToLayout: function(chartInstance) {
|
||
// Adds each scale to the chart.boxes array to be sized accordingly
|
||
helpers.each(chartInstance.scales, function(scale) {
|
||
Chart.layoutService.addBox(chartInstance, scale);
|
||
});
|
||
}
|
||
};
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 22 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
/**
|
||
* Namespace to hold static tick generation functions
|
||
* @namespace Chart.Ticks
|
||
*/
|
||
Chart.Ticks = {
|
||
/**
|
||
* Namespace to hold generators for different types of ticks
|
||
* @namespace Chart.Ticks.generators
|
||
*/
|
||
generators: {
|
||
/**
|
||
* Interface for the options provided to the numeric tick generator
|
||
* @interface INumericTickGenerationOptions
|
||
*/
|
||
/**
|
||
* The maximum number of ticks to display
|
||
* @name INumericTickGenerationOptions#maxTicks
|
||
* @type Number
|
||
*/
|
||
/**
|
||
* The distance between each tick.
|
||
* @name INumericTickGenerationOptions#stepSize
|
||
* @type Number
|
||
* @optional
|
||
*/
|
||
/**
|
||
* Forced minimum for the ticks. If not specified, the minimum of the data range is used to calculate the tick minimum
|
||
* @name INumericTickGenerationOptions#min
|
||
* @type Number
|
||
* @optional
|
||
*/
|
||
/**
|
||
* The maximum value of the ticks. If not specified, the maximum of the data range is used to calculate the tick maximum
|
||
* @name INumericTickGenerationOptions#max
|
||
* @type Number
|
||
* @optional
|
||
*/
|
||
|
||
/**
|
||
* Generate a set of linear ticks
|
||
* @method Chart.Ticks.generators.linear
|
||
* @param generationOptions {INumericTickGenerationOptions} the options used to generate the ticks
|
||
* @param dataRange {IRange} the range of the data
|
||
* @returns {Array<Number>} array of tick values
|
||
*/
|
||
linear: function(generationOptions, dataRange) {
|
||
var ticks = [];
|
||
// To get a "nice" value for the tick spacing, we will use the appropriately named
|
||
// "nice number" algorithm. See http://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks
|
||
// for details.
|
||
|
||
var spacing;
|
||
if (generationOptions.stepSize && generationOptions.stepSize > 0) {
|
||
spacing = generationOptions.stepSize;
|
||
} else {
|
||
var niceRange = helpers.niceNum(dataRange.max - dataRange.min, false);
|
||
spacing = helpers.niceNum(niceRange / (generationOptions.maxTicks - 1), true);
|
||
}
|
||
var niceMin = Math.floor(dataRange.min / spacing) * spacing;
|
||
var niceMax = Math.ceil(dataRange.max / spacing) * spacing;
|
||
|
||
// If min, max and stepSize is set and they make an evenly spaced scale use it.
|
||
if (generationOptions.min && generationOptions.max && generationOptions.stepSize) {
|
||
// If very close to our whole number, use it.
|
||
if (helpers.almostWhole((generationOptions.max - generationOptions.min) / generationOptions.stepSize, spacing / 1000)) {
|
||
niceMin = generationOptions.min;
|
||
niceMax = generationOptions.max;
|
||
}
|
||
}
|
||
|
||
var numSpaces = (niceMax - niceMin) / spacing;
|
||
// If very close to our rounded value, use it.
|
||
if (helpers.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {
|
||
numSpaces = Math.round(numSpaces);
|
||
} else {
|
||
numSpaces = Math.ceil(numSpaces);
|
||
}
|
||
|
||
// Put the values into the ticks array
|
||
ticks.push(generationOptions.min !== undefined ? generationOptions.min : niceMin);
|
||
for (var j = 1; j < numSpaces; ++j) {
|
||
ticks.push(niceMin + (j * spacing));
|
||
}
|
||
ticks.push(generationOptions.max !== undefined ? generationOptions.max : niceMax);
|
||
|
||
return ticks;
|
||
},
|
||
|
||
/**
|
||
* Generate a set of logarithmic ticks
|
||
* @method Chart.Ticks.generators.logarithmic
|
||
* @param generationOptions {INumericTickGenerationOptions} the options used to generate the ticks
|
||
* @param dataRange {IRange} the range of the data
|
||
* @returns {Array<Number>} array of tick values
|
||
*/
|
||
logarithmic: function(generationOptions, dataRange) {
|
||
var ticks = [];
|
||
var getValueOrDefault = helpers.getValueOrDefault;
|
||
|
||
// Figure out what the max number of ticks we can support it is based on the size of
|
||
// the axis area. For now, we say that the minimum tick spacing in pixels must be 50
|
||
// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on
|
||
// the graph
|
||
var tickVal = getValueOrDefault(generationOptions.min, Math.pow(10, Math.floor(helpers.log10(dataRange.min))));
|
||
|
||
var endExp = Math.floor(helpers.log10(dataRange.max));
|
||
var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));
|
||
var exp;
|
||
var significand;
|
||
|
||
if (tickVal === 0) {
|
||
exp = Math.floor(helpers.log10(dataRange.minNotZero));
|
||
significand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));
|
||
|
||
ticks.push(tickVal);
|
||
tickVal = significand * Math.pow(10, exp);
|
||
} else {
|
||
exp = Math.floor(helpers.log10(tickVal));
|
||
significand = Math.floor(tickVal / Math.pow(10, exp));
|
||
}
|
||
|
||
do {
|
||
ticks.push(tickVal);
|
||
|
||
++significand;
|
||
if (significand === 10) {
|
||
significand = 1;
|
||
++exp;
|
||
}
|
||
|
||
tickVal = significand * Math.pow(10, exp);
|
||
} while (exp < endExp || (exp === endExp && significand < endSignificand));
|
||
|
||
var lastTick = getValueOrDefault(generationOptions.max, tickVal);
|
||
ticks.push(lastTick);
|
||
|
||
return ticks;
|
||
}
|
||
},
|
||
|
||
/**
|
||
* Namespace to hold formatters for different types of ticks
|
||
* @namespace Chart.Ticks.formatters
|
||
*/
|
||
formatters: {
|
||
/**
|
||
* Formatter for value labels
|
||
* @method Chart.Ticks.formatters.values
|
||
* @param value the value to display
|
||
* @return {String|Array} the label to display
|
||
*/
|
||
values: function(value) {
|
||
return helpers.isArray(value) ? value : '' + value;
|
||
},
|
||
|
||
/**
|
||
* Formatter for linear numeric ticks
|
||
* @method Chart.Ticks.formatters.linear
|
||
* @param tickValue {Number} the value to be formatted
|
||
* @param index {Number} the position of the tickValue parameter in the ticks array
|
||
* @param ticks {Array<Number>} the list of ticks being converted
|
||
* @return {String} string representation of the tickValue parameter
|
||
*/
|
||
linear: function(tickValue, index, ticks) {
|
||
// If we have lots of ticks, don't use the ones
|
||
var delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];
|
||
|
||
// If we have a number like 2.5 as the delta, figure out how many decimal places we need
|
||
if (Math.abs(delta) > 1) {
|
||
if (tickValue !== Math.floor(tickValue)) {
|
||
// not an integer
|
||
delta = tickValue - Math.floor(tickValue);
|
||
}
|
||
}
|
||
|
||
var logDelta = helpers.log10(Math.abs(delta));
|
||
var tickString = '';
|
||
|
||
if (tickValue !== 0) {
|
||
var numDecimal = -1 * Math.floor(logDelta);
|
||
numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places
|
||
tickString = tickValue.toFixed(numDecimal);
|
||
} else {
|
||
tickString = '0'; // never show decimal places for 0
|
||
}
|
||
|
||
return tickString;
|
||
},
|
||
|
||
logarithmic: function(tickValue, index, ticks) {
|
||
var remain = tickValue / (Math.pow(10, Math.floor(helpers.log10(tickValue))));
|
||
|
||
if (tickValue === 0) {
|
||
return '0';
|
||
} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {
|
||
return tickValue.toExponential();
|
||
}
|
||
return '';
|
||
}
|
||
}
|
||
};
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 23 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.defaults.scale = {
|
||
display: true,
|
||
position: 'left',
|
||
|
||
// grid line settings
|
||
gridLines: {
|
||
display: true,
|
||
color: 'rgba(0, 0, 0, 0.1)',
|
||
lineWidth: 1,
|
||
drawBorder: true,
|
||
drawOnChartArea: true,
|
||
drawTicks: true,
|
||
tickMarkLength: 10,
|
||
zeroLineWidth: 1,
|
||
zeroLineColor: 'rgba(0,0,0,0.25)',
|
||
offsetGridLines: false,
|
||
borderDash: [],
|
||
borderDashOffset: 0.0
|
||
},
|
||
|
||
// scale label
|
||
scaleLabel: {
|
||
// actual label
|
||
labelString: '',
|
||
|
||
// display property
|
||
display: false
|
||
},
|
||
|
||
// label settings
|
||
ticks: {
|
||
beginAtZero: false,
|
||
minRotation: 0,
|
||
maxRotation: 50,
|
||
mirror: false,
|
||
padding: 0,
|
||
reverse: false,
|
||
display: true,
|
||
autoSkip: true,
|
||
autoSkipPadding: 0,
|
||
labelOffset: 0,
|
||
// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.
|
||
callback: Chart.Ticks.formatters.values
|
||
}
|
||
};
|
||
|
||
function computeTextSize(context, tick, font) {
|
||
return helpers.isArray(tick) ?
|
||
helpers.longestText(context, font, tick) :
|
||
context.measureText(tick).width;
|
||
}
|
||
|
||
function parseFontOptions(options) {
|
||
var getValueOrDefault = helpers.getValueOrDefault;
|
||
var globalDefaults = Chart.defaults.global;
|
||
var size = getValueOrDefault(options.fontSize, globalDefaults.defaultFontSize);
|
||
var style = getValueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle);
|
||
var family = getValueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily);
|
||
|
||
return {
|
||
size: size,
|
||
style: style,
|
||
family: family,
|
||
font: helpers.fontString(size, style, family)
|
||
};
|
||
}
|
||
|
||
Chart.Scale = Chart.Element.extend({
|
||
/**
|
||
* Get the padding needed for the scale
|
||
* @method getPadding
|
||
* @private
|
||
* @returns {Padding} the necessary padding
|
||
*/
|
||
getPadding: function() {
|
||
var me = this;
|
||
return {
|
||
left: me.paddingLeft || 0,
|
||
top: me.paddingTop || 0,
|
||
right: me.paddingRight || 0,
|
||
bottom: me.paddingBottom || 0
|
||
};
|
||
},
|
||
|
||
// These methods are ordered by lifecyle. Utilities then follow.
|
||
// Any function defined here is inherited by all scale types.
|
||
// Any function can be extended by the scale type
|
||
|
||
beforeUpdate: function() {
|
||
helpers.callCallback(this.options.beforeUpdate, [this]);
|
||
},
|
||
update: function(maxWidth, maxHeight, margins) {
|
||
var me = this;
|
||
|
||
// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
|
||
me.beforeUpdate();
|
||
|
||
// Absorb the master measurements
|
||
me.maxWidth = maxWidth;
|
||
me.maxHeight = maxHeight;
|
||
me.margins = helpers.extend({
|
||
left: 0,
|
||
right: 0,
|
||
top: 0,
|
||
bottom: 0
|
||
}, margins);
|
||
me.longestTextCache = me.longestTextCache || {};
|
||
|
||
// Dimensions
|
||
me.beforeSetDimensions();
|
||
me.setDimensions();
|
||
me.afterSetDimensions();
|
||
|
||
// Data min/max
|
||
me.beforeDataLimits();
|
||
me.determineDataLimits();
|
||
me.afterDataLimits();
|
||
|
||
// Ticks
|
||
me.beforeBuildTicks();
|
||
me.buildTicks();
|
||
me.afterBuildTicks();
|
||
|
||
me.beforeTickToLabelConversion();
|
||
me.convertTicksToLabels();
|
||
me.afterTickToLabelConversion();
|
||
|
||
// Tick Rotation
|
||
me.beforeCalculateTickRotation();
|
||
me.calculateTickRotation();
|
||
me.afterCalculateTickRotation();
|
||
// Fit
|
||
me.beforeFit();
|
||
me.fit();
|
||
me.afterFit();
|
||
//
|
||
me.afterUpdate();
|
||
|
||
return me.minSize;
|
||
|
||
},
|
||
afterUpdate: function() {
|
||
helpers.callCallback(this.options.afterUpdate, [this]);
|
||
},
|
||
|
||
//
|
||
|
||
beforeSetDimensions: function() {
|
||
helpers.callCallback(this.options.beforeSetDimensions, [this]);
|
||
},
|
||
setDimensions: function() {
|
||
var me = this;
|
||
// Set the unconstrained dimension before label rotation
|
||
if (me.isHorizontal()) {
|
||
// Reset position before calculating rotation
|
||
me.width = me.maxWidth;
|
||
me.left = 0;
|
||
me.right = me.width;
|
||
} else {
|
||
me.height = me.maxHeight;
|
||
|
||
// Reset position before calculating rotation
|
||
me.top = 0;
|
||
me.bottom = me.height;
|
||
}
|
||
|
||
// Reset padding
|
||
me.paddingLeft = 0;
|
||
me.paddingTop = 0;
|
||
me.paddingRight = 0;
|
||
me.paddingBottom = 0;
|
||
},
|
||
afterSetDimensions: function() {
|
||
helpers.callCallback(this.options.afterSetDimensions, [this]);
|
||
},
|
||
|
||
// Data limits
|
||
beforeDataLimits: function() {
|
||
helpers.callCallback(this.options.beforeDataLimits, [this]);
|
||
},
|
||
determineDataLimits: helpers.noop,
|
||
afterDataLimits: function() {
|
||
helpers.callCallback(this.options.afterDataLimits, [this]);
|
||
},
|
||
|
||
//
|
||
beforeBuildTicks: function() {
|
||
helpers.callCallback(this.options.beforeBuildTicks, [this]);
|
||
},
|
||
buildTicks: helpers.noop,
|
||
afterBuildTicks: function() {
|
||
helpers.callCallback(this.options.afterBuildTicks, [this]);
|
||
},
|
||
|
||
beforeTickToLabelConversion: function() {
|
||
helpers.callCallback(this.options.beforeTickToLabelConversion, [this]);
|
||
},
|
||
convertTicksToLabels: function() {
|
||
var me = this;
|
||
// Convert ticks to strings
|
||
var tickOpts = me.options.ticks;
|
||
me.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback);
|
||
},
|
||
afterTickToLabelConversion: function() {
|
||
helpers.callCallback(this.options.afterTickToLabelConversion, [this]);
|
||
},
|
||
|
||
//
|
||
|
||
beforeCalculateTickRotation: function() {
|
||
helpers.callCallback(this.options.beforeCalculateTickRotation, [this]);
|
||
},
|
||
calculateTickRotation: function() {
|
||
var me = this;
|
||
var context = me.ctx;
|
||
var tickOpts = me.options.ticks;
|
||
|
||
// Get the width of each grid by calculating the difference
|
||
// between x offsets between 0 and 1.
|
||
var tickFont = parseFontOptions(tickOpts);
|
||
context.font = tickFont.font;
|
||
|
||
var labelRotation = tickOpts.minRotation || 0;
|
||
|
||
if (me.options.display && me.isHorizontal()) {
|
||
var originalLabelWidth = helpers.longestText(context, tickFont.font, me.ticks, me.longestTextCache);
|
||
var labelWidth = originalLabelWidth;
|
||
var cosRotation;
|
||
var sinRotation;
|
||
|
||
// Allow 3 pixels x2 padding either side for label readability
|
||
var tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6;
|
||
|
||
// Max label rotation can be set or default to 90 - also act as a loop counter
|
||
while (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {
|
||
var angleRadians = helpers.toRadians(labelRotation);
|
||
cosRotation = Math.cos(angleRadians);
|
||
sinRotation = Math.sin(angleRadians);
|
||
|
||
if (sinRotation * originalLabelWidth > me.maxHeight) {
|
||
// go back one step
|
||
labelRotation--;
|
||
break;
|
||
}
|
||
|
||
labelRotation++;
|
||
labelWidth = cosRotation * originalLabelWidth;
|
||
}
|
||
}
|
||
|
||
me.labelRotation = labelRotation;
|
||
},
|
||
afterCalculateTickRotation: function() {
|
||
helpers.callCallback(this.options.afterCalculateTickRotation, [this]);
|
||
},
|
||
|
||
//
|
||
|
||
beforeFit: function() {
|
||
helpers.callCallback(this.options.beforeFit, [this]);
|
||
},
|
||
fit: function() {
|
||
var me = this;
|
||
// Reset
|
||
var minSize = me.minSize = {
|
||
width: 0,
|
||
height: 0
|
||
};
|
||
|
||
var opts = me.options;
|
||
var tickOpts = opts.ticks;
|
||
var scaleLabelOpts = opts.scaleLabel;
|
||
var gridLineOpts = opts.gridLines;
|
||
var display = opts.display;
|
||
var isHorizontal = me.isHorizontal();
|
||
|
||
var tickFont = parseFontOptions(tickOpts);
|
||
var scaleLabelFontSize = parseFontOptions(scaleLabelOpts).size * 1.5;
|
||
var tickMarkLength = opts.gridLines.tickMarkLength;
|
||
|
||
// Width
|
||
if (isHorizontal) {
|
||
// subtract the margins to line up with the chartArea if we are a full width scale
|
||
minSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;
|
||
} else {
|
||
minSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;
|
||
}
|
||
|
||
// height
|
||
if (isHorizontal) {
|
||
minSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;
|
||
} else {
|
||
minSize.height = me.maxHeight; // fill all the height
|
||
}
|
||
|
||
// Are we showing a title for the scale?
|
||
if (scaleLabelOpts.display && display) {
|
||
if (isHorizontal) {
|
||
minSize.height += scaleLabelFontSize;
|
||
} else {
|
||
minSize.width += scaleLabelFontSize;
|
||
}
|
||
}
|
||
|
||
// Don't bother fitting the ticks if we are not showing them
|
||
if (tickOpts.display && display) {
|
||
var largestTextWidth = helpers.longestText(me.ctx, tickFont.font, me.ticks, me.longestTextCache);
|
||
var tallestLabelHeightInLines = helpers.numberOfLabelLines(me.ticks);
|
||
var lineSpace = tickFont.size * 0.5;
|
||
|
||
if (isHorizontal) {
|
||
// A horizontal axis is more constrained by the height.
|
||
me.longestLabelWidth = largestTextWidth;
|
||
|
||
var angleRadians = helpers.toRadians(me.labelRotation);
|
||
var cosRotation = Math.cos(angleRadians);
|
||
var sinRotation = Math.sin(angleRadians);
|
||
|
||
// TODO - improve this calculation
|
||
var labelHeight = (sinRotation * largestTextWidth)
|
||
+ (tickFont.size * tallestLabelHeightInLines)
|
||
+ (lineSpace * tallestLabelHeightInLines);
|
||
|
||
minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight);
|
||
me.ctx.font = tickFont.font;
|
||
|
||
var firstTick = me.ticks[0];
|
||
var firstLabelWidth = computeTextSize(me.ctx, firstTick, tickFont.font);
|
||
|
||
var lastTick = me.ticks[me.ticks.length - 1];
|
||
var lastLabelWidth = computeTextSize(me.ctx, lastTick, tickFont.font);
|
||
|
||
// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned which means that the right padding is dominated
|
||
// by the font height
|
||
if (me.labelRotation !== 0) {
|
||
me.paddingLeft = opts.position === 'bottom'? (cosRotation * firstLabelWidth) + 3: (cosRotation * lineSpace) + 3; // add 3 px to move away from canvas edges
|
||
me.paddingRight = opts.position === 'bottom'? (cosRotation * lineSpace) + 3: (cosRotation * lastLabelWidth) + 3;
|
||
} else {
|
||
me.paddingLeft = firstLabelWidth / 2 + 3; // add 3 px to move away from canvas edges
|
||
me.paddingRight = lastLabelWidth / 2 + 3;
|
||
}
|
||
} else {
|
||
// A vertical axis is more constrained by the width. Labels are the dominant factor here, so get that length first
|
||
// Account for padding
|
||
|
||
if (tickOpts.mirror) {
|
||
largestTextWidth = 0;
|
||
} else {
|
||
largestTextWidth += me.options.ticks.padding;
|
||
}
|
||
minSize.width += largestTextWidth;
|
||
me.paddingTop = tickFont.size / 2;
|
||
me.paddingBottom = tickFont.size / 2;
|
||
}
|
||
}
|
||
|
||
me.handleMargins();
|
||
|
||
me.width = minSize.width;
|
||
me.height = minSize.height;
|
||
},
|
||
|
||
/**
|
||
* Handle margins and padding interactions
|
||
* @private
|
||
*/
|
||
handleMargins: function() {
|
||
var me = this;
|
||
if (me.margins) {
|
||
me.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);
|
||
me.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);
|
||
me.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);
|
||
me.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);
|
||
}
|
||
},
|
||
|
||
afterFit: function() {
|
||
helpers.callCallback(this.options.afterFit, [this]);
|
||
},
|
||
|
||
// Shared Methods
|
||
isHorizontal: function() {
|
||
return this.options.position === 'top' || this.options.position === 'bottom';
|
||
},
|
||
isFullWidth: function() {
|
||
return (this.options.fullWidth);
|
||
},
|
||
|
||
// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not
|
||
getRightValue: function(rawValue) {
|
||
// Null and undefined values first
|
||
if (rawValue === null || typeof(rawValue) === 'undefined') {
|
||
return NaN;
|
||
}
|
||
// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values
|
||
if (typeof(rawValue) === 'number' && !isFinite(rawValue)) {
|
||
return NaN;
|
||
}
|
||
// If it is in fact an object, dive in one more level
|
||
if (typeof(rawValue) === 'object') {
|
||
if ((rawValue instanceof Date) || (rawValue.isValid)) {
|
||
return rawValue;
|
||
}
|
||
return this.getRightValue(this.isHorizontal() ? rawValue.x : rawValue.y);
|
||
}
|
||
|
||
// Value is good, return it
|
||
return rawValue;
|
||
},
|
||
|
||
// Used to get the value to display in the tooltip for the data at the given index
|
||
// function getLabelForIndex(index, datasetIndex)
|
||
getLabelForIndex: helpers.noop,
|
||
|
||
// Used to get data value locations. Value can either be an index or a numerical value
|
||
getPixelForValue: helpers.noop,
|
||
|
||
// Used to get the data value from a given pixel. This is the inverse of getPixelForValue
|
||
getValueForPixel: helpers.noop,
|
||
|
||
// Used for tick location, should
|
||
getPixelForTick: function(index, includeOffset) {
|
||
var me = this;
|
||
if (me.isHorizontal()) {
|
||
var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
|
||
var tickWidth = innerWidth / Math.max((me.ticks.length - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
|
||
var pixel = (tickWidth * index) + me.paddingLeft;
|
||
|
||
if (includeOffset) {
|
||
pixel += tickWidth / 2;
|
||
}
|
||
|
||
var finalVal = me.left + Math.round(pixel);
|
||
finalVal += me.isFullWidth() ? me.margins.left : 0;
|
||
return finalVal;
|
||
}
|
||
var innerHeight = me.height - (me.paddingTop + me.paddingBottom);
|
||
return me.top + (index * (innerHeight / (me.ticks.length - 1)));
|
||
},
|
||
|
||
// Utility for getting the pixel location of a percentage of scale
|
||
getPixelForDecimal: function(decimal /* , includeOffset*/) {
|
||
var me = this;
|
||
if (me.isHorizontal()) {
|
||
var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
|
||
var valueOffset = (innerWidth * decimal) + me.paddingLeft;
|
||
|
||
var finalVal = me.left + Math.round(valueOffset);
|
||
finalVal += me.isFullWidth() ? me.margins.left : 0;
|
||
return finalVal;
|
||
}
|
||
return me.top + (decimal * me.height);
|
||
},
|
||
|
||
getBasePixel: function() {
|
||
return this.getPixelForValue(this.getBaseValue());
|
||
},
|
||
|
||
getBaseValue: function() {
|
||
var me = this;
|
||
var min = me.min;
|
||
var max = me.max;
|
||
|
||
return me.beginAtZero ? 0:
|
||
min < 0 && max < 0? max :
|
||
min > 0 && max > 0? min :
|
||
0;
|
||
},
|
||
|
||
// Actually draw the scale on the canvas
|
||
// @param {rectangle} chartArea : the area of the chart to draw full grid lines on
|
||
draw: function(chartArea) {
|
||
var me = this;
|
||
var options = me.options;
|
||
if (!options.display) {
|
||
return;
|
||
}
|
||
|
||
var context = me.ctx;
|
||
var globalDefaults = Chart.defaults.global;
|
||
var optionTicks = options.ticks;
|
||
var gridLines = options.gridLines;
|
||
var scaleLabel = options.scaleLabel;
|
||
|
||
var isRotated = me.labelRotation !== 0;
|
||
var skipRatio;
|
||
var useAutoskipper = optionTicks.autoSkip;
|
||
var isHorizontal = me.isHorizontal();
|
||
|
||
// figure out the maximum number of gridlines to show
|
||
var maxTicks;
|
||
if (optionTicks.maxTicksLimit) {
|
||
maxTicks = optionTicks.maxTicksLimit;
|
||
}
|
||
|
||
var tickFontColor = helpers.getValueOrDefault(optionTicks.fontColor, globalDefaults.defaultFontColor);
|
||
var tickFont = parseFontOptions(optionTicks);
|
||
|
||
var tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;
|
||
var borderDash = helpers.getValueOrDefault(gridLines.borderDash, globalDefaults.borderDash);
|
||
var borderDashOffset = helpers.getValueOrDefault(gridLines.borderDashOffset, globalDefaults.borderDashOffset);
|
||
|
||
var scaleLabelFontColor = helpers.getValueOrDefault(scaleLabel.fontColor, globalDefaults.defaultFontColor);
|
||
var scaleLabelFont = parseFontOptions(scaleLabel);
|
||
|
||
var labelRotationRadians = helpers.toRadians(me.labelRotation);
|
||
var cosRotation = Math.cos(labelRotationRadians);
|
||
var longestRotatedLabel = me.longestLabelWidth * cosRotation;
|
||
|
||
// Make sure we draw text in the correct color and font
|
||
context.fillStyle = tickFontColor;
|
||
|
||
var itemsToDraw = [];
|
||
|
||
if (isHorizontal) {
|
||
skipRatio = false;
|
||
|
||
// Only calculate the skip ratio with the half width of longestRotateLabel if we got an actual rotation
|
||
// See #2584
|
||
if (isRotated) {
|
||
longestRotatedLabel /= 2;
|
||
}
|
||
|
||
if ((longestRotatedLabel + optionTicks.autoSkipPadding) * me.ticks.length > (me.width - (me.paddingLeft + me.paddingRight))) {
|
||
skipRatio = 1 + Math.floor(((longestRotatedLabel + optionTicks.autoSkipPadding) * me.ticks.length) / (me.width - (me.paddingLeft + me.paddingRight)));
|
||
}
|
||
|
||
// if they defined a max number of optionTicks,
|
||
// increase skipRatio until that number is met
|
||
if (maxTicks && me.ticks.length > maxTicks) {
|
||
while (!skipRatio || me.ticks.length / (skipRatio || 1) > maxTicks) {
|
||
if (!skipRatio) {
|
||
skipRatio = 1;
|
||
}
|
||
skipRatio += 1;
|
||
}
|
||
}
|
||
|
||
if (!useAutoskipper) {
|
||
skipRatio = false;
|
||
}
|
||
}
|
||
|
||
|
||
var xTickStart = options.position === 'right' ? me.left : me.right - tl;
|
||
var xTickEnd = options.position === 'right' ? me.left + tl : me.right;
|
||
var yTickStart = options.position === 'bottom' ? me.top : me.bottom - tl;
|
||
var yTickEnd = options.position === 'bottom' ? me.top + tl : me.bottom;
|
||
|
||
helpers.each(me.ticks, function(label, index) {
|
||
// If the callback returned a null or undefined value, do not draw this line
|
||
if (label === undefined || label === null) {
|
||
return;
|
||
}
|
||
|
||
var isLastTick = me.ticks.length === index + 1;
|
||
|
||
// Since we always show the last tick,we need may need to hide the last shown one before
|
||
var shouldSkip = (skipRatio > 1 && index % skipRatio > 0) || (index % skipRatio === 0 && index + skipRatio >= me.ticks.length);
|
||
if (shouldSkip && !isLastTick || (label === undefined || label === null)) {
|
||
return;
|
||
}
|
||
|
||
var lineWidth, lineColor;
|
||
if (index === (typeof me.zeroLineIndex !== 'undefined' ? me.zeroLineIndex : 0)) {
|
||
// Draw the first index specially
|
||
lineWidth = gridLines.zeroLineWidth;
|
||
lineColor = gridLines.zeroLineColor;
|
||
} else {
|
||
lineWidth = helpers.getValueAtIndexOrDefault(gridLines.lineWidth, index);
|
||
lineColor = helpers.getValueAtIndexOrDefault(gridLines.color, index);
|
||
}
|
||
|
||
// Common properties
|
||
var tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY;
|
||
var textAlign = 'middle';
|
||
var textBaseline = 'middle';
|
||
|
||
if (isHorizontal) {
|
||
|
||
if (options.position === 'bottom') {
|
||
// bottom
|
||
textBaseline = !isRotated? 'top':'middle';
|
||
textAlign = !isRotated? 'center': 'right';
|
||
labelY = me.top + tl;
|
||
} else {
|
||
// top
|
||
textBaseline = !isRotated? 'bottom':'middle';
|
||
textAlign = !isRotated? 'center': 'left';
|
||
labelY = me.bottom - tl;
|
||
}
|
||
|
||
var xLineValue = me.getPixelForTick(index) + helpers.aliasPixel(lineWidth); // xvalues for grid lines
|
||
labelX = me.getPixelForTick(index, gridLines.offsetGridLines) + optionTicks.labelOffset; // x values for optionTicks (need to consider offsetLabel option)
|
||
|
||
tx1 = tx2 = x1 = x2 = xLineValue;
|
||
ty1 = yTickStart;
|
||
ty2 = yTickEnd;
|
||
y1 = chartArea.top;
|
||
y2 = chartArea.bottom;
|
||
} else {
|
||
var isLeft = options.position === 'left';
|
||
var tickPadding = optionTicks.padding;
|
||
var labelXOffset;
|
||
|
||
if (optionTicks.mirror) {
|
||
textAlign = isLeft ? 'left' : 'right';
|
||
labelXOffset = tickPadding;
|
||
} else {
|
||
textAlign = isLeft ? 'right' : 'left';
|
||
labelXOffset = tl + tickPadding;
|
||
}
|
||
|
||
labelX = isLeft ? me.right - labelXOffset : me.left + labelXOffset;
|
||
|
||
var yLineValue = me.getPixelForTick(index); // xvalues for grid lines
|
||
yLineValue += helpers.aliasPixel(lineWidth);
|
||
labelY = me.getPixelForTick(index, gridLines.offsetGridLines);
|
||
|
||
tx1 = xTickStart;
|
||
tx2 = xTickEnd;
|
||
x1 = chartArea.left;
|
||
x2 = chartArea.right;
|
||
ty1 = ty2 = y1 = y2 = yLineValue;
|
||
}
|
||
|
||
itemsToDraw.push({
|
||
tx1: tx1,
|
||
ty1: ty1,
|
||
tx2: tx2,
|
||
ty2: ty2,
|
||
x1: x1,
|
||
y1: y1,
|
||
x2: x2,
|
||
y2: y2,
|
||
labelX: labelX,
|
||
labelY: labelY,
|
||
glWidth: lineWidth,
|
||
glColor: lineColor,
|
||
glBorderDash: borderDash,
|
||
glBorderDashOffset: borderDashOffset,
|
||
rotation: -1 * labelRotationRadians,
|
||
label: label,
|
||
textBaseline: textBaseline,
|
||
textAlign: textAlign
|
||
});
|
||
});
|
||
|
||
// Draw all of the tick labels, tick marks, and grid lines at the correct places
|
||
helpers.each(itemsToDraw, function(itemToDraw) {
|
||
if (gridLines.display) {
|
||
context.save();
|
||
context.lineWidth = itemToDraw.glWidth;
|
||
context.strokeStyle = itemToDraw.glColor;
|
||
if (context.setLineDash) {
|
||
context.setLineDash(itemToDraw.glBorderDash);
|
||
context.lineDashOffset = itemToDraw.glBorderDashOffset;
|
||
}
|
||
|
||
context.beginPath();
|
||
|
||
if (gridLines.drawTicks) {
|
||
context.moveTo(itemToDraw.tx1, itemToDraw.ty1);
|
||
context.lineTo(itemToDraw.tx2, itemToDraw.ty2);
|
||
}
|
||
|
||
if (gridLines.drawOnChartArea) {
|
||
context.moveTo(itemToDraw.x1, itemToDraw.y1);
|
||
context.lineTo(itemToDraw.x2, itemToDraw.y2);
|
||
}
|
||
|
||
context.stroke();
|
||
context.restore();
|
||
}
|
||
|
||
if (optionTicks.display) {
|
||
context.save();
|
||
context.translate(itemToDraw.labelX, itemToDraw.labelY);
|
||
context.rotate(itemToDraw.rotation);
|
||
context.font = tickFont.font;
|
||
context.textBaseline = itemToDraw.textBaseline;
|
||
context.textAlign = itemToDraw.textAlign;
|
||
|
||
var label = itemToDraw.label;
|
||
if (helpers.isArray(label)) {
|
||
for (var i = 0, y = 0; i < label.length; ++i) {
|
||
// We just make sure the multiline element is a string here..
|
||
context.fillText('' + label[i], 0, y);
|
||
// apply same lineSpacing as calculated @ L#320
|
||
y += (tickFont.size * 1.5);
|
||
}
|
||
} else {
|
||
context.fillText(label, 0, 0);
|
||
}
|
||
context.restore();
|
||
}
|
||
});
|
||
|
||
if (scaleLabel.display) {
|
||
// Draw the scale label
|
||
var scaleLabelX;
|
||
var scaleLabelY;
|
||
var rotation = 0;
|
||
|
||
if (isHorizontal) {
|
||
scaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width
|
||
scaleLabelY = options.position === 'bottom' ? me.bottom - (scaleLabelFont.size / 2) : me.top + (scaleLabelFont.size / 2);
|
||
} else {
|
||
var isLeft = options.position === 'left';
|
||
scaleLabelX = isLeft ? me.left + (scaleLabelFont.size / 2) : me.right - (scaleLabelFont.size / 2);
|
||
scaleLabelY = me.top + ((me.bottom - me.top) / 2);
|
||
rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;
|
||
}
|
||
|
||
context.save();
|
||
context.translate(scaleLabelX, scaleLabelY);
|
||
context.rotate(rotation);
|
||
context.textAlign = 'center';
|
||
context.textBaseline = 'middle';
|
||
context.fillStyle = scaleLabelFontColor; // render in correct colour
|
||
context.font = scaleLabelFont.font;
|
||
context.fillText(scaleLabel.labelString, 0, 0);
|
||
context.restore();
|
||
}
|
||
|
||
if (gridLines.drawBorder) {
|
||
// Draw the line at the edge of the axis
|
||
context.lineWidth = helpers.getValueAtIndexOrDefault(gridLines.lineWidth, 0);
|
||
context.strokeStyle = helpers.getValueAtIndexOrDefault(gridLines.color, 0);
|
||
var x1 = me.left,
|
||
x2 = me.right,
|
||
y1 = me.top,
|
||
y2 = me.bottom;
|
||
|
||
var aliasPixel = helpers.aliasPixel(context.lineWidth);
|
||
if (isHorizontal) {
|
||
y1 = y2 = options.position === 'top' ? me.bottom : me.top;
|
||
y1 += aliasPixel;
|
||
y2 += aliasPixel;
|
||
} else {
|
||
x1 = x2 = options.position === 'left' ? me.right : me.left;
|
||
x1 += aliasPixel;
|
||
x2 += aliasPixel;
|
||
}
|
||
|
||
context.beginPath();
|
||
context.moveTo(x1, y1);
|
||
context.lineTo(x2, y2);
|
||
context.stroke();
|
||
}
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 24 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.defaults.global.title = {
|
||
display: false,
|
||
position: 'top',
|
||
fullWidth: true, // marks that this box should take the full width of the canvas (pushing down other boxes)
|
||
|
||
fontStyle: 'bold',
|
||
padding: 10,
|
||
|
||
// actual title
|
||
text: ''
|
||
};
|
||
|
||
var noop = helpers.noop;
|
||
Chart.Title = Chart.Element.extend({
|
||
|
||
initialize: function(config) {
|
||
var me = this;
|
||
helpers.extend(me, config);
|
||
|
||
// Contains hit boxes for each dataset (in dataset order)
|
||
me.legendHitBoxes = [];
|
||
},
|
||
|
||
// These methods are ordered by lifecycle. Utilities then follow.
|
||
|
||
beforeUpdate: noop,
|
||
update: function(maxWidth, maxHeight, margins) {
|
||
var me = this;
|
||
|
||
// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
|
||
me.beforeUpdate();
|
||
|
||
// Absorb the master measurements
|
||
me.maxWidth = maxWidth;
|
||
me.maxHeight = maxHeight;
|
||
me.margins = margins;
|
||
|
||
// Dimensions
|
||
me.beforeSetDimensions();
|
||
me.setDimensions();
|
||
me.afterSetDimensions();
|
||
// Labels
|
||
me.beforeBuildLabels();
|
||
me.buildLabels();
|
||
me.afterBuildLabels();
|
||
|
||
// Fit
|
||
me.beforeFit();
|
||
me.fit();
|
||
me.afterFit();
|
||
//
|
||
me.afterUpdate();
|
||
|
||
return me.minSize;
|
||
|
||
},
|
||
afterUpdate: noop,
|
||
|
||
//
|
||
|
||
beforeSetDimensions: noop,
|
||
setDimensions: function() {
|
||
var me = this;
|
||
// Set the unconstrained dimension before label rotation
|
||
if (me.isHorizontal()) {
|
||
// Reset position before calculating rotation
|
||
me.width = me.maxWidth;
|
||
me.left = 0;
|
||
me.right = me.width;
|
||
} else {
|
||
me.height = me.maxHeight;
|
||
|
||
// Reset position before calculating rotation
|
||
me.top = 0;
|
||
me.bottom = me.height;
|
||
}
|
||
|
||
// Reset padding
|
||
me.paddingLeft = 0;
|
||
me.paddingTop = 0;
|
||
me.paddingRight = 0;
|
||
me.paddingBottom = 0;
|
||
|
||
// Reset minSize
|
||
me.minSize = {
|
||
width: 0,
|
||
height: 0
|
||
};
|
||
},
|
||
afterSetDimensions: noop,
|
||
|
||
//
|
||
|
||
beforeBuildLabels: noop,
|
||
buildLabels: noop,
|
||
afterBuildLabels: noop,
|
||
|
||
//
|
||
|
||
beforeFit: noop,
|
||
fit: function() {
|
||
var me = this,
|
||
valueOrDefault = helpers.getValueOrDefault,
|
||
opts = me.options,
|
||
globalDefaults = Chart.defaults.global,
|
||
display = opts.display,
|
||
fontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize),
|
||
minSize = me.minSize;
|
||
|
||
if (me.isHorizontal()) {
|
||
minSize.width = me.maxWidth; // fill all the width
|
||
minSize.height = display ? fontSize + (opts.padding * 2) : 0;
|
||
} else {
|
||
minSize.width = display ? fontSize + (opts.padding * 2) : 0;
|
||
minSize.height = me.maxHeight; // fill all the height
|
||
}
|
||
|
||
me.width = minSize.width;
|
||
me.height = minSize.height;
|
||
|
||
},
|
||
afterFit: noop,
|
||
|
||
// Shared Methods
|
||
isHorizontal: function() {
|
||
var pos = this.options.position;
|
||
return pos === 'top' || pos === 'bottom';
|
||
},
|
||
|
||
// Actually draw the title block on the canvas
|
||
draw: function() {
|
||
var me = this,
|
||
ctx = me.ctx,
|
||
valueOrDefault = helpers.getValueOrDefault,
|
||
opts = me.options,
|
||
globalDefaults = Chart.defaults.global;
|
||
|
||
if (opts.display) {
|
||
var fontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize),
|
||
fontStyle = valueOrDefault(opts.fontStyle, globalDefaults.defaultFontStyle),
|
||
fontFamily = valueOrDefault(opts.fontFamily, globalDefaults.defaultFontFamily),
|
||
titleFont = helpers.fontString(fontSize, fontStyle, fontFamily),
|
||
rotation = 0,
|
||
titleX,
|
||
titleY,
|
||
top = me.top,
|
||
left = me.left,
|
||
bottom = me.bottom,
|
||
right = me.right,
|
||
maxWidth;
|
||
|
||
ctx.fillStyle = valueOrDefault(opts.fontColor, globalDefaults.defaultFontColor); // render in correct colour
|
||
ctx.font = titleFont;
|
||
|
||
// Horizontal
|
||
if (me.isHorizontal()) {
|
||
titleX = left + ((right - left) / 2); // midpoint of the width
|
||
titleY = top + ((bottom - top) / 2); // midpoint of the height
|
||
maxWidth = right - left;
|
||
} else {
|
||
titleX = opts.position === 'left' ? left + (fontSize / 2) : right - (fontSize / 2);
|
||
titleY = top + ((bottom - top) / 2);
|
||
maxWidth = bottom - top;
|
||
rotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);
|
||
}
|
||
|
||
ctx.save();
|
||
ctx.translate(titleX, titleY);
|
||
ctx.rotate(rotation);
|
||
ctx.textAlign = 'center';
|
||
ctx.textBaseline = 'middle';
|
||
ctx.fillText(opts.text, 0, 0, maxWidth);
|
||
ctx.restore();
|
||
}
|
||
}
|
||
});
|
||
|
||
function createNewTitleBlockAndAttach(chartInstance, titleOpts) {
|
||
var title = new Chart.Title({
|
||
ctx: chartInstance.chart.ctx,
|
||
options: titleOpts,
|
||
chart: chartInstance
|
||
});
|
||
chartInstance.titleBlock = title;
|
||
Chart.layoutService.addBox(chartInstance, title);
|
||
}
|
||
|
||
// Register the title plugin
|
||
Chart.plugins.register({
|
||
beforeInit: function(chartInstance) {
|
||
var titleOpts = chartInstance.options.title;
|
||
|
||
if (titleOpts) {
|
||
createNewTitleBlockAndAttach(chartInstance, titleOpts);
|
||
}
|
||
},
|
||
beforeUpdate: function(chartInstance) {
|
||
var titleOpts = chartInstance.options.title;
|
||
|
||
if (titleOpts) {
|
||
titleOpts = helpers.configMerge(Chart.defaults.global.title, titleOpts);
|
||
|
||
if (chartInstance.titleBlock) {
|
||
chartInstance.titleBlock.options = titleOpts;
|
||
} else {
|
||
createNewTitleBlockAndAttach(chartInstance, titleOpts);
|
||
}
|
||
} else {
|
||
Chart.layoutService.removeBox(chartInstance, chartInstance.titleBlock);
|
||
delete chartInstance.titleBlock;
|
||
}
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 25 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
var noop = helpers.noop;
|
||
|
||
Chart.defaults.global.legend = {
|
||
|
||
display: true,
|
||
position: 'top',
|
||
fullWidth: true, // marks that this box should take the full width of the canvas (pushing down other boxes)
|
||
reverse: false,
|
||
|
||
// a callback that will handle
|
||
onClick: function(e, legendItem) {
|
||
var index = legendItem.datasetIndex;
|
||
var ci = this.chart;
|
||
var meta = ci.getDatasetMeta(index);
|
||
|
||
// See controller.isDatasetVisible comment
|
||
meta.hidden = meta.hidden === null? !ci.data.datasets[index].hidden : null;
|
||
|
||
// We hid a dataset ... rerender the chart
|
||
ci.update();
|
||
},
|
||
|
||
onHover: null,
|
||
|
||
labels: {
|
||
boxWidth: 40,
|
||
padding: 10,
|
||
// Generates labels shown in the legend
|
||
// Valid properties to return:
|
||
// text : text to display
|
||
// fillStyle : fill of coloured box
|
||
// strokeStyle: stroke of coloured box
|
||
// hidden : if this legend item refers to a hidden item
|
||
// lineCap : cap style for line
|
||
// lineDash
|
||
// lineDashOffset :
|
||
// lineJoin :
|
||
// lineWidth :
|
||
generateLabels: function(chart) {
|
||
var data = chart.data;
|
||
return helpers.isArray(data.datasets) ? data.datasets.map(function(dataset, i) {
|
||
return {
|
||
text: dataset.label,
|
||
fillStyle: (!helpers.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]),
|
||
hidden: !chart.isDatasetVisible(i),
|
||
lineCap: dataset.borderCapStyle,
|
||
lineDash: dataset.borderDash,
|
||
lineDashOffset: dataset.borderDashOffset,
|
||
lineJoin: dataset.borderJoinStyle,
|
||
lineWidth: dataset.borderWidth,
|
||
strokeStyle: dataset.borderColor,
|
||
pointStyle: dataset.pointStyle,
|
||
|
||
// Below is extra data used for toggling the datasets
|
||
datasetIndex: i
|
||
};
|
||
}, this) : [];
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
* Helper function to get the box width based on the usePointStyle option
|
||
* @param labelopts {Object} the label options on the legend
|
||
* @param fontSize {Number} the label font size
|
||
* @return {Number} width of the color box area
|
||
*/
|
||
function getBoxWidth(labelOpts, fontSize) {
|
||
return labelOpts.usePointStyle ?
|
||
fontSize * Math.SQRT2 :
|
||
labelOpts.boxWidth;
|
||
}
|
||
|
||
Chart.Legend = Chart.Element.extend({
|
||
|
||
initialize: function(config) {
|
||
helpers.extend(this, config);
|
||
|
||
// Contains hit boxes for each dataset (in dataset order)
|
||
this.legendHitBoxes = [];
|
||
|
||
// Are we in doughnut mode which has a different data type
|
||
this.doughnutMode = false;
|
||
},
|
||
|
||
// These methods are ordered by lifecycle. Utilities then follow.
|
||
// Any function defined here is inherited by all legend types.
|
||
// Any function can be extended by the legend type
|
||
|
||
beforeUpdate: noop,
|
||
update: function(maxWidth, maxHeight, margins) {
|
||
var me = this;
|
||
|
||
// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
|
||
me.beforeUpdate();
|
||
|
||
// Absorb the master measurements
|
||
me.maxWidth = maxWidth;
|
||
me.maxHeight = maxHeight;
|
||
me.margins = margins;
|
||
|
||
// Dimensions
|
||
me.beforeSetDimensions();
|
||
me.setDimensions();
|
||
me.afterSetDimensions();
|
||
// Labels
|
||
me.beforeBuildLabels();
|
||
me.buildLabels();
|
||
me.afterBuildLabels();
|
||
|
||
// Fit
|
||
me.beforeFit();
|
||
me.fit();
|
||
me.afterFit();
|
||
//
|
||
me.afterUpdate();
|
||
|
||
return me.minSize;
|
||
},
|
||
afterUpdate: noop,
|
||
|
||
//
|
||
|
||
beforeSetDimensions: noop,
|
||
setDimensions: function() {
|
||
var me = this;
|
||
// Set the unconstrained dimension before label rotation
|
||
if (me.isHorizontal()) {
|
||
// Reset position before calculating rotation
|
||
me.width = me.maxWidth;
|
||
me.left = 0;
|
||
me.right = me.width;
|
||
} else {
|
||
me.height = me.maxHeight;
|
||
|
||
// Reset position before calculating rotation
|
||
me.top = 0;
|
||
me.bottom = me.height;
|
||
}
|
||
|
||
// Reset padding
|
||
me.paddingLeft = 0;
|
||
me.paddingTop = 0;
|
||
me.paddingRight = 0;
|
||
me.paddingBottom = 0;
|
||
|
||
// Reset minSize
|
||
me.minSize = {
|
||
width: 0,
|
||
height: 0
|
||
};
|
||
},
|
||
afterSetDimensions: noop,
|
||
|
||
//
|
||
|
||
beforeBuildLabels: noop,
|
||
buildLabels: function() {
|
||
var me = this;
|
||
var labelOpts = me.options.labels;
|
||
var legendItems = labelOpts.generateLabels.call(me, me.chart);
|
||
|
||
if (labelOpts.filter) {
|
||
legendItems = legendItems.filter(function(item) {
|
||
return labelOpts.filter(item, me.chart.data);
|
||
});
|
||
}
|
||
|
||
if (me.options.reverse) {
|
||
legendItems.reverse();
|
||
}
|
||
|
||
me.legendItems = legendItems;
|
||
},
|
||
afterBuildLabels: noop,
|
||
|
||
//
|
||
|
||
beforeFit: noop,
|
||
fit: function() {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var labelOpts = opts.labels;
|
||
var display = opts.display;
|
||
|
||
var ctx = me.ctx;
|
||
|
||
var globalDefault = Chart.defaults.global,
|
||
itemOrDefault = helpers.getValueOrDefault,
|
||
fontSize = itemOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize),
|
||
fontStyle = itemOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle),
|
||
fontFamily = itemOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily),
|
||
labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);
|
||
|
||
// Reset hit boxes
|
||
var hitboxes = me.legendHitBoxes = [];
|
||
|
||
var minSize = me.minSize;
|
||
var isHorizontal = me.isHorizontal();
|
||
|
||
if (isHorizontal) {
|
||
minSize.width = me.maxWidth; // fill all the width
|
||
minSize.height = display ? 10 : 0;
|
||
} else {
|
||
minSize.width = display ? 10 : 0;
|
||
minSize.height = me.maxHeight; // fill all the height
|
||
}
|
||
|
||
// Increase sizes here
|
||
if (display) {
|
||
ctx.font = labelFont;
|
||
|
||
if (isHorizontal) {
|
||
// Labels
|
||
|
||
// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one
|
||
var lineWidths = me.lineWidths = [0];
|
||
var totalHeight = me.legendItems.length ? fontSize + (labelOpts.padding) : 0;
|
||
|
||
ctx.textAlign = 'left';
|
||
ctx.textBaseline = 'top';
|
||
|
||
helpers.each(me.legendItems, function(legendItem, i) {
|
||
var boxWidth = getBoxWidth(labelOpts, fontSize);
|
||
var width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;
|
||
|
||
if (lineWidths[lineWidths.length - 1] + width + labelOpts.padding >= me.width) {
|
||
totalHeight += fontSize + (labelOpts.padding);
|
||
lineWidths[lineWidths.length] = me.left;
|
||
}
|
||
|
||
// Store the hitbox width and height here. Final position will be updated in `draw`
|
||
hitboxes[i] = {
|
||
left: 0,
|
||
top: 0,
|
||
width: width,
|
||
height: fontSize
|
||
};
|
||
|
||
lineWidths[lineWidths.length - 1] += width + labelOpts.padding;
|
||
});
|
||
|
||
minSize.height += totalHeight;
|
||
|
||
} else {
|
||
var vPadding = labelOpts.padding;
|
||
var columnWidths = me.columnWidths = [];
|
||
var totalWidth = labelOpts.padding;
|
||
var currentColWidth = 0;
|
||
var currentColHeight = 0;
|
||
var itemHeight = fontSize + vPadding;
|
||
|
||
helpers.each(me.legendItems, function(legendItem, i) {
|
||
var boxWidth = getBoxWidth(labelOpts, fontSize);
|
||
var itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;
|
||
|
||
// If too tall, go to new column
|
||
if (currentColHeight + itemHeight > minSize.height) {
|
||
totalWidth += currentColWidth + labelOpts.padding;
|
||
columnWidths.push(currentColWidth); // previous column width
|
||
|
||
currentColWidth = 0;
|
||
currentColHeight = 0;
|
||
}
|
||
|
||
// Get max width
|
||
currentColWidth = Math.max(currentColWidth, itemWidth);
|
||
currentColHeight += itemHeight;
|
||
|
||
// Store the hitbox width and height here. Final position will be updated in `draw`
|
||
hitboxes[i] = {
|
||
left: 0,
|
||
top: 0,
|
||
width: itemWidth,
|
||
height: fontSize
|
||
};
|
||
});
|
||
|
||
totalWidth += currentColWidth;
|
||
columnWidths.push(currentColWidth);
|
||
minSize.width += totalWidth;
|
||
}
|
||
}
|
||
|
||
me.width = minSize.width;
|
||
me.height = minSize.height;
|
||
},
|
||
afterFit: noop,
|
||
|
||
// Shared Methods
|
||
isHorizontal: function() {
|
||
return this.options.position === 'top' || this.options.position === 'bottom';
|
||
},
|
||
|
||
// Actually draw the legend on the canvas
|
||
draw: function() {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var labelOpts = opts.labels;
|
||
var globalDefault = Chart.defaults.global,
|
||
lineDefault = globalDefault.elements.line,
|
||
legendWidth = me.width,
|
||
lineWidths = me.lineWidths;
|
||
|
||
if (opts.display) {
|
||
var ctx = me.ctx,
|
||
cursor,
|
||
itemOrDefault = helpers.getValueOrDefault,
|
||
fontColor = itemOrDefault(labelOpts.fontColor, globalDefault.defaultFontColor),
|
||
fontSize = itemOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize),
|
||
fontStyle = itemOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle),
|
||
fontFamily = itemOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily),
|
||
labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);
|
||
|
||
// Canvas setup
|
||
ctx.textAlign = 'left';
|
||
ctx.textBaseline = 'top';
|
||
ctx.lineWidth = 0.5;
|
||
ctx.strokeStyle = fontColor; // for strikethrough effect
|
||
ctx.fillStyle = fontColor; // render in correct colour
|
||
ctx.font = labelFont;
|
||
|
||
var boxWidth = getBoxWidth(labelOpts, fontSize),
|
||
hitboxes = me.legendHitBoxes;
|
||
|
||
// current position
|
||
var drawLegendBox = function(x, y, legendItem) {
|
||
if (isNaN(boxWidth) || boxWidth <= 0) {
|
||
return;
|
||
}
|
||
|
||
// Set the ctx for the box
|
||
ctx.save();
|
||
|
||
ctx.fillStyle = itemOrDefault(legendItem.fillStyle, globalDefault.defaultColor);
|
||
ctx.lineCap = itemOrDefault(legendItem.lineCap, lineDefault.borderCapStyle);
|
||
ctx.lineDashOffset = itemOrDefault(legendItem.lineDashOffset, lineDefault.borderDashOffset);
|
||
ctx.lineJoin = itemOrDefault(legendItem.lineJoin, lineDefault.borderJoinStyle);
|
||
ctx.lineWidth = itemOrDefault(legendItem.lineWidth, lineDefault.borderWidth);
|
||
ctx.strokeStyle = itemOrDefault(legendItem.strokeStyle, globalDefault.defaultColor);
|
||
var isLineWidthZero = (itemOrDefault(legendItem.lineWidth, lineDefault.borderWidth) === 0);
|
||
|
||
if (ctx.setLineDash) {
|
||
// IE 9 and 10 do not support line dash
|
||
ctx.setLineDash(itemOrDefault(legendItem.lineDash, lineDefault.borderDash));
|
||
}
|
||
|
||
if (opts.labels && opts.labels.usePointStyle) {
|
||
// Recalculate x and y for drawPoint() because its expecting
|
||
// x and y to be center of figure (instead of top left)
|
||
var radius = fontSize * Math.SQRT2 / 2;
|
||
var offSet = radius / Math.SQRT2;
|
||
var centerX = x + offSet;
|
||
var centerY = y + offSet;
|
||
|
||
// Draw pointStyle as legend symbol
|
||
Chart.canvasHelpers.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);
|
||
} else {
|
||
// Draw box as legend symbol
|
||
if (!isLineWidthZero) {
|
||
ctx.strokeRect(x, y, boxWidth, fontSize);
|
||
}
|
||
ctx.fillRect(x, y, boxWidth, fontSize);
|
||
}
|
||
|
||
ctx.restore();
|
||
};
|
||
var fillText = function(x, y, legendItem, textWidth) {
|
||
ctx.fillText(legendItem.text, boxWidth + (fontSize / 2) + x, y);
|
||
|
||
if (legendItem.hidden) {
|
||
// Strikethrough the text if hidden
|
||
ctx.beginPath();
|
||
ctx.lineWidth = 2;
|
||
ctx.moveTo(boxWidth + (fontSize / 2) + x, y + (fontSize / 2));
|
||
ctx.lineTo(boxWidth + (fontSize / 2) + x + textWidth, y + (fontSize / 2));
|
||
ctx.stroke();
|
||
}
|
||
};
|
||
|
||
// Horizontal
|
||
var isHorizontal = me.isHorizontal();
|
||
if (isHorizontal) {
|
||
cursor = {
|
||
x: me.left + ((legendWidth - lineWidths[0]) / 2),
|
||
y: me.top + labelOpts.padding,
|
||
line: 0
|
||
};
|
||
} else {
|
||
cursor = {
|
||
x: me.left + labelOpts.padding,
|
||
y: me.top + labelOpts.padding,
|
||
line: 0
|
||
};
|
||
}
|
||
|
||
var itemHeight = fontSize + labelOpts.padding;
|
||
helpers.each(me.legendItems, function(legendItem, i) {
|
||
var textWidth = ctx.measureText(legendItem.text).width,
|
||
width = boxWidth + (fontSize / 2) + textWidth,
|
||
x = cursor.x,
|
||
y = cursor.y;
|
||
|
||
if (isHorizontal) {
|
||
if (x + width >= legendWidth) {
|
||
y = cursor.y += itemHeight;
|
||
cursor.line++;
|
||
x = cursor.x = me.left + ((legendWidth - lineWidths[cursor.line]) / 2);
|
||
}
|
||
} else if (y + itemHeight > me.bottom) {
|
||
x = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;
|
||
y = cursor.y = me.top + labelOpts.padding;
|
||
cursor.line++;
|
||
}
|
||
|
||
drawLegendBox(x, y, legendItem);
|
||
|
||
hitboxes[i].left = x;
|
||
hitboxes[i].top = y;
|
||
|
||
// Fill the actual label
|
||
fillText(x, y, legendItem, textWidth);
|
||
|
||
if (isHorizontal) {
|
||
cursor.x += width + (labelOpts.padding);
|
||
} else {
|
||
cursor.y += itemHeight;
|
||
}
|
||
|
||
});
|
||
}
|
||
},
|
||
|
||
/**
|
||
* Handle an event
|
||
* @private
|
||
* @param {IEvent} event - The event to handle
|
||
* @return {Boolean} true if a change occured
|
||
*/
|
||
handleEvent: function(e) {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var type = e.type === 'mouseup' ? 'click' : e.type;
|
||
var changed = false;
|
||
|
||
if (type === 'mousemove') {
|
||
if (!opts.onHover) {
|
||
return;
|
||
}
|
||
} else if (type === 'click') {
|
||
if (!opts.onClick) {
|
||
return;
|
||
}
|
||
} else {
|
||
return;
|
||
}
|
||
|
||
// Chart event already has relative position in it
|
||
var x = e.x,
|
||
y = e.y;
|
||
|
||
if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {
|
||
// See if we are touching one of the dataset boxes
|
||
var lh = me.legendHitBoxes;
|
||
for (var i = 0; i < lh.length; ++i) {
|
||
var hitBox = lh[i];
|
||
|
||
if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {
|
||
// Touching an element
|
||
if (type === 'click') {
|
||
// use e.native for backwards compatibility
|
||
opts.onClick.call(me, e.native, me.legendItems[i]);
|
||
changed = true;
|
||
break;
|
||
} else if (type === 'mousemove') {
|
||
// use e.native for backwards compatibility
|
||
opts.onHover.call(me, e.native, me.legendItems[i]);
|
||
changed = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return changed;
|
||
}
|
||
});
|
||
|
||
function createNewLegendAndAttach(chartInstance, legendOpts) {
|
||
var legend = new Chart.Legend({
|
||
ctx: chartInstance.chart.ctx,
|
||
options: legendOpts,
|
||
chart: chartInstance
|
||
});
|
||
chartInstance.legend = legend;
|
||
Chart.layoutService.addBox(chartInstance, legend);
|
||
}
|
||
|
||
// Register the legend plugin
|
||
Chart.plugins.register({
|
||
beforeInit: function(chartInstance) {
|
||
var legendOpts = chartInstance.options.legend;
|
||
|
||
if (legendOpts) {
|
||
createNewLegendAndAttach(chartInstance, legendOpts);
|
||
}
|
||
},
|
||
beforeUpdate: function(chartInstance) {
|
||
var legendOpts = chartInstance.options.legend;
|
||
|
||
if (legendOpts) {
|
||
legendOpts = helpers.configMerge(Chart.defaults.global.legend, legendOpts);
|
||
|
||
if (chartInstance.legend) {
|
||
chartInstance.legend.options = legendOpts;
|
||
} else {
|
||
createNewLegendAndAttach(chartInstance, legendOpts);
|
||
}
|
||
} else {
|
||
Chart.layoutService.removeBox(chartInstance, chartInstance.legend);
|
||
delete chartInstance.legend;
|
||
}
|
||
},
|
||
afterEvent: function(chartInstance, e) {
|
||
var legend = chartInstance.legend;
|
||
if (legend) {
|
||
legend.handleEvent(e);
|
||
}
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 26 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
var helpers = Chart.helpers;
|
||
|
||
/**
|
||
* Helper function to get relative position for an event
|
||
* @param {Event|IEvent} event - The event to get the position for
|
||
* @param {Chart} chart - The chart
|
||
* @returns {Point} the event position
|
||
*/
|
||
function getRelativePosition(e, chart) {
|
||
if (e.native) {
|
||
return {
|
||
x: e.x,
|
||
y: e.y
|
||
};
|
||
}
|
||
|
||
return helpers.getRelativePosition(e, chart);
|
||
}
|
||
|
||
/**
|
||
* Helper function to traverse all of the visible elements in the chart
|
||
* @param chart {chart} the chart
|
||
* @param handler {Function} the callback to execute for each visible item
|
||
*/
|
||
function parseVisibleItems(chart, handler) {
|
||
var datasets = chart.data.datasets;
|
||
var meta, i, j, ilen, jlen;
|
||
|
||
for (i = 0, ilen = datasets.length; i < ilen; ++i) {
|
||
if (!chart.isDatasetVisible(i)) {
|
||
continue;
|
||
}
|
||
|
||
meta = chart.getDatasetMeta(i);
|
||
for (j = 0, jlen = meta.data.length; j < jlen; ++j) {
|
||
var element = meta.data[j];
|
||
if (!element._view.skip) {
|
||
handler(element);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Helper function to get the items that intersect the event position
|
||
* @param items {ChartElement[]} elements to filter
|
||
* @param position {Point} the point to be nearest to
|
||
* @return {ChartElement[]} the nearest items
|
||
*/
|
||
function getIntersectItems(chart, position) {
|
||
var elements = [];
|
||
|
||
parseVisibleItems(chart, function(element) {
|
||
if (element.inRange(position.x, position.y)) {
|
||
elements.push(element);
|
||
}
|
||
});
|
||
|
||
return elements;
|
||
}
|
||
|
||
/**
|
||
* Helper function to get the items nearest to the event position considering all visible items in teh chart
|
||
* @param chart {Chart} the chart to look at elements from
|
||
* @param position {Point} the point to be nearest to
|
||
* @param intersect {Boolean} if true, only consider items that intersect the position
|
||
* @param distanceMetric {Function} Optional function to provide the distance between
|
||
* @return {ChartElement[]} the nearest items
|
||
*/
|
||
function getNearestItems(chart, position, intersect, distanceMetric) {
|
||
var minDistance = Number.POSITIVE_INFINITY;
|
||
var nearestItems = [];
|
||
|
||
if (!distanceMetric) {
|
||
distanceMetric = helpers.distanceBetweenPoints;
|
||
}
|
||
|
||
parseVisibleItems(chart, function(element) {
|
||
if (intersect && !element.inRange(position.x, position.y)) {
|
||
return;
|
||
}
|
||
|
||
var center = element.getCenterPoint();
|
||
var distance = distanceMetric(position, center);
|
||
|
||
if (distance < minDistance) {
|
||
nearestItems = [element];
|
||
minDistance = distance;
|
||
} else if (distance === minDistance) {
|
||
// Can have multiple items at the same distance in which case we sort by size
|
||
nearestItems.push(element);
|
||
}
|
||
});
|
||
|
||
return nearestItems;
|
||
}
|
||
|
||
function indexMode(chart, e, options) {
|
||
var position = getRelativePosition(e, chart.chart);
|
||
var distanceMetric = function(pt1, pt2) {
|
||
return Math.abs(pt1.x - pt2.x);
|
||
};
|
||
var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);
|
||
var elements = [];
|
||
|
||
if (!items.length) {
|
||
return [];
|
||
}
|
||
|
||
chart.data.datasets.forEach(function(dataset, datasetIndex) {
|
||
if (chart.isDatasetVisible(datasetIndex)) {
|
||
var meta = chart.getDatasetMeta(datasetIndex),
|
||
element = meta.data[items[0]._index];
|
||
|
||
// don't count items that are skipped (null data)
|
||
if (element && !element._view.skip) {
|
||
elements.push(element);
|
||
}
|
||
}
|
||
});
|
||
|
||
return elements;
|
||
}
|
||
|
||
/**
|
||
* @interface IInteractionOptions
|
||
*/
|
||
/**
|
||
* If true, only consider items that intersect the point
|
||
* @name IInterfaceOptions#boolean
|
||
* @type Boolean
|
||
*/
|
||
|
||
/**
|
||
* Contains interaction related functions
|
||
* @namespace Chart.Interaction
|
||
*/
|
||
Chart.Interaction = {
|
||
// Helper function for different modes
|
||
modes: {
|
||
single: function(chart, e) {
|
||
var position = getRelativePosition(e, chart.chart);
|
||
var elements = [];
|
||
|
||
parseVisibleItems(chart, function(element) {
|
||
if (element.inRange(position.x, position.y)) {
|
||
elements.push(element);
|
||
return elements;
|
||
}
|
||
});
|
||
|
||
return elements.slice(0, 1);
|
||
},
|
||
|
||
/**
|
||
* @function Chart.Interaction.modes.label
|
||
* @deprecated since version 2.4.0
|
||
*/
|
||
label: indexMode,
|
||
|
||
/**
|
||
* Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something
|
||
* If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item
|
||
* @function Chart.Interaction.modes.index
|
||
* @since v2.4.0
|
||
* @param chart {chart} the chart we are returning items from
|
||
* @param e {Event} the event we are find things at
|
||
* @param options {IInteractionOptions} options to use during interaction
|
||
* @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
|
||
*/
|
||
index: indexMode,
|
||
|
||
/**
|
||
* Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something
|
||
* If the options.intersect is false, we find the nearest item and return the items in that dataset
|
||
* @function Chart.Interaction.modes.dataset
|
||
* @param chart {chart} the chart we are returning items from
|
||
* @param e {Event} the event we are find things at
|
||
* @param options {IInteractionOptions} options to use during interaction
|
||
* @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
|
||
*/
|
||
dataset: function(chart, e, options) {
|
||
var position = getRelativePosition(e, chart.chart);
|
||
var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false);
|
||
|
||
if (items.length > 0) {
|
||
items = chart.getDatasetMeta(items[0]._datasetIndex).data;
|
||
}
|
||
|
||
return items;
|
||
},
|
||
|
||
/**
|
||
* @function Chart.Interaction.modes.x-axis
|
||
* @deprecated since version 2.4.0. Use index mode and intersect == true
|
||
*/
|
||
'x-axis': function(chart, e) {
|
||
return indexMode(chart, e, true);
|
||
},
|
||
|
||
/**
|
||
* Point mode returns all elements that hit test based on the event position
|
||
* of the event
|
||
* @function Chart.Interaction.modes.intersect
|
||
* @param chart {chart} the chart we are returning items from
|
||
* @param e {Event} the event we are find things at
|
||
* @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
|
||
*/
|
||
point: function(chart, e) {
|
||
var position = getRelativePosition(e, chart.chart);
|
||
return getIntersectItems(chart, position);
|
||
},
|
||
|
||
/**
|
||
* nearest mode returns the element closest to the point
|
||
* @function Chart.Interaction.modes.intersect
|
||
* @param chart {chart} the chart we are returning items from
|
||
* @param e {Event} the event we are find things at
|
||
* @param options {IInteractionOptions} options to use
|
||
* @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
|
||
*/
|
||
nearest: function(chart, e, options) {
|
||
var position = getRelativePosition(e, chart.chart);
|
||
var nearestItems = getNearestItems(chart, position, options.intersect);
|
||
|
||
// We have multiple items at the same distance from the event. Now sort by smallest
|
||
if (nearestItems.length > 1) {
|
||
nearestItems.sort(function(a, b) {
|
||
var sizeA = a.getArea();
|
||
var sizeB = b.getArea();
|
||
var ret = sizeA - sizeB;
|
||
|
||
if (ret === 0) {
|
||
// if equal sort by dataset index
|
||
ret = a._datasetIndex - b._datasetIndex;
|
||
}
|
||
|
||
return ret;
|
||
});
|
||
}
|
||
|
||
// Return only 1 item
|
||
return nearestItems.slice(0, 1);
|
||
},
|
||
|
||
/**
|
||
* x mode returns the elements that hit-test at the current x coordinate
|
||
* @function Chart.Interaction.modes.x
|
||
* @param chart {chart} the chart we are returning items from
|
||
* @param e {Event} the event we are find things at
|
||
* @param options {IInteractionOptions} options to use
|
||
* @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
|
||
*/
|
||
x: function(chart, e, options) {
|
||
var position = getRelativePosition(e, chart.chart);
|
||
var items = [];
|
||
var intersectsItem = false;
|
||
|
||
parseVisibleItems(chart, function(element) {
|
||
if (element.inXRange(position.x)) {
|
||
items.push(element);
|
||
}
|
||
|
||
if (element.inRange(position.x, position.y)) {
|
||
intersectsItem = true;
|
||
}
|
||
});
|
||
|
||
// If we want to trigger on an intersect and we don't have any items
|
||
// that intersect the position, return nothing
|
||
if (options.intersect && !intersectsItem) {
|
||
items = [];
|
||
}
|
||
return items;
|
||
},
|
||
|
||
/**
|
||
* y mode returns the elements that hit-test at the current y coordinate
|
||
* @function Chart.Interaction.modes.y
|
||
* @param chart {chart} the chart we are returning items from
|
||
* @param e {Event} the event we are find things at
|
||
* @param options {IInteractionOptions} options to use
|
||
* @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
|
||
*/
|
||
y: function(chart, e, options) {
|
||
var position = getRelativePosition(e, chart.chart);
|
||
var items = [];
|
||
var intersectsItem = false;
|
||
|
||
parseVisibleItems(chart, function(element) {
|
||
if (element.inYRange(position.y)) {
|
||
items.push(element);
|
||
}
|
||
|
||
if (element.inRange(position.x, position.y)) {
|
||
intersectsItem = true;
|
||
}
|
||
});
|
||
|
||
// If we want to trigger on an intersect and we don't have any items
|
||
// that intersect the position, return nothing
|
||
if (options.intersect && !intersectsItem) {
|
||
items = [];
|
||
}
|
||
return items;
|
||
}
|
||
}
|
||
};
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 27 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
/**
|
||
* Helper method to merge the opacity into a color
|
||
*/
|
||
function mergeOpacity(colorString, opacity) {
|
||
var color = helpers.color(colorString);
|
||
return color.alpha(opacity * color.alpha()).rgbaString();
|
||
}
|
||
|
||
Chart.defaults.global.tooltips = {
|
||
enabled: true,
|
||
custom: null,
|
||
mode: 'nearest',
|
||
position: 'average',
|
||
intersect: true,
|
||
backgroundColor: 'rgba(0,0,0,0.8)',
|
||
titleFontStyle: 'bold',
|
||
titleSpacing: 2,
|
||
titleMarginBottom: 6,
|
||
titleFontColor: '#fff',
|
||
titleAlign: 'left',
|
||
bodySpacing: 2,
|
||
bodyFontColor: '#fff',
|
||
bodyAlign: 'left',
|
||
footerFontStyle: 'bold',
|
||
footerSpacing: 2,
|
||
footerMarginTop: 6,
|
||
footerFontColor: '#fff',
|
||
footerAlign: 'left',
|
||
yPadding: 6,
|
||
xPadding: 6,
|
||
caretSize: 5,
|
||
cornerRadius: 6,
|
||
multiKeyBackground: '#fff',
|
||
displayColors: true,
|
||
callbacks: {
|
||
// Args are: (tooltipItems, data)
|
||
beforeTitle: helpers.noop,
|
||
title: function(tooltipItems, data) {
|
||
// Pick first xLabel for now
|
||
var title = '';
|
||
var labels = data.labels;
|
||
var labelCount = labels ? labels.length : 0;
|
||
|
||
if (tooltipItems.length > 0) {
|
||
var item = tooltipItems[0];
|
||
|
||
if (item.xLabel) {
|
||
title = item.xLabel;
|
||
} else if (labelCount > 0 && item.index < labelCount) {
|
||
title = labels[item.index];
|
||
}
|
||
}
|
||
|
||
return title;
|
||
},
|
||
afterTitle: helpers.noop,
|
||
|
||
// Args are: (tooltipItems, data)
|
||
beforeBody: helpers.noop,
|
||
|
||
// Args are: (tooltipItem, data)
|
||
beforeLabel: helpers.noop,
|
||
label: function(tooltipItem, data) {
|
||
var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';
|
||
return datasetLabel + ': ' + tooltipItem.yLabel;
|
||
},
|
||
labelColor: function(tooltipItem, chartInstance) {
|
||
var meta = chartInstance.getDatasetMeta(tooltipItem.datasetIndex);
|
||
var activeElement = meta.data[tooltipItem.index];
|
||
var view = activeElement._view;
|
||
return {
|
||
borderColor: view.borderColor,
|
||
backgroundColor: view.backgroundColor
|
||
};
|
||
},
|
||
afterLabel: helpers.noop,
|
||
|
||
// Args are: (tooltipItems, data)
|
||
afterBody: helpers.noop,
|
||
|
||
// Args are: (tooltipItems, data)
|
||
beforeFooter: helpers.noop,
|
||
footer: helpers.noop,
|
||
afterFooter: helpers.noop
|
||
}
|
||
};
|
||
|
||
// Helper to push or concat based on if the 2nd parameter is an array or not
|
||
function pushOrConcat(base, toPush) {
|
||
if (toPush) {
|
||
if (helpers.isArray(toPush)) {
|
||
// base = base.concat(toPush);
|
||
Array.prototype.push.apply(base, toPush);
|
||
} else {
|
||
base.push(toPush);
|
||
}
|
||
}
|
||
|
||
return base;
|
||
}
|
||
|
||
// Private helper to create a tooltip item model
|
||
// @param element : the chart element (point, arc, bar) to create the tooltip item for
|
||
// @return : new tooltip item
|
||
function createTooltipItem(element) {
|
||
var xScale = element._xScale;
|
||
var yScale = element._yScale || element._scale; // handle radar || polarArea charts
|
||
var index = element._index,
|
||
datasetIndex = element._datasetIndex;
|
||
|
||
return {
|
||
xLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',
|
||
yLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',
|
||
index: index,
|
||
datasetIndex: datasetIndex,
|
||
x: element._model.x,
|
||
y: element._model.y
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Helper to get the reset model for the tooltip
|
||
* @param tooltipOpts {Object} the tooltip options
|
||
*/
|
||
function getBaseModel(tooltipOpts) {
|
||
var globalDefaults = Chart.defaults.global;
|
||
var getValueOrDefault = helpers.getValueOrDefault;
|
||
|
||
return {
|
||
// Positioning
|
||
xPadding: tooltipOpts.xPadding,
|
||
yPadding: tooltipOpts.yPadding,
|
||
xAlign: tooltipOpts.xAlign,
|
||
yAlign: tooltipOpts.yAlign,
|
||
|
||
// Body
|
||
bodyFontColor: tooltipOpts.bodyFontColor,
|
||
_bodyFontFamily: getValueOrDefault(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),
|
||
_bodyFontStyle: getValueOrDefault(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),
|
||
_bodyAlign: tooltipOpts.bodyAlign,
|
||
bodyFontSize: getValueOrDefault(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),
|
||
bodySpacing: tooltipOpts.bodySpacing,
|
||
|
||
// Title
|
||
titleFontColor: tooltipOpts.titleFontColor,
|
||
_titleFontFamily: getValueOrDefault(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),
|
||
_titleFontStyle: getValueOrDefault(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),
|
||
titleFontSize: getValueOrDefault(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),
|
||
_titleAlign: tooltipOpts.titleAlign,
|
||
titleSpacing: tooltipOpts.titleSpacing,
|
||
titleMarginBottom: tooltipOpts.titleMarginBottom,
|
||
|
||
// Footer
|
||
footerFontColor: tooltipOpts.footerFontColor,
|
||
_footerFontFamily: getValueOrDefault(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),
|
||
_footerFontStyle: getValueOrDefault(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),
|
||
footerFontSize: getValueOrDefault(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),
|
||
_footerAlign: tooltipOpts.footerAlign,
|
||
footerSpacing: tooltipOpts.footerSpacing,
|
||
footerMarginTop: tooltipOpts.footerMarginTop,
|
||
|
||
// Appearance
|
||
caretSize: tooltipOpts.caretSize,
|
||
cornerRadius: tooltipOpts.cornerRadius,
|
||
backgroundColor: tooltipOpts.backgroundColor,
|
||
opacity: 0,
|
||
legendColorBackground: tooltipOpts.multiKeyBackground,
|
||
displayColors: tooltipOpts.displayColors
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Get the size of the tooltip
|
||
*/
|
||
function getTooltipSize(tooltip, model) {
|
||
var ctx = tooltip._chart.ctx;
|
||
|
||
var height = model.yPadding * 2; // Tooltip Padding
|
||
var width = 0;
|
||
|
||
// Count of all lines in the body
|
||
var body = model.body;
|
||
var combinedBodyLength = body.reduce(function(count, bodyItem) {
|
||
return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;
|
||
}, 0);
|
||
combinedBodyLength += model.beforeBody.length + model.afterBody.length;
|
||
|
||
var titleLineCount = model.title.length;
|
||
var footerLineCount = model.footer.length;
|
||
var titleFontSize = model.titleFontSize,
|
||
bodyFontSize = model.bodyFontSize,
|
||
footerFontSize = model.footerFontSize;
|
||
|
||
height += titleLineCount * titleFontSize; // Title Lines
|
||
height += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing
|
||
height += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin
|
||
height += combinedBodyLength * bodyFontSize; // Body Lines
|
||
height += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing
|
||
height += footerLineCount ? model.footerMarginTop : 0; // Footer Margin
|
||
height += footerLineCount * (footerFontSize); // Footer Lines
|
||
height += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing
|
||
|
||
// Title width
|
||
var widthPadding = 0;
|
||
var maxLineWidth = function(line) {
|
||
width = Math.max(width, ctx.measureText(line).width + widthPadding);
|
||
};
|
||
|
||
ctx.font = helpers.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);
|
||
helpers.each(model.title, maxLineWidth);
|
||
|
||
// Body width
|
||
ctx.font = helpers.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);
|
||
helpers.each(model.beforeBody.concat(model.afterBody), maxLineWidth);
|
||
|
||
// Body lines may include some extra width due to the color box
|
||
widthPadding = model.displayColors ? (bodyFontSize + 2) : 0;
|
||
helpers.each(body, function(bodyItem) {
|
||
helpers.each(bodyItem.before, maxLineWidth);
|
||
helpers.each(bodyItem.lines, maxLineWidth);
|
||
helpers.each(bodyItem.after, maxLineWidth);
|
||
});
|
||
|
||
// Reset back to 0
|
||
widthPadding = 0;
|
||
|
||
// Footer width
|
||
ctx.font = helpers.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);
|
||
helpers.each(model.footer, maxLineWidth);
|
||
|
||
// Add padding
|
||
width += 2 * model.xPadding;
|
||
|
||
return {
|
||
width: width,
|
||
height: height
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Helper to get the alignment of a tooltip given the size
|
||
*/
|
||
function determineAlignment(tooltip, size) {
|
||
var model = tooltip._model;
|
||
var chart = tooltip._chart;
|
||
var chartArea = tooltip._chartInstance.chartArea;
|
||
var xAlign = 'center';
|
||
var yAlign = 'center';
|
||
|
||
if (model.y < size.height) {
|
||
yAlign = 'top';
|
||
} else if (model.y > (chart.height - size.height)) {
|
||
yAlign = 'bottom';
|
||
}
|
||
|
||
var lf, rf; // functions to determine left, right alignment
|
||
var olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart
|
||
var yf; // function to get the y alignment if the tooltip goes outside of the left or right edges
|
||
var midX = (chartArea.left + chartArea.right) / 2;
|
||
var midY = (chartArea.top + chartArea.bottom) / 2;
|
||
|
||
if (yAlign === 'center') {
|
||
lf = function(x) {
|
||
return x <= midX;
|
||
};
|
||
rf = function(x) {
|
||
return x > midX;
|
||
};
|
||
} else {
|
||
lf = function(x) {
|
||
return x <= (size.width / 2);
|
||
};
|
||
rf = function(x) {
|
||
return x >= (chart.width - (size.width / 2));
|
||
};
|
||
}
|
||
|
||
olf = function(x) {
|
||
return x + size.width > chart.width;
|
||
};
|
||
orf = function(x) {
|
||
return x - size.width < 0;
|
||
};
|
||
yf = function(y) {
|
||
return y <= midY ? 'top' : 'bottom';
|
||
};
|
||
|
||
if (lf(model.x)) {
|
||
xAlign = 'left';
|
||
|
||
// Is tooltip too wide and goes over the right side of the chart.?
|
||
if (olf(model.x)) {
|
||
xAlign = 'center';
|
||
yAlign = yf(model.y);
|
||
}
|
||
} else if (rf(model.x)) {
|
||
xAlign = 'right';
|
||
|
||
// Is tooltip too wide and goes outside left edge of canvas?
|
||
if (orf(model.x)) {
|
||
xAlign = 'center';
|
||
yAlign = yf(model.y);
|
||
}
|
||
}
|
||
|
||
var opts = tooltip._options;
|
||
return {
|
||
xAlign: opts.xAlign ? opts.xAlign : xAlign,
|
||
yAlign: opts.yAlign ? opts.yAlign : yAlign
|
||
};
|
||
}
|
||
|
||
/**
|
||
* @Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment
|
||
*/
|
||
function getBackgroundPoint(vm, size, alignment) {
|
||
// Background Position
|
||
var x = vm.x;
|
||
var y = vm.y;
|
||
|
||
var caretSize = vm.caretSize,
|
||
caretPadding = vm.caretPadding,
|
||
cornerRadius = vm.cornerRadius,
|
||
xAlign = alignment.xAlign,
|
||
yAlign = alignment.yAlign,
|
||
paddingAndSize = caretSize + caretPadding,
|
||
radiusAndPadding = cornerRadius + caretPadding;
|
||
|
||
if (xAlign === 'right') {
|
||
x -= size.width;
|
||
} else if (xAlign === 'center') {
|
||
x -= (size.width / 2);
|
||
}
|
||
|
||
if (yAlign === 'top') {
|
||
y += paddingAndSize;
|
||
} else if (yAlign === 'bottom') {
|
||
y -= size.height + paddingAndSize;
|
||
} else {
|
||
y -= (size.height / 2);
|
||
}
|
||
|
||
if (yAlign === 'center') {
|
||
if (xAlign === 'left') {
|
||
x += paddingAndSize;
|
||
} else if (xAlign === 'right') {
|
||
x -= paddingAndSize;
|
||
}
|
||
} else if (xAlign === 'left') {
|
||
x -= radiusAndPadding;
|
||
} else if (xAlign === 'right') {
|
||
x += radiusAndPadding;
|
||
}
|
||
|
||
return {
|
||
x: x,
|
||
y: y
|
||
};
|
||
}
|
||
|
||
Chart.Tooltip = Chart.Element.extend({
|
||
initialize: function() {
|
||
this._model = getBaseModel(this._options);
|
||
},
|
||
|
||
// Get the title
|
||
// Args are: (tooltipItem, data)
|
||
getTitle: function() {
|
||
var me = this;
|
||
var opts = me._options;
|
||
var callbacks = opts.callbacks;
|
||
|
||
var beforeTitle = callbacks.beforeTitle.apply(me, arguments),
|
||
title = callbacks.title.apply(me, arguments),
|
||
afterTitle = callbacks.afterTitle.apply(me, arguments);
|
||
|
||
var lines = [];
|
||
lines = pushOrConcat(lines, beforeTitle);
|
||
lines = pushOrConcat(lines, title);
|
||
lines = pushOrConcat(lines, afterTitle);
|
||
|
||
return lines;
|
||
},
|
||
|
||
// Args are: (tooltipItem, data)
|
||
getBeforeBody: function() {
|
||
var lines = this._options.callbacks.beforeBody.apply(this, arguments);
|
||
return helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];
|
||
},
|
||
|
||
// Args are: (tooltipItem, data)
|
||
getBody: function(tooltipItems, data) {
|
||
var me = this;
|
||
var callbacks = me._options.callbacks;
|
||
var bodyItems = [];
|
||
|
||
helpers.each(tooltipItems, function(tooltipItem) {
|
||
var bodyItem = {
|
||
before: [],
|
||
lines: [],
|
||
after: []
|
||
};
|
||
pushOrConcat(bodyItem.before, callbacks.beforeLabel.call(me, tooltipItem, data));
|
||
pushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));
|
||
pushOrConcat(bodyItem.after, callbacks.afterLabel.call(me, tooltipItem, data));
|
||
|
||
bodyItems.push(bodyItem);
|
||
});
|
||
|
||
return bodyItems;
|
||
},
|
||
|
||
// Args are: (tooltipItem, data)
|
||
getAfterBody: function() {
|
||
var lines = this._options.callbacks.afterBody.apply(this, arguments);
|
||
return helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];
|
||
},
|
||
|
||
// Get the footer and beforeFooter and afterFooter lines
|
||
// Args are: (tooltipItem, data)
|
||
getFooter: function() {
|
||
var me = this;
|
||
var callbacks = me._options.callbacks;
|
||
|
||
var beforeFooter = callbacks.beforeFooter.apply(me, arguments);
|
||
var footer = callbacks.footer.apply(me, arguments);
|
||
var afterFooter = callbacks.afterFooter.apply(me, arguments);
|
||
|
||
var lines = [];
|
||
lines = pushOrConcat(lines, beforeFooter);
|
||
lines = pushOrConcat(lines, footer);
|
||
lines = pushOrConcat(lines, afterFooter);
|
||
|
||
return lines;
|
||
},
|
||
|
||
update: function(changed) {
|
||
var me = this;
|
||
var opts = me._options;
|
||
|
||
// Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition
|
||
// that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time
|
||
// which breaks any animations.
|
||
var existingModel = me._model;
|
||
var model = me._model = getBaseModel(opts);
|
||
var active = me._active;
|
||
|
||
var data = me._data;
|
||
var chartInstance = me._chartInstance;
|
||
|
||
// In the case where active.length === 0 we need to keep these at existing values for good animations
|
||
var alignment = {
|
||
xAlign: existingModel.xAlign,
|
||
yAlign: existingModel.yAlign
|
||
};
|
||
var backgroundPoint = {
|
||
x: existingModel.x,
|
||
y: existingModel.y
|
||
};
|
||
var tooltipSize = {
|
||
width: existingModel.width,
|
||
height: existingModel.height
|
||
};
|
||
var tooltipPosition = {
|
||
x: existingModel.caretX,
|
||
y: existingModel.caretY
|
||
};
|
||
|
||
var i, len;
|
||
|
||
if (active.length) {
|
||
model.opacity = 1;
|
||
|
||
var labelColors = [];
|
||
tooltipPosition = Chart.Tooltip.positioners[opts.position](active, me._eventPosition);
|
||
|
||
var tooltipItems = [];
|
||
for (i = 0, len = active.length; i < len; ++i) {
|
||
tooltipItems.push(createTooltipItem(active[i]));
|
||
}
|
||
|
||
// If the user provided a filter function, use it to modify the tooltip items
|
||
if (opts.filter) {
|
||
tooltipItems = tooltipItems.filter(function(a) {
|
||
return opts.filter(a, data);
|
||
});
|
||
}
|
||
|
||
// If the user provided a sorting function, use it to modify the tooltip items
|
||
if (opts.itemSort) {
|
||
tooltipItems = tooltipItems.sort(function(a, b) {
|
||
return opts.itemSort(a, b, data);
|
||
});
|
||
}
|
||
|
||
// Determine colors for boxes
|
||
helpers.each(tooltipItems, function(tooltipItem) {
|
||
labelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, chartInstance));
|
||
});
|
||
|
||
// Build the Text Lines
|
||
model.title = me.getTitle(tooltipItems, data);
|
||
model.beforeBody = me.getBeforeBody(tooltipItems, data);
|
||
model.body = me.getBody(tooltipItems, data);
|
||
model.afterBody = me.getAfterBody(tooltipItems, data);
|
||
model.footer = me.getFooter(tooltipItems, data);
|
||
|
||
// Initial positioning and colors
|
||
model.x = Math.round(tooltipPosition.x);
|
||
model.y = Math.round(tooltipPosition.y);
|
||
model.caretPadding = helpers.getValueOrDefault(tooltipPosition.padding, 2);
|
||
model.labelColors = labelColors;
|
||
|
||
// data points
|
||
model.dataPoints = tooltipItems;
|
||
|
||
// We need to determine alignment of the tooltip
|
||
tooltipSize = getTooltipSize(this, model);
|
||
alignment = determineAlignment(this, tooltipSize);
|
||
// Final Size and Position
|
||
backgroundPoint = getBackgroundPoint(model, tooltipSize, alignment);
|
||
} else {
|
||
model.opacity = 0;
|
||
}
|
||
|
||
model.xAlign = alignment.xAlign;
|
||
model.yAlign = alignment.yAlign;
|
||
model.x = backgroundPoint.x;
|
||
model.y = backgroundPoint.y;
|
||
model.width = tooltipSize.width;
|
||
model.height = tooltipSize.height;
|
||
|
||
// Point where the caret on the tooltip points to
|
||
model.caretX = tooltipPosition.x;
|
||
model.caretY = tooltipPosition.y;
|
||
|
||
me._model = model;
|
||
|
||
if (changed && opts.custom) {
|
||
opts.custom.call(me, model);
|
||
}
|
||
|
||
return me;
|
||
},
|
||
drawCaret: function(tooltipPoint, size, opacity) {
|
||
var vm = this._view;
|
||
var ctx = this._chart.ctx;
|
||
var x1, x2, x3;
|
||
var y1, y2, y3;
|
||
var caretSize = vm.caretSize;
|
||
var cornerRadius = vm.cornerRadius;
|
||
var xAlign = vm.xAlign,
|
||
yAlign = vm.yAlign;
|
||
var ptX = tooltipPoint.x,
|
||
ptY = tooltipPoint.y;
|
||
var width = size.width,
|
||
height = size.height;
|
||
|
||
if (yAlign === 'center') {
|
||
// Left or right side
|
||
if (xAlign === 'left') {
|
||
x1 = ptX;
|
||
x2 = x1 - caretSize;
|
||
x3 = x1;
|
||
} else {
|
||
x1 = ptX + width;
|
||
x2 = x1 + caretSize;
|
||
x3 = x1;
|
||
}
|
||
|
||
y2 = ptY + (height / 2);
|
||
y1 = y2 - caretSize;
|
||
y3 = y2 + caretSize;
|
||
} else {
|
||
if (xAlign === 'left') {
|
||
x1 = ptX + cornerRadius;
|
||
x2 = x1 + caretSize;
|
||
x3 = x2 + caretSize;
|
||
} else if (xAlign === 'right') {
|
||
x1 = ptX + width - cornerRadius;
|
||
x2 = x1 - caretSize;
|
||
x3 = x2 - caretSize;
|
||
} else {
|
||
x2 = ptX + (width / 2);
|
||
x1 = x2 - caretSize;
|
||
x3 = x2 + caretSize;
|
||
}
|
||
|
||
if (yAlign === 'top') {
|
||
y1 = ptY;
|
||
y2 = y1 - caretSize;
|
||
y3 = y1;
|
||
} else {
|
||
y1 = ptY + height;
|
||
y2 = y1 + caretSize;
|
||
y3 = y1;
|
||
}
|
||
}
|
||
|
||
ctx.fillStyle = mergeOpacity(vm.backgroundColor, opacity);
|
||
ctx.beginPath();
|
||
ctx.moveTo(x1, y1);
|
||
ctx.lineTo(x2, y2);
|
||
ctx.lineTo(x3, y3);
|
||
ctx.closePath();
|
||
ctx.fill();
|
||
},
|
||
drawTitle: function(pt, vm, ctx, opacity) {
|
||
var title = vm.title;
|
||
|
||
if (title.length) {
|
||
ctx.textAlign = vm._titleAlign;
|
||
ctx.textBaseline = 'top';
|
||
|
||
var titleFontSize = vm.titleFontSize,
|
||
titleSpacing = vm.titleSpacing;
|
||
|
||
ctx.fillStyle = mergeOpacity(vm.titleFontColor, opacity);
|
||
ctx.font = helpers.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);
|
||
|
||
var i, len;
|
||
for (i = 0, len = title.length; i < len; ++i) {
|
||
ctx.fillText(title[i], pt.x, pt.y);
|
||
pt.y += titleFontSize + titleSpacing; // Line Height and spacing
|
||
|
||
if (i + 1 === title.length) {
|
||
pt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing
|
||
}
|
||
}
|
||
}
|
||
},
|
||
drawBody: function(pt, vm, ctx, opacity) {
|
||
var bodyFontSize = vm.bodyFontSize;
|
||
var bodySpacing = vm.bodySpacing;
|
||
var body = vm.body;
|
||
|
||
ctx.textAlign = vm._bodyAlign;
|
||
ctx.textBaseline = 'top';
|
||
|
||
var textColor = mergeOpacity(vm.bodyFontColor, opacity);
|
||
ctx.fillStyle = textColor;
|
||
ctx.font = helpers.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);
|
||
|
||
// Before Body
|
||
var xLinePadding = 0;
|
||
var fillLineOfText = function(line) {
|
||
ctx.fillText(line, pt.x + xLinePadding, pt.y);
|
||
pt.y += bodyFontSize + bodySpacing;
|
||
};
|
||
|
||
// Before body lines
|
||
helpers.each(vm.beforeBody, fillLineOfText);
|
||
|
||
var drawColorBoxes = vm.displayColors;
|
||
xLinePadding = drawColorBoxes ? (bodyFontSize + 2) : 0;
|
||
|
||
// Draw body lines now
|
||
helpers.each(body, function(bodyItem, i) {
|
||
helpers.each(bodyItem.before, fillLineOfText);
|
||
|
||
helpers.each(bodyItem.lines, function(line) {
|
||
// Draw Legend-like boxes if needed
|
||
if (drawColorBoxes) {
|
||
// Fill a white rect so that colours merge nicely if the opacity is < 1
|
||
ctx.fillStyle = mergeOpacity(vm.legendColorBackground, opacity);
|
||
ctx.fillRect(pt.x, pt.y, bodyFontSize, bodyFontSize);
|
||
|
||
// Border
|
||
ctx.strokeStyle = mergeOpacity(vm.labelColors[i].borderColor, opacity);
|
||
ctx.strokeRect(pt.x, pt.y, bodyFontSize, bodyFontSize);
|
||
|
||
// Inner square
|
||
ctx.fillStyle = mergeOpacity(vm.labelColors[i].backgroundColor, opacity);
|
||
ctx.fillRect(pt.x + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);
|
||
|
||
ctx.fillStyle = textColor;
|
||
}
|
||
|
||
fillLineOfText(line);
|
||
});
|
||
|
||
helpers.each(bodyItem.after, fillLineOfText);
|
||
});
|
||
|
||
// Reset back to 0 for after body
|
||
xLinePadding = 0;
|
||
|
||
// After body lines
|
||
helpers.each(vm.afterBody, fillLineOfText);
|
||
pt.y -= bodySpacing; // Remove last body spacing
|
||
},
|
||
drawFooter: function(pt, vm, ctx, opacity) {
|
||
var footer = vm.footer;
|
||
|
||
if (footer.length) {
|
||
pt.y += vm.footerMarginTop;
|
||
|
||
ctx.textAlign = vm._footerAlign;
|
||
ctx.textBaseline = 'top';
|
||
|
||
ctx.fillStyle = mergeOpacity(vm.footerFontColor, opacity);
|
||
ctx.font = helpers.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);
|
||
|
||
helpers.each(footer, function(line) {
|
||
ctx.fillText(line, pt.x, pt.y);
|
||
pt.y += vm.footerFontSize + vm.footerSpacing;
|
||
});
|
||
}
|
||
},
|
||
drawBackground: function(pt, vm, ctx, tooltipSize, opacity) {
|
||
ctx.fillStyle = mergeOpacity(vm.backgroundColor, opacity);
|
||
helpers.drawRoundedRectangle(ctx, pt.x, pt.y, tooltipSize.width, tooltipSize.height, vm.cornerRadius);
|
||
ctx.fill();
|
||
},
|
||
draw: function() {
|
||
var ctx = this._chart.ctx;
|
||
var vm = this._view;
|
||
|
||
if (vm.opacity === 0) {
|
||
return;
|
||
}
|
||
|
||
var tooltipSize = {
|
||
width: vm.width,
|
||
height: vm.height
|
||
};
|
||
var pt = {
|
||
x: vm.x,
|
||
y: vm.y
|
||
};
|
||
|
||
// IE11/Edge does not like very small opacities, so snap to 0
|
||
var opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;
|
||
|
||
if (this._options.enabled) {
|
||
// Draw Background
|
||
this.drawBackground(pt, vm, ctx, tooltipSize, opacity);
|
||
|
||
// Draw Caret
|
||
this.drawCaret(pt, tooltipSize, opacity);
|
||
|
||
// Draw Title, Body, and Footer
|
||
pt.x += vm.xPadding;
|
||
pt.y += vm.yPadding;
|
||
|
||
// Titles
|
||
this.drawTitle(pt, vm, ctx, opacity);
|
||
|
||
// Body
|
||
this.drawBody(pt, vm, ctx, opacity);
|
||
|
||
// Footer
|
||
this.drawFooter(pt, vm, ctx, opacity);
|
||
}
|
||
},
|
||
|
||
/**
|
||
* Handle an event
|
||
* @private
|
||
* @param {IEvent} event - The event to handle
|
||
* @returns {Boolean} true if the tooltip changed
|
||
*/
|
||
handleEvent: function(e) {
|
||
var me = this;
|
||
var options = me._options;
|
||
var changed = false;
|
||
|
||
me._lastActive = me._lastActive || [];
|
||
|
||
// Find Active Elements for tooltips
|
||
if (e.type === 'mouseout') {
|
||
me._active = [];
|
||
} else {
|
||
me._active = me._chartInstance.getElementsAtEventForMode(e, options.mode, options);
|
||
}
|
||
|
||
// Remember Last Actives
|
||
changed = !helpers.arrayEquals(me._active, me._lastActive);
|
||
me._lastActive = me._active;
|
||
|
||
if (options.enabled || options.custom) {
|
||
me._eventPosition = {
|
||
x: e.x,
|
||
y: e.y
|
||
};
|
||
|
||
var model = me._model;
|
||
me.update(true);
|
||
me.pivot();
|
||
|
||
// See if our tooltip position changed
|
||
changed |= (model.x !== me._model.x) || (model.y !== me._model.y);
|
||
}
|
||
|
||
return changed;
|
||
}
|
||
});
|
||
|
||
/**
|
||
* @namespace Chart.Tooltip.positioners
|
||
*/
|
||
Chart.Tooltip.positioners = {
|
||
/**
|
||
* Average mode places the tooltip at the average position of the elements shown
|
||
* @function Chart.Tooltip.positioners.average
|
||
* @param elements {ChartElement[]} the elements being displayed in the tooltip
|
||
* @returns {Point} tooltip position
|
||
*/
|
||
average: function(elements) {
|
||
if (!elements.length) {
|
||
return false;
|
||
}
|
||
|
||
var i, len;
|
||
var x = 0;
|
||
var y = 0;
|
||
var count = 0;
|
||
|
||
for (i = 0, len = elements.length; i < len; ++i) {
|
||
var el = elements[i];
|
||
if (el && el.hasValue()) {
|
||
var pos = el.tooltipPosition();
|
||
x += pos.x;
|
||
y += pos.y;
|
||
++count;
|
||
}
|
||
}
|
||
|
||
return {
|
||
x: Math.round(x / count),
|
||
y: Math.round(y / count)
|
||
};
|
||
},
|
||
|
||
/**
|
||
* Gets the tooltip position nearest of the item nearest to the event position
|
||
* @function Chart.Tooltip.positioners.nearest
|
||
* @param elements {Chart.Element[]} the tooltip elements
|
||
* @param eventPosition {Point} the position of the event in canvas coordinates
|
||
* @returns {Point} the tooltip position
|
||
*/
|
||
nearest: function(elements, eventPosition) {
|
||
var x = eventPosition.x;
|
||
var y = eventPosition.y;
|
||
|
||
var nearestElement;
|
||
var minDistance = Number.POSITIVE_INFINITY;
|
||
var i, len;
|
||
for (i = 0, len = elements.length; i < len; ++i) {
|
||
var el = elements[i];
|
||
if (el && el.hasValue()) {
|
||
var center = el.getCenterPoint();
|
||
var d = helpers.distanceBetweenPoints(eventPosition, center);
|
||
|
||
if (d < minDistance) {
|
||
minDistance = d;
|
||
nearestElement = el;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (nearestElement) {
|
||
var tp = nearestElement.tooltipPosition();
|
||
x = tp.x;
|
||
y = tp.y;
|
||
}
|
||
|
||
return {
|
||
x: x,
|
||
y: y
|
||
};
|
||
}
|
||
};
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 28 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers,
|
||
globalOpts = Chart.defaults.global;
|
||
|
||
globalOpts.elements.arc = {
|
||
backgroundColor: globalOpts.defaultColor,
|
||
borderColor: '#fff',
|
||
borderWidth: 2
|
||
};
|
||
|
||
Chart.elements.Arc = Chart.Element.extend({
|
||
inLabelRange: function(mouseX) {
|
||
var vm = this._view;
|
||
|
||
if (vm) {
|
||
return (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));
|
||
}
|
||
return false;
|
||
},
|
||
inRange: function(chartX, chartY) {
|
||
var vm = this._view;
|
||
|
||
if (vm) {
|
||
var pointRelativePosition = helpers.getAngleFromPoint(vm, {
|
||
x: chartX,
|
||
y: chartY
|
||
}),
|
||
angle = pointRelativePosition.angle,
|
||
distance = pointRelativePosition.distance;
|
||
|
||
// Sanitise angle range
|
||
var startAngle = vm.startAngle;
|
||
var endAngle = vm.endAngle;
|
||
while (endAngle < startAngle) {
|
||
endAngle += 2.0 * Math.PI;
|
||
}
|
||
while (angle > endAngle) {
|
||
angle -= 2.0 * Math.PI;
|
||
}
|
||
while (angle < startAngle) {
|
||
angle += 2.0 * Math.PI;
|
||
}
|
||
|
||
// Check if within the range of the open/close angle
|
||
var betweenAngles = (angle >= startAngle && angle <= endAngle),
|
||
withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);
|
||
|
||
return (betweenAngles && withinRadius);
|
||
}
|
||
return false;
|
||
},
|
||
getCenterPoint: function() {
|
||
var vm = this._view;
|
||
var halfAngle = (vm.startAngle + vm.endAngle) / 2;
|
||
var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;
|
||
return {
|
||
x: vm.x + Math.cos(halfAngle) * halfRadius,
|
||
y: vm.y + Math.sin(halfAngle) * halfRadius
|
||
};
|
||
},
|
||
getArea: function() {
|
||
var vm = this._view;
|
||
return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));
|
||
},
|
||
tooltipPosition: function() {
|
||
var vm = this._view;
|
||
|
||
var centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2),
|
||
rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;
|
||
return {
|
||
x: vm.x + (Math.cos(centreAngle) * rangeFromCentre),
|
||
y: vm.y + (Math.sin(centreAngle) * rangeFromCentre)
|
||
};
|
||
},
|
||
draw: function() {
|
||
|
||
var ctx = this._chart.ctx,
|
||
vm = this._view,
|
||
sA = vm.startAngle,
|
||
eA = vm.endAngle;
|
||
|
||
ctx.beginPath();
|
||
|
||
ctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);
|
||
ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);
|
||
|
||
ctx.closePath();
|
||
ctx.strokeStyle = vm.borderColor;
|
||
ctx.lineWidth = vm.borderWidth;
|
||
|
||
ctx.fillStyle = vm.backgroundColor;
|
||
|
||
ctx.fill();
|
||
ctx.lineJoin = 'bevel';
|
||
|
||
if (vm.borderWidth) {
|
||
ctx.stroke();
|
||
}
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 29 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
var globalDefaults = Chart.defaults.global;
|
||
|
||
Chart.defaults.global.elements.line = {
|
||
tension: 0.4,
|
||
backgroundColor: globalDefaults.defaultColor,
|
||
borderWidth: 3,
|
||
borderColor: globalDefaults.defaultColor,
|
||
borderCapStyle: 'butt',
|
||
borderDash: [],
|
||
borderDashOffset: 0.0,
|
||
borderJoinStyle: 'miter',
|
||
capBezierPoints: true,
|
||
fill: true, // do we fill in the area between the line and its base axis
|
||
};
|
||
|
||
Chart.elements.Line = Chart.Element.extend({
|
||
draw: function() {
|
||
var me = this;
|
||
var vm = me._view;
|
||
var spanGaps = vm.spanGaps;
|
||
var fillPoint = vm.scaleZero;
|
||
var loop = me._loop;
|
||
|
||
// Handle different fill modes for cartesian lines
|
||
if (!loop) {
|
||
if (vm.fill === 'top') {
|
||
fillPoint = vm.scaleTop;
|
||
} else if (vm.fill === 'bottom') {
|
||
fillPoint = vm.scaleBottom;
|
||
}
|
||
}
|
||
|
||
var ctx = me._chart.ctx;
|
||
ctx.save();
|
||
|
||
// Helper function to draw a line to a point
|
||
function lineToPoint(previousPoint, point) {
|
||
var pointVM = point._view;
|
||
if (point._view.steppedLine === true) {
|
||
ctx.lineTo(pointVM.x, previousPoint._view.y);
|
||
ctx.lineTo(pointVM.x, pointVM.y);
|
||
} else if (point._view.tension === 0) {
|
||
ctx.lineTo(pointVM.x, pointVM.y);
|
||
} else {
|
||
ctx.bezierCurveTo(
|
||
previousPoint._view.controlPointNextX,
|
||
previousPoint._view.controlPointNextY,
|
||
pointVM.controlPointPreviousX,
|
||
pointVM.controlPointPreviousY,
|
||
pointVM.x,
|
||
pointVM.y
|
||
);
|
||
}
|
||
}
|
||
|
||
var points = me._children.slice(); // clone array
|
||
var lastDrawnIndex = -1;
|
||
|
||
// If we are looping, adding the first point again
|
||
if (loop && points.length) {
|
||
points.push(points[0]);
|
||
}
|
||
|
||
var index, current, previous, currentVM;
|
||
|
||
// Fill Line
|
||
if (points.length && vm.fill) {
|
||
ctx.beginPath();
|
||
|
||
for (index = 0; index < points.length; ++index) {
|
||
current = points[index];
|
||
previous = helpers.previousItem(points, index);
|
||
currentVM = current._view;
|
||
|
||
// First point moves to it's starting position no matter what
|
||
if (index === 0) {
|
||
if (loop) {
|
||
ctx.moveTo(fillPoint.x, fillPoint.y);
|
||
} else {
|
||
ctx.moveTo(currentVM.x, fillPoint);
|
||
}
|
||
|
||
if (!currentVM.skip) {
|
||
lastDrawnIndex = index;
|
||
ctx.lineTo(currentVM.x, currentVM.y);
|
||
}
|
||
} else {
|
||
previous = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];
|
||
|
||
if (currentVM.skip) {
|
||
// Only do this if this is the first point that is skipped
|
||
if (!spanGaps && lastDrawnIndex === (index - 1)) {
|
||
if (loop) {
|
||
ctx.lineTo(fillPoint.x, fillPoint.y);
|
||
} else {
|
||
ctx.lineTo(previous._view.x, fillPoint);
|
||
}
|
||
}
|
||
} else {
|
||
if (lastDrawnIndex !== (index - 1)) {
|
||
// There was a gap and this is the first point after the gap. If we've never drawn a point, this is a special case.
|
||
// If the first data point is NaN, then there is no real gap to skip
|
||
if (spanGaps && lastDrawnIndex !== -1) {
|
||
// We are spanning the gap, so simple draw a line to this point
|
||
lineToPoint(previous, current);
|
||
} else if (loop) {
|
||
ctx.lineTo(currentVM.x, currentVM.y);
|
||
} else {
|
||
ctx.lineTo(currentVM.x, fillPoint);
|
||
ctx.lineTo(currentVM.x, currentVM.y);
|
||
}
|
||
} else {
|
||
// Line to next point
|
||
lineToPoint(previous, current);
|
||
}
|
||
lastDrawnIndex = index;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (!loop && lastDrawnIndex !== -1) {
|
||
ctx.lineTo(points[lastDrawnIndex]._view.x, fillPoint);
|
||
}
|
||
|
||
ctx.fillStyle = vm.backgroundColor || globalDefaults.defaultColor;
|
||
ctx.closePath();
|
||
ctx.fill();
|
||
}
|
||
|
||
// Stroke Line Options
|
||
var globalOptionLineElements = globalDefaults.elements.line;
|
||
ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;
|
||
|
||
// IE 9 and 10 do not support line dash
|
||
if (ctx.setLineDash) {
|
||
ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);
|
||
}
|
||
|
||
ctx.lineDashOffset = vm.borderDashOffset || globalOptionLineElements.borderDashOffset;
|
||
ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;
|
||
ctx.lineWidth = vm.borderWidth || globalOptionLineElements.borderWidth;
|
||
ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;
|
||
|
||
// Stroke Line
|
||
ctx.beginPath();
|
||
lastDrawnIndex = -1;
|
||
|
||
for (index = 0; index < points.length; ++index) {
|
||
current = points[index];
|
||
previous = helpers.previousItem(points, index);
|
||
currentVM = current._view;
|
||
|
||
// First point moves to it's starting position no matter what
|
||
if (index === 0) {
|
||
if (!currentVM.skip) {
|
||
ctx.moveTo(currentVM.x, currentVM.y);
|
||
lastDrawnIndex = index;
|
||
}
|
||
} else {
|
||
previous = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];
|
||
|
||
if (!currentVM.skip) {
|
||
if ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {
|
||
// There was a gap and this is the first point after the gap
|
||
ctx.moveTo(currentVM.x, currentVM.y);
|
||
} else {
|
||
// Line to next point
|
||
lineToPoint(previous, current);
|
||
}
|
||
lastDrawnIndex = index;
|
||
}
|
||
}
|
||
}
|
||
|
||
ctx.stroke();
|
||
ctx.restore();
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 30 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers,
|
||
globalOpts = Chart.defaults.global,
|
||
defaultColor = globalOpts.defaultColor;
|
||
|
||
globalOpts.elements.point = {
|
||
radius: 3,
|
||
pointStyle: 'circle',
|
||
backgroundColor: defaultColor,
|
||
borderWidth: 1,
|
||
borderColor: defaultColor,
|
||
// Hover
|
||
hitRadius: 1,
|
||
hoverRadius: 4,
|
||
hoverBorderWidth: 1
|
||
};
|
||
|
||
function xRange(mouseX) {
|
||
var vm = this._view;
|
||
return vm ? (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hitRadius, 2)) : false;
|
||
}
|
||
|
||
function yRange(mouseY) {
|
||
var vm = this._view;
|
||
return vm ? (Math.pow(mouseY - vm.y, 2) < Math.pow(vm.radius + vm.hitRadius, 2)) : false;
|
||
}
|
||
|
||
Chart.elements.Point = Chart.Element.extend({
|
||
inRange: function(mouseX, mouseY) {
|
||
var vm = this._view;
|
||
return vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;
|
||
},
|
||
|
||
inLabelRange: xRange,
|
||
inXRange: xRange,
|
||
inYRange: yRange,
|
||
|
||
getCenterPoint: function() {
|
||
var vm = this._view;
|
||
return {
|
||
x: vm.x,
|
||
y: vm.y
|
||
};
|
||
},
|
||
getArea: function() {
|
||
return Math.PI * Math.pow(this._view.radius, 2);
|
||
},
|
||
tooltipPosition: function() {
|
||
var vm = this._view;
|
||
return {
|
||
x: vm.x,
|
||
y: vm.y,
|
||
padding: vm.radius + vm.borderWidth
|
||
};
|
||
},
|
||
draw: function(chartArea) {
|
||
var vm = this._view;
|
||
var model = this._model;
|
||
var ctx = this._chart.ctx;
|
||
var pointStyle = vm.pointStyle;
|
||
var radius = vm.radius;
|
||
var x = vm.x;
|
||
var y = vm.y;
|
||
var color = Chart.helpers.color;
|
||
var errMargin = 1.01; // 1.01 is margin for Accumulated error. (Especially Edge, IE.)
|
||
var ratio = 0;
|
||
|
||
if (vm.skip) {
|
||
return;
|
||
}
|
||
|
||
ctx.strokeStyle = vm.borderColor || defaultColor;
|
||
ctx.lineWidth = helpers.getValueOrDefault(vm.borderWidth, globalOpts.elements.point.borderWidth);
|
||
ctx.fillStyle = vm.backgroundColor || defaultColor;
|
||
|
||
// Cliping for Points.
|
||
// going out from inner charArea?
|
||
if ((chartArea !== undefined) && ((model.x < chartArea.left) || (chartArea.right*errMargin < model.x) || (model.y < chartArea.top) || (chartArea.bottom*errMargin < model.y))) {
|
||
// Point fade out
|
||
if (model.x < chartArea.left) {
|
||
ratio = (x - model.x) / (chartArea.left - model.x);
|
||
} else if (chartArea.right*errMargin < model.x) {
|
||
ratio = (model.x - x) / (model.x - chartArea.right);
|
||
} else if (model.y < chartArea.top) {
|
||
ratio = (y - model.y) / (chartArea.top - model.y);
|
||
} else if (chartArea.bottom*errMargin < model.y) {
|
||
ratio = (model.y - y) / (model.y - chartArea.bottom);
|
||
}
|
||
ratio = Math.round(ratio*100) / 100;
|
||
ctx.strokeStyle = color(ctx.strokeStyle).alpha(ratio).rgbString();
|
||
ctx.fillStyle = color(ctx.fillStyle).alpha(ratio).rgbString();
|
||
}
|
||
|
||
Chart.canvasHelpers.drawPoint(ctx, pointStyle, radius, x, y);
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 31 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var globalOpts = Chart.defaults.global;
|
||
|
||
globalOpts.elements.rectangle = {
|
||
backgroundColor: globalOpts.defaultColor,
|
||
borderWidth: 0,
|
||
borderColor: globalOpts.defaultColor,
|
||
borderSkipped: 'bottom'
|
||
};
|
||
|
||
function isVertical(bar) {
|
||
return bar._view.width !== undefined;
|
||
}
|
||
|
||
/**
|
||
* Helper function to get the bounds of the bar regardless of the orientation
|
||
* @private
|
||
* @param bar {Chart.Element.Rectangle} the bar
|
||
* @return {Bounds} bounds of the bar
|
||
*/
|
||
function getBarBounds(bar) {
|
||
var vm = bar._view;
|
||
var x1, x2, y1, y2;
|
||
|
||
if (isVertical(bar)) {
|
||
// vertical
|
||
var halfWidth = vm.width / 2;
|
||
x1 = vm.x - halfWidth;
|
||
x2 = vm.x + halfWidth;
|
||
y1 = Math.min(vm.y, vm.base);
|
||
y2 = Math.max(vm.y, vm.base);
|
||
} else {
|
||
// horizontal bar
|
||
var halfHeight = vm.height / 2;
|
||
x1 = Math.min(vm.x, vm.base);
|
||
x2 = Math.max(vm.x, vm.base);
|
||
y1 = vm.y - halfHeight;
|
||
y2 = vm.y + halfHeight;
|
||
}
|
||
|
||
return {
|
||
left: x1,
|
||
top: y1,
|
||
right: x2,
|
||
bottom: y2
|
||
};
|
||
}
|
||
|
||
Chart.elements.Rectangle = Chart.Element.extend({
|
||
draw: function() {
|
||
var ctx = this._chart.ctx;
|
||
var vm = this._view;
|
||
var left, right, top, bottom, signX, signY, borderSkipped;
|
||
var borderWidth = vm.borderWidth;
|
||
|
||
if (!vm.horizontal) {
|
||
// bar
|
||
left = vm.x - vm.width / 2;
|
||
right = vm.x + vm.width / 2;
|
||
top = vm.y;
|
||
bottom = vm.base;
|
||
signX = 1;
|
||
signY = bottom > top? 1: -1;
|
||
borderSkipped = vm.borderSkipped || 'bottom';
|
||
} else {
|
||
// horizontal bar
|
||
left = vm.base;
|
||
right = vm.x;
|
||
top = vm.y - vm.height / 2;
|
||
bottom = vm.y + vm.height / 2;
|
||
signX = right > left? 1: -1;
|
||
signY = 1;
|
||
borderSkipped = vm.borderSkipped || 'left';
|
||
}
|
||
|
||
// Canvas doesn't allow us to stroke inside the width so we can
|
||
// adjust the sizes to fit if we're setting a stroke on the line
|
||
if (borderWidth) {
|
||
// borderWidth shold be less than bar width and bar height.
|
||
var barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom));
|
||
borderWidth = borderWidth > barSize? barSize: borderWidth;
|
||
var halfStroke = borderWidth / 2;
|
||
// Adjust borderWidth when bar top position is near vm.base(zero).
|
||
var borderLeft = left + (borderSkipped !== 'left'? halfStroke * signX: 0);
|
||
var borderRight = right + (borderSkipped !== 'right'? -halfStroke * signX: 0);
|
||
var borderTop = top + (borderSkipped !== 'top'? halfStroke * signY: 0);
|
||
var borderBottom = bottom + (borderSkipped !== 'bottom'? -halfStroke * signY: 0);
|
||
// not become a vertical line?
|
||
if (borderLeft !== borderRight) {
|
||
top = borderTop;
|
||
bottom = borderBottom;
|
||
}
|
||
// not become a horizontal line?
|
||
if (borderTop !== borderBottom) {
|
||
left = borderLeft;
|
||
right = borderRight;
|
||
}
|
||
}
|
||
|
||
ctx.beginPath();
|
||
ctx.fillStyle = vm.backgroundColor;
|
||
ctx.strokeStyle = vm.borderColor;
|
||
ctx.lineWidth = borderWidth;
|
||
|
||
// Corner points, from bottom-left to bottom-right clockwise
|
||
// | 1 2 |
|
||
// | 0 3 |
|
||
var corners = [
|
||
[left, bottom],
|
||
[left, top],
|
||
[right, top],
|
||
[right, bottom]
|
||
];
|
||
|
||
// Find first (starting) corner with fallback to 'bottom'
|
||
var borders = ['bottom', 'left', 'top', 'right'];
|
||
var startCorner = borders.indexOf(borderSkipped, 0);
|
||
if (startCorner === -1) {
|
||
startCorner = 0;
|
||
}
|
||
|
||
function cornerAt(index) {
|
||
return corners[(startCorner + index) % 4];
|
||
}
|
||
|
||
// Draw rectangle from 'startCorner'
|
||
var corner = cornerAt(0);
|
||
ctx.moveTo(corner[0], corner[1]);
|
||
|
||
for (var i = 1; i < 4; i++) {
|
||
corner = cornerAt(i);
|
||
ctx.lineTo(corner[0], corner[1]);
|
||
}
|
||
|
||
ctx.fill();
|
||
if (borderWidth) {
|
||
ctx.stroke();
|
||
}
|
||
},
|
||
height: function() {
|
||
var vm = this._view;
|
||
return vm.base - vm.y;
|
||
},
|
||
inRange: function(mouseX, mouseY) {
|
||
var inRange = false;
|
||
|
||
if (this._view) {
|
||
var bounds = getBarBounds(this);
|
||
inRange = mouseX >= bounds.left && mouseX <= bounds.right && mouseY >= bounds.top && mouseY <= bounds.bottom;
|
||
}
|
||
|
||
return inRange;
|
||
},
|
||
inLabelRange: function(mouseX, mouseY) {
|
||
var me = this;
|
||
if (!me._view) {
|
||
return false;
|
||
}
|
||
|
||
var inRange = false;
|
||
var bounds = getBarBounds(me);
|
||
|
||
if (isVertical(me)) {
|
||
inRange = mouseX >= bounds.left && mouseX <= bounds.right;
|
||
} else {
|
||
inRange = mouseY >= bounds.top && mouseY <= bounds.bottom;
|
||
}
|
||
|
||
return inRange;
|
||
},
|
||
inXRange: function(mouseX) {
|
||
var bounds = getBarBounds(this);
|
||
return mouseX >= bounds.left && mouseX <= bounds.right;
|
||
},
|
||
inYRange: function(mouseY) {
|
||
var bounds = getBarBounds(this);
|
||
return mouseY >= bounds.top && mouseY <= bounds.bottom;
|
||
},
|
||
getCenterPoint: function() {
|
||
var vm = this._view;
|
||
var x, y;
|
||
if (isVertical(this)) {
|
||
x = vm.x;
|
||
y = (vm.y + vm.base) / 2;
|
||
} else {
|
||
x = (vm.x + vm.base) / 2;
|
||
y = vm.y;
|
||
}
|
||
|
||
return {x: x, y: y};
|
||
},
|
||
getArea: function() {
|
||
var vm = this._view;
|
||
return vm.width * Math.abs(vm.y - vm.base);
|
||
},
|
||
tooltipPosition: function() {
|
||
var vm = this._view;
|
||
return {
|
||
x: vm.x,
|
||
y: vm.y
|
||
};
|
||
}
|
||
});
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 32 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers,
|
||
noop = helpers.noop;
|
||
|
||
Chart.LinearScaleBase = Chart.Scale.extend({
|
||
handleTickRangeOptions: function() {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var tickOpts = opts.ticks;
|
||
|
||
// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,
|
||
// do nothing since that would make the chart weird. If the user really wants a weird chart
|
||
// axis, they can manually override it
|
||
if (tickOpts.beginAtZero) {
|
||
var minSign = helpers.sign(me.min);
|
||
var maxSign = helpers.sign(me.max);
|
||
|
||
if (minSign < 0 && maxSign < 0) {
|
||
// move the top up to 0
|
||
me.max = 0;
|
||
} else if (minSign > 0 && maxSign > 0) {
|
||
// move the bottom down to 0
|
||
me.min = 0;
|
||
}
|
||
}
|
||
|
||
if (tickOpts.min !== undefined) {
|
||
me.min = tickOpts.min;
|
||
} else if (tickOpts.suggestedMin !== undefined) {
|
||
me.min = Math.min(me.min, tickOpts.suggestedMin);
|
||
}
|
||
|
||
if (tickOpts.max !== undefined) {
|
||
me.max = tickOpts.max;
|
||
} else if (tickOpts.suggestedMax !== undefined) {
|
||
me.max = Math.max(me.max, tickOpts.suggestedMax);
|
||
}
|
||
|
||
if (me.min === me.max) {
|
||
me.max++;
|
||
|
||
if (!tickOpts.beginAtZero) {
|
||
me.min--;
|
||
}
|
||
}
|
||
},
|
||
getTickLimit: noop,
|
||
handleDirectionalChanges: noop,
|
||
|
||
buildTicks: function() {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var tickOpts = opts.ticks;
|
||
|
||
// Figure out what the max number of ticks we can support it is based on the size of
|
||
// the axis area. For now, we say that the minimum tick spacing in pixels must be 50
|
||
// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on
|
||
// the graph. Make sure we always have at least 2 ticks
|
||
var maxTicks = me.getTickLimit();
|
||
maxTicks = Math.max(2, maxTicks);
|
||
|
||
var numericGeneratorOptions = {
|
||
maxTicks: maxTicks,
|
||
min: tickOpts.min,
|
||
max: tickOpts.max,
|
||
stepSize: helpers.getValueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)
|
||
};
|
||
var ticks = me.ticks = Chart.Ticks.generators.linear(numericGeneratorOptions, me);
|
||
|
||
me.handleDirectionalChanges();
|
||
|
||
// At this point, we need to update our max and min given the tick values since we have expanded the
|
||
// range of the scale
|
||
me.max = helpers.max(ticks);
|
||
me.min = helpers.min(ticks);
|
||
|
||
if (tickOpts.reverse) {
|
||
ticks.reverse();
|
||
|
||
me.start = me.max;
|
||
me.end = me.min;
|
||
} else {
|
||
me.start = me.min;
|
||
me.end = me.max;
|
||
}
|
||
},
|
||
convertTicksToLabels: function() {
|
||
var me = this;
|
||
me.ticksAsNumbers = me.ticks.slice();
|
||
me.zeroLineIndex = me.ticks.indexOf(0);
|
||
|
||
Chart.Scale.prototype.convertTicksToLabels.call(me);
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 33 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
// Default config for a category scale
|
||
var defaultConfig = {
|
||
position: 'bottom'
|
||
};
|
||
|
||
var DatasetScale = Chart.Scale.extend({
|
||
/**
|
||
* Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those
|
||
* else fall back to data.labels
|
||
* @private
|
||
*/
|
||
getLabels: function() {
|
||
var data = this.chart.data;
|
||
return (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;
|
||
},
|
||
// Implement this so that
|
||
determineDataLimits: function() {
|
||
var me = this;
|
||
var labels = me.getLabels();
|
||
me.minIndex = 0;
|
||
me.maxIndex = labels.length - 1;
|
||
var findIndex;
|
||
|
||
if (me.options.ticks.min !== undefined) {
|
||
// user specified min value
|
||
findIndex = helpers.indexOf(labels, me.options.ticks.min);
|
||
me.minIndex = findIndex !== -1 ? findIndex : me.minIndex;
|
||
}
|
||
|
||
if (me.options.ticks.max !== undefined) {
|
||
// user specified max value
|
||
findIndex = helpers.indexOf(labels, me.options.ticks.max);
|
||
me.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;
|
||
}
|
||
|
||
me.min = labels[me.minIndex];
|
||
me.max = labels[me.maxIndex];
|
||
},
|
||
|
||
buildTicks: function() {
|
||
var me = this;
|
||
var labels = me.getLabels();
|
||
// If we are viewing some subset of labels, slice the original array
|
||
me.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);
|
||
},
|
||
|
||
getLabelForIndex: function(index, datasetIndex) {
|
||
var me = this;
|
||
var data = me.chart.data;
|
||
var isHorizontal = me.isHorizontal();
|
||
|
||
if (data.yLabels && !isHorizontal) {
|
||
return me.getRightValue(data.datasets[datasetIndex].data[index]);
|
||
}
|
||
return me.ticks[index - me.minIndex];
|
||
},
|
||
|
||
// Used to get data value locations. Value can either be an index or a numerical value
|
||
getPixelForValue: function(value, index, datasetIndex, includeOffset) {
|
||
var me = this;
|
||
// 1 is added because we need the length but we have the indexes
|
||
var offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
|
||
|
||
if (value !== undefined && isNaN(index)) {
|
||
var labels = me.getLabels();
|
||
var idx = labels.indexOf(value);
|
||
index = idx !== -1 ? idx : index;
|
||
}
|
||
|
||
if (me.isHorizontal()) {
|
||
var valueWidth = me.width / offsetAmt;
|
||
var widthOffset = (valueWidth * (index - me.minIndex));
|
||
|
||
if (me.options.gridLines.offsetGridLines && includeOffset || me.maxIndex === me.minIndex && includeOffset) {
|
||
widthOffset += (valueWidth / 2);
|
||
}
|
||
|
||
return me.left + Math.round(widthOffset);
|
||
}
|
||
var valueHeight = me.height / offsetAmt;
|
||
var heightOffset = (valueHeight * (index - me.minIndex));
|
||
|
||
if (me.options.gridLines.offsetGridLines && includeOffset) {
|
||
heightOffset += (valueHeight / 2);
|
||
}
|
||
|
||
return me.top + Math.round(heightOffset);
|
||
},
|
||
getPixelForTick: function(index, includeOffset) {
|
||
return this.getPixelForValue(this.ticks[index], index + this.minIndex, null, includeOffset);
|
||
},
|
||
getValueForPixel: function(pixel) {
|
||
var me = this;
|
||
var value;
|
||
var offsetAmt = Math.max((me.ticks.length - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
|
||
var horz = me.isHorizontal();
|
||
var valueDimension = (horz ? me.width : me.height) / offsetAmt;
|
||
|
||
pixel -= horz ? me.left : me.top;
|
||
|
||
if (me.options.gridLines.offsetGridLines) {
|
||
pixel -= (valueDimension / 2);
|
||
}
|
||
|
||
if (pixel <= 0) {
|
||
value = 0;
|
||
} else {
|
||
value = Math.round(pixel / valueDimension);
|
||
}
|
||
|
||
return value;
|
||
},
|
||
getBasePixel: function() {
|
||
return this.bottom;
|
||
}
|
||
});
|
||
|
||
Chart.scaleService.registerScaleType('category', DatasetScale, defaultConfig);
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 34 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
var defaultConfig = {
|
||
position: 'left',
|
||
ticks: {
|
||
callback: Chart.Ticks.formatters.linear
|
||
}
|
||
};
|
||
|
||
var LinearScale = Chart.LinearScaleBase.extend({
|
||
determineDataLimits: function() {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var chart = me.chart;
|
||
var data = chart.data;
|
||
var datasets = data.datasets;
|
||
var isHorizontal = me.isHorizontal();
|
||
|
||
function IDMatches(meta) {
|
||
return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;
|
||
}
|
||
|
||
// First Calculate the range
|
||
me.min = null;
|
||
me.max = null;
|
||
|
||
var hasStacks = opts.stacked;
|
||
if (hasStacks === undefined) {
|
||
helpers.each(datasets, function(dataset, datasetIndex) {
|
||
if (hasStacks) {
|
||
return;
|
||
}
|
||
|
||
var meta = chart.getDatasetMeta(datasetIndex);
|
||
if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&
|
||
meta.stack !== undefined) {
|
||
hasStacks = true;
|
||
}
|
||
});
|
||
}
|
||
|
||
if (opts.stacked || hasStacks) {
|
||
var valuesPerStack = {};
|
||
|
||
helpers.each(datasets, function(dataset, datasetIndex) {
|
||
var meta = chart.getDatasetMeta(datasetIndex);
|
||
var key = [
|
||
meta.type,
|
||
// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined
|
||
((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),
|
||
meta.stack
|
||
].join('.');
|
||
|
||
if (valuesPerStack[key] === undefined) {
|
||
valuesPerStack[key] = {
|
||
positiveValues: [],
|
||
negativeValues: []
|
||
};
|
||
}
|
||
|
||
// Store these per type
|
||
var positiveValues = valuesPerStack[key].positiveValues;
|
||
var negativeValues = valuesPerStack[key].negativeValues;
|
||
|
||
if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
|
||
helpers.each(dataset.data, function(rawValue, index) {
|
||
var value = +me.getRightValue(rawValue);
|
||
if (isNaN(value) || meta.data[index].hidden) {
|
||
return;
|
||
}
|
||
|
||
positiveValues[index] = positiveValues[index] || 0;
|
||
negativeValues[index] = negativeValues[index] || 0;
|
||
|
||
if (opts.relativePoints) {
|
||
positiveValues[index] = 100;
|
||
} else if (value < 0) {
|
||
negativeValues[index] += value;
|
||
} else {
|
||
positiveValues[index] += value;
|
||
}
|
||
});
|
||
}
|
||
});
|
||
|
||
helpers.each(valuesPerStack, function(valuesForType) {
|
||
var values = valuesForType.positiveValues.concat(valuesForType.negativeValues);
|
||
var minVal = helpers.min(values);
|
||
var maxVal = helpers.max(values);
|
||
me.min = me.min === null ? minVal : Math.min(me.min, minVal);
|
||
me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);
|
||
});
|
||
|
||
} else {
|
||
helpers.each(datasets, function(dataset, datasetIndex) {
|
||
var meta = chart.getDatasetMeta(datasetIndex);
|
||
if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
|
||
helpers.each(dataset.data, function(rawValue, index) {
|
||
var value = +me.getRightValue(rawValue);
|
||
if (isNaN(value) || meta.data[index].hidden) {
|
||
return;
|
||
}
|
||
|
||
if (me.min === null) {
|
||
me.min = value;
|
||
} else if (value < me.min) {
|
||
me.min = value;
|
||
}
|
||
|
||
if (me.max === null) {
|
||
me.max = value;
|
||
} else if (value > me.max) {
|
||
me.max = value;
|
||
}
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero
|
||
this.handleTickRangeOptions();
|
||
},
|
||
getTickLimit: function() {
|
||
var maxTicks;
|
||
var me = this;
|
||
var tickOpts = me.options.ticks;
|
||
|
||
if (me.isHorizontal()) {
|
||
maxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.width / 50));
|
||
} else {
|
||
// The factor of 2 used to scale the font size has been experimentally determined.
|
||
var tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, Chart.defaults.global.defaultFontSize);
|
||
maxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.height / (2 * tickFontSize)));
|
||
}
|
||
|
||
return maxTicks;
|
||
},
|
||
// Called after the ticks are built. We need
|
||
handleDirectionalChanges: function() {
|
||
if (!this.isHorizontal()) {
|
||
// We are in a vertical orientation. The top value is the highest. So reverse the array
|
||
this.ticks.reverse();
|
||
}
|
||
},
|
||
getLabelForIndex: function(index, datasetIndex) {
|
||
return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
|
||
},
|
||
// Utils
|
||
getPixelForValue: function(value) {
|
||
// This must be called after fit has been run so that
|
||
// this.left, this.top, this.right, and this.bottom have been defined
|
||
var me = this;
|
||
var start = me.start;
|
||
|
||
var rightValue = +me.getRightValue(value);
|
||
var pixel;
|
||
var range = me.end - start;
|
||
|
||
if (me.isHorizontal()) {
|
||
pixel = me.left + (me.width / range * (rightValue - start));
|
||
return Math.round(pixel);
|
||
}
|
||
|
||
pixel = me.bottom - (me.height / range * (rightValue - start));
|
||
return Math.round(pixel);
|
||
},
|
||
getValueForPixel: function(pixel) {
|
||
var me = this;
|
||
var isHorizontal = me.isHorizontal();
|
||
var innerDimension = isHorizontal ? me.width : me.height;
|
||
var offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;
|
||
return me.start + ((me.end - me.start) * offset);
|
||
},
|
||
getPixelForTick: function(index) {
|
||
return this.getPixelForValue(this.ticksAsNumbers[index]);
|
||
}
|
||
});
|
||
Chart.scaleService.registerScaleType('linear', LinearScale, defaultConfig);
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 35 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
var defaultConfig = {
|
||
position: 'left',
|
||
|
||
// label settings
|
||
ticks: {
|
||
callback: Chart.Ticks.formatters.logarithmic
|
||
}
|
||
};
|
||
|
||
var LogarithmicScale = Chart.Scale.extend({
|
||
determineDataLimits: function() {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var tickOpts = opts.ticks;
|
||
var chart = me.chart;
|
||
var data = chart.data;
|
||
var datasets = data.datasets;
|
||
var getValueOrDefault = helpers.getValueOrDefault;
|
||
var isHorizontal = me.isHorizontal();
|
||
function IDMatches(meta) {
|
||
return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;
|
||
}
|
||
|
||
// Calculate Range
|
||
me.min = null;
|
||
me.max = null;
|
||
me.minNotZero = null;
|
||
|
||
var hasStacks = opts.stacked;
|
||
if (hasStacks === undefined) {
|
||
helpers.each(datasets, function(dataset, datasetIndex) {
|
||
if (hasStacks) {
|
||
return;
|
||
}
|
||
|
||
var meta = chart.getDatasetMeta(datasetIndex);
|
||
if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&
|
||
meta.stack !== undefined) {
|
||
hasStacks = true;
|
||
}
|
||
});
|
||
}
|
||
|
||
if (opts.stacked || hasStacks) {
|
||
var valuesPerStack = {};
|
||
|
||
helpers.each(datasets, function(dataset, datasetIndex) {
|
||
var meta = chart.getDatasetMeta(datasetIndex);
|
||
var key = [
|
||
meta.type,
|
||
// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined
|
||
((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),
|
||
meta.stack
|
||
].join('.');
|
||
|
||
if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
|
||
if (valuesPerStack[key] === undefined) {
|
||
valuesPerStack[key] = [];
|
||
}
|
||
|
||
helpers.each(dataset.data, function(rawValue, index) {
|
||
var values = valuesPerStack[key];
|
||
var value = +me.getRightValue(rawValue);
|
||
if (isNaN(value) || meta.data[index].hidden) {
|
||
return;
|
||
}
|
||
|
||
values[index] = values[index] || 0;
|
||
|
||
if (opts.relativePoints) {
|
||
values[index] = 100;
|
||
} else {
|
||
// Don't need to split positive and negative since the log scale can't handle a 0 crossing
|
||
values[index] += value;
|
||
}
|
||
});
|
||
}
|
||
});
|
||
|
||
helpers.each(valuesPerStack, function(valuesForType) {
|
||
var minVal = helpers.min(valuesForType);
|
||
var maxVal = helpers.max(valuesForType);
|
||
me.min = me.min === null ? minVal : Math.min(me.min, minVal);
|
||
me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);
|
||
});
|
||
|
||
} else {
|
||
helpers.each(datasets, function(dataset, datasetIndex) {
|
||
var meta = chart.getDatasetMeta(datasetIndex);
|
||
if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
|
||
helpers.each(dataset.data, function(rawValue, index) {
|
||
var value = +me.getRightValue(rawValue);
|
||
if (isNaN(value) || meta.data[index].hidden) {
|
||
return;
|
||
}
|
||
|
||
if (me.min === null) {
|
||
me.min = value;
|
||
} else if (value < me.min) {
|
||
me.min = value;
|
||
}
|
||
|
||
if (me.max === null) {
|
||
me.max = value;
|
||
} else if (value > me.max) {
|
||
me.max = value;
|
||
}
|
||
|
||
if (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {
|
||
me.minNotZero = value;
|
||
}
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
me.min = getValueOrDefault(tickOpts.min, me.min);
|
||
me.max = getValueOrDefault(tickOpts.max, me.max);
|
||
|
||
if (me.min === me.max) {
|
||
if (me.min !== 0 && me.min !== null) {
|
||
me.min = Math.pow(10, Math.floor(helpers.log10(me.min)) - 1);
|
||
me.max = Math.pow(10, Math.floor(helpers.log10(me.max)) + 1);
|
||
} else {
|
||
me.min = 1;
|
||
me.max = 10;
|
||
}
|
||
}
|
||
},
|
||
buildTicks: function() {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var tickOpts = opts.ticks;
|
||
|
||
var generationOptions = {
|
||
min: tickOpts.min,
|
||
max: tickOpts.max
|
||
};
|
||
var ticks = me.ticks = Chart.Ticks.generators.logarithmic(generationOptions, me);
|
||
|
||
if (!me.isHorizontal()) {
|
||
// We are in a vertical orientation. The top value is the highest. So reverse the array
|
||
ticks.reverse();
|
||
}
|
||
|
||
// At this point, we need to update our max and min given the tick values since we have expanded the
|
||
// range of the scale
|
||
me.max = helpers.max(ticks);
|
||
me.min = helpers.min(ticks);
|
||
|
||
if (tickOpts.reverse) {
|
||
ticks.reverse();
|
||
|
||
me.start = me.max;
|
||
me.end = me.min;
|
||
} else {
|
||
me.start = me.min;
|
||
me.end = me.max;
|
||
}
|
||
},
|
||
convertTicksToLabels: function() {
|
||
this.tickValues = this.ticks.slice();
|
||
|
||
Chart.Scale.prototype.convertTicksToLabels.call(this);
|
||
},
|
||
// Get the correct tooltip label
|
||
getLabelForIndex: function(index, datasetIndex) {
|
||
return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
|
||
},
|
||
getPixelForTick: function(index) {
|
||
return this.getPixelForValue(this.tickValues[index]);
|
||
},
|
||
getPixelForValue: function(value) {
|
||
var me = this;
|
||
var innerDimension;
|
||
var pixel;
|
||
|
||
var start = me.start;
|
||
var newVal = +me.getRightValue(value);
|
||
var range;
|
||
var opts = me.options;
|
||
var tickOpts = opts.ticks;
|
||
|
||
if (me.isHorizontal()) {
|
||
range = helpers.log10(me.end) - helpers.log10(start); // todo: if start === 0
|
||
if (newVal === 0) {
|
||
pixel = me.left;
|
||
} else {
|
||
innerDimension = me.width;
|
||
pixel = me.left + (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));
|
||
}
|
||
} else {
|
||
// Bottom - top since pixels increase downward on a screen
|
||
innerDimension = me.height;
|
||
if (start === 0 && !tickOpts.reverse) {
|
||
range = helpers.log10(me.end) - helpers.log10(me.minNotZero);
|
||
if (newVal === start) {
|
||
pixel = me.bottom;
|
||
} else if (newVal === me.minNotZero) {
|
||
pixel = me.bottom - innerDimension * 0.02;
|
||
} else {
|
||
pixel = me.bottom - innerDimension * 0.02 - (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));
|
||
}
|
||
} else if (me.end === 0 && tickOpts.reverse) {
|
||
range = helpers.log10(me.start) - helpers.log10(me.minNotZero);
|
||
if (newVal === me.end) {
|
||
pixel = me.top;
|
||
} else if (newVal === me.minNotZero) {
|
||
pixel = me.top + innerDimension * 0.02;
|
||
} else {
|
||
pixel = me.top + innerDimension * 0.02 + (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));
|
||
}
|
||
} else {
|
||
range = helpers.log10(me.end) - helpers.log10(start);
|
||
innerDimension = me.height;
|
||
pixel = me.bottom - (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));
|
||
}
|
||
}
|
||
return pixel;
|
||
},
|
||
getValueForPixel: function(pixel) {
|
||
var me = this;
|
||
var range = helpers.log10(me.end) - helpers.log10(me.start);
|
||
var value, innerDimension;
|
||
|
||
if (me.isHorizontal()) {
|
||
innerDimension = me.width;
|
||
value = me.start * Math.pow(10, (pixel - me.left) * range / innerDimension);
|
||
} else { // todo: if start === 0
|
||
innerDimension = me.height;
|
||
value = Math.pow(10, (me.bottom - pixel) * range / innerDimension) / me.start;
|
||
}
|
||
return value;
|
||
}
|
||
});
|
||
Chart.scaleService.registerScaleType('logarithmic', LogarithmicScale, defaultConfig);
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 36 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
var globalDefaults = Chart.defaults.global;
|
||
|
||
var defaultConfig = {
|
||
display: true,
|
||
|
||
// Boolean - Whether to animate scaling the chart from the centre
|
||
animate: true,
|
||
lineArc: false,
|
||
position: 'chartArea',
|
||
|
||
angleLines: {
|
||
display: true,
|
||
color: 'rgba(0, 0, 0, 0.1)',
|
||
lineWidth: 1
|
||
},
|
||
|
||
// label settings
|
||
ticks: {
|
||
// Boolean - Show a backdrop to the scale label
|
||
showLabelBackdrop: true,
|
||
|
||
// String - The colour of the label backdrop
|
||
backdropColor: 'rgba(255,255,255,0.75)',
|
||
|
||
// Number - The backdrop padding above & below the label in pixels
|
||
backdropPaddingY: 2,
|
||
|
||
// Number - The backdrop padding to the side of the label in pixels
|
||
backdropPaddingX: 2,
|
||
|
||
callback: Chart.Ticks.formatters.linear
|
||
},
|
||
|
||
pointLabels: {
|
||
// Number - Point label font size in pixels
|
||
fontSize: 10,
|
||
|
||
// Function - Used to convert point labels
|
||
callback: function(label) {
|
||
return label;
|
||
}
|
||
}
|
||
};
|
||
|
||
function getValueCount(scale) {
|
||
return !scale.options.lineArc ? scale.chart.data.labels.length : 0;
|
||
}
|
||
|
||
function getPointLabelFontOptions(scale) {
|
||
var pointLabelOptions = scale.options.pointLabels;
|
||
var fontSize = helpers.getValueOrDefault(pointLabelOptions.fontSize, globalDefaults.defaultFontSize);
|
||
var fontStyle = helpers.getValueOrDefault(pointLabelOptions.fontStyle, globalDefaults.defaultFontStyle);
|
||
var fontFamily = helpers.getValueOrDefault(pointLabelOptions.fontFamily, globalDefaults.defaultFontFamily);
|
||
var font = helpers.fontString(fontSize, fontStyle, fontFamily);
|
||
|
||
return {
|
||
size: fontSize,
|
||
style: fontStyle,
|
||
family: fontFamily,
|
||
font: font
|
||
};
|
||
}
|
||
|
||
function measureLabelSize(ctx, fontSize, label) {
|
||
if (helpers.isArray(label)) {
|
||
return {
|
||
w: helpers.longestText(ctx, ctx.font, label),
|
||
h: (label.length * fontSize) + ((label.length - 1) * 1.5 * fontSize)
|
||
};
|
||
}
|
||
|
||
return {
|
||
w: ctx.measureText(label).width,
|
||
h: fontSize
|
||
};
|
||
}
|
||
|
||
function determineLimits(angle, pos, size, min, max) {
|
||
if (angle === min || angle === max) {
|
||
return {
|
||
start: pos - (size / 2),
|
||
end: pos + (size / 2)
|
||
};
|
||
} else if (angle < min || angle > max) {
|
||
return {
|
||
start: pos - size - 5,
|
||
end: pos
|
||
};
|
||
}
|
||
|
||
return {
|
||
start: pos,
|
||
end: pos + size + 5
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Helper function to fit a radial linear scale with point labels
|
||
*/
|
||
function fitWithPointLabels(scale) {
|
||
/*
|
||
* Right, this is really confusing and there is a lot of maths going on here
|
||
* The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9
|
||
*
|
||
* Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif
|
||
*
|
||
* Solution:
|
||
*
|
||
* We assume the radius of the polygon is half the size of the canvas at first
|
||
* at each index we check if the text overlaps.
|
||
*
|
||
* Where it does, we store that angle and that index.
|
||
*
|
||
* After finding the largest index and angle we calculate how much we need to remove
|
||
* from the shape radius to move the point inwards by that x.
|
||
*
|
||
* We average the left and right distances to get the maximum shape radius that can fit in the box
|
||
* along with labels.
|
||
*
|
||
* Once we have that, we can find the centre point for the chart, by taking the x text protrusion
|
||
* on each side, removing that from the size, halving it and adding the left x protrusion width.
|
||
*
|
||
* This will mean we have a shape fitted to the canvas, as large as it can be with the labels
|
||
* and position it in the most space efficient manner
|
||
*
|
||
* https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif
|
||
*/
|
||
|
||
var plFont = getPointLabelFontOptions(scale);
|
||
|
||
// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.
|
||
// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points
|
||
var largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);
|
||
var furthestLimits = {
|
||
l: scale.width,
|
||
r: 0,
|
||
t: scale.height,
|
||
b: 0
|
||
};
|
||
var furthestAngles = {};
|
||
var i;
|
||
var textSize;
|
||
var pointPosition;
|
||
|
||
scale.ctx.font = plFont.font;
|
||
scale._pointLabelSizes = [];
|
||
|
||
var valueCount = getValueCount(scale);
|
||
for (i = 0; i < valueCount; i++) {
|
||
pointPosition = scale.getPointPosition(i, largestPossibleRadius);
|
||
textSize = measureLabelSize(scale.ctx, plFont.size, scale.pointLabels[i] || '');
|
||
scale._pointLabelSizes[i] = textSize;
|
||
|
||
// Add quarter circle to make degree 0 mean top of circle
|
||
var angleRadians = scale.getIndexAngle(i);
|
||
var angle = helpers.toDegrees(angleRadians) % 360;
|
||
var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
|
||
var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
|
||
|
||
if (hLimits.start < furthestLimits.l) {
|
||
furthestLimits.l = hLimits.start;
|
||
furthestAngles.l = angleRadians;
|
||
}
|
||
|
||
if (hLimits.end > furthestLimits.r) {
|
||
furthestLimits.r = hLimits.end;
|
||
furthestAngles.r = angleRadians;
|
||
}
|
||
|
||
if (vLimits.start < furthestLimits.t) {
|
||
furthestLimits.t = vLimits.start;
|
||
furthestAngles.t = angleRadians;
|
||
}
|
||
|
||
if (vLimits.end > furthestLimits.b) {
|
||
furthestLimits.b = vLimits.end;
|
||
furthestAngles.b = angleRadians;
|
||
}
|
||
}
|
||
|
||
scale.setReductions(largestPossibleRadius, furthestLimits, furthestAngles);
|
||
}
|
||
|
||
/**
|
||
* Helper function to fit a radial linear scale with no point labels
|
||
*/
|
||
function fit(scale) {
|
||
var largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);
|
||
scale.drawingArea = Math.round(largestPossibleRadius);
|
||
scale.setCenterPoint(0, 0, 0, 0);
|
||
}
|
||
|
||
function getTextAlignForAngle(angle) {
|
||
if (angle === 0 || angle === 180) {
|
||
return 'center';
|
||
} else if (angle < 180) {
|
||
return 'left';
|
||
}
|
||
|
||
return 'right';
|
||
}
|
||
|
||
function fillText(ctx, text, position, fontSize) {
|
||
if (helpers.isArray(text)) {
|
||
var y = position.y;
|
||
var spacing = 1.5 * fontSize;
|
||
|
||
for (var i = 0; i < text.length; ++i) {
|
||
ctx.fillText(text[i], position.x, y);
|
||
y+= spacing;
|
||
}
|
||
} else {
|
||
ctx.fillText(text, position.x, position.y);
|
||
}
|
||
}
|
||
|
||
function adjustPointPositionForLabelHeight(angle, textSize, position) {
|
||
if (angle === 90 || angle === 270) {
|
||
position.y -= (textSize.h / 2);
|
||
} else if (angle > 270 || angle < 90) {
|
||
position.y -= textSize.h;
|
||
}
|
||
}
|
||
|
||
function drawPointLabels(scale) {
|
||
var ctx = scale.ctx;
|
||
var getValueOrDefault = helpers.getValueOrDefault;
|
||
var opts = scale.options;
|
||
var angleLineOpts = opts.angleLines;
|
||
var pointLabelOpts = opts.pointLabels;
|
||
|
||
ctx.lineWidth = angleLineOpts.lineWidth;
|
||
ctx.strokeStyle = angleLineOpts.color;
|
||
|
||
var outerDistance = scale.getDistanceFromCenterForValue(opts.reverse ? scale.min : scale.max);
|
||
|
||
// Point Label Font
|
||
var plFont = getPointLabelFontOptions(scale);
|
||
|
||
ctx.textBaseline = 'top';
|
||
|
||
for (var i = getValueCount(scale) - 1; i >= 0; i--) {
|
||
if (angleLineOpts.display) {
|
||
var outerPosition = scale.getPointPosition(i, outerDistance);
|
||
ctx.beginPath();
|
||
ctx.moveTo(scale.xCenter, scale.yCenter);
|
||
ctx.lineTo(outerPosition.x, outerPosition.y);
|
||
ctx.stroke();
|
||
ctx.closePath();
|
||
}
|
||
// Extra 3px out for some label spacing
|
||
var pointLabelPosition = scale.getPointPosition(i, outerDistance + 5);
|
||
|
||
// Keep this in loop since we may support array properties here
|
||
var pointLabelFontColor = getValueOrDefault(pointLabelOpts.fontColor, globalDefaults.defaultFontColor);
|
||
ctx.font = plFont.font;
|
||
ctx.fillStyle = pointLabelFontColor;
|
||
|
||
var angleRadians = scale.getIndexAngle(i);
|
||
var angle = helpers.toDegrees(angleRadians);
|
||
ctx.textAlign = getTextAlignForAngle(angle);
|
||
adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);
|
||
fillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.size);
|
||
}
|
||
}
|
||
|
||
function drawRadiusLine(scale, gridLineOpts, radius, index) {
|
||
var ctx = scale.ctx;
|
||
ctx.strokeStyle = helpers.getValueAtIndexOrDefault(gridLineOpts.color, index - 1);
|
||
ctx.lineWidth = helpers.getValueAtIndexOrDefault(gridLineOpts.lineWidth, index - 1);
|
||
|
||
if (scale.options.lineArc) {
|
||
// Draw circular arcs between the points
|
||
ctx.beginPath();
|
||
ctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);
|
||
ctx.closePath();
|
||
ctx.stroke();
|
||
} else {
|
||
// Draw straight lines connecting each index
|
||
var valueCount = getValueCount(scale);
|
||
|
||
if (valueCount === 0) {
|
||
return;
|
||
}
|
||
|
||
ctx.beginPath();
|
||
var pointPosition = scale.getPointPosition(0, radius);
|
||
ctx.moveTo(pointPosition.x, pointPosition.y);
|
||
|
||
for (var i = 1; i < valueCount; i++) {
|
||
pointPosition = scale.getPointPosition(i, radius);
|
||
ctx.lineTo(pointPosition.x, pointPosition.y);
|
||
}
|
||
|
||
ctx.closePath();
|
||
ctx.stroke();
|
||
}
|
||
}
|
||
|
||
function numberOrZero(param) {
|
||
return helpers.isNumber(param) ? param : 0;
|
||
}
|
||
|
||
var LinearRadialScale = Chart.LinearScaleBase.extend({
|
||
setDimensions: function() {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var tickOpts = opts.ticks;
|
||
// Set the unconstrained dimension before label rotation
|
||
me.width = me.maxWidth;
|
||
me.height = me.maxHeight;
|
||
me.xCenter = Math.round(me.width / 2);
|
||
me.yCenter = Math.round(me.height / 2);
|
||
|
||
var minSize = helpers.min([me.height, me.width]);
|
||
var tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);
|
||
me.drawingArea = opts.display ? (minSize / 2) - (tickFontSize / 2 + tickOpts.backdropPaddingY) : (minSize / 2);
|
||
},
|
||
determineDataLimits: function() {
|
||
var me = this;
|
||
var chart = me.chart;
|
||
var min = Number.POSITIVE_INFINITY;
|
||
var max = Number.NEGATIVE_INFINITY;
|
||
|
||
helpers.each(chart.data.datasets, function(dataset, datasetIndex) {
|
||
if (chart.isDatasetVisible(datasetIndex)) {
|
||
var meta = chart.getDatasetMeta(datasetIndex);
|
||
|
||
helpers.each(dataset.data, function(rawValue, index) {
|
||
var value = +me.getRightValue(rawValue);
|
||
if (isNaN(value) || meta.data[index].hidden) {
|
||
return;
|
||
}
|
||
|
||
min = Math.min(value, min);
|
||
max = Math.max(value, max);
|
||
});
|
||
}
|
||
});
|
||
|
||
me.min = (min === Number.POSITIVE_INFINITY ? 0 : min);
|
||
me.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);
|
||
|
||
// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero
|
||
me.handleTickRangeOptions();
|
||
},
|
||
getTickLimit: function() {
|
||
var tickOpts = this.options.ticks;
|
||
var tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);
|
||
return Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * tickFontSize)));
|
||
},
|
||
convertTicksToLabels: function() {
|
||
var me = this;
|
||
Chart.LinearScaleBase.prototype.convertTicksToLabels.call(me);
|
||
|
||
// Point labels
|
||
me.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);
|
||
},
|
||
getLabelForIndex: function(index, datasetIndex) {
|
||
return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
|
||
},
|
||
fit: function() {
|
||
if (this.options.lineArc) {
|
||
fit(this);
|
||
} else {
|
||
fitWithPointLabels(this);
|
||
}
|
||
},
|
||
/**
|
||
* Set radius reductions and determine new radius and center point
|
||
* @private
|
||
*/
|
||
setReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {
|
||
var me = this;
|
||
var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);
|
||
var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);
|
||
var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);
|
||
var radiusReductionBottom = -Math.max(furthestLimits.b - me.height, 0) / Math.cos(furthestAngles.b);
|
||
|
||
radiusReductionLeft = numberOrZero(radiusReductionLeft);
|
||
radiusReductionRight = numberOrZero(radiusReductionRight);
|
||
radiusReductionTop = numberOrZero(radiusReductionTop);
|
||
radiusReductionBottom = numberOrZero(radiusReductionBottom);
|
||
|
||
me.drawingArea = Math.min(
|
||
Math.round(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),
|
||
Math.round(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));
|
||
me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);
|
||
},
|
||
setCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {
|
||
var me = this;
|
||
var maxRight = me.width - rightMovement - me.drawingArea,
|
||
maxLeft = leftMovement + me.drawingArea,
|
||
maxTop = topMovement + me.drawingArea,
|
||
maxBottom = me.height - bottomMovement - me.drawingArea;
|
||
|
||
me.xCenter = Math.round(((maxLeft + maxRight) / 2) + me.left);
|
||
me.yCenter = Math.round(((maxTop + maxBottom) / 2) + me.top);
|
||
},
|
||
|
||
getIndexAngle: function(index) {
|
||
var angleMultiplier = (Math.PI * 2) / getValueCount(this);
|
||
var startAngle = this.chart.options && this.chart.options.startAngle ?
|
||
this.chart.options.startAngle :
|
||
0;
|
||
|
||
var startAngleRadians = startAngle * Math.PI * 2 / 360;
|
||
|
||
// Start from the top instead of right, so remove a quarter of the circle
|
||
return index * angleMultiplier + startAngleRadians;
|
||
},
|
||
getDistanceFromCenterForValue: function(value) {
|
||
var me = this;
|
||
|
||
if (value === null) {
|
||
return 0; // null always in center
|
||
}
|
||
|
||
// Take into account half font size + the yPadding of the top value
|
||
var scalingFactor = me.drawingArea / (me.max - me.min);
|
||
if (me.options.reverse) {
|
||
return (me.max - value) * scalingFactor;
|
||
}
|
||
return (value - me.min) * scalingFactor;
|
||
},
|
||
getPointPosition: function(index, distanceFromCenter) {
|
||
var me = this;
|
||
var thisAngle = me.getIndexAngle(index) - (Math.PI / 2);
|
||
return {
|
||
x: Math.round(Math.cos(thisAngle) * distanceFromCenter) + me.xCenter,
|
||
y: Math.round(Math.sin(thisAngle) * distanceFromCenter) + me.yCenter
|
||
};
|
||
},
|
||
getPointPositionForValue: function(index, value) {
|
||
return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
|
||
},
|
||
|
||
getBasePosition: function() {
|
||
var me = this;
|
||
var min = me.min;
|
||
var max = me.max;
|
||
|
||
return me.getPointPositionForValue(0,
|
||
me.beginAtZero? 0:
|
||
min < 0 && max < 0? max :
|
||
min > 0 && max > 0? min :
|
||
0);
|
||
},
|
||
|
||
draw: function() {
|
||
var me = this;
|
||
var opts = me.options;
|
||
var gridLineOpts = opts.gridLines;
|
||
var tickOpts = opts.ticks;
|
||
var getValueOrDefault = helpers.getValueOrDefault;
|
||
|
||
if (opts.display) {
|
||
var ctx = me.ctx;
|
||
|
||
// Tick Font
|
||
var tickFontSize = getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);
|
||
var tickFontStyle = getValueOrDefault(tickOpts.fontStyle, globalDefaults.defaultFontStyle);
|
||
var tickFontFamily = getValueOrDefault(tickOpts.fontFamily, globalDefaults.defaultFontFamily);
|
||
var tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);
|
||
|
||
helpers.each(me.ticks, function(label, index) {
|
||
// Don't draw a centre value (if it is minimum)
|
||
if (index > 0 || opts.reverse) {
|
||
var yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);
|
||
var yHeight = me.yCenter - yCenterOffset;
|
||
|
||
// Draw circular lines around the scale
|
||
if (gridLineOpts.display && index !== 0) {
|
||
drawRadiusLine(me, gridLineOpts, yCenterOffset, index);
|
||
}
|
||
|
||
if (tickOpts.display) {
|
||
var tickFontColor = getValueOrDefault(tickOpts.fontColor, globalDefaults.defaultFontColor);
|
||
ctx.font = tickLabelFont;
|
||
|
||
if (tickOpts.showLabelBackdrop) {
|
||
var labelWidth = ctx.measureText(label).width;
|
||
ctx.fillStyle = tickOpts.backdropColor;
|
||
ctx.fillRect(
|
||
me.xCenter - labelWidth / 2 - tickOpts.backdropPaddingX,
|
||
yHeight - tickFontSize / 2 - tickOpts.backdropPaddingY,
|
||
labelWidth + tickOpts.backdropPaddingX * 2,
|
||
tickFontSize + tickOpts.backdropPaddingY * 2
|
||
);
|
||
}
|
||
|
||
ctx.textAlign = 'center';
|
||
ctx.textBaseline = 'middle';
|
||
ctx.fillStyle = tickFontColor;
|
||
ctx.fillText(label, me.xCenter, yHeight);
|
||
}
|
||
}
|
||
});
|
||
|
||
if (!opts.lineArc) {
|
||
drawPointLabels(me);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
Chart.scaleService.registerScaleType('radialLinear', LinearRadialScale, defaultConfig);
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 37 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/* global window: false */
|
||
'use strict';
|
||
|
||
var moment = __webpack_require__(38);
|
||
moment = typeof(moment) === 'function' ? moment : window.moment;
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
var time = {
|
||
units: [{
|
||
name: 'millisecond',
|
||
steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]
|
||
}, {
|
||
name: 'second',
|
||
steps: [1, 2, 5, 10, 30]
|
||
}, {
|
||
name: 'minute',
|
||
steps: [1, 2, 5, 10, 30]
|
||
}, {
|
||
name: 'hour',
|
||
steps: [1, 2, 3, 6, 12]
|
||
}, {
|
||
name: 'day',
|
||
steps: [1, 2, 5]
|
||
}, {
|
||
name: 'week',
|
||
maxStep: 4
|
||
}, {
|
||
name: 'month',
|
||
maxStep: 3
|
||
}, {
|
||
name: 'quarter',
|
||
maxStep: 4
|
||
}, {
|
||
name: 'year',
|
||
maxStep: false
|
||
}]
|
||
};
|
||
|
||
var defaultConfig = {
|
||
position: 'bottom',
|
||
|
||
time: {
|
||
parser: false, // false == a pattern string from http://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment
|
||
format: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from http://momentjs.com/docs/#/parsing/string-format/
|
||
unit: false, // false == automatic or override with week, month, year, etc.
|
||
round: false, // none, or override with week, month, year, etc.
|
||
displayFormat: false, // DEPRECATED
|
||
isoWeekday: false, // override week start day - see http://momentjs.com/docs/#/get-set/iso-weekday/
|
||
minUnit: 'millisecond',
|
||
|
||
// defaults to unit's corresponding unitFormat below or override using pattern string from http://momentjs.com/docs/#/displaying/format/
|
||
displayFormats: {
|
||
millisecond: 'h:mm:ss.SSS a', // 11:20:01.123 AM,
|
||
second: 'h:mm:ss a', // 11:20:01 AM
|
||
minute: 'h:mm:ss a', // 11:20:01 AM
|
||
hour: 'MMM D, hA', // Sept 4, 5PM
|
||
day: 'll', // Sep 4 2015
|
||
week: 'll', // Week 46, or maybe "[W]WW - YYYY" ?
|
||
month: 'MMM YYYY', // Sept 2015
|
||
quarter: '[Q]Q - YYYY', // Q3
|
||
year: 'YYYY' // 2015
|
||
}
|
||
},
|
||
ticks: {
|
||
autoSkip: false
|
||
}
|
||
};
|
||
|
||
var TimeScale = Chart.Scale.extend({
|
||
initialize: function() {
|
||
if (!moment) {
|
||
throw new Error('Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com');
|
||
}
|
||
|
||
Chart.Scale.prototype.initialize.call(this);
|
||
},
|
||
getLabelMoment: function(datasetIndex, index) {
|
||
if (datasetIndex === null || index === null) {
|
||
return null;
|
||
}
|
||
|
||
if (typeof this.labelMoments[datasetIndex] !== 'undefined') {
|
||
return this.labelMoments[datasetIndex][index];
|
||
}
|
||
|
||
return null;
|
||
},
|
||
getLabelDiff: function(datasetIndex, index) {
|
||
var me = this;
|
||
if (datasetIndex === null || index === null) {
|
||
return null;
|
||
}
|
||
|
||
if (me.labelDiffs === undefined) {
|
||
me.buildLabelDiffs();
|
||
}
|
||
|
||
if (typeof me.labelDiffs[datasetIndex] !== 'undefined') {
|
||
return me.labelDiffs[datasetIndex][index];
|
||
}
|
||
|
||
return null;
|
||
},
|
||
getMomentStartOf: function(tick) {
|
||
var me = this;
|
||
if (me.options.time.unit === 'week' && me.options.time.isoWeekday !== false) {
|
||
return tick.clone().startOf('isoWeek').isoWeekday(me.options.time.isoWeekday);
|
||
}
|
||
return tick.clone().startOf(me.tickUnit);
|
||
},
|
||
determineDataLimits: function() {
|
||
var me = this;
|
||
me.labelMoments = [];
|
||
|
||
// Only parse these once. If the dataset does not have data as x,y pairs, we will use
|
||
// these
|
||
var scaleLabelMoments = [];
|
||
if (me.chart.data.labels && me.chart.data.labels.length > 0) {
|
||
helpers.each(me.chart.data.labels, function(label) {
|
||
var labelMoment = me.parseTime(label);
|
||
|
||
if (labelMoment.isValid()) {
|
||
if (me.options.time.round) {
|
||
labelMoment.startOf(me.options.time.round);
|
||
}
|
||
scaleLabelMoments.push(labelMoment);
|
||
}
|
||
}, me);
|
||
|
||
me.firstTick = moment.min.call(me, scaleLabelMoments);
|
||
me.lastTick = moment.max.call(me, scaleLabelMoments);
|
||
} else {
|
||
me.firstTick = null;
|
||
me.lastTick = null;
|
||
}
|
||
|
||
helpers.each(me.chart.data.datasets, function(dataset, datasetIndex) {
|
||
var momentsForDataset = [];
|
||
var datasetVisible = me.chart.isDatasetVisible(datasetIndex);
|
||
|
||
if (typeof dataset.data[0] === 'object' && dataset.data[0] !== null) {
|
||
helpers.each(dataset.data, function(value) {
|
||
var labelMoment = me.parseTime(me.getRightValue(value));
|
||
|
||
if (labelMoment.isValid()) {
|
||
if (me.options.time.round) {
|
||
labelMoment.startOf(me.options.time.round);
|
||
}
|
||
momentsForDataset.push(labelMoment);
|
||
|
||
if (datasetVisible) {
|
||
// May have gone outside the scale ranges, make sure we keep the first and last ticks updated
|
||
me.firstTick = me.firstTick !== null ? moment.min(me.firstTick, labelMoment) : labelMoment;
|
||
me.lastTick = me.lastTick !== null ? moment.max(me.lastTick, labelMoment) : labelMoment;
|
||
}
|
||
}
|
||
}, me);
|
||
} else {
|
||
// We have no labels. Use the ones from the scale
|
||
momentsForDataset = scaleLabelMoments;
|
||
}
|
||
|
||
me.labelMoments.push(momentsForDataset);
|
||
}, me);
|
||
|
||
// Set these after we've done all the data
|
||
if (me.options.time.min) {
|
||
me.firstTick = me.parseTime(me.options.time.min);
|
||
}
|
||
|
||
if (me.options.time.max) {
|
||
me.lastTick = me.parseTime(me.options.time.max);
|
||
}
|
||
|
||
// We will modify these, so clone for later
|
||
me.firstTick = (me.firstTick || moment()).clone();
|
||
me.lastTick = (me.lastTick || moment()).clone();
|
||
},
|
||
buildLabelDiffs: function() {
|
||
var me = this;
|
||
me.labelDiffs = [];
|
||
var scaleLabelDiffs = [];
|
||
// Parse common labels once
|
||
if (me.chart.data.labels && me.chart.data.labels.length > 0) {
|
||
helpers.each(me.chart.data.labels, function(label) {
|
||
var labelMoment = me.parseTime(label);
|
||
|
||
if (labelMoment.isValid()) {
|
||
if (me.options.time.round) {
|
||
labelMoment.startOf(me.options.time.round);
|
||
}
|
||
scaleLabelDiffs.push(labelMoment.diff(me.firstTick, me.tickUnit, true));
|
||
}
|
||
}, me);
|
||
}
|
||
|
||
helpers.each(me.chart.data.datasets, function(dataset) {
|
||
var diffsForDataset = [];
|
||
|
||
if (typeof dataset.data[0] === 'object' && dataset.data[0] !== null) {
|
||
helpers.each(dataset.data, function(value) {
|
||
var labelMoment = me.parseTime(me.getRightValue(value));
|
||
|
||
if (labelMoment.isValid()) {
|
||
if (me.options.time.round) {
|
||
labelMoment.startOf(me.options.time.round);
|
||
}
|
||
diffsForDataset.push(labelMoment.diff(me.firstTick, me.tickUnit, true));
|
||
}
|
||
}, me);
|
||
} else {
|
||
// We have no labels. Use common ones
|
||
diffsForDataset = scaleLabelDiffs;
|
||
}
|
||
|
||
me.labelDiffs.push(diffsForDataset);
|
||
}, me);
|
||
},
|
||
buildTicks: function() {
|
||
var me = this;
|
||
|
||
me.ctx.save();
|
||
var tickFontSize = helpers.getValueOrDefault(me.options.ticks.fontSize, Chart.defaults.global.defaultFontSize);
|
||
var tickFontStyle = helpers.getValueOrDefault(me.options.ticks.fontStyle, Chart.defaults.global.defaultFontStyle);
|
||
var tickFontFamily = helpers.getValueOrDefault(me.options.ticks.fontFamily, Chart.defaults.global.defaultFontFamily);
|
||
var tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);
|
||
me.ctx.font = tickLabelFont;
|
||
|
||
me.ticks = [];
|
||
me.unitScale = 1; // How much we scale the unit by, ie 2 means 2x unit per step
|
||
me.scaleSizeInUnits = 0; // How large the scale is in the base unit (seconds, minutes, etc)
|
||
|
||
// Set unit override if applicable
|
||
if (me.options.time.unit) {
|
||
me.tickUnit = me.options.time.unit || 'day';
|
||
me.displayFormat = me.options.time.displayFormats[me.tickUnit];
|
||
me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);
|
||
me.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, 1);
|
||
} else {
|
||
// Determine the smallest needed unit of the time
|
||
var innerWidth = me.isHorizontal() ? me.width : me.height;
|
||
|
||
// Crude approximation of what the label length might be
|
||
var tempFirstLabel = me.tickFormatFunction(me.firstTick, 0, []);
|
||
var tickLabelWidth = me.ctx.measureText(tempFirstLabel).width;
|
||
var cosRotation = Math.cos(helpers.toRadians(me.options.ticks.maxRotation));
|
||
var sinRotation = Math.sin(helpers.toRadians(me.options.ticks.maxRotation));
|
||
tickLabelWidth = (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation);
|
||
var labelCapacity = innerWidth / (tickLabelWidth);
|
||
|
||
// Start as small as possible
|
||
me.tickUnit = me.options.time.minUnit;
|
||
me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);
|
||
me.displayFormat = me.options.time.displayFormats[me.tickUnit];
|
||
|
||
var unitDefinitionIndex = 0;
|
||
var unitDefinition = time.units[unitDefinitionIndex];
|
||
|
||
// While we aren't ideal and we don't have units left
|
||
while (unitDefinitionIndex < time.units.length) {
|
||
// Can we scale this unit. If `false` we can scale infinitely
|
||
me.unitScale = 1;
|
||
|
||
if (helpers.isArray(unitDefinition.steps) && Math.ceil(me.scaleSizeInUnits / labelCapacity) < helpers.max(unitDefinition.steps)) {
|
||
// Use one of the predefined steps
|
||
for (var idx = 0; idx < unitDefinition.steps.length; ++idx) {
|
||
if (unitDefinition.steps[idx] >= Math.ceil(me.scaleSizeInUnits / labelCapacity)) {
|
||
me.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, unitDefinition.steps[idx]);
|
||
break;
|
||
}
|
||
}
|
||
|
||
break;
|
||
} else if ((unitDefinition.maxStep === false) || (Math.ceil(me.scaleSizeInUnits / labelCapacity) < unitDefinition.maxStep)) {
|
||
// We have a max step. Scale this unit
|
||
me.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, Math.ceil(me.scaleSizeInUnits / labelCapacity));
|
||
break;
|
||
} else {
|
||
// Move to the next unit up
|
||
++unitDefinitionIndex;
|
||
unitDefinition = time.units[unitDefinitionIndex];
|
||
|
||
me.tickUnit = unitDefinition.name;
|
||
var leadingUnitBuffer = me.firstTick.diff(me.getMomentStartOf(me.firstTick), me.tickUnit, true);
|
||
var trailingUnitBuffer = me.getMomentStartOf(me.lastTick.clone().add(1, me.tickUnit)).diff(me.lastTick, me.tickUnit, true);
|
||
me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true) + leadingUnitBuffer + trailingUnitBuffer;
|
||
me.displayFormat = me.options.time.displayFormats[unitDefinition.name];
|
||
}
|
||
}
|
||
}
|
||
|
||
var roundedStart;
|
||
|
||
// Only round the first tick if we have no hard minimum
|
||
if (!me.options.time.min) {
|
||
me.firstTick = me.getMomentStartOf(me.firstTick);
|
||
roundedStart = me.firstTick;
|
||
} else {
|
||
roundedStart = me.getMomentStartOf(me.firstTick);
|
||
}
|
||
|
||
// Only round the last tick if we have no hard maximum
|
||
if (!me.options.time.max) {
|
||
var roundedEnd = me.getMomentStartOf(me.lastTick);
|
||
var delta = roundedEnd.diff(me.lastTick, me.tickUnit, true);
|
||
if (delta < 0) {
|
||
// Do not use end of because we need me to be in the next time unit
|
||
me.lastTick = me.getMomentStartOf(me.lastTick.add(1, me.tickUnit));
|
||
} else if (delta >= 0) {
|
||
me.lastTick = roundedEnd;
|
||
}
|
||
|
||
me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);
|
||
}
|
||
|
||
// Tick displayFormat override
|
||
if (me.options.time.displayFormat) {
|
||
me.displayFormat = me.options.time.displayFormat;
|
||
}
|
||
|
||
// first tick. will have been rounded correctly if options.time.min is not specified
|
||
me.ticks.push(me.firstTick.clone());
|
||
|
||
// For every unit in between the first and last moment, create a moment and add it to the ticks tick
|
||
for (var i = me.unitScale; i <= me.scaleSizeInUnits; i += me.unitScale) {
|
||
var newTick = roundedStart.clone().add(i, me.tickUnit);
|
||
|
||
// Are we greater than the max time
|
||
if (me.options.time.max && newTick.diff(me.lastTick, me.tickUnit, true) >= 0) {
|
||
break;
|
||
}
|
||
|
||
me.ticks.push(newTick);
|
||
}
|
||
|
||
// Always show the right tick
|
||
var diff = me.ticks[me.ticks.length - 1].diff(me.lastTick, me.tickUnit);
|
||
if (diff !== 0 || me.scaleSizeInUnits === 0) {
|
||
// this is a weird case. If the <max> option is the same as the end option, we can't just diff the times because the tick was created from the roundedStart
|
||
// but the last tick was not rounded.
|
||
if (me.options.time.max) {
|
||
me.ticks.push(me.lastTick.clone());
|
||
me.scaleSizeInUnits = me.lastTick.diff(me.ticks[0], me.tickUnit, true);
|
||
} else {
|
||
me.ticks.push(me.lastTick.clone());
|
||
me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);
|
||
}
|
||
}
|
||
|
||
me.ctx.restore();
|
||
|
||
// Invalidate label diffs cache
|
||
me.labelDiffs = undefined;
|
||
},
|
||
// Get tooltip label
|
||
getLabelForIndex: function(index, datasetIndex) {
|
||
var me = this;
|
||
var label = me.chart.data.labels && index < me.chart.data.labels.length ? me.chart.data.labels[index] : '';
|
||
var value = me.chart.data.datasets[datasetIndex].data[index];
|
||
|
||
if (value !== null && typeof value === 'object') {
|
||
label = me.getRightValue(value);
|
||
}
|
||
|
||
// Format nicely
|
||
if (me.options.time.tooltipFormat) {
|
||
label = me.parseTime(label).format(me.options.time.tooltipFormat);
|
||
}
|
||
|
||
return label;
|
||
},
|
||
// Function to format an individual tick mark
|
||
tickFormatFunction: function(tick, index, ticks) {
|
||
var formattedTick = tick.format(this.displayFormat);
|
||
var tickOpts = this.options.ticks;
|
||
var callback = helpers.getValueOrDefault(tickOpts.callback, tickOpts.userCallback);
|
||
|
||
if (callback) {
|
||
return callback(formattedTick, index, ticks);
|
||
}
|
||
return formattedTick;
|
||
},
|
||
convertTicksToLabels: function() {
|
||
var me = this;
|
||
me.tickMoments = me.ticks;
|
||
me.ticks = me.ticks.map(me.tickFormatFunction, me);
|
||
},
|
||
getPixelForValue: function(value, index, datasetIndex) {
|
||
var me = this;
|
||
var offset = null;
|
||
if (index !== undefined && datasetIndex !== undefined) {
|
||
offset = me.getLabelDiff(datasetIndex, index);
|
||
}
|
||
|
||
if (offset === null) {
|
||
if (!value || !value.isValid) {
|
||
// not already a moment object
|
||
value = me.parseTime(me.getRightValue(value));
|
||
}
|
||
if (value && value.isValid && value.isValid()) {
|
||
offset = value.diff(me.firstTick, me.tickUnit, true);
|
||
}
|
||
}
|
||
|
||
if (offset !== null) {
|
||
var decimal = offset !== 0 ? offset / me.scaleSizeInUnits : offset;
|
||
|
||
if (me.isHorizontal()) {
|
||
var valueOffset = (me.width * decimal);
|
||
return me.left + Math.round(valueOffset);
|
||
}
|
||
|
||
var heightOffset = (me.height * decimal);
|
||
return me.top + Math.round(heightOffset);
|
||
}
|
||
},
|
||
getPixelForTick: function(index) {
|
||
return this.getPixelForValue(this.tickMoments[index], null, null);
|
||
},
|
||
getValueForPixel: function(pixel) {
|
||
var me = this;
|
||
var innerDimension = me.isHorizontal() ? me.width : me.height;
|
||
var offset = (pixel - (me.isHorizontal() ? me.left : me.top)) / innerDimension;
|
||
offset *= me.scaleSizeInUnits;
|
||
return me.firstTick.clone().add(moment.duration(offset, me.tickUnit).asSeconds(), 'seconds');
|
||
},
|
||
parseTime: function(label) {
|
||
var me = this;
|
||
if (typeof me.options.time.parser === 'string') {
|
||
return moment(label, me.options.time.parser);
|
||
}
|
||
if (typeof me.options.time.parser === 'function') {
|
||
return me.options.time.parser(label);
|
||
}
|
||
// Date objects
|
||
if (typeof label.getMonth === 'function' || typeof label === 'number') {
|
||
return moment(label);
|
||
}
|
||
// Moment support
|
||
if (label.isValid && label.isValid()) {
|
||
return label;
|
||
}
|
||
// Custom parsing (return an instance of moment)
|
||
if (typeof me.options.time.format !== 'string' && me.options.time.format.call) {
|
||
console.warn('options.time.format is deprecated and replaced by options.time.parser. See http://nnnick.github.io/Chart.js/docs-v2/#scales-time-scale');
|
||
return me.options.time.format(label);
|
||
}
|
||
// Moment format parsing
|
||
return moment(label, me.options.time.format);
|
||
}
|
||
});
|
||
Chart.scaleService.registerScaleType('time', TimeScale, defaultConfig);
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 38 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(module) {//! moment.js
|
||
//! version : 2.17.1
|
||
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
|
||
//! license : MIT
|
||
//! momentjs.com
|
||
|
||
;(function (global, factory) {
|
||
true ? module.exports = factory() :
|
||
typeof define === 'function' && define.amd ? define(factory) :
|
||
global.moment = factory()
|
||
}(this, (function () { 'use strict';
|
||
|
||
var hookCallback;
|
||
|
||
function hooks () {
|
||
return hookCallback.apply(null, arguments);
|
||
}
|
||
|
||
// This is done to register the method called with moment()
|
||
// without creating circular dependencies.
|
||
function setHookCallback (callback) {
|
||
hookCallback = callback;
|
||
}
|
||
|
||
function isArray(input) {
|
||
return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
|
||
}
|
||
|
||
function isObject(input) {
|
||
// IE8 will treat undefined and null as object if it wasn't for
|
||
// input != null
|
||
return input != null && Object.prototype.toString.call(input) === '[object Object]';
|
||
}
|
||
|
||
function isObjectEmpty(obj) {
|
||
var k;
|
||
for (k in obj) {
|
||
// even if its not own property I'd still call it non-empty
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
function isNumber(input) {
|
||
return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
|
||
}
|
||
|
||
function isDate(input) {
|
||
return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
|
||
}
|
||
|
||
function map(arr, fn) {
|
||
var res = [], i;
|
||
for (i = 0; i < arr.length; ++i) {
|
||
res.push(fn(arr[i], i));
|
||
}
|
||
return res;
|
||
}
|
||
|
||
function hasOwnProp(a, b) {
|
||
return Object.prototype.hasOwnProperty.call(a, b);
|
||
}
|
||
|
||
function extend(a, b) {
|
||
for (var i in b) {
|
||
if (hasOwnProp(b, i)) {
|
||
a[i] = b[i];
|
||
}
|
||
}
|
||
|
||
if (hasOwnProp(b, 'toString')) {
|
||
a.toString = b.toString;
|
||
}
|
||
|
||
if (hasOwnProp(b, 'valueOf')) {
|
||
a.valueOf = b.valueOf;
|
||
}
|
||
|
||
return a;
|
||
}
|
||
|
||
function createUTC (input, format, locale, strict) {
|
||
return createLocalOrUTC(input, format, locale, strict, true).utc();
|
||
}
|
||
|
||
function defaultParsingFlags() {
|
||
// We need to deep clone this object.
|
||
return {
|
||
empty : false,
|
||
unusedTokens : [],
|
||
unusedInput : [],
|
||
overflow : -2,
|
||
charsLeftOver : 0,
|
||
nullInput : false,
|
||
invalidMonth : null,
|
||
invalidFormat : false,
|
||
userInvalidated : false,
|
||
iso : false,
|
||
parsedDateParts : [],
|
||
meridiem : null
|
||
};
|
||
}
|
||
|
||
function getParsingFlags(m) {
|
||
if (m._pf == null) {
|
||
m._pf = defaultParsingFlags();
|
||
}
|
||
return m._pf;
|
||
}
|
||
|
||
var some;
|
||
if (Array.prototype.some) {
|
||
some = Array.prototype.some;
|
||
} else {
|
||
some = function (fun) {
|
||
var t = Object(this);
|
||
var len = t.length >>> 0;
|
||
|
||
for (var i = 0; i < len; i++) {
|
||
if (i in t && fun.call(this, t[i], i, t)) {
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
};
|
||
}
|
||
|
||
var some$1 = some;
|
||
|
||
function isValid(m) {
|
||
if (m._isValid == null) {
|
||
var flags = getParsingFlags(m);
|
||
var parsedParts = some$1.call(flags.parsedDateParts, function (i) {
|
||
return i != null;
|
||
});
|
||
var isNowValid = !isNaN(m._d.getTime()) &&
|
||
flags.overflow < 0 &&
|
||
!flags.empty &&
|
||
!flags.invalidMonth &&
|
||
!flags.invalidWeekday &&
|
||
!flags.nullInput &&
|
||
!flags.invalidFormat &&
|
||
!flags.userInvalidated &&
|
||
(!flags.meridiem || (flags.meridiem && parsedParts));
|
||
|
||
if (m._strict) {
|
||
isNowValid = isNowValid &&
|
||
flags.charsLeftOver === 0 &&
|
||
flags.unusedTokens.length === 0 &&
|
||
flags.bigHour === undefined;
|
||
}
|
||
|
||
if (Object.isFrozen == null || !Object.isFrozen(m)) {
|
||
m._isValid = isNowValid;
|
||
}
|
||
else {
|
||
return isNowValid;
|
||
}
|
||
}
|
||
return m._isValid;
|
||
}
|
||
|
||
function createInvalid (flags) {
|
||
var m = createUTC(NaN);
|
||
if (flags != null) {
|
||
extend(getParsingFlags(m), flags);
|
||
}
|
||
else {
|
||
getParsingFlags(m).userInvalidated = true;
|
||
}
|
||
|
||
return m;
|
||
}
|
||
|
||
function isUndefined(input) {
|
||
return input === void 0;
|
||
}
|
||
|
||
// Plugins that add properties should also add the key here (null value),
|
||
// so we can properly clone ourselves.
|
||
var momentProperties = hooks.momentProperties = [];
|
||
|
||
function copyConfig(to, from) {
|
||
var i, prop, val;
|
||
|
||
if (!isUndefined(from._isAMomentObject)) {
|
||
to._isAMomentObject = from._isAMomentObject;
|
||
}
|
||
if (!isUndefined(from._i)) {
|
||
to._i = from._i;
|
||
}
|
||
if (!isUndefined(from._f)) {
|
||
to._f = from._f;
|
||
}
|
||
if (!isUndefined(from._l)) {
|
||
to._l = from._l;
|
||
}
|
||
if (!isUndefined(from._strict)) {
|
||
to._strict = from._strict;
|
||
}
|
||
if (!isUndefined(from._tzm)) {
|
||
to._tzm = from._tzm;
|
||
}
|
||
if (!isUndefined(from._isUTC)) {
|
||
to._isUTC = from._isUTC;
|
||
}
|
||
if (!isUndefined(from._offset)) {
|
||
to._offset = from._offset;
|
||
}
|
||
if (!isUndefined(from._pf)) {
|
||
to._pf = getParsingFlags(from);
|
||
}
|
||
if (!isUndefined(from._locale)) {
|
||
to._locale = from._locale;
|
||
}
|
||
|
||
if (momentProperties.length > 0) {
|
||
for (i in momentProperties) {
|
||
prop = momentProperties[i];
|
||
val = from[prop];
|
||
if (!isUndefined(val)) {
|
||
to[prop] = val;
|
||
}
|
||
}
|
||
}
|
||
|
||
return to;
|
||
}
|
||
|
||
var updateInProgress = false;
|
||
|
||
// Moment prototype object
|
||
function Moment(config) {
|
||
copyConfig(this, config);
|
||
this._d = new Date(config._d != null ? config._d.getTime() : NaN);
|
||
if (!this.isValid()) {
|
||
this._d = new Date(NaN);
|
||
}
|
||
// Prevent infinite loop in case updateOffset creates new moment
|
||
// objects.
|
||
if (updateInProgress === false) {
|
||
updateInProgress = true;
|
||
hooks.updateOffset(this);
|
||
updateInProgress = false;
|
||
}
|
||
}
|
||
|
||
function isMoment (obj) {
|
||
return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
|
||
}
|
||
|
||
function absFloor (number) {
|
||
if (number < 0) {
|
||
// -0 -> 0
|
||
return Math.ceil(number) || 0;
|
||
} else {
|
||
return Math.floor(number);
|
||
}
|
||
}
|
||
|
||
function toInt(argumentForCoercion) {
|
||
var coercedNumber = +argumentForCoercion,
|
||
value = 0;
|
||
|
||
if (coercedNumber !== 0 && isFinite(coercedNumber)) {
|
||
value = absFloor(coercedNumber);
|
||
}
|
||
|
||
return value;
|
||
}
|
||
|
||
// compare two arrays, return the number of differences
|
||
function compareArrays(array1, array2, dontConvert) {
|
||
var len = Math.min(array1.length, array2.length),
|
||
lengthDiff = Math.abs(array1.length - array2.length),
|
||
diffs = 0,
|
||
i;
|
||
for (i = 0; i < len; i++) {
|
||
if ((dontConvert && array1[i] !== array2[i]) ||
|
||
(!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
|
||
diffs++;
|
||
}
|
||
}
|
||
return diffs + lengthDiff;
|
||
}
|
||
|
||
function warn(msg) {
|
||
if (hooks.suppressDeprecationWarnings === false &&
|
||
(typeof console !== 'undefined') && console.warn) {
|
||
console.warn('Deprecation warning: ' + msg);
|
||
}
|
||
}
|
||
|
||
function deprecate(msg, fn) {
|
||
var firstTime = true;
|
||
|
||
return extend(function () {
|
||
if (hooks.deprecationHandler != null) {
|
||
hooks.deprecationHandler(null, msg);
|
||
}
|
||
if (firstTime) {
|
||
var args = [];
|
||
var arg;
|
||
for (var i = 0; i < arguments.length; i++) {
|
||
arg = '';
|
||
if (typeof arguments[i] === 'object') {
|
||
arg += '\n[' + i + '] ';
|
||
for (var key in arguments[0]) {
|
||
arg += key + ': ' + arguments[0][key] + ', ';
|
||
}
|
||
arg = arg.slice(0, -2); // Remove trailing comma and space
|
||
} else {
|
||
arg = arguments[i];
|
||
}
|
||
args.push(arg);
|
||
}
|
||
warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
|
||
firstTime = false;
|
||
}
|
||
return fn.apply(this, arguments);
|
||
}, fn);
|
||
}
|
||
|
||
var deprecations = {};
|
||
|
||
function deprecateSimple(name, msg) {
|
||
if (hooks.deprecationHandler != null) {
|
||
hooks.deprecationHandler(name, msg);
|
||
}
|
||
if (!deprecations[name]) {
|
||
warn(msg);
|
||
deprecations[name] = true;
|
||
}
|
||
}
|
||
|
||
hooks.suppressDeprecationWarnings = false;
|
||
hooks.deprecationHandler = null;
|
||
|
||
function isFunction(input) {
|
||
return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
|
||
}
|
||
|
||
function set (config) {
|
||
var prop, i;
|
||
for (i in config) {
|
||
prop = config[i];
|
||
if (isFunction(prop)) {
|
||
this[i] = prop;
|
||
} else {
|
||
this['_' + i] = prop;
|
||
}
|
||
}
|
||
this._config = config;
|
||
// Lenient ordinal parsing accepts just a number in addition to
|
||
// number + (possibly) stuff coming from _ordinalParseLenient.
|
||
this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
|
||
}
|
||
|
||
function mergeConfigs(parentConfig, childConfig) {
|
||
var res = extend({}, parentConfig), prop;
|
||
for (prop in childConfig) {
|
||
if (hasOwnProp(childConfig, prop)) {
|
||
if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
|
||
res[prop] = {};
|
||
extend(res[prop], parentConfig[prop]);
|
||
extend(res[prop], childConfig[prop]);
|
||
} else if (childConfig[prop] != null) {
|
||
res[prop] = childConfig[prop];
|
||
} else {
|
||
delete res[prop];
|
||
}
|
||
}
|
||
}
|
||
for (prop in parentConfig) {
|
||
if (hasOwnProp(parentConfig, prop) &&
|
||
!hasOwnProp(childConfig, prop) &&
|
||
isObject(parentConfig[prop])) {
|
||
// make sure changes to properties don't modify parent config
|
||
res[prop] = extend({}, res[prop]);
|
||
}
|
||
}
|
||
return res;
|
||
}
|
||
|
||
function Locale(config) {
|
||
if (config != null) {
|
||
this.set(config);
|
||
}
|
||
}
|
||
|
||
var keys;
|
||
|
||
if (Object.keys) {
|
||
keys = Object.keys;
|
||
} else {
|
||
keys = function (obj) {
|
||
var i, res = [];
|
||
for (i in obj) {
|
||
if (hasOwnProp(obj, i)) {
|
||
res.push(i);
|
||
}
|
||
}
|
||
return res;
|
||
};
|
||
}
|
||
|
||
var keys$1 = keys;
|
||
|
||
var defaultCalendar = {
|
||
sameDay : '[Today at] LT',
|
||
nextDay : '[Tomorrow at] LT',
|
||
nextWeek : 'dddd [at] LT',
|
||
lastDay : '[Yesterday at] LT',
|
||
lastWeek : '[Last] dddd [at] LT',
|
||
sameElse : 'L'
|
||
};
|
||
|
||
function calendar (key, mom, now) {
|
||
var output = this._calendar[key] || this._calendar['sameElse'];
|
||
return isFunction(output) ? output.call(mom, now) : output;
|
||
}
|
||
|
||
var defaultLongDateFormat = {
|
||
LTS : 'h:mm:ss A',
|
||
LT : 'h:mm A',
|
||
L : 'MM/DD/YYYY',
|
||
LL : 'MMMM D, YYYY',
|
||
LLL : 'MMMM D, YYYY h:mm A',
|
||
LLLL : 'dddd, MMMM D, YYYY h:mm A'
|
||
};
|
||
|
||
function longDateFormat (key) {
|
||
var format = this._longDateFormat[key],
|
||
formatUpper = this._longDateFormat[key.toUpperCase()];
|
||
|
||
if (format || !formatUpper) {
|
||
return format;
|
||
}
|
||
|
||
this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
|
||
return val.slice(1);
|
||
});
|
||
|
||
return this._longDateFormat[key];
|
||
}
|
||
|
||
var defaultInvalidDate = 'Invalid date';
|
||
|
||
function invalidDate () {
|
||
return this._invalidDate;
|
||
}
|
||
|
||
var defaultOrdinal = '%d';
|
||
var defaultOrdinalParse = /\d{1,2}/;
|
||
|
||
function ordinal (number) {
|
||
return this._ordinal.replace('%d', number);
|
||
}
|
||
|
||
var defaultRelativeTime = {
|
||
future : 'in %s',
|
||
past : '%s ago',
|
||
s : 'a few seconds',
|
||
m : 'a minute',
|
||
mm : '%d minutes',
|
||
h : 'an hour',
|
||
hh : '%d hours',
|
||
d : 'a day',
|
||
dd : '%d days',
|
||
M : 'a month',
|
||
MM : '%d months',
|
||
y : 'a year',
|
||
yy : '%d years'
|
||
};
|
||
|
||
function relativeTime (number, withoutSuffix, string, isFuture) {
|
||
var output = this._relativeTime[string];
|
||
return (isFunction(output)) ?
|
||
output(number, withoutSuffix, string, isFuture) :
|
||
output.replace(/%d/i, number);
|
||
}
|
||
|
||
function pastFuture (diff, output) {
|
||
var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
|
||
return isFunction(format) ? format(output) : format.replace(/%s/i, output);
|
||
}
|
||
|
||
var aliases = {};
|
||
|
||
function addUnitAlias (unit, shorthand) {
|
||
var lowerCase = unit.toLowerCase();
|
||
aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
|
||
}
|
||
|
||
function normalizeUnits(units) {
|
||
return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
|
||
}
|
||
|
||
function normalizeObjectUnits(inputObject) {
|
||
var normalizedInput = {},
|
||
normalizedProp,
|
||
prop;
|
||
|
||
for (prop in inputObject) {
|
||
if (hasOwnProp(inputObject, prop)) {
|
||
normalizedProp = normalizeUnits(prop);
|
||
if (normalizedProp) {
|
||
normalizedInput[normalizedProp] = inputObject[prop];
|
||
}
|
||
}
|
||
}
|
||
|
||
return normalizedInput;
|
||
}
|
||
|
||
var priorities = {};
|
||
|
||
function addUnitPriority(unit, priority) {
|
||
priorities[unit] = priority;
|
||
}
|
||
|
||
function getPrioritizedUnits(unitsObj) {
|
||
var units = [];
|
||
for (var u in unitsObj) {
|
||
units.push({unit: u, priority: priorities[u]});
|
||
}
|
||
units.sort(function (a, b) {
|
||
return a.priority - b.priority;
|
||
});
|
||
return units;
|
||
}
|
||
|
||
function makeGetSet (unit, keepTime) {
|
||
return function (value) {
|
||
if (value != null) {
|
||
set$1(this, unit, value);
|
||
hooks.updateOffset(this, keepTime);
|
||
return this;
|
||
} else {
|
||
return get(this, unit);
|
||
}
|
||
};
|
||
}
|
||
|
||
function get (mom, unit) {
|
||
return mom.isValid() ?
|
||
mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
|
||
}
|
||
|
||
function set$1 (mom, unit, value) {
|
||
if (mom.isValid()) {
|
||
mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
|
||
}
|
||
}
|
||
|
||
// MOMENTS
|
||
|
||
function stringGet (units) {
|
||
units = normalizeUnits(units);
|
||
if (isFunction(this[units])) {
|
||
return this[units]();
|
||
}
|
||
return this;
|
||
}
|
||
|
||
|
||
function stringSet (units, value) {
|
||
if (typeof units === 'object') {
|
||
units = normalizeObjectUnits(units);
|
||
var prioritized = getPrioritizedUnits(units);
|
||
for (var i = 0; i < prioritized.length; i++) {
|
||
this[prioritized[i].unit](units[prioritized[i].unit]);
|
||
}
|
||
} else {
|
||
units = normalizeUnits(units);
|
||
if (isFunction(this[units])) {
|
||
return this[units](value);
|
||
}
|
||
}
|
||
return this;
|
||
}
|
||
|
||
function zeroFill(number, targetLength, forceSign) {
|
||
var absNumber = '' + Math.abs(number),
|
||
zerosToFill = targetLength - absNumber.length,
|
||
sign = number >= 0;
|
||
return (sign ? (forceSign ? '+' : '') : '-') +
|
||
Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
|
||
}
|
||
|
||
var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
|
||
|
||
var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
|
||
|
||
var formatFunctions = {};
|
||
|
||
var formatTokenFunctions = {};
|
||
|
||
// token: 'M'
|
||
// padded: ['MM', 2]
|
||
// ordinal: 'Mo'
|
||
// callback: function () { this.month() + 1 }
|
||
function addFormatToken (token, padded, ordinal, callback) {
|
||
var func = callback;
|
||
if (typeof callback === 'string') {
|
||
func = function () {
|
||
return this[callback]();
|
||
};
|
||
}
|
||
if (token) {
|
||
formatTokenFunctions[token] = func;
|
||
}
|
||
if (padded) {
|
||
formatTokenFunctions[padded[0]] = function () {
|
||
return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
|
||
};
|
||
}
|
||
if (ordinal) {
|
||
formatTokenFunctions[ordinal] = function () {
|
||
return this.localeData().ordinal(func.apply(this, arguments), token);
|
||
};
|
||
}
|
||
}
|
||
|
||
function removeFormattingTokens(input) {
|
||
if (input.match(/\[[\s\S]/)) {
|
||
return input.replace(/^\[|\]$/g, '');
|
||
}
|
||
return input.replace(/\\/g, '');
|
||
}
|
||
|
||
function makeFormatFunction(format) {
|
||
var array = format.match(formattingTokens), i, length;
|
||
|
||
for (i = 0, length = array.length; i < length; i++) {
|
||
if (formatTokenFunctions[array[i]]) {
|
||
array[i] = formatTokenFunctions[array[i]];
|
||
} else {
|
||
array[i] = removeFormattingTokens(array[i]);
|
||
}
|
||
}
|
||
|
||
return function (mom) {
|
||
var output = '', i;
|
||
for (i = 0; i < length; i++) {
|
||
output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
|
||
}
|
||
return output;
|
||
};
|
||
}
|
||
|
||
// format date using native date object
|
||
function formatMoment(m, format) {
|
||
if (!m.isValid()) {
|
||
return m.localeData().invalidDate();
|
||
}
|
||
|
||
format = expandFormat(format, m.localeData());
|
||
formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
|
||
|
||
return formatFunctions[format](m);
|
||
}
|
||
|
||
function expandFormat(format, locale) {
|
||
var i = 5;
|
||
|
||
function replaceLongDateFormatTokens(input) {
|
||
return locale.longDateFormat(input) || input;
|
||
}
|
||
|
||
localFormattingTokens.lastIndex = 0;
|
||
while (i >= 0 && localFormattingTokens.test(format)) {
|
||
format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
|
||
localFormattingTokens.lastIndex = 0;
|
||
i -= 1;
|
||
}
|
||
|
||
return format;
|
||
}
|
||
|
||
var match1 = /\d/; // 0 - 9
|
||
var match2 = /\d\d/; // 00 - 99
|
||
var match3 = /\d{3}/; // 000 - 999
|
||
var match4 = /\d{4}/; // 0000 - 9999
|
||
var match6 = /[+-]?\d{6}/; // -999999 - 999999
|
||
var match1to2 = /\d\d?/; // 0 - 99
|
||
var match3to4 = /\d\d\d\d?/; // 999 - 9999
|
||
var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999
|
||
var match1to3 = /\d{1,3}/; // 0 - 999
|
||
var match1to4 = /\d{1,4}/; // 0 - 9999
|
||
var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999
|
||
|
||
var matchUnsigned = /\d+/; // 0 - inf
|
||
var matchSigned = /[+-]?\d+/; // -inf - inf
|
||
|
||
var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
|
||
var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
|
||
|
||
var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
|
||
|
||
// any word (or two) characters or numbers including two/three word month in arabic.
|
||
// includes scottish gaelic two word and hyphenated months
|
||
var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
|
||
|
||
|
||
var regexes = {};
|
||
|
||
function addRegexToken (token, regex, strictRegex) {
|
||
regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
|
||
return (isStrict && strictRegex) ? strictRegex : regex;
|
||
};
|
||
}
|
||
|
||
function getParseRegexForToken (token, config) {
|
||
if (!hasOwnProp(regexes, token)) {
|
||
return new RegExp(unescapeFormat(token));
|
||
}
|
||
|
||
return regexes[token](config._strict, config._locale);
|
||
}
|
||
|
||
// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
|
||
function unescapeFormat(s) {
|
||
return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
|
||
return p1 || p2 || p3 || p4;
|
||
}));
|
||
}
|
||
|
||
function regexEscape(s) {
|
||
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
|
||
}
|
||
|
||
var tokens = {};
|
||
|
||
function addParseToken (token, callback) {
|
||
var i, func = callback;
|
||
if (typeof token === 'string') {
|
||
token = [token];
|
||
}
|
||
if (isNumber(callback)) {
|
||
func = function (input, array) {
|
||
array[callback] = toInt(input);
|
||
};
|
||
}
|
||
for (i = 0; i < token.length; i++) {
|
||
tokens[token[i]] = func;
|
||
}
|
||
}
|
||
|
||
function addWeekParseToken (token, callback) {
|
||
addParseToken(token, function (input, array, config, token) {
|
||
config._w = config._w || {};
|
||
callback(input, config._w, config, token);
|
||
});
|
||
}
|
||
|
||
function addTimeToArrayFromToken(token, input, config) {
|
||
if (input != null && hasOwnProp(tokens, token)) {
|
||
tokens[token](input, config._a, config, token);
|
||
}
|
||
}
|
||
|
||
var YEAR = 0;
|
||
var MONTH = 1;
|
||
var DATE = 2;
|
||
var HOUR = 3;
|
||
var MINUTE = 4;
|
||
var SECOND = 5;
|
||
var MILLISECOND = 6;
|
||
var WEEK = 7;
|
||
var WEEKDAY = 8;
|
||
|
||
var indexOf;
|
||
|
||
if (Array.prototype.indexOf) {
|
||
indexOf = Array.prototype.indexOf;
|
||
} else {
|
||
indexOf = function (o) {
|
||
// I know
|
||
var i;
|
||
for (i = 0; i < this.length; ++i) {
|
||
if (this[i] === o) {
|
||
return i;
|
||
}
|
||
}
|
||
return -1;
|
||
};
|
||
}
|
||
|
||
var indexOf$1 = indexOf;
|
||
|
||
function daysInMonth(year, month) {
|
||
return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('M', ['MM', 2], 'Mo', function () {
|
||
return this.month() + 1;
|
||
});
|
||
|
||
addFormatToken('MMM', 0, 0, function (format) {
|
||
return this.localeData().monthsShort(this, format);
|
||
});
|
||
|
||
addFormatToken('MMMM', 0, 0, function (format) {
|
||
return this.localeData().months(this, format);
|
||
});
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('month', 'M');
|
||
|
||
// PRIORITY
|
||
|
||
addUnitPriority('month', 8);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('M', match1to2);
|
||
addRegexToken('MM', match1to2, match2);
|
||
addRegexToken('MMM', function (isStrict, locale) {
|
||
return locale.monthsShortRegex(isStrict);
|
||
});
|
||
addRegexToken('MMMM', function (isStrict, locale) {
|
||
return locale.monthsRegex(isStrict);
|
||
});
|
||
|
||
addParseToken(['M', 'MM'], function (input, array) {
|
||
array[MONTH] = toInt(input) - 1;
|
||
});
|
||
|
||
addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
|
||
var month = config._locale.monthsParse(input, token, config._strict);
|
||
// if we didn't find a month name, mark the date as invalid.
|
||
if (month != null) {
|
||
array[MONTH] = month;
|
||
} else {
|
||
getParsingFlags(config).invalidMonth = input;
|
||
}
|
||
});
|
||
|
||
// LOCALES
|
||
|
||
var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
|
||
var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
|
||
function localeMonths (m, format) {
|
||
if (!m) {
|
||
return this._months;
|
||
}
|
||
return isArray(this._months) ? this._months[m.month()] :
|
||
this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
|
||
}
|
||
|
||
var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
|
||
function localeMonthsShort (m, format) {
|
||
if (!m) {
|
||
return this._monthsShort;
|
||
}
|
||
return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
|
||
this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
|
||
}
|
||
|
||
function handleStrictParse(monthName, format, strict) {
|
||
var i, ii, mom, llc = monthName.toLocaleLowerCase();
|
||
if (!this._monthsParse) {
|
||
// this is not used
|
||
this._monthsParse = [];
|
||
this._longMonthsParse = [];
|
||
this._shortMonthsParse = [];
|
||
for (i = 0; i < 12; ++i) {
|
||
mom = createUTC([2000, i]);
|
||
this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
|
||
this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
|
||
}
|
||
}
|
||
|
||
if (strict) {
|
||
if (format === 'MMM') {
|
||
ii = indexOf$1.call(this._shortMonthsParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
} else {
|
||
ii = indexOf$1.call(this._longMonthsParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
}
|
||
} else {
|
||
if (format === 'MMM') {
|
||
ii = indexOf$1.call(this._shortMonthsParse, llc);
|
||
if (ii !== -1) {
|
||
return ii;
|
||
}
|
||
ii = indexOf$1.call(this._longMonthsParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
} else {
|
||
ii = indexOf$1.call(this._longMonthsParse, llc);
|
||
if (ii !== -1) {
|
||
return ii;
|
||
}
|
||
ii = indexOf$1.call(this._shortMonthsParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
}
|
||
}
|
||
}
|
||
|
||
function localeMonthsParse (monthName, format, strict) {
|
||
var i, mom, regex;
|
||
|
||
if (this._monthsParseExact) {
|
||
return handleStrictParse.call(this, monthName, format, strict);
|
||
}
|
||
|
||
if (!this._monthsParse) {
|
||
this._monthsParse = [];
|
||
this._longMonthsParse = [];
|
||
this._shortMonthsParse = [];
|
||
}
|
||
|
||
// TODO: add sorting
|
||
// Sorting makes sure if one month (or abbr) is a prefix of another
|
||
// see sorting in computeMonthsParse
|
||
for (i = 0; i < 12; i++) {
|
||
// make the regex if we don't have it already
|
||
mom = createUTC([2000, i]);
|
||
if (strict && !this._longMonthsParse[i]) {
|
||
this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
|
||
this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
|
||
}
|
||
if (!strict && !this._monthsParse[i]) {
|
||
regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
|
||
this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
|
||
}
|
||
// test the regex
|
||
if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
|
||
return i;
|
||
} else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
|
||
return i;
|
||
} else if (!strict && this._monthsParse[i].test(monthName)) {
|
||
return i;
|
||
}
|
||
}
|
||
}
|
||
|
||
// MOMENTS
|
||
|
||
function setMonth (mom, value) {
|
||
var dayOfMonth;
|
||
|
||
if (!mom.isValid()) {
|
||
// No op
|
||
return mom;
|
||
}
|
||
|
||
if (typeof value === 'string') {
|
||
if (/^\d+$/.test(value)) {
|
||
value = toInt(value);
|
||
} else {
|
||
value = mom.localeData().monthsParse(value);
|
||
// TODO: Another silent failure?
|
||
if (!isNumber(value)) {
|
||
return mom;
|
||
}
|
||
}
|
||
}
|
||
|
||
dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
|
||
mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
|
||
return mom;
|
||
}
|
||
|
||
function getSetMonth (value) {
|
||
if (value != null) {
|
||
setMonth(this, value);
|
||
hooks.updateOffset(this, true);
|
||
return this;
|
||
} else {
|
||
return get(this, 'Month');
|
||
}
|
||
}
|
||
|
||
function getDaysInMonth () {
|
||
return daysInMonth(this.year(), this.month());
|
||
}
|
||
|
||
var defaultMonthsShortRegex = matchWord;
|
||
function monthsShortRegex (isStrict) {
|
||
if (this._monthsParseExact) {
|
||
if (!hasOwnProp(this, '_monthsRegex')) {
|
||
computeMonthsParse.call(this);
|
||
}
|
||
if (isStrict) {
|
||
return this._monthsShortStrictRegex;
|
||
} else {
|
||
return this._monthsShortRegex;
|
||
}
|
||
} else {
|
||
if (!hasOwnProp(this, '_monthsShortRegex')) {
|
||
this._monthsShortRegex = defaultMonthsShortRegex;
|
||
}
|
||
return this._monthsShortStrictRegex && isStrict ?
|
||
this._monthsShortStrictRegex : this._monthsShortRegex;
|
||
}
|
||
}
|
||
|
||
var defaultMonthsRegex = matchWord;
|
||
function monthsRegex (isStrict) {
|
||
if (this._monthsParseExact) {
|
||
if (!hasOwnProp(this, '_monthsRegex')) {
|
||
computeMonthsParse.call(this);
|
||
}
|
||
if (isStrict) {
|
||
return this._monthsStrictRegex;
|
||
} else {
|
||
return this._monthsRegex;
|
||
}
|
||
} else {
|
||
if (!hasOwnProp(this, '_monthsRegex')) {
|
||
this._monthsRegex = defaultMonthsRegex;
|
||
}
|
||
return this._monthsStrictRegex && isStrict ?
|
||
this._monthsStrictRegex : this._monthsRegex;
|
||
}
|
||
}
|
||
|
||
function computeMonthsParse () {
|
||
function cmpLenRev(a, b) {
|
||
return b.length - a.length;
|
||
}
|
||
|
||
var shortPieces = [], longPieces = [], mixedPieces = [],
|
||
i, mom;
|
||
for (i = 0; i < 12; i++) {
|
||
// make the regex if we don't have it already
|
||
mom = createUTC([2000, i]);
|
||
shortPieces.push(this.monthsShort(mom, ''));
|
||
longPieces.push(this.months(mom, ''));
|
||
mixedPieces.push(this.months(mom, ''));
|
||
mixedPieces.push(this.monthsShort(mom, ''));
|
||
}
|
||
// Sorting makes sure if one month (or abbr) is a prefix of another it
|
||
// will match the longer piece.
|
||
shortPieces.sort(cmpLenRev);
|
||
longPieces.sort(cmpLenRev);
|
||
mixedPieces.sort(cmpLenRev);
|
||
for (i = 0; i < 12; i++) {
|
||
shortPieces[i] = regexEscape(shortPieces[i]);
|
||
longPieces[i] = regexEscape(longPieces[i]);
|
||
}
|
||
for (i = 0; i < 24; i++) {
|
||
mixedPieces[i] = regexEscape(mixedPieces[i]);
|
||
}
|
||
|
||
this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
|
||
this._monthsShortRegex = this._monthsRegex;
|
||
this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
|
||
this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('Y', 0, 0, function () {
|
||
var y = this.year();
|
||
return y <= 9999 ? '' + y : '+' + y;
|
||
});
|
||
|
||
addFormatToken(0, ['YY', 2], 0, function () {
|
||
return this.year() % 100;
|
||
});
|
||
|
||
addFormatToken(0, ['YYYY', 4], 0, 'year');
|
||
addFormatToken(0, ['YYYYY', 5], 0, 'year');
|
||
addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('year', 'y');
|
||
|
||
// PRIORITIES
|
||
|
||
addUnitPriority('year', 1);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('Y', matchSigned);
|
||
addRegexToken('YY', match1to2, match2);
|
||
addRegexToken('YYYY', match1to4, match4);
|
||
addRegexToken('YYYYY', match1to6, match6);
|
||
addRegexToken('YYYYYY', match1to6, match6);
|
||
|
||
addParseToken(['YYYYY', 'YYYYYY'], YEAR);
|
||
addParseToken('YYYY', function (input, array) {
|
||
array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
|
||
});
|
||
addParseToken('YY', function (input, array) {
|
||
array[YEAR] = hooks.parseTwoDigitYear(input);
|
||
});
|
||
addParseToken('Y', function (input, array) {
|
||
array[YEAR] = parseInt(input, 10);
|
||
});
|
||
|
||
// HELPERS
|
||
|
||
function daysInYear(year) {
|
||
return isLeapYear(year) ? 366 : 365;
|
||
}
|
||
|
||
function isLeapYear(year) {
|
||
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
|
||
}
|
||
|
||
// HOOKS
|
||
|
||
hooks.parseTwoDigitYear = function (input) {
|
||
return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
|
||
};
|
||
|
||
// MOMENTS
|
||
|
||
var getSetYear = makeGetSet('FullYear', true);
|
||
|
||
function getIsLeapYear () {
|
||
return isLeapYear(this.year());
|
||
}
|
||
|
||
function createDate (y, m, d, h, M, s, ms) {
|
||
//can't just apply() to create a date:
|
||
//http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
|
||
var date = new Date(y, m, d, h, M, s, ms);
|
||
|
||
//the date constructor remaps years 0-99 to 1900-1999
|
||
if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
|
||
date.setFullYear(y);
|
||
}
|
||
return date;
|
||
}
|
||
|
||
function createUTCDate (y) {
|
||
var date = new Date(Date.UTC.apply(null, arguments));
|
||
|
||
//the Date.UTC function remaps years 0-99 to 1900-1999
|
||
if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
|
||
date.setUTCFullYear(y);
|
||
}
|
||
return date;
|
||
}
|
||
|
||
// start-of-first-week - start-of-year
|
||
function firstWeekOffset(year, dow, doy) {
|
||
var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
|
||
fwd = 7 + dow - doy,
|
||
// first-week day local weekday -- which local weekday is fwd
|
||
fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
|
||
|
||
return -fwdlw + fwd - 1;
|
||
}
|
||
|
||
//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
|
||
function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
|
||
var localWeekday = (7 + weekday - dow) % 7,
|
||
weekOffset = firstWeekOffset(year, dow, doy),
|
||
dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
|
||
resYear, resDayOfYear;
|
||
|
||
if (dayOfYear <= 0) {
|
||
resYear = year - 1;
|
||
resDayOfYear = daysInYear(resYear) + dayOfYear;
|
||
} else if (dayOfYear > daysInYear(year)) {
|
||
resYear = year + 1;
|
||
resDayOfYear = dayOfYear - daysInYear(year);
|
||
} else {
|
||
resYear = year;
|
||
resDayOfYear = dayOfYear;
|
||
}
|
||
|
||
return {
|
||
year: resYear,
|
||
dayOfYear: resDayOfYear
|
||
};
|
||
}
|
||
|
||
function weekOfYear(mom, dow, doy) {
|
||
var weekOffset = firstWeekOffset(mom.year(), dow, doy),
|
||
week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
|
||
resWeek, resYear;
|
||
|
||
if (week < 1) {
|
||
resYear = mom.year() - 1;
|
||
resWeek = week + weeksInYear(resYear, dow, doy);
|
||
} else if (week > weeksInYear(mom.year(), dow, doy)) {
|
||
resWeek = week - weeksInYear(mom.year(), dow, doy);
|
||
resYear = mom.year() + 1;
|
||
} else {
|
||
resYear = mom.year();
|
||
resWeek = week;
|
||
}
|
||
|
||
return {
|
||
week: resWeek,
|
||
year: resYear
|
||
};
|
||
}
|
||
|
||
function weeksInYear(year, dow, doy) {
|
||
var weekOffset = firstWeekOffset(year, dow, doy),
|
||
weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
|
||
return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('w', ['ww', 2], 'wo', 'week');
|
||
addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('week', 'w');
|
||
addUnitAlias('isoWeek', 'W');
|
||
|
||
// PRIORITIES
|
||
|
||
addUnitPriority('week', 5);
|
||
addUnitPriority('isoWeek', 5);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('w', match1to2);
|
||
addRegexToken('ww', match1to2, match2);
|
||
addRegexToken('W', match1to2);
|
||
addRegexToken('WW', match1to2, match2);
|
||
|
||
addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
|
||
week[token.substr(0, 1)] = toInt(input);
|
||
});
|
||
|
||
// HELPERS
|
||
|
||
// LOCALES
|
||
|
||
function localeWeek (mom) {
|
||
return weekOfYear(mom, this._week.dow, this._week.doy).week;
|
||
}
|
||
|
||
var defaultLocaleWeek = {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
};
|
||
|
||
function localeFirstDayOfWeek () {
|
||
return this._week.dow;
|
||
}
|
||
|
||
function localeFirstDayOfYear () {
|
||
return this._week.doy;
|
||
}
|
||
|
||
// MOMENTS
|
||
|
||
function getSetWeek (input) {
|
||
var week = this.localeData().week(this);
|
||
return input == null ? week : this.add((input - week) * 7, 'd');
|
||
}
|
||
|
||
function getSetISOWeek (input) {
|
||
var week = weekOfYear(this, 1, 4).week;
|
||
return input == null ? week : this.add((input - week) * 7, 'd');
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('d', 0, 'do', 'day');
|
||
|
||
addFormatToken('dd', 0, 0, function (format) {
|
||
return this.localeData().weekdaysMin(this, format);
|
||
});
|
||
|
||
addFormatToken('ddd', 0, 0, function (format) {
|
||
return this.localeData().weekdaysShort(this, format);
|
||
});
|
||
|
||
addFormatToken('dddd', 0, 0, function (format) {
|
||
return this.localeData().weekdays(this, format);
|
||
});
|
||
|
||
addFormatToken('e', 0, 0, 'weekday');
|
||
addFormatToken('E', 0, 0, 'isoWeekday');
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('day', 'd');
|
||
addUnitAlias('weekday', 'e');
|
||
addUnitAlias('isoWeekday', 'E');
|
||
|
||
// PRIORITY
|
||
addUnitPriority('day', 11);
|
||
addUnitPriority('weekday', 11);
|
||
addUnitPriority('isoWeekday', 11);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('d', match1to2);
|
||
addRegexToken('e', match1to2);
|
||
addRegexToken('E', match1to2);
|
||
addRegexToken('dd', function (isStrict, locale) {
|
||
return locale.weekdaysMinRegex(isStrict);
|
||
});
|
||
addRegexToken('ddd', function (isStrict, locale) {
|
||
return locale.weekdaysShortRegex(isStrict);
|
||
});
|
||
addRegexToken('dddd', function (isStrict, locale) {
|
||
return locale.weekdaysRegex(isStrict);
|
||
});
|
||
|
||
addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
|
||
var weekday = config._locale.weekdaysParse(input, token, config._strict);
|
||
// if we didn't get a weekday name, mark the date as invalid
|
||
if (weekday != null) {
|
||
week.d = weekday;
|
||
} else {
|
||
getParsingFlags(config).invalidWeekday = input;
|
||
}
|
||
});
|
||
|
||
addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
|
||
week[token] = toInt(input);
|
||
});
|
||
|
||
// HELPERS
|
||
|
||
function parseWeekday(input, locale) {
|
||
if (typeof input !== 'string') {
|
||
return input;
|
||
}
|
||
|
||
if (!isNaN(input)) {
|
||
return parseInt(input, 10);
|
||
}
|
||
|
||
input = locale.weekdaysParse(input);
|
||
if (typeof input === 'number') {
|
||
return input;
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
function parseIsoWeekday(input, locale) {
|
||
if (typeof input === 'string') {
|
||
return locale.weekdaysParse(input) % 7 || 7;
|
||
}
|
||
return isNaN(input) ? null : input;
|
||
}
|
||
|
||
// LOCALES
|
||
|
||
var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
|
||
function localeWeekdays (m, format) {
|
||
if (!m) {
|
||
return this._weekdays;
|
||
}
|
||
return isArray(this._weekdays) ? this._weekdays[m.day()] :
|
||
this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
|
||
}
|
||
|
||
var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
|
||
function localeWeekdaysShort (m) {
|
||
return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
|
||
}
|
||
|
||
var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
|
||
function localeWeekdaysMin (m) {
|
||
return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
|
||
}
|
||
|
||
function handleStrictParse$1(weekdayName, format, strict) {
|
||
var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
|
||
if (!this._weekdaysParse) {
|
||
this._weekdaysParse = [];
|
||
this._shortWeekdaysParse = [];
|
||
this._minWeekdaysParse = [];
|
||
|
||
for (i = 0; i < 7; ++i) {
|
||
mom = createUTC([2000, 1]).day(i);
|
||
this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
|
||
this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
|
||
this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
|
||
}
|
||
}
|
||
|
||
if (strict) {
|
||
if (format === 'dddd') {
|
||
ii = indexOf$1.call(this._weekdaysParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
} else if (format === 'ddd') {
|
||
ii = indexOf$1.call(this._shortWeekdaysParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
} else {
|
||
ii = indexOf$1.call(this._minWeekdaysParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
}
|
||
} else {
|
||
if (format === 'dddd') {
|
||
ii = indexOf$1.call(this._weekdaysParse, llc);
|
||
if (ii !== -1) {
|
||
return ii;
|
||
}
|
||
ii = indexOf$1.call(this._shortWeekdaysParse, llc);
|
||
if (ii !== -1) {
|
||
return ii;
|
||
}
|
||
ii = indexOf$1.call(this._minWeekdaysParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
} else if (format === 'ddd') {
|
||
ii = indexOf$1.call(this._shortWeekdaysParse, llc);
|
||
if (ii !== -1) {
|
||
return ii;
|
||
}
|
||
ii = indexOf$1.call(this._weekdaysParse, llc);
|
||
if (ii !== -1) {
|
||
return ii;
|
||
}
|
||
ii = indexOf$1.call(this._minWeekdaysParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
} else {
|
||
ii = indexOf$1.call(this._minWeekdaysParse, llc);
|
||
if (ii !== -1) {
|
||
return ii;
|
||
}
|
||
ii = indexOf$1.call(this._weekdaysParse, llc);
|
||
if (ii !== -1) {
|
||
return ii;
|
||
}
|
||
ii = indexOf$1.call(this._shortWeekdaysParse, llc);
|
||
return ii !== -1 ? ii : null;
|
||
}
|
||
}
|
||
}
|
||
|
||
function localeWeekdaysParse (weekdayName, format, strict) {
|
||
var i, mom, regex;
|
||
|
||
if (this._weekdaysParseExact) {
|
||
return handleStrictParse$1.call(this, weekdayName, format, strict);
|
||
}
|
||
|
||
if (!this._weekdaysParse) {
|
||
this._weekdaysParse = [];
|
||
this._minWeekdaysParse = [];
|
||
this._shortWeekdaysParse = [];
|
||
this._fullWeekdaysParse = [];
|
||
}
|
||
|
||
for (i = 0; i < 7; i++) {
|
||
// make the regex if we don't have it already
|
||
|
||
mom = createUTC([2000, 1]).day(i);
|
||
if (strict && !this._fullWeekdaysParse[i]) {
|
||
this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
|
||
this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
|
||
this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
|
||
}
|
||
if (!this._weekdaysParse[i]) {
|
||
regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
|
||
this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
|
||
}
|
||
// test the regex
|
||
if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
|
||
return i;
|
||
} else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
|
||
return i;
|
||
} else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
|
||
return i;
|
||
} else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
|
||
return i;
|
||
}
|
||
}
|
||
}
|
||
|
||
// MOMENTS
|
||
|
||
function getSetDayOfWeek (input) {
|
||
if (!this.isValid()) {
|
||
return input != null ? this : NaN;
|
||
}
|
||
var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
|
||
if (input != null) {
|
||
input = parseWeekday(input, this.localeData());
|
||
return this.add(input - day, 'd');
|
||
} else {
|
||
return day;
|
||
}
|
||
}
|
||
|
||
function getSetLocaleDayOfWeek (input) {
|
||
if (!this.isValid()) {
|
||
return input != null ? this : NaN;
|
||
}
|
||
var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
|
||
return input == null ? weekday : this.add(input - weekday, 'd');
|
||
}
|
||
|
||
function getSetISODayOfWeek (input) {
|
||
if (!this.isValid()) {
|
||
return input != null ? this : NaN;
|
||
}
|
||
|
||
// behaves the same as moment#day except
|
||
// as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
|
||
// as a setter, sunday should belong to the previous week.
|
||
|
||
if (input != null) {
|
||
var weekday = parseIsoWeekday(input, this.localeData());
|
||
return this.day(this.day() % 7 ? weekday : weekday - 7);
|
||
} else {
|
||
return this.day() || 7;
|
||
}
|
||
}
|
||
|
||
var defaultWeekdaysRegex = matchWord;
|
||
function weekdaysRegex (isStrict) {
|
||
if (this._weekdaysParseExact) {
|
||
if (!hasOwnProp(this, '_weekdaysRegex')) {
|
||
computeWeekdaysParse.call(this);
|
||
}
|
||
if (isStrict) {
|
||
return this._weekdaysStrictRegex;
|
||
} else {
|
||
return this._weekdaysRegex;
|
||
}
|
||
} else {
|
||
if (!hasOwnProp(this, '_weekdaysRegex')) {
|
||
this._weekdaysRegex = defaultWeekdaysRegex;
|
||
}
|
||
return this._weekdaysStrictRegex && isStrict ?
|
||
this._weekdaysStrictRegex : this._weekdaysRegex;
|
||
}
|
||
}
|
||
|
||
var defaultWeekdaysShortRegex = matchWord;
|
||
function weekdaysShortRegex (isStrict) {
|
||
if (this._weekdaysParseExact) {
|
||
if (!hasOwnProp(this, '_weekdaysRegex')) {
|
||
computeWeekdaysParse.call(this);
|
||
}
|
||
if (isStrict) {
|
||
return this._weekdaysShortStrictRegex;
|
||
} else {
|
||
return this._weekdaysShortRegex;
|
||
}
|
||
} else {
|
||
if (!hasOwnProp(this, '_weekdaysShortRegex')) {
|
||
this._weekdaysShortRegex = defaultWeekdaysShortRegex;
|
||
}
|
||
return this._weekdaysShortStrictRegex && isStrict ?
|
||
this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
|
||
}
|
||
}
|
||
|
||
var defaultWeekdaysMinRegex = matchWord;
|
||
function weekdaysMinRegex (isStrict) {
|
||
if (this._weekdaysParseExact) {
|
||
if (!hasOwnProp(this, '_weekdaysRegex')) {
|
||
computeWeekdaysParse.call(this);
|
||
}
|
||
if (isStrict) {
|
||
return this._weekdaysMinStrictRegex;
|
||
} else {
|
||
return this._weekdaysMinRegex;
|
||
}
|
||
} else {
|
||
if (!hasOwnProp(this, '_weekdaysMinRegex')) {
|
||
this._weekdaysMinRegex = defaultWeekdaysMinRegex;
|
||
}
|
||
return this._weekdaysMinStrictRegex && isStrict ?
|
||
this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
|
||
}
|
||
}
|
||
|
||
|
||
function computeWeekdaysParse () {
|
||
function cmpLenRev(a, b) {
|
||
return b.length - a.length;
|
||
}
|
||
|
||
var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
|
||
i, mom, minp, shortp, longp;
|
||
for (i = 0; i < 7; i++) {
|
||
// make the regex if we don't have it already
|
||
mom = createUTC([2000, 1]).day(i);
|
||
minp = this.weekdaysMin(mom, '');
|
||
shortp = this.weekdaysShort(mom, '');
|
||
longp = this.weekdays(mom, '');
|
||
minPieces.push(minp);
|
||
shortPieces.push(shortp);
|
||
longPieces.push(longp);
|
||
mixedPieces.push(minp);
|
||
mixedPieces.push(shortp);
|
||
mixedPieces.push(longp);
|
||
}
|
||
// Sorting makes sure if one weekday (or abbr) is a prefix of another it
|
||
// will match the longer piece.
|
||
minPieces.sort(cmpLenRev);
|
||
shortPieces.sort(cmpLenRev);
|
||
longPieces.sort(cmpLenRev);
|
||
mixedPieces.sort(cmpLenRev);
|
||
for (i = 0; i < 7; i++) {
|
||
shortPieces[i] = regexEscape(shortPieces[i]);
|
||
longPieces[i] = regexEscape(longPieces[i]);
|
||
mixedPieces[i] = regexEscape(mixedPieces[i]);
|
||
}
|
||
|
||
this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
|
||
this._weekdaysShortRegex = this._weekdaysRegex;
|
||
this._weekdaysMinRegex = this._weekdaysRegex;
|
||
|
||
this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
|
||
this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
|
||
this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
function hFormat() {
|
||
return this.hours() % 12 || 12;
|
||
}
|
||
|
||
function kFormat() {
|
||
return this.hours() || 24;
|
||
}
|
||
|
||
addFormatToken('H', ['HH', 2], 0, 'hour');
|
||
addFormatToken('h', ['hh', 2], 0, hFormat);
|
||
addFormatToken('k', ['kk', 2], 0, kFormat);
|
||
|
||
addFormatToken('hmm', 0, 0, function () {
|
||
return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
|
||
});
|
||
|
||
addFormatToken('hmmss', 0, 0, function () {
|
||
return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
|
||
zeroFill(this.seconds(), 2);
|
||
});
|
||
|
||
addFormatToken('Hmm', 0, 0, function () {
|
||
return '' + this.hours() + zeroFill(this.minutes(), 2);
|
||
});
|
||
|
||
addFormatToken('Hmmss', 0, 0, function () {
|
||
return '' + this.hours() + zeroFill(this.minutes(), 2) +
|
||
zeroFill(this.seconds(), 2);
|
||
});
|
||
|
||
function meridiem (token, lowercase) {
|
||
addFormatToken(token, 0, 0, function () {
|
||
return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
|
||
});
|
||
}
|
||
|
||
meridiem('a', true);
|
||
meridiem('A', false);
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('hour', 'h');
|
||
|
||
// PRIORITY
|
||
addUnitPriority('hour', 13);
|
||
|
||
// PARSING
|
||
|
||
function matchMeridiem (isStrict, locale) {
|
||
return locale._meridiemParse;
|
||
}
|
||
|
||
addRegexToken('a', matchMeridiem);
|
||
addRegexToken('A', matchMeridiem);
|
||
addRegexToken('H', match1to2);
|
||
addRegexToken('h', match1to2);
|
||
addRegexToken('HH', match1to2, match2);
|
||
addRegexToken('hh', match1to2, match2);
|
||
|
||
addRegexToken('hmm', match3to4);
|
||
addRegexToken('hmmss', match5to6);
|
||
addRegexToken('Hmm', match3to4);
|
||
addRegexToken('Hmmss', match5to6);
|
||
|
||
addParseToken(['H', 'HH'], HOUR);
|
||
addParseToken(['a', 'A'], function (input, array, config) {
|
||
config._isPm = config._locale.isPM(input);
|
||
config._meridiem = input;
|
||
});
|
||
addParseToken(['h', 'hh'], function (input, array, config) {
|
||
array[HOUR] = toInt(input);
|
||
getParsingFlags(config).bigHour = true;
|
||
});
|
||
addParseToken('hmm', function (input, array, config) {
|
||
var pos = input.length - 2;
|
||
array[HOUR] = toInt(input.substr(0, pos));
|
||
array[MINUTE] = toInt(input.substr(pos));
|
||
getParsingFlags(config).bigHour = true;
|
||
});
|
||
addParseToken('hmmss', function (input, array, config) {
|
||
var pos1 = input.length - 4;
|
||
var pos2 = input.length - 2;
|
||
array[HOUR] = toInt(input.substr(0, pos1));
|
||
array[MINUTE] = toInt(input.substr(pos1, 2));
|
||
array[SECOND] = toInt(input.substr(pos2));
|
||
getParsingFlags(config).bigHour = true;
|
||
});
|
||
addParseToken('Hmm', function (input, array, config) {
|
||
var pos = input.length - 2;
|
||
array[HOUR] = toInt(input.substr(0, pos));
|
||
array[MINUTE] = toInt(input.substr(pos));
|
||
});
|
||
addParseToken('Hmmss', function (input, array, config) {
|
||
var pos1 = input.length - 4;
|
||
var pos2 = input.length - 2;
|
||
array[HOUR] = toInt(input.substr(0, pos1));
|
||
array[MINUTE] = toInt(input.substr(pos1, 2));
|
||
array[SECOND] = toInt(input.substr(pos2));
|
||
});
|
||
|
||
// LOCALES
|
||
|
||
function localeIsPM (input) {
|
||
// IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
|
||
// Using charAt should be more compatible.
|
||
return ((input + '').toLowerCase().charAt(0) === 'p');
|
||
}
|
||
|
||
var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
|
||
function localeMeridiem (hours, minutes, isLower) {
|
||
if (hours > 11) {
|
||
return isLower ? 'pm' : 'PM';
|
||
} else {
|
||
return isLower ? 'am' : 'AM';
|
||
}
|
||
}
|
||
|
||
|
||
// MOMENTS
|
||
|
||
// Setting the hour should keep the time, because the user explicitly
|
||
// specified which hour he wants. So trying to maintain the same hour (in
|
||
// a new timezone) makes sense. Adding/subtracting hours does not follow
|
||
// this rule.
|
||
var getSetHour = makeGetSet('Hours', true);
|
||
|
||
// months
|
||
// week
|
||
// weekdays
|
||
// meridiem
|
||
var baseConfig = {
|
||
calendar: defaultCalendar,
|
||
longDateFormat: defaultLongDateFormat,
|
||
invalidDate: defaultInvalidDate,
|
||
ordinal: defaultOrdinal,
|
||
ordinalParse: defaultOrdinalParse,
|
||
relativeTime: defaultRelativeTime,
|
||
|
||
months: defaultLocaleMonths,
|
||
monthsShort: defaultLocaleMonthsShort,
|
||
|
||
week: defaultLocaleWeek,
|
||
|
||
weekdays: defaultLocaleWeekdays,
|
||
weekdaysMin: defaultLocaleWeekdaysMin,
|
||
weekdaysShort: defaultLocaleWeekdaysShort,
|
||
|
||
meridiemParse: defaultLocaleMeridiemParse
|
||
};
|
||
|
||
// internal storage for locale config files
|
||
var locales = {};
|
||
var localeFamilies = {};
|
||
var globalLocale;
|
||
|
||
function normalizeLocale(key) {
|
||
return key ? key.toLowerCase().replace('_', '-') : key;
|
||
}
|
||
|
||
// pick the locale from the array
|
||
// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
|
||
// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
|
||
function chooseLocale(names) {
|
||
var i = 0, j, next, locale, split;
|
||
|
||
while (i < names.length) {
|
||
split = normalizeLocale(names[i]).split('-');
|
||
j = split.length;
|
||
next = normalizeLocale(names[i + 1]);
|
||
next = next ? next.split('-') : null;
|
||
while (j > 0) {
|
||
locale = loadLocale(split.slice(0, j).join('-'));
|
||
if (locale) {
|
||
return locale;
|
||
}
|
||
if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
|
||
//the next array item is better than a shallower substring of this one
|
||
break;
|
||
}
|
||
j--;
|
||
}
|
||
i++;
|
||
}
|
||
return null;
|
||
}
|
||
|
||
function loadLocale(name) {
|
||
var oldLocale = null;
|
||
// TODO: Find a better way to register and load all the locales in Node
|
||
if (!locales[name] && (typeof module !== 'undefined') &&
|
||
module && module.exports) {
|
||
try {
|
||
oldLocale = globalLocale._abbr;
|
||
__webpack_require__(40)("./" + name);
|
||
// because defineLocale currently also sets the global locale, we
|
||
// want to undo that for lazy loaded locales
|
||
getSetGlobalLocale(oldLocale);
|
||
} catch (e) { }
|
||
}
|
||
return locales[name];
|
||
}
|
||
|
||
// This function will load locale and then set the global locale. If
|
||
// no arguments are passed in, it will simply return the current global
|
||
// locale key.
|
||
function getSetGlobalLocale (key, values) {
|
||
var data;
|
||
if (key) {
|
||
if (isUndefined(values)) {
|
||
data = getLocale(key);
|
||
}
|
||
else {
|
||
data = defineLocale(key, values);
|
||
}
|
||
|
||
if (data) {
|
||
// moment.duration._locale = moment._locale = data;
|
||
globalLocale = data;
|
||
}
|
||
}
|
||
|
||
return globalLocale._abbr;
|
||
}
|
||
|
||
function defineLocale (name, config) {
|
||
if (config !== null) {
|
||
var parentConfig = baseConfig;
|
||
config.abbr = name;
|
||
if (locales[name] != null) {
|
||
deprecateSimple('defineLocaleOverride',
|
||
'use moment.updateLocale(localeName, config) to change ' +
|
||
'an existing locale. moment.defineLocale(localeName, ' +
|
||
'config) should only be used for creating a new locale ' +
|
||
'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
|
||
parentConfig = locales[name]._config;
|
||
} else if (config.parentLocale != null) {
|
||
if (locales[config.parentLocale] != null) {
|
||
parentConfig = locales[config.parentLocale]._config;
|
||
} else {
|
||
if (!localeFamilies[config.parentLocale]) {
|
||
localeFamilies[config.parentLocale] = [];
|
||
}
|
||
localeFamilies[config.parentLocale].push({
|
||
name: name,
|
||
config: config
|
||
});
|
||
return null;
|
||
}
|
||
}
|
||
locales[name] = new Locale(mergeConfigs(parentConfig, config));
|
||
|
||
if (localeFamilies[name]) {
|
||
localeFamilies[name].forEach(function (x) {
|
||
defineLocale(x.name, x.config);
|
||
});
|
||
}
|
||
|
||
// backwards compat for now: also set the locale
|
||
// make sure we set the locale AFTER all child locales have been
|
||
// created, so we won't end up with the child locale set.
|
||
getSetGlobalLocale(name);
|
||
|
||
|
||
return locales[name];
|
||
} else {
|
||
// useful for testing
|
||
delete locales[name];
|
||
return null;
|
||
}
|
||
}
|
||
|
||
function updateLocale(name, config) {
|
||
if (config != null) {
|
||
var locale, parentConfig = baseConfig;
|
||
// MERGE
|
||
if (locales[name] != null) {
|
||
parentConfig = locales[name]._config;
|
||
}
|
||
config = mergeConfigs(parentConfig, config);
|
||
locale = new Locale(config);
|
||
locale.parentLocale = locales[name];
|
||
locales[name] = locale;
|
||
|
||
// backwards compat for now: also set the locale
|
||
getSetGlobalLocale(name);
|
||
} else {
|
||
// pass null for config to unupdate, useful for tests
|
||
if (locales[name] != null) {
|
||
if (locales[name].parentLocale != null) {
|
||
locales[name] = locales[name].parentLocale;
|
||
} else if (locales[name] != null) {
|
||
delete locales[name];
|
||
}
|
||
}
|
||
}
|
||
return locales[name];
|
||
}
|
||
|
||
// returns locale data
|
||
function getLocale (key) {
|
||
var locale;
|
||
|
||
if (key && key._locale && key._locale._abbr) {
|
||
key = key._locale._abbr;
|
||
}
|
||
|
||
if (!key) {
|
||
return globalLocale;
|
||
}
|
||
|
||
if (!isArray(key)) {
|
||
//short-circuit everything else
|
||
locale = loadLocale(key);
|
||
if (locale) {
|
||
return locale;
|
||
}
|
||
key = [key];
|
||
}
|
||
|
||
return chooseLocale(key);
|
||
}
|
||
|
||
function listLocales() {
|
||
return keys$1(locales);
|
||
}
|
||
|
||
function checkOverflow (m) {
|
||
var overflow;
|
||
var a = m._a;
|
||
|
||
if (a && getParsingFlags(m).overflow === -2) {
|
||
overflow =
|
||
a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
|
||
a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
|
||
a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
|
||
a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
|
||
a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
|
||
a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
|
||
-1;
|
||
|
||
if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
|
||
overflow = DATE;
|
||
}
|
||
if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
|
||
overflow = WEEK;
|
||
}
|
||
if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
|
||
overflow = WEEKDAY;
|
||
}
|
||
|
||
getParsingFlags(m).overflow = overflow;
|
||
}
|
||
|
||
return m;
|
||
}
|
||
|
||
// iso 8601 regex
|
||
// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
|
||
var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
|
||
var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
|
||
|
||
var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
|
||
|
||
var isoDates = [
|
||
['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
|
||
['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
|
||
['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
|
||
['GGGG-[W]WW', /\d{4}-W\d\d/, false],
|
||
['YYYY-DDD', /\d{4}-\d{3}/],
|
||
['YYYY-MM', /\d{4}-\d\d/, false],
|
||
['YYYYYYMMDD', /[+-]\d{10}/],
|
||
['YYYYMMDD', /\d{8}/],
|
||
// YYYYMM is NOT allowed by the standard
|
||
['GGGG[W]WWE', /\d{4}W\d{3}/],
|
||
['GGGG[W]WW', /\d{4}W\d{2}/, false],
|
||
['YYYYDDD', /\d{7}/]
|
||
];
|
||
|
||
// iso time formats and regexes
|
||
var isoTimes = [
|
||
['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
|
||
['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
|
||
['HH:mm:ss', /\d\d:\d\d:\d\d/],
|
||
['HH:mm', /\d\d:\d\d/],
|
||
['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
|
||
['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
|
||
['HHmmss', /\d\d\d\d\d\d/],
|
||
['HHmm', /\d\d\d\d/],
|
||
['HH', /\d\d/]
|
||
];
|
||
|
||
var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
|
||
|
||
// date from iso format
|
||
function configFromISO(config) {
|
||
var i, l,
|
||
string = config._i,
|
||
match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
|
||
allowTime, dateFormat, timeFormat, tzFormat;
|
||
|
||
if (match) {
|
||
getParsingFlags(config).iso = true;
|
||
|
||
for (i = 0, l = isoDates.length; i < l; i++) {
|
||
if (isoDates[i][1].exec(match[1])) {
|
||
dateFormat = isoDates[i][0];
|
||
allowTime = isoDates[i][2] !== false;
|
||
break;
|
||
}
|
||
}
|
||
if (dateFormat == null) {
|
||
config._isValid = false;
|
||
return;
|
||
}
|
||
if (match[3]) {
|
||
for (i = 0, l = isoTimes.length; i < l; i++) {
|
||
if (isoTimes[i][1].exec(match[3])) {
|
||
// match[2] should be 'T' or space
|
||
timeFormat = (match[2] || ' ') + isoTimes[i][0];
|
||
break;
|
||
}
|
||
}
|
||
if (timeFormat == null) {
|
||
config._isValid = false;
|
||
return;
|
||
}
|
||
}
|
||
if (!allowTime && timeFormat != null) {
|
||
config._isValid = false;
|
||
return;
|
||
}
|
||
if (match[4]) {
|
||
if (tzRegex.exec(match[4])) {
|
||
tzFormat = 'Z';
|
||
} else {
|
||
config._isValid = false;
|
||
return;
|
||
}
|
||
}
|
||
config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
|
||
configFromStringAndFormat(config);
|
||
} else {
|
||
config._isValid = false;
|
||
}
|
||
}
|
||
|
||
// date from iso format or fallback
|
||
function configFromString(config) {
|
||
var matched = aspNetJsonRegex.exec(config._i);
|
||
|
||
if (matched !== null) {
|
||
config._d = new Date(+matched[1]);
|
||
return;
|
||
}
|
||
|
||
configFromISO(config);
|
||
if (config._isValid === false) {
|
||
delete config._isValid;
|
||
hooks.createFromInputFallback(config);
|
||
}
|
||
}
|
||
|
||
hooks.createFromInputFallback = deprecate(
|
||
'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' +
|
||
'which is not reliable across all browsers and versions. Non ISO date formats are ' +
|
||
'discouraged and will be removed in an upcoming major release. Please refer to ' +
|
||
'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
|
||
function (config) {
|
||
config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
|
||
}
|
||
);
|
||
|
||
// Pick the first defined of two or three arguments.
|
||
function defaults(a, b, c) {
|
||
if (a != null) {
|
||
return a;
|
||
}
|
||
if (b != null) {
|
||
return b;
|
||
}
|
||
return c;
|
||
}
|
||
|
||
function currentDateArray(config) {
|
||
// hooks is actually the exported moment object
|
||
var nowValue = new Date(hooks.now());
|
||
if (config._useUTC) {
|
||
return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
|
||
}
|
||
return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
|
||
}
|
||
|
||
// convert an array to a date.
|
||
// the array should mirror the parameters below
|
||
// note: all values past the year are optional and will default to the lowest possible value.
|
||
// [year, month, day , hour, minute, second, millisecond]
|
||
function configFromArray (config) {
|
||
var i, date, input = [], currentDate, yearToUse;
|
||
|
||
if (config._d) {
|
||
return;
|
||
}
|
||
|
||
currentDate = currentDateArray(config);
|
||
|
||
//compute day of the year from weeks and weekdays
|
||
if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
|
||
dayOfYearFromWeekInfo(config);
|
||
}
|
||
|
||
//if the day of the year is set, figure out what it is
|
||
if (config._dayOfYear) {
|
||
yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
|
||
|
||
if (config._dayOfYear > daysInYear(yearToUse)) {
|
||
getParsingFlags(config)._overflowDayOfYear = true;
|
||
}
|
||
|
||
date = createUTCDate(yearToUse, 0, config._dayOfYear);
|
||
config._a[MONTH] = date.getUTCMonth();
|
||
config._a[DATE] = date.getUTCDate();
|
||
}
|
||
|
||
// Default to current date.
|
||
// * if no year, month, day of month are given, default to today
|
||
// * if day of month is given, default month and year
|
||
// * if month is given, default only year
|
||
// * if year is given, don't default anything
|
||
for (i = 0; i < 3 && config._a[i] == null; ++i) {
|
||
config._a[i] = input[i] = currentDate[i];
|
||
}
|
||
|
||
// Zero out whatever was not defaulted, including time
|
||
for (; i < 7; i++) {
|
||
config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
|
||
}
|
||
|
||
// Check for 24:00:00.000
|
||
if (config._a[HOUR] === 24 &&
|
||
config._a[MINUTE] === 0 &&
|
||
config._a[SECOND] === 0 &&
|
||
config._a[MILLISECOND] === 0) {
|
||
config._nextDay = true;
|
||
config._a[HOUR] = 0;
|
||
}
|
||
|
||
config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
|
||
// Apply timezone offset from input. The actual utcOffset can be changed
|
||
// with parseZone.
|
||
if (config._tzm != null) {
|
||
config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
|
||
}
|
||
|
||
if (config._nextDay) {
|
||
config._a[HOUR] = 24;
|
||
}
|
||
}
|
||
|
||
function dayOfYearFromWeekInfo(config) {
|
||
var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
|
||
|
||
w = config._w;
|
||
if (w.GG != null || w.W != null || w.E != null) {
|
||
dow = 1;
|
||
doy = 4;
|
||
|
||
// TODO: We need to take the current isoWeekYear, but that depends on
|
||
// how we interpret now (local, utc, fixed offset). So create
|
||
// a now version of current config (take local/utc/offset flags, and
|
||
// create now).
|
||
weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
|
||
week = defaults(w.W, 1);
|
||
weekday = defaults(w.E, 1);
|
||
if (weekday < 1 || weekday > 7) {
|
||
weekdayOverflow = true;
|
||
}
|
||
} else {
|
||
dow = config._locale._week.dow;
|
||
doy = config._locale._week.doy;
|
||
|
||
var curWeek = weekOfYear(createLocal(), dow, doy);
|
||
|
||
weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
|
||
|
||
// Default to current week.
|
||
week = defaults(w.w, curWeek.week);
|
||
|
||
if (w.d != null) {
|
||
// weekday -- low day numbers are considered next week
|
||
weekday = w.d;
|
||
if (weekday < 0 || weekday > 6) {
|
||
weekdayOverflow = true;
|
||
}
|
||
} else if (w.e != null) {
|
||
// local weekday -- counting starts from begining of week
|
||
weekday = w.e + dow;
|
||
if (w.e < 0 || w.e > 6) {
|
||
weekdayOverflow = true;
|
||
}
|
||
} else {
|
||
// default to begining of week
|
||
weekday = dow;
|
||
}
|
||
}
|
||
if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
|
||
getParsingFlags(config)._overflowWeeks = true;
|
||
} else if (weekdayOverflow != null) {
|
||
getParsingFlags(config)._overflowWeekday = true;
|
||
} else {
|
||
temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
|
||
config._a[YEAR] = temp.year;
|
||
config._dayOfYear = temp.dayOfYear;
|
||
}
|
||
}
|
||
|
||
// constant that refers to the ISO standard
|
||
hooks.ISO_8601 = function () {};
|
||
|
||
// date from string and format string
|
||
function configFromStringAndFormat(config) {
|
||
// TODO: Move this to another part of the creation flow to prevent circular deps
|
||
if (config._f === hooks.ISO_8601) {
|
||
configFromISO(config);
|
||
return;
|
||
}
|
||
|
||
config._a = [];
|
||
getParsingFlags(config).empty = true;
|
||
|
||
// This array is used to make a Date, either with `new Date` or `Date.UTC`
|
||
var string = '' + config._i,
|
||
i, parsedInput, tokens, token, skipped,
|
||
stringLength = string.length,
|
||
totalParsedInputLength = 0;
|
||
|
||
tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
|
||
|
||
for (i = 0; i < tokens.length; i++) {
|
||
token = tokens[i];
|
||
parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
|
||
// console.log('token', token, 'parsedInput', parsedInput,
|
||
// 'regex', getParseRegexForToken(token, config));
|
||
if (parsedInput) {
|
||
skipped = string.substr(0, string.indexOf(parsedInput));
|
||
if (skipped.length > 0) {
|
||
getParsingFlags(config).unusedInput.push(skipped);
|
||
}
|
||
string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
|
||
totalParsedInputLength += parsedInput.length;
|
||
}
|
||
// don't parse if it's not a known token
|
||
if (formatTokenFunctions[token]) {
|
||
if (parsedInput) {
|
||
getParsingFlags(config).empty = false;
|
||
}
|
||
else {
|
||
getParsingFlags(config).unusedTokens.push(token);
|
||
}
|
||
addTimeToArrayFromToken(token, parsedInput, config);
|
||
}
|
||
else if (config._strict && !parsedInput) {
|
||
getParsingFlags(config).unusedTokens.push(token);
|
||
}
|
||
}
|
||
|
||
// add remaining unparsed input length to the string
|
||
getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
|
||
if (string.length > 0) {
|
||
getParsingFlags(config).unusedInput.push(string);
|
||
}
|
||
|
||
// clear _12h flag if hour is <= 12
|
||
if (config._a[HOUR] <= 12 &&
|
||
getParsingFlags(config).bigHour === true &&
|
||
config._a[HOUR] > 0) {
|
||
getParsingFlags(config).bigHour = undefined;
|
||
}
|
||
|
||
getParsingFlags(config).parsedDateParts = config._a.slice(0);
|
||
getParsingFlags(config).meridiem = config._meridiem;
|
||
// handle meridiem
|
||
config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
|
||
|
||
configFromArray(config);
|
||
checkOverflow(config);
|
||
}
|
||
|
||
|
||
function meridiemFixWrap (locale, hour, meridiem) {
|
||
var isPm;
|
||
|
||
if (meridiem == null) {
|
||
// nothing to do
|
||
return hour;
|
||
}
|
||
if (locale.meridiemHour != null) {
|
||
return locale.meridiemHour(hour, meridiem);
|
||
} else if (locale.isPM != null) {
|
||
// Fallback
|
||
isPm = locale.isPM(meridiem);
|
||
if (isPm && hour < 12) {
|
||
hour += 12;
|
||
}
|
||
if (!isPm && hour === 12) {
|
||
hour = 0;
|
||
}
|
||
return hour;
|
||
} else {
|
||
// this is not supposed to happen
|
||
return hour;
|
||
}
|
||
}
|
||
|
||
// date from string and array of format strings
|
||
function configFromStringAndArray(config) {
|
||
var tempConfig,
|
||
bestMoment,
|
||
|
||
scoreToBeat,
|
||
i,
|
||
currentScore;
|
||
|
||
if (config._f.length === 0) {
|
||
getParsingFlags(config).invalidFormat = true;
|
||
config._d = new Date(NaN);
|
||
return;
|
||
}
|
||
|
||
for (i = 0; i < config._f.length; i++) {
|
||
currentScore = 0;
|
||
tempConfig = copyConfig({}, config);
|
||
if (config._useUTC != null) {
|
||
tempConfig._useUTC = config._useUTC;
|
||
}
|
||
tempConfig._f = config._f[i];
|
||
configFromStringAndFormat(tempConfig);
|
||
|
||
if (!isValid(tempConfig)) {
|
||
continue;
|
||
}
|
||
|
||
// if there is any input that was not parsed add a penalty for that format
|
||
currentScore += getParsingFlags(tempConfig).charsLeftOver;
|
||
|
||
//or tokens
|
||
currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
|
||
|
||
getParsingFlags(tempConfig).score = currentScore;
|
||
|
||
if (scoreToBeat == null || currentScore < scoreToBeat) {
|
||
scoreToBeat = currentScore;
|
||
bestMoment = tempConfig;
|
||
}
|
||
}
|
||
|
||
extend(config, bestMoment || tempConfig);
|
||
}
|
||
|
||
function configFromObject(config) {
|
||
if (config._d) {
|
||
return;
|
||
}
|
||
|
||
var i = normalizeObjectUnits(config._i);
|
||
config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
|
||
return obj && parseInt(obj, 10);
|
||
});
|
||
|
||
configFromArray(config);
|
||
}
|
||
|
||
function createFromConfig (config) {
|
||
var res = new Moment(checkOverflow(prepareConfig(config)));
|
||
if (res._nextDay) {
|
||
// Adding is smart enough around DST
|
||
res.add(1, 'd');
|
||
res._nextDay = undefined;
|
||
}
|
||
|
||
return res;
|
||
}
|
||
|
||
function prepareConfig (config) {
|
||
var input = config._i,
|
||
format = config._f;
|
||
|
||
config._locale = config._locale || getLocale(config._l);
|
||
|
||
if (input === null || (format === undefined && input === '')) {
|
||
return createInvalid({nullInput: true});
|
||
}
|
||
|
||
if (typeof input === 'string') {
|
||
config._i = input = config._locale.preparse(input);
|
||
}
|
||
|
||
if (isMoment(input)) {
|
||
return new Moment(checkOverflow(input));
|
||
} else if (isDate(input)) {
|
||
config._d = input;
|
||
} else if (isArray(format)) {
|
||
configFromStringAndArray(config);
|
||
} else if (format) {
|
||
configFromStringAndFormat(config);
|
||
} else {
|
||
configFromInput(config);
|
||
}
|
||
|
||
if (!isValid(config)) {
|
||
config._d = null;
|
||
}
|
||
|
||
return config;
|
||
}
|
||
|
||
function configFromInput(config) {
|
||
var input = config._i;
|
||
if (input === undefined) {
|
||
config._d = new Date(hooks.now());
|
||
} else if (isDate(input)) {
|
||
config._d = new Date(input.valueOf());
|
||
} else if (typeof input === 'string') {
|
||
configFromString(config);
|
||
} else if (isArray(input)) {
|
||
config._a = map(input.slice(0), function (obj) {
|
||
return parseInt(obj, 10);
|
||
});
|
||
configFromArray(config);
|
||
} else if (typeof(input) === 'object') {
|
||
configFromObject(config);
|
||
} else if (isNumber(input)) {
|
||
// from milliseconds
|
||
config._d = new Date(input);
|
||
} else {
|
||
hooks.createFromInputFallback(config);
|
||
}
|
||
}
|
||
|
||
function createLocalOrUTC (input, format, locale, strict, isUTC) {
|
||
var c = {};
|
||
|
||
if (locale === true || locale === false) {
|
||
strict = locale;
|
||
locale = undefined;
|
||
}
|
||
|
||
if ((isObject(input) && isObjectEmpty(input)) ||
|
||
(isArray(input) && input.length === 0)) {
|
||
input = undefined;
|
||
}
|
||
// object construction must be done this way.
|
||
// https://github.com/moment/moment/issues/1423
|
||
c._isAMomentObject = true;
|
||
c._useUTC = c._isUTC = isUTC;
|
||
c._l = locale;
|
||
c._i = input;
|
||
c._f = format;
|
||
c._strict = strict;
|
||
|
||
return createFromConfig(c);
|
||
}
|
||
|
||
function createLocal (input, format, locale, strict) {
|
||
return createLocalOrUTC(input, format, locale, strict, false);
|
||
}
|
||
|
||
var prototypeMin = deprecate(
|
||
'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
|
||
function () {
|
||
var other = createLocal.apply(null, arguments);
|
||
if (this.isValid() && other.isValid()) {
|
||
return other < this ? this : other;
|
||
} else {
|
||
return createInvalid();
|
||
}
|
||
}
|
||
);
|
||
|
||
var prototypeMax = deprecate(
|
||
'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
|
||
function () {
|
||
var other = createLocal.apply(null, arguments);
|
||
if (this.isValid() && other.isValid()) {
|
||
return other > this ? this : other;
|
||
} else {
|
||
return createInvalid();
|
||
}
|
||
}
|
||
);
|
||
|
||
// Pick a moment m from moments so that m[fn](other) is true for all
|
||
// other. This relies on the function fn to be transitive.
|
||
//
|
||
// moments should either be an array of moment objects or an array, whose
|
||
// first element is an array of moment objects.
|
||
function pickBy(fn, moments) {
|
||
var res, i;
|
||
if (moments.length === 1 && isArray(moments[0])) {
|
||
moments = moments[0];
|
||
}
|
||
if (!moments.length) {
|
||
return createLocal();
|
||
}
|
||
res = moments[0];
|
||
for (i = 1; i < moments.length; ++i) {
|
||
if (!moments[i].isValid() || moments[i][fn](res)) {
|
||
res = moments[i];
|
||
}
|
||
}
|
||
return res;
|
||
}
|
||
|
||
// TODO: Use [].sort instead?
|
||
function min () {
|
||
var args = [].slice.call(arguments, 0);
|
||
|
||
return pickBy('isBefore', args);
|
||
}
|
||
|
||
function max () {
|
||
var args = [].slice.call(arguments, 0);
|
||
|
||
return pickBy('isAfter', args);
|
||
}
|
||
|
||
var now = function () {
|
||
return Date.now ? Date.now() : +(new Date());
|
||
};
|
||
|
||
function Duration (duration) {
|
||
var normalizedInput = normalizeObjectUnits(duration),
|
||
years = normalizedInput.year || 0,
|
||
quarters = normalizedInput.quarter || 0,
|
||
months = normalizedInput.month || 0,
|
||
weeks = normalizedInput.week || 0,
|
||
days = normalizedInput.day || 0,
|
||
hours = normalizedInput.hour || 0,
|
||
minutes = normalizedInput.minute || 0,
|
||
seconds = normalizedInput.second || 0,
|
||
milliseconds = normalizedInput.millisecond || 0;
|
||
|
||
// representation for dateAddRemove
|
||
this._milliseconds = +milliseconds +
|
||
seconds * 1e3 + // 1000
|
||
minutes * 6e4 + // 1000 * 60
|
||
hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
|
||
// Because of dateAddRemove treats 24 hours as different from a
|
||
// day when working around DST, we need to store them separately
|
||
this._days = +days +
|
||
weeks * 7;
|
||
// It is impossible translate months into days without knowing
|
||
// which months you are are talking about, so we have to store
|
||
// it separately.
|
||
this._months = +months +
|
||
quarters * 3 +
|
||
years * 12;
|
||
|
||
this._data = {};
|
||
|
||
this._locale = getLocale();
|
||
|
||
this._bubble();
|
||
}
|
||
|
||
function isDuration (obj) {
|
||
return obj instanceof Duration;
|
||
}
|
||
|
||
function absRound (number) {
|
||
if (number < 0) {
|
||
return Math.round(-1 * number) * -1;
|
||
} else {
|
||
return Math.round(number);
|
||
}
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
function offset (token, separator) {
|
||
addFormatToken(token, 0, 0, function () {
|
||
var offset = this.utcOffset();
|
||
var sign = '+';
|
||
if (offset < 0) {
|
||
offset = -offset;
|
||
sign = '-';
|
||
}
|
||
return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
|
||
});
|
||
}
|
||
|
||
offset('Z', ':');
|
||
offset('ZZ', '');
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('Z', matchShortOffset);
|
||
addRegexToken('ZZ', matchShortOffset);
|
||
addParseToken(['Z', 'ZZ'], function (input, array, config) {
|
||
config._useUTC = true;
|
||
config._tzm = offsetFromString(matchShortOffset, input);
|
||
});
|
||
|
||
// HELPERS
|
||
|
||
// timezone chunker
|
||
// '+10:00' > ['10', '00']
|
||
// '-1530' > ['-15', '30']
|
||
var chunkOffset = /([\+\-]|\d\d)/gi;
|
||
|
||
function offsetFromString(matcher, string) {
|
||
var matches = (string || '').match(matcher);
|
||
|
||
if (matches === null) {
|
||
return null;
|
||
}
|
||
|
||
var chunk = matches[matches.length - 1] || [];
|
||
var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
|
||
var minutes = +(parts[1] * 60) + toInt(parts[2]);
|
||
|
||
return minutes === 0 ?
|
||
0 :
|
||
parts[0] === '+' ? minutes : -minutes;
|
||
}
|
||
|
||
// Return a moment from input, that is local/utc/zone equivalent to model.
|
||
function cloneWithOffset(input, model) {
|
||
var res, diff;
|
||
if (model._isUTC) {
|
||
res = model.clone();
|
||
diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
|
||
// Use low-level api, because this fn is low-level api.
|
||
res._d.setTime(res._d.valueOf() + diff);
|
||
hooks.updateOffset(res, false);
|
||
return res;
|
||
} else {
|
||
return createLocal(input).local();
|
||
}
|
||
}
|
||
|
||
function getDateOffset (m) {
|
||
// On Firefox.24 Date#getTimezoneOffset returns a floating point.
|
||
// https://github.com/moment/moment/pull/1871
|
||
return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
|
||
}
|
||
|
||
// HOOKS
|
||
|
||
// This function will be called whenever a moment is mutated.
|
||
// It is intended to keep the offset in sync with the timezone.
|
||
hooks.updateOffset = function () {};
|
||
|
||
// MOMENTS
|
||
|
||
// keepLocalTime = true means only change the timezone, without
|
||
// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
|
||
// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
|
||
// +0200, so we adjust the time as needed, to be valid.
|
||
//
|
||
// Keeping the time actually adds/subtracts (one hour)
|
||
// from the actual represented time. That is why we call updateOffset
|
||
// a second time. In case it wants us to change the offset again
|
||
// _changeInProgress == true case, then we have to adjust, because
|
||
// there is no such time in the given timezone.
|
||
function getSetOffset (input, keepLocalTime) {
|
||
var offset = this._offset || 0,
|
||
localAdjust;
|
||
if (!this.isValid()) {
|
||
return input != null ? this : NaN;
|
||
}
|
||
if (input != null) {
|
||
if (typeof input === 'string') {
|
||
input = offsetFromString(matchShortOffset, input);
|
||
if (input === null) {
|
||
return this;
|
||
}
|
||
} else if (Math.abs(input) < 16) {
|
||
input = input * 60;
|
||
}
|
||
if (!this._isUTC && keepLocalTime) {
|
||
localAdjust = getDateOffset(this);
|
||
}
|
||
this._offset = input;
|
||
this._isUTC = true;
|
||
if (localAdjust != null) {
|
||
this.add(localAdjust, 'm');
|
||
}
|
||
if (offset !== input) {
|
||
if (!keepLocalTime || this._changeInProgress) {
|
||
addSubtract(this, createDuration(input - offset, 'm'), 1, false);
|
||
} else if (!this._changeInProgress) {
|
||
this._changeInProgress = true;
|
||
hooks.updateOffset(this, true);
|
||
this._changeInProgress = null;
|
||
}
|
||
}
|
||
return this;
|
||
} else {
|
||
return this._isUTC ? offset : getDateOffset(this);
|
||
}
|
||
}
|
||
|
||
function getSetZone (input, keepLocalTime) {
|
||
if (input != null) {
|
||
if (typeof input !== 'string') {
|
||
input = -input;
|
||
}
|
||
|
||
this.utcOffset(input, keepLocalTime);
|
||
|
||
return this;
|
||
} else {
|
||
return -this.utcOffset();
|
||
}
|
||
}
|
||
|
||
function setOffsetToUTC (keepLocalTime) {
|
||
return this.utcOffset(0, keepLocalTime);
|
||
}
|
||
|
||
function setOffsetToLocal (keepLocalTime) {
|
||
if (this._isUTC) {
|
||
this.utcOffset(0, keepLocalTime);
|
||
this._isUTC = false;
|
||
|
||
if (keepLocalTime) {
|
||
this.subtract(getDateOffset(this), 'm');
|
||
}
|
||
}
|
||
return this;
|
||
}
|
||
|
||
function setOffsetToParsedOffset () {
|
||
if (this._tzm != null) {
|
||
this.utcOffset(this._tzm);
|
||
} else if (typeof this._i === 'string') {
|
||
var tZone = offsetFromString(matchOffset, this._i);
|
||
if (tZone != null) {
|
||
this.utcOffset(tZone);
|
||
}
|
||
else {
|
||
this.utcOffset(0, true);
|
||
}
|
||
}
|
||
return this;
|
||
}
|
||
|
||
function hasAlignedHourOffset (input) {
|
||
if (!this.isValid()) {
|
||
return false;
|
||
}
|
||
input = input ? createLocal(input).utcOffset() : 0;
|
||
|
||
return (this.utcOffset() - input) % 60 === 0;
|
||
}
|
||
|
||
function isDaylightSavingTime () {
|
||
return (
|
||
this.utcOffset() > this.clone().month(0).utcOffset() ||
|
||
this.utcOffset() > this.clone().month(5).utcOffset()
|
||
);
|
||
}
|
||
|
||
function isDaylightSavingTimeShifted () {
|
||
if (!isUndefined(this._isDSTShifted)) {
|
||
return this._isDSTShifted;
|
||
}
|
||
|
||
var c = {};
|
||
|
||
copyConfig(c, this);
|
||
c = prepareConfig(c);
|
||
|
||
if (c._a) {
|
||
var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
|
||
this._isDSTShifted = this.isValid() &&
|
||
compareArrays(c._a, other.toArray()) > 0;
|
||
} else {
|
||
this._isDSTShifted = false;
|
||
}
|
||
|
||
return this._isDSTShifted;
|
||
}
|
||
|
||
function isLocal () {
|
||
return this.isValid() ? !this._isUTC : false;
|
||
}
|
||
|
||
function isUtcOffset () {
|
||
return this.isValid() ? this._isUTC : false;
|
||
}
|
||
|
||
function isUtc () {
|
||
return this.isValid() ? this._isUTC && this._offset === 0 : false;
|
||
}
|
||
|
||
// ASP.NET json date format regex
|
||
var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
|
||
|
||
// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
|
||
// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
|
||
// and further modified to allow for strings containing both week and day
|
||
var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;
|
||
|
||
function createDuration (input, key) {
|
||
var duration = input,
|
||
// matching against regexp is expensive, do it on demand
|
||
match = null,
|
||
sign,
|
||
ret,
|
||
diffRes;
|
||
|
||
if (isDuration(input)) {
|
||
duration = {
|
||
ms : input._milliseconds,
|
||
d : input._days,
|
||
M : input._months
|
||
};
|
||
} else if (isNumber(input)) {
|
||
duration = {};
|
||
if (key) {
|
||
duration[key] = input;
|
||
} else {
|
||
duration.milliseconds = input;
|
||
}
|
||
} else if (!!(match = aspNetRegex.exec(input))) {
|
||
sign = (match[1] === '-') ? -1 : 1;
|
||
duration = {
|
||
y : 0,
|
||
d : toInt(match[DATE]) * sign,
|
||
h : toInt(match[HOUR]) * sign,
|
||
m : toInt(match[MINUTE]) * sign,
|
||
s : toInt(match[SECOND]) * sign,
|
||
ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
|
||
};
|
||
} else if (!!(match = isoRegex.exec(input))) {
|
||
sign = (match[1] === '-') ? -1 : 1;
|
||
duration = {
|
||
y : parseIso(match[2], sign),
|
||
M : parseIso(match[3], sign),
|
||
w : parseIso(match[4], sign),
|
||
d : parseIso(match[5], sign),
|
||
h : parseIso(match[6], sign),
|
||
m : parseIso(match[7], sign),
|
||
s : parseIso(match[8], sign)
|
||
};
|
||
} else if (duration == null) {// checks for null or undefined
|
||
duration = {};
|
||
} else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
|
||
diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
|
||
|
||
duration = {};
|
||
duration.ms = diffRes.milliseconds;
|
||
duration.M = diffRes.months;
|
||
}
|
||
|
||
ret = new Duration(duration);
|
||
|
||
if (isDuration(input) && hasOwnProp(input, '_locale')) {
|
||
ret._locale = input._locale;
|
||
}
|
||
|
||
return ret;
|
||
}
|
||
|
||
createDuration.fn = Duration.prototype;
|
||
|
||
function parseIso (inp, sign) {
|
||
// We'd normally use ~~inp for this, but unfortunately it also
|
||
// converts floats to ints.
|
||
// inp may be undefined, so careful calling replace on it.
|
||
var res = inp && parseFloat(inp.replace(',', '.'));
|
||
// apply sign while we're at it
|
||
return (isNaN(res) ? 0 : res) * sign;
|
||
}
|
||
|
||
function positiveMomentsDifference(base, other) {
|
||
var res = {milliseconds: 0, months: 0};
|
||
|
||
res.months = other.month() - base.month() +
|
||
(other.year() - base.year()) * 12;
|
||
if (base.clone().add(res.months, 'M').isAfter(other)) {
|
||
--res.months;
|
||
}
|
||
|
||
res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
|
||
|
||
return res;
|
||
}
|
||
|
||
function momentsDifference(base, other) {
|
||
var res;
|
||
if (!(base.isValid() && other.isValid())) {
|
||
return {milliseconds: 0, months: 0};
|
||
}
|
||
|
||
other = cloneWithOffset(other, base);
|
||
if (base.isBefore(other)) {
|
||
res = positiveMomentsDifference(base, other);
|
||
} else {
|
||
res = positiveMomentsDifference(other, base);
|
||
res.milliseconds = -res.milliseconds;
|
||
res.months = -res.months;
|
||
}
|
||
|
||
return res;
|
||
}
|
||
|
||
// TODO: remove 'name' arg after deprecation is removed
|
||
function createAdder(direction, name) {
|
||
return function (val, period) {
|
||
var dur, tmp;
|
||
//invert the arguments, but complain about it
|
||
if (period !== null && !isNaN(+period)) {
|
||
deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
|
||
'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
|
||
tmp = val; val = period; period = tmp;
|
||
}
|
||
|
||
val = typeof val === 'string' ? +val : val;
|
||
dur = createDuration(val, period);
|
||
addSubtract(this, dur, direction);
|
||
return this;
|
||
};
|
||
}
|
||
|
||
function addSubtract (mom, duration, isAdding, updateOffset) {
|
||
var milliseconds = duration._milliseconds,
|
||
days = absRound(duration._days),
|
||
months = absRound(duration._months);
|
||
|
||
if (!mom.isValid()) {
|
||
// No op
|
||
return;
|
||
}
|
||
|
||
updateOffset = updateOffset == null ? true : updateOffset;
|
||
|
||
if (milliseconds) {
|
||
mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
|
||
}
|
||
if (days) {
|
||
set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
|
||
}
|
||
if (months) {
|
||
setMonth(mom, get(mom, 'Month') + months * isAdding);
|
||
}
|
||
if (updateOffset) {
|
||
hooks.updateOffset(mom, days || months);
|
||
}
|
||
}
|
||
|
||
var add = createAdder(1, 'add');
|
||
var subtract = createAdder(-1, 'subtract');
|
||
|
||
function getCalendarFormat(myMoment, now) {
|
||
var diff = myMoment.diff(now, 'days', true);
|
||
return diff < -6 ? 'sameElse' :
|
||
diff < -1 ? 'lastWeek' :
|
||
diff < 0 ? 'lastDay' :
|
||
diff < 1 ? 'sameDay' :
|
||
diff < 2 ? 'nextDay' :
|
||
diff < 7 ? 'nextWeek' : 'sameElse';
|
||
}
|
||
|
||
function calendar$1 (time, formats) {
|
||
// We want to compare the start of today, vs this.
|
||
// Getting start-of-today depends on whether we're local/utc/offset or not.
|
||
var now = time || createLocal(),
|
||
sod = cloneWithOffset(now, this).startOf('day'),
|
||
format = hooks.calendarFormat(this, sod) || 'sameElse';
|
||
|
||
var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
|
||
|
||
return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
|
||
}
|
||
|
||
function clone () {
|
||
return new Moment(this);
|
||
}
|
||
|
||
function isAfter (input, units) {
|
||
var localInput = isMoment(input) ? input : createLocal(input);
|
||
if (!(this.isValid() && localInput.isValid())) {
|
||
return false;
|
||
}
|
||
units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
|
||
if (units === 'millisecond') {
|
||
return this.valueOf() > localInput.valueOf();
|
||
} else {
|
||
return localInput.valueOf() < this.clone().startOf(units).valueOf();
|
||
}
|
||
}
|
||
|
||
function isBefore (input, units) {
|
||
var localInput = isMoment(input) ? input : createLocal(input);
|
||
if (!(this.isValid() && localInput.isValid())) {
|
||
return false;
|
||
}
|
||
units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
|
||
if (units === 'millisecond') {
|
||
return this.valueOf() < localInput.valueOf();
|
||
} else {
|
||
return this.clone().endOf(units).valueOf() < localInput.valueOf();
|
||
}
|
||
}
|
||
|
||
function isBetween (from, to, units, inclusivity) {
|
||
inclusivity = inclusivity || '()';
|
||
return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
|
||
(inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
|
||
}
|
||
|
||
function isSame (input, units) {
|
||
var localInput = isMoment(input) ? input : createLocal(input),
|
||
inputMs;
|
||
if (!(this.isValid() && localInput.isValid())) {
|
||
return false;
|
||
}
|
||
units = normalizeUnits(units || 'millisecond');
|
||
if (units === 'millisecond') {
|
||
return this.valueOf() === localInput.valueOf();
|
||
} else {
|
||
inputMs = localInput.valueOf();
|
||
return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
|
||
}
|
||
}
|
||
|
||
function isSameOrAfter (input, units) {
|
||
return this.isSame(input, units) || this.isAfter(input,units);
|
||
}
|
||
|
||
function isSameOrBefore (input, units) {
|
||
return this.isSame(input, units) || this.isBefore(input,units);
|
||
}
|
||
|
||
function diff (input, units, asFloat) {
|
||
var that,
|
||
zoneDelta,
|
||
delta, output;
|
||
|
||
if (!this.isValid()) {
|
||
return NaN;
|
||
}
|
||
|
||
that = cloneWithOffset(input, this);
|
||
|
||
if (!that.isValid()) {
|
||
return NaN;
|
||
}
|
||
|
||
zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
|
||
|
||
units = normalizeUnits(units);
|
||
|
||
if (units === 'year' || units === 'month' || units === 'quarter') {
|
||
output = monthDiff(this, that);
|
||
if (units === 'quarter') {
|
||
output = output / 3;
|
||
} else if (units === 'year') {
|
||
output = output / 12;
|
||
}
|
||
} else {
|
||
delta = this - that;
|
||
output = units === 'second' ? delta / 1e3 : // 1000
|
||
units === 'minute' ? delta / 6e4 : // 1000 * 60
|
||
units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60
|
||
units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
|
||
units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
|
||
delta;
|
||
}
|
||
return asFloat ? output : absFloor(output);
|
||
}
|
||
|
||
function monthDiff (a, b) {
|
||
// difference in months
|
||
var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
|
||
// b is in (anchor - 1 month, anchor + 1 month)
|
||
anchor = a.clone().add(wholeMonthDiff, 'months'),
|
||
anchor2, adjust;
|
||
|
||
if (b - anchor < 0) {
|
||
anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
|
||
// linear across the month
|
||
adjust = (b - anchor) / (anchor - anchor2);
|
||
} else {
|
||
anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
|
||
// linear across the month
|
||
adjust = (b - anchor) / (anchor2 - anchor);
|
||
}
|
||
|
||
//check for negative zero, return zero if negative zero
|
||
return -(wholeMonthDiff + adjust) || 0;
|
||
}
|
||
|
||
hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
|
||
hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
|
||
|
||
function toString () {
|
||
return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
|
||
}
|
||
|
||
function toISOString () {
|
||
var m = this.clone().utc();
|
||
if (0 < m.year() && m.year() <= 9999) {
|
||
if (isFunction(Date.prototype.toISOString)) {
|
||
// native implementation is ~50x faster, use it when we can
|
||
return this.toDate().toISOString();
|
||
} else {
|
||
return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
|
||
}
|
||
} else {
|
||
return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Return a human readable representation of a moment that can
|
||
* also be evaluated to get a new moment which is the same
|
||
*
|
||
* @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
|
||
*/
|
||
function inspect () {
|
||
if (!this.isValid()) {
|
||
return 'moment.invalid(/* ' + this._i + ' */)';
|
||
}
|
||
var func = 'moment';
|
||
var zone = '';
|
||
if (!this.isLocal()) {
|
||
func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
|
||
zone = 'Z';
|
||
}
|
||
var prefix = '[' + func + '("]';
|
||
var year = (0 < this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
|
||
var datetime = '-MM-DD[T]HH:mm:ss.SSS';
|
||
var suffix = zone + '[")]';
|
||
|
||
return this.format(prefix + year + datetime + suffix);
|
||
}
|
||
|
||
function format (inputString) {
|
||
if (!inputString) {
|
||
inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
|
||
}
|
||
var output = formatMoment(this, inputString);
|
||
return this.localeData().postformat(output);
|
||
}
|
||
|
||
function from (time, withoutSuffix) {
|
||
if (this.isValid() &&
|
||
((isMoment(time) && time.isValid()) ||
|
||
createLocal(time).isValid())) {
|
||
return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
|
||
} else {
|
||
return this.localeData().invalidDate();
|
||
}
|
||
}
|
||
|
||
function fromNow (withoutSuffix) {
|
||
return this.from(createLocal(), withoutSuffix);
|
||
}
|
||
|
||
function to (time, withoutSuffix) {
|
||
if (this.isValid() &&
|
||
((isMoment(time) && time.isValid()) ||
|
||
createLocal(time).isValid())) {
|
||
return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
|
||
} else {
|
||
return this.localeData().invalidDate();
|
||
}
|
||
}
|
||
|
||
function toNow (withoutSuffix) {
|
||
return this.to(createLocal(), withoutSuffix);
|
||
}
|
||
|
||
// If passed a locale key, it will set the locale for this
|
||
// instance. Otherwise, it will return the locale configuration
|
||
// variables for this instance.
|
||
function locale (key) {
|
||
var newLocaleData;
|
||
|
||
if (key === undefined) {
|
||
return this._locale._abbr;
|
||
} else {
|
||
newLocaleData = getLocale(key);
|
||
if (newLocaleData != null) {
|
||
this._locale = newLocaleData;
|
||
}
|
||
return this;
|
||
}
|
||
}
|
||
|
||
var lang = deprecate(
|
||
'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
|
||
function (key) {
|
||
if (key === undefined) {
|
||
return this.localeData();
|
||
} else {
|
||
return this.locale(key);
|
||
}
|
||
}
|
||
);
|
||
|
||
function localeData () {
|
||
return this._locale;
|
||
}
|
||
|
||
function startOf (units) {
|
||
units = normalizeUnits(units);
|
||
// the following switch intentionally omits break keywords
|
||
// to utilize falling through the cases.
|
||
switch (units) {
|
||
case 'year':
|
||
this.month(0);
|
||
/* falls through */
|
||
case 'quarter':
|
||
case 'month':
|
||
this.date(1);
|
||
/* falls through */
|
||
case 'week':
|
||
case 'isoWeek':
|
||
case 'day':
|
||
case 'date':
|
||
this.hours(0);
|
||
/* falls through */
|
||
case 'hour':
|
||
this.minutes(0);
|
||
/* falls through */
|
||
case 'minute':
|
||
this.seconds(0);
|
||
/* falls through */
|
||
case 'second':
|
||
this.milliseconds(0);
|
||
}
|
||
|
||
// weeks are a special case
|
||
if (units === 'week') {
|
||
this.weekday(0);
|
||
}
|
||
if (units === 'isoWeek') {
|
||
this.isoWeekday(1);
|
||
}
|
||
|
||
// quarters are also special
|
||
if (units === 'quarter') {
|
||
this.month(Math.floor(this.month() / 3) * 3);
|
||
}
|
||
|
||
return this;
|
||
}
|
||
|
||
function endOf (units) {
|
||
units = normalizeUnits(units);
|
||
if (units === undefined || units === 'millisecond') {
|
||
return this;
|
||
}
|
||
|
||
// 'date' is an alias for 'day', so it should be considered as such.
|
||
if (units === 'date') {
|
||
units = 'day';
|
||
}
|
||
|
||
return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
|
||
}
|
||
|
||
function valueOf () {
|
||
return this._d.valueOf() - ((this._offset || 0) * 60000);
|
||
}
|
||
|
||
function unix () {
|
||
return Math.floor(this.valueOf() / 1000);
|
||
}
|
||
|
||
function toDate () {
|
||
return new Date(this.valueOf());
|
||
}
|
||
|
||
function toArray () {
|
||
var m = this;
|
||
return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
|
||
}
|
||
|
||
function toObject () {
|
||
var m = this;
|
||
return {
|
||
years: m.year(),
|
||
months: m.month(),
|
||
date: m.date(),
|
||
hours: m.hours(),
|
||
minutes: m.minutes(),
|
||
seconds: m.seconds(),
|
||
milliseconds: m.milliseconds()
|
||
};
|
||
}
|
||
|
||
function toJSON () {
|
||
// new Date(NaN).toJSON() === null
|
||
return this.isValid() ? this.toISOString() : null;
|
||
}
|
||
|
||
function isValid$1 () {
|
||
return isValid(this);
|
||
}
|
||
|
||
function parsingFlags () {
|
||
return extend({}, getParsingFlags(this));
|
||
}
|
||
|
||
function invalidAt () {
|
||
return getParsingFlags(this).overflow;
|
||
}
|
||
|
||
function creationData() {
|
||
return {
|
||
input: this._i,
|
||
format: this._f,
|
||
locale: this._locale,
|
||
isUTC: this._isUTC,
|
||
strict: this._strict
|
||
};
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken(0, ['gg', 2], 0, function () {
|
||
return this.weekYear() % 100;
|
||
});
|
||
|
||
addFormatToken(0, ['GG', 2], 0, function () {
|
||
return this.isoWeekYear() % 100;
|
||
});
|
||
|
||
function addWeekYearFormatToken (token, getter) {
|
||
addFormatToken(0, [token, token.length], 0, getter);
|
||
}
|
||
|
||
addWeekYearFormatToken('gggg', 'weekYear');
|
||
addWeekYearFormatToken('ggggg', 'weekYear');
|
||
addWeekYearFormatToken('GGGG', 'isoWeekYear');
|
||
addWeekYearFormatToken('GGGGG', 'isoWeekYear');
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('weekYear', 'gg');
|
||
addUnitAlias('isoWeekYear', 'GG');
|
||
|
||
// PRIORITY
|
||
|
||
addUnitPriority('weekYear', 1);
|
||
addUnitPriority('isoWeekYear', 1);
|
||
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('G', matchSigned);
|
||
addRegexToken('g', matchSigned);
|
||
addRegexToken('GG', match1to2, match2);
|
||
addRegexToken('gg', match1to2, match2);
|
||
addRegexToken('GGGG', match1to4, match4);
|
||
addRegexToken('gggg', match1to4, match4);
|
||
addRegexToken('GGGGG', match1to6, match6);
|
||
addRegexToken('ggggg', match1to6, match6);
|
||
|
||
addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
|
||
week[token.substr(0, 2)] = toInt(input);
|
||
});
|
||
|
||
addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
|
||
week[token] = hooks.parseTwoDigitYear(input);
|
||
});
|
||
|
||
// MOMENTS
|
||
|
||
function getSetWeekYear (input) {
|
||
return getSetWeekYearHelper.call(this,
|
||
input,
|
||
this.week(),
|
||
this.weekday(),
|
||
this.localeData()._week.dow,
|
||
this.localeData()._week.doy);
|
||
}
|
||
|
||
function getSetISOWeekYear (input) {
|
||
return getSetWeekYearHelper.call(this,
|
||
input, this.isoWeek(), this.isoWeekday(), 1, 4);
|
||
}
|
||
|
||
function getISOWeeksInYear () {
|
||
return weeksInYear(this.year(), 1, 4);
|
||
}
|
||
|
||
function getWeeksInYear () {
|
||
var weekInfo = this.localeData()._week;
|
||
return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
|
||
}
|
||
|
||
function getSetWeekYearHelper(input, week, weekday, dow, doy) {
|
||
var weeksTarget;
|
||
if (input == null) {
|
||
return weekOfYear(this, dow, doy).year;
|
||
} else {
|
||
weeksTarget = weeksInYear(input, dow, doy);
|
||
if (week > weeksTarget) {
|
||
week = weeksTarget;
|
||
}
|
||
return setWeekAll.call(this, input, week, weekday, dow, doy);
|
||
}
|
||
}
|
||
|
||
function setWeekAll(weekYear, week, weekday, dow, doy) {
|
||
var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
|
||
date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
|
||
|
||
this.year(date.getUTCFullYear());
|
||
this.month(date.getUTCMonth());
|
||
this.date(date.getUTCDate());
|
||
return this;
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('Q', 0, 'Qo', 'quarter');
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('quarter', 'Q');
|
||
|
||
// PRIORITY
|
||
|
||
addUnitPriority('quarter', 7);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('Q', match1);
|
||
addParseToken('Q', function (input, array) {
|
||
array[MONTH] = (toInt(input) - 1) * 3;
|
||
});
|
||
|
||
// MOMENTS
|
||
|
||
function getSetQuarter (input) {
|
||
return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('D', ['DD', 2], 'Do', 'date');
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('date', 'D');
|
||
|
||
// PRIOROITY
|
||
addUnitPriority('date', 9);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('D', match1to2);
|
||
addRegexToken('DD', match1to2, match2);
|
||
addRegexToken('Do', function (isStrict, locale) {
|
||
return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;
|
||
});
|
||
|
||
addParseToken(['D', 'DD'], DATE);
|
||
addParseToken('Do', function (input, array) {
|
||
array[DATE] = toInt(input.match(match1to2)[0], 10);
|
||
});
|
||
|
||
// MOMENTS
|
||
|
||
var getSetDayOfMonth = makeGetSet('Date', true);
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('dayOfYear', 'DDD');
|
||
|
||
// PRIORITY
|
||
addUnitPriority('dayOfYear', 4);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('DDD', match1to3);
|
||
addRegexToken('DDDD', match3);
|
||
addParseToken(['DDD', 'DDDD'], function (input, array, config) {
|
||
config._dayOfYear = toInt(input);
|
||
});
|
||
|
||
// HELPERS
|
||
|
||
// MOMENTS
|
||
|
||
function getSetDayOfYear (input) {
|
||
var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
|
||
return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
|
||
}
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('m', ['mm', 2], 0, 'minute');
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('minute', 'm');
|
||
|
||
// PRIORITY
|
||
|
||
addUnitPriority('minute', 14);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('m', match1to2);
|
||
addRegexToken('mm', match1to2, match2);
|
||
addParseToken(['m', 'mm'], MINUTE);
|
||
|
||
// MOMENTS
|
||
|
||
var getSetMinute = makeGetSet('Minutes', false);
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('s', ['ss', 2], 0, 'second');
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('second', 's');
|
||
|
||
// PRIORITY
|
||
|
||
addUnitPriority('second', 15);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('s', match1to2);
|
||
addRegexToken('ss', match1to2, match2);
|
||
addParseToken(['s', 'ss'], SECOND);
|
||
|
||
// MOMENTS
|
||
|
||
var getSetSecond = makeGetSet('Seconds', false);
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('S', 0, 0, function () {
|
||
return ~~(this.millisecond() / 100);
|
||
});
|
||
|
||
addFormatToken(0, ['SS', 2], 0, function () {
|
||
return ~~(this.millisecond() / 10);
|
||
});
|
||
|
||
addFormatToken(0, ['SSS', 3], 0, 'millisecond');
|
||
addFormatToken(0, ['SSSS', 4], 0, function () {
|
||
return this.millisecond() * 10;
|
||
});
|
||
addFormatToken(0, ['SSSSS', 5], 0, function () {
|
||
return this.millisecond() * 100;
|
||
});
|
||
addFormatToken(0, ['SSSSSS', 6], 0, function () {
|
||
return this.millisecond() * 1000;
|
||
});
|
||
addFormatToken(0, ['SSSSSSS', 7], 0, function () {
|
||
return this.millisecond() * 10000;
|
||
});
|
||
addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
|
||
return this.millisecond() * 100000;
|
||
});
|
||
addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
|
||
return this.millisecond() * 1000000;
|
||
});
|
||
|
||
|
||
// ALIASES
|
||
|
||
addUnitAlias('millisecond', 'ms');
|
||
|
||
// PRIORITY
|
||
|
||
addUnitPriority('millisecond', 16);
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('S', match1to3, match1);
|
||
addRegexToken('SS', match1to3, match2);
|
||
addRegexToken('SSS', match1to3, match3);
|
||
|
||
var token;
|
||
for (token = 'SSSS'; token.length <= 9; token += 'S') {
|
||
addRegexToken(token, matchUnsigned);
|
||
}
|
||
|
||
function parseMs(input, array) {
|
||
array[MILLISECOND] = toInt(('0.' + input) * 1000);
|
||
}
|
||
|
||
for (token = 'S'; token.length <= 9; token += 'S') {
|
||
addParseToken(token, parseMs);
|
||
}
|
||
// MOMENTS
|
||
|
||
var getSetMillisecond = makeGetSet('Milliseconds', false);
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('z', 0, 0, 'zoneAbbr');
|
||
addFormatToken('zz', 0, 0, 'zoneName');
|
||
|
||
// MOMENTS
|
||
|
||
function getZoneAbbr () {
|
||
return this._isUTC ? 'UTC' : '';
|
||
}
|
||
|
||
function getZoneName () {
|
||
return this._isUTC ? 'Coordinated Universal Time' : '';
|
||
}
|
||
|
||
var proto = Moment.prototype;
|
||
|
||
proto.add = add;
|
||
proto.calendar = calendar$1;
|
||
proto.clone = clone;
|
||
proto.diff = diff;
|
||
proto.endOf = endOf;
|
||
proto.format = format;
|
||
proto.from = from;
|
||
proto.fromNow = fromNow;
|
||
proto.to = to;
|
||
proto.toNow = toNow;
|
||
proto.get = stringGet;
|
||
proto.invalidAt = invalidAt;
|
||
proto.isAfter = isAfter;
|
||
proto.isBefore = isBefore;
|
||
proto.isBetween = isBetween;
|
||
proto.isSame = isSame;
|
||
proto.isSameOrAfter = isSameOrAfter;
|
||
proto.isSameOrBefore = isSameOrBefore;
|
||
proto.isValid = isValid$1;
|
||
proto.lang = lang;
|
||
proto.locale = locale;
|
||
proto.localeData = localeData;
|
||
proto.max = prototypeMax;
|
||
proto.min = prototypeMin;
|
||
proto.parsingFlags = parsingFlags;
|
||
proto.set = stringSet;
|
||
proto.startOf = startOf;
|
||
proto.subtract = subtract;
|
||
proto.toArray = toArray;
|
||
proto.toObject = toObject;
|
||
proto.toDate = toDate;
|
||
proto.toISOString = toISOString;
|
||
proto.inspect = inspect;
|
||
proto.toJSON = toJSON;
|
||
proto.toString = toString;
|
||
proto.unix = unix;
|
||
proto.valueOf = valueOf;
|
||
proto.creationData = creationData;
|
||
|
||
// Year
|
||
proto.year = getSetYear;
|
||
proto.isLeapYear = getIsLeapYear;
|
||
|
||
// Week Year
|
||
proto.weekYear = getSetWeekYear;
|
||
proto.isoWeekYear = getSetISOWeekYear;
|
||
|
||
// Quarter
|
||
proto.quarter = proto.quarters = getSetQuarter;
|
||
|
||
// Month
|
||
proto.month = getSetMonth;
|
||
proto.daysInMonth = getDaysInMonth;
|
||
|
||
// Week
|
||
proto.week = proto.weeks = getSetWeek;
|
||
proto.isoWeek = proto.isoWeeks = getSetISOWeek;
|
||
proto.weeksInYear = getWeeksInYear;
|
||
proto.isoWeeksInYear = getISOWeeksInYear;
|
||
|
||
// Day
|
||
proto.date = getSetDayOfMonth;
|
||
proto.day = proto.days = getSetDayOfWeek;
|
||
proto.weekday = getSetLocaleDayOfWeek;
|
||
proto.isoWeekday = getSetISODayOfWeek;
|
||
proto.dayOfYear = getSetDayOfYear;
|
||
|
||
// Hour
|
||
proto.hour = proto.hours = getSetHour;
|
||
|
||
// Minute
|
||
proto.minute = proto.minutes = getSetMinute;
|
||
|
||
// Second
|
||
proto.second = proto.seconds = getSetSecond;
|
||
|
||
// Millisecond
|
||
proto.millisecond = proto.milliseconds = getSetMillisecond;
|
||
|
||
// Offset
|
||
proto.utcOffset = getSetOffset;
|
||
proto.utc = setOffsetToUTC;
|
||
proto.local = setOffsetToLocal;
|
||
proto.parseZone = setOffsetToParsedOffset;
|
||
proto.hasAlignedHourOffset = hasAlignedHourOffset;
|
||
proto.isDST = isDaylightSavingTime;
|
||
proto.isLocal = isLocal;
|
||
proto.isUtcOffset = isUtcOffset;
|
||
proto.isUtc = isUtc;
|
||
proto.isUTC = isUtc;
|
||
|
||
// Timezone
|
||
proto.zoneAbbr = getZoneAbbr;
|
||
proto.zoneName = getZoneName;
|
||
|
||
// Deprecations
|
||
proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
|
||
proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
|
||
proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
|
||
proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
|
||
proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
|
||
|
||
function createUnix (input) {
|
||
return createLocal(input * 1000);
|
||
}
|
||
|
||
function createInZone () {
|
||
return createLocal.apply(null, arguments).parseZone();
|
||
}
|
||
|
||
function preParsePostFormat (string) {
|
||
return string;
|
||
}
|
||
|
||
var proto$1 = Locale.prototype;
|
||
|
||
proto$1.calendar = calendar;
|
||
proto$1.longDateFormat = longDateFormat;
|
||
proto$1.invalidDate = invalidDate;
|
||
proto$1.ordinal = ordinal;
|
||
proto$1.preparse = preParsePostFormat;
|
||
proto$1.postformat = preParsePostFormat;
|
||
proto$1.relativeTime = relativeTime;
|
||
proto$1.pastFuture = pastFuture;
|
||
proto$1.set = set;
|
||
|
||
// Month
|
||
proto$1.months = localeMonths;
|
||
proto$1.monthsShort = localeMonthsShort;
|
||
proto$1.monthsParse = localeMonthsParse;
|
||
proto$1.monthsRegex = monthsRegex;
|
||
proto$1.monthsShortRegex = monthsShortRegex;
|
||
|
||
// Week
|
||
proto$1.week = localeWeek;
|
||
proto$1.firstDayOfYear = localeFirstDayOfYear;
|
||
proto$1.firstDayOfWeek = localeFirstDayOfWeek;
|
||
|
||
// Day of Week
|
||
proto$1.weekdays = localeWeekdays;
|
||
proto$1.weekdaysMin = localeWeekdaysMin;
|
||
proto$1.weekdaysShort = localeWeekdaysShort;
|
||
proto$1.weekdaysParse = localeWeekdaysParse;
|
||
|
||
proto$1.weekdaysRegex = weekdaysRegex;
|
||
proto$1.weekdaysShortRegex = weekdaysShortRegex;
|
||
proto$1.weekdaysMinRegex = weekdaysMinRegex;
|
||
|
||
// Hours
|
||
proto$1.isPM = localeIsPM;
|
||
proto$1.meridiem = localeMeridiem;
|
||
|
||
function get$1 (format, index, field, setter) {
|
||
var locale = getLocale();
|
||
var utc = createUTC().set(setter, index);
|
||
return locale[field](utc, format);
|
||
}
|
||
|
||
function listMonthsImpl (format, index, field) {
|
||
if (isNumber(format)) {
|
||
index = format;
|
||
format = undefined;
|
||
}
|
||
|
||
format = format || '';
|
||
|
||
if (index != null) {
|
||
return get$1(format, index, field, 'month');
|
||
}
|
||
|
||
var i;
|
||
var out = [];
|
||
for (i = 0; i < 12; i++) {
|
||
out[i] = get$1(format, i, field, 'month');
|
||
}
|
||
return out;
|
||
}
|
||
|
||
// ()
|
||
// (5)
|
||
// (fmt, 5)
|
||
// (fmt)
|
||
// (true)
|
||
// (true, 5)
|
||
// (true, fmt, 5)
|
||
// (true, fmt)
|
||
function listWeekdaysImpl (localeSorted, format, index, field) {
|
||
if (typeof localeSorted === 'boolean') {
|
||
if (isNumber(format)) {
|
||
index = format;
|
||
format = undefined;
|
||
}
|
||
|
||
format = format || '';
|
||
} else {
|
||
format = localeSorted;
|
||
index = format;
|
||
localeSorted = false;
|
||
|
||
if (isNumber(format)) {
|
||
index = format;
|
||
format = undefined;
|
||
}
|
||
|
||
format = format || '';
|
||
}
|
||
|
||
var locale = getLocale(),
|
||
shift = localeSorted ? locale._week.dow : 0;
|
||
|
||
if (index != null) {
|
||
return get$1(format, (index + shift) % 7, field, 'day');
|
||
}
|
||
|
||
var i;
|
||
var out = [];
|
||
for (i = 0; i < 7; i++) {
|
||
out[i] = get$1(format, (i + shift) % 7, field, 'day');
|
||
}
|
||
return out;
|
||
}
|
||
|
||
function listMonths (format, index) {
|
||
return listMonthsImpl(format, index, 'months');
|
||
}
|
||
|
||
function listMonthsShort (format, index) {
|
||
return listMonthsImpl(format, index, 'monthsShort');
|
||
}
|
||
|
||
function listWeekdays (localeSorted, format, index) {
|
||
return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
|
||
}
|
||
|
||
function listWeekdaysShort (localeSorted, format, index) {
|
||
return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
|
||
}
|
||
|
||
function listWeekdaysMin (localeSorted, format, index) {
|
||
return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
|
||
}
|
||
|
||
getSetGlobalLocale('en', {
|
||
ordinalParse: /\d{1,2}(th|st|nd|rd)/,
|
||
ordinal : function (number) {
|
||
var b = number % 10,
|
||
output = (toInt(number % 100 / 10) === 1) ? 'th' :
|
||
(b === 1) ? 'st' :
|
||
(b === 2) ? 'nd' :
|
||
(b === 3) ? 'rd' : 'th';
|
||
return number + output;
|
||
}
|
||
});
|
||
|
||
// Side effect imports
|
||
hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
|
||
hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
|
||
|
||
var mathAbs = Math.abs;
|
||
|
||
function abs () {
|
||
var data = this._data;
|
||
|
||
this._milliseconds = mathAbs(this._milliseconds);
|
||
this._days = mathAbs(this._days);
|
||
this._months = mathAbs(this._months);
|
||
|
||
data.milliseconds = mathAbs(data.milliseconds);
|
||
data.seconds = mathAbs(data.seconds);
|
||
data.minutes = mathAbs(data.minutes);
|
||
data.hours = mathAbs(data.hours);
|
||
data.months = mathAbs(data.months);
|
||
data.years = mathAbs(data.years);
|
||
|
||
return this;
|
||
}
|
||
|
||
function addSubtract$1 (duration, input, value, direction) {
|
||
var other = createDuration(input, value);
|
||
|
||
duration._milliseconds += direction * other._milliseconds;
|
||
duration._days += direction * other._days;
|
||
duration._months += direction * other._months;
|
||
|
||
return duration._bubble();
|
||
}
|
||
|
||
// supports only 2.0-style add(1, 's') or add(duration)
|
||
function add$1 (input, value) {
|
||
return addSubtract$1(this, input, value, 1);
|
||
}
|
||
|
||
// supports only 2.0-style subtract(1, 's') or subtract(duration)
|
||
function subtract$1 (input, value) {
|
||
return addSubtract$1(this, input, value, -1);
|
||
}
|
||
|
||
function absCeil (number) {
|
||
if (number < 0) {
|
||
return Math.floor(number);
|
||
} else {
|
||
return Math.ceil(number);
|
||
}
|
||
}
|
||
|
||
function bubble () {
|
||
var milliseconds = this._milliseconds;
|
||
var days = this._days;
|
||
var months = this._months;
|
||
var data = this._data;
|
||
var seconds, minutes, hours, years, monthsFromDays;
|
||
|
||
// if we have a mix of positive and negative values, bubble down first
|
||
// check: https://github.com/moment/moment/issues/2166
|
||
if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
|
||
(milliseconds <= 0 && days <= 0 && months <= 0))) {
|
||
milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
|
||
days = 0;
|
||
months = 0;
|
||
}
|
||
|
||
// The following code bubbles up values, see the tests for
|
||
// examples of what that means.
|
||
data.milliseconds = milliseconds % 1000;
|
||
|
||
seconds = absFloor(milliseconds / 1000);
|
||
data.seconds = seconds % 60;
|
||
|
||
minutes = absFloor(seconds / 60);
|
||
data.minutes = minutes % 60;
|
||
|
||
hours = absFloor(minutes / 60);
|
||
data.hours = hours % 24;
|
||
|
||
days += absFloor(hours / 24);
|
||
|
||
// convert days to months
|
||
monthsFromDays = absFloor(daysToMonths(days));
|
||
months += monthsFromDays;
|
||
days -= absCeil(monthsToDays(monthsFromDays));
|
||
|
||
// 12 months -> 1 year
|
||
years = absFloor(months / 12);
|
||
months %= 12;
|
||
|
||
data.days = days;
|
||
data.months = months;
|
||
data.years = years;
|
||
|
||
return this;
|
||
}
|
||
|
||
function daysToMonths (days) {
|
||
// 400 years have 146097 days (taking into account leap year rules)
|
||
// 400 years have 12 months === 4800
|
||
return days * 4800 / 146097;
|
||
}
|
||
|
||
function monthsToDays (months) {
|
||
// the reverse of daysToMonths
|
||
return months * 146097 / 4800;
|
||
}
|
||
|
||
function as (units) {
|
||
var days;
|
||
var months;
|
||
var milliseconds = this._milliseconds;
|
||
|
||
units = normalizeUnits(units);
|
||
|
||
if (units === 'month' || units === 'year') {
|
||
days = this._days + milliseconds / 864e5;
|
||
months = this._months + daysToMonths(days);
|
||
return units === 'month' ? months : months / 12;
|
||
} else {
|
||
// handle milliseconds separately because of floating point math errors (issue #1867)
|
||
days = this._days + Math.round(monthsToDays(this._months));
|
||
switch (units) {
|
||
case 'week' : return days / 7 + milliseconds / 6048e5;
|
||
case 'day' : return days + milliseconds / 864e5;
|
||
case 'hour' : return days * 24 + milliseconds / 36e5;
|
||
case 'minute' : return days * 1440 + milliseconds / 6e4;
|
||
case 'second' : return days * 86400 + milliseconds / 1000;
|
||
// Math.floor prevents floating point math errors here
|
||
case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
|
||
default: throw new Error('Unknown unit ' + units);
|
||
}
|
||
}
|
||
}
|
||
|
||
// TODO: Use this.as('ms')?
|
||
function valueOf$1 () {
|
||
return (
|
||
this._milliseconds +
|
||
this._days * 864e5 +
|
||
(this._months % 12) * 2592e6 +
|
||
toInt(this._months / 12) * 31536e6
|
||
);
|
||
}
|
||
|
||
function makeAs (alias) {
|
||
return function () {
|
||
return this.as(alias);
|
||
};
|
||
}
|
||
|
||
var asMilliseconds = makeAs('ms');
|
||
var asSeconds = makeAs('s');
|
||
var asMinutes = makeAs('m');
|
||
var asHours = makeAs('h');
|
||
var asDays = makeAs('d');
|
||
var asWeeks = makeAs('w');
|
||
var asMonths = makeAs('M');
|
||
var asYears = makeAs('y');
|
||
|
||
function get$2 (units) {
|
||
units = normalizeUnits(units);
|
||
return this[units + 's']();
|
||
}
|
||
|
||
function makeGetter(name) {
|
||
return function () {
|
||
return this._data[name];
|
||
};
|
||
}
|
||
|
||
var milliseconds = makeGetter('milliseconds');
|
||
var seconds = makeGetter('seconds');
|
||
var minutes = makeGetter('minutes');
|
||
var hours = makeGetter('hours');
|
||
var days = makeGetter('days');
|
||
var months = makeGetter('months');
|
||
var years = makeGetter('years');
|
||
|
||
function weeks () {
|
||
return absFloor(this.days() / 7);
|
||
}
|
||
|
||
var round = Math.round;
|
||
var thresholds = {
|
||
s: 45, // seconds to minute
|
||
m: 45, // minutes to hour
|
||
h: 22, // hours to day
|
||
d: 26, // days to month
|
||
M: 11 // months to year
|
||
};
|
||
|
||
// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
|
||
function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
|
||
return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
|
||
}
|
||
|
||
function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
|
||
var duration = createDuration(posNegDuration).abs();
|
||
var seconds = round(duration.as('s'));
|
||
var minutes = round(duration.as('m'));
|
||
var hours = round(duration.as('h'));
|
||
var days = round(duration.as('d'));
|
||
var months = round(duration.as('M'));
|
||
var years = round(duration.as('y'));
|
||
|
||
var a = seconds < thresholds.s && ['s', seconds] ||
|
||
minutes <= 1 && ['m'] ||
|
||
minutes < thresholds.m && ['mm', minutes] ||
|
||
hours <= 1 && ['h'] ||
|
||
hours < thresholds.h && ['hh', hours] ||
|
||
days <= 1 && ['d'] ||
|
||
days < thresholds.d && ['dd', days] ||
|
||
months <= 1 && ['M'] ||
|
||
months < thresholds.M && ['MM', months] ||
|
||
years <= 1 && ['y'] || ['yy', years];
|
||
|
||
a[2] = withoutSuffix;
|
||
a[3] = +posNegDuration > 0;
|
||
a[4] = locale;
|
||
return substituteTimeAgo.apply(null, a);
|
||
}
|
||
|
||
// This function allows you to set the rounding function for relative time strings
|
||
function getSetRelativeTimeRounding (roundingFunction) {
|
||
if (roundingFunction === undefined) {
|
||
return round;
|
||
}
|
||
if (typeof(roundingFunction) === 'function') {
|
||
round = roundingFunction;
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
// This function allows you to set a threshold for relative time strings
|
||
function getSetRelativeTimeThreshold (threshold, limit) {
|
||
if (thresholds[threshold] === undefined) {
|
||
return false;
|
||
}
|
||
if (limit === undefined) {
|
||
return thresholds[threshold];
|
||
}
|
||
thresholds[threshold] = limit;
|
||
return true;
|
||
}
|
||
|
||
function humanize (withSuffix) {
|
||
var locale = this.localeData();
|
||
var output = relativeTime$1(this, !withSuffix, locale);
|
||
|
||
if (withSuffix) {
|
||
output = locale.pastFuture(+this, output);
|
||
}
|
||
|
||
return locale.postformat(output);
|
||
}
|
||
|
||
var abs$1 = Math.abs;
|
||
|
||
function toISOString$1() {
|
||
// for ISO strings we do not use the normal bubbling rules:
|
||
// * milliseconds bubble up until they become hours
|
||
// * days do not bubble at all
|
||
// * months bubble up until they become years
|
||
// This is because there is no context-free conversion between hours and days
|
||
// (think of clock changes)
|
||
// and also not between days and months (28-31 days per month)
|
||
var seconds = abs$1(this._milliseconds) / 1000;
|
||
var days = abs$1(this._days);
|
||
var months = abs$1(this._months);
|
||
var minutes, hours, years;
|
||
|
||
// 3600 seconds -> 60 minutes -> 1 hour
|
||
minutes = absFloor(seconds / 60);
|
||
hours = absFloor(minutes / 60);
|
||
seconds %= 60;
|
||
minutes %= 60;
|
||
|
||
// 12 months -> 1 year
|
||
years = absFloor(months / 12);
|
||
months %= 12;
|
||
|
||
|
||
// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
|
||
var Y = years;
|
||
var M = months;
|
||
var D = days;
|
||
var h = hours;
|
||
var m = minutes;
|
||
var s = seconds;
|
||
var total = this.asSeconds();
|
||
|
||
if (!total) {
|
||
// this is the same as C#'s (Noda) and python (isodate)...
|
||
// but not other JS (goog.date)
|
||
return 'P0D';
|
||
}
|
||
|
||
return (total < 0 ? '-' : '') +
|
||
'P' +
|
||
(Y ? Y + 'Y' : '') +
|
||
(M ? M + 'M' : '') +
|
||
(D ? D + 'D' : '') +
|
||
((h || m || s) ? 'T' : '') +
|
||
(h ? h + 'H' : '') +
|
||
(m ? m + 'M' : '') +
|
||
(s ? s + 'S' : '');
|
||
}
|
||
|
||
var proto$2 = Duration.prototype;
|
||
|
||
proto$2.abs = abs;
|
||
proto$2.add = add$1;
|
||
proto$2.subtract = subtract$1;
|
||
proto$2.as = as;
|
||
proto$2.asMilliseconds = asMilliseconds;
|
||
proto$2.asSeconds = asSeconds;
|
||
proto$2.asMinutes = asMinutes;
|
||
proto$2.asHours = asHours;
|
||
proto$2.asDays = asDays;
|
||
proto$2.asWeeks = asWeeks;
|
||
proto$2.asMonths = asMonths;
|
||
proto$2.asYears = asYears;
|
||
proto$2.valueOf = valueOf$1;
|
||
proto$2._bubble = bubble;
|
||
proto$2.get = get$2;
|
||
proto$2.milliseconds = milliseconds;
|
||
proto$2.seconds = seconds;
|
||
proto$2.minutes = minutes;
|
||
proto$2.hours = hours;
|
||
proto$2.days = days;
|
||
proto$2.weeks = weeks;
|
||
proto$2.months = months;
|
||
proto$2.years = years;
|
||
proto$2.humanize = humanize;
|
||
proto$2.toISOString = toISOString$1;
|
||
proto$2.toString = toISOString$1;
|
||
proto$2.toJSON = toISOString$1;
|
||
proto$2.locale = locale;
|
||
proto$2.localeData = localeData;
|
||
|
||
// Deprecations
|
||
proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
|
||
proto$2.lang = lang;
|
||
|
||
// Side effect imports
|
||
|
||
// FORMATTING
|
||
|
||
addFormatToken('X', 0, 0, 'unix');
|
||
addFormatToken('x', 0, 0, 'valueOf');
|
||
|
||
// PARSING
|
||
|
||
addRegexToken('x', matchSigned);
|
||
addRegexToken('X', matchTimestamp);
|
||
addParseToken('X', function (input, array, config) {
|
||
config._d = new Date(parseFloat(input, 10) * 1000);
|
||
});
|
||
addParseToken('x', function (input, array, config) {
|
||
config._d = new Date(toInt(input));
|
||
});
|
||
|
||
// Side effect imports
|
||
|
||
|
||
hooks.version = '2.17.1';
|
||
|
||
setHookCallback(createLocal);
|
||
|
||
hooks.fn = proto;
|
||
hooks.min = min;
|
||
hooks.max = max;
|
||
hooks.now = now;
|
||
hooks.utc = createUTC;
|
||
hooks.unix = createUnix;
|
||
hooks.months = listMonths;
|
||
hooks.isDate = isDate;
|
||
hooks.locale = getSetGlobalLocale;
|
||
hooks.invalid = createInvalid;
|
||
hooks.duration = createDuration;
|
||
hooks.isMoment = isMoment;
|
||
hooks.weekdays = listWeekdays;
|
||
hooks.parseZone = createInZone;
|
||
hooks.localeData = getLocale;
|
||
hooks.isDuration = isDuration;
|
||
hooks.monthsShort = listMonthsShort;
|
||
hooks.weekdaysMin = listWeekdaysMin;
|
||
hooks.defineLocale = defineLocale;
|
||
hooks.updateLocale = updateLocale;
|
||
hooks.locales = listLocales;
|
||
hooks.weekdaysShort = listWeekdaysShort;
|
||
hooks.normalizeUnits = normalizeUnits;
|
||
hooks.relativeTimeRounding = getSetRelativeTimeRounding;
|
||
hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
|
||
hooks.calendarFormat = getCalendarFormat;
|
||
hooks.prototype = proto;
|
||
|
||
return hooks;
|
||
|
||
})));
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(39)(module)))
|
||
|
||
/***/ },
|
||
/* 39 */
|
||
/***/ function(module, exports) {
|
||
|
||
module.exports = function(module) {
|
||
if(!module.webpackPolyfill) {
|
||
module.deprecate = function() {};
|
||
module.paths = [];
|
||
// module.parent = undefined by default
|
||
module.children = [];
|
||
module.webpackPolyfill = 1;
|
||
}
|
||
return module;
|
||
}
|
||
|
||
|
||
/***/ },
|
||
/* 40 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var map = {
|
||
"./af": 41,
|
||
"./af.js": 41,
|
||
"./ar": 42,
|
||
"./ar-dz": 43,
|
||
"./ar-dz.js": 43,
|
||
"./ar-ly": 44,
|
||
"./ar-ly.js": 44,
|
||
"./ar-ma": 45,
|
||
"./ar-ma.js": 45,
|
||
"./ar-sa": 46,
|
||
"./ar-sa.js": 46,
|
||
"./ar-tn": 47,
|
||
"./ar-tn.js": 47,
|
||
"./ar.js": 42,
|
||
"./az": 48,
|
||
"./az.js": 48,
|
||
"./be": 49,
|
||
"./be.js": 49,
|
||
"./bg": 50,
|
||
"./bg.js": 50,
|
||
"./bn": 51,
|
||
"./bn.js": 51,
|
||
"./bo": 52,
|
||
"./bo.js": 52,
|
||
"./br": 53,
|
||
"./br.js": 53,
|
||
"./bs": 54,
|
||
"./bs.js": 54,
|
||
"./ca": 55,
|
||
"./ca.js": 55,
|
||
"./cs": 56,
|
||
"./cs.js": 56,
|
||
"./cv": 57,
|
||
"./cv.js": 57,
|
||
"./cy": 58,
|
||
"./cy.js": 58,
|
||
"./da": 59,
|
||
"./da.js": 59,
|
||
"./de": 60,
|
||
"./de-at": 61,
|
||
"./de-at.js": 61,
|
||
"./de.js": 60,
|
||
"./dv": 62,
|
||
"./dv.js": 62,
|
||
"./el": 63,
|
||
"./el.js": 63,
|
||
"./en-au": 64,
|
||
"./en-au.js": 64,
|
||
"./en-ca": 65,
|
||
"./en-ca.js": 65,
|
||
"./en-gb": 66,
|
||
"./en-gb.js": 66,
|
||
"./en-ie": 67,
|
||
"./en-ie.js": 67,
|
||
"./en-nz": 68,
|
||
"./en-nz.js": 68,
|
||
"./eo": 69,
|
||
"./eo.js": 69,
|
||
"./es": 70,
|
||
"./es-do": 71,
|
||
"./es-do.js": 71,
|
||
"./es.js": 70,
|
||
"./et": 72,
|
||
"./et.js": 72,
|
||
"./eu": 73,
|
||
"./eu.js": 73,
|
||
"./fa": 74,
|
||
"./fa.js": 74,
|
||
"./fi": 75,
|
||
"./fi.js": 75,
|
||
"./fo": 76,
|
||
"./fo.js": 76,
|
||
"./fr": 77,
|
||
"./fr-ca": 78,
|
||
"./fr-ca.js": 78,
|
||
"./fr-ch": 79,
|
||
"./fr-ch.js": 79,
|
||
"./fr.js": 77,
|
||
"./fy": 80,
|
||
"./fy.js": 80,
|
||
"./gd": 81,
|
||
"./gd.js": 81,
|
||
"./gl": 82,
|
||
"./gl.js": 82,
|
||
"./he": 83,
|
||
"./he.js": 83,
|
||
"./hi": 84,
|
||
"./hi.js": 84,
|
||
"./hr": 85,
|
||
"./hr.js": 85,
|
||
"./hu": 86,
|
||
"./hu.js": 86,
|
||
"./hy-am": 87,
|
||
"./hy-am.js": 87,
|
||
"./id": 88,
|
||
"./id.js": 88,
|
||
"./is": 89,
|
||
"./is.js": 89,
|
||
"./it": 90,
|
||
"./it.js": 90,
|
||
"./ja": 91,
|
||
"./ja.js": 91,
|
||
"./jv": 92,
|
||
"./jv.js": 92,
|
||
"./ka": 93,
|
||
"./ka.js": 93,
|
||
"./kk": 94,
|
||
"./kk.js": 94,
|
||
"./km": 95,
|
||
"./km.js": 95,
|
||
"./ko": 96,
|
||
"./ko.js": 96,
|
||
"./ky": 97,
|
||
"./ky.js": 97,
|
||
"./lb": 98,
|
||
"./lb.js": 98,
|
||
"./lo": 99,
|
||
"./lo.js": 99,
|
||
"./lt": 100,
|
||
"./lt.js": 100,
|
||
"./lv": 101,
|
||
"./lv.js": 101,
|
||
"./me": 102,
|
||
"./me.js": 102,
|
||
"./mi": 103,
|
||
"./mi.js": 103,
|
||
"./mk": 104,
|
||
"./mk.js": 104,
|
||
"./ml": 105,
|
||
"./ml.js": 105,
|
||
"./mr": 106,
|
||
"./mr.js": 106,
|
||
"./ms": 107,
|
||
"./ms-my": 108,
|
||
"./ms-my.js": 108,
|
||
"./ms.js": 107,
|
||
"./my": 109,
|
||
"./my.js": 109,
|
||
"./nb": 110,
|
||
"./nb.js": 110,
|
||
"./ne": 111,
|
||
"./ne.js": 111,
|
||
"./nl": 112,
|
||
"./nl-be": 113,
|
||
"./nl-be.js": 113,
|
||
"./nl.js": 112,
|
||
"./nn": 114,
|
||
"./nn.js": 114,
|
||
"./pa-in": 115,
|
||
"./pa-in.js": 115,
|
||
"./pl": 116,
|
||
"./pl.js": 116,
|
||
"./pt": 117,
|
||
"./pt-br": 118,
|
||
"./pt-br.js": 118,
|
||
"./pt.js": 117,
|
||
"./ro": 119,
|
||
"./ro.js": 119,
|
||
"./ru": 120,
|
||
"./ru.js": 120,
|
||
"./se": 121,
|
||
"./se.js": 121,
|
||
"./si": 122,
|
||
"./si.js": 122,
|
||
"./sk": 123,
|
||
"./sk.js": 123,
|
||
"./sl": 124,
|
||
"./sl.js": 124,
|
||
"./sq": 125,
|
||
"./sq.js": 125,
|
||
"./sr": 126,
|
||
"./sr-cyrl": 127,
|
||
"./sr-cyrl.js": 127,
|
||
"./sr.js": 126,
|
||
"./ss": 128,
|
||
"./ss.js": 128,
|
||
"./sv": 129,
|
||
"./sv.js": 129,
|
||
"./sw": 130,
|
||
"./sw.js": 130,
|
||
"./ta": 131,
|
||
"./ta.js": 131,
|
||
"./te": 132,
|
||
"./te.js": 132,
|
||
"./tet": 133,
|
||
"./tet.js": 133,
|
||
"./th": 134,
|
||
"./th.js": 134,
|
||
"./tl-ph": 135,
|
||
"./tl-ph.js": 135,
|
||
"./tlh": 136,
|
||
"./tlh.js": 136,
|
||
"./tr": 137,
|
||
"./tr.js": 137,
|
||
"./tzl": 138,
|
||
"./tzl.js": 138,
|
||
"./tzm": 139,
|
||
"./tzm-latn": 140,
|
||
"./tzm-latn.js": 140,
|
||
"./tzm.js": 139,
|
||
"./uk": 141,
|
||
"./uk.js": 141,
|
||
"./uz": 142,
|
||
"./uz.js": 142,
|
||
"./vi": 143,
|
||
"./vi.js": 143,
|
||
"./x-pseudo": 144,
|
||
"./x-pseudo.js": 144,
|
||
"./yo": 145,
|
||
"./yo.js": 145,
|
||
"./zh-cn": 146,
|
||
"./zh-cn.js": 146,
|
||
"./zh-hk": 147,
|
||
"./zh-hk.js": 147,
|
||
"./zh-tw": 148,
|
||
"./zh-tw.js": 148
|
||
};
|
||
function webpackContext(req) {
|
||
return __webpack_require__(webpackContextResolve(req));
|
||
};
|
||
function webpackContextResolve(req) {
|
||
return map[req] || (function() { throw new Error("Cannot find module '" + req + "'.") }());
|
||
};
|
||
webpackContext.keys = function webpackContextKeys() {
|
||
return Object.keys(map);
|
||
};
|
||
webpackContext.resolve = webpackContextResolve;
|
||
module.exports = webpackContext;
|
||
webpackContext.id = 40;
|
||
|
||
|
||
/***/ },
|
||
/* 41 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Afrikaans [af]
|
||
//! author : Werner Mollentze : https://github.com/wernerm
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var af = moment.defineLocale('af', {
|
||
months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
|
||
weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
|
||
weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
|
||
weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
|
||
meridiemParse: /vm|nm/i,
|
||
isPM : function (input) {
|
||
return /^nm$/i.test(input);
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours < 12) {
|
||
return isLower ? 'vm' : 'VM';
|
||
} else {
|
||
return isLower ? 'nm' : 'NM';
|
||
}
|
||
},
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Vandag om] LT',
|
||
nextDay : '[Môre om] LT',
|
||
nextWeek : 'dddd [om] LT',
|
||
lastDay : '[Gister om] LT',
|
||
lastWeek : '[Laas] dddd [om] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'oor %s',
|
||
past : '%s gelede',
|
||
s : '\'n paar sekondes',
|
||
m : '\'n minuut',
|
||
mm : '%d minute',
|
||
h : '\'n uur',
|
||
hh : '%d ure',
|
||
d : '\'n dag',
|
||
dd : '%d dae',
|
||
M : '\'n maand',
|
||
MM : '%d maande',
|
||
y : '\'n jaar',
|
||
yy : '%d jaar'
|
||
},
|
||
ordinalParse: /\d{1,2}(ste|de)/,
|
||
ordinal : function (number) {
|
||
return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
|
||
},
|
||
week : {
|
||
dow : 1, // Maandag is die eerste dag van die week.
|
||
doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
|
||
}
|
||
});
|
||
|
||
return af;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 42 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Arabic [ar]
|
||
//! author : Abdel Said: https://github.com/abdelsaid
|
||
//! author : Ahmed Elkhatib
|
||
//! author : forabi https://github.com/forabi
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '١',
|
||
'2': '٢',
|
||
'3': '٣',
|
||
'4': '٤',
|
||
'5': '٥',
|
||
'6': '٦',
|
||
'7': '٧',
|
||
'8': '٨',
|
||
'9': '٩',
|
||
'0': '٠'
|
||
};
|
||
var numberMap = {
|
||
'١': '1',
|
||
'٢': '2',
|
||
'٣': '3',
|
||
'٤': '4',
|
||
'٥': '5',
|
||
'٦': '6',
|
||
'٧': '7',
|
||
'٨': '8',
|
||
'٩': '9',
|
||
'٠': '0'
|
||
};
|
||
var pluralForm = function (n) {
|
||
return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
|
||
};
|
||
var plurals = {
|
||
s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
|
||
m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
|
||
h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
|
||
d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
|
||
M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
|
||
y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
|
||
};
|
||
var pluralize = function (u) {
|
||
return function (number, withoutSuffix, string, isFuture) {
|
||
var f = pluralForm(number),
|
||
str = plurals[u][pluralForm(number)];
|
||
if (f === 2) {
|
||
str = str[withoutSuffix ? 0 : 1];
|
||
}
|
||
return str.replace(/%d/i, number);
|
||
};
|
||
};
|
||
var months = [
|
||
'كانون الثاني يناير',
|
||
'شباط فبراير',
|
||
'آذار مارس',
|
||
'نيسان أبريل',
|
||
'أيار مايو',
|
||
'حزيران يونيو',
|
||
'تموز يوليو',
|
||
'آب أغسطس',
|
||
'أيلول سبتمبر',
|
||
'تشرين الأول أكتوبر',
|
||
'تشرين الثاني نوفمبر',
|
||
'كانون الأول ديسمبر'
|
||
];
|
||
|
||
var ar = moment.defineLocale('ar', {
|
||
months : months,
|
||
monthsShort : months,
|
||
weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||
weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'D/\u200FM/\u200FYYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
meridiemParse: /ص|م/,
|
||
isPM : function (input) {
|
||
return 'م' === input;
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 12) {
|
||
return 'ص';
|
||
} else {
|
||
return 'م';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay: '[اليوم عند الساعة] LT',
|
||
nextDay: '[غدًا عند الساعة] LT',
|
||
nextWeek: 'dddd [عند الساعة] LT',
|
||
lastDay: '[أمس عند الساعة] LT',
|
||
lastWeek: 'dddd [عند الساعة] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'بعد %s',
|
||
past : 'منذ %s',
|
||
s : pluralize('s'),
|
||
m : pluralize('m'),
|
||
mm : pluralize('m'),
|
||
h : pluralize('h'),
|
||
hh : pluralize('h'),
|
||
d : pluralize('d'),
|
||
dd : pluralize('d'),
|
||
M : pluralize('M'),
|
||
MM : pluralize('M'),
|
||
y : pluralize('y'),
|
||
yy : pluralize('y')
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
|
||
return numberMap[match];
|
||
}).replace(/،/g, ',');
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
}).replace(/,/g, '،');
|
||
},
|
||
week : {
|
||
dow : 6, // Saturday is the first day of the week.
|
||
doy : 12 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return ar;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 43 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Arabic (Algeria) [ar-dz]
|
||
//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var arDz = moment.defineLocale('ar-dz', {
|
||
months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||
monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||
weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||
weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
|
||
weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[اليوم على الساعة] LT',
|
||
nextDay: '[غدا على الساعة] LT',
|
||
nextWeek: 'dddd [على الساعة] LT',
|
||
lastDay: '[أمس على الساعة] LT',
|
||
lastWeek: 'dddd [على الساعة] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'في %s',
|
||
past : 'منذ %s',
|
||
s : 'ثوان',
|
||
m : 'دقيقة',
|
||
mm : '%d دقائق',
|
||
h : 'ساعة',
|
||
hh : '%d ساعات',
|
||
d : 'يوم',
|
||
dd : '%d أيام',
|
||
M : 'شهر',
|
||
MM : '%d أشهر',
|
||
y : 'سنة',
|
||
yy : '%d سنوات'
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return arDz;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 44 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Arabic (Lybia) [ar-ly]
|
||
//! author : Ali Hmer: https://github.com/kikoanis
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '1',
|
||
'2': '2',
|
||
'3': '3',
|
||
'4': '4',
|
||
'5': '5',
|
||
'6': '6',
|
||
'7': '7',
|
||
'8': '8',
|
||
'9': '9',
|
||
'0': '0'
|
||
};
|
||
var pluralForm = function (n) {
|
||
return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
|
||
};
|
||
var plurals = {
|
||
s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
|
||
m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
|
||
h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
|
||
d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
|
||
M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
|
||
y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
|
||
};
|
||
var pluralize = function (u) {
|
||
return function (number, withoutSuffix, string, isFuture) {
|
||
var f = pluralForm(number),
|
||
str = plurals[u][pluralForm(number)];
|
||
if (f === 2) {
|
||
str = str[withoutSuffix ? 0 : 1];
|
||
}
|
||
return str.replace(/%d/i, number);
|
||
};
|
||
};
|
||
var months = [
|
||
'يناير',
|
||
'فبراير',
|
||
'مارس',
|
||
'أبريل',
|
||
'مايو',
|
||
'يونيو',
|
||
'يوليو',
|
||
'أغسطس',
|
||
'سبتمبر',
|
||
'أكتوبر',
|
||
'نوفمبر',
|
||
'ديسمبر'
|
||
];
|
||
|
||
var arLy = moment.defineLocale('ar-ly', {
|
||
months : months,
|
||
monthsShort : months,
|
||
weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||
weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'D/\u200FM/\u200FYYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
meridiemParse: /ص|م/,
|
||
isPM : function (input) {
|
||
return 'م' === input;
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 12) {
|
||
return 'ص';
|
||
} else {
|
||
return 'م';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay: '[اليوم عند الساعة] LT',
|
||
nextDay: '[غدًا عند الساعة] LT',
|
||
nextWeek: 'dddd [عند الساعة] LT',
|
||
lastDay: '[أمس عند الساعة] LT',
|
||
lastWeek: 'dddd [عند الساعة] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'بعد %s',
|
||
past : 'منذ %s',
|
||
s : pluralize('s'),
|
||
m : pluralize('m'),
|
||
mm : pluralize('m'),
|
||
h : pluralize('h'),
|
||
hh : pluralize('h'),
|
||
d : pluralize('d'),
|
||
dd : pluralize('d'),
|
||
M : pluralize('M'),
|
||
MM : pluralize('M'),
|
||
y : pluralize('y'),
|
||
yy : pluralize('y')
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/\u200f/g, '').replace(/،/g, ',');
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
}).replace(/,/g, '،');
|
||
},
|
||
week : {
|
||
dow : 6, // Saturday is the first day of the week.
|
||
doy : 12 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return arLy;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 45 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Arabic (Morocco) [ar-ma]
|
||
//! author : ElFadili Yassine : https://github.com/ElFadiliY
|
||
//! author : Abdel Said : https://github.com/abdelsaid
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var arMa = moment.defineLocale('ar-ma', {
|
||
months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
|
||
monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
|
||
weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||
weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
|
||
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[اليوم على الساعة] LT',
|
||
nextDay: '[غدا على الساعة] LT',
|
||
nextWeek: 'dddd [على الساعة] LT',
|
||
lastDay: '[أمس على الساعة] LT',
|
||
lastWeek: 'dddd [على الساعة] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'في %s',
|
||
past : 'منذ %s',
|
||
s : 'ثوان',
|
||
m : 'دقيقة',
|
||
mm : '%d دقائق',
|
||
h : 'ساعة',
|
||
hh : '%d ساعات',
|
||
d : 'يوم',
|
||
dd : '%d أيام',
|
||
M : 'شهر',
|
||
MM : '%d أشهر',
|
||
y : 'سنة',
|
||
yy : '%d سنوات'
|
||
},
|
||
week : {
|
||
dow : 6, // Saturday is the first day of the week.
|
||
doy : 12 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return arMa;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 46 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Arabic (Saudi Arabia) [ar-sa]
|
||
//! author : Suhail Alkowaileet : https://github.com/xsoh
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '١',
|
||
'2': '٢',
|
||
'3': '٣',
|
||
'4': '٤',
|
||
'5': '٥',
|
||
'6': '٦',
|
||
'7': '٧',
|
||
'8': '٨',
|
||
'9': '٩',
|
||
'0': '٠'
|
||
};
|
||
var numberMap = {
|
||
'١': '1',
|
||
'٢': '2',
|
||
'٣': '3',
|
||
'٤': '4',
|
||
'٥': '5',
|
||
'٦': '6',
|
||
'٧': '7',
|
||
'٨': '8',
|
||
'٩': '9',
|
||
'٠': '0'
|
||
};
|
||
|
||
var arSa = moment.defineLocale('ar-sa', {
|
||
months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||
monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||
weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||
weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
meridiemParse: /ص|م/,
|
||
isPM : function (input) {
|
||
return 'م' === input;
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 12) {
|
||
return 'ص';
|
||
} else {
|
||
return 'م';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay: '[اليوم على الساعة] LT',
|
||
nextDay: '[غدا على الساعة] LT',
|
||
nextWeek: 'dddd [على الساعة] LT',
|
||
lastDay: '[أمس على الساعة] LT',
|
||
lastWeek: 'dddd [على الساعة] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'في %s',
|
||
past : 'منذ %s',
|
||
s : 'ثوان',
|
||
m : 'دقيقة',
|
||
mm : '%d دقائق',
|
||
h : 'ساعة',
|
||
hh : '%d ساعات',
|
||
d : 'يوم',
|
||
dd : '%d أيام',
|
||
M : 'شهر',
|
||
MM : '%d أشهر',
|
||
y : 'سنة',
|
||
yy : '%d سنوات'
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
|
||
return numberMap[match];
|
||
}).replace(/،/g, ',');
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
}).replace(/,/g, '،');
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return arSa;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 47 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Arabic (Tunisia) [ar-tn]
|
||
//! author : Nader Toukabri : https://github.com/naderio
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var arTn = moment.defineLocale('ar-tn', {
|
||
months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||
monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat: {
|
||
LT: 'HH:mm',
|
||
LTS: 'HH:mm:ss',
|
||
L: 'DD/MM/YYYY',
|
||
LL: 'D MMMM YYYY',
|
||
LLL: 'D MMMM YYYY HH:mm',
|
||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar: {
|
||
sameDay: '[اليوم على الساعة] LT',
|
||
nextDay: '[غدا على الساعة] LT',
|
||
nextWeek: 'dddd [على الساعة] LT',
|
||
lastDay: '[أمس على الساعة] LT',
|
||
lastWeek: 'dddd [على الساعة] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime: {
|
||
future: 'في %s',
|
||
past: 'منذ %s',
|
||
s: 'ثوان',
|
||
m: 'دقيقة',
|
||
mm: '%d دقائق',
|
||
h: 'ساعة',
|
||
hh: '%d ساعات',
|
||
d: 'يوم',
|
||
dd: '%d أيام',
|
||
M: 'شهر',
|
||
MM: '%d أشهر',
|
||
y: 'سنة',
|
||
yy: '%d سنوات'
|
||
},
|
||
week: {
|
||
dow: 1, // Monday is the first day of the week.
|
||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return arTn;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 48 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Azerbaijani [az]
|
||
//! author : topchiyev : https://github.com/topchiyev
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var suffixes = {
|
||
1: '-inci',
|
||
5: '-inci',
|
||
8: '-inci',
|
||
70: '-inci',
|
||
80: '-inci',
|
||
2: '-nci',
|
||
7: '-nci',
|
||
20: '-nci',
|
||
50: '-nci',
|
||
3: '-üncü',
|
||
4: '-üncü',
|
||
100: '-üncü',
|
||
6: '-ncı',
|
||
9: '-uncu',
|
||
10: '-uncu',
|
||
30: '-uncu',
|
||
60: '-ıncı',
|
||
90: '-ıncı'
|
||
};
|
||
|
||
var az = moment.defineLocale('az', {
|
||
months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
|
||
monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
|
||
weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
|
||
weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
|
||
weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[bugün saat] LT',
|
||
nextDay : '[sabah saat] LT',
|
||
nextWeek : '[gələn həftə] dddd [saat] LT',
|
||
lastDay : '[dünən] LT',
|
||
lastWeek : '[keçən həftə] dddd [saat] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s sonra',
|
||
past : '%s əvvəl',
|
||
s : 'birneçə saniyyə',
|
||
m : 'bir dəqiqə',
|
||
mm : '%d dəqiqə',
|
||
h : 'bir saat',
|
||
hh : '%d saat',
|
||
d : 'bir gün',
|
||
dd : '%d gün',
|
||
M : 'bir ay',
|
||
MM : '%d ay',
|
||
y : 'bir il',
|
||
yy : '%d il'
|
||
},
|
||
meridiemParse: /gecə|səhər|gündüz|axşam/,
|
||
isPM : function (input) {
|
||
return /^(gündüz|axşam)$/.test(input);
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'gecə';
|
||
} else if (hour < 12) {
|
||
return 'səhər';
|
||
} else if (hour < 17) {
|
||
return 'gündüz';
|
||
} else {
|
||
return 'axşam';
|
||
}
|
||
},
|
||
ordinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
|
||
ordinal : function (number) {
|
||
if (number === 0) { // special case for zero
|
||
return number + '-ıncı';
|
||
}
|
||
var a = number % 10,
|
||
b = number % 100 - a,
|
||
c = number >= 100 ? 100 : null;
|
||
return number + (suffixes[a] || suffixes[b] || suffixes[c]);
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return az;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 49 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Belarusian [be]
|
||
//! author : Dmitry Demidov : https://github.com/demidov91
|
||
//! author: Praleska: http://praleska.pro/
|
||
//! Author : Menelion Elensúle : https://github.com/Oire
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function plural(word, num) {
|
||
var forms = word.split('_');
|
||
return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
|
||
}
|
||
function relativeTimeWithPlural(number, withoutSuffix, key) {
|
||
var format = {
|
||
'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
|
||
'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
|
||
'dd': 'дзень_дні_дзён',
|
||
'MM': 'месяц_месяцы_месяцаў',
|
||
'yy': 'год_гады_гадоў'
|
||
};
|
||
if (key === 'm') {
|
||
return withoutSuffix ? 'хвіліна' : 'хвіліну';
|
||
}
|
||
else if (key === 'h') {
|
||
return withoutSuffix ? 'гадзіна' : 'гадзіну';
|
||
}
|
||
else {
|
||
return number + ' ' + plural(format[key], +number);
|
||
}
|
||
}
|
||
|
||
var be = moment.defineLocale('be', {
|
||
months : {
|
||
format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
|
||
standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
|
||
},
|
||
monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
|
||
weekdays : {
|
||
format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
|
||
standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
|
||
isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/
|
||
},
|
||
weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
|
||
weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY г.',
|
||
LLL : 'D MMMM YYYY г., HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY г., HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Сёння ў] LT',
|
||
nextDay: '[Заўтра ў] LT',
|
||
lastDay: '[Учора ў] LT',
|
||
nextWeek: function () {
|
||
return '[У] dddd [ў] LT';
|
||
},
|
||
lastWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
case 3:
|
||
case 5:
|
||
case 6:
|
||
return '[У мінулую] dddd [ў] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
return '[У мінулы] dddd [ў] LT';
|
||
}
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'праз %s',
|
||
past : '%s таму',
|
||
s : 'некалькі секунд',
|
||
m : relativeTimeWithPlural,
|
||
mm : relativeTimeWithPlural,
|
||
h : relativeTimeWithPlural,
|
||
hh : relativeTimeWithPlural,
|
||
d : 'дзень',
|
||
dd : relativeTimeWithPlural,
|
||
M : 'месяц',
|
||
MM : relativeTimeWithPlural,
|
||
y : 'год',
|
||
yy : relativeTimeWithPlural
|
||
},
|
||
meridiemParse: /ночы|раніцы|дня|вечара/,
|
||
isPM : function (input) {
|
||
return /^(дня|вечара)$/.test(input);
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'ночы';
|
||
} else if (hour < 12) {
|
||
return 'раніцы';
|
||
} else if (hour < 17) {
|
||
return 'дня';
|
||
} else {
|
||
return 'вечара';
|
||
}
|
||
},
|
||
ordinalParse: /\d{1,2}-(і|ы|га)/,
|
||
ordinal: function (number, period) {
|
||
switch (period) {
|
||
case 'M':
|
||
case 'd':
|
||
case 'DDD':
|
||
case 'w':
|
||
case 'W':
|
||
return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
|
||
case 'D':
|
||
return number + '-га';
|
||
default:
|
||
return number;
|
||
}
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return be;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 50 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Bulgarian [bg]
|
||
//! author : Krasen Borisov : https://github.com/kraz
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var bg = moment.defineLocale('bg', {
|
||
months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
|
||
monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
|
||
weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
|
||
weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
|
||
weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'D.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY H:mm',
|
||
LLLL : 'dddd, D MMMM YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Днес в] LT',
|
||
nextDay : '[Утре в] LT',
|
||
nextWeek : 'dddd [в] LT',
|
||
lastDay : '[Вчера в] LT',
|
||
lastWeek : function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
case 3:
|
||
case 6:
|
||
return '[В изминалата] dddd [в] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[В изминалия] dddd [в] LT';
|
||
}
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'след %s',
|
||
past : 'преди %s',
|
||
s : 'няколко секунди',
|
||
m : 'минута',
|
||
mm : '%d минути',
|
||
h : 'час',
|
||
hh : '%d часа',
|
||
d : 'ден',
|
||
dd : '%d дни',
|
||
M : 'месец',
|
||
MM : '%d месеца',
|
||
y : 'година',
|
||
yy : '%d години'
|
||
},
|
||
ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
|
||
ordinal : function (number) {
|
||
var lastDigit = number % 10,
|
||
last2Digits = number % 100;
|
||
if (number === 0) {
|
||
return number + '-ев';
|
||
} else if (last2Digits === 0) {
|
||
return number + '-ен';
|
||
} else if (last2Digits > 10 && last2Digits < 20) {
|
||
return number + '-ти';
|
||
} else if (lastDigit === 1) {
|
||
return number + '-ви';
|
||
} else if (lastDigit === 2) {
|
||
return number + '-ри';
|
||
} else if (lastDigit === 7 || lastDigit === 8) {
|
||
return number + '-ми';
|
||
} else {
|
||
return number + '-ти';
|
||
}
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return bg;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 51 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Bengali [bn]
|
||
//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '১',
|
||
'2': '২',
|
||
'3': '৩',
|
||
'4': '৪',
|
||
'5': '৫',
|
||
'6': '৬',
|
||
'7': '৭',
|
||
'8': '৮',
|
||
'9': '৯',
|
||
'0': '০'
|
||
};
|
||
var numberMap = {
|
||
'১': '1',
|
||
'২': '2',
|
||
'৩': '3',
|
||
'৪': '4',
|
||
'৫': '5',
|
||
'৬': '6',
|
||
'৭': '7',
|
||
'৮': '8',
|
||
'৯': '9',
|
||
'০': '0'
|
||
};
|
||
|
||
var bn = moment.defineLocale('bn', {
|
||
months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
|
||
monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
|
||
weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
|
||
weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
|
||
weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'A h:mm সময়',
|
||
LTS : 'A h:mm:ss সময়',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY, A h:mm সময়',
|
||
LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'
|
||
},
|
||
calendar : {
|
||
sameDay : '[আজ] LT',
|
||
nextDay : '[আগামীকাল] LT',
|
||
nextWeek : 'dddd, LT',
|
||
lastDay : '[গতকাল] LT',
|
||
lastWeek : '[গত] dddd, LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s পরে',
|
||
past : '%s আগে',
|
||
s : 'কয়েক সেকেন্ড',
|
||
m : 'এক মিনিট',
|
||
mm : '%d মিনিট',
|
||
h : 'এক ঘন্টা',
|
||
hh : '%d ঘন্টা',
|
||
d : 'এক দিন',
|
||
dd : '%d দিন',
|
||
M : 'এক মাস',
|
||
MM : '%d মাস',
|
||
y : 'এক বছর',
|
||
yy : '%d বছর'
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
|
||
return numberMap[match];
|
||
});
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
});
|
||
},
|
||
meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if ((meridiem === 'রাত' && hour >= 4) ||
|
||
(meridiem === 'দুপুর' && hour < 5) ||
|
||
meridiem === 'বিকাল') {
|
||
return hour + 12;
|
||
} else {
|
||
return hour;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'রাত';
|
||
} else if (hour < 10) {
|
||
return 'সকাল';
|
||
} else if (hour < 17) {
|
||
return 'দুপুর';
|
||
} else if (hour < 20) {
|
||
return 'বিকাল';
|
||
} else {
|
||
return 'রাত';
|
||
}
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return bn;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 52 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Tibetan [bo]
|
||
//! author : Thupten N. Chakrishar : https://github.com/vajradog
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '༡',
|
||
'2': '༢',
|
||
'3': '༣',
|
||
'4': '༤',
|
||
'5': '༥',
|
||
'6': '༦',
|
||
'7': '༧',
|
||
'8': '༨',
|
||
'9': '༩',
|
||
'0': '༠'
|
||
};
|
||
var numberMap = {
|
||
'༡': '1',
|
||
'༢': '2',
|
||
'༣': '3',
|
||
'༤': '4',
|
||
'༥': '5',
|
||
'༦': '6',
|
||
'༧': '7',
|
||
'༨': '8',
|
||
'༩': '9',
|
||
'༠': '0'
|
||
};
|
||
|
||
var bo = moment.defineLocale('bo', {
|
||
months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
|
||
monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
|
||
weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
|
||
weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
|
||
weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'A h:mm',
|
||
LTS : 'A h:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY, A h:mm',
|
||
LLLL : 'dddd, D MMMM YYYY, A h:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[དི་རིང] LT',
|
||
nextDay : '[སང་ཉིན] LT',
|
||
nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',
|
||
lastDay : '[ཁ་སང] LT',
|
||
lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s ལ་',
|
||
past : '%s སྔན་ལ',
|
||
s : 'ལམ་སང',
|
||
m : 'སྐར་མ་གཅིག',
|
||
mm : '%d སྐར་མ',
|
||
h : 'ཆུ་ཚོད་གཅིག',
|
||
hh : '%d ཆུ་ཚོད',
|
||
d : 'ཉིན་གཅིག',
|
||
dd : '%d ཉིན་',
|
||
M : 'ཟླ་བ་གཅིག',
|
||
MM : '%d ཟླ་བ',
|
||
y : 'ལོ་གཅིག',
|
||
yy : '%d ལོ'
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
|
||
return numberMap[match];
|
||
});
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
});
|
||
},
|
||
meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if ((meridiem === 'མཚན་མོ' && hour >= 4) ||
|
||
(meridiem === 'ཉིན་གུང' && hour < 5) ||
|
||
meridiem === 'དགོང་དག') {
|
||
return hour + 12;
|
||
} else {
|
||
return hour;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'མཚན་མོ';
|
||
} else if (hour < 10) {
|
||
return 'ཞོགས་ཀས';
|
||
} else if (hour < 17) {
|
||
return 'ཉིན་གུང';
|
||
} else if (hour < 20) {
|
||
return 'དགོང་དག';
|
||
} else {
|
||
return 'མཚན་མོ';
|
||
}
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return bo;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 53 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Breton [br]
|
||
//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function relativeTimeWithMutation(number, withoutSuffix, key) {
|
||
var format = {
|
||
'mm': 'munutenn',
|
||
'MM': 'miz',
|
||
'dd': 'devezh'
|
||
};
|
||
return number + ' ' + mutation(format[key], number);
|
||
}
|
||
function specialMutationForYears(number) {
|
||
switch (lastNumber(number)) {
|
||
case 1:
|
||
case 3:
|
||
case 4:
|
||
case 5:
|
||
case 9:
|
||
return number + ' bloaz';
|
||
default:
|
||
return number + ' vloaz';
|
||
}
|
||
}
|
||
function lastNumber(number) {
|
||
if (number > 9) {
|
||
return lastNumber(number % 10);
|
||
}
|
||
return number;
|
||
}
|
||
function mutation(text, number) {
|
||
if (number === 2) {
|
||
return softMutation(text);
|
||
}
|
||
return text;
|
||
}
|
||
function softMutation(text) {
|
||
var mutationTable = {
|
||
'm': 'v',
|
||
'b': 'v',
|
||
'd': 'z'
|
||
};
|
||
if (mutationTable[text.charAt(0)] === undefined) {
|
||
return text;
|
||
}
|
||
return mutationTable[text.charAt(0)] + text.substring(1);
|
||
}
|
||
|
||
var br = moment.defineLocale('br', {
|
||
months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
|
||
monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
|
||
weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
|
||
weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
|
||
weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'h[e]mm A',
|
||
LTS : 'h[e]mm:ss A',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D [a viz] MMMM YYYY',
|
||
LLL : 'D [a viz] MMMM YYYY h[e]mm A',
|
||
LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Hiziv da] LT',
|
||
nextDay : '[Warc\'hoazh da] LT',
|
||
nextWeek : 'dddd [da] LT',
|
||
lastDay : '[Dec\'h da] LT',
|
||
lastWeek : 'dddd [paset da] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'a-benn %s',
|
||
past : '%s \'zo',
|
||
s : 'un nebeud segondennoù',
|
||
m : 'ur vunutenn',
|
||
mm : relativeTimeWithMutation,
|
||
h : 'un eur',
|
||
hh : '%d eur',
|
||
d : 'un devezh',
|
||
dd : relativeTimeWithMutation,
|
||
M : 'ur miz',
|
||
MM : relativeTimeWithMutation,
|
||
y : 'ur bloaz',
|
||
yy : specialMutationForYears
|
||
},
|
||
ordinalParse: /\d{1,2}(añ|vet)/,
|
||
ordinal : function (number) {
|
||
var output = (number === 1) ? 'añ' : 'vet';
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return br;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 54 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Bosnian [bs]
|
||
//! author : Nedim Cholich : https://github.com/frontyard
|
||
//! based on (hr) translation by Bojan Marković
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function translate(number, withoutSuffix, key) {
|
||
var result = number + ' ';
|
||
switch (key) {
|
||
case 'm':
|
||
return withoutSuffix ? 'jedna minuta' : 'jedne minute';
|
||
case 'mm':
|
||
if (number === 1) {
|
||
result += 'minuta';
|
||
} else if (number === 2 || number === 3 || number === 4) {
|
||
result += 'minute';
|
||
} else {
|
||
result += 'minuta';
|
||
}
|
||
return result;
|
||
case 'h':
|
||
return withoutSuffix ? 'jedan sat' : 'jednog sata';
|
||
case 'hh':
|
||
if (number === 1) {
|
||
result += 'sat';
|
||
} else if (number === 2 || number === 3 || number === 4) {
|
||
result += 'sata';
|
||
} else {
|
||
result += 'sati';
|
||
}
|
||
return result;
|
||
case 'dd':
|
||
if (number === 1) {
|
||
result += 'dan';
|
||
} else {
|
||
result += 'dana';
|
||
}
|
||
return result;
|
||
case 'MM':
|
||
if (number === 1) {
|
||
result += 'mjesec';
|
||
} else if (number === 2 || number === 3 || number === 4) {
|
||
result += 'mjeseca';
|
||
} else {
|
||
result += 'mjeseci';
|
||
}
|
||
return result;
|
||
case 'yy':
|
||
if (number === 1) {
|
||
result += 'godina';
|
||
} else if (number === 2 || number === 3 || number === 4) {
|
||
result += 'godine';
|
||
} else {
|
||
result += 'godina';
|
||
}
|
||
return result;
|
||
}
|
||
}
|
||
|
||
var bs = moment.defineLocale('bs', {
|
||
months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
|
||
monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
|
||
monthsParseExact: true,
|
||
weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
|
||
weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
|
||
weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY H:mm',
|
||
LLLL : 'dddd, D. MMMM YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[danas u] LT',
|
||
nextDay : '[sutra u] LT',
|
||
nextWeek : function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[u] [nedjelju] [u] LT';
|
||
case 3:
|
||
return '[u] [srijedu] [u] LT';
|
||
case 6:
|
||
return '[u] [subotu] [u] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[u] dddd [u] LT';
|
||
}
|
||
},
|
||
lastDay : '[jučer u] LT',
|
||
lastWeek : function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
case 3:
|
||
return '[prošlu] dddd [u] LT';
|
||
case 6:
|
||
return '[prošle] [subote] [u] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[prošli] dddd [u] LT';
|
||
}
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'za %s',
|
||
past : 'prije %s',
|
||
s : 'par sekundi',
|
||
m : translate,
|
||
mm : translate,
|
||
h : translate,
|
||
hh : translate,
|
||
d : 'dan',
|
||
dd : translate,
|
||
M : 'mjesec',
|
||
MM : translate,
|
||
y : 'godinu',
|
||
yy : translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return bs;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 55 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Catalan [ca]
|
||
//! author : Juan G. Hurtado : https://github.com/juanghurtado
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var ca = moment.defineLocale('ca', {
|
||
months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
|
||
monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
|
||
weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
|
||
weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY H:mm',
|
||
LLLL : 'dddd D MMMM YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : function () {
|
||
return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
|
||
},
|
||
nextDay : function () {
|
||
return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
|
||
},
|
||
nextWeek : function () {
|
||
return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
|
||
},
|
||
lastDay : function () {
|
||
return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
|
||
},
|
||
lastWeek : function () {
|
||
return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'd\'aquí %s',
|
||
past : 'fa %s',
|
||
s : 'uns segons',
|
||
m : 'un minut',
|
||
mm : '%d minuts',
|
||
h : 'una hora',
|
||
hh : '%d hores',
|
||
d : 'un dia',
|
||
dd : '%d dies',
|
||
M : 'un mes',
|
||
MM : '%d mesos',
|
||
y : 'un any',
|
||
yy : '%d anys'
|
||
},
|
||
ordinalParse: /\d{1,2}(r|n|t|è|a)/,
|
||
ordinal : function (number, period) {
|
||
var output = (number === 1) ? 'r' :
|
||
(number === 2) ? 'n' :
|
||
(number === 3) ? 'r' :
|
||
(number === 4) ? 't' : 'è';
|
||
if (period === 'w' || period === 'W') {
|
||
output = 'a';
|
||
}
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return ca;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 56 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Czech [cs]
|
||
//! author : petrbela : https://github.com/petrbela
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_');
|
||
var monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
|
||
function plural(n) {
|
||
return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
|
||
}
|
||
function translate(number, withoutSuffix, key, isFuture) {
|
||
var result = number + ' ';
|
||
switch (key) {
|
||
case 's': // a few seconds / in a few seconds / a few seconds ago
|
||
return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
|
||
case 'm': // a minute / in a minute / a minute ago
|
||
return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
|
||
case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'minuty' : 'minut');
|
||
} else {
|
||
return result + 'minutami';
|
||
}
|
||
break;
|
||
case 'h': // an hour / in an hour / an hour ago
|
||
return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
|
||
case 'hh': // 9 hours / in 9 hours / 9 hours ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'hodiny' : 'hodin');
|
||
} else {
|
||
return result + 'hodinami';
|
||
}
|
||
break;
|
||
case 'd': // a day / in a day / a day ago
|
||
return (withoutSuffix || isFuture) ? 'den' : 'dnem';
|
||
case 'dd': // 9 days / in 9 days / 9 days ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'dny' : 'dní');
|
||
} else {
|
||
return result + 'dny';
|
||
}
|
||
break;
|
||
case 'M': // a month / in a month / a month ago
|
||
return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
|
||
case 'MM': // 9 months / in 9 months / 9 months ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'měsíce' : 'měsíců');
|
||
} else {
|
||
return result + 'měsíci';
|
||
}
|
||
break;
|
||
case 'y': // a year / in a year / a year ago
|
||
return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
|
||
case 'yy': // 9 years / in 9 years / 9 years ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'roky' : 'let');
|
||
} else {
|
||
return result + 'lety';
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
var cs = moment.defineLocale('cs', {
|
||
months : months,
|
||
monthsShort : monthsShort,
|
||
monthsParse : (function (months, monthsShort) {
|
||
var i, _monthsParse = [];
|
||
for (i = 0; i < 12; i++) {
|
||
// use custom parser to solve problem with July (červenec)
|
||
_monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
|
||
}
|
||
return _monthsParse;
|
||
}(months, monthsShort)),
|
||
shortMonthsParse : (function (monthsShort) {
|
||
var i, _shortMonthsParse = [];
|
||
for (i = 0; i < 12; i++) {
|
||
_shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');
|
||
}
|
||
return _shortMonthsParse;
|
||
}(monthsShort)),
|
||
longMonthsParse : (function (months) {
|
||
var i, _longMonthsParse = [];
|
||
for (i = 0; i < 12; i++) {
|
||
_longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');
|
||
}
|
||
return _longMonthsParse;
|
||
}(months)),
|
||
weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
|
||
weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
|
||
weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
|
||
longDateFormat : {
|
||
LT: 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY H:mm',
|
||
LLLL : 'dddd D. MMMM YYYY H:mm',
|
||
l : 'D. M. YYYY'
|
||
},
|
||
calendar : {
|
||
sameDay: '[dnes v] LT',
|
||
nextDay: '[zítra v] LT',
|
||
nextWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[v neděli v] LT';
|
||
case 1:
|
||
case 2:
|
||
return '[v] dddd [v] LT';
|
||
case 3:
|
||
return '[ve středu v] LT';
|
||
case 4:
|
||
return '[ve čtvrtek v] LT';
|
||
case 5:
|
||
return '[v pátek v] LT';
|
||
case 6:
|
||
return '[v sobotu v] LT';
|
||
}
|
||
},
|
||
lastDay: '[včera v] LT',
|
||
lastWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[minulou neděli v] LT';
|
||
case 1:
|
||
case 2:
|
||
return '[minulé] dddd [v] LT';
|
||
case 3:
|
||
return '[minulou středu v] LT';
|
||
case 4:
|
||
case 5:
|
||
return '[minulý] dddd [v] LT';
|
||
case 6:
|
||
return '[minulou sobotu v] LT';
|
||
}
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'za %s',
|
||
past : 'před %s',
|
||
s : translate,
|
||
m : translate,
|
||
mm : translate,
|
||
h : translate,
|
||
hh : translate,
|
||
d : translate,
|
||
dd : translate,
|
||
M : translate,
|
||
MM : translate,
|
||
y : translate,
|
||
yy : translate
|
||
},
|
||
ordinalParse : /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return cs;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 57 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Chuvash [cv]
|
||
//! author : Anatoly Mironov : https://github.com/mirontoli
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var cv = moment.defineLocale('cv', {
|
||
months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
|
||
monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
|
||
weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
|
||
weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
|
||
weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD-MM-YYYY',
|
||
LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
|
||
LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
|
||
LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Паян] LT [сехетре]',
|
||
nextDay: '[Ыран] LT [сехетре]',
|
||
lastDay: '[Ӗнер] LT [сехетре]',
|
||
nextWeek: '[Ҫитес] dddd LT [сехетре]',
|
||
lastWeek: '[Иртнӗ] dddd LT [сехетре]',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : function (output) {
|
||
var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';
|
||
return output + affix;
|
||
},
|
||
past : '%s каялла',
|
||
s : 'пӗр-ик ҫеккунт',
|
||
m : 'пӗр минут',
|
||
mm : '%d минут',
|
||
h : 'пӗр сехет',
|
||
hh : '%d сехет',
|
||
d : 'пӗр кун',
|
||
dd : '%d кун',
|
||
M : 'пӗр уйӑх',
|
||
MM : '%d уйӑх',
|
||
y : 'пӗр ҫул',
|
||
yy : '%d ҫул'
|
||
},
|
||
ordinalParse: /\d{1,2}-мӗш/,
|
||
ordinal : '%d-мӗш',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return cv;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 58 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Welsh [cy]
|
||
//! author : Robert Allen : https://github.com/robgallen
|
||
//! author : https://github.com/ryangreaves
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var cy = moment.defineLocale('cy', {
|
||
months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
|
||
monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
|
||
weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
|
||
weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
|
||
weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
|
||
weekdaysParseExact : true,
|
||
// time formats are the same as en-gb
|
||
longDateFormat: {
|
||
LT: 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L: 'DD/MM/YYYY',
|
||
LL: 'D MMMM YYYY',
|
||
LLL: 'D MMMM YYYY HH:mm',
|
||
LLLL: 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar: {
|
||
sameDay: '[Heddiw am] LT',
|
||
nextDay: '[Yfory am] LT',
|
||
nextWeek: 'dddd [am] LT',
|
||
lastDay: '[Ddoe am] LT',
|
||
lastWeek: 'dddd [diwethaf am] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime: {
|
||
future: 'mewn %s',
|
||
past: '%s yn ôl',
|
||
s: 'ychydig eiliadau',
|
||
m: 'munud',
|
||
mm: '%d munud',
|
||
h: 'awr',
|
||
hh: '%d awr',
|
||
d: 'diwrnod',
|
||
dd: '%d diwrnod',
|
||
M: 'mis',
|
||
MM: '%d mis',
|
||
y: 'blwyddyn',
|
||
yy: '%d flynedd'
|
||
},
|
||
ordinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
|
||
// traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
|
||
ordinal: function (number) {
|
||
var b = number,
|
||
output = '',
|
||
lookup = [
|
||
'', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
|
||
'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
|
||
];
|
||
if (b > 20) {
|
||
if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
|
||
output = 'fed'; // not 30ain, 70ain or 90ain
|
||
} else {
|
||
output = 'ain';
|
||
}
|
||
} else if (b > 0) {
|
||
output = lookup[b];
|
||
}
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return cy;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 59 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Danish [da]
|
||
//! author : Ulrik Nielsen : https://github.com/mrbase
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var da = moment.defineLocale('da', {
|
||
months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
|
||
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
|
||
weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
|
||
weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),
|
||
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY HH:mm',
|
||
LLLL : 'dddd [d.] D. MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[I dag kl.] LT',
|
||
nextDay : '[I morgen kl.] LT',
|
||
nextWeek : 'dddd [kl.] LT',
|
||
lastDay : '[I går kl.] LT',
|
||
lastWeek : '[sidste] dddd [kl] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'om %s',
|
||
past : '%s siden',
|
||
s : 'få sekunder',
|
||
m : 'et minut',
|
||
mm : '%d minutter',
|
||
h : 'en time',
|
||
hh : '%d timer',
|
||
d : 'en dag',
|
||
dd : '%d dage',
|
||
M : 'en måned',
|
||
MM : '%d måneder',
|
||
y : 'et år',
|
||
yy : '%d år'
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return da;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 60 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : German [de]
|
||
//! author : lluchs : https://github.com/lluchs
|
||
//! author: Menelion Elensúle: https://github.com/Oire
|
||
//! author : Mikolaj Dadela : https://github.com/mik01aj
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function processRelativeTime(number, withoutSuffix, key, isFuture) {
|
||
var format = {
|
||
'm': ['eine Minute', 'einer Minute'],
|
||
'h': ['eine Stunde', 'einer Stunde'],
|
||
'd': ['ein Tag', 'einem Tag'],
|
||
'dd': [number + ' Tage', number + ' Tagen'],
|
||
'M': ['ein Monat', 'einem Monat'],
|
||
'MM': [number + ' Monate', number + ' Monaten'],
|
||
'y': ['ein Jahr', 'einem Jahr'],
|
||
'yy': [number + ' Jahre', number + ' Jahren']
|
||
};
|
||
return withoutSuffix ? format[key][0] : format[key][1];
|
||
}
|
||
|
||
var de = moment.defineLocale('de', {
|
||
months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
||
monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
|
||
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
|
||
weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT: 'HH:mm',
|
||
LTS: 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D. MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[heute um] LT [Uhr]',
|
||
sameElse: 'L',
|
||
nextDay: '[morgen um] LT [Uhr]',
|
||
nextWeek: 'dddd [um] LT [Uhr]',
|
||
lastDay: '[gestern um] LT [Uhr]',
|
||
lastWeek: '[letzten] dddd [um] LT [Uhr]'
|
||
},
|
||
relativeTime : {
|
||
future : 'in %s',
|
||
past : 'vor %s',
|
||
s : 'ein paar Sekunden',
|
||
m : processRelativeTime,
|
||
mm : '%d Minuten',
|
||
h : processRelativeTime,
|
||
hh : '%d Stunden',
|
||
d : processRelativeTime,
|
||
dd : processRelativeTime,
|
||
M : processRelativeTime,
|
||
MM : processRelativeTime,
|
||
y : processRelativeTime,
|
||
yy : processRelativeTime
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return de;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 61 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : German (Austria) [de-at]
|
||
//! author : lluchs : https://github.com/lluchs
|
||
//! author: Menelion Elensúle: https://github.com/Oire
|
||
//! author : Martin Groller : https://github.com/MadMG
|
||
//! author : Mikolaj Dadela : https://github.com/mik01aj
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function processRelativeTime(number, withoutSuffix, key, isFuture) {
|
||
var format = {
|
||
'm': ['eine Minute', 'einer Minute'],
|
||
'h': ['eine Stunde', 'einer Stunde'],
|
||
'd': ['ein Tag', 'einem Tag'],
|
||
'dd': [number + ' Tage', number + ' Tagen'],
|
||
'M': ['ein Monat', 'einem Monat'],
|
||
'MM': [number + ' Monate', number + ' Monaten'],
|
||
'y': ['ein Jahr', 'einem Jahr'],
|
||
'yy': [number + ' Jahre', number + ' Jahren']
|
||
};
|
||
return withoutSuffix ? format[key][0] : format[key][1];
|
||
}
|
||
|
||
var deAt = moment.defineLocale('de-at', {
|
||
months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
||
monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
|
||
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
|
||
weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT: 'HH:mm',
|
||
LTS: 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D. MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[heute um] LT [Uhr]',
|
||
sameElse: 'L',
|
||
nextDay: '[morgen um] LT [Uhr]',
|
||
nextWeek: 'dddd [um] LT [Uhr]',
|
||
lastDay: '[gestern um] LT [Uhr]',
|
||
lastWeek: '[letzten] dddd [um] LT [Uhr]'
|
||
},
|
||
relativeTime : {
|
||
future : 'in %s',
|
||
past : 'vor %s',
|
||
s : 'ein paar Sekunden',
|
||
m : processRelativeTime,
|
||
mm : '%d Minuten',
|
||
h : processRelativeTime,
|
||
hh : '%d Stunden',
|
||
d : processRelativeTime,
|
||
dd : processRelativeTime,
|
||
M : processRelativeTime,
|
||
MM : processRelativeTime,
|
||
y : processRelativeTime,
|
||
yy : processRelativeTime
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return deAt;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 62 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Maldivian [dv]
|
||
//! author : Jawish Hameed : https://github.com/jawish
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var months = [
|
||
'ޖެނުއަރީ',
|
||
'ފެބްރުއަރީ',
|
||
'މާރިޗު',
|
||
'އޭޕްރީލު',
|
||
'މޭ',
|
||
'ޖޫން',
|
||
'ޖުލައި',
|
||
'އޯގަސްޓު',
|
||
'ސެޕްޓެމްބަރު',
|
||
'އޮކްޓޯބަރު',
|
||
'ނޮވެމްބަރު',
|
||
'ޑިސެމްބަރު'
|
||
];
|
||
var weekdays = [
|
||
'އާދިއްތަ',
|
||
'ހޯމަ',
|
||
'އަންގާރަ',
|
||
'ބުދަ',
|
||
'ބުރާސްފަތި',
|
||
'ހުކުރު',
|
||
'ހޮނިހިރު'
|
||
];
|
||
|
||
var dv = moment.defineLocale('dv', {
|
||
months : months,
|
||
monthsShort : months,
|
||
weekdays : weekdays,
|
||
weekdaysShort : weekdays,
|
||
weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
|
||
longDateFormat : {
|
||
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'D/M/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
meridiemParse: /މކ|މފ/,
|
||
isPM : function (input) {
|
||
return 'މފ' === input;
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 12) {
|
||
return 'މކ';
|
||
} else {
|
||
return 'މފ';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[މިއަދު] LT',
|
||
nextDay : '[މާދަމާ] LT',
|
||
nextWeek : 'dddd LT',
|
||
lastDay : '[އިއްޔެ] LT',
|
||
lastWeek : '[ފާއިތުވި] dddd LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'ތެރޭގައި %s',
|
||
past : 'ކުރިން %s',
|
||
s : 'ސިކުންތުކޮޅެއް',
|
||
m : 'މިނިޓެއް',
|
||
mm : 'މިނިޓު %d',
|
||
h : 'ގަޑިއިރެއް',
|
||
hh : 'ގަޑިއިރު %d',
|
||
d : 'ދުވަހެއް',
|
||
dd : 'ދުވަސް %d',
|
||
M : 'މަހެއް',
|
||
MM : 'މަސް %d',
|
||
y : 'އަހަރެއް',
|
||
yy : 'އަހަރު %d'
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/،/g, ',');
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/,/g, '،');
|
||
},
|
||
week : {
|
||
dow : 7, // Sunday is the first day of the week.
|
||
doy : 12 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return dv;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 63 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Greek [el]
|
||
//! author : Aggelos Karalias : https://github.com/mehiel
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
function isFunction(input) {
|
||
return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
|
||
}
|
||
|
||
|
||
var el = moment.defineLocale('el', {
|
||
monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
|
||
monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
|
||
months : function (momentToFormat, format) {
|
||
if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'
|
||
return this._monthsGenitiveEl[momentToFormat.month()];
|
||
} else {
|
||
return this._monthsNominativeEl[momentToFormat.month()];
|
||
}
|
||
},
|
||
monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
|
||
weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
|
||
weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
|
||
weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours > 11) {
|
||
return isLower ? 'μμ' : 'ΜΜ';
|
||
} else {
|
||
return isLower ? 'πμ' : 'ΠΜ';
|
||
}
|
||
},
|
||
isPM : function (input) {
|
||
return ((input + '').toLowerCase()[0] === 'μ');
|
||
},
|
||
meridiemParse : /[ΠΜ]\.?Μ?\.?/i,
|
||
longDateFormat : {
|
||
LT : 'h:mm A',
|
||
LTS : 'h:mm:ss A',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY h:mm A',
|
||
LLLL : 'dddd, D MMMM YYYY h:mm A'
|
||
},
|
||
calendarEl : {
|
||
sameDay : '[Σήμερα {}] LT',
|
||
nextDay : '[Αύριο {}] LT',
|
||
nextWeek : 'dddd [{}] LT',
|
||
lastDay : '[Χθες {}] LT',
|
||
lastWeek : function () {
|
||
switch (this.day()) {
|
||
case 6:
|
||
return '[το προηγούμενο] dddd [{}] LT';
|
||
default:
|
||
return '[την προηγούμενη] dddd [{}] LT';
|
||
}
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
calendar : function (key, mom) {
|
||
var output = this._calendarEl[key],
|
||
hours = mom && mom.hours();
|
||
if (isFunction(output)) {
|
||
output = output.apply(mom);
|
||
}
|
||
return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
|
||
},
|
||
relativeTime : {
|
||
future : 'σε %s',
|
||
past : '%s πριν',
|
||
s : 'λίγα δευτερόλεπτα',
|
||
m : 'ένα λεπτό',
|
||
mm : '%d λεπτά',
|
||
h : 'μία ώρα',
|
||
hh : '%d ώρες',
|
||
d : 'μία μέρα',
|
||
dd : '%d μέρες',
|
||
M : 'ένας μήνας',
|
||
MM : '%d μήνες',
|
||
y : 'ένας χρόνος',
|
||
yy : '%d χρόνια'
|
||
},
|
||
ordinalParse: /\d{1,2}η/,
|
||
ordinal: '%dη',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return el;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 64 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : English (Australia) [en-au]
|
||
//! author : Jared Morse : https://github.com/jarcoal
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var enAu = moment.defineLocale('en-au', {
|
||
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
|
||
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
|
||
weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
|
||
weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'h:mm A',
|
||
LTS : 'h:mm:ss A',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY h:mm A',
|
||
LLLL : 'dddd, D MMMM YYYY h:mm A'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Today at] LT',
|
||
nextDay : '[Tomorrow at] LT',
|
||
nextWeek : 'dddd [at] LT',
|
||
lastDay : '[Yesterday at] LT',
|
||
lastWeek : '[Last] dddd [at] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'in %s',
|
||
past : '%s ago',
|
||
s : 'a few seconds',
|
||
m : 'a minute',
|
||
mm : '%d minutes',
|
||
h : 'an hour',
|
||
hh : '%d hours',
|
||
d : 'a day',
|
||
dd : '%d days',
|
||
M : 'a month',
|
||
MM : '%d months',
|
||
y : 'a year',
|
||
yy : '%d years'
|
||
},
|
||
ordinalParse: /\d{1,2}(st|nd|rd|th)/,
|
||
ordinal : function (number) {
|
||
var b = number % 10,
|
||
output = (~~(number % 100 / 10) === 1) ? 'th' :
|
||
(b === 1) ? 'st' :
|
||
(b === 2) ? 'nd' :
|
||
(b === 3) ? 'rd' : 'th';
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return enAu;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 65 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : English (Canada) [en-ca]
|
||
//! author : Jonathan Abourbih : https://github.com/jonbca
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var enCa = moment.defineLocale('en-ca', {
|
||
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
|
||
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
|
||
weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
|
||
weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'h:mm A',
|
||
LTS : 'h:mm:ss A',
|
||
L : 'YYYY-MM-DD',
|
||
LL : 'MMMM D, YYYY',
|
||
LLL : 'MMMM D, YYYY h:mm A',
|
||
LLLL : 'dddd, MMMM D, YYYY h:mm A'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Today at] LT',
|
||
nextDay : '[Tomorrow at] LT',
|
||
nextWeek : 'dddd [at] LT',
|
||
lastDay : '[Yesterday at] LT',
|
||
lastWeek : '[Last] dddd [at] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'in %s',
|
||
past : '%s ago',
|
||
s : 'a few seconds',
|
||
m : 'a minute',
|
||
mm : '%d minutes',
|
||
h : 'an hour',
|
||
hh : '%d hours',
|
||
d : 'a day',
|
||
dd : '%d days',
|
||
M : 'a month',
|
||
MM : '%d months',
|
||
y : 'a year',
|
||
yy : '%d years'
|
||
},
|
||
ordinalParse: /\d{1,2}(st|nd|rd|th)/,
|
||
ordinal : function (number) {
|
||
var b = number % 10,
|
||
output = (~~(number % 100 / 10) === 1) ? 'th' :
|
||
(b === 1) ? 'st' :
|
||
(b === 2) ? 'nd' :
|
||
(b === 3) ? 'rd' : 'th';
|
||
return number + output;
|
||
}
|
||
});
|
||
|
||
return enCa;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 66 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : English (United Kingdom) [en-gb]
|
||
//! author : Chris Gedrim : https://github.com/chrisgedrim
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var enGb = moment.defineLocale('en-gb', {
|
||
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
|
||
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
|
||
weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
|
||
weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Today at] LT',
|
||
nextDay : '[Tomorrow at] LT',
|
||
nextWeek : 'dddd [at] LT',
|
||
lastDay : '[Yesterday at] LT',
|
||
lastWeek : '[Last] dddd [at] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'in %s',
|
||
past : '%s ago',
|
||
s : 'a few seconds',
|
||
m : 'a minute',
|
||
mm : '%d minutes',
|
||
h : 'an hour',
|
||
hh : '%d hours',
|
||
d : 'a day',
|
||
dd : '%d days',
|
||
M : 'a month',
|
||
MM : '%d months',
|
||
y : 'a year',
|
||
yy : '%d years'
|
||
},
|
||
ordinalParse: /\d{1,2}(st|nd|rd|th)/,
|
||
ordinal : function (number) {
|
||
var b = number % 10,
|
||
output = (~~(number % 100 / 10) === 1) ? 'th' :
|
||
(b === 1) ? 'st' :
|
||
(b === 2) ? 'nd' :
|
||
(b === 3) ? 'rd' : 'th';
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return enGb;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 67 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : English (Ireland) [en-ie]
|
||
//! author : Chris Cartlidge : https://github.com/chriscartlidge
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var enIe = moment.defineLocale('en-ie', {
|
||
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
|
||
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
|
||
weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
|
||
weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD-MM-YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Today at] LT',
|
||
nextDay : '[Tomorrow at] LT',
|
||
nextWeek : 'dddd [at] LT',
|
||
lastDay : '[Yesterday at] LT',
|
||
lastWeek : '[Last] dddd [at] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'in %s',
|
||
past : '%s ago',
|
||
s : 'a few seconds',
|
||
m : 'a minute',
|
||
mm : '%d minutes',
|
||
h : 'an hour',
|
||
hh : '%d hours',
|
||
d : 'a day',
|
||
dd : '%d days',
|
||
M : 'a month',
|
||
MM : '%d months',
|
||
y : 'a year',
|
||
yy : '%d years'
|
||
},
|
||
ordinalParse: /\d{1,2}(st|nd|rd|th)/,
|
||
ordinal : function (number) {
|
||
var b = number % 10,
|
||
output = (~~(number % 100 / 10) === 1) ? 'th' :
|
||
(b === 1) ? 'st' :
|
||
(b === 2) ? 'nd' :
|
||
(b === 3) ? 'rd' : 'th';
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return enIe;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 68 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : English (New Zealand) [en-nz]
|
||
//! author : Luke McGregor : https://github.com/lukemcgregor
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var enNz = moment.defineLocale('en-nz', {
|
||
months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
|
||
weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
|
||
weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
|
||
weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'h:mm A',
|
||
LTS : 'h:mm:ss A',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY h:mm A',
|
||
LLLL : 'dddd, D MMMM YYYY h:mm A'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Today at] LT',
|
||
nextDay : '[Tomorrow at] LT',
|
||
nextWeek : 'dddd [at] LT',
|
||
lastDay : '[Yesterday at] LT',
|
||
lastWeek : '[Last] dddd [at] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'in %s',
|
||
past : '%s ago',
|
||
s : 'a few seconds',
|
||
m : 'a minute',
|
||
mm : '%d minutes',
|
||
h : 'an hour',
|
||
hh : '%d hours',
|
||
d : 'a day',
|
||
dd : '%d days',
|
||
M : 'a month',
|
||
MM : '%d months',
|
||
y : 'a year',
|
||
yy : '%d years'
|
||
},
|
||
ordinalParse: /\d{1,2}(st|nd|rd|th)/,
|
||
ordinal : function (number) {
|
||
var b = number % 10,
|
||
output = (~~(number % 100 / 10) === 1) ? 'th' :
|
||
(b === 1) ? 'st' :
|
||
(b === 2) ? 'nd' :
|
||
(b === 3) ? 'rd' : 'th';
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return enNz;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 69 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Esperanto [eo]
|
||
//! author : Colin Dean : https://github.com/colindean
|
||
//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
|
||
//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var eo = moment.defineLocale('eo', {
|
||
months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
|
||
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),
|
||
weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'),
|
||
weekdaysShort : 'Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab'.split('_'),
|
||
weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'YYYY-MM-DD',
|
||
LL : 'D[-an de] MMMM, YYYY',
|
||
LLL : 'D[-an de] MMMM, YYYY HH:mm',
|
||
LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm'
|
||
},
|
||
meridiemParse: /[ap]\.t\.m/i,
|
||
isPM: function (input) {
|
||
return input.charAt(0).toLowerCase() === 'p';
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours > 11) {
|
||
return isLower ? 'p.t.m.' : 'P.T.M.';
|
||
} else {
|
||
return isLower ? 'a.t.m.' : 'A.T.M.';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[Hodiaŭ je] LT',
|
||
nextDay : '[Morgaŭ je] LT',
|
||
nextWeek : 'dddd [je] LT',
|
||
lastDay : '[Hieraŭ je] LT',
|
||
lastWeek : '[pasinta] dddd [je] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'je %s',
|
||
past : 'antaŭ %s',
|
||
s : 'sekundoj',
|
||
m : 'minuto',
|
||
mm : '%d minutoj',
|
||
h : 'horo',
|
||
hh : '%d horoj',
|
||
d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo
|
||
dd : '%d tagoj',
|
||
M : 'monato',
|
||
MM : '%d monatoj',
|
||
y : 'jaro',
|
||
yy : '%d jaroj'
|
||
},
|
||
ordinalParse: /\d{1,2}a/,
|
||
ordinal : '%da',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return eo;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 70 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Spanish [es]
|
||
//! author : Julio Napurí : https://github.com/julionc
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
|
||
var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
|
||
|
||
var es = moment.defineLocale('es', {
|
||
months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
|
||
monthsShort : function (m, format) {
|
||
if (/-MMM-/.test(format)) {
|
||
return monthsShort[m.month()];
|
||
} else {
|
||
return monthsShortDot[m.month()];
|
||
}
|
||
},
|
||
monthsParseExact : true,
|
||
weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
|
||
weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
|
||
weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D [de] MMMM [de] YYYY',
|
||
LLL : 'D [de] MMMM [de] YYYY H:mm',
|
||
LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : function () {
|
||
return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
nextDay : function () {
|
||
return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
nextWeek : function () {
|
||
return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
lastDay : function () {
|
||
return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
lastWeek : function () {
|
||
return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'en %s',
|
||
past : 'hace %s',
|
||
s : 'unos segundos',
|
||
m : 'un minuto',
|
||
mm : '%d minutos',
|
||
h : 'una hora',
|
||
hh : '%d horas',
|
||
d : 'un día',
|
||
dd : '%d días',
|
||
M : 'un mes',
|
||
MM : '%d meses',
|
||
y : 'un año',
|
||
yy : '%d años'
|
||
},
|
||
ordinalParse : /\d{1,2}º/,
|
||
ordinal : '%dº',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return es;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 71 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Spanish (Dominican Republic) [es-do]
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
|
||
var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
|
||
|
||
var esDo = moment.defineLocale('es-do', {
|
||
months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
|
||
monthsShort : function (m, format) {
|
||
if (/-MMM-/.test(format)) {
|
||
return monthsShort[m.month()];
|
||
} else {
|
||
return monthsShortDot[m.month()];
|
||
}
|
||
},
|
||
monthsParseExact : true,
|
||
weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
|
||
weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
|
||
weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'h:mm A',
|
||
LTS : 'h:mm:ss A',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D [de] MMMM [de] YYYY',
|
||
LLL : 'D [de] MMMM [de] YYYY h:mm A',
|
||
LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
|
||
},
|
||
calendar : {
|
||
sameDay : function () {
|
||
return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
nextDay : function () {
|
||
return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
nextWeek : function () {
|
||
return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
lastDay : function () {
|
||
return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
lastWeek : function () {
|
||
return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'en %s',
|
||
past : 'hace %s',
|
||
s : 'unos segundos',
|
||
m : 'un minuto',
|
||
mm : '%d minutos',
|
||
h : 'una hora',
|
||
hh : '%d horas',
|
||
d : 'un día',
|
||
dd : '%d días',
|
||
M : 'un mes',
|
||
MM : '%d meses',
|
||
y : 'un año',
|
||
yy : '%d años'
|
||
},
|
||
ordinalParse : /\d{1,2}º/,
|
||
ordinal : '%dº',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return esDo;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 72 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Estonian [et]
|
||
//! author : Henry Kehlmann : https://github.com/madhenry
|
||
//! improvements : Illimar Tambek : https://github.com/ragulka
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function processRelativeTime(number, withoutSuffix, key, isFuture) {
|
||
var format = {
|
||
's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
|
||
'm' : ['ühe minuti', 'üks minut'],
|
||
'mm': [number + ' minuti', number + ' minutit'],
|
||
'h' : ['ühe tunni', 'tund aega', 'üks tund'],
|
||
'hh': [number + ' tunni', number + ' tundi'],
|
||
'd' : ['ühe päeva', 'üks päev'],
|
||
'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
|
||
'MM': [number + ' kuu', number + ' kuud'],
|
||
'y' : ['ühe aasta', 'aasta', 'üks aasta'],
|
||
'yy': [number + ' aasta', number + ' aastat']
|
||
};
|
||
if (withoutSuffix) {
|
||
return format[key][2] ? format[key][2] : format[key][1];
|
||
}
|
||
return isFuture ? format[key][0] : format[key][1];
|
||
}
|
||
|
||
var et = moment.defineLocale('et', {
|
||
months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
|
||
monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
|
||
weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
|
||
weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),
|
||
weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY H:mm',
|
||
LLLL : 'dddd, D. MMMM YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Täna,] LT',
|
||
nextDay : '[Homme,] LT',
|
||
nextWeek : '[Järgmine] dddd LT',
|
||
lastDay : '[Eile,] LT',
|
||
lastWeek : '[Eelmine] dddd LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s pärast',
|
||
past : '%s tagasi',
|
||
s : processRelativeTime,
|
||
m : processRelativeTime,
|
||
mm : processRelativeTime,
|
||
h : processRelativeTime,
|
||
hh : processRelativeTime,
|
||
d : processRelativeTime,
|
||
dd : '%d päeva',
|
||
M : processRelativeTime,
|
||
MM : processRelativeTime,
|
||
y : processRelativeTime,
|
||
yy : processRelativeTime
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return et;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 73 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Basque [eu]
|
||
//! author : Eneko Illarramendi : https://github.com/eillarra
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var eu = moment.defineLocale('eu', {
|
||
months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
|
||
monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
|
||
weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
|
||
weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'YYYY-MM-DD',
|
||
LL : 'YYYY[ko] MMMM[ren] D[a]',
|
||
LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',
|
||
LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
|
||
l : 'YYYY-M-D',
|
||
ll : 'YYYY[ko] MMM D[a]',
|
||
lll : 'YYYY[ko] MMM D[a] HH:mm',
|
||
llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[gaur] LT[etan]',
|
||
nextDay : '[bihar] LT[etan]',
|
||
nextWeek : 'dddd LT[etan]',
|
||
lastDay : '[atzo] LT[etan]',
|
||
lastWeek : '[aurreko] dddd LT[etan]',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s barru',
|
||
past : 'duela %s',
|
||
s : 'segundo batzuk',
|
||
m : 'minutu bat',
|
||
mm : '%d minutu',
|
||
h : 'ordu bat',
|
||
hh : '%d ordu',
|
||
d : 'egun bat',
|
||
dd : '%d egun',
|
||
M : 'hilabete bat',
|
||
MM : '%d hilabete',
|
||
y : 'urte bat',
|
||
yy : '%d urte'
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return eu;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 74 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Persian [fa]
|
||
//! author : Ebrahim Byagowi : https://github.com/ebraminio
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '۱',
|
||
'2': '۲',
|
||
'3': '۳',
|
||
'4': '۴',
|
||
'5': '۵',
|
||
'6': '۶',
|
||
'7': '۷',
|
||
'8': '۸',
|
||
'9': '۹',
|
||
'0': '۰'
|
||
};
|
||
var numberMap = {
|
||
'۱': '1',
|
||
'۲': '2',
|
||
'۳': '3',
|
||
'۴': '4',
|
||
'۵': '5',
|
||
'۶': '6',
|
||
'۷': '7',
|
||
'۸': '8',
|
||
'۹': '9',
|
||
'۰': '0'
|
||
};
|
||
|
||
var fa = moment.defineLocale('fa', {
|
||
months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
|
||
monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
|
||
weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
|
||
weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
|
||
weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
meridiemParse: /قبل از ظهر|بعد از ظهر/,
|
||
isPM: function (input) {
|
||
return /بعد از ظهر/.test(input);
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 12) {
|
||
return 'قبل از ظهر';
|
||
} else {
|
||
return 'بعد از ظهر';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[امروز ساعت] LT',
|
||
nextDay : '[فردا ساعت] LT',
|
||
nextWeek : 'dddd [ساعت] LT',
|
||
lastDay : '[دیروز ساعت] LT',
|
||
lastWeek : 'dddd [پیش] [ساعت] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'در %s',
|
||
past : '%s پیش',
|
||
s : 'چندین ثانیه',
|
||
m : 'یک دقیقه',
|
||
mm : '%d دقیقه',
|
||
h : 'یک ساعت',
|
||
hh : '%d ساعت',
|
||
d : 'یک روز',
|
||
dd : '%d روز',
|
||
M : 'یک ماه',
|
||
MM : '%d ماه',
|
||
y : 'یک سال',
|
||
yy : '%d سال'
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[۰-۹]/g, function (match) {
|
||
return numberMap[match];
|
||
}).replace(/،/g, ',');
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
}).replace(/,/g, '،');
|
||
},
|
||
ordinalParse: /\d{1,2}م/,
|
||
ordinal : '%dم',
|
||
week : {
|
||
dow : 6, // Saturday is the first day of the week.
|
||
doy : 12 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return fa;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 75 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Finnish [fi]
|
||
//! author : Tarmo Aidantausta : https://github.com/bleadof
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' ');
|
||
var numbersFuture = [
|
||
'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
|
||
numbersPast[7], numbersPast[8], numbersPast[9]
|
||
];
|
||
function translate(number, withoutSuffix, key, isFuture) {
|
||
var result = '';
|
||
switch (key) {
|
||
case 's':
|
||
return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
|
||
case 'm':
|
||
return isFuture ? 'minuutin' : 'minuutti';
|
||
case 'mm':
|
||
result = isFuture ? 'minuutin' : 'minuuttia';
|
||
break;
|
||
case 'h':
|
||
return isFuture ? 'tunnin' : 'tunti';
|
||
case 'hh':
|
||
result = isFuture ? 'tunnin' : 'tuntia';
|
||
break;
|
||
case 'd':
|
||
return isFuture ? 'päivän' : 'päivä';
|
||
case 'dd':
|
||
result = isFuture ? 'päivän' : 'päivää';
|
||
break;
|
||
case 'M':
|
||
return isFuture ? 'kuukauden' : 'kuukausi';
|
||
case 'MM':
|
||
result = isFuture ? 'kuukauden' : 'kuukautta';
|
||
break;
|
||
case 'y':
|
||
return isFuture ? 'vuoden' : 'vuosi';
|
||
case 'yy':
|
||
result = isFuture ? 'vuoden' : 'vuotta';
|
||
break;
|
||
}
|
||
result = verbalNumber(number, isFuture) + ' ' + result;
|
||
return result;
|
||
}
|
||
function verbalNumber(number, isFuture) {
|
||
return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
|
||
}
|
||
|
||
var fi = moment.defineLocale('fi', {
|
||
months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
|
||
monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
|
||
weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
|
||
weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),
|
||
weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH.mm',
|
||
LTS : 'HH.mm.ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'Do MMMM[ta] YYYY',
|
||
LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
|
||
LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
|
||
l : 'D.M.YYYY',
|
||
ll : 'Do MMM YYYY',
|
||
lll : 'Do MMM YYYY, [klo] HH.mm',
|
||
llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[tänään] [klo] LT',
|
||
nextDay : '[huomenna] [klo] LT',
|
||
nextWeek : 'dddd [klo] LT',
|
||
lastDay : '[eilen] [klo] LT',
|
||
lastWeek : '[viime] dddd[na] [klo] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s päästä',
|
||
past : '%s sitten',
|
||
s : translate,
|
||
m : translate,
|
||
mm : translate,
|
||
h : translate,
|
||
hh : translate,
|
||
d : translate,
|
||
dd : translate,
|
||
M : translate,
|
||
MM : translate,
|
||
y : translate,
|
||
yy : translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return fi;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 76 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Faroese [fo]
|
||
//! author : Ragnar Johannesen : https://github.com/ragnar123
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var fo = moment.defineLocale('fo', {
|
||
months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
|
||
monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
|
||
weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
|
||
weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
|
||
weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D. MMMM, YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Í dag kl.] LT',
|
||
nextDay : '[Í morgin kl.] LT',
|
||
nextWeek : 'dddd [kl.] LT',
|
||
lastDay : '[Í gjár kl.] LT',
|
||
lastWeek : '[síðstu] dddd [kl] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'um %s',
|
||
past : '%s síðani',
|
||
s : 'fá sekund',
|
||
m : 'ein minutt',
|
||
mm : '%d minuttir',
|
||
h : 'ein tími',
|
||
hh : '%d tímar',
|
||
d : 'ein dagur',
|
||
dd : '%d dagar',
|
||
M : 'ein mánaði',
|
||
MM : '%d mánaðir',
|
||
y : 'eitt ár',
|
||
yy : '%d ár'
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return fo;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 77 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : French [fr]
|
||
//! author : John Fischer : https://github.com/jfroffice
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var fr = moment.defineLocale('fr', {
|
||
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
|
||
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
|
||
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
|
||
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Aujourd\'hui à] LT',
|
||
nextDay: '[Demain à] LT',
|
||
nextWeek: 'dddd [à] LT',
|
||
lastDay: '[Hier à] LT',
|
||
lastWeek: 'dddd [dernier à] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'dans %s',
|
||
past : 'il y a %s',
|
||
s : 'quelques secondes',
|
||
m : 'une minute',
|
||
mm : '%d minutes',
|
||
h : 'une heure',
|
||
hh : '%d heures',
|
||
d : 'un jour',
|
||
dd : '%d jours',
|
||
M : 'un mois',
|
||
MM : '%d mois',
|
||
y : 'un an',
|
||
yy : '%d ans'
|
||
},
|
||
ordinalParse: /\d{1,2}(er|)/,
|
||
ordinal : function (number) {
|
||
return number + (number === 1 ? 'er' : '');
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return fr;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 78 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : French (Canada) [fr-ca]
|
||
//! author : Jonathan Abourbih : https://github.com/jonbca
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var frCa = moment.defineLocale('fr-ca', {
|
||
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
|
||
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
|
||
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
|
||
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'YYYY-MM-DD',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Aujourd\'hui à] LT',
|
||
nextDay: '[Demain à] LT',
|
||
nextWeek: 'dddd [à] LT',
|
||
lastDay: '[Hier à] LT',
|
||
lastWeek: 'dddd [dernier à] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'dans %s',
|
||
past : 'il y a %s',
|
||
s : 'quelques secondes',
|
||
m : 'une minute',
|
||
mm : '%d minutes',
|
||
h : 'une heure',
|
||
hh : '%d heures',
|
||
d : 'un jour',
|
||
dd : '%d jours',
|
||
M : 'un mois',
|
||
MM : '%d mois',
|
||
y : 'un an',
|
||
yy : '%d ans'
|
||
},
|
||
ordinalParse: /\d{1,2}(er|e)/,
|
||
ordinal : function (number) {
|
||
return number + (number === 1 ? 'er' : 'e');
|
||
}
|
||
});
|
||
|
||
return frCa;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 79 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : French (Switzerland) [fr-ch]
|
||
//! author : Gaspard Bucher : https://github.com/gaspard
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var frCh = moment.defineLocale('fr-ch', {
|
||
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
|
||
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
|
||
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
|
||
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Aujourd\'hui à] LT',
|
||
nextDay: '[Demain à] LT',
|
||
nextWeek: 'dddd [à] LT',
|
||
lastDay: '[Hier à] LT',
|
||
lastWeek: 'dddd [dernier à] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'dans %s',
|
||
past : 'il y a %s',
|
||
s : 'quelques secondes',
|
||
m : 'une minute',
|
||
mm : '%d minutes',
|
||
h : 'une heure',
|
||
hh : '%d heures',
|
||
d : 'un jour',
|
||
dd : '%d jours',
|
||
M : 'un mois',
|
||
MM : '%d mois',
|
||
y : 'un an',
|
||
yy : '%d ans'
|
||
},
|
||
ordinalParse: /\d{1,2}(er|e)/,
|
||
ordinal : function (number) {
|
||
return number + (number === 1 ? 'er' : 'e');
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return frCh;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 80 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Frisian [fy]
|
||
//! author : Robin van der Vliet : https://github.com/robin0van0der0v
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_');
|
||
var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
|
||
|
||
var fy = moment.defineLocale('fy', {
|
||
months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
|
||
monthsShort : function (m, format) {
|
||
if (/-MMM-/.test(format)) {
|
||
return monthsShortWithoutDots[m.month()];
|
||
} else {
|
||
return monthsShortWithDots[m.month()];
|
||
}
|
||
},
|
||
monthsParseExact : true,
|
||
weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
|
||
weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
|
||
weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD-MM-YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[hjoed om] LT',
|
||
nextDay: '[moarn om] LT',
|
||
nextWeek: 'dddd [om] LT',
|
||
lastDay: '[juster om] LT',
|
||
lastWeek: '[ôfrûne] dddd [om] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'oer %s',
|
||
past : '%s lyn',
|
||
s : 'in pear sekonden',
|
||
m : 'ien minút',
|
||
mm : '%d minuten',
|
||
h : 'ien oere',
|
||
hh : '%d oeren',
|
||
d : 'ien dei',
|
||
dd : '%d dagen',
|
||
M : 'ien moanne',
|
||
MM : '%d moannen',
|
||
y : 'ien jier',
|
||
yy : '%d jierren'
|
||
},
|
||
ordinalParse: /\d{1,2}(ste|de)/,
|
||
ordinal : function (number) {
|
||
return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return fy;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 81 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Scottish Gaelic [gd]
|
||
//! author : Jon Ashdown : https://github.com/jonashdown
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var months = [
|
||
'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'
|
||
];
|
||
|
||
var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
|
||
|
||
var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];
|
||
|
||
var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];
|
||
|
||
var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
|
||
|
||
var gd = moment.defineLocale('gd', {
|
||
months : months,
|
||
monthsShort : monthsShort,
|
||
monthsParseExact : true,
|
||
weekdays : weekdays,
|
||
weekdaysShort : weekdaysShort,
|
||
weekdaysMin : weekdaysMin,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[An-diugh aig] LT',
|
||
nextDay : '[A-màireach aig] LT',
|
||
nextWeek : 'dddd [aig] LT',
|
||
lastDay : '[An-dè aig] LT',
|
||
lastWeek : 'dddd [seo chaidh] [aig] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'ann an %s',
|
||
past : 'bho chionn %s',
|
||
s : 'beagan diogan',
|
||
m : 'mionaid',
|
||
mm : '%d mionaidean',
|
||
h : 'uair',
|
||
hh : '%d uairean',
|
||
d : 'latha',
|
||
dd : '%d latha',
|
||
M : 'mìos',
|
||
MM : '%d mìosan',
|
||
y : 'bliadhna',
|
||
yy : '%d bliadhna'
|
||
},
|
||
ordinalParse : /\d{1,2}(d|na|mh)/,
|
||
ordinal : function (number) {
|
||
var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return gd;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 82 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Galician [gl]
|
||
//! author : Juan G. Hurtado : https://github.com/juanghurtado
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var gl = moment.defineLocale('gl', {
|
||
months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
|
||
monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
|
||
monthsParseExact: true,
|
||
weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
|
||
weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
|
||
weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D [de] MMMM [de] YYYY',
|
||
LLL : 'D [de] MMMM [de] YYYY H:mm',
|
||
LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : function () {
|
||
return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
|
||
},
|
||
nextDay : function () {
|
||
return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
|
||
},
|
||
nextWeek : function () {
|
||
return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
|
||
},
|
||
lastDay : function () {
|
||
return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
|
||
},
|
||
lastWeek : function () {
|
||
return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : function (str) {
|
||
if (str.indexOf('un') === 0) {
|
||
return 'n' + str;
|
||
}
|
||
return 'en ' + str;
|
||
},
|
||
past : 'hai %s',
|
||
s : 'uns segundos',
|
||
m : 'un minuto',
|
||
mm : '%d minutos',
|
||
h : 'unha hora',
|
||
hh : '%d horas',
|
||
d : 'un día',
|
||
dd : '%d días',
|
||
M : 'un mes',
|
||
MM : '%d meses',
|
||
y : 'un ano',
|
||
yy : '%d anos'
|
||
},
|
||
ordinalParse : /\d{1,2}º/,
|
||
ordinal : '%dº',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return gl;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 83 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Hebrew [he]
|
||
//! author : Tomer Cohen : https://github.com/tomer
|
||
//! author : Moshe Simantov : https://github.com/DevelopmentIL
|
||
//! author : Tal Ater : https://github.com/TalAter
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var he = moment.defineLocale('he', {
|
||
months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
|
||
monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
|
||
weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
|
||
weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
|
||
weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D [ב]MMMM YYYY',
|
||
LLL : 'D [ב]MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
|
||
l : 'D/M/YYYY',
|
||
ll : 'D MMM YYYY',
|
||
lll : 'D MMM YYYY HH:mm',
|
||
llll : 'ddd, D MMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[היום ב־]LT',
|
||
nextDay : '[מחר ב־]LT',
|
||
nextWeek : 'dddd [בשעה] LT',
|
||
lastDay : '[אתמול ב־]LT',
|
||
lastWeek : '[ביום] dddd [האחרון בשעה] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'בעוד %s',
|
||
past : 'לפני %s',
|
||
s : 'מספר שניות',
|
||
m : 'דקה',
|
||
mm : '%d דקות',
|
||
h : 'שעה',
|
||
hh : function (number) {
|
||
if (number === 2) {
|
||
return 'שעתיים';
|
||
}
|
||
return number + ' שעות';
|
||
},
|
||
d : 'יום',
|
||
dd : function (number) {
|
||
if (number === 2) {
|
||
return 'יומיים';
|
||
}
|
||
return number + ' ימים';
|
||
},
|
||
M : 'חודש',
|
||
MM : function (number) {
|
||
if (number === 2) {
|
||
return 'חודשיים';
|
||
}
|
||
return number + ' חודשים';
|
||
},
|
||
y : 'שנה',
|
||
yy : function (number) {
|
||
if (number === 2) {
|
||
return 'שנתיים';
|
||
} else if (number % 10 === 0 && number !== 10) {
|
||
return number + ' שנה';
|
||
}
|
||
return number + ' שנים';
|
||
}
|
||
},
|
||
meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
|
||
isPM : function (input) {
|
||
return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 5) {
|
||
return 'לפנות בוקר';
|
||
} else if (hour < 10) {
|
||
return 'בבוקר';
|
||
} else if (hour < 12) {
|
||
return isLower ? 'לפנה"צ' : 'לפני הצהריים';
|
||
} else if (hour < 18) {
|
||
return isLower ? 'אחה"צ' : 'אחרי הצהריים';
|
||
} else {
|
||
return 'בערב';
|
||
}
|
||
}
|
||
});
|
||
|
||
return he;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 84 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Hindi [hi]
|
||
//! author : Mayank Singhal : https://github.com/mayanksinghal
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '१',
|
||
'2': '२',
|
||
'3': '३',
|
||
'4': '४',
|
||
'5': '५',
|
||
'6': '६',
|
||
'7': '७',
|
||
'8': '८',
|
||
'9': '९',
|
||
'0': '०'
|
||
};
|
||
var numberMap = {
|
||
'१': '1',
|
||
'२': '2',
|
||
'३': '3',
|
||
'४': '4',
|
||
'५': '5',
|
||
'६': '6',
|
||
'७': '7',
|
||
'८': '8',
|
||
'९': '9',
|
||
'०': '0'
|
||
};
|
||
|
||
var hi = moment.defineLocale('hi', {
|
||
months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
|
||
monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
|
||
monthsParseExact: true,
|
||
weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
|
||
weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
|
||
weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'A h:mm बजे',
|
||
LTS : 'A h:mm:ss बजे',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY, A h:mm बजे',
|
||
LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'
|
||
},
|
||
calendar : {
|
||
sameDay : '[आज] LT',
|
||
nextDay : '[कल] LT',
|
||
nextWeek : 'dddd, LT',
|
||
lastDay : '[कल] LT',
|
||
lastWeek : '[पिछले] dddd, LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s में',
|
||
past : '%s पहले',
|
||
s : 'कुछ ही क्षण',
|
||
m : 'एक मिनट',
|
||
mm : '%d मिनट',
|
||
h : 'एक घंटा',
|
||
hh : '%d घंटे',
|
||
d : 'एक दिन',
|
||
dd : '%d दिन',
|
||
M : 'एक महीने',
|
||
MM : '%d महीने',
|
||
y : 'एक वर्ष',
|
||
yy : '%d वर्ष'
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[१२३४५६७८९०]/g, function (match) {
|
||
return numberMap[match];
|
||
});
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
});
|
||
},
|
||
// Hindi notation for meridiems are quite fuzzy in practice. While there exists
|
||
// a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
|
||
meridiemParse: /रात|सुबह|दोपहर|शाम/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'रात') {
|
||
return hour < 4 ? hour : hour + 12;
|
||
} else if (meridiem === 'सुबह') {
|
||
return hour;
|
||
} else if (meridiem === 'दोपहर') {
|
||
return hour >= 10 ? hour : hour + 12;
|
||
} else if (meridiem === 'शाम') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'रात';
|
||
} else if (hour < 10) {
|
||
return 'सुबह';
|
||
} else if (hour < 17) {
|
||
return 'दोपहर';
|
||
} else if (hour < 20) {
|
||
return 'शाम';
|
||
} else {
|
||
return 'रात';
|
||
}
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return hi;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 85 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Croatian [hr]
|
||
//! author : Bojan Marković : https://github.com/bmarkovic
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function translate(number, withoutSuffix, key) {
|
||
var result = number + ' ';
|
||
switch (key) {
|
||
case 'm':
|
||
return withoutSuffix ? 'jedna minuta' : 'jedne minute';
|
||
case 'mm':
|
||
if (number === 1) {
|
||
result += 'minuta';
|
||
} else if (number === 2 || number === 3 || number === 4) {
|
||
result += 'minute';
|
||
} else {
|
||
result += 'minuta';
|
||
}
|
||
return result;
|
||
case 'h':
|
||
return withoutSuffix ? 'jedan sat' : 'jednog sata';
|
||
case 'hh':
|
||
if (number === 1) {
|
||
result += 'sat';
|
||
} else if (number === 2 || number === 3 || number === 4) {
|
||
result += 'sata';
|
||
} else {
|
||
result += 'sati';
|
||
}
|
||
return result;
|
||
case 'dd':
|
||
if (number === 1) {
|
||
result += 'dan';
|
||
} else {
|
||
result += 'dana';
|
||
}
|
||
return result;
|
||
case 'MM':
|
||
if (number === 1) {
|
||
result += 'mjesec';
|
||
} else if (number === 2 || number === 3 || number === 4) {
|
||
result += 'mjeseca';
|
||
} else {
|
||
result += 'mjeseci';
|
||
}
|
||
return result;
|
||
case 'yy':
|
||
if (number === 1) {
|
||
result += 'godina';
|
||
} else if (number === 2 || number === 3 || number === 4) {
|
||
result += 'godine';
|
||
} else {
|
||
result += 'godina';
|
||
}
|
||
return result;
|
||
}
|
||
}
|
||
|
||
var hr = moment.defineLocale('hr', {
|
||
months : {
|
||
format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
|
||
standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
|
||
},
|
||
monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
|
||
monthsParseExact: true,
|
||
weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
|
||
weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
|
||
weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY H:mm',
|
||
LLLL : 'dddd, D. MMMM YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[danas u] LT',
|
||
nextDay : '[sutra u] LT',
|
||
nextWeek : function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[u] [nedjelju] [u] LT';
|
||
case 3:
|
||
return '[u] [srijedu] [u] LT';
|
||
case 6:
|
||
return '[u] [subotu] [u] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[u] dddd [u] LT';
|
||
}
|
||
},
|
||
lastDay : '[jučer u] LT',
|
||
lastWeek : function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
case 3:
|
||
return '[prošlu] dddd [u] LT';
|
||
case 6:
|
||
return '[prošle] [subote] [u] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[prošli] dddd [u] LT';
|
||
}
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'za %s',
|
||
past : 'prije %s',
|
||
s : 'par sekundi',
|
||
m : translate,
|
||
mm : translate,
|
||
h : translate,
|
||
hh : translate,
|
||
d : 'dan',
|
||
dd : translate,
|
||
M : 'mjesec',
|
||
MM : translate,
|
||
y : 'godinu',
|
||
yy : translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return hr;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 86 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Hungarian [hu]
|
||
//! author : Adam Brunner : https://github.com/adambrunner
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
|
||
function translate(number, withoutSuffix, key, isFuture) {
|
||
var num = number,
|
||
suffix;
|
||
switch (key) {
|
||
case 's':
|
||
return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
|
||
case 'm':
|
||
return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
|
||
case 'mm':
|
||
return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
|
||
case 'h':
|
||
return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
|
||
case 'hh':
|
||
return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
|
||
case 'd':
|
||
return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
|
||
case 'dd':
|
||
return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
|
||
case 'M':
|
||
return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
|
||
case 'MM':
|
||
return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
|
||
case 'y':
|
||
return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
|
||
case 'yy':
|
||
return num + (isFuture || withoutSuffix ? ' év' : ' éve');
|
||
}
|
||
return '';
|
||
}
|
||
function week(isFuture) {
|
||
return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
|
||
}
|
||
|
||
var hu = moment.defineLocale('hu', {
|
||
months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
|
||
monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
|
||
weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
|
||
weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
|
||
weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'YYYY.MM.DD.',
|
||
LL : 'YYYY. MMMM D.',
|
||
LLL : 'YYYY. MMMM D. H:mm',
|
||
LLLL : 'YYYY. MMMM D., dddd H:mm'
|
||
},
|
||
meridiemParse: /de|du/i,
|
||
isPM: function (input) {
|
||
return input.charAt(1).toLowerCase() === 'u';
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours < 12) {
|
||
return isLower === true ? 'de' : 'DE';
|
||
} else {
|
||
return isLower === true ? 'du' : 'DU';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[ma] LT[-kor]',
|
||
nextDay : '[holnap] LT[-kor]',
|
||
nextWeek : function () {
|
||
return week.call(this, true);
|
||
},
|
||
lastDay : '[tegnap] LT[-kor]',
|
||
lastWeek : function () {
|
||
return week.call(this, false);
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s múlva',
|
||
past : '%s',
|
||
s : translate,
|
||
m : translate,
|
||
mm : translate,
|
||
h : translate,
|
||
hh : translate,
|
||
d : translate,
|
||
dd : translate,
|
||
M : translate,
|
||
MM : translate,
|
||
y : translate,
|
||
yy : translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return hu;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 87 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Armenian [hy-am]
|
||
//! author : Armendarabyan : https://github.com/armendarabyan
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var hyAm = moment.defineLocale('hy-am', {
|
||
months : {
|
||
format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
|
||
standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
|
||
},
|
||
monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
|
||
weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
|
||
weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
|
||
weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY թ.',
|
||
LLL : 'D MMMM YYYY թ., HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY թ., HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[այսօր] LT',
|
||
nextDay: '[վաղը] LT',
|
||
lastDay: '[երեկ] LT',
|
||
nextWeek: function () {
|
||
return 'dddd [օրը ժամը] LT';
|
||
},
|
||
lastWeek: function () {
|
||
return '[անցած] dddd [օրը ժամը] LT';
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s հետո',
|
||
past : '%s առաջ',
|
||
s : 'մի քանի վայրկյան',
|
||
m : 'րոպե',
|
||
mm : '%d րոպե',
|
||
h : 'ժամ',
|
||
hh : '%d ժամ',
|
||
d : 'օր',
|
||
dd : '%d օր',
|
||
M : 'ամիս',
|
||
MM : '%d ամիս',
|
||
y : 'տարի',
|
||
yy : '%d տարի'
|
||
},
|
||
meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
|
||
isPM: function (input) {
|
||
return /^(ցերեկվա|երեկոյան)$/.test(input);
|
||
},
|
||
meridiem : function (hour) {
|
||
if (hour < 4) {
|
||
return 'գիշերվա';
|
||
} else if (hour < 12) {
|
||
return 'առավոտվա';
|
||
} else if (hour < 17) {
|
||
return 'ցերեկվա';
|
||
} else {
|
||
return 'երեկոյան';
|
||
}
|
||
},
|
||
ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
|
||
ordinal: function (number, period) {
|
||
switch (period) {
|
||
case 'DDD':
|
||
case 'w':
|
||
case 'W':
|
||
case 'DDDo':
|
||
if (number === 1) {
|
||
return number + '-ին';
|
||
}
|
||
return number + '-րդ';
|
||
default:
|
||
return number;
|
||
}
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return hyAm;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 88 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Indonesian [id]
|
||
//! author : Mohammad Satrio Utomo : https://github.com/tyok
|
||
//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var id = moment.defineLocale('id', {
|
||
months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),
|
||
weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
|
||
weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
|
||
weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH.mm',
|
||
LTS : 'HH.mm.ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY [pukul] HH.mm',
|
||
LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
|
||
},
|
||
meridiemParse: /pagi|siang|sore|malam/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'pagi') {
|
||
return hour;
|
||
} else if (meridiem === 'siang') {
|
||
return hour >= 11 ? hour : hour + 12;
|
||
} else if (meridiem === 'sore' || meridiem === 'malam') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours < 11) {
|
||
return 'pagi';
|
||
} else if (hours < 15) {
|
||
return 'siang';
|
||
} else if (hours < 19) {
|
||
return 'sore';
|
||
} else {
|
||
return 'malam';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[Hari ini pukul] LT',
|
||
nextDay : '[Besok pukul] LT',
|
||
nextWeek : 'dddd [pukul] LT',
|
||
lastDay : '[Kemarin pukul] LT',
|
||
lastWeek : 'dddd [lalu pukul] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'dalam %s',
|
||
past : '%s yang lalu',
|
||
s : 'beberapa detik',
|
||
m : 'semenit',
|
||
mm : '%d menit',
|
||
h : 'sejam',
|
||
hh : '%d jam',
|
||
d : 'sehari',
|
||
dd : '%d hari',
|
||
M : 'sebulan',
|
||
MM : '%d bulan',
|
||
y : 'setahun',
|
||
yy : '%d tahun'
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return id;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 89 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Icelandic [is]
|
||
//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function plural(n) {
|
||
if (n % 100 === 11) {
|
||
return true;
|
||
} else if (n % 10 === 1) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
function translate(number, withoutSuffix, key, isFuture) {
|
||
var result = number + ' ';
|
||
switch (key) {
|
||
case 's':
|
||
return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
|
||
case 'm':
|
||
return withoutSuffix ? 'mínúta' : 'mínútu';
|
||
case 'mm':
|
||
if (plural(number)) {
|
||
return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
|
||
} else if (withoutSuffix) {
|
||
return result + 'mínúta';
|
||
}
|
||
return result + 'mínútu';
|
||
case 'hh':
|
||
if (plural(number)) {
|
||
return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
|
||
}
|
||
return result + 'klukkustund';
|
||
case 'd':
|
||
if (withoutSuffix) {
|
||
return 'dagur';
|
||
}
|
||
return isFuture ? 'dag' : 'degi';
|
||
case 'dd':
|
||
if (plural(number)) {
|
||
if (withoutSuffix) {
|
||
return result + 'dagar';
|
||
}
|
||
return result + (isFuture ? 'daga' : 'dögum');
|
||
} else if (withoutSuffix) {
|
||
return result + 'dagur';
|
||
}
|
||
return result + (isFuture ? 'dag' : 'degi');
|
||
case 'M':
|
||
if (withoutSuffix) {
|
||
return 'mánuður';
|
||
}
|
||
return isFuture ? 'mánuð' : 'mánuði';
|
||
case 'MM':
|
||
if (plural(number)) {
|
||
if (withoutSuffix) {
|
||
return result + 'mánuðir';
|
||
}
|
||
return result + (isFuture ? 'mánuði' : 'mánuðum');
|
||
} else if (withoutSuffix) {
|
||
return result + 'mánuður';
|
||
}
|
||
return result + (isFuture ? 'mánuð' : 'mánuði');
|
||
case 'y':
|
||
return withoutSuffix || isFuture ? 'ár' : 'ári';
|
||
case 'yy':
|
||
if (plural(number)) {
|
||
return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
|
||
}
|
||
return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
|
||
}
|
||
}
|
||
|
||
var is = moment.defineLocale('is', {
|
||
months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
|
||
monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
|
||
weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
|
||
weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
|
||
weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY [kl.] H:mm',
|
||
LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[í dag kl.] LT',
|
||
nextDay : '[á morgun kl.] LT',
|
||
nextWeek : 'dddd [kl.] LT',
|
||
lastDay : '[í gær kl.] LT',
|
||
lastWeek : '[síðasta] dddd [kl.] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'eftir %s',
|
||
past : 'fyrir %s síðan',
|
||
s : translate,
|
||
m : translate,
|
||
mm : translate,
|
||
h : 'klukkustund',
|
||
hh : translate,
|
||
d : translate,
|
||
dd : translate,
|
||
M : translate,
|
||
MM : translate,
|
||
y : translate,
|
||
yy : translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return is;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 90 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Italian [it]
|
||
//! author : Lorenzo : https://github.com/aliem
|
||
//! author: Mattia Larentis: https://github.com/nostalgiaz
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var it = moment.defineLocale('it', {
|
||
months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
|
||
monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
|
||
weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),
|
||
weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),
|
||
weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Oggi alle] LT',
|
||
nextDay: '[Domani alle] LT',
|
||
nextWeek: 'dddd [alle] LT',
|
||
lastDay: '[Ieri alle] LT',
|
||
lastWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[la scorsa] dddd [alle] LT';
|
||
default:
|
||
return '[lo scorso] dddd [alle] LT';
|
||
}
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : function (s) {
|
||
return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;
|
||
},
|
||
past : '%s fa',
|
||
s : 'alcuni secondi',
|
||
m : 'un minuto',
|
||
mm : '%d minuti',
|
||
h : 'un\'ora',
|
||
hh : '%d ore',
|
||
d : 'un giorno',
|
||
dd : '%d giorni',
|
||
M : 'un mese',
|
||
MM : '%d mesi',
|
||
y : 'un anno',
|
||
yy : '%d anni'
|
||
},
|
||
ordinalParse : /\d{1,2}º/,
|
||
ordinal: '%dº',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return it;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 91 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Japanese [ja]
|
||
//! author : LI Long : https://github.com/baryon
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var ja = moment.defineLocale('ja', {
|
||
months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
|
||
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
|
||
weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
|
||
weekdaysShort : '日_月_火_水_木_金_土'.split('_'),
|
||
weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'Ah時m分',
|
||
LTS : 'Ah時m分s秒',
|
||
L : 'YYYY/MM/DD',
|
||
LL : 'YYYY年M月D日',
|
||
LLL : 'YYYY年M月D日Ah時m分',
|
||
LLLL : 'YYYY年M月D日Ah時m分 dddd'
|
||
},
|
||
meridiemParse: /午前|午後/i,
|
||
isPM : function (input) {
|
||
return input === '午後';
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 12) {
|
||
return '午前';
|
||
} else {
|
||
return '午後';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[今日] LT',
|
||
nextDay : '[明日] LT',
|
||
nextWeek : '[来週]dddd LT',
|
||
lastDay : '[昨日] LT',
|
||
lastWeek : '[前週]dddd LT',
|
||
sameElse : 'L'
|
||
},
|
||
ordinalParse : /\d{1,2}日/,
|
||
ordinal : function (number, period) {
|
||
switch (period) {
|
||
case 'd':
|
||
case 'D':
|
||
case 'DDD':
|
||
return number + '日';
|
||
default:
|
||
return number;
|
||
}
|
||
},
|
||
relativeTime : {
|
||
future : '%s後',
|
||
past : '%s前',
|
||
s : '数秒',
|
||
m : '1分',
|
||
mm : '%d分',
|
||
h : '1時間',
|
||
hh : '%d時間',
|
||
d : '1日',
|
||
dd : '%d日',
|
||
M : '1ヶ月',
|
||
MM : '%dヶ月',
|
||
y : '1年',
|
||
yy : '%d年'
|
||
}
|
||
});
|
||
|
||
return ja;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 92 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Javanese [jv]
|
||
//! author : Rony Lantip : https://github.com/lantip
|
||
//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var jv = moment.defineLocale('jv', {
|
||
months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
|
||
weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
|
||
weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
|
||
weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH.mm',
|
||
LTS : 'HH.mm.ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY [pukul] HH.mm',
|
||
LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
|
||
},
|
||
meridiemParse: /enjing|siyang|sonten|ndalu/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'enjing') {
|
||
return hour;
|
||
} else if (meridiem === 'siyang') {
|
||
return hour >= 11 ? hour : hour + 12;
|
||
} else if (meridiem === 'sonten' || meridiem === 'ndalu') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours < 11) {
|
||
return 'enjing';
|
||
} else if (hours < 15) {
|
||
return 'siyang';
|
||
} else if (hours < 19) {
|
||
return 'sonten';
|
||
} else {
|
||
return 'ndalu';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[Dinten puniko pukul] LT',
|
||
nextDay : '[Mbenjang pukul] LT',
|
||
nextWeek : 'dddd [pukul] LT',
|
||
lastDay : '[Kala wingi pukul] LT',
|
||
lastWeek : 'dddd [kepengker pukul] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'wonten ing %s',
|
||
past : '%s ingkang kepengker',
|
||
s : 'sawetawis detik',
|
||
m : 'setunggal menit',
|
||
mm : '%d menit',
|
||
h : 'setunggal jam',
|
||
hh : '%d jam',
|
||
d : 'sedinten',
|
||
dd : '%d dinten',
|
||
M : 'sewulan',
|
||
MM : '%d wulan',
|
||
y : 'setaun',
|
||
yy : '%d taun'
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return jv;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 93 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Georgian [ka]
|
||
//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var ka = moment.defineLocale('ka', {
|
||
months : {
|
||
standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
|
||
format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
|
||
},
|
||
monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
|
||
weekdays : {
|
||
standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
|
||
format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
|
||
isFormat: /(წინა|შემდეგ)/
|
||
},
|
||
weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
|
||
weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'h:mm A',
|
||
LTS : 'h:mm:ss A',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY h:mm A',
|
||
LLLL : 'dddd, D MMMM YYYY h:mm A'
|
||
},
|
||
calendar : {
|
||
sameDay : '[დღეს] LT[-ზე]',
|
||
nextDay : '[ხვალ] LT[-ზე]',
|
||
lastDay : '[გუშინ] LT[-ზე]',
|
||
nextWeek : '[შემდეგ] dddd LT[-ზე]',
|
||
lastWeek : '[წინა] dddd LT-ზე',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : function (s) {
|
||
return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
|
||
s.replace(/ი$/, 'ში') :
|
||
s + 'ში';
|
||
},
|
||
past : function (s) {
|
||
if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
|
||
return s.replace(/(ი|ე)$/, 'ის წინ');
|
||
}
|
||
if ((/წელი/).test(s)) {
|
||
return s.replace(/წელი$/, 'წლის წინ');
|
||
}
|
||
},
|
||
s : 'რამდენიმე წამი',
|
||
m : 'წუთი',
|
||
mm : '%d წუთი',
|
||
h : 'საათი',
|
||
hh : '%d საათი',
|
||
d : 'დღე',
|
||
dd : '%d დღე',
|
||
M : 'თვე',
|
||
MM : '%d თვე',
|
||
y : 'წელი',
|
||
yy : '%d წელი'
|
||
},
|
||
ordinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
|
||
ordinal : function (number) {
|
||
if (number === 0) {
|
||
return number;
|
||
}
|
||
if (number === 1) {
|
||
return number + '-ლი';
|
||
}
|
||
if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
|
||
return 'მე-' + number;
|
||
}
|
||
return number + '-ე';
|
||
},
|
||
week : {
|
||
dow : 1,
|
||
doy : 7
|
||
}
|
||
});
|
||
|
||
return ka;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 94 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Kazakh [kk]
|
||
//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var suffixes = {
|
||
0: '-ші',
|
||
1: '-ші',
|
||
2: '-ші',
|
||
3: '-ші',
|
||
4: '-ші',
|
||
5: '-ші',
|
||
6: '-шы',
|
||
7: '-ші',
|
||
8: '-ші',
|
||
9: '-шы',
|
||
10: '-шы',
|
||
20: '-шы',
|
||
30: '-шы',
|
||
40: '-шы',
|
||
50: '-ші',
|
||
60: '-шы',
|
||
70: '-ші',
|
||
80: '-ші',
|
||
90: '-шы',
|
||
100: '-ші'
|
||
};
|
||
|
||
var kk = moment.defineLocale('kk', {
|
||
months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
|
||
monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
|
||
weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
|
||
weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
|
||
weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Бүгін сағат] LT',
|
||
nextDay : '[Ертең сағат] LT',
|
||
nextWeek : 'dddd [сағат] LT',
|
||
lastDay : '[Кеше сағат] LT',
|
||
lastWeek : '[Өткен аптаның] dddd [сағат] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s ішінде',
|
||
past : '%s бұрын',
|
||
s : 'бірнеше секунд',
|
||
m : 'бір минут',
|
||
mm : '%d минут',
|
||
h : 'бір сағат',
|
||
hh : '%d сағат',
|
||
d : 'бір күн',
|
||
dd : '%d күн',
|
||
M : 'бір ай',
|
||
MM : '%d ай',
|
||
y : 'бір жыл',
|
||
yy : '%d жыл'
|
||
},
|
||
ordinalParse: /\d{1,2}-(ші|шы)/,
|
||
ordinal : function (number) {
|
||
var a = number % 10,
|
||
b = number >= 100 ? 100 : null;
|
||
return number + (suffixes[number] || suffixes[a] || suffixes[b]);
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return kk;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 95 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Cambodian [km]
|
||
//! author : Kruy Vanna : https://github.com/kruyvanna
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var km = moment.defineLocale('km', {
|
||
months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
|
||
monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
|
||
weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
|
||
weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
|
||
weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
|
||
longDateFormat: {
|
||
LT: 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L: 'DD/MM/YYYY',
|
||
LL: 'D MMMM YYYY',
|
||
LLL: 'D MMMM YYYY HH:mm',
|
||
LLLL: 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar: {
|
||
sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
|
||
nextDay: '[ស្អែក ម៉ោង] LT',
|
||
nextWeek: 'dddd [ម៉ោង] LT',
|
||
lastDay: '[ម្សិលមិញ ម៉ោង] LT',
|
||
lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime: {
|
||
future: '%sទៀត',
|
||
past: '%sមុន',
|
||
s: 'ប៉ុន្មានវិនាទី',
|
||
m: 'មួយនាទី',
|
||
mm: '%d នាទី',
|
||
h: 'មួយម៉ោង',
|
||
hh: '%d ម៉ោង',
|
||
d: 'មួយថ្ងៃ',
|
||
dd: '%d ថ្ងៃ',
|
||
M: 'មួយខែ',
|
||
MM: '%d ខែ',
|
||
y: 'មួយឆ្នាំ',
|
||
yy: '%d ឆ្នាំ'
|
||
},
|
||
week: {
|
||
dow: 1, // Monday is the first day of the week.
|
||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return km;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 96 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Korean [ko]
|
||
//! author : Kyungwook, Park : https://github.com/kyungw00k
|
||
//! author : Jeeeyul Lee <jeeeyul@gmail.com>
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var ko = moment.defineLocale('ko', {
|
||
months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
|
||
monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
|
||
weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
|
||
weekdaysShort : '일_월_화_수_목_금_토'.split('_'),
|
||
weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'A h시 m분',
|
||
LTS : 'A h시 m분 s초',
|
||
L : 'YYYY.MM.DD',
|
||
LL : 'YYYY년 MMMM D일',
|
||
LLL : 'YYYY년 MMMM D일 A h시 m분',
|
||
LLLL : 'YYYY년 MMMM D일 dddd A h시 m분'
|
||
},
|
||
calendar : {
|
||
sameDay : '오늘 LT',
|
||
nextDay : '내일 LT',
|
||
nextWeek : 'dddd LT',
|
||
lastDay : '어제 LT',
|
||
lastWeek : '지난주 dddd LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s 후',
|
||
past : '%s 전',
|
||
s : '몇 초',
|
||
ss : '%d초',
|
||
m : '일분',
|
||
mm : '%d분',
|
||
h : '한 시간',
|
||
hh : '%d시간',
|
||
d : '하루',
|
||
dd : '%d일',
|
||
M : '한 달',
|
||
MM : '%d달',
|
||
y : '일 년',
|
||
yy : '%d년'
|
||
},
|
||
ordinalParse : /\d{1,2}일/,
|
||
ordinal : '%d일',
|
||
meridiemParse : /오전|오후/,
|
||
isPM : function (token) {
|
||
return token === '오후';
|
||
},
|
||
meridiem : function (hour, minute, isUpper) {
|
||
return hour < 12 ? '오전' : '오후';
|
||
}
|
||
});
|
||
|
||
return ko;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 97 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Kyrgyz [ky]
|
||
//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
|
||
var suffixes = {
|
||
0: '-чү',
|
||
1: '-чи',
|
||
2: '-чи',
|
||
3: '-чү',
|
||
4: '-чү',
|
||
5: '-чи',
|
||
6: '-чы',
|
||
7: '-чи',
|
||
8: '-чи',
|
||
9: '-чу',
|
||
10: '-чу',
|
||
20: '-чы',
|
||
30: '-чу',
|
||
40: '-чы',
|
||
50: '-чү',
|
||
60: '-чы',
|
||
70: '-чи',
|
||
80: '-чи',
|
||
90: '-чу',
|
||
100: '-чү'
|
||
};
|
||
|
||
var ky = moment.defineLocale('ky', {
|
||
months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
|
||
monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
|
||
weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
|
||
weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
|
||
weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Бүгүн саат] LT',
|
||
nextDay : '[Эртең саат] LT',
|
||
nextWeek : 'dddd [саат] LT',
|
||
lastDay : '[Кече саат] LT',
|
||
lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s ичинде',
|
||
past : '%s мурун',
|
||
s : 'бирнече секунд',
|
||
m : 'бир мүнөт',
|
||
mm : '%d мүнөт',
|
||
h : 'бир саат',
|
||
hh : '%d саат',
|
||
d : 'бир күн',
|
||
dd : '%d күн',
|
||
M : 'бир ай',
|
||
MM : '%d ай',
|
||
y : 'бир жыл',
|
||
yy : '%d жыл'
|
||
},
|
||
ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
|
||
ordinal : function (number) {
|
||
var a = number % 10,
|
||
b = number >= 100 ? 100 : null;
|
||
return number + (suffixes[number] || suffixes[a] || suffixes[b]);
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return ky;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 98 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Luxembourgish [lb]
|
||
//! author : mweimerskirch : https://github.com/mweimerskirch
|
||
//! author : David Raison : https://github.com/kwisatz
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function processRelativeTime(number, withoutSuffix, key, isFuture) {
|
||
var format = {
|
||
'm': ['eng Minutt', 'enger Minutt'],
|
||
'h': ['eng Stonn', 'enger Stonn'],
|
||
'd': ['een Dag', 'engem Dag'],
|
||
'M': ['ee Mount', 'engem Mount'],
|
||
'y': ['ee Joer', 'engem Joer']
|
||
};
|
||
return withoutSuffix ? format[key][0] : format[key][1];
|
||
}
|
||
function processFutureTime(string) {
|
||
var number = string.substr(0, string.indexOf(' '));
|
||
if (eifelerRegelAppliesToNumber(number)) {
|
||
return 'a ' + string;
|
||
}
|
||
return 'an ' + string;
|
||
}
|
||
function processPastTime(string) {
|
||
var number = string.substr(0, string.indexOf(' '));
|
||
if (eifelerRegelAppliesToNumber(number)) {
|
||
return 'viru ' + string;
|
||
}
|
||
return 'virun ' + string;
|
||
}
|
||
/**
|
||
* Returns true if the word before the given number loses the '-n' ending.
|
||
* e.g. 'an 10 Deeg' but 'a 5 Deeg'
|
||
*
|
||
* @param number {integer}
|
||
* @returns {boolean}
|
||
*/
|
||
function eifelerRegelAppliesToNumber(number) {
|
||
number = parseInt(number, 10);
|
||
if (isNaN(number)) {
|
||
return false;
|
||
}
|
||
if (number < 0) {
|
||
// Negative Number --> always true
|
||
return true;
|
||
} else if (number < 10) {
|
||
// Only 1 digit
|
||
if (4 <= number && number <= 7) {
|
||
return true;
|
||
}
|
||
return false;
|
||
} else if (number < 100) {
|
||
// 2 digits
|
||
var lastDigit = number % 10, firstDigit = number / 10;
|
||
if (lastDigit === 0) {
|
||
return eifelerRegelAppliesToNumber(firstDigit);
|
||
}
|
||
return eifelerRegelAppliesToNumber(lastDigit);
|
||
} else if (number < 10000) {
|
||
// 3 or 4 digits --> recursively check first digit
|
||
while (number >= 10) {
|
||
number = number / 10;
|
||
}
|
||
return eifelerRegelAppliesToNumber(number);
|
||
} else {
|
||
// Anything larger than 4 digits: recursively check first n-3 digits
|
||
number = number / 1000;
|
||
return eifelerRegelAppliesToNumber(number);
|
||
}
|
||
}
|
||
|
||
var lb = moment.defineLocale('lb', {
|
||
months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
||
monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
|
||
weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
|
||
weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat: {
|
||
LT: 'H:mm [Auer]',
|
||
LTS: 'H:mm:ss [Auer]',
|
||
L: 'DD.MM.YYYY',
|
||
LL: 'D. MMMM YYYY',
|
||
LLL: 'D. MMMM YYYY H:mm [Auer]',
|
||
LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
|
||
},
|
||
calendar: {
|
||
sameDay: '[Haut um] LT',
|
||
sameElse: 'L',
|
||
nextDay: '[Muer um] LT',
|
||
nextWeek: 'dddd [um] LT',
|
||
lastDay: '[Gëschter um] LT',
|
||
lastWeek: function () {
|
||
// Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
|
||
switch (this.day()) {
|
||
case 2:
|
||
case 4:
|
||
return '[Leschten] dddd [um] LT';
|
||
default:
|
||
return '[Leschte] dddd [um] LT';
|
||
}
|
||
}
|
||
},
|
||
relativeTime : {
|
||
future : processFutureTime,
|
||
past : processPastTime,
|
||
s : 'e puer Sekonnen',
|
||
m : processRelativeTime,
|
||
mm : '%d Minutten',
|
||
h : processRelativeTime,
|
||
hh : '%d Stonnen',
|
||
d : processRelativeTime,
|
||
dd : '%d Deeg',
|
||
M : processRelativeTime,
|
||
MM : '%d Méint',
|
||
y : processRelativeTime,
|
||
yy : '%d Joer'
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal: '%d.',
|
||
week: {
|
||
dow: 1, // Monday is the first day of the week.
|
||
doy: 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return lb;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 99 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Lao [lo]
|
||
//! author : Ryan Hart : https://github.com/ryanhart2
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var lo = moment.defineLocale('lo', {
|
||
months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
|
||
monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
|
||
weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
|
||
weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
|
||
weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'ວັນdddd D MMMM YYYY HH:mm'
|
||
},
|
||
meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
|
||
isPM: function (input) {
|
||
return input === 'ຕອນແລງ';
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 12) {
|
||
return 'ຕອນເຊົ້າ';
|
||
} else {
|
||
return 'ຕອນແລງ';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[ມື້ນີ້ເວລາ] LT',
|
||
nextDay : '[ມື້ອື່ນເວລາ] LT',
|
||
nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',
|
||
lastDay : '[ມື້ວານນີ້ເວລາ] LT',
|
||
lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'ອີກ %s',
|
||
past : '%sຜ່ານມາ',
|
||
s : 'ບໍ່ເທົ່າໃດວິນາທີ',
|
||
m : '1 ນາທີ',
|
||
mm : '%d ນາທີ',
|
||
h : '1 ຊົ່ວໂມງ',
|
||
hh : '%d ຊົ່ວໂມງ',
|
||
d : '1 ມື້',
|
||
dd : '%d ມື້',
|
||
M : '1 ເດືອນ',
|
||
MM : '%d ເດືອນ',
|
||
y : '1 ປີ',
|
||
yy : '%d ປີ'
|
||
},
|
||
ordinalParse: /(ທີ່)\d{1,2}/,
|
||
ordinal : function (number) {
|
||
return 'ທີ່' + number;
|
||
}
|
||
});
|
||
|
||
return lo;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 100 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Lithuanian [lt]
|
||
//! author : Mindaugas Mozūras : https://github.com/mmozuras
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var units = {
|
||
'm' : 'minutė_minutės_minutę',
|
||
'mm': 'minutės_minučių_minutes',
|
||
'h' : 'valanda_valandos_valandą',
|
||
'hh': 'valandos_valandų_valandas',
|
||
'd' : 'diena_dienos_dieną',
|
||
'dd': 'dienos_dienų_dienas',
|
||
'M' : 'mėnuo_mėnesio_mėnesį',
|
||
'MM': 'mėnesiai_mėnesių_mėnesius',
|
||
'y' : 'metai_metų_metus',
|
||
'yy': 'metai_metų_metus'
|
||
};
|
||
function translateSeconds(number, withoutSuffix, key, isFuture) {
|
||
if (withoutSuffix) {
|
||
return 'kelios sekundės';
|
||
} else {
|
||
return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
|
||
}
|
||
}
|
||
function translateSingular(number, withoutSuffix, key, isFuture) {
|
||
return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
|
||
}
|
||
function special(number) {
|
||
return number % 10 === 0 || (number > 10 && number < 20);
|
||
}
|
||
function forms(key) {
|
||
return units[key].split('_');
|
||
}
|
||
function translate(number, withoutSuffix, key, isFuture) {
|
||
var result = number + ' ';
|
||
if (number === 1) {
|
||
return result + translateSingular(number, withoutSuffix, key[0], isFuture);
|
||
} else if (withoutSuffix) {
|
||
return result + (special(number) ? forms(key)[1] : forms(key)[0]);
|
||
} else {
|
||
if (isFuture) {
|
||
return result + forms(key)[1];
|
||
} else {
|
||
return result + (special(number) ? forms(key)[1] : forms(key)[2]);
|
||
}
|
||
}
|
||
}
|
||
var lt = moment.defineLocale('lt', {
|
||
months : {
|
||
format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
|
||
standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
|
||
isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
|
||
},
|
||
monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
|
||
weekdays : {
|
||
format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
|
||
standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
|
||
isFormat: /dddd HH:mm/
|
||
},
|
||
weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
|
||
weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'YYYY-MM-DD',
|
||
LL : 'YYYY [m.] MMMM D [d.]',
|
||
LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
|
||
LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
|
||
l : 'YYYY-MM-DD',
|
||
ll : 'YYYY [m.] MMMM D [d.]',
|
||
lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
|
||
llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Šiandien] LT',
|
||
nextDay : '[Rytoj] LT',
|
||
nextWeek : 'dddd LT',
|
||
lastDay : '[Vakar] LT',
|
||
lastWeek : '[Praėjusį] dddd LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'po %s',
|
||
past : 'prieš %s',
|
||
s : translateSeconds,
|
||
m : translateSingular,
|
||
mm : translate,
|
||
h : translateSingular,
|
||
hh : translate,
|
||
d : translateSingular,
|
||
dd : translate,
|
||
M : translateSingular,
|
||
MM : translate,
|
||
y : translateSingular,
|
||
yy : translate
|
||
},
|
||
ordinalParse: /\d{1,2}-oji/,
|
||
ordinal : function (number) {
|
||
return number + '-oji';
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return lt;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 101 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Latvian [lv]
|
||
//! author : Kristaps Karlsons : https://github.com/skakri
|
||
//! author : Jānis Elmeris : https://github.com/JanisE
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var units = {
|
||
'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
|
||
'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
|
||
'h': 'stundas_stundām_stunda_stundas'.split('_'),
|
||
'hh': 'stundas_stundām_stunda_stundas'.split('_'),
|
||
'd': 'dienas_dienām_diena_dienas'.split('_'),
|
||
'dd': 'dienas_dienām_diena_dienas'.split('_'),
|
||
'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
|
||
'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
|
||
'y': 'gada_gadiem_gads_gadi'.split('_'),
|
||
'yy': 'gada_gadiem_gads_gadi'.split('_')
|
||
};
|
||
/**
|
||
* @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
|
||
*/
|
||
function format(forms, number, withoutSuffix) {
|
||
if (withoutSuffix) {
|
||
// E.g. "21 minūte", "3 minūtes".
|
||
return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
|
||
} else {
|
||
// E.g. "21 minūtes" as in "pēc 21 minūtes".
|
||
// E.g. "3 minūtēm" as in "pēc 3 minūtēm".
|
||
return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
|
||
}
|
||
}
|
||
function relativeTimeWithPlural(number, withoutSuffix, key) {
|
||
return number + ' ' + format(units[key], number, withoutSuffix);
|
||
}
|
||
function relativeTimeWithSingular(number, withoutSuffix, key) {
|
||
return format(units[key], number, withoutSuffix);
|
||
}
|
||
function relativeSeconds(number, withoutSuffix) {
|
||
return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
|
||
}
|
||
|
||
var lv = moment.defineLocale('lv', {
|
||
months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
|
||
monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
|
||
weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
|
||
weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
|
||
weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY.',
|
||
LL : 'YYYY. [gada] D. MMMM',
|
||
LLL : 'YYYY. [gada] D. MMMM, HH:mm',
|
||
LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Šodien pulksten] LT',
|
||
nextDay : '[Rīt pulksten] LT',
|
||
nextWeek : 'dddd [pulksten] LT',
|
||
lastDay : '[Vakar pulksten] LT',
|
||
lastWeek : '[Pagājušā] dddd [pulksten] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'pēc %s',
|
||
past : 'pirms %s',
|
||
s : relativeSeconds,
|
||
m : relativeTimeWithSingular,
|
||
mm : relativeTimeWithPlural,
|
||
h : relativeTimeWithSingular,
|
||
hh : relativeTimeWithPlural,
|
||
d : relativeTimeWithSingular,
|
||
dd : relativeTimeWithPlural,
|
||
M : relativeTimeWithSingular,
|
||
MM : relativeTimeWithPlural,
|
||
y : relativeTimeWithSingular,
|
||
yy : relativeTimeWithPlural
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return lv;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 102 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Montenegrin [me]
|
||
//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var translator = {
|
||
words: { //Different grammatical cases
|
||
m: ['jedan minut', 'jednog minuta'],
|
||
mm: ['minut', 'minuta', 'minuta'],
|
||
h: ['jedan sat', 'jednog sata'],
|
||
hh: ['sat', 'sata', 'sati'],
|
||
dd: ['dan', 'dana', 'dana'],
|
||
MM: ['mjesec', 'mjeseca', 'mjeseci'],
|
||
yy: ['godina', 'godine', 'godina']
|
||
},
|
||
correctGrammaticalCase: function (number, wordKey) {
|
||
return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
|
||
},
|
||
translate: function (number, withoutSuffix, key) {
|
||
var wordKey = translator.words[key];
|
||
if (key.length === 1) {
|
||
return withoutSuffix ? wordKey[0] : wordKey[1];
|
||
} else {
|
||
return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
|
||
}
|
||
}
|
||
};
|
||
|
||
var me = moment.defineLocale('me', {
|
||
months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
|
||
monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
|
||
weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
|
||
weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat: {
|
||
LT: 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L: 'DD.MM.YYYY',
|
||
LL: 'D. MMMM YYYY',
|
||
LLL: 'D. MMMM YYYY H:mm',
|
||
LLLL: 'dddd, D. MMMM YYYY H:mm'
|
||
},
|
||
calendar: {
|
||
sameDay: '[danas u] LT',
|
||
nextDay: '[sjutra u] LT',
|
||
|
||
nextWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[u] [nedjelju] [u] LT';
|
||
case 3:
|
||
return '[u] [srijedu] [u] LT';
|
||
case 6:
|
||
return '[u] [subotu] [u] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[u] dddd [u] LT';
|
||
}
|
||
},
|
||
lastDay : '[juče u] LT',
|
||
lastWeek : function () {
|
||
var lastWeekDays = [
|
||
'[prošle] [nedjelje] [u] LT',
|
||
'[prošlog] [ponedjeljka] [u] LT',
|
||
'[prošlog] [utorka] [u] LT',
|
||
'[prošle] [srijede] [u] LT',
|
||
'[prošlog] [četvrtka] [u] LT',
|
||
'[prošlog] [petka] [u] LT',
|
||
'[prošle] [subote] [u] LT'
|
||
];
|
||
return lastWeekDays[this.day()];
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'za %s',
|
||
past : 'prije %s',
|
||
s : 'nekoliko sekundi',
|
||
m : translator.translate,
|
||
mm : translator.translate,
|
||
h : translator.translate,
|
||
hh : translator.translate,
|
||
d : 'dan',
|
||
dd : translator.translate,
|
||
M : 'mjesec',
|
||
MM : translator.translate,
|
||
y : 'godinu',
|
||
yy : translator.translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return me;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 103 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Maori [mi]
|
||
//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var mi = moment.defineLocale('mi', {
|
||
months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
|
||
monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
|
||
monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
|
||
monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
|
||
monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
|
||
monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
|
||
weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
|
||
weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
|
||
weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
|
||
longDateFormat: {
|
||
LT: 'HH:mm',
|
||
LTS: 'HH:mm:ss',
|
||
L: 'DD/MM/YYYY',
|
||
LL: 'D MMMM YYYY',
|
||
LLL: 'D MMMM YYYY [i] HH:mm',
|
||
LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
|
||
},
|
||
calendar: {
|
||
sameDay: '[i teie mahana, i] LT',
|
||
nextDay: '[apopo i] LT',
|
||
nextWeek: 'dddd [i] LT',
|
||
lastDay: '[inanahi i] LT',
|
||
lastWeek: 'dddd [whakamutunga i] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime: {
|
||
future: 'i roto i %s',
|
||
past: '%s i mua',
|
||
s: 'te hēkona ruarua',
|
||
m: 'he meneti',
|
||
mm: '%d meneti',
|
||
h: 'te haora',
|
||
hh: '%d haora',
|
||
d: 'he ra',
|
||
dd: '%d ra',
|
||
M: 'he marama',
|
||
MM: '%d marama',
|
||
y: 'he tau',
|
||
yy: '%d tau'
|
||
},
|
||
ordinalParse: /\d{1,2}º/,
|
||
ordinal: '%dº',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return mi;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 104 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Macedonian [mk]
|
||
//! author : Borislav Mickov : https://github.com/B0k0
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var mk = moment.defineLocale('mk', {
|
||
months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
|
||
monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
|
||
weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
|
||
weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
|
||
weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'D.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY H:mm',
|
||
LLLL : 'dddd, D MMMM YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Денес во] LT',
|
||
nextDay : '[Утре во] LT',
|
||
nextWeek : '[Во] dddd [во] LT',
|
||
lastDay : '[Вчера во] LT',
|
||
lastWeek : function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
case 3:
|
||
case 6:
|
||
return '[Изминатата] dddd [во] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[Изминатиот] dddd [во] LT';
|
||
}
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'после %s',
|
||
past : 'пред %s',
|
||
s : 'неколку секунди',
|
||
m : 'минута',
|
||
mm : '%d минути',
|
||
h : 'час',
|
||
hh : '%d часа',
|
||
d : 'ден',
|
||
dd : '%d дена',
|
||
M : 'месец',
|
||
MM : '%d месеци',
|
||
y : 'година',
|
||
yy : '%d години'
|
||
},
|
||
ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
|
||
ordinal : function (number) {
|
||
var lastDigit = number % 10,
|
||
last2Digits = number % 100;
|
||
if (number === 0) {
|
||
return number + '-ев';
|
||
} else if (last2Digits === 0) {
|
||
return number + '-ен';
|
||
} else if (last2Digits > 10 && last2Digits < 20) {
|
||
return number + '-ти';
|
||
} else if (lastDigit === 1) {
|
||
return number + '-ви';
|
||
} else if (lastDigit === 2) {
|
||
return number + '-ри';
|
||
} else if (lastDigit === 7 || lastDigit === 8) {
|
||
return number + '-ми';
|
||
} else {
|
||
return number + '-ти';
|
||
}
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return mk;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 105 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Malayalam [ml]
|
||
//! author : Floyd Pink : https://github.com/floydpink
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var ml = moment.defineLocale('ml', {
|
||
months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
|
||
monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
|
||
weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
|
||
weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'A h:mm -നു',
|
||
LTS : 'A h:mm:ss -നു',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY, A h:mm -നു',
|
||
LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'
|
||
},
|
||
calendar : {
|
||
sameDay : '[ഇന്ന്] LT',
|
||
nextDay : '[നാളെ] LT',
|
||
nextWeek : 'dddd, LT',
|
||
lastDay : '[ഇന്നലെ] LT',
|
||
lastWeek : '[കഴിഞ്ഞ] dddd, LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s കഴിഞ്ഞ്',
|
||
past : '%s മുൻപ്',
|
||
s : 'അൽപ നിമിഷങ്ങൾ',
|
||
m : 'ഒരു മിനിറ്റ്',
|
||
mm : '%d മിനിറ്റ്',
|
||
h : 'ഒരു മണിക്കൂർ',
|
||
hh : '%d മണിക്കൂർ',
|
||
d : 'ഒരു ദിവസം',
|
||
dd : '%d ദിവസം',
|
||
M : 'ഒരു മാസം',
|
||
MM : '%d മാസം',
|
||
y : 'ഒരു വർഷം',
|
||
yy : '%d വർഷം'
|
||
},
|
||
meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if ((meridiem === 'രാത്രി' && hour >= 4) ||
|
||
meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
|
||
meridiem === 'വൈകുന്നേരം') {
|
||
return hour + 12;
|
||
} else {
|
||
return hour;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'രാത്രി';
|
||
} else if (hour < 12) {
|
||
return 'രാവിലെ';
|
||
} else if (hour < 17) {
|
||
return 'ഉച്ച കഴിഞ്ഞ്';
|
||
} else if (hour < 20) {
|
||
return 'വൈകുന്നേരം';
|
||
} else {
|
||
return 'രാത്രി';
|
||
}
|
||
}
|
||
});
|
||
|
||
return ml;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 106 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Marathi [mr]
|
||
//! author : Harshad Kale : https://github.com/kalehv
|
||
//! author : Vivek Athalye : https://github.com/vnathalye
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '१',
|
||
'2': '२',
|
||
'3': '३',
|
||
'4': '४',
|
||
'5': '५',
|
||
'6': '६',
|
||
'7': '७',
|
||
'8': '८',
|
||
'9': '९',
|
||
'0': '०'
|
||
};
|
||
var numberMap = {
|
||
'१': '1',
|
||
'२': '2',
|
||
'३': '3',
|
||
'४': '4',
|
||
'५': '5',
|
||
'६': '6',
|
||
'७': '7',
|
||
'८': '8',
|
||
'९': '9',
|
||
'०': '0'
|
||
};
|
||
|
||
function relativeTimeMr(number, withoutSuffix, string, isFuture)
|
||
{
|
||
var output = '';
|
||
if (withoutSuffix) {
|
||
switch (string) {
|
||
case 's': output = 'काही सेकंद'; break;
|
||
case 'm': output = 'एक मिनिट'; break;
|
||
case 'mm': output = '%d मिनिटे'; break;
|
||
case 'h': output = 'एक तास'; break;
|
||
case 'hh': output = '%d तास'; break;
|
||
case 'd': output = 'एक दिवस'; break;
|
||
case 'dd': output = '%d दिवस'; break;
|
||
case 'M': output = 'एक महिना'; break;
|
||
case 'MM': output = '%d महिने'; break;
|
||
case 'y': output = 'एक वर्ष'; break;
|
||
case 'yy': output = '%d वर्षे'; break;
|
||
}
|
||
}
|
||
else {
|
||
switch (string) {
|
||
case 's': output = 'काही सेकंदां'; break;
|
||
case 'm': output = 'एका मिनिटा'; break;
|
||
case 'mm': output = '%d मिनिटां'; break;
|
||
case 'h': output = 'एका तासा'; break;
|
||
case 'hh': output = '%d तासां'; break;
|
||
case 'd': output = 'एका दिवसा'; break;
|
||
case 'dd': output = '%d दिवसां'; break;
|
||
case 'M': output = 'एका महिन्या'; break;
|
||
case 'MM': output = '%d महिन्यां'; break;
|
||
case 'y': output = 'एका वर्षा'; break;
|
||
case 'yy': output = '%d वर्षां'; break;
|
||
}
|
||
}
|
||
return output.replace(/%d/i, number);
|
||
}
|
||
|
||
var mr = moment.defineLocale('mr', {
|
||
months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
|
||
monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
|
||
weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
|
||
weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'A h:mm वाजता',
|
||
LTS : 'A h:mm:ss वाजता',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY, A h:mm वाजता',
|
||
LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'
|
||
},
|
||
calendar : {
|
||
sameDay : '[आज] LT',
|
||
nextDay : '[उद्या] LT',
|
||
nextWeek : 'dddd, LT',
|
||
lastDay : '[काल] LT',
|
||
lastWeek: '[मागील] dddd, LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future: '%sमध्ये',
|
||
past: '%sपूर्वी',
|
||
s: relativeTimeMr,
|
||
m: relativeTimeMr,
|
||
mm: relativeTimeMr,
|
||
h: relativeTimeMr,
|
||
hh: relativeTimeMr,
|
||
d: relativeTimeMr,
|
||
dd: relativeTimeMr,
|
||
M: relativeTimeMr,
|
||
MM: relativeTimeMr,
|
||
y: relativeTimeMr,
|
||
yy: relativeTimeMr
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[१२३४५६७८९०]/g, function (match) {
|
||
return numberMap[match];
|
||
});
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
});
|
||
},
|
||
meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'रात्री') {
|
||
return hour < 4 ? hour : hour + 12;
|
||
} else if (meridiem === 'सकाळी') {
|
||
return hour;
|
||
} else if (meridiem === 'दुपारी') {
|
||
return hour >= 10 ? hour : hour + 12;
|
||
} else if (meridiem === 'सायंकाळी') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem: function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'रात्री';
|
||
} else if (hour < 10) {
|
||
return 'सकाळी';
|
||
} else if (hour < 17) {
|
||
return 'दुपारी';
|
||
} else if (hour < 20) {
|
||
return 'सायंकाळी';
|
||
} else {
|
||
return 'रात्री';
|
||
}
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return mr;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 107 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Malay [ms]
|
||
//! author : Weldan Jamili : https://github.com/weldan
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var ms = moment.defineLocale('ms', {
|
||
months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
|
||
weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
|
||
weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
|
||
weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH.mm',
|
||
LTS : 'HH.mm.ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY [pukul] HH.mm',
|
||
LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
|
||
},
|
||
meridiemParse: /pagi|tengahari|petang|malam/,
|
||
meridiemHour: function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'pagi') {
|
||
return hour;
|
||
} else if (meridiem === 'tengahari') {
|
||
return hour >= 11 ? hour : hour + 12;
|
||
} else if (meridiem === 'petang' || meridiem === 'malam') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours < 11) {
|
||
return 'pagi';
|
||
} else if (hours < 15) {
|
||
return 'tengahari';
|
||
} else if (hours < 19) {
|
||
return 'petang';
|
||
} else {
|
||
return 'malam';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[Hari ini pukul] LT',
|
||
nextDay : '[Esok pukul] LT',
|
||
nextWeek : 'dddd [pukul] LT',
|
||
lastDay : '[Kelmarin pukul] LT',
|
||
lastWeek : 'dddd [lepas pukul] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'dalam %s',
|
||
past : '%s yang lepas',
|
||
s : 'beberapa saat',
|
||
m : 'seminit',
|
||
mm : '%d minit',
|
||
h : 'sejam',
|
||
hh : '%d jam',
|
||
d : 'sehari',
|
||
dd : '%d hari',
|
||
M : 'sebulan',
|
||
MM : '%d bulan',
|
||
y : 'setahun',
|
||
yy : '%d tahun'
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return ms;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 108 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Malay [ms-my]
|
||
//! note : DEPRECATED, the correct one is [ms]
|
||
//! author : Weldan Jamili : https://github.com/weldan
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var msMy = moment.defineLocale('ms-my', {
|
||
months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
|
||
weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
|
||
weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
|
||
weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH.mm',
|
||
LTS : 'HH.mm.ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY [pukul] HH.mm',
|
||
LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
|
||
},
|
||
meridiemParse: /pagi|tengahari|petang|malam/,
|
||
meridiemHour: function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'pagi') {
|
||
return hour;
|
||
} else if (meridiem === 'tengahari') {
|
||
return hour >= 11 ? hour : hour + 12;
|
||
} else if (meridiem === 'petang' || meridiem === 'malam') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours < 11) {
|
||
return 'pagi';
|
||
} else if (hours < 15) {
|
||
return 'tengahari';
|
||
} else if (hours < 19) {
|
||
return 'petang';
|
||
} else {
|
||
return 'malam';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[Hari ini pukul] LT',
|
||
nextDay : '[Esok pukul] LT',
|
||
nextWeek : 'dddd [pukul] LT',
|
||
lastDay : '[Kelmarin pukul] LT',
|
||
lastWeek : 'dddd [lepas pukul] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'dalam %s',
|
||
past : '%s yang lepas',
|
||
s : 'beberapa saat',
|
||
m : 'seminit',
|
||
mm : '%d minit',
|
||
h : 'sejam',
|
||
hh : '%d jam',
|
||
d : 'sehari',
|
||
dd : '%d hari',
|
||
M : 'sebulan',
|
||
MM : '%d bulan',
|
||
y : 'setahun',
|
||
yy : '%d tahun'
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return msMy;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 109 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Burmese [my]
|
||
//! author : Squar team, mysquar.com
|
||
//! author : David Rossellat : https://github.com/gholadr
|
||
//! author : Tin Aung Lin : https://github.com/thanyawzinmin
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '၁',
|
||
'2': '၂',
|
||
'3': '၃',
|
||
'4': '၄',
|
||
'5': '၅',
|
||
'6': '၆',
|
||
'7': '၇',
|
||
'8': '၈',
|
||
'9': '၉',
|
||
'0': '၀'
|
||
};
|
||
var numberMap = {
|
||
'၁': '1',
|
||
'၂': '2',
|
||
'၃': '3',
|
||
'၄': '4',
|
||
'၅': '5',
|
||
'၆': '6',
|
||
'၇': '7',
|
||
'၈': '8',
|
||
'၉': '9',
|
||
'၀': '0'
|
||
};
|
||
|
||
var my = moment.defineLocale('my', {
|
||
months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
|
||
monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
|
||
weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
|
||
weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
|
||
weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
|
||
|
||
longDateFormat: {
|
||
LT: 'HH:mm',
|
||
LTS: 'HH:mm:ss',
|
||
L: 'DD/MM/YYYY',
|
||
LL: 'D MMMM YYYY',
|
||
LLL: 'D MMMM YYYY HH:mm',
|
||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar: {
|
||
sameDay: '[ယနေ.] LT [မှာ]',
|
||
nextDay: '[မနက်ဖြန်] LT [မှာ]',
|
||
nextWeek: 'dddd LT [မှာ]',
|
||
lastDay: '[မနေ.က] LT [မှာ]',
|
||
lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime: {
|
||
future: 'လာမည့် %s မှာ',
|
||
past: 'လွန်ခဲ့သော %s က',
|
||
s: 'စက္ကန်.အနည်းငယ်',
|
||
m: 'တစ်မိနစ်',
|
||
mm: '%d မိနစ်',
|
||
h: 'တစ်နာရီ',
|
||
hh: '%d နာရီ',
|
||
d: 'တစ်ရက်',
|
||
dd: '%d ရက်',
|
||
M: 'တစ်လ',
|
||
MM: '%d လ',
|
||
y: 'တစ်နှစ်',
|
||
yy: '%d နှစ်'
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
|
||
return numberMap[match];
|
||
});
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
});
|
||
},
|
||
week: {
|
||
dow: 1, // Monday is the first day of the week.
|
||
doy: 4 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return my;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 110 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Norwegian Bokmål [nb]
|
||
//! authors : Espen Hovlandsdal : https://github.com/rexxars
|
||
//! Sigurd Gartmann : https://github.com/sigurdga
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var nb = moment.defineLocale('nb', {
|
||
months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
|
||
monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
|
||
weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
|
||
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY [kl.] HH:mm',
|
||
LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[i dag kl.] LT',
|
||
nextDay: '[i morgen kl.] LT',
|
||
nextWeek: 'dddd [kl.] LT',
|
||
lastDay: '[i går kl.] LT',
|
||
lastWeek: '[forrige] dddd [kl.] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'om %s',
|
||
past : '%s siden',
|
||
s : 'noen sekunder',
|
||
m : 'ett minutt',
|
||
mm : '%d minutter',
|
||
h : 'en time',
|
||
hh : '%d timer',
|
||
d : 'en dag',
|
||
dd : '%d dager',
|
||
M : 'en måned',
|
||
MM : '%d måneder',
|
||
y : 'ett år',
|
||
yy : '%d år'
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return nb;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 111 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Nepalese [ne]
|
||
//! author : suvash : https://github.com/suvash
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '१',
|
||
'2': '२',
|
||
'3': '३',
|
||
'4': '४',
|
||
'5': '५',
|
||
'6': '६',
|
||
'7': '७',
|
||
'8': '८',
|
||
'9': '९',
|
||
'0': '०'
|
||
};
|
||
var numberMap = {
|
||
'१': '1',
|
||
'२': '2',
|
||
'३': '3',
|
||
'४': '4',
|
||
'५': '5',
|
||
'६': '6',
|
||
'७': '7',
|
||
'८': '8',
|
||
'९': '9',
|
||
'०': '0'
|
||
};
|
||
|
||
var ne = moment.defineLocale('ne', {
|
||
months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
|
||
monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
|
||
weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
|
||
weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'Aको h:mm बजे',
|
||
LTS : 'Aको h:mm:ss बजे',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY, Aको h:mm बजे',
|
||
LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[१२३४५६७८९०]/g, function (match) {
|
||
return numberMap[match];
|
||
});
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
});
|
||
},
|
||
meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'राति') {
|
||
return hour < 4 ? hour : hour + 12;
|
||
} else if (meridiem === 'बिहान') {
|
||
return hour;
|
||
} else if (meridiem === 'दिउँसो') {
|
||
return hour >= 10 ? hour : hour + 12;
|
||
} else if (meridiem === 'साँझ') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 3) {
|
||
return 'राति';
|
||
} else if (hour < 12) {
|
||
return 'बिहान';
|
||
} else if (hour < 16) {
|
||
return 'दिउँसो';
|
||
} else if (hour < 20) {
|
||
return 'साँझ';
|
||
} else {
|
||
return 'राति';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[आज] LT',
|
||
nextDay : '[भोलि] LT',
|
||
nextWeek : '[आउँदो] dddd[,] LT',
|
||
lastDay : '[हिजो] LT',
|
||
lastWeek : '[गएको] dddd[,] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%sमा',
|
||
past : '%s अगाडि',
|
||
s : 'केही क्षण',
|
||
m : 'एक मिनेट',
|
||
mm : '%d मिनेट',
|
||
h : 'एक घण्टा',
|
||
hh : '%d घण्टा',
|
||
d : 'एक दिन',
|
||
dd : '%d दिन',
|
||
M : 'एक महिना',
|
||
MM : '%d महिना',
|
||
y : 'एक बर्ष',
|
||
yy : '%d बर्ष'
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return ne;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 112 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Dutch [nl]
|
||
//! author : Joris Röling : https://github.com/jorisroling
|
||
//! author : Jacob Middag : https://github.com/middagj
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
|
||
var monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
|
||
|
||
var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
|
||
var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
|
||
|
||
var nl = moment.defineLocale('nl', {
|
||
months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
|
||
monthsShort : function (m, format) {
|
||
if (/-MMM-/.test(format)) {
|
||
return monthsShortWithoutDots[m.month()];
|
||
} else {
|
||
return monthsShortWithDots[m.month()];
|
||
}
|
||
},
|
||
|
||
monthsRegex: monthsRegex,
|
||
monthsShortRegex: monthsRegex,
|
||
monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
|
||
monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
|
||
|
||
monthsParse : monthsParse,
|
||
longMonthsParse : monthsParse,
|
||
shortMonthsParse : monthsParse,
|
||
|
||
weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
|
||
weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
|
||
weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD-MM-YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[vandaag om] LT',
|
||
nextDay: '[morgen om] LT',
|
||
nextWeek: 'dddd [om] LT',
|
||
lastDay: '[gisteren om] LT',
|
||
lastWeek: '[afgelopen] dddd [om] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'over %s',
|
||
past : '%s geleden',
|
||
s : 'een paar seconden',
|
||
m : 'één minuut',
|
||
mm : '%d minuten',
|
||
h : 'één uur',
|
||
hh : '%d uur',
|
||
d : 'één dag',
|
||
dd : '%d dagen',
|
||
M : 'één maand',
|
||
MM : '%d maanden',
|
||
y : 'één jaar',
|
||
yy : '%d jaar'
|
||
},
|
||
ordinalParse: /\d{1,2}(ste|de)/,
|
||
ordinal : function (number) {
|
||
return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return nl;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 113 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Dutch (Belgium) [nl-be]
|
||
//! author : Joris Röling : https://github.com/jorisroling
|
||
//! author : Jacob Middag : https://github.com/middagj
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
|
||
var monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
|
||
|
||
var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
|
||
var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
|
||
|
||
var nlBe = moment.defineLocale('nl-be', {
|
||
months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
|
||
monthsShort : function (m, format) {
|
||
if (/-MMM-/.test(format)) {
|
||
return monthsShortWithoutDots[m.month()];
|
||
} else {
|
||
return monthsShortWithDots[m.month()];
|
||
}
|
||
},
|
||
|
||
monthsRegex: monthsRegex,
|
||
monthsShortRegex: monthsRegex,
|
||
monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
|
||
monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
|
||
|
||
monthsParse : monthsParse,
|
||
longMonthsParse : monthsParse,
|
||
shortMonthsParse : monthsParse,
|
||
|
||
weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
|
||
weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
|
||
weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[vandaag om] LT',
|
||
nextDay: '[morgen om] LT',
|
||
nextWeek: 'dddd [om] LT',
|
||
lastDay: '[gisteren om] LT',
|
||
lastWeek: '[afgelopen] dddd [om] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'over %s',
|
||
past : '%s geleden',
|
||
s : 'een paar seconden',
|
||
m : 'één minuut',
|
||
mm : '%d minuten',
|
||
h : 'één uur',
|
||
hh : '%d uur',
|
||
d : 'één dag',
|
||
dd : '%d dagen',
|
||
M : 'één maand',
|
||
MM : '%d maanden',
|
||
y : 'één jaar',
|
||
yy : '%d jaar'
|
||
},
|
||
ordinalParse: /\d{1,2}(ste|de)/,
|
||
ordinal : function (number) {
|
||
return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return nlBe;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 114 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Nynorsk [nn]
|
||
//! author : https://github.com/mechuwind
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var nn = moment.defineLocale('nn', {
|
||
months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
|
||
monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
|
||
weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
|
||
weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),
|
||
weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY [kl.] H:mm',
|
||
LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[I dag klokka] LT',
|
||
nextDay: '[I morgon klokka] LT',
|
||
nextWeek: 'dddd [klokka] LT',
|
||
lastDay: '[I går klokka] LT',
|
||
lastWeek: '[Føregåande] dddd [klokka] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'om %s',
|
||
past : '%s sidan',
|
||
s : 'nokre sekund',
|
||
m : 'eit minutt',
|
||
mm : '%d minutt',
|
||
h : 'ein time',
|
||
hh : '%d timar',
|
||
d : 'ein dag',
|
||
dd : '%d dagar',
|
||
M : 'ein månad',
|
||
MM : '%d månader',
|
||
y : 'eit år',
|
||
yy : '%d år'
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return nn;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 115 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Punjabi (India) [pa-in]
|
||
//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '੧',
|
||
'2': '੨',
|
||
'3': '੩',
|
||
'4': '੪',
|
||
'5': '੫',
|
||
'6': '੬',
|
||
'7': '੭',
|
||
'8': '੮',
|
||
'9': '੯',
|
||
'0': '੦'
|
||
};
|
||
var numberMap = {
|
||
'੧': '1',
|
||
'੨': '2',
|
||
'੩': '3',
|
||
'੪': '4',
|
||
'੫': '5',
|
||
'੬': '6',
|
||
'੭': '7',
|
||
'੮': '8',
|
||
'੯': '9',
|
||
'੦': '0'
|
||
};
|
||
|
||
var paIn = moment.defineLocale('pa-in', {
|
||
// There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
|
||
months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
|
||
monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
|
||
weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
|
||
weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
|
||
weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'A h:mm ਵਜੇ',
|
||
LTS : 'A h:mm:ss ਵਜੇ',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',
|
||
LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
|
||
},
|
||
calendar : {
|
||
sameDay : '[ਅਜ] LT',
|
||
nextDay : '[ਕਲ] LT',
|
||
nextWeek : 'dddd, LT',
|
||
lastDay : '[ਕਲ] LT',
|
||
lastWeek : '[ਪਿਛਲੇ] dddd, LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s ਵਿੱਚ',
|
||
past : '%s ਪਿਛਲੇ',
|
||
s : 'ਕੁਝ ਸਕਿੰਟ',
|
||
m : 'ਇਕ ਮਿੰਟ',
|
||
mm : '%d ਮਿੰਟ',
|
||
h : 'ਇੱਕ ਘੰਟਾ',
|
||
hh : '%d ਘੰਟੇ',
|
||
d : 'ਇੱਕ ਦਿਨ',
|
||
dd : '%d ਦਿਨ',
|
||
M : 'ਇੱਕ ਮਹੀਨਾ',
|
||
MM : '%d ਮਹੀਨੇ',
|
||
y : 'ਇੱਕ ਸਾਲ',
|
||
yy : '%d ਸਾਲ'
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
|
||
return numberMap[match];
|
||
});
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
});
|
||
},
|
||
// Punjabi notation for meridiems are quite fuzzy in practice. While there exists
|
||
// a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
|
||
meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'ਰਾਤ') {
|
||
return hour < 4 ? hour : hour + 12;
|
||
} else if (meridiem === 'ਸਵੇਰ') {
|
||
return hour;
|
||
} else if (meridiem === 'ਦੁਪਹਿਰ') {
|
||
return hour >= 10 ? hour : hour + 12;
|
||
} else if (meridiem === 'ਸ਼ਾਮ') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'ਰਾਤ';
|
||
} else if (hour < 10) {
|
||
return 'ਸਵੇਰ';
|
||
} else if (hour < 17) {
|
||
return 'ਦੁਪਹਿਰ';
|
||
} else if (hour < 20) {
|
||
return 'ਸ਼ਾਮ';
|
||
} else {
|
||
return 'ਰਾਤ';
|
||
}
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return paIn;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 116 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Polish [pl]
|
||
//! author : Rafal Hirsz : https://github.com/evoL
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_');
|
||
var monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
|
||
function plural(n) {
|
||
return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
|
||
}
|
||
function translate(number, withoutSuffix, key) {
|
||
var result = number + ' ';
|
||
switch (key) {
|
||
case 'm':
|
||
return withoutSuffix ? 'minuta' : 'minutę';
|
||
case 'mm':
|
||
return result + (plural(number) ? 'minuty' : 'minut');
|
||
case 'h':
|
||
return withoutSuffix ? 'godzina' : 'godzinę';
|
||
case 'hh':
|
||
return result + (plural(number) ? 'godziny' : 'godzin');
|
||
case 'MM':
|
||
return result + (plural(number) ? 'miesiące' : 'miesięcy');
|
||
case 'yy':
|
||
return result + (plural(number) ? 'lata' : 'lat');
|
||
}
|
||
}
|
||
|
||
var pl = moment.defineLocale('pl', {
|
||
months : function (momentToFormat, format) {
|
||
if (format === '') {
|
||
// Hack: if format empty we know this is used to generate
|
||
// RegExp by moment. Give then back both valid forms of months
|
||
// in RegExp ready format.
|
||
return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';
|
||
} else if (/D MMMM/.test(format)) {
|
||
return monthsSubjective[momentToFormat.month()];
|
||
} else {
|
||
return monthsNominative[momentToFormat.month()];
|
||
}
|
||
},
|
||
monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
|
||
weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
|
||
weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
|
||
weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Dziś o] LT',
|
||
nextDay: '[Jutro o] LT',
|
||
nextWeek: '[W] dddd [o] LT',
|
||
lastDay: '[Wczoraj o] LT',
|
||
lastWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[W zeszłą niedzielę o] LT';
|
||
case 3:
|
||
return '[W zeszłą środę o] LT';
|
||
case 6:
|
||
return '[W zeszłą sobotę o] LT';
|
||
default:
|
||
return '[W zeszły] dddd [o] LT';
|
||
}
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'za %s',
|
||
past : '%s temu',
|
||
s : 'kilka sekund',
|
||
m : translate,
|
||
mm : translate,
|
||
h : translate,
|
||
hh : translate,
|
||
d : '1 dzień',
|
||
dd : '%d dni',
|
||
M : 'miesiąc',
|
||
MM : translate,
|
||
y : 'rok',
|
||
yy : translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return pl;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 117 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Portuguese [pt]
|
||
//! author : Jefferson : https://github.com/jalex79
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var pt = moment.defineLocale('pt', {
|
||
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
|
||
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
|
||
weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
|
||
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
|
||
weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D [de] MMMM [de] YYYY',
|
||
LLL : 'D [de] MMMM [de] YYYY HH:mm',
|
||
LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Hoje às] LT',
|
||
nextDay: '[Amanhã às] LT',
|
||
nextWeek: 'dddd [às] LT',
|
||
lastDay: '[Ontem às] LT',
|
||
lastWeek: function () {
|
||
return (this.day() === 0 || this.day() === 6) ?
|
||
'[Último] dddd [às] LT' : // Saturday + Sunday
|
||
'[Última] dddd [às] LT'; // Monday - Friday
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'em %s',
|
||
past : 'há %s',
|
||
s : 'segundos',
|
||
m : 'um minuto',
|
||
mm : '%d minutos',
|
||
h : 'uma hora',
|
||
hh : '%d horas',
|
||
d : 'um dia',
|
||
dd : '%d dias',
|
||
M : 'um mês',
|
||
MM : '%d meses',
|
||
y : 'um ano',
|
||
yy : '%d anos'
|
||
},
|
||
ordinalParse: /\d{1,2}º/,
|
||
ordinal : '%dº',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return pt;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 118 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Portuguese (Brazil) [pt-br]
|
||
//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var ptBr = moment.defineLocale('pt-br', {
|
||
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
|
||
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
|
||
weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
|
||
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
|
||
weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D [de] MMMM [de] YYYY',
|
||
LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
|
||
LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Hoje às] LT',
|
||
nextDay: '[Amanhã às] LT',
|
||
nextWeek: 'dddd [às] LT',
|
||
lastDay: '[Ontem às] LT',
|
||
lastWeek: function () {
|
||
return (this.day() === 0 || this.day() === 6) ?
|
||
'[Último] dddd [às] LT' : // Saturday + Sunday
|
||
'[Última] dddd [às] LT'; // Monday - Friday
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'em %s',
|
||
past : '%s atrás',
|
||
s : 'poucos segundos',
|
||
m : 'um minuto',
|
||
mm : '%d minutos',
|
||
h : 'uma hora',
|
||
hh : '%d horas',
|
||
d : 'um dia',
|
||
dd : '%d dias',
|
||
M : 'um mês',
|
||
MM : '%d meses',
|
||
y : 'um ano',
|
||
yy : '%d anos'
|
||
},
|
||
ordinalParse: /\d{1,2}º/,
|
||
ordinal : '%dº'
|
||
});
|
||
|
||
return ptBr;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 119 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Romanian [ro]
|
||
//! author : Vlad Gurdiga : https://github.com/gurdiga
|
||
//! author : Valentin Agachi : https://github.com/avaly
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function relativeTimeWithPlural(number, withoutSuffix, key) {
|
||
var format = {
|
||
'mm': 'minute',
|
||
'hh': 'ore',
|
||
'dd': 'zile',
|
||
'MM': 'luni',
|
||
'yy': 'ani'
|
||
},
|
||
separator = ' ';
|
||
if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
|
||
separator = ' de ';
|
||
}
|
||
return number + separator + format[key];
|
||
}
|
||
|
||
var ro = moment.defineLocale('ro', {
|
||
months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
|
||
monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
|
||
monthsParseExact: true,
|
||
weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
|
||
weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
|
||
weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY H:mm',
|
||
LLLL : 'dddd, D MMMM YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[azi la] LT',
|
||
nextDay: '[mâine la] LT',
|
||
nextWeek: 'dddd [la] LT',
|
||
lastDay: '[ieri la] LT',
|
||
lastWeek: '[fosta] dddd [la] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'peste %s',
|
||
past : '%s în urmă',
|
||
s : 'câteva secunde',
|
||
m : 'un minut',
|
||
mm : relativeTimeWithPlural,
|
||
h : 'o oră',
|
||
hh : relativeTimeWithPlural,
|
||
d : 'o zi',
|
||
dd : relativeTimeWithPlural,
|
||
M : 'o lună',
|
||
MM : relativeTimeWithPlural,
|
||
y : 'un an',
|
||
yy : relativeTimeWithPlural
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return ro;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 120 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Russian [ru]
|
||
//! author : Viktorminator : https://github.com/Viktorminator
|
||
//! Author : Menelion Elensúle : https://github.com/Oire
|
||
//! author : Коренберг Марк : https://github.com/socketpair
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function plural(word, num) {
|
||
var forms = word.split('_');
|
||
return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
|
||
}
|
||
function relativeTimeWithPlural(number, withoutSuffix, key) {
|
||
var format = {
|
||
'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
|
||
'hh': 'час_часа_часов',
|
||
'dd': 'день_дня_дней',
|
||
'MM': 'месяц_месяца_месяцев',
|
||
'yy': 'год_года_лет'
|
||
};
|
||
if (key === 'm') {
|
||
return withoutSuffix ? 'минута' : 'минуту';
|
||
}
|
||
else {
|
||
return number + ' ' + plural(format[key], +number);
|
||
}
|
||
}
|
||
var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
|
||
|
||
// http://new.gramota.ru/spravka/rules/139-prop : § 103
|
||
// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
|
||
// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
|
||
var ru = moment.defineLocale('ru', {
|
||
months : {
|
||
format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
|
||
standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
|
||
},
|
||
monthsShort : {
|
||
// по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
|
||
format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
|
||
standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
|
||
},
|
||
weekdays : {
|
||
standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
|
||
format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
|
||
isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
|
||
},
|
||
weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
|
||
weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
|
||
monthsParse : monthsParse,
|
||
longMonthsParse : monthsParse,
|
||
shortMonthsParse : monthsParse,
|
||
|
||
// полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
|
||
monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
|
||
|
||
// копия предыдущего
|
||
monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
|
||
|
||
// полные названия с падежами
|
||
monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
|
||
|
||
// Выражение, которое соотвествует только сокращённым формам
|
||
monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY г.',
|
||
LLL : 'D MMMM YYYY г., HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY г., HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Сегодня в] LT',
|
||
nextDay: '[Завтра в] LT',
|
||
lastDay: '[Вчера в] LT',
|
||
nextWeek: function (now) {
|
||
if (now.week() !== this.week()) {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[В следующее] dddd [в] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
return '[В следующий] dddd [в] LT';
|
||
case 3:
|
||
case 5:
|
||
case 6:
|
||
return '[В следующую] dddd [в] LT';
|
||
}
|
||
} else {
|
||
if (this.day() === 2) {
|
||
return '[Во] dddd [в] LT';
|
||
} else {
|
||
return '[В] dddd [в] LT';
|
||
}
|
||
}
|
||
},
|
||
lastWeek: function (now) {
|
||
if (now.week() !== this.week()) {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[В прошлое] dddd [в] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
return '[В прошлый] dddd [в] LT';
|
||
case 3:
|
||
case 5:
|
||
case 6:
|
||
return '[В прошлую] dddd [в] LT';
|
||
}
|
||
} else {
|
||
if (this.day() === 2) {
|
||
return '[Во] dddd [в] LT';
|
||
} else {
|
||
return '[В] dddd [в] LT';
|
||
}
|
||
}
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'через %s',
|
||
past : '%s назад',
|
||
s : 'несколько секунд',
|
||
m : relativeTimeWithPlural,
|
||
mm : relativeTimeWithPlural,
|
||
h : 'час',
|
||
hh : relativeTimeWithPlural,
|
||
d : 'день',
|
||
dd : relativeTimeWithPlural,
|
||
M : 'месяц',
|
||
MM : relativeTimeWithPlural,
|
||
y : 'год',
|
||
yy : relativeTimeWithPlural
|
||
},
|
||
meridiemParse: /ночи|утра|дня|вечера/i,
|
||
isPM : function (input) {
|
||
return /^(дня|вечера)$/.test(input);
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'ночи';
|
||
} else if (hour < 12) {
|
||
return 'утра';
|
||
} else if (hour < 17) {
|
||
return 'дня';
|
||
} else {
|
||
return 'вечера';
|
||
}
|
||
},
|
||
ordinalParse: /\d{1,2}-(й|го|я)/,
|
||
ordinal: function (number, period) {
|
||
switch (period) {
|
||
case 'M':
|
||
case 'd':
|
||
case 'DDD':
|
||
return number + '-й';
|
||
case 'D':
|
||
return number + '-го';
|
||
case 'w':
|
||
case 'W':
|
||
return number + '-я';
|
||
default:
|
||
return number;
|
||
}
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return ru;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 121 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Northern Sami [se]
|
||
//! authors : Bård Rolstad Henriksen : https://github.com/karamell
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
|
||
var se = moment.defineLocale('se', {
|
||
months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
|
||
monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
|
||
weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
|
||
weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
|
||
weekdaysMin : 's_v_m_g_d_b_L'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'MMMM D. [b.] YYYY',
|
||
LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',
|
||
LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[otne ti] LT',
|
||
nextDay: '[ihttin ti] LT',
|
||
nextWeek: 'dddd [ti] LT',
|
||
lastDay: '[ikte ti] LT',
|
||
lastWeek: '[ovddit] dddd [ti] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s geažes',
|
||
past : 'maŋit %s',
|
||
s : 'moadde sekunddat',
|
||
m : 'okta minuhta',
|
||
mm : '%d minuhtat',
|
||
h : 'okta diimmu',
|
||
hh : '%d diimmut',
|
||
d : 'okta beaivi',
|
||
dd : '%d beaivvit',
|
||
M : 'okta mánnu',
|
||
MM : '%d mánut',
|
||
y : 'okta jahki',
|
||
yy : '%d jagit'
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return se;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 122 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Sinhalese [si]
|
||
//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
/*jshint -W100*/
|
||
var si = moment.defineLocale('si', {
|
||
months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
|
||
monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
|
||
weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
|
||
weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්රහ_සිකු_සෙන'.split('_'),
|
||
weekdaysMin : 'ඉ_ස_අ_බ_බ්ර_සි_සෙ'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'a h:mm',
|
||
LTS : 'a h:mm:ss',
|
||
L : 'YYYY/MM/DD',
|
||
LL : 'YYYY MMMM D',
|
||
LLL : 'YYYY MMMM D, a h:mm',
|
||
LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
|
||
},
|
||
calendar : {
|
||
sameDay : '[අද] LT[ට]',
|
||
nextDay : '[හෙට] LT[ට]',
|
||
nextWeek : 'dddd LT[ට]',
|
||
lastDay : '[ඊයේ] LT[ට]',
|
||
lastWeek : '[පසුගිය] dddd LT[ට]',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%sකින්',
|
||
past : '%sකට පෙර',
|
||
s : 'තත්පර කිහිපය',
|
||
m : 'මිනිත්තුව',
|
||
mm : 'මිනිත්තු %d',
|
||
h : 'පැය',
|
||
hh : 'පැය %d',
|
||
d : 'දිනය',
|
||
dd : 'දින %d',
|
||
M : 'මාසය',
|
||
MM : 'මාස %d',
|
||
y : 'වසර',
|
||
yy : 'වසර %d'
|
||
},
|
||
ordinalParse: /\d{1,2} වැනි/,
|
||
ordinal : function (number) {
|
||
return number + ' වැනි';
|
||
},
|
||
meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
|
||
isPM : function (input) {
|
||
return input === 'ප.ව.' || input === 'පස් වරු';
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours > 11) {
|
||
return isLower ? 'ප.ව.' : 'පස් වරු';
|
||
} else {
|
||
return isLower ? 'පෙ.ව.' : 'පෙර වරු';
|
||
}
|
||
}
|
||
});
|
||
|
||
return si;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 123 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Slovak [sk]
|
||
//! author : Martin Minka : https://github.com/k2s
|
||
//! based on work of petrbela : https://github.com/petrbela
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_');
|
||
var monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
|
||
function plural(n) {
|
||
return (n > 1) && (n < 5);
|
||
}
|
||
function translate(number, withoutSuffix, key, isFuture) {
|
||
var result = number + ' ';
|
||
switch (key) {
|
||
case 's': // a few seconds / in a few seconds / a few seconds ago
|
||
return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
|
||
case 'm': // a minute / in a minute / a minute ago
|
||
return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
|
||
case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'minúty' : 'minút');
|
||
} else {
|
||
return result + 'minútami';
|
||
}
|
||
break;
|
||
case 'h': // an hour / in an hour / an hour ago
|
||
return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
|
||
case 'hh': // 9 hours / in 9 hours / 9 hours ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'hodiny' : 'hodín');
|
||
} else {
|
||
return result + 'hodinami';
|
||
}
|
||
break;
|
||
case 'd': // a day / in a day / a day ago
|
||
return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
|
||
case 'dd': // 9 days / in 9 days / 9 days ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'dni' : 'dní');
|
||
} else {
|
||
return result + 'dňami';
|
||
}
|
||
break;
|
||
case 'M': // a month / in a month / a month ago
|
||
return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
|
||
case 'MM': // 9 months / in 9 months / 9 months ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'mesiace' : 'mesiacov');
|
||
} else {
|
||
return result + 'mesiacmi';
|
||
}
|
||
break;
|
||
case 'y': // a year / in a year / a year ago
|
||
return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
|
||
case 'yy': // 9 years / in 9 years / 9 years ago
|
||
if (withoutSuffix || isFuture) {
|
||
return result + (plural(number) ? 'roky' : 'rokov');
|
||
} else {
|
||
return result + 'rokmi';
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
var sk = moment.defineLocale('sk', {
|
||
months : months,
|
||
monthsShort : monthsShort,
|
||
weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
|
||
weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
|
||
weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
|
||
longDateFormat : {
|
||
LT: 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY H:mm',
|
||
LLLL : 'dddd D. MMMM YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[dnes o] LT',
|
||
nextDay: '[zajtra o] LT',
|
||
nextWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[v nedeľu o] LT';
|
||
case 1:
|
||
case 2:
|
||
return '[v] dddd [o] LT';
|
||
case 3:
|
||
return '[v stredu o] LT';
|
||
case 4:
|
||
return '[vo štvrtok o] LT';
|
||
case 5:
|
||
return '[v piatok o] LT';
|
||
case 6:
|
||
return '[v sobotu o] LT';
|
||
}
|
||
},
|
||
lastDay: '[včera o] LT',
|
||
lastWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[minulú nedeľu o] LT';
|
||
case 1:
|
||
case 2:
|
||
return '[minulý] dddd [o] LT';
|
||
case 3:
|
||
return '[minulú stredu o] LT';
|
||
case 4:
|
||
case 5:
|
||
return '[minulý] dddd [o] LT';
|
||
case 6:
|
||
return '[minulú sobotu o] LT';
|
||
}
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'za %s',
|
||
past : 'pred %s',
|
||
s : translate,
|
||
m : translate,
|
||
mm : translate,
|
||
h : translate,
|
||
hh : translate,
|
||
d : translate,
|
||
dd : translate,
|
||
M : translate,
|
||
MM : translate,
|
||
y : translate,
|
||
yy : translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return sk;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 124 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Slovenian [sl]
|
||
//! author : Robert Sedovšek : https://github.com/sedovsek
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function processRelativeTime(number, withoutSuffix, key, isFuture) {
|
||
var result = number + ' ';
|
||
switch (key) {
|
||
case 's':
|
||
return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
|
||
case 'm':
|
||
return withoutSuffix ? 'ena minuta' : 'eno minuto';
|
||
case 'mm':
|
||
if (number === 1) {
|
||
result += withoutSuffix ? 'minuta' : 'minuto';
|
||
} else if (number === 2) {
|
||
result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
|
||
} else if (number < 5) {
|
||
result += withoutSuffix || isFuture ? 'minute' : 'minutami';
|
||
} else {
|
||
result += withoutSuffix || isFuture ? 'minut' : 'minutami';
|
||
}
|
||
return result;
|
||
case 'h':
|
||
return withoutSuffix ? 'ena ura' : 'eno uro';
|
||
case 'hh':
|
||
if (number === 1) {
|
||
result += withoutSuffix ? 'ura' : 'uro';
|
||
} else if (number === 2) {
|
||
result += withoutSuffix || isFuture ? 'uri' : 'urama';
|
||
} else if (number < 5) {
|
||
result += withoutSuffix || isFuture ? 'ure' : 'urami';
|
||
} else {
|
||
result += withoutSuffix || isFuture ? 'ur' : 'urami';
|
||
}
|
||
return result;
|
||
case 'd':
|
||
return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
|
||
case 'dd':
|
||
if (number === 1) {
|
||
result += withoutSuffix || isFuture ? 'dan' : 'dnem';
|
||
} else if (number === 2) {
|
||
result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
|
||
} else {
|
||
result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
|
||
}
|
||
return result;
|
||
case 'M':
|
||
return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
|
||
case 'MM':
|
||
if (number === 1) {
|
||
result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
|
||
} else if (number === 2) {
|
||
result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
|
||
} else if (number < 5) {
|
||
result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
|
||
} else {
|
||
result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
|
||
}
|
||
return result;
|
||
case 'y':
|
||
return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
|
||
case 'yy':
|
||
if (number === 1) {
|
||
result += withoutSuffix || isFuture ? 'leto' : 'letom';
|
||
} else if (number === 2) {
|
||
result += withoutSuffix || isFuture ? 'leti' : 'letoma';
|
||
} else if (number < 5) {
|
||
result += withoutSuffix || isFuture ? 'leta' : 'leti';
|
||
} else {
|
||
result += withoutSuffix || isFuture ? 'let' : 'leti';
|
||
}
|
||
return result;
|
||
}
|
||
}
|
||
|
||
var sl = moment.defineLocale('sl', {
|
||
months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
|
||
monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
|
||
monthsParseExact: true,
|
||
weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
|
||
weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
|
||
weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM YYYY',
|
||
LLL : 'D. MMMM YYYY H:mm',
|
||
LLLL : 'dddd, D. MMMM YYYY H:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[danes ob] LT',
|
||
nextDay : '[jutri ob] LT',
|
||
|
||
nextWeek : function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[v] [nedeljo] [ob] LT';
|
||
case 3:
|
||
return '[v] [sredo] [ob] LT';
|
||
case 6:
|
||
return '[v] [soboto] [ob] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[v] dddd [ob] LT';
|
||
}
|
||
},
|
||
lastDay : '[včeraj ob] LT',
|
||
lastWeek : function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[prejšnjo] [nedeljo] [ob] LT';
|
||
case 3:
|
||
return '[prejšnjo] [sredo] [ob] LT';
|
||
case 6:
|
||
return '[prejšnjo] [soboto] [ob] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[prejšnji] dddd [ob] LT';
|
||
}
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'čez %s',
|
||
past : 'pred %s',
|
||
s : processRelativeTime,
|
||
m : processRelativeTime,
|
||
mm : processRelativeTime,
|
||
h : processRelativeTime,
|
||
hh : processRelativeTime,
|
||
d : processRelativeTime,
|
||
dd : processRelativeTime,
|
||
M : processRelativeTime,
|
||
MM : processRelativeTime,
|
||
y : processRelativeTime,
|
||
yy : processRelativeTime
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return sl;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 125 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Albanian [sq]
|
||
//! author : Flakërim Ismani : https://github.com/flakerimi
|
||
//! author : Menelion Elensúle : https://github.com/Oire
|
||
//! author : Oerd Cukalla : https://github.com/oerd
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var sq = moment.defineLocale('sq', {
|
||
months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
|
||
monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
|
||
weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
|
||
weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
|
||
weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
|
||
weekdaysParseExact : true,
|
||
meridiemParse: /PD|MD/,
|
||
isPM: function (input) {
|
||
return input.charAt(0) === 'M';
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
return hours < 12 ? 'PD' : 'MD';
|
||
},
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Sot në] LT',
|
||
nextDay : '[Nesër në] LT',
|
||
nextWeek : 'dddd [në] LT',
|
||
lastDay : '[Dje në] LT',
|
||
lastWeek : 'dddd [e kaluar në] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'në %s',
|
||
past : '%s më parë',
|
||
s : 'disa sekonda',
|
||
m : 'një minutë',
|
||
mm : '%d minuta',
|
||
h : 'një orë',
|
||
hh : '%d orë',
|
||
d : 'një ditë',
|
||
dd : '%d ditë',
|
||
M : 'një muaj',
|
||
MM : '%d muaj',
|
||
y : 'një vit',
|
||
yy : '%d vite'
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return sq;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 126 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Serbian [sr]
|
||
//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var translator = {
|
||
words: { //Different grammatical cases
|
||
m: ['jedan minut', 'jedne minute'],
|
||
mm: ['minut', 'minute', 'minuta'],
|
||
h: ['jedan sat', 'jednog sata'],
|
||
hh: ['sat', 'sata', 'sati'],
|
||
dd: ['dan', 'dana', 'dana'],
|
||
MM: ['mesec', 'meseca', 'meseci'],
|
||
yy: ['godina', 'godine', 'godina']
|
||
},
|
||
correctGrammaticalCase: function (number, wordKey) {
|
||
return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
|
||
},
|
||
translate: function (number, withoutSuffix, key) {
|
||
var wordKey = translator.words[key];
|
||
if (key.length === 1) {
|
||
return withoutSuffix ? wordKey[0] : wordKey[1];
|
||
} else {
|
||
return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
|
||
}
|
||
}
|
||
};
|
||
|
||
var sr = moment.defineLocale('sr', {
|
||
months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
|
||
monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
|
||
monthsParseExact: true,
|
||
weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
|
||
weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
|
||
weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat: {
|
||
LT: 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L: 'DD.MM.YYYY',
|
||
LL: 'D. MMMM YYYY',
|
||
LLL: 'D. MMMM YYYY H:mm',
|
||
LLLL: 'dddd, D. MMMM YYYY H:mm'
|
||
},
|
||
calendar: {
|
||
sameDay: '[danas u] LT',
|
||
nextDay: '[sutra u] LT',
|
||
nextWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[u] [nedelju] [u] LT';
|
||
case 3:
|
||
return '[u] [sredu] [u] LT';
|
||
case 6:
|
||
return '[u] [subotu] [u] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[u] dddd [u] LT';
|
||
}
|
||
},
|
||
lastDay : '[juče u] LT',
|
||
lastWeek : function () {
|
||
var lastWeekDays = [
|
||
'[prošle] [nedelje] [u] LT',
|
||
'[prošlog] [ponedeljka] [u] LT',
|
||
'[prošlog] [utorka] [u] LT',
|
||
'[prošle] [srede] [u] LT',
|
||
'[prošlog] [četvrtka] [u] LT',
|
||
'[prošlog] [petka] [u] LT',
|
||
'[prošle] [subote] [u] LT'
|
||
];
|
||
return lastWeekDays[this.day()];
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'za %s',
|
||
past : 'pre %s',
|
||
s : 'nekoliko sekundi',
|
||
m : translator.translate,
|
||
mm : translator.translate,
|
||
h : translator.translate,
|
||
hh : translator.translate,
|
||
d : 'dan',
|
||
dd : translator.translate,
|
||
M : 'mesec',
|
||
MM : translator.translate,
|
||
y : 'godinu',
|
||
yy : translator.translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return sr;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 127 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Serbian Cyrillic [sr-cyrl]
|
||
//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var translator = {
|
||
words: { //Different grammatical cases
|
||
m: ['један минут', 'једне минуте'],
|
||
mm: ['минут', 'минуте', 'минута'],
|
||
h: ['један сат', 'једног сата'],
|
||
hh: ['сат', 'сата', 'сати'],
|
||
dd: ['дан', 'дана', 'дана'],
|
||
MM: ['месец', 'месеца', 'месеци'],
|
||
yy: ['година', 'године', 'година']
|
||
},
|
||
correctGrammaticalCase: function (number, wordKey) {
|
||
return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
|
||
},
|
||
translate: function (number, withoutSuffix, key) {
|
||
var wordKey = translator.words[key];
|
||
if (key.length === 1) {
|
||
return withoutSuffix ? wordKey[0] : wordKey[1];
|
||
} else {
|
||
return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
|
||
}
|
||
}
|
||
};
|
||
|
||
var srCyrl = moment.defineLocale('sr-cyrl', {
|
||
months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
|
||
monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
|
||
monthsParseExact: true,
|
||
weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
|
||
weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
|
||
weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat: {
|
||
LT: 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L: 'DD.MM.YYYY',
|
||
LL: 'D. MMMM YYYY',
|
||
LLL: 'D. MMMM YYYY H:mm',
|
||
LLLL: 'dddd, D. MMMM YYYY H:mm'
|
||
},
|
||
calendar: {
|
||
sameDay: '[данас у] LT',
|
||
nextDay: '[сутра у] LT',
|
||
nextWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
return '[у] [недељу] [у] LT';
|
||
case 3:
|
||
return '[у] [среду] [у] LT';
|
||
case 6:
|
||
return '[у] [суботу] [у] LT';
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
case 5:
|
||
return '[у] dddd [у] LT';
|
||
}
|
||
},
|
||
lastDay : '[јуче у] LT',
|
||
lastWeek : function () {
|
||
var lastWeekDays = [
|
||
'[прошле] [недеље] [у] LT',
|
||
'[прошлог] [понедељка] [у] LT',
|
||
'[прошлог] [уторка] [у] LT',
|
||
'[прошле] [среде] [у] LT',
|
||
'[прошлог] [четвртка] [у] LT',
|
||
'[прошлог] [петка] [у] LT',
|
||
'[прошле] [суботе] [у] LT'
|
||
];
|
||
return lastWeekDays[this.day()];
|
||
},
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'за %s',
|
||
past : 'пре %s',
|
||
s : 'неколико секунди',
|
||
m : translator.translate,
|
||
mm : translator.translate,
|
||
h : translator.translate,
|
||
hh : translator.translate,
|
||
d : 'дан',
|
||
dd : translator.translate,
|
||
M : 'месец',
|
||
MM : translator.translate,
|
||
y : 'годину',
|
||
yy : translator.translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return srCyrl;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 128 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : siSwati [ss]
|
||
//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
|
||
var ss = moment.defineLocale('ss', {
|
||
months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
|
||
monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
|
||
weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
|
||
weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
|
||
weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'h:mm A',
|
||
LTS : 'h:mm:ss A',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY h:mm A',
|
||
LLLL : 'dddd, D MMMM YYYY h:mm A'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Namuhla nga] LT',
|
||
nextDay : '[Kusasa nga] LT',
|
||
nextWeek : 'dddd [nga] LT',
|
||
lastDay : '[Itolo nga] LT',
|
||
lastWeek : 'dddd [leliphelile] [nga] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'nga %s',
|
||
past : 'wenteka nga %s',
|
||
s : 'emizuzwana lomcane',
|
||
m : 'umzuzu',
|
||
mm : '%d emizuzu',
|
||
h : 'lihora',
|
||
hh : '%d emahora',
|
||
d : 'lilanga',
|
||
dd : '%d emalanga',
|
||
M : 'inyanga',
|
||
MM : '%d tinyanga',
|
||
y : 'umnyaka',
|
||
yy : '%d iminyaka'
|
||
},
|
||
meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours < 11) {
|
||
return 'ekuseni';
|
||
} else if (hours < 15) {
|
||
return 'emini';
|
||
} else if (hours < 19) {
|
||
return 'entsambama';
|
||
} else {
|
||
return 'ebusuku';
|
||
}
|
||
},
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'ekuseni') {
|
||
return hour;
|
||
} else if (meridiem === 'emini') {
|
||
return hour >= 11 ? hour : hour + 12;
|
||
} else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
|
||
if (hour === 0) {
|
||
return 0;
|
||
}
|
||
return hour + 12;
|
||
}
|
||
},
|
||
ordinalParse: /\d{1,2}/,
|
||
ordinal : '%d',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return ss;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 129 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Swedish [sv]
|
||
//! author : Jens Alm : https://github.com/ulmus
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var sv = moment.defineLocale('sv', {
|
||
months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
|
||
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
|
||
weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
|
||
weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
|
||
weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'YYYY-MM-DD',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY [kl.] HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',
|
||
lll : 'D MMM YYYY HH:mm',
|
||
llll : 'ddd D MMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Idag] LT',
|
||
nextDay: '[Imorgon] LT',
|
||
lastDay: '[Igår] LT',
|
||
nextWeek: '[På] dddd LT',
|
||
lastWeek: '[I] dddd[s] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'om %s',
|
||
past : 'för %s sedan',
|
||
s : 'några sekunder',
|
||
m : 'en minut',
|
||
mm : '%d minuter',
|
||
h : 'en timme',
|
||
hh : '%d timmar',
|
||
d : 'en dag',
|
||
dd : '%d dagar',
|
||
M : 'en månad',
|
||
MM : '%d månader',
|
||
y : 'ett år',
|
||
yy : '%d år'
|
||
},
|
||
ordinalParse: /\d{1,2}(e|a)/,
|
||
ordinal : function (number) {
|
||
var b = number % 10,
|
||
output = (~~(number % 100 / 10) === 1) ? 'e' :
|
||
(b === 1) ? 'a' :
|
||
(b === 2) ? 'a' :
|
||
(b === 3) ? 'e' : 'e';
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return sv;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 130 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Swahili [sw]
|
||
//! author : Fahad Kassim : https://github.com/fadsel
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var sw = moment.defineLocale('sw', {
|
||
months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
|
||
monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
|
||
weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
|
||
weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
|
||
weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[leo saa] LT',
|
||
nextDay : '[kesho saa] LT',
|
||
nextWeek : '[wiki ijayo] dddd [saat] LT',
|
||
lastDay : '[jana] LT',
|
||
lastWeek : '[wiki iliyopita] dddd [saat] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s baadaye',
|
||
past : 'tokea %s',
|
||
s : 'hivi punde',
|
||
m : 'dakika moja',
|
||
mm : 'dakika %d',
|
||
h : 'saa limoja',
|
||
hh : 'masaa %d',
|
||
d : 'siku moja',
|
||
dd : 'masiku %d',
|
||
M : 'mwezi mmoja',
|
||
MM : 'miezi %d',
|
||
y : 'mwaka mmoja',
|
||
yy : 'miaka %d'
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return sw;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 131 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Tamil [ta]
|
||
//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var symbolMap = {
|
||
'1': '௧',
|
||
'2': '௨',
|
||
'3': '௩',
|
||
'4': '௪',
|
||
'5': '௫',
|
||
'6': '௬',
|
||
'7': '௭',
|
||
'8': '௮',
|
||
'9': '௯',
|
||
'0': '௦'
|
||
};
|
||
var numberMap = {
|
||
'௧': '1',
|
||
'௨': '2',
|
||
'௩': '3',
|
||
'௪': '4',
|
||
'௫': '5',
|
||
'௬': '6',
|
||
'௭': '7',
|
||
'௮': '8',
|
||
'௯': '9',
|
||
'௦': '0'
|
||
};
|
||
|
||
var ta = moment.defineLocale('ta', {
|
||
months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
|
||
monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
|
||
weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
|
||
weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
|
||
weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY, HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY, HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[இன்று] LT',
|
||
nextDay : '[நாளை] LT',
|
||
nextWeek : 'dddd, LT',
|
||
lastDay : '[நேற்று] LT',
|
||
lastWeek : '[கடந்த வாரம்] dddd, LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s இல்',
|
||
past : '%s முன்',
|
||
s : 'ஒரு சில விநாடிகள்',
|
||
m : 'ஒரு நிமிடம்',
|
||
mm : '%d நிமிடங்கள்',
|
||
h : 'ஒரு மணி நேரம்',
|
||
hh : '%d மணி நேரம்',
|
||
d : 'ஒரு நாள்',
|
||
dd : '%d நாட்கள்',
|
||
M : 'ஒரு மாதம்',
|
||
MM : '%d மாதங்கள்',
|
||
y : 'ஒரு வருடம்',
|
||
yy : '%d ஆண்டுகள்'
|
||
},
|
||
ordinalParse: /\d{1,2}வது/,
|
||
ordinal : function (number) {
|
||
return number + 'வது';
|
||
},
|
||
preparse: function (string) {
|
||
return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
|
||
return numberMap[match];
|
||
});
|
||
},
|
||
postformat: function (string) {
|
||
return string.replace(/\d/g, function (match) {
|
||
return symbolMap[match];
|
||
});
|
||
},
|
||
// refer http://ta.wikipedia.org/s/1er1
|
||
meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 2) {
|
||
return ' யாமம்';
|
||
} else if (hour < 6) {
|
||
return ' வைகறை'; // வைகறை
|
||
} else if (hour < 10) {
|
||
return ' காலை'; // காலை
|
||
} else if (hour < 14) {
|
||
return ' நண்பகல்'; // நண்பகல்
|
||
} else if (hour < 18) {
|
||
return ' எற்பாடு'; // எற்பாடு
|
||
} else if (hour < 22) {
|
||
return ' மாலை'; // மாலை
|
||
} else {
|
||
return ' யாமம்';
|
||
}
|
||
},
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'யாமம்') {
|
||
return hour < 2 ? hour : hour + 12;
|
||
} else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
|
||
return hour;
|
||
} else if (meridiem === 'நண்பகல்') {
|
||
return hour >= 10 ? hour : hour + 12;
|
||
} else {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return ta;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 132 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Telugu [te]
|
||
//! author : Krishna Chaitanya Thota : https://github.com/kcthota
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var te = moment.defineLocale('te', {
|
||
months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
|
||
monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
|
||
weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
|
||
weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'A h:mm',
|
||
LTS : 'A h:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY, A h:mm',
|
||
LLLL : 'dddd, D MMMM YYYY, A h:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[నేడు] LT',
|
||
nextDay : '[రేపు] LT',
|
||
nextWeek : 'dddd, LT',
|
||
lastDay : '[నిన్న] LT',
|
||
lastWeek : '[గత] dddd, LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s లో',
|
||
past : '%s క్రితం',
|
||
s : 'కొన్ని క్షణాలు',
|
||
m : 'ఒక నిమిషం',
|
||
mm : '%d నిమిషాలు',
|
||
h : 'ఒక గంట',
|
||
hh : '%d గంటలు',
|
||
d : 'ఒక రోజు',
|
||
dd : '%d రోజులు',
|
||
M : 'ఒక నెల',
|
||
MM : '%d నెలలు',
|
||
y : 'ఒక సంవత్సరం',
|
||
yy : '%d సంవత్సరాలు'
|
||
},
|
||
ordinalParse : /\d{1,2}వ/,
|
||
ordinal : '%dవ',
|
||
meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === 'రాత్రి') {
|
||
return hour < 4 ? hour : hour + 12;
|
||
} else if (meridiem === 'ఉదయం') {
|
||
return hour;
|
||
} else if (meridiem === 'మధ్యాహ్నం') {
|
||
return hour >= 10 ? hour : hour + 12;
|
||
} else if (meridiem === 'సాయంత్రం') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'రాత్రి';
|
||
} else if (hour < 10) {
|
||
return 'ఉదయం';
|
||
} else if (hour < 17) {
|
||
return 'మధ్యాహ్నం';
|
||
} else if (hour < 20) {
|
||
return 'సాయంత్రం';
|
||
} else {
|
||
return 'రాత్రి';
|
||
}
|
||
},
|
||
week : {
|
||
dow : 0, // Sunday is the first day of the week.
|
||
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return te;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 133 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Tetun Dili (East Timor) [tet]
|
||
//! author : Joshua Brooks : https://github.com/joshbrooks
|
||
//! author : Onorio De J. Afonso : https://github.com/marobo
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var tet = moment.defineLocale('tet', {
|
||
months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),
|
||
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'),
|
||
weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'),
|
||
weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'),
|
||
weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Ohin iha] LT',
|
||
nextDay: '[Aban iha] LT',
|
||
nextWeek: 'dddd [iha] LT',
|
||
lastDay: '[Horiseik iha] LT',
|
||
lastWeek: 'dddd [semana kotuk] [iha] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'iha %s',
|
||
past : '%s liuba',
|
||
s : 'minutu balun',
|
||
m : 'minutu ida',
|
||
mm : 'minutus %d',
|
||
h : 'horas ida',
|
||
hh : 'horas %d',
|
||
d : 'loron ida',
|
||
dd : 'loron %d',
|
||
M : 'fulan ida',
|
||
MM : 'fulan %d',
|
||
y : 'tinan ida',
|
||
yy : 'tinan %d'
|
||
},
|
||
ordinalParse: /\d{1,2}(st|nd|rd|th)/,
|
||
ordinal : function (number) {
|
||
var b = number % 10,
|
||
output = (~~(number % 100 / 10) === 1) ? 'th' :
|
||
(b === 1) ? 'st' :
|
||
(b === 2) ? 'nd' :
|
||
(b === 3) ? 'rd' : 'th';
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return tet;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 134 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Thai [th]
|
||
//! author : Kridsada Thanabulpong : https://github.com/sirn
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var th = moment.defineLocale('th', {
|
||
months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
|
||
monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
|
||
monthsParseExact: true,
|
||
weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
|
||
weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
|
||
weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'H:mm',
|
||
LTS : 'H:mm:ss',
|
||
L : 'YYYY/MM/DD',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY เวลา H:mm',
|
||
LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'
|
||
},
|
||
meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
|
||
isPM: function (input) {
|
||
return input === 'หลังเที่ยง';
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 12) {
|
||
return 'ก่อนเที่ยง';
|
||
} else {
|
||
return 'หลังเที่ยง';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[วันนี้ เวลา] LT',
|
||
nextDay : '[พรุ่งนี้ เวลา] LT',
|
||
nextWeek : 'dddd[หน้า เวลา] LT',
|
||
lastDay : '[เมื่อวานนี้ เวลา] LT',
|
||
lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'อีก %s',
|
||
past : '%sที่แล้ว',
|
||
s : 'ไม่กี่วินาที',
|
||
m : '1 นาที',
|
||
mm : '%d นาที',
|
||
h : '1 ชั่วโมง',
|
||
hh : '%d ชั่วโมง',
|
||
d : '1 วัน',
|
||
dd : '%d วัน',
|
||
M : '1 เดือน',
|
||
MM : '%d เดือน',
|
||
y : '1 ปี',
|
||
yy : '%d ปี'
|
||
}
|
||
});
|
||
|
||
return th;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 135 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Tagalog (Philippines) [tl-ph]
|
||
//! author : Dan Hagman : https://github.com/hagmandan
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var tlPh = moment.defineLocale('tl-ph', {
|
||
months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
|
||
monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
|
||
weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
|
||
weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
|
||
weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'MM/D/YYYY',
|
||
LL : 'MMMM D, YYYY',
|
||
LLL : 'MMMM D, YYYY HH:mm',
|
||
LLLL : 'dddd, MMMM DD, YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: 'LT [ngayong araw]',
|
||
nextDay: '[Bukas ng] LT',
|
||
nextWeek: 'LT [sa susunod na] dddd',
|
||
lastDay: 'LT [kahapon]',
|
||
lastWeek: 'LT [noong nakaraang] dddd',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'sa loob ng %s',
|
||
past : '%s ang nakalipas',
|
||
s : 'ilang segundo',
|
||
m : 'isang minuto',
|
||
mm : '%d minuto',
|
||
h : 'isang oras',
|
||
hh : '%d oras',
|
||
d : 'isang araw',
|
||
dd : '%d araw',
|
||
M : 'isang buwan',
|
||
MM : '%d buwan',
|
||
y : 'isang taon',
|
||
yy : '%d taon'
|
||
},
|
||
ordinalParse: /\d{1,2}/,
|
||
ordinal : function (number) {
|
||
return number;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return tlPh;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 136 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Klingon [tlh]
|
||
//! author : Dominika Kruk : https://github.com/amaranthrose
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
|
||
|
||
function translateFuture(output) {
|
||
var time = output;
|
||
time = (output.indexOf('jaj') !== -1) ?
|
||
time.slice(0, -3) + 'leS' :
|
||
(output.indexOf('jar') !== -1) ?
|
||
time.slice(0, -3) + 'waQ' :
|
||
(output.indexOf('DIS') !== -1) ?
|
||
time.slice(0, -3) + 'nem' :
|
||
time + ' pIq';
|
||
return time;
|
||
}
|
||
|
||
function translatePast(output) {
|
||
var time = output;
|
||
time = (output.indexOf('jaj') !== -1) ?
|
||
time.slice(0, -3) + 'Hu’' :
|
||
(output.indexOf('jar') !== -1) ?
|
||
time.slice(0, -3) + 'wen' :
|
||
(output.indexOf('DIS') !== -1) ?
|
||
time.slice(0, -3) + 'ben' :
|
||
time + ' ret';
|
||
return time;
|
||
}
|
||
|
||
function translate(number, withoutSuffix, string, isFuture) {
|
||
var numberNoun = numberAsNoun(number);
|
||
switch (string) {
|
||
case 'mm':
|
||
return numberNoun + ' tup';
|
||
case 'hh':
|
||
return numberNoun + ' rep';
|
||
case 'dd':
|
||
return numberNoun + ' jaj';
|
||
case 'MM':
|
||
return numberNoun + ' jar';
|
||
case 'yy':
|
||
return numberNoun + ' DIS';
|
||
}
|
||
}
|
||
|
||
function numberAsNoun(number) {
|
||
var hundred = Math.floor((number % 1000) / 100),
|
||
ten = Math.floor((number % 100) / 10),
|
||
one = number % 10,
|
||
word = '';
|
||
if (hundred > 0) {
|
||
word += numbersNouns[hundred] + 'vatlh';
|
||
}
|
||
if (ten > 0) {
|
||
word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';
|
||
}
|
||
if (one > 0) {
|
||
word += ((word !== '') ? ' ' : '') + numbersNouns[one];
|
||
}
|
||
return (word === '') ? 'pagh' : word;
|
||
}
|
||
|
||
var tlh = moment.defineLocale('tlh', {
|
||
months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
|
||
monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
|
||
weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
|
||
weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[DaHjaj] LT',
|
||
nextDay: '[wa’leS] LT',
|
||
nextWeek: 'LLL',
|
||
lastDay: '[wa’Hu’] LT',
|
||
lastWeek: 'LLL',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : translateFuture,
|
||
past : translatePast,
|
||
s : 'puS lup',
|
||
m : 'wa’ tup',
|
||
mm : translate,
|
||
h : 'wa’ rep',
|
||
hh : translate,
|
||
d : 'wa’ jaj',
|
||
dd : translate,
|
||
M : 'wa’ jar',
|
||
MM : translate,
|
||
y : 'wa’ DIS',
|
||
yy : translate
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return tlh;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 137 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Turkish [tr]
|
||
//! authors : Erhan Gundogan : https://github.com/erhangundogan,
|
||
//! Burak Yiğit Kaya: https://github.com/BYK
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var suffixes = {
|
||
1: '\'inci',
|
||
5: '\'inci',
|
||
8: '\'inci',
|
||
70: '\'inci',
|
||
80: '\'inci',
|
||
2: '\'nci',
|
||
7: '\'nci',
|
||
20: '\'nci',
|
||
50: '\'nci',
|
||
3: '\'üncü',
|
||
4: '\'üncü',
|
||
100: '\'üncü',
|
||
6: '\'ncı',
|
||
9: '\'uncu',
|
||
10: '\'uncu',
|
||
30: '\'uncu',
|
||
60: '\'ıncı',
|
||
90: '\'ıncı'
|
||
};
|
||
|
||
var tr = moment.defineLocale('tr', {
|
||
months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
|
||
monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
|
||
weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
|
||
weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
|
||
weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[bugün saat] LT',
|
||
nextDay : '[yarın saat] LT',
|
||
nextWeek : '[haftaya] dddd [saat] LT',
|
||
lastDay : '[dün] LT',
|
||
lastWeek : '[geçen hafta] dddd [saat] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s sonra',
|
||
past : '%s önce',
|
||
s : 'birkaç saniye',
|
||
m : 'bir dakika',
|
||
mm : '%d dakika',
|
||
h : 'bir saat',
|
||
hh : '%d saat',
|
||
d : 'bir gün',
|
||
dd : '%d gün',
|
||
M : 'bir ay',
|
||
MM : '%d ay',
|
||
y : 'bir yıl',
|
||
yy : '%d yıl'
|
||
},
|
||
ordinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,
|
||
ordinal : function (number) {
|
||
if (number === 0) { // special case for zero
|
||
return number + '\'ıncı';
|
||
}
|
||
var a = number % 10,
|
||
b = number % 100 - a,
|
||
c = number >= 100 ? 100 : null;
|
||
return number + (suffixes[a] || suffixes[b] || suffixes[c]);
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return tr;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 138 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Talossan [tzl]
|
||
//! author : Robin van der Vliet : https://github.com/robin0van0der0v
|
||
//! author : Iustì Canun
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
|
||
// This is currently too difficult (maybe even impossible) to add.
|
||
var tzl = moment.defineLocale('tzl', {
|
||
months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
|
||
monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
|
||
weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
|
||
weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
|
||
weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH.mm',
|
||
LTS : 'HH.mm.ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D. MMMM [dallas] YYYY',
|
||
LLL : 'D. MMMM [dallas] YYYY HH.mm',
|
||
LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
|
||
},
|
||
meridiemParse: /d\'o|d\'a/i,
|
||
isPM : function (input) {
|
||
return 'd\'o' === input.toLowerCase();
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours > 11) {
|
||
return isLower ? 'd\'o' : 'D\'O';
|
||
} else {
|
||
return isLower ? 'd\'a' : 'D\'A';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[oxhi à] LT',
|
||
nextDay : '[demà à] LT',
|
||
nextWeek : 'dddd [à] LT',
|
||
lastDay : '[ieiri à] LT',
|
||
lastWeek : '[sür el] dddd [lasteu à] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'osprei %s',
|
||
past : 'ja%s',
|
||
s : processRelativeTime,
|
||
m : processRelativeTime,
|
||
mm : processRelativeTime,
|
||
h : processRelativeTime,
|
||
hh : processRelativeTime,
|
||
d : processRelativeTime,
|
||
dd : processRelativeTime,
|
||
M : processRelativeTime,
|
||
MM : processRelativeTime,
|
||
y : processRelativeTime,
|
||
yy : processRelativeTime
|
||
},
|
||
ordinalParse: /\d{1,2}\./,
|
||
ordinal : '%d.',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
function processRelativeTime(number, withoutSuffix, key, isFuture) {
|
||
var format = {
|
||
's': ['viensas secunds', '\'iensas secunds'],
|
||
'm': ['\'n míut', '\'iens míut'],
|
||
'mm': [number + ' míuts', '' + number + ' míuts'],
|
||
'h': ['\'n þora', '\'iensa þora'],
|
||
'hh': [number + ' þoras', '' + number + ' þoras'],
|
||
'd': ['\'n ziua', '\'iensa ziua'],
|
||
'dd': [number + ' ziuas', '' + number + ' ziuas'],
|
||
'M': ['\'n mes', '\'iens mes'],
|
||
'MM': [number + ' mesen', '' + number + ' mesen'],
|
||
'y': ['\'n ar', '\'iens ar'],
|
||
'yy': [number + ' ars', '' + number + ' ars']
|
||
};
|
||
return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);
|
||
}
|
||
|
||
return tzl;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 139 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Central Atlas Tamazight [tzm]
|
||
//! author : Abdel Said : https://github.com/abdelsaid
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var tzm = moment.defineLocale('tzm', {
|
||
months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
|
||
monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
|
||
weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
|
||
weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
|
||
weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS: 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
|
||
nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
|
||
nextWeek: 'dddd [ⴴ] LT',
|
||
lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
|
||
lastWeek: 'dddd [ⴴ] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
|
||
past : 'ⵢⴰⵏ %s',
|
||
s : 'ⵉⵎⵉⴽ',
|
||
m : 'ⵎⵉⵏⵓⴺ',
|
||
mm : '%d ⵎⵉⵏⵓⴺ',
|
||
h : 'ⵙⴰⵄⴰ',
|
||
hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
|
||
d : 'ⴰⵙⵙ',
|
||
dd : '%d oⵙⵙⴰⵏ',
|
||
M : 'ⴰⵢoⵓⵔ',
|
||
MM : '%d ⵉⵢⵢⵉⵔⵏ',
|
||
y : 'ⴰⵙⴳⴰⵙ',
|
||
yy : '%d ⵉⵙⴳⴰⵙⵏ'
|
||
},
|
||
week : {
|
||
dow : 6, // Saturday is the first day of the week.
|
||
doy : 12 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return tzm;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 140 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Central Atlas Tamazight Latin [tzm-latn]
|
||
//! author : Abdel Said : https://github.com/abdelsaid
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var tzmLatn = moment.defineLocale('tzm-latn', {
|
||
months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
|
||
monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
|
||
weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
|
||
weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
|
||
weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[asdkh g] LT',
|
||
nextDay: '[aska g] LT',
|
||
nextWeek: 'dddd [g] LT',
|
||
lastDay: '[assant g] LT',
|
||
lastWeek: 'dddd [g] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'dadkh s yan %s',
|
||
past : 'yan %s',
|
||
s : 'imik',
|
||
m : 'minuḍ',
|
||
mm : '%d minuḍ',
|
||
h : 'saɛa',
|
||
hh : '%d tassaɛin',
|
||
d : 'ass',
|
||
dd : '%d ossan',
|
||
M : 'ayowr',
|
||
MM : '%d iyyirn',
|
||
y : 'asgas',
|
||
yy : '%d isgasn'
|
||
},
|
||
week : {
|
||
dow : 6, // Saturday is the first day of the week.
|
||
doy : 12 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return tzmLatn;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 141 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Ukrainian [uk]
|
||
//! author : zemlanin : https://github.com/zemlanin
|
||
//! Author : Menelion Elensúle : https://github.com/Oire
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
function plural(word, num) {
|
||
var forms = word.split('_');
|
||
return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
|
||
}
|
||
function relativeTimeWithPlural(number, withoutSuffix, key) {
|
||
var format = {
|
||
'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
|
||
'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
|
||
'dd': 'день_дні_днів',
|
||
'MM': 'місяць_місяці_місяців',
|
||
'yy': 'рік_роки_років'
|
||
};
|
||
if (key === 'm') {
|
||
return withoutSuffix ? 'хвилина' : 'хвилину';
|
||
}
|
||
else if (key === 'h') {
|
||
return withoutSuffix ? 'година' : 'годину';
|
||
}
|
||
else {
|
||
return number + ' ' + plural(format[key], +number);
|
||
}
|
||
}
|
||
function weekdaysCaseReplace(m, format) {
|
||
var weekdays = {
|
||
'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
|
||
'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
|
||
'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
|
||
},
|
||
nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
|
||
'accusative' :
|
||
((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
|
||
'genitive' :
|
||
'nominative');
|
||
return weekdays[nounCase][m.day()];
|
||
}
|
||
function processHoursFunction(str) {
|
||
return function () {
|
||
return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
|
||
};
|
||
}
|
||
|
||
var uk = moment.defineLocale('uk', {
|
||
months : {
|
||
'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
|
||
'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
|
||
},
|
||
monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
|
||
weekdays : weekdaysCaseReplace,
|
||
weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
|
||
weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD.MM.YYYY',
|
||
LL : 'D MMMM YYYY р.',
|
||
LLL : 'D MMMM YYYY р., HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY р., HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: processHoursFunction('[Сьогодні '),
|
||
nextDay: processHoursFunction('[Завтра '),
|
||
lastDay: processHoursFunction('[Вчора '),
|
||
nextWeek: processHoursFunction('[У] dddd ['),
|
||
lastWeek: function () {
|
||
switch (this.day()) {
|
||
case 0:
|
||
case 3:
|
||
case 5:
|
||
case 6:
|
||
return processHoursFunction('[Минулої] dddd [').call(this);
|
||
case 1:
|
||
case 2:
|
||
case 4:
|
||
return processHoursFunction('[Минулого] dddd [').call(this);
|
||
}
|
||
},
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'за %s',
|
||
past : '%s тому',
|
||
s : 'декілька секунд',
|
||
m : relativeTimeWithPlural,
|
||
mm : relativeTimeWithPlural,
|
||
h : 'годину',
|
||
hh : relativeTimeWithPlural,
|
||
d : 'день',
|
||
dd : relativeTimeWithPlural,
|
||
M : 'місяць',
|
||
MM : relativeTimeWithPlural,
|
||
y : 'рік',
|
||
yy : relativeTimeWithPlural
|
||
},
|
||
// M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
|
||
meridiemParse: /ночі|ранку|дня|вечора/,
|
||
isPM: function (input) {
|
||
return /^(дня|вечора)$/.test(input);
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
if (hour < 4) {
|
||
return 'ночі';
|
||
} else if (hour < 12) {
|
||
return 'ранку';
|
||
} else if (hour < 17) {
|
||
return 'дня';
|
||
} else {
|
||
return 'вечора';
|
||
}
|
||
},
|
||
ordinalParse: /\d{1,2}-(й|го)/,
|
||
ordinal: function (number, period) {
|
||
switch (period) {
|
||
case 'M':
|
||
case 'd':
|
||
case 'DDD':
|
||
case 'w':
|
||
case 'W':
|
||
return number + '-й';
|
||
case 'D':
|
||
return number + '-го';
|
||
default:
|
||
return number;
|
||
}
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return uk;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 142 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Uzbek [uz]
|
||
//! author : Sardor Muminov : https://github.com/muminoff
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var uz = moment.defineLocale('uz', {
|
||
months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
|
||
monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
|
||
weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
|
||
weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
|
||
weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'D MMMM YYYY, dddd HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Бугун соат] LT [да]',
|
||
nextDay : '[Эртага] LT [да]',
|
||
nextWeek : 'dddd [куни соат] LT [да]',
|
||
lastDay : '[Кеча соат] LT [да]',
|
||
lastWeek : '[Утган] dddd [куни соат] LT [да]',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'Якин %s ичида',
|
||
past : 'Бир неча %s олдин',
|
||
s : 'фурсат',
|
||
m : 'бир дакика',
|
||
mm : '%d дакика',
|
||
h : 'бир соат',
|
||
hh : '%d соат',
|
||
d : 'бир кун',
|
||
dd : '%d кун',
|
||
M : 'бир ой',
|
||
MM : '%d ой',
|
||
y : 'бир йил',
|
||
yy : '%d йил'
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 7 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return uz;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 143 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Vietnamese [vi]
|
||
//! author : Bang Nguyen : https://github.com/bangnk
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var vi = moment.defineLocale('vi', {
|
||
months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
|
||
monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
|
||
weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
|
||
weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
|
||
weekdaysParseExact : true,
|
||
meridiemParse: /sa|ch/i,
|
||
isPM : function (input) {
|
||
return /^ch$/i.test(input);
|
||
},
|
||
meridiem : function (hours, minutes, isLower) {
|
||
if (hours < 12) {
|
||
return isLower ? 'sa' : 'SA';
|
||
} else {
|
||
return isLower ? 'ch' : 'CH';
|
||
}
|
||
},
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
LTS : 'HH:mm:ss',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM [năm] YYYY',
|
||
LLL : 'D MMMM [năm] YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',
|
||
l : 'DD/M/YYYY',
|
||
ll : 'D MMM YYYY',
|
||
lll : 'D MMM YYYY HH:mm',
|
||
llll : 'ddd, D MMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay: '[Hôm nay lúc] LT',
|
||
nextDay: '[Ngày mai lúc] LT',
|
||
nextWeek: 'dddd [tuần tới lúc] LT',
|
||
lastDay: '[Hôm qua lúc] LT',
|
||
lastWeek: 'dddd [tuần rồi lúc] LT',
|
||
sameElse: 'L'
|
||
},
|
||
relativeTime : {
|
||
future : '%s tới',
|
||
past : '%s trước',
|
||
s : 'vài giây',
|
||
m : 'một phút',
|
||
mm : '%d phút',
|
||
h : 'một giờ',
|
||
hh : '%d giờ',
|
||
d : 'một ngày',
|
||
dd : '%d ngày',
|
||
M : 'một tháng',
|
||
MM : '%d tháng',
|
||
y : 'một năm',
|
||
yy : '%d năm'
|
||
},
|
||
ordinalParse: /\d{1,2}/,
|
||
ordinal : function (number) {
|
||
return number;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return vi;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 144 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Pseudo [x-pseudo]
|
||
//! author : Andrew Hood : https://github.com/andrewhood125
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var xPseudo = moment.defineLocale('x-pseudo', {
|
||
months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
|
||
monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),
|
||
monthsParseExact : true,
|
||
weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
|
||
weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
|
||
weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
|
||
weekdaysParseExact : true,
|
||
longDateFormat : {
|
||
LT : 'HH:mm',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY HH:mm',
|
||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||
},
|
||
calendar : {
|
||
sameDay : '[T~ódá~ý át] LT',
|
||
nextDay : '[T~ómó~rró~w át] LT',
|
||
nextWeek : 'dddd [át] LT',
|
||
lastDay : '[Ý~ést~érdá~ý át] LT',
|
||
lastWeek : '[L~ást] dddd [át] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'í~ñ %s',
|
||
past : '%s á~gó',
|
||
s : 'á ~féw ~sécó~ñds',
|
||
m : 'á ~míñ~úté',
|
||
mm : '%d m~íñú~tés',
|
||
h : 'á~ñ hó~úr',
|
||
hh : '%d h~óúrs',
|
||
d : 'á ~dáý',
|
||
dd : '%d d~áýs',
|
||
M : 'á ~móñ~th',
|
||
MM : '%d m~óñt~hs',
|
||
y : 'á ~ýéár',
|
||
yy : '%d ý~éárs'
|
||
},
|
||
ordinalParse: /\d{1,2}(th|st|nd|rd)/,
|
||
ordinal : function (number) {
|
||
var b = number % 10,
|
||
output = (~~(number % 100 / 10) === 1) ? 'th' :
|
||
(b === 1) ? 'st' :
|
||
(b === 2) ? 'nd' :
|
||
(b === 3) ? 'rd' : 'th';
|
||
return number + output;
|
||
},
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return xPseudo;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 145 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Yoruba Nigeria [yo]
|
||
//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var yo = moment.defineLocale('yo', {
|
||
months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),
|
||
monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
|
||
weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
|
||
weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
|
||
weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'h:mm A',
|
||
LTS : 'h:mm:ss A',
|
||
L : 'DD/MM/YYYY',
|
||
LL : 'D MMMM YYYY',
|
||
LLL : 'D MMMM YYYY h:mm A',
|
||
LLLL : 'dddd, D MMMM YYYY h:mm A'
|
||
},
|
||
calendar : {
|
||
sameDay : '[Ònì ni] LT',
|
||
nextDay : '[Ọ̀la ni] LT',
|
||
nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT',
|
||
lastDay : '[Àna ni] LT',
|
||
lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
|
||
sameElse : 'L'
|
||
},
|
||
relativeTime : {
|
||
future : 'ní %s',
|
||
past : '%s kọjá',
|
||
s : 'ìsẹjú aayá die',
|
||
m : 'ìsẹjú kan',
|
||
mm : 'ìsẹjú %d',
|
||
h : 'wákati kan',
|
||
hh : 'wákati %d',
|
||
d : 'ọjọ́ kan',
|
||
dd : 'ọjọ́ %d',
|
||
M : 'osù kan',
|
||
MM : 'osù %d',
|
||
y : 'ọdún kan',
|
||
yy : 'ọdún %d'
|
||
},
|
||
ordinalParse : /ọjọ́\s\d{1,2}/,
|
||
ordinal : 'ọjọ́ %d',
|
||
week : {
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return yo;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 146 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Chinese (China) [zh-cn]
|
||
//! author : suupic : https://github.com/suupic
|
||
//! author : Zeno Zeng : https://github.com/zenozeng
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var zhCn = moment.defineLocale('zh-cn', {
|
||
months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
|
||
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
|
||
weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
|
||
weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),
|
||
weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'Ah点mm分',
|
||
LTS : 'Ah点m分s秒',
|
||
L : 'YYYY-MM-DD',
|
||
LL : 'YYYY年MMMD日',
|
||
LLL : 'YYYY年MMMD日Ah点mm分',
|
||
LLLL : 'YYYY年MMMD日ddddAh点mm分',
|
||
l : 'YYYY-MM-DD',
|
||
ll : 'YYYY年MMMD日',
|
||
lll : 'YYYY年MMMD日Ah点mm分',
|
||
llll : 'YYYY年MMMD日ddddAh点mm分'
|
||
},
|
||
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
|
||
meridiemHour: function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === '凌晨' || meridiem === '早上' ||
|
||
meridiem === '上午') {
|
||
return hour;
|
||
} else if (meridiem === '下午' || meridiem === '晚上') {
|
||
return hour + 12;
|
||
} else {
|
||
// '中午'
|
||
return hour >= 11 ? hour : hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
var hm = hour * 100 + minute;
|
||
if (hm < 600) {
|
||
return '凌晨';
|
||
} else if (hm < 900) {
|
||
return '早上';
|
||
} else if (hm < 1130) {
|
||
return '上午';
|
||
} else if (hm < 1230) {
|
||
return '中午';
|
||
} else if (hm < 1800) {
|
||
return '下午';
|
||
} else {
|
||
return '晚上';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : function () {
|
||
return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
|
||
},
|
||
nextDay : function () {
|
||
return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
|
||
},
|
||
lastDay : function () {
|
||
return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
|
||
},
|
||
nextWeek : function () {
|
||
var startOfWeek, prefix;
|
||
startOfWeek = moment().startOf('week');
|
||
prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]';
|
||
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
||
},
|
||
lastWeek : function () {
|
||
var startOfWeek, prefix;
|
||
startOfWeek = moment().startOf('week');
|
||
prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
|
||
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
||
},
|
||
sameElse : 'LL'
|
||
},
|
||
ordinalParse: /\d{1,2}(日|月|周)/,
|
||
ordinal : function (number, period) {
|
||
switch (period) {
|
||
case 'd':
|
||
case 'D':
|
||
case 'DDD':
|
||
return number + '日';
|
||
case 'M':
|
||
return number + '月';
|
||
case 'w':
|
||
case 'W':
|
||
return number + '周';
|
||
default:
|
||
return number;
|
||
}
|
||
},
|
||
relativeTime : {
|
||
future : '%s内',
|
||
past : '%s前',
|
||
s : '几秒',
|
||
m : '1 分钟',
|
||
mm : '%d 分钟',
|
||
h : '1 小时',
|
||
hh : '%d 小时',
|
||
d : '1 天',
|
||
dd : '%d 天',
|
||
M : '1 个月',
|
||
MM : '%d 个月',
|
||
y : '1 年',
|
||
yy : '%d 年'
|
||
},
|
||
week : {
|
||
// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
|
||
dow : 1, // Monday is the first day of the week.
|
||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||
}
|
||
});
|
||
|
||
return zhCn;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 147 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Chinese (Hong Kong) [zh-hk]
|
||
//! author : Ben : https://github.com/ben-lin
|
||
//! author : Chris Lam : https://github.com/hehachris
|
||
//! author : Konstantin : https://github.com/skfd
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var zhHk = moment.defineLocale('zh-hk', {
|
||
months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
|
||
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
|
||
weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
|
||
weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
|
||
weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'Ah點mm分',
|
||
LTS : 'Ah點m分s秒',
|
||
L : 'YYYY年MMMD日',
|
||
LL : 'YYYY年MMMD日',
|
||
LLL : 'YYYY年MMMD日Ah點mm分',
|
||
LLLL : 'YYYY年MMMD日ddddAh點mm分',
|
||
l : 'YYYY年MMMD日',
|
||
ll : 'YYYY年MMMD日',
|
||
lll : 'YYYY年MMMD日Ah點mm分',
|
||
llll : 'YYYY年MMMD日ddddAh點mm分'
|
||
},
|
||
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
|
||
return hour;
|
||
} else if (meridiem === '中午') {
|
||
return hour >= 11 ? hour : hour + 12;
|
||
} else if (meridiem === '下午' || meridiem === '晚上') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
var hm = hour * 100 + minute;
|
||
if (hm < 600) {
|
||
return '凌晨';
|
||
} else if (hm < 900) {
|
||
return '早上';
|
||
} else if (hm < 1130) {
|
||
return '上午';
|
||
} else if (hm < 1230) {
|
||
return '中午';
|
||
} else if (hm < 1800) {
|
||
return '下午';
|
||
} else {
|
||
return '晚上';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[今天]LT',
|
||
nextDay : '[明天]LT',
|
||
nextWeek : '[下]ddddLT',
|
||
lastDay : '[昨天]LT',
|
||
lastWeek : '[上]ddddLT',
|
||
sameElse : 'L'
|
||
},
|
||
ordinalParse: /\d{1,2}(日|月|週)/,
|
||
ordinal : function (number, period) {
|
||
switch (period) {
|
||
case 'd' :
|
||
case 'D' :
|
||
case 'DDD' :
|
||
return number + '日';
|
||
case 'M' :
|
||
return number + '月';
|
||
case 'w' :
|
||
case 'W' :
|
||
return number + '週';
|
||
default :
|
||
return number;
|
||
}
|
||
},
|
||
relativeTime : {
|
||
future : '%s內',
|
||
past : '%s前',
|
||
s : '幾秒',
|
||
m : '1 分鐘',
|
||
mm : '%d 分鐘',
|
||
h : '1 小時',
|
||
hh : '%d 小時',
|
||
d : '1 天',
|
||
dd : '%d 天',
|
||
M : '1 個月',
|
||
MM : '%d 個月',
|
||
y : '1 年',
|
||
yy : '%d 年'
|
||
}
|
||
});
|
||
|
||
return zhHk;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 148 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
//! moment.js locale configuration
|
||
//! locale : Chinese (Taiwan) [zh-tw]
|
||
//! author : Ben : https://github.com/ben-lin
|
||
//! author : Chris Lam : https://github.com/hehachris
|
||
|
||
;(function (global, factory) {
|
||
true ? factory(__webpack_require__(38)) :
|
||
typeof define === 'function' && define.amd ? define(['../moment'], factory) :
|
||
factory(global.moment)
|
||
}(this, (function (moment) { 'use strict';
|
||
|
||
|
||
var zhTw = moment.defineLocale('zh-tw', {
|
||
months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
|
||
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
|
||
weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
|
||
weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
|
||
weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
|
||
longDateFormat : {
|
||
LT : 'Ah點mm分',
|
||
LTS : 'Ah點m分s秒',
|
||
L : 'YYYY年MMMD日',
|
||
LL : 'YYYY年MMMD日',
|
||
LLL : 'YYYY年MMMD日Ah點mm分',
|
||
LLLL : 'YYYY年MMMD日ddddAh點mm分',
|
||
l : 'YYYY年MMMD日',
|
||
ll : 'YYYY年MMMD日',
|
||
lll : 'YYYY年MMMD日Ah點mm分',
|
||
llll : 'YYYY年MMMD日ddddAh點mm分'
|
||
},
|
||
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
|
||
meridiemHour : function (hour, meridiem) {
|
||
if (hour === 12) {
|
||
hour = 0;
|
||
}
|
||
if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
|
||
return hour;
|
||
} else if (meridiem === '中午') {
|
||
return hour >= 11 ? hour : hour + 12;
|
||
} else if (meridiem === '下午' || meridiem === '晚上') {
|
||
return hour + 12;
|
||
}
|
||
},
|
||
meridiem : function (hour, minute, isLower) {
|
||
var hm = hour * 100 + minute;
|
||
if (hm < 600) {
|
||
return '凌晨';
|
||
} else if (hm < 900) {
|
||
return '早上';
|
||
} else if (hm < 1130) {
|
||
return '上午';
|
||
} else if (hm < 1230) {
|
||
return '中午';
|
||
} else if (hm < 1800) {
|
||
return '下午';
|
||
} else {
|
||
return '晚上';
|
||
}
|
||
},
|
||
calendar : {
|
||
sameDay : '[今天]LT',
|
||
nextDay : '[明天]LT',
|
||
nextWeek : '[下]ddddLT',
|
||
lastDay : '[昨天]LT',
|
||
lastWeek : '[上]ddddLT',
|
||
sameElse : 'L'
|
||
},
|
||
ordinalParse: /\d{1,2}(日|月|週)/,
|
||
ordinal : function (number, period) {
|
||
switch (period) {
|
||
case 'd' :
|
||
case 'D' :
|
||
case 'DDD' :
|
||
return number + '日';
|
||
case 'M' :
|
||
return number + '月';
|
||
case 'w' :
|
||
case 'W' :
|
||
return number + '週';
|
||
default :
|
||
return number;
|
||
}
|
||
},
|
||
relativeTime : {
|
||
future : '%s內',
|
||
past : '%s前',
|
||
s : '幾秒',
|
||
m : '1 分鐘',
|
||
mm : '%d 分鐘',
|
||
h : '1 小時',
|
||
hh : '%d 小時',
|
||
d : '1 天',
|
||
dd : '%d 天',
|
||
M : '1 個月',
|
||
MM : '%d 個月',
|
||
y : '1 年',
|
||
yy : '%d 年'
|
||
}
|
||
});
|
||
|
||
return zhTw;
|
||
|
||
})));
|
||
|
||
|
||
/***/ },
|
||
/* 149 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.defaults.bar = {
|
||
hover: {
|
||
mode: 'label'
|
||
},
|
||
|
||
scales: {
|
||
xAxes: [{
|
||
type: 'category',
|
||
|
||
// Specific to Bar Controller
|
||
categoryPercentage: 0.8,
|
||
barPercentage: 0.9,
|
||
|
||
// grid line settings
|
||
gridLines: {
|
||
offsetGridLines: true
|
||
}
|
||
}],
|
||
yAxes: [{
|
||
type: 'linear'
|
||
}]
|
||
}
|
||
};
|
||
|
||
Chart.controllers.bar = Chart.DatasetController.extend({
|
||
|
||
dataElementType: Chart.elements.Rectangle,
|
||
|
||
initialize: function(chart, datasetIndex) {
|
||
Chart.DatasetController.prototype.initialize.call(this, chart, datasetIndex);
|
||
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var dataset = me.getDataset();
|
||
|
||
meta.stack = dataset.stack;
|
||
// Use this to indicate that this is a bar dataset.
|
||
meta.bar = true;
|
||
},
|
||
|
||
// Correctly calculate the bar width accounting for stacks and the fact that not all bars are visible
|
||
getStackCount: function() {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
|
||
var stacks = [];
|
||
helpers.each(me.chart.data.datasets, function(dataset, datasetIndex) {
|
||
var dsMeta = me.chart.getDatasetMeta(datasetIndex);
|
||
if (dsMeta.bar && me.chart.isDatasetVisible(datasetIndex) &&
|
||
(yScale.options.stacked === false ||
|
||
(yScale.options.stacked === true && stacks.indexOf(dsMeta.stack) === -1) ||
|
||
(yScale.options.stacked === undefined && (dsMeta.stack === undefined || stacks.indexOf(dsMeta.stack) === -1)))) {
|
||
stacks.push(dsMeta.stack);
|
||
}
|
||
}, me);
|
||
|
||
return stacks.length;
|
||
},
|
||
|
||
update: function(reset) {
|
||
var me = this;
|
||
helpers.each(me.getMeta().data, function(rectangle, index) {
|
||
me.updateElement(rectangle, index, reset);
|
||
}, me);
|
||
},
|
||
|
||
updateElement: function(rectangle, index, reset) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
var scaleBase = yScale.getBasePixel();
|
||
var rectangleElementOptions = me.chart.options.elements.rectangle;
|
||
var custom = rectangle.custom || {};
|
||
var dataset = me.getDataset();
|
||
|
||
rectangle._xScale = xScale;
|
||
rectangle._yScale = yScale;
|
||
rectangle._datasetIndex = me.index;
|
||
rectangle._index = index;
|
||
|
||
var ruler = me.getRuler(index); // The index argument for compatible
|
||
rectangle._model = {
|
||
x: me.calculateBarX(index, me.index, ruler),
|
||
y: reset ? scaleBase : me.calculateBarY(index, me.index),
|
||
|
||
// Tooltip
|
||
label: me.chart.data.labels[index],
|
||
datasetLabel: dataset.label,
|
||
|
||
// Appearance
|
||
horizontal: false,
|
||
base: reset ? scaleBase : me.calculateBarBase(me.index, index),
|
||
width: me.calculateBarWidth(ruler),
|
||
backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor),
|
||
borderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped,
|
||
borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor),
|
||
borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth)
|
||
};
|
||
|
||
rectangle.pivot();
|
||
},
|
||
|
||
calculateBarBase: function(datasetIndex, index) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
var base = yScale.getBaseValue();
|
||
var original = base;
|
||
|
||
if ((yScale.options.stacked === true) ||
|
||
(yScale.options.stacked === undefined && meta.stack !== undefined)) {
|
||
var chart = me.chart;
|
||
var datasets = chart.data.datasets;
|
||
var value = Number(datasets[datasetIndex].data[index]);
|
||
|
||
for (var i = 0; i < datasetIndex; i++) {
|
||
var currentDs = datasets[i];
|
||
var currentDsMeta = chart.getDatasetMeta(i);
|
||
if (currentDsMeta.bar && currentDsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i) &&
|
||
meta.stack === currentDsMeta.stack) {
|
||
var currentVal = Number(currentDs.data[index]);
|
||
base += value < 0 ? Math.min(currentVal, original) : Math.max(currentVal, original);
|
||
}
|
||
}
|
||
|
||
return yScale.getPixelForValue(base);
|
||
}
|
||
|
||
return yScale.getBasePixel();
|
||
},
|
||
|
||
getRuler: function() {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
var stackCount = me.getStackCount();
|
||
|
||
var tickWidth = xScale.width / xScale.ticks.length;
|
||
var categoryWidth = tickWidth * xScale.options.categoryPercentage;
|
||
var categorySpacing = (tickWidth - (tickWidth * xScale.options.categoryPercentage)) / 2;
|
||
var fullBarWidth = categoryWidth / stackCount;
|
||
|
||
var barWidth = fullBarWidth * xScale.options.barPercentage;
|
||
var barSpacing = fullBarWidth - (fullBarWidth * xScale.options.barPercentage);
|
||
|
||
return {
|
||
stackCount: stackCount,
|
||
tickWidth: tickWidth,
|
||
categoryWidth: categoryWidth,
|
||
categorySpacing: categorySpacing,
|
||
fullBarWidth: fullBarWidth,
|
||
barWidth: barWidth,
|
||
barSpacing: barSpacing
|
||
};
|
||
},
|
||
|
||
calculateBarWidth: function(ruler) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
if (xScale.options.barThickness) {
|
||
return xScale.options.barThickness;
|
||
}
|
||
return ruler.barWidth;
|
||
},
|
||
|
||
// Get stack index from the given dataset index accounting for stacks and the fact that not all bars are visible
|
||
getStackIndex: function(datasetIndex) {
|
||
var me = this;
|
||
var meta = me.chart.getDatasetMeta(datasetIndex);
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
var dsMeta, j;
|
||
var stacks = [meta.stack];
|
||
|
||
for (j = 0; j < datasetIndex; ++j) {
|
||
dsMeta = this.chart.getDatasetMeta(j);
|
||
if (dsMeta.bar && this.chart.isDatasetVisible(j) &&
|
||
(yScale.options.stacked === false ||
|
||
(yScale.options.stacked === true && stacks.indexOf(dsMeta.stack) === -1) ||
|
||
(yScale.options.stacked === undefined && (dsMeta.stack === undefined || stacks.indexOf(dsMeta.stack) === -1)))) {
|
||
stacks.push(dsMeta.stack);
|
||
}
|
||
}
|
||
|
||
return stacks.length - 1;
|
||
},
|
||
|
||
calculateBarX: function(index, datasetIndex, ruler) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
var stackIndex = me.getStackIndex(datasetIndex);
|
||
var leftTick = xScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo);
|
||
leftTick -= me.chart.isCombo ? (ruler.tickWidth / 2) : 0;
|
||
|
||
return leftTick +
|
||
(ruler.barWidth / 2) +
|
||
ruler.categorySpacing +
|
||
(ruler.barWidth * stackIndex) +
|
||
(ruler.barSpacing / 2) +
|
||
(ruler.barSpacing * stackIndex);
|
||
},
|
||
|
||
calculateBarY: function(index, datasetIndex) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
var value = Number(me.getDataset().data[index]);
|
||
|
||
if (yScale.options.stacked ||
|
||
(yScale.options.stacked === undefined && meta.stack !== undefined)) {
|
||
var base = yScale.getBaseValue();
|
||
var sumPos = base,
|
||
sumNeg = base;
|
||
|
||
for (var i = 0; i < datasetIndex; i++) {
|
||
var ds = me.chart.data.datasets[i];
|
||
var dsMeta = me.chart.getDatasetMeta(i);
|
||
if (dsMeta.bar && dsMeta.yAxisID === yScale.id && me.chart.isDatasetVisible(i) &&
|
||
meta.stack === dsMeta.stack) {
|
||
var stackedVal = Number(ds.data[index]);
|
||
if (stackedVal < 0) {
|
||
sumNeg += stackedVal || 0;
|
||
} else {
|
||
sumPos += stackedVal || 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (value < 0) {
|
||
return yScale.getPixelForValue(sumNeg + value);
|
||
}
|
||
return yScale.getPixelForValue(sumPos + value);
|
||
}
|
||
|
||
return yScale.getPixelForValue(value);
|
||
},
|
||
|
||
draw: function(ease) {
|
||
var me = this;
|
||
var easingDecimal = ease || 1;
|
||
var metaData = me.getMeta().data;
|
||
var dataset = me.getDataset();
|
||
var i, len;
|
||
|
||
Chart.canvasHelpers.clipArea(me.chart.chart.ctx, me.chart.chartArea);
|
||
for (i = 0, len = metaData.length; i < len; ++i) {
|
||
var d = dataset.data[i];
|
||
if (d !== null && d !== undefined && !isNaN(d)) {
|
||
metaData[i].transition(easingDecimal).draw();
|
||
}
|
||
}
|
||
Chart.canvasHelpers.unclipArea(me.chart.chart.ctx);
|
||
},
|
||
|
||
setHoverStyle: function(rectangle) {
|
||
var dataset = this.chart.data.datasets[rectangle._datasetIndex];
|
||
var index = rectangle._index;
|
||
|
||
var custom = rectangle.custom || {};
|
||
var model = rectangle._model;
|
||
model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.hoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));
|
||
model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.hoverBorderColor, index, helpers.getHoverColor(model.borderColor));
|
||
model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);
|
||
},
|
||
|
||
removeHoverStyle: function(rectangle) {
|
||
var dataset = this.chart.data.datasets[rectangle._datasetIndex];
|
||
var index = rectangle._index;
|
||
var custom = rectangle.custom || {};
|
||
var model = rectangle._model;
|
||
var rectangleElementOptions = this.chart.options.elements.rectangle;
|
||
|
||
model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor);
|
||
model.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor);
|
||
model.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth);
|
||
}
|
||
|
||
});
|
||
|
||
|
||
// including horizontalBar in the bar file, instead of a file of its own
|
||
// it extends bar (like pie extends doughnut)
|
||
Chart.defaults.horizontalBar = {
|
||
hover: {
|
||
mode: 'label'
|
||
},
|
||
|
||
scales: {
|
||
xAxes: [{
|
||
type: 'linear',
|
||
position: 'bottom'
|
||
}],
|
||
yAxes: [{
|
||
position: 'left',
|
||
type: 'category',
|
||
|
||
// Specific to Horizontal Bar Controller
|
||
categoryPercentage: 0.8,
|
||
barPercentage: 0.9,
|
||
|
||
// grid line settings
|
||
gridLines: {
|
||
offsetGridLines: true
|
||
}
|
||
}]
|
||
},
|
||
elements: {
|
||
rectangle: {
|
||
borderSkipped: 'left'
|
||
}
|
||
},
|
||
tooltips: {
|
||
callbacks: {
|
||
title: function(tooltipItems, data) {
|
||
// Pick first xLabel for now
|
||
var title = '';
|
||
|
||
if (tooltipItems.length > 0) {
|
||
if (tooltipItems[0].yLabel) {
|
||
title = tooltipItems[0].yLabel;
|
||
} else if (data.labels.length > 0 && tooltipItems[0].index < data.labels.length) {
|
||
title = data.labels[tooltipItems[0].index];
|
||
}
|
||
}
|
||
|
||
return title;
|
||
},
|
||
label: function(tooltipItem, data) {
|
||
var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';
|
||
return datasetLabel + ': ' + tooltipItem.xLabel;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
Chart.controllers.horizontalBar = Chart.controllers.bar.extend({
|
||
|
||
// Correctly calculate the bar width accounting for stacks and the fact that not all bars are visible
|
||
getStackCount: function() {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
|
||
var stacks = [];
|
||
helpers.each(me.chart.data.datasets, function(dataset, datasetIndex) {
|
||
var dsMeta = me.chart.getDatasetMeta(datasetIndex);
|
||
if (dsMeta.bar && me.chart.isDatasetVisible(datasetIndex) &&
|
||
(xScale.options.stacked === false ||
|
||
(xScale.options.stacked === true && stacks.indexOf(dsMeta.stack) === -1) ||
|
||
(xScale.options.stacked === undefined && (dsMeta.stack === undefined || stacks.indexOf(dsMeta.stack) === -1)))) {
|
||
stacks.push(dsMeta.stack);
|
||
}
|
||
}, me);
|
||
|
||
return stacks.length;
|
||
},
|
||
|
||
updateElement: function(rectangle, index, reset) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
var scaleBase = xScale.getBasePixel();
|
||
var custom = rectangle.custom || {};
|
||
var dataset = me.getDataset();
|
||
var rectangleElementOptions = me.chart.options.elements.rectangle;
|
||
|
||
rectangle._xScale = xScale;
|
||
rectangle._yScale = yScale;
|
||
rectangle._datasetIndex = me.index;
|
||
rectangle._index = index;
|
||
|
||
var ruler = me.getRuler(index); // The index argument for compatible
|
||
rectangle._model = {
|
||
x: reset ? scaleBase : me.calculateBarX(index, me.index),
|
||
y: me.calculateBarY(index, me.index, ruler),
|
||
|
||
// Tooltip
|
||
label: me.chart.data.labels[index],
|
||
datasetLabel: dataset.label,
|
||
|
||
// Appearance
|
||
horizontal: true,
|
||
base: reset ? scaleBase : me.calculateBarBase(me.index, index),
|
||
height: me.calculateBarHeight(ruler),
|
||
backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor),
|
||
borderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped,
|
||
borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor),
|
||
borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth)
|
||
};
|
||
|
||
rectangle.pivot();
|
||
},
|
||
|
||
calculateBarBase: function(datasetIndex, index) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
var base = xScale.getBaseValue();
|
||
var originalBase = base;
|
||
|
||
if (xScale.options.stacked ||
|
||
(xScale.options.stacked === undefined && meta.stack !== undefined)) {
|
||
var chart = me.chart;
|
||
var datasets = chart.data.datasets;
|
||
var value = Number(datasets[datasetIndex].data[index]);
|
||
|
||
for (var i = 0; i < datasetIndex; i++) {
|
||
var currentDs = datasets[i];
|
||
var currentDsMeta = chart.getDatasetMeta(i);
|
||
if (currentDsMeta.bar && currentDsMeta.xAxisID === xScale.id && chart.isDatasetVisible(i) &&
|
||
meta.stack === currentDsMeta.stack) {
|
||
var currentVal = Number(currentDs.data[index]);
|
||
base += value < 0 ? Math.min(currentVal, originalBase) : Math.max(currentVal, originalBase);
|
||
}
|
||
}
|
||
|
||
return xScale.getPixelForValue(base);
|
||
}
|
||
|
||
return xScale.getBasePixel();
|
||
},
|
||
|
||
getRuler: function() {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
var stackCount = me.getStackCount();
|
||
|
||
var tickHeight = yScale.height / yScale.ticks.length;
|
||
var categoryHeight = tickHeight * yScale.options.categoryPercentage;
|
||
var categorySpacing = (tickHeight - (tickHeight * yScale.options.categoryPercentage)) / 2;
|
||
var fullBarHeight = categoryHeight / stackCount;
|
||
|
||
var barHeight = fullBarHeight * yScale.options.barPercentage;
|
||
var barSpacing = fullBarHeight - (fullBarHeight * yScale.options.barPercentage);
|
||
|
||
return {
|
||
stackCount: stackCount,
|
||
tickHeight: tickHeight,
|
||
categoryHeight: categoryHeight,
|
||
categorySpacing: categorySpacing,
|
||
fullBarHeight: fullBarHeight,
|
||
barHeight: barHeight,
|
||
barSpacing: barSpacing
|
||
};
|
||
},
|
||
|
||
calculateBarHeight: function(ruler) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
if (yScale.options.barThickness) {
|
||
return yScale.options.barThickness;
|
||
}
|
||
return ruler.barHeight;
|
||
},
|
||
|
||
// Get stack index from the given dataset index accounting for stacks and the fact that not all bars are visible
|
||
getStackIndex: function(datasetIndex) {
|
||
var me = this;
|
||
var meta = me.chart.getDatasetMeta(datasetIndex);
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
var dsMeta, j;
|
||
var stacks = [meta.stack];
|
||
|
||
for (j = 0; j < datasetIndex; ++j) {
|
||
dsMeta = this.chart.getDatasetMeta(j);
|
||
if (dsMeta.bar && this.chart.isDatasetVisible(j) &&
|
||
(xScale.options.stacked === false ||
|
||
(xScale.options.stacked === true && stacks.indexOf(dsMeta.stack) === -1) ||
|
||
(xScale.options.stacked === undefined && (dsMeta.stack === undefined || stacks.indexOf(dsMeta.stack) === -1)))) {
|
||
stacks.push(dsMeta.stack);
|
||
}
|
||
}
|
||
|
||
return stacks.length - 1;
|
||
},
|
||
|
||
calculateBarX: function(index, datasetIndex) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
var value = Number(me.getDataset().data[index]);
|
||
|
||
if (xScale.options.stacked ||
|
||
(xScale.options.stacked === undefined && meta.stack !== undefined)) {
|
||
var base = xScale.getBaseValue();
|
||
var sumPos = base,
|
||
sumNeg = base;
|
||
|
||
for (var i = 0; i < datasetIndex; i++) {
|
||
var ds = me.chart.data.datasets[i];
|
||
var dsMeta = me.chart.getDatasetMeta(i);
|
||
if (dsMeta.bar && dsMeta.xAxisID === xScale.id && me.chart.isDatasetVisible(i) &&
|
||
meta.stack === dsMeta.stack) {
|
||
var stackedVal = Number(ds.data[index]);
|
||
if (stackedVal < 0) {
|
||
sumNeg += stackedVal || 0;
|
||
} else {
|
||
sumPos += stackedVal || 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (value < 0) {
|
||
return xScale.getPixelForValue(sumNeg + value);
|
||
}
|
||
return xScale.getPixelForValue(sumPos + value);
|
||
}
|
||
|
||
return xScale.getPixelForValue(value);
|
||
},
|
||
|
||
calculateBarY: function(index, datasetIndex, ruler) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
var stackIndex = me.getStackIndex(datasetIndex);
|
||
var topTick = yScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo);
|
||
topTick -= me.chart.isCombo ? (ruler.tickHeight / 2) : 0;
|
||
|
||
return topTick +
|
||
(ruler.barHeight / 2) +
|
||
ruler.categorySpacing +
|
||
(ruler.barHeight * stackIndex) +
|
||
(ruler.barSpacing / 2) +
|
||
(ruler.barSpacing * stackIndex);
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 150 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.defaults.bubble = {
|
||
hover: {
|
||
mode: 'single'
|
||
},
|
||
|
||
scales: {
|
||
xAxes: [{
|
||
type: 'linear', // bubble should probably use a linear scale by default
|
||
position: 'bottom',
|
||
id: 'x-axis-0' // need an ID so datasets can reference the scale
|
||
}],
|
||
yAxes: [{
|
||
type: 'linear',
|
||
position: 'left',
|
||
id: 'y-axis-0'
|
||
}]
|
||
},
|
||
|
||
tooltips: {
|
||
callbacks: {
|
||
title: function() {
|
||
// Title doesn't make sense for scatter since we format the data as a point
|
||
return '';
|
||
},
|
||
label: function(tooltipItem, data) {
|
||
var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';
|
||
var dataPoint = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
|
||
return datasetLabel + ': (' + tooltipItem.xLabel + ', ' + tooltipItem.yLabel + ', ' + dataPoint.r + ')';
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
Chart.controllers.bubble = Chart.DatasetController.extend({
|
||
|
||
dataElementType: Chart.elements.Point,
|
||
|
||
update: function(reset) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var points = meta.data;
|
||
|
||
// Update Points
|
||
helpers.each(points, function(point, index) {
|
||
me.updateElement(point, index, reset);
|
||
});
|
||
},
|
||
|
||
updateElement: function(point, index, reset) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
|
||
var custom = point.custom || {};
|
||
var dataset = me.getDataset();
|
||
var data = dataset.data[index];
|
||
var pointElementOptions = me.chart.options.elements.point;
|
||
var dsIndex = me.index;
|
||
|
||
helpers.extend(point, {
|
||
// Utility
|
||
_xScale: xScale,
|
||
_yScale: yScale,
|
||
_datasetIndex: dsIndex,
|
||
_index: index,
|
||
|
||
// Desired view properties
|
||
_model: {
|
||
x: reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex, me.chart.isCombo),
|
||
y: reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex),
|
||
// Appearance
|
||
radius: reset ? 0 : custom.radius ? custom.radius : me.getRadius(data),
|
||
|
||
// Tooltip
|
||
hitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius)
|
||
}
|
||
});
|
||
|
||
// Trick to reset the styles of the point
|
||
Chart.DatasetController.prototype.removeHoverStyle.call(me, point, pointElementOptions);
|
||
|
||
var model = point._model;
|
||
model.skip = custom.skip ? custom.skip : (isNaN(model.x) || isNaN(model.y));
|
||
|
||
point.pivot();
|
||
},
|
||
|
||
getRadius: function(value) {
|
||
return value.r || this.chart.options.elements.point.radius;
|
||
},
|
||
|
||
setHoverStyle: function(point) {
|
||
var me = this;
|
||
Chart.DatasetController.prototype.setHoverStyle.call(me, point);
|
||
|
||
// Radius
|
||
var dataset = me.chart.data.datasets[point._datasetIndex];
|
||
var index = point._index;
|
||
var custom = point.custom || {};
|
||
var model = point._model;
|
||
model.radius = custom.hoverRadius ? custom.hoverRadius : (helpers.getValueAtIndexOrDefault(dataset.hoverRadius, index, me.chart.options.elements.point.hoverRadius)) + me.getRadius(dataset.data[index]);
|
||
},
|
||
|
||
removeHoverStyle: function(point) {
|
||
var me = this;
|
||
Chart.DatasetController.prototype.removeHoverStyle.call(me, point, me.chart.options.elements.point);
|
||
|
||
var dataVal = me.chart.data.datasets[point._datasetIndex].data[point._index];
|
||
var custom = point.custom || {};
|
||
var model = point._model;
|
||
|
||
model.radius = custom.radius ? custom.radius : me.getRadius(dataVal);
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 151 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers,
|
||
defaults = Chart.defaults;
|
||
|
||
defaults.doughnut = {
|
||
animation: {
|
||
// Boolean - Whether we animate the rotation of the Doughnut
|
||
animateRotate: true,
|
||
// Boolean - Whether we animate scaling the Doughnut from the centre
|
||
animateScale: false
|
||
},
|
||
aspectRatio: 1,
|
||
hover: {
|
||
mode: 'single'
|
||
},
|
||
legendCallback: function(chart) {
|
||
var text = [];
|
||
text.push('<ul class="' + chart.id + '-legend">');
|
||
|
||
var data = chart.data;
|
||
var datasets = data.datasets;
|
||
var labels = data.labels;
|
||
|
||
if (datasets.length) {
|
||
for (var i = 0; i < datasets[0].data.length; ++i) {
|
||
text.push('<li><span style="background-color:' + datasets[0].backgroundColor[i] + '"></span>');
|
||
if (labels[i]) {
|
||
text.push(labels[i]);
|
||
}
|
||
text.push('</li>');
|
||
}
|
||
}
|
||
|
||
text.push('</ul>');
|
||
return text.join('');
|
||
},
|
||
legend: {
|
||
labels: {
|
||
generateLabels: function(chart) {
|
||
var data = chart.data;
|
||
if (data.labels.length && data.datasets.length) {
|
||
return data.labels.map(function(label, i) {
|
||
var meta = chart.getDatasetMeta(0);
|
||
var ds = data.datasets[0];
|
||
var arc = meta.data[i];
|
||
var custom = arc && arc.custom || {};
|
||
var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;
|
||
var arcOpts = chart.options.elements.arc;
|
||
var fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);
|
||
var stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);
|
||
var bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);
|
||
|
||
return {
|
||
text: label,
|
||
fillStyle: fill,
|
||
strokeStyle: stroke,
|
||
lineWidth: bw,
|
||
hidden: isNaN(ds.data[i]) || meta.data[i].hidden,
|
||
|
||
// Extra data used for toggling the correct item
|
||
index: i
|
||
};
|
||
});
|
||
}
|
||
return [];
|
||
}
|
||
},
|
||
|
||
onClick: function(e, legendItem) {
|
||
var index = legendItem.index;
|
||
var chart = this.chart;
|
||
var i, ilen, meta;
|
||
|
||
for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
|
||
meta = chart.getDatasetMeta(i);
|
||
// toggle visibility of index if exists
|
||
if (meta.data[index]) {
|
||
meta.data[index].hidden = !meta.data[index].hidden;
|
||
}
|
||
}
|
||
|
||
chart.update();
|
||
}
|
||
},
|
||
|
||
// The percentage of the chart that we cut out of the middle.
|
||
cutoutPercentage: 50,
|
||
|
||
// The rotation of the chart, where the first data arc begins.
|
||
rotation: Math.PI * -0.5,
|
||
|
||
// The total circumference of the chart.
|
||
circumference: Math.PI * 2.0,
|
||
|
||
// Need to override these to give a nice default
|
||
tooltips: {
|
||
callbacks: {
|
||
title: function() {
|
||
return '';
|
||
},
|
||
label: function(tooltipItem, data) {
|
||
var dataLabel = data.labels[tooltipItem.index];
|
||
var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
|
||
|
||
if (helpers.isArray(dataLabel)) {
|
||
// show value on first line of multiline label
|
||
// need to clone because we are changing the value
|
||
dataLabel = dataLabel.slice();
|
||
dataLabel[0] += value;
|
||
} else {
|
||
dataLabel += value;
|
||
}
|
||
|
||
return dataLabel;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
defaults.pie = helpers.clone(defaults.doughnut);
|
||
helpers.extend(defaults.pie, {
|
||
cutoutPercentage: 0
|
||
});
|
||
|
||
|
||
Chart.controllers.doughnut = Chart.controllers.pie = Chart.DatasetController.extend({
|
||
|
||
dataElementType: Chart.elements.Arc,
|
||
|
||
linkScales: helpers.noop,
|
||
|
||
// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly
|
||
getRingIndex: function(datasetIndex) {
|
||
var ringIndex = 0;
|
||
|
||
for (var j = 0; j < datasetIndex; ++j) {
|
||
if (this.chart.isDatasetVisible(j)) {
|
||
++ringIndex;
|
||
}
|
||
}
|
||
|
||
return ringIndex;
|
||
},
|
||
|
||
update: function(reset) {
|
||
var me = this;
|
||
var chart = me.chart,
|
||
chartArea = chart.chartArea,
|
||
opts = chart.options,
|
||
arcOpts = opts.elements.arc,
|
||
availableWidth = chartArea.right - chartArea.left - arcOpts.borderWidth,
|
||
availableHeight = chartArea.bottom - chartArea.top - arcOpts.borderWidth,
|
||
minSize = Math.min(availableWidth, availableHeight),
|
||
offset = {
|
||
x: 0,
|
||
y: 0
|
||
},
|
||
meta = me.getMeta(),
|
||
cutoutPercentage = opts.cutoutPercentage,
|
||
circumference = opts.circumference;
|
||
|
||
// If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc
|
||
if (circumference < Math.PI * 2.0) {
|
||
var startAngle = opts.rotation % (Math.PI * 2.0);
|
||
startAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);
|
||
var endAngle = startAngle + circumference;
|
||
var start = {x: Math.cos(startAngle), y: Math.sin(startAngle)};
|
||
var end = {x: Math.cos(endAngle), y: Math.sin(endAngle)};
|
||
var contains0 = (startAngle <= 0 && 0 <= endAngle) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle);
|
||
var contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle);
|
||
var contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle);
|
||
var contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle);
|
||
var cutout = cutoutPercentage / 100.0;
|
||
var min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))};
|
||
var max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))};
|
||
var size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5};
|
||
minSize = Math.min(availableWidth / size.width, availableHeight / size.height);
|
||
offset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5};
|
||
}
|
||
|
||
chart.borderWidth = me.getMaxBorderWidth(meta.data);
|
||
chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);
|
||
chart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 0, 0);
|
||
chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();
|
||
chart.offsetX = offset.x * chart.outerRadius;
|
||
chart.offsetY = offset.y * chart.outerRadius;
|
||
|
||
meta.total = me.calculateTotal();
|
||
|
||
me.outerRadius = chart.outerRadius - (chart.radiusLength * me.getRingIndex(me.index));
|
||
me.innerRadius = Math.max(me.outerRadius - chart.radiusLength, 0);
|
||
|
||
helpers.each(meta.data, function(arc, index) {
|
||
me.updateElement(arc, index, reset);
|
||
});
|
||
},
|
||
|
||
updateElement: function(arc, index, reset) {
|
||
var me = this;
|
||
var chart = me.chart,
|
||
chartArea = chart.chartArea,
|
||
opts = chart.options,
|
||
animationOpts = opts.animation,
|
||
centerX = (chartArea.left + chartArea.right) / 2,
|
||
centerY = (chartArea.top + chartArea.bottom) / 2,
|
||
startAngle = opts.rotation, // non reset case handled later
|
||
endAngle = opts.rotation, // non reset case handled later
|
||
dataset = me.getDataset(),
|
||
circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI)),
|
||
innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius,
|
||
outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius,
|
||
valueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;
|
||
|
||
helpers.extend(arc, {
|
||
// Utility
|
||
_datasetIndex: me.index,
|
||
_index: index,
|
||
|
||
// Desired view properties
|
||
_model: {
|
||
x: centerX + chart.offsetX,
|
||
y: centerY + chart.offsetY,
|
||
startAngle: startAngle,
|
||
endAngle: endAngle,
|
||
circumference: circumference,
|
||
outerRadius: outerRadius,
|
||
innerRadius: innerRadius,
|
||
label: valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])
|
||
}
|
||
});
|
||
|
||
var model = arc._model;
|
||
// Resets the visual styles
|
||
this.removeHoverStyle(arc);
|
||
|
||
// Set correct angles if not resetting
|
||
if (!reset || !animationOpts.animateRotate) {
|
||
if (index === 0) {
|
||
model.startAngle = opts.rotation;
|
||
} else {
|
||
model.startAngle = me.getMeta().data[index - 1]._model.endAngle;
|
||
}
|
||
|
||
model.endAngle = model.startAngle + model.circumference;
|
||
}
|
||
|
||
arc.pivot();
|
||
},
|
||
|
||
removeHoverStyle: function(arc) {
|
||
Chart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);
|
||
},
|
||
|
||
calculateTotal: function() {
|
||
var dataset = this.getDataset();
|
||
var meta = this.getMeta();
|
||
var total = 0;
|
||
var value;
|
||
|
||
helpers.each(meta.data, function(element, index) {
|
||
value = dataset.data[index];
|
||
if (!isNaN(value) && !element.hidden) {
|
||
total += Math.abs(value);
|
||
}
|
||
});
|
||
|
||
/* if (total === 0) {
|
||
total = NaN;
|
||
}*/
|
||
|
||
return total;
|
||
},
|
||
|
||
calculateCircumference: function(value) {
|
||
var total = this.getMeta().total;
|
||
if (total > 0 && !isNaN(value)) {
|
||
return (Math.PI * 2.0) * (value / total);
|
||
}
|
||
return 0;
|
||
},
|
||
|
||
// gets the max border or hover width to properly scale pie charts
|
||
getMaxBorderWidth: function(elements) {
|
||
var max = 0,
|
||
index = this.index,
|
||
length = elements.length,
|
||
borderWidth,
|
||
hoverWidth;
|
||
|
||
for (var i = 0; i < length; i++) {
|
||
borderWidth = elements[i]._model ? elements[i]._model.borderWidth : 0;
|
||
hoverWidth = elements[i]._chart ? elements[i]._chart.config.data.datasets[index].hoverBorderWidth : 0;
|
||
|
||
max = borderWidth > max ? borderWidth : max;
|
||
max = hoverWidth > max ? hoverWidth : max;
|
||
}
|
||
return max;
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 152 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.defaults.line = {
|
||
showLines: true,
|
||
spanGaps: false,
|
||
|
||
hover: {
|
||
mode: 'label'
|
||
},
|
||
|
||
scales: {
|
||
xAxes: [{
|
||
type: 'category',
|
||
id: 'x-axis-0'
|
||
}],
|
||
yAxes: [{
|
||
type: 'linear',
|
||
id: 'y-axis-0'
|
||
}]
|
||
}
|
||
};
|
||
|
||
function lineEnabled(dataset, options) {
|
||
return helpers.getValueOrDefault(dataset.showLine, options.showLines);
|
||
}
|
||
|
||
Chart.controllers.line = Chart.DatasetController.extend({
|
||
|
||
datasetElementType: Chart.elements.Line,
|
||
|
||
dataElementType: Chart.elements.Point,
|
||
|
||
update: function(reset) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var line = meta.dataset;
|
||
var points = meta.data || [];
|
||
var options = me.chart.options;
|
||
var lineElementOptions = options.elements.line;
|
||
var scale = me.getScaleForId(meta.yAxisID);
|
||
var i, ilen, custom;
|
||
var dataset = me.getDataset();
|
||
var showLine = lineEnabled(dataset, options);
|
||
|
||
// Update Line
|
||
if (showLine) {
|
||
custom = line.custom || {};
|
||
|
||
// Compatibility: If the properties are defined with only the old name, use those values
|
||
if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {
|
||
dataset.lineTension = dataset.tension;
|
||
}
|
||
|
||
// Utility
|
||
line._scale = scale;
|
||
line._datasetIndex = me.index;
|
||
// Data
|
||
line._children = points;
|
||
// Model
|
||
line._model = {
|
||
// Appearance
|
||
// The default behavior of lines is to break at null values, according
|
||
// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158
|
||
// This option gives lines the ability to span gaps
|
||
spanGaps: dataset.spanGaps ? dataset.spanGaps : options.spanGaps,
|
||
tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension),
|
||
backgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),
|
||
borderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),
|
||
borderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),
|
||
borderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),
|
||
borderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),
|
||
borderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),
|
||
borderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),
|
||
fill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),
|
||
steppedLine: custom.steppedLine ? custom.steppedLine : helpers.getValueOrDefault(dataset.steppedLine, lineElementOptions.stepped),
|
||
cubicInterpolationMode: custom.cubicInterpolationMode ? custom.cubicInterpolationMode : helpers.getValueOrDefault(dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode),
|
||
// Scale
|
||
scaleTop: scale.top,
|
||
scaleBottom: scale.bottom,
|
||
scaleZero: scale.getBasePixel()
|
||
};
|
||
|
||
line.pivot();
|
||
}
|
||
|
||
// Update Points
|
||
for (i=0, ilen=points.length; i<ilen; ++i) {
|
||
me.updateElement(points[i], i, reset);
|
||
}
|
||
|
||
if (showLine && line._model.tension !== 0) {
|
||
me.updateBezierControlPoints();
|
||
}
|
||
|
||
// Now pivot the point for animation
|
||
for (i=0, ilen=points.length; i<ilen; ++i) {
|
||
points[i].pivot();
|
||
}
|
||
},
|
||
|
||
getPointBackgroundColor: function(point, index) {
|
||
var backgroundColor = this.chart.options.elements.point.backgroundColor;
|
||
var dataset = this.getDataset();
|
||
var custom = point.custom || {};
|
||
|
||
if (custom.backgroundColor) {
|
||
backgroundColor = custom.backgroundColor;
|
||
} else if (dataset.pointBackgroundColor) {
|
||
backgroundColor = helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, backgroundColor);
|
||
} else if (dataset.backgroundColor) {
|
||
backgroundColor = dataset.backgroundColor;
|
||
}
|
||
|
||
return backgroundColor;
|
||
},
|
||
|
||
getPointBorderColor: function(point, index) {
|
||
var borderColor = this.chart.options.elements.point.borderColor;
|
||
var dataset = this.getDataset();
|
||
var custom = point.custom || {};
|
||
|
||
if (custom.borderColor) {
|
||
borderColor = custom.borderColor;
|
||
} else if (dataset.pointBorderColor) {
|
||
borderColor = helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, borderColor);
|
||
} else if (dataset.borderColor) {
|
||
borderColor = dataset.borderColor;
|
||
}
|
||
|
||
return borderColor;
|
||
},
|
||
|
||
getPointBorderWidth: function(point, index) {
|
||
var borderWidth = this.chart.options.elements.point.borderWidth;
|
||
var dataset = this.getDataset();
|
||
var custom = point.custom || {};
|
||
|
||
if (!isNaN(custom.borderWidth)) {
|
||
borderWidth = custom.borderWidth;
|
||
} else if (!isNaN(dataset.pointBorderWidth)) {
|
||
borderWidth = helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, borderWidth);
|
||
} else if (!isNaN(dataset.borderWidth)) {
|
||
borderWidth = dataset.borderWidth;
|
||
}
|
||
|
||
return borderWidth;
|
||
},
|
||
|
||
updateElement: function(point, index, reset) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var custom = point.custom || {};
|
||
var dataset = me.getDataset();
|
||
var datasetIndex = me.index;
|
||
var value = dataset.data[index];
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
var xScale = me.getScaleForId(meta.xAxisID);
|
||
var pointOptions = me.chart.options.elements.point;
|
||
var x, y;
|
||
var labels = me.chart.data.labels || [];
|
||
var includeOffset = (labels.length === 1 || dataset.data.length === 1) || me.chart.isCombo;
|
||
|
||
// Compatibility: If the properties are defined with only the old name, use those values
|
||
if ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {
|
||
dataset.pointRadius = dataset.radius;
|
||
}
|
||
if ((dataset.hitRadius !== undefined) && (dataset.pointHitRadius === undefined)) {
|
||
dataset.pointHitRadius = dataset.hitRadius;
|
||
}
|
||
|
||
x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex, includeOffset);
|
||
y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);
|
||
|
||
// Utility
|
||
point._xScale = xScale;
|
||
point._yScale = yScale;
|
||
point._datasetIndex = datasetIndex;
|
||
point._index = index;
|
||
|
||
// Desired view properties
|
||
point._model = {
|
||
x: x,
|
||
y: y,
|
||
skip: custom.skip || isNaN(x) || isNaN(y),
|
||
// Appearance
|
||
radius: custom.radius || helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, pointOptions.radius),
|
||
pointStyle: custom.pointStyle || helpers.getValueAtIndexOrDefault(dataset.pointStyle, index, pointOptions.pointStyle),
|
||
backgroundColor: me.getPointBackgroundColor(point, index),
|
||
borderColor: me.getPointBorderColor(point, index),
|
||
borderWidth: me.getPointBorderWidth(point, index),
|
||
tension: meta.dataset._model ? meta.dataset._model.tension : 0,
|
||
steppedLine: meta.dataset._model ? meta.dataset._model.steppedLine : false,
|
||
// Tooltip
|
||
hitRadius: custom.hitRadius || helpers.getValueAtIndexOrDefault(dataset.pointHitRadius, index, pointOptions.hitRadius)
|
||
};
|
||
},
|
||
|
||
calculatePointY: function(value, index, datasetIndex) {
|
||
var me = this;
|
||
var chart = me.chart;
|
||
var meta = me.getMeta();
|
||
var yScale = me.getScaleForId(meta.yAxisID);
|
||
var sumPos = 0;
|
||
var sumNeg = 0;
|
||
var i, ds, dsMeta;
|
||
|
||
if (yScale.options.stacked) {
|
||
for (i = 0; i < datasetIndex; i++) {
|
||
ds = chart.data.datasets[i];
|
||
dsMeta = chart.getDatasetMeta(i);
|
||
if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {
|
||
var stackedRightValue = Number(yScale.getRightValue(ds.data[index]));
|
||
if (stackedRightValue < 0) {
|
||
sumNeg += stackedRightValue || 0;
|
||
} else {
|
||
sumPos += stackedRightValue || 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
var rightValue = Number(yScale.getRightValue(value));
|
||
if (rightValue < 0) {
|
||
return yScale.getPixelForValue(sumNeg + rightValue);
|
||
}
|
||
return yScale.getPixelForValue(sumPos + rightValue);
|
||
}
|
||
|
||
return yScale.getPixelForValue(value);
|
||
},
|
||
|
||
updateBezierControlPoints: function() {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var area = me.chart.chartArea;
|
||
var points = (meta.data || []);
|
||
var i, ilen, point, model, controlPoints;
|
||
|
||
// Only consider points that are drawn in case the spanGaps option is used
|
||
if (meta.dataset._model.spanGaps) {
|
||
points = points.filter(function(pt) {
|
||
return !pt._model.skip;
|
||
});
|
||
}
|
||
|
||
function capControlPoint(pt, min, max) {
|
||
return Math.max(Math.min(pt, max), min);
|
||
}
|
||
|
||
if (meta.dataset._model.cubicInterpolationMode === 'monotone') {
|
||
helpers.splineCurveMonotone(points);
|
||
} else {
|
||
for (i = 0, ilen = points.length; i < ilen; ++i) {
|
||
point = points[i];
|
||
model = point._model;
|
||
controlPoints = helpers.splineCurve(
|
||
helpers.previousItem(points, i)._model,
|
||
model,
|
||
helpers.nextItem(points, i)._model,
|
||
meta.dataset._model.tension
|
||
);
|
||
model.controlPointPreviousX = controlPoints.previous.x;
|
||
model.controlPointPreviousY = controlPoints.previous.y;
|
||
model.controlPointNextX = controlPoints.next.x;
|
||
model.controlPointNextY = controlPoints.next.y;
|
||
}
|
||
}
|
||
|
||
if (me.chart.options.elements.line.capBezierPoints) {
|
||
for (i = 0, ilen = points.length; i < ilen; ++i) {
|
||
model = points[i]._model;
|
||
model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);
|
||
model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);
|
||
model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);
|
||
model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);
|
||
}
|
||
}
|
||
},
|
||
|
||
draw: function(ease) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var points = meta.data || [];
|
||
var easingDecimal = ease || 1;
|
||
var i, ilen;
|
||
|
||
// Transition Point Locations
|
||
for (i=0, ilen=points.length; i<ilen; ++i) {
|
||
points[i].transition(easingDecimal);
|
||
}
|
||
|
||
Chart.canvasHelpers.clipArea(me.chart.chart.ctx, me.chart.chartArea);
|
||
// Transition and Draw the line
|
||
if (lineEnabled(me.getDataset(), me.chart.options)) {
|
||
meta.dataset.transition(easingDecimal).draw();
|
||
}
|
||
Chart.canvasHelpers.unclipArea(me.chart.chart.ctx);
|
||
|
||
// Draw the points
|
||
for (i=0, ilen=points.length; i<ilen; ++i) {
|
||
points[i].draw(me.chart.chartArea);
|
||
}
|
||
},
|
||
|
||
setHoverStyle: function(point) {
|
||
// Point
|
||
var dataset = this.chart.data.datasets[point._datasetIndex];
|
||
var index = point._index;
|
||
var custom = point.custom || {};
|
||
var model = point._model;
|
||
|
||
model.radius = custom.hoverRadius || helpers.getValueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);
|
||
model.backgroundColor = custom.hoverBackgroundColor || helpers.getValueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));
|
||
model.borderColor = custom.hoverBorderColor || helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));
|
||
model.borderWidth = custom.hoverBorderWidth || helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);
|
||
},
|
||
|
||
removeHoverStyle: function(point) {
|
||
var me = this;
|
||
var dataset = me.chart.data.datasets[point._datasetIndex];
|
||
var index = point._index;
|
||
var custom = point.custom || {};
|
||
var model = point._model;
|
||
|
||
// Compatibility: If the properties are defined with only the old name, use those values
|
||
if ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {
|
||
dataset.pointRadius = dataset.radius;
|
||
}
|
||
|
||
model.radius = custom.radius || helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, me.chart.options.elements.point.radius);
|
||
model.backgroundColor = me.getPointBackgroundColor(point, index);
|
||
model.borderColor = me.getPointBorderColor(point, index);
|
||
model.borderWidth = me.getPointBorderWidth(point, index);
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 153 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.defaults.polarArea = {
|
||
|
||
scale: {
|
||
type: 'radialLinear',
|
||
lineArc: true, // so that lines are circular
|
||
ticks: {
|
||
beginAtZero: true
|
||
}
|
||
},
|
||
|
||
// Boolean - Whether to animate the rotation of the chart
|
||
animation: {
|
||
animateRotate: true,
|
||
animateScale: true
|
||
},
|
||
|
||
startAngle: -0.5 * Math.PI,
|
||
aspectRatio: 1,
|
||
legendCallback: function(chart) {
|
||
var text = [];
|
||
text.push('<ul class="' + chart.id + '-legend">');
|
||
|
||
var data = chart.data;
|
||
var datasets = data.datasets;
|
||
var labels = data.labels;
|
||
|
||
if (datasets.length) {
|
||
for (var i = 0; i < datasets[0].data.length; ++i) {
|
||
text.push('<li><span style="background-color:' + datasets[0].backgroundColor[i] + '"></span>');
|
||
if (labels[i]) {
|
||
text.push(labels[i]);
|
||
}
|
||
text.push('</li>');
|
||
}
|
||
}
|
||
|
||
text.push('</ul>');
|
||
return text.join('');
|
||
},
|
||
legend: {
|
||
labels: {
|
||
generateLabels: function(chart) {
|
||
var data = chart.data;
|
||
if (data.labels.length && data.datasets.length) {
|
||
return data.labels.map(function(label, i) {
|
||
var meta = chart.getDatasetMeta(0);
|
||
var ds = data.datasets[0];
|
||
var arc = meta.data[i];
|
||
var custom = arc.custom || {};
|
||
var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;
|
||
var arcOpts = chart.options.elements.arc;
|
||
var fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);
|
||
var stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);
|
||
var bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);
|
||
|
||
return {
|
||
text: label,
|
||
fillStyle: fill,
|
||
strokeStyle: stroke,
|
||
lineWidth: bw,
|
||
hidden: isNaN(ds.data[i]) || meta.data[i].hidden,
|
||
|
||
// Extra data used for toggling the correct item
|
||
index: i
|
||
};
|
||
});
|
||
}
|
||
return [];
|
||
}
|
||
},
|
||
|
||
onClick: function(e, legendItem) {
|
||
var index = legendItem.index;
|
||
var chart = this.chart;
|
||
var i, ilen, meta;
|
||
|
||
for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
|
||
meta = chart.getDatasetMeta(i);
|
||
meta.data[index].hidden = !meta.data[index].hidden;
|
||
}
|
||
|
||
chart.update();
|
||
}
|
||
},
|
||
|
||
// Need to override these to give a nice default
|
||
tooltips: {
|
||
callbacks: {
|
||
title: function() {
|
||
return '';
|
||
},
|
||
label: function(tooltipItem, data) {
|
||
return data.labels[tooltipItem.index] + ': ' + tooltipItem.yLabel;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
Chart.controllers.polarArea = Chart.DatasetController.extend({
|
||
|
||
dataElementType: Chart.elements.Arc,
|
||
|
||
linkScales: helpers.noop,
|
||
|
||
update: function(reset) {
|
||
var me = this;
|
||
var chart = me.chart;
|
||
var chartArea = chart.chartArea;
|
||
var meta = me.getMeta();
|
||
var opts = chart.options;
|
||
var arcOpts = opts.elements.arc;
|
||
var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
|
||
chart.outerRadius = Math.max((minSize - arcOpts.borderWidth / 2) / 2, 0);
|
||
chart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);
|
||
chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();
|
||
|
||
me.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);
|
||
me.innerRadius = me.outerRadius - chart.radiusLength;
|
||
|
||
meta.count = me.countVisibleElements();
|
||
|
||
helpers.each(meta.data, function(arc, index) {
|
||
me.updateElement(arc, index, reset);
|
||
});
|
||
},
|
||
|
||
updateElement: function(arc, index, reset) {
|
||
var me = this;
|
||
var chart = me.chart;
|
||
var dataset = me.getDataset();
|
||
var opts = chart.options;
|
||
var animationOpts = opts.animation;
|
||
var scale = chart.scale;
|
||
var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;
|
||
var labels = chart.data.labels;
|
||
|
||
var circumference = me.calculateCircumference(dataset.data[index]);
|
||
var centerX = scale.xCenter;
|
||
var centerY = scale.yCenter;
|
||
|
||
// If there is NaN data before us, we need to calculate the starting angle correctly.
|
||
// We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data
|
||
var visibleCount = 0;
|
||
var meta = me.getMeta();
|
||
for (var i = 0; i < index; ++i) {
|
||
if (!isNaN(dataset.data[i]) && !meta.data[i].hidden) {
|
||
++visibleCount;
|
||
}
|
||
}
|
||
|
||
// var negHalfPI = -0.5 * Math.PI;
|
||
var datasetStartAngle = opts.startAngle;
|
||
var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
|
||
var startAngle = datasetStartAngle + (circumference * visibleCount);
|
||
var endAngle = startAngle + (arc.hidden ? 0 : circumference);
|
||
|
||
var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
|
||
|
||
helpers.extend(arc, {
|
||
// Utility
|
||
_datasetIndex: me.index,
|
||
_index: index,
|
||
_scale: scale,
|
||
|
||
// Desired view properties
|
||
_model: {
|
||
x: centerX,
|
||
y: centerY,
|
||
innerRadius: 0,
|
||
outerRadius: reset ? resetRadius : distance,
|
||
startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,
|
||
endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,
|
||
label: getValueAtIndexOrDefault(labels, index, labels[index])
|
||
}
|
||
});
|
||
|
||
// Apply border and fill style
|
||
me.removeHoverStyle(arc);
|
||
|
||
arc.pivot();
|
||
},
|
||
|
||
removeHoverStyle: function(arc) {
|
||
Chart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);
|
||
},
|
||
|
||
countVisibleElements: function() {
|
||
var dataset = this.getDataset();
|
||
var meta = this.getMeta();
|
||
var count = 0;
|
||
|
||
helpers.each(meta.data, function(element, index) {
|
||
if (!isNaN(dataset.data[index]) && !element.hidden) {
|
||
count++;
|
||
}
|
||
});
|
||
|
||
return count;
|
||
},
|
||
|
||
calculateCircumference: function(value) {
|
||
var count = this.getMeta().count;
|
||
if (count > 0 && !isNaN(value)) {
|
||
return (2 * Math.PI) / count;
|
||
}
|
||
return 0;
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 154 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var helpers = Chart.helpers;
|
||
|
||
Chart.defaults.radar = {
|
||
aspectRatio: 1,
|
||
scale: {
|
||
type: 'radialLinear'
|
||
},
|
||
elements: {
|
||
line: {
|
||
tension: 0 // no bezier in radar
|
||
}
|
||
}
|
||
};
|
||
|
||
Chart.controllers.radar = Chart.DatasetController.extend({
|
||
|
||
datasetElementType: Chart.elements.Line,
|
||
|
||
dataElementType: Chart.elements.Point,
|
||
|
||
linkScales: helpers.noop,
|
||
|
||
update: function(reset) {
|
||
var me = this;
|
||
var meta = me.getMeta();
|
||
var line = meta.dataset;
|
||
var points = meta.data;
|
||
var custom = line.custom || {};
|
||
var dataset = me.getDataset();
|
||
var lineElementOptions = me.chart.options.elements.line;
|
||
var scale = me.chart.scale;
|
||
|
||
// Compatibility: If the properties are defined with only the old name, use those values
|
||
if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {
|
||
dataset.lineTension = dataset.tension;
|
||
}
|
||
|
||
helpers.extend(meta.dataset, {
|
||
// Utility
|
||
_datasetIndex: me.index,
|
||
// Data
|
||
_children: points,
|
||
_loop: true,
|
||
// Model
|
||
_model: {
|
||
// Appearance
|
||
tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension),
|
||
backgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),
|
||
borderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),
|
||
borderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),
|
||
fill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),
|
||
borderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),
|
||
borderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),
|
||
borderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),
|
||
borderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),
|
||
|
||
// Scale
|
||
scaleTop: scale.top,
|
||
scaleBottom: scale.bottom,
|
||
scaleZero: scale.getBasePosition()
|
||
}
|
||
});
|
||
|
||
meta.dataset.pivot();
|
||
|
||
// Update Points
|
||
helpers.each(points, function(point, index) {
|
||
me.updateElement(point, index, reset);
|
||
}, me);
|
||
|
||
// Update bezier control points
|
||
me.updateBezierControlPoints();
|
||
},
|
||
updateElement: function(point, index, reset) {
|
||
var me = this;
|
||
var custom = point.custom || {};
|
||
var dataset = me.getDataset();
|
||
var scale = me.chart.scale;
|
||
var pointElementOptions = me.chart.options.elements.point;
|
||
var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);
|
||
|
||
helpers.extend(point, {
|
||
// Utility
|
||
_datasetIndex: me.index,
|
||
_index: index,
|
||
_scale: scale,
|
||
|
||
// Desired view properties
|
||
_model: {
|
||
x: reset ? scale.xCenter : pointPosition.x, // value not used in dataset scale, but we want a consistent API between scales
|
||
y: reset ? scale.yCenter : pointPosition.y,
|
||
|
||
// Appearance
|
||
tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, me.chart.options.elements.line.tension),
|
||
radius: custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius),
|
||
backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor),
|
||
borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor),
|
||
borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth),
|
||
pointStyle: custom.pointStyle ? custom.pointStyle : helpers.getValueAtIndexOrDefault(dataset.pointStyle, index, pointElementOptions.pointStyle),
|
||
|
||
// Tooltip
|
||
hitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius)
|
||
}
|
||
});
|
||
|
||
point._model.skip = custom.skip ? custom.skip : (isNaN(point._model.x) || isNaN(point._model.y));
|
||
},
|
||
updateBezierControlPoints: function() {
|
||
var chartArea = this.chart.chartArea;
|
||
var meta = this.getMeta();
|
||
|
||
helpers.each(meta.data, function(point, index) {
|
||
var model = point._model;
|
||
var controlPoints = helpers.splineCurve(
|
||
helpers.previousItem(meta.data, index, true)._model,
|
||
model,
|
||
helpers.nextItem(meta.data, index, true)._model,
|
||
model.tension
|
||
);
|
||
|
||
// Prevent the bezier going outside of the bounds of the graph
|
||
model.controlPointPreviousX = Math.max(Math.min(controlPoints.previous.x, chartArea.right), chartArea.left);
|
||
model.controlPointPreviousY = Math.max(Math.min(controlPoints.previous.y, chartArea.bottom), chartArea.top);
|
||
|
||
model.controlPointNextX = Math.max(Math.min(controlPoints.next.x, chartArea.right), chartArea.left);
|
||
model.controlPointNextY = Math.max(Math.min(controlPoints.next.y, chartArea.bottom), chartArea.top);
|
||
|
||
// Now pivot the point for animation
|
||
point.pivot();
|
||
});
|
||
},
|
||
|
||
draw: function(ease) {
|
||
var meta = this.getMeta();
|
||
var easingDecimal = ease || 1;
|
||
|
||
// Transition Point Locations
|
||
helpers.each(meta.data, function(point) {
|
||
point.transition(easingDecimal);
|
||
});
|
||
|
||
// Transition and Draw the line
|
||
meta.dataset.transition(easingDecimal).draw();
|
||
|
||
// Draw the points
|
||
helpers.each(meta.data, function(point) {
|
||
point.draw();
|
||
});
|
||
},
|
||
|
||
setHoverStyle: function(point) {
|
||
// Point
|
||
var dataset = this.chart.data.datasets[point._datasetIndex];
|
||
var custom = point.custom || {};
|
||
var index = point._index;
|
||
var model = point._model;
|
||
|
||
model.radius = custom.hoverRadius ? custom.hoverRadius : helpers.getValueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);
|
||
model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));
|
||
model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));
|
||
model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);
|
||
},
|
||
|
||
removeHoverStyle: function(point) {
|
||
var dataset = this.chart.data.datasets[point._datasetIndex];
|
||
var custom = point.custom || {};
|
||
var index = point._index;
|
||
var model = point._model;
|
||
var pointElementOptions = this.chart.options.elements.point;
|
||
|
||
model.radius = custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.radius, index, pointElementOptions.radius);
|
||
model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor);
|
||
model.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor);
|
||
model.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth);
|
||
}
|
||
});
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 155 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
Chart.Bar = function(context, config) {
|
||
config.type = 'bar';
|
||
|
||
return new Chart(context, config);
|
||
};
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 156 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
Chart.Bubble = function(context, config) {
|
||
config.type = 'bubble';
|
||
return new Chart(context, config);
|
||
};
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 157 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
Chart.Doughnut = function(context, config) {
|
||
config.type = 'doughnut';
|
||
|
||
return new Chart(context, config);
|
||
};
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 158 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
Chart.Line = function(context, config) {
|
||
config.type = 'line';
|
||
|
||
return new Chart(context, config);
|
||
};
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 159 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
Chart.PolarArea = function(context, config) {
|
||
config.type = 'polarArea';
|
||
|
||
return new Chart(context, config);
|
||
};
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 160 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
Chart.Radar = function(context, config) {
|
||
config.type = 'radar';
|
||
|
||
return new Chart(context, config);
|
||
};
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 161 */
|
||
/***/ function(module, exports) {
|
||
|
||
'use strict';
|
||
|
||
module.exports = function(Chart) {
|
||
|
||
var defaultConfig = {
|
||
hover: {
|
||
mode: 'single'
|
||
},
|
||
|
||
scales: {
|
||
xAxes: [{
|
||
type: 'linear', // scatter should not use a category axis
|
||
position: 'bottom',
|
||
id: 'x-axis-1' // need an ID so datasets can reference the scale
|
||
}],
|
||
yAxes: [{
|
||
type: 'linear',
|
||
position: 'left',
|
||
id: 'y-axis-1'
|
||
}]
|
||
},
|
||
|
||
tooltips: {
|
||
callbacks: {
|
||
title: function() {
|
||
// Title doesn't make sense for scatter since we format the data as a point
|
||
return '';
|
||
},
|
||
label: function(tooltipItem) {
|
||
return '(' + tooltipItem.xLabel + ', ' + tooltipItem.yLabel + ')';
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
// Register the default config for this type
|
||
Chart.defaults.scatter = defaultConfig;
|
||
|
||
// Scatter charts use line controllers
|
||
Chart.controllers.scatter = Chart.controllers.line;
|
||
|
||
Chart.Scatter = function(context, config) {
|
||
config.type = 'scatter';
|
||
return new Chart(context, config);
|
||
};
|
||
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 162 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
exports.mergeOptions = mergeOptions;
|
||
|
||
var _merge = __webpack_require__(163);
|
||
|
||
var _merge2 = _interopRequireDefault(_merge);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
function mergeOptions(obj, src) {
|
||
return (0, _merge2.default)(obj, src);
|
||
}
|
||
|
||
/***/ },
|
||
/* 163 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var convert = __webpack_require__(164),
|
||
func = convert('merge', __webpack_require__(370));
|
||
|
||
func.placeholder = __webpack_require__(167);
|
||
module.exports = func;
|
||
|
||
|
||
/***/ },
|
||
/* 164 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseConvert = __webpack_require__(165),
|
||
util = __webpack_require__(168);
|
||
|
||
/**
|
||
* Converts `func` of `name` to an immutable auto-curried iteratee-first data-last
|
||
* version with conversion `options` applied. If `name` is an object its methods
|
||
* will be converted.
|
||
*
|
||
* @param {string} name The name of the function to wrap.
|
||
* @param {Function} [func] The function to wrap.
|
||
* @param {Object} [options] The options object. See `baseConvert` for more details.
|
||
* @returns {Function|Object} Returns the converted function or object.
|
||
*/
|
||
function convert(name, func, options) {
|
||
return baseConvert(util, name, func, options);
|
||
}
|
||
|
||
module.exports = convert;
|
||
|
||
|
||
/***/ },
|
||
/* 165 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var mapping = __webpack_require__(166),
|
||
fallbackHolder = __webpack_require__(167);
|
||
|
||
/** Built-in value reference. */
|
||
var push = Array.prototype.push;
|
||
|
||
/**
|
||
* Creates a function, with an arity of `n`, that invokes `func` with the
|
||
* arguments it receives.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to wrap.
|
||
* @param {number} n The arity of the new function.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function baseArity(func, n) {
|
||
return n == 2
|
||
? function(a, b) { return func.apply(undefined, arguments); }
|
||
: function(a) { return func.apply(undefined, arguments); };
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes `func`, with up to `n` arguments, ignoring
|
||
* any additional arguments.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to cap arguments for.
|
||
* @param {number} n The arity cap.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function baseAry(func, n) {
|
||
return n == 2
|
||
? function(a, b) { return func(a, b); }
|
||
: function(a) { return func(a); };
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `array`.
|
||
*
|
||
* @private
|
||
* @param {Array} array The array to clone.
|
||
* @returns {Array} Returns the cloned array.
|
||
*/
|
||
function cloneArray(array) {
|
||
var length = array ? array.length : 0,
|
||
result = Array(length);
|
||
|
||
while (length--) {
|
||
result[length] = array[length];
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Creates a function that clones a given object using the assignment `func`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The assignment function.
|
||
* @returns {Function} Returns the new cloner function.
|
||
*/
|
||
function createCloner(func) {
|
||
return function(object) {
|
||
return func({}, object);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* A specialized version of `_.spread` which flattens the spread array into
|
||
* the arguments of the invoked `func`.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to spread arguments over.
|
||
* @param {number} start The start position of the spread.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function flatSpread(func, start) {
|
||
return function() {
|
||
var length = arguments.length,
|
||
lastIndex = length - 1,
|
||
args = Array(length);
|
||
|
||
while (length--) {
|
||
args[length] = arguments[length];
|
||
}
|
||
var array = args[start],
|
||
otherArgs = args.slice(0, start);
|
||
|
||
if (array) {
|
||
push.apply(otherArgs, array);
|
||
}
|
||
if (start != lastIndex) {
|
||
push.apply(otherArgs, args.slice(start + 1));
|
||
}
|
||
return func.apply(this, otherArgs);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that wraps `func` and uses `cloner` to clone the first
|
||
* argument it receives.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to wrap.
|
||
* @param {Function} cloner The function to clone arguments.
|
||
* @returns {Function} Returns the new immutable function.
|
||
*/
|
||
function wrapImmutable(func, cloner) {
|
||
return function() {
|
||
var length = arguments.length;
|
||
if (!length) {
|
||
return;
|
||
}
|
||
var args = Array(length);
|
||
while (length--) {
|
||
args[length] = arguments[length];
|
||
}
|
||
var result = args[0] = cloner.apply(undefined, args);
|
||
func.apply(undefined, args);
|
||
return result;
|
||
};
|
||
}
|
||
|
||
/**
|
||
* The base implementation of `convert` which accepts a `util` object of methods
|
||
* required to perform conversions.
|
||
*
|
||
* @param {Object} util The util object.
|
||
* @param {string} name The name of the function to convert.
|
||
* @param {Function} func The function to convert.
|
||
* @param {Object} [options] The options object.
|
||
* @param {boolean} [options.cap=true] Specify capping iteratee arguments.
|
||
* @param {boolean} [options.curry=true] Specify currying.
|
||
* @param {boolean} [options.fixed=true] Specify fixed arity.
|
||
* @param {boolean} [options.immutable=true] Specify immutable operations.
|
||
* @param {boolean} [options.rearg=true] Specify rearranging arguments.
|
||
* @returns {Function|Object} Returns the converted function or object.
|
||
*/
|
||
function baseConvert(util, name, func, options) {
|
||
var setPlaceholder,
|
||
isLib = typeof name == 'function',
|
||
isObj = name === Object(name);
|
||
|
||
if (isObj) {
|
||
options = func;
|
||
func = name;
|
||
name = undefined;
|
||
}
|
||
if (func == null) {
|
||
throw new TypeError;
|
||
}
|
||
options || (options = {});
|
||
|
||
var config = {
|
||
'cap': 'cap' in options ? options.cap : true,
|
||
'curry': 'curry' in options ? options.curry : true,
|
||
'fixed': 'fixed' in options ? options.fixed : true,
|
||
'immutable': 'immutable' in options ? options.immutable : true,
|
||
'rearg': 'rearg' in options ? options.rearg : true
|
||
};
|
||
|
||
var forceCurry = ('curry' in options) && options.curry,
|
||
forceFixed = ('fixed' in options) && options.fixed,
|
||
forceRearg = ('rearg' in options) && options.rearg,
|
||
placeholder = isLib ? func : fallbackHolder,
|
||
pristine = isLib ? func.runInContext() : undefined;
|
||
|
||
var helpers = isLib ? func : {
|
||
'ary': util.ary,
|
||
'assign': util.assign,
|
||
'clone': util.clone,
|
||
'curry': util.curry,
|
||
'forEach': util.forEach,
|
||
'isArray': util.isArray,
|
||
'isFunction': util.isFunction,
|
||
'iteratee': util.iteratee,
|
||
'keys': util.keys,
|
||
'rearg': util.rearg,
|
||
'toInteger': util.toInteger,
|
||
'toPath': util.toPath
|
||
};
|
||
|
||
var ary = helpers.ary,
|
||
assign = helpers.assign,
|
||
clone = helpers.clone,
|
||
curry = helpers.curry,
|
||
each = helpers.forEach,
|
||
isArray = helpers.isArray,
|
||
isFunction = helpers.isFunction,
|
||
keys = helpers.keys,
|
||
rearg = helpers.rearg,
|
||
toInteger = helpers.toInteger,
|
||
toPath = helpers.toPath;
|
||
|
||
var aryMethodKeys = keys(mapping.aryMethod);
|
||
|
||
var wrappers = {
|
||
'castArray': function(castArray) {
|
||
return function() {
|
||
var value = arguments[0];
|
||
return isArray(value)
|
||
? castArray(cloneArray(value))
|
||
: castArray.apply(undefined, arguments);
|
||
};
|
||
},
|
||
'iteratee': function(iteratee) {
|
||
return function() {
|
||
var func = arguments[0],
|
||
arity = arguments[1],
|
||
result = iteratee(func, arity),
|
||
length = result.length;
|
||
|
||
if (config.cap && typeof arity == 'number') {
|
||
arity = arity > 2 ? (arity - 2) : 1;
|
||
return (length && length <= arity) ? result : baseAry(result, arity);
|
||
}
|
||
return result;
|
||
};
|
||
},
|
||
'mixin': function(mixin) {
|
||
return function(source) {
|
||
var func = this;
|
||
if (!isFunction(func)) {
|
||
return mixin(func, Object(source));
|
||
}
|
||
var pairs = [];
|
||
each(keys(source), function(key) {
|
||
if (isFunction(source[key])) {
|
||
pairs.push([key, func.prototype[key]]);
|
||
}
|
||
});
|
||
|
||
mixin(func, Object(source));
|
||
|
||
each(pairs, function(pair) {
|
||
var value = pair[1];
|
||
if (isFunction(value)) {
|
||
func.prototype[pair[0]] = value;
|
||
} else {
|
||
delete func.prototype[pair[0]];
|
||
}
|
||
});
|
||
return func;
|
||
};
|
||
},
|
||
'nthArg': function(nthArg) {
|
||
return function(n) {
|
||
var arity = n < 0 ? 1 : (toInteger(n) + 1);
|
||
return curry(nthArg(n), arity);
|
||
};
|
||
},
|
||
'rearg': function(rearg) {
|
||
return function(func, indexes) {
|
||
var arity = indexes ? indexes.length : 0;
|
||
return curry(rearg(func, indexes), arity);
|
||
};
|
||
},
|
||
'runInContext': function(runInContext) {
|
||
return function(context) {
|
||
return baseConvert(util, runInContext(context), options);
|
||
};
|
||
}
|
||
};
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Casts `func` to a function with an arity capped iteratee if needed.
|
||
*
|
||
* @private
|
||
* @param {string} name The name of the function to inspect.
|
||
* @param {Function} func The function to inspect.
|
||
* @returns {Function} Returns the cast function.
|
||
*/
|
||
function castCap(name, func) {
|
||
if (config.cap) {
|
||
var indexes = mapping.iterateeRearg[name];
|
||
if (indexes) {
|
||
return iterateeRearg(func, indexes);
|
||
}
|
||
var n = !isLib && mapping.iterateeAry[name];
|
||
if (n) {
|
||
return iterateeAry(func, n);
|
||
}
|
||
}
|
||
return func;
|
||
}
|
||
|
||
/**
|
||
* Casts `func` to a curried function if needed.
|
||
*
|
||
* @private
|
||
* @param {string} name The name of the function to inspect.
|
||
* @param {Function} func The function to inspect.
|
||
* @param {number} n The arity of `func`.
|
||
* @returns {Function} Returns the cast function.
|
||
*/
|
||
function castCurry(name, func, n) {
|
||
return (forceCurry || (config.curry && n > 1))
|
||
? curry(func, n)
|
||
: func;
|
||
}
|
||
|
||
/**
|
||
* Casts `func` to a fixed arity function if needed.
|
||
*
|
||
* @private
|
||
* @param {string} name The name of the function to inspect.
|
||
* @param {Function} func The function to inspect.
|
||
* @param {number} n The arity cap.
|
||
* @returns {Function} Returns the cast function.
|
||
*/
|
||
function castFixed(name, func, n) {
|
||
if (config.fixed && (forceFixed || !mapping.skipFixed[name])) {
|
||
var data = mapping.methodSpread[name],
|
||
start = data && data.start;
|
||
|
||
return start === undefined ? ary(func, n) : flatSpread(func, start);
|
||
}
|
||
return func;
|
||
}
|
||
|
||
/**
|
||
* Casts `func` to an rearged function if needed.
|
||
*
|
||
* @private
|
||
* @param {string} name The name of the function to inspect.
|
||
* @param {Function} func The function to inspect.
|
||
* @param {number} n The arity of `func`.
|
||
* @returns {Function} Returns the cast function.
|
||
*/
|
||
function castRearg(name, func, n) {
|
||
return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name]))
|
||
? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n])
|
||
: func;
|
||
}
|
||
|
||
/**
|
||
* Creates a clone of `object` by `path`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to clone.
|
||
* @param {Array|string} path The path to clone by.
|
||
* @returns {Object} Returns the cloned object.
|
||
*/
|
||
function cloneByPath(object, path) {
|
||
path = toPath(path);
|
||
|
||
var index = -1,
|
||
length = path.length,
|
||
lastIndex = length - 1,
|
||
result = clone(Object(object)),
|
||
nested = result;
|
||
|
||
while (nested != null && ++index < length) {
|
||
var key = path[index],
|
||
value = nested[key];
|
||
|
||
if (value != null) {
|
||
nested[path[index]] = clone(index == lastIndex ? value : Object(value));
|
||
}
|
||
nested = nested[key];
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* Converts `lodash` to an immutable auto-curried iteratee-first data-last
|
||
* version with conversion `options` applied.
|
||
*
|
||
* @param {Object} [options] The options object. See `baseConvert` for more details.
|
||
* @returns {Function} Returns the converted `lodash`.
|
||
*/
|
||
function convertLib(options) {
|
||
return _.runInContext.convert(options)(undefined);
|
||
}
|
||
|
||
/**
|
||
* Create a converter function for `func` of `name`.
|
||
*
|
||
* @param {string} name The name of the function to convert.
|
||
* @param {Function} func The function to convert.
|
||
* @returns {Function} Returns the new converter function.
|
||
*/
|
||
function createConverter(name, func) {
|
||
var realName = mapping.aliasToReal[name] || name,
|
||
methodName = mapping.remap[realName] || realName,
|
||
oldOptions = options;
|
||
|
||
return function(options) {
|
||
var newUtil = isLib ? pristine : helpers,
|
||
newFunc = isLib ? pristine[methodName] : func,
|
||
newOptions = assign(assign({}, oldOptions), options);
|
||
|
||
return baseConvert(newUtil, realName, newFunc, newOptions);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that wraps `func` to invoke its iteratee, with up to `n`
|
||
* arguments, ignoring any additional arguments.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to cap iteratee arguments for.
|
||
* @param {number} n The arity cap.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function iterateeAry(func, n) {
|
||
return overArg(func, function(func) {
|
||
return typeof func == 'function' ? baseAry(func, n) : func;
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates a function that wraps `func` to invoke its iteratee 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.
|
||
*
|
||
* @private
|
||
* @param {Function} func The function to rearrange iteratee arguments for.
|
||
* @param {number[]} indexes The arranged argument indexes.
|
||
* @returns {Function} Returns the new function.
|
||
*/
|
||
function iterateeRearg(func, indexes) {
|
||
return overArg(func, function(func) {
|
||
var n = indexes.length;
|
||
return baseArity(rearg(baseAry(func, n), indexes), n);
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Creates a function that invokes `func` with its first 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() {
|
||
var length = arguments.length;
|
||
if (!length) {
|
||
return func();
|
||
}
|
||
var args = Array(length);
|
||
while (length--) {
|
||
args[length] = arguments[length];
|
||
}
|
||
var index = config.rearg ? 0 : (length - 1);
|
||
args[index] = transform(args[index]);
|
||
return func.apply(undefined, args);
|
||
};
|
||
}
|
||
|
||
/**
|
||
* Creates a function that wraps `func` and applys the conversions
|
||
* rules by `name`.
|
||
*
|
||
* @private
|
||
* @param {string} name The name of the function to wrap.
|
||
* @param {Function} func The function to wrap.
|
||
* @returns {Function} Returns the converted function.
|
||
*/
|
||
function wrap(name, func) {
|
||
var result,
|
||
realName = mapping.aliasToReal[name] || name,
|
||
wrapped = func,
|
||
wrapper = wrappers[realName];
|
||
|
||
if (wrapper) {
|
||
wrapped = wrapper(func);
|
||
}
|
||
else if (config.immutable) {
|
||
if (mapping.mutate.array[realName]) {
|
||
wrapped = wrapImmutable(func, cloneArray);
|
||
}
|
||
else if (mapping.mutate.object[realName]) {
|
||
wrapped = wrapImmutable(func, createCloner(func));
|
||
}
|
||
else if (mapping.mutate.set[realName]) {
|
||
wrapped = wrapImmutable(func, cloneByPath);
|
||
}
|
||
}
|
||
each(aryMethodKeys, function(aryKey) {
|
||
each(mapping.aryMethod[aryKey], function(otherName) {
|
||
if (realName == otherName) {
|
||
var data = mapping.methodSpread[realName],
|
||
afterRearg = data && data.afterRearg;
|
||
|
||
result = afterRearg
|
||
? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey)
|
||
: castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey);
|
||
|
||
result = castCap(realName, result);
|
||
result = castCurry(realName, result, aryKey);
|
||
return false;
|
||
}
|
||
});
|
||
return !result;
|
||
});
|
||
|
||
result || (result = wrapped);
|
||
if (result == func) {
|
||
result = forceCurry ? curry(result, 1) : function() {
|
||
return func.apply(this, arguments);
|
||
};
|
||
}
|
||
result.convert = createConverter(realName, func);
|
||
if (mapping.placeholder[realName]) {
|
||
setPlaceholder = true;
|
||
result.placeholder = func.placeholder = placeholder;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
/*--------------------------------------------------------------------------*/
|
||
|
||
if (!isObj) {
|
||
return wrap(name, func);
|
||
}
|
||
var _ = func;
|
||
|
||
// Convert methods by ary cap.
|
||
var pairs = [];
|
||
each(aryMethodKeys, function(aryKey) {
|
||
each(mapping.aryMethod[aryKey], function(key) {
|
||
var func = _[mapping.remap[key] || key];
|
||
if (func) {
|
||
pairs.push([key, wrap(key, func)]);
|
||
}
|
||
});
|
||
});
|
||
|
||
// Convert remaining methods.
|
||
each(keys(_), function(key) {
|
||
var func = _[key];
|
||
if (typeof func == 'function') {
|
||
var length = pairs.length;
|
||
while (length--) {
|
||
if (pairs[length][0] == key) {
|
||
return;
|
||
}
|
||
}
|
||
func.convert = createConverter(key, func);
|
||
pairs.push([key, func]);
|
||
}
|
||
});
|
||
|
||
// Assign to `_` leaving `_.prototype` unchanged to allow chaining.
|
||
each(pairs, function(pair) {
|
||
_[pair[0]] = pair[1];
|
||
});
|
||
|
||
_.convert = convertLib;
|
||
if (setPlaceholder) {
|
||
_.placeholder = placeholder;
|
||
}
|
||
// Assign aliases.
|
||
each(keys(_), function(key) {
|
||
each(mapping.realToAlias[key] || [], function(alias) {
|
||
_[alias] = _[key];
|
||
});
|
||
});
|
||
|
||
return _;
|
||
}
|
||
|
||
module.exports = baseConvert;
|
||
|
||
|
||
/***/ },
|
||
/* 166 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used to map aliases to their real names. */
|
||
exports.aliasToReal = {
|
||
|
||
// Lodash aliases.
|
||
'each': 'forEach',
|
||
'eachRight': 'forEachRight',
|
||
'entries': 'toPairs',
|
||
'entriesIn': 'toPairsIn',
|
||
'extend': 'assignIn',
|
||
'extendAll': 'assignInAll',
|
||
'extendAllWith': 'assignInAllWith',
|
||
'extendWith': 'assignInWith',
|
||
'first': 'head',
|
||
|
||
// Methods that are curried variants of others.
|
||
'conforms': 'conformsTo',
|
||
'matches': 'isMatch',
|
||
'property': 'get',
|
||
|
||
// Ramda aliases.
|
||
'__': 'placeholder',
|
||
'F': 'stubFalse',
|
||
'T': 'stubTrue',
|
||
'all': 'every',
|
||
'allPass': 'overEvery',
|
||
'always': 'constant',
|
||
'any': 'some',
|
||
'anyPass': 'overSome',
|
||
'apply': 'spread',
|
||
'assoc': 'set',
|
||
'assocPath': 'set',
|
||
'complement': 'negate',
|
||
'compose': 'flowRight',
|
||
'contains': 'includes',
|
||
'dissoc': 'unset',
|
||
'dissocPath': 'unset',
|
||
'dropLast': 'dropRight',
|
||
'dropLastWhile': 'dropRightWhile',
|
||
'equals': 'isEqual',
|
||
'identical': 'eq',
|
||
'indexBy': 'keyBy',
|
||
'init': 'initial',
|
||
'invertObj': 'invert',
|
||
'juxt': 'over',
|
||
'omitAll': 'omit',
|
||
'nAry': 'ary',
|
||
'path': 'get',
|
||
'pathEq': 'matchesProperty',
|
||
'pathOr': 'getOr',
|
||
'paths': 'at',
|
||
'pickAll': 'pick',
|
||
'pipe': 'flow',
|
||
'pluck': 'map',
|
||
'prop': 'get',
|
||
'propEq': 'matchesProperty',
|
||
'propOr': 'getOr',
|
||
'props': 'at',
|
||
'symmetricDifference': 'xor',
|
||
'symmetricDifferenceBy': 'xorBy',
|
||
'symmetricDifferenceWith': 'xorWith',
|
||
'takeLast': 'takeRight',
|
||
'takeLastWhile': 'takeRightWhile',
|
||
'unapply': 'rest',
|
||
'unnest': 'flatten',
|
||
'useWith': 'overArgs',
|
||
'where': 'conformsTo',
|
||
'whereEq': 'isMatch',
|
||
'zipObj': 'zipObject'
|
||
};
|
||
|
||
/** Used to map ary to method names. */
|
||
exports.aryMethod = {
|
||
'1': [
|
||
'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create',
|
||
'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow',
|
||
'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll',
|
||
'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse',
|
||
'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart',
|
||
'uniqueId', 'words', 'zipAll'
|
||
],
|
||
'2': [
|
||
'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith',
|
||
'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith',
|
||
'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN',
|
||
'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference',
|
||
'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq',
|
||
'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
|
||
'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach',
|
||
'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get',
|
||
'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection',
|
||
'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy',
|
||
'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty',
|
||
'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit',
|
||
'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial',
|
||
'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll',
|
||
'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',
|
||
'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',
|
||
'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',
|
||
'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight',
|
||
'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars',
|
||
'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith',
|
||
'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',
|
||
'zipObjectDeep'
|
||
],
|
||
'3': [
|
||
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
|
||
'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr',
|
||
'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith',
|
||
'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth',
|
||
'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd',
|
||
'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight',
|
||
'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy',
|
||
'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy',
|
||
'xorWith', 'zipWith'
|
||
],
|
||
'4': [
|
||
'fill', 'setWith', 'updateWith'
|
||
]
|
||
};
|
||
|
||
/** Used to map ary to rearg configs. */
|
||
exports.aryRearg = {
|
||
'2': [1, 0],
|
||
'3': [2, 0, 1],
|
||
'4': [3, 2, 0, 1]
|
||
};
|
||
|
||
/** Used to map method names to their iteratee ary. */
|
||
exports.iterateeAry = {
|
||
'dropRightWhile': 1,
|
||
'dropWhile': 1,
|
||
'every': 1,
|
||
'filter': 1,
|
||
'find': 1,
|
||
'findFrom': 1,
|
||
'findIndex': 1,
|
||
'findIndexFrom': 1,
|
||
'findKey': 1,
|
||
'findLast': 1,
|
||
'findLastFrom': 1,
|
||
'findLastIndex': 1,
|
||
'findLastIndexFrom': 1,
|
||
'findLastKey': 1,
|
||
'flatMap': 1,
|
||
'flatMapDeep': 1,
|
||
'flatMapDepth': 1,
|
||
'forEach': 1,
|
||
'forEachRight': 1,
|
||
'forIn': 1,
|
||
'forInRight': 1,
|
||
'forOwn': 1,
|
||
'forOwnRight': 1,
|
||
'map': 1,
|
||
'mapKeys': 1,
|
||
'mapValues': 1,
|
||
'partition': 1,
|
||
'reduce': 2,
|
||
'reduceRight': 2,
|
||
'reject': 1,
|
||
'remove': 1,
|
||
'some': 1,
|
||
'takeRightWhile': 1,
|
||
'takeWhile': 1,
|
||
'times': 1,
|
||
'transform': 2
|
||
};
|
||
|
||
/** Used to map method names to iteratee rearg configs. */
|
||
exports.iterateeRearg = {
|
||
'mapKeys': [1],
|
||
'reduceRight': [1, 0]
|
||
};
|
||
|
||
/** Used to map method names to rearg configs. */
|
||
exports.methodRearg = {
|
||
'assignInAllWith': [1, 0],
|
||
'assignInWith': [1, 2, 0],
|
||
'assignAllWith': [1, 0],
|
||
'assignWith': [1, 2, 0],
|
||
'differenceBy': [1, 2, 0],
|
||
'differenceWith': [1, 2, 0],
|
||
'getOr': [2, 1, 0],
|
||
'intersectionBy': [1, 2, 0],
|
||
'intersectionWith': [1, 2, 0],
|
||
'isEqualWith': [1, 2, 0],
|
||
'isMatchWith': [2, 1, 0],
|
||
'mergeAllWith': [1, 0],
|
||
'mergeWith': [1, 2, 0],
|
||
'padChars': [2, 1, 0],
|
||
'padCharsEnd': [2, 1, 0],
|
||
'padCharsStart': [2, 1, 0],
|
||
'pullAllBy': [2, 1, 0],
|
||
'pullAllWith': [2, 1, 0],
|
||
'rangeStep': [1, 2, 0],
|
||
'rangeStepRight': [1, 2, 0],
|
||
'setWith': [3, 1, 2, 0],
|
||
'sortedIndexBy': [2, 1, 0],
|
||
'sortedLastIndexBy': [2, 1, 0],
|
||
'unionBy': [1, 2, 0],
|
||
'unionWith': [1, 2, 0],
|
||
'updateWith': [3, 1, 2, 0],
|
||
'xorBy': [1, 2, 0],
|
||
'xorWith': [1, 2, 0],
|
||
'zipWith': [1, 2, 0]
|
||
};
|
||
|
||
/** Used to map method names to spread configs. */
|
||
exports.methodSpread = {
|
||
'assignAll': { 'start': 0 },
|
||
'assignAllWith': { 'start': 0 },
|
||
'assignInAll': { 'start': 0 },
|
||
'assignInAllWith': { 'start': 0 },
|
||
'defaultsAll': { 'start': 0 },
|
||
'defaultsDeepAll': { 'start': 0 },
|
||
'invokeArgs': { 'start': 2 },
|
||
'invokeArgsMap': { 'start': 2 },
|
||
'mergeAll': { 'start': 0 },
|
||
'mergeAllWith': { 'start': 0 },
|
||
'partial': { 'start': 1 },
|
||
'partialRight': { 'start': 1 },
|
||
'without': { 'start': 1 },
|
||
'zipAll': { 'start': 0 }
|
||
};
|
||
|
||
/** Used to identify methods which mutate arrays or objects. */
|
||
exports.mutate = {
|
||
'array': {
|
||
'fill': true,
|
||
'pull': true,
|
||
'pullAll': true,
|
||
'pullAllBy': true,
|
||
'pullAllWith': true,
|
||
'pullAt': true,
|
||
'remove': true,
|
||
'reverse': true
|
||
},
|
||
'object': {
|
||
'assign': true,
|
||
'assignAll': true,
|
||
'assignAllWith': true,
|
||
'assignIn': true,
|
||
'assignInAll': true,
|
||
'assignInAllWith': true,
|
||
'assignInWith': true,
|
||
'assignWith': true,
|
||
'defaults': true,
|
||
'defaultsAll': true,
|
||
'defaultsDeep': true,
|
||
'defaultsDeepAll': true,
|
||
'merge': true,
|
||
'mergeAll': true,
|
||
'mergeAllWith': true,
|
||
'mergeWith': true,
|
||
},
|
||
'set': {
|
||
'set': true,
|
||
'setWith': true,
|
||
'unset': true,
|
||
'update': true,
|
||
'updateWith': true
|
||
}
|
||
};
|
||
|
||
/** Used to track methods with placeholder support */
|
||
exports.placeholder = {
|
||
'bind': true,
|
||
'bindKey': true,
|
||
'curry': true,
|
||
'curryRight': true,
|
||
'partial': true,
|
||
'partialRight': true
|
||
};
|
||
|
||
/** Used to map real names to their aliases. */
|
||
exports.realToAlias = (function() {
|
||
var hasOwnProperty = Object.prototype.hasOwnProperty,
|
||
object = exports.aliasToReal,
|
||
result = {};
|
||
|
||
for (var key in object) {
|
||
var value = object[key];
|
||
if (hasOwnProperty.call(result, value)) {
|
||
result[value].push(key);
|
||
} else {
|
||
result[value] = [key];
|
||
}
|
||
}
|
||
return result;
|
||
}());
|
||
|
||
/** Used to map method names to other names. */
|
||
exports.remap = {
|
||
'assignAll': 'assign',
|
||
'assignAllWith': 'assignWith',
|
||
'assignInAll': 'assignIn',
|
||
'assignInAllWith': 'assignInWith',
|
||
'curryN': 'curry',
|
||
'curryRightN': 'curryRight',
|
||
'defaultsAll': 'defaults',
|
||
'defaultsDeepAll': 'defaultsDeep',
|
||
'findFrom': 'find',
|
||
'findIndexFrom': 'findIndex',
|
||
'findLastFrom': 'findLast',
|
||
'findLastIndexFrom': 'findLastIndex',
|
||
'getOr': 'get',
|
||
'includesFrom': 'includes',
|
||
'indexOfFrom': 'indexOf',
|
||
'invokeArgs': 'invoke',
|
||
'invokeArgsMap': 'invokeMap',
|
||
'lastIndexOfFrom': 'lastIndexOf',
|
||
'mergeAll': 'merge',
|
||
'mergeAllWith': 'mergeWith',
|
||
'padChars': 'pad',
|
||
'padCharsEnd': 'padEnd',
|
||
'padCharsStart': 'padStart',
|
||
'propertyOf': 'get',
|
||
'rangeStep': 'range',
|
||
'rangeStepRight': 'rangeRight',
|
||
'restFrom': 'rest',
|
||
'spreadFrom': 'spread',
|
||
'trimChars': 'trim',
|
||
'trimCharsEnd': 'trimEnd',
|
||
'trimCharsStart': 'trimStart',
|
||
'zipAll': 'zip'
|
||
};
|
||
|
||
/** Used to track methods that skip fixing their arity. */
|
||
exports.skipFixed = {
|
||
'castArray': true,
|
||
'flow': true,
|
||
'flowRight': true,
|
||
'iteratee': true,
|
||
'mixin': true,
|
||
'rearg': true,
|
||
'runInContext': true
|
||
};
|
||
|
||
/** Used to track methods that skip rearranging arguments. */
|
||
exports.skipRearg = {
|
||
'add': true,
|
||
'assign': true,
|
||
'assignIn': true,
|
||
'bind': true,
|
||
'bindKey': true,
|
||
'concat': true,
|
||
'difference': true,
|
||
'divide': true,
|
||
'eq': true,
|
||
'gt': true,
|
||
'gte': true,
|
||
'isEqual': true,
|
||
'lt': true,
|
||
'lte': true,
|
||
'matchesProperty': true,
|
||
'merge': true,
|
||
'multiply': true,
|
||
'overArgs': true,
|
||
'partial': true,
|
||
'partialRight': true,
|
||
'propertyOf': true,
|
||
'random': true,
|
||
'range': true,
|
||
'rangeRight': true,
|
||
'subtract': true,
|
||
'zip': true,
|
||
'zipObject': true,
|
||
'zipObjectDeep': true
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 167 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* The default argument placeholder value for methods.
|
||
*
|
||
* @type {Object}
|
||
*/
|
||
module.exports = {};
|
||
|
||
|
||
/***/ },
|
||
/* 168 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = {
|
||
'ary': __webpack_require__(169),
|
||
'assign': __webpack_require__(238),
|
||
'clone': __webpack_require__(260),
|
||
'curry': __webpack_require__(327),
|
||
'forEach': __webpack_require__(222),
|
||
'isArray': __webpack_require__(208),
|
||
'isFunction': __webpack_require__(177),
|
||
'iteratee': __webpack_require__(328),
|
||
'keys': __webpack_require__(255),
|
||
'rearg': __webpack_require__(363),
|
||
'toInteger': __webpack_require__(234),
|
||
'toPath': __webpack_require__(369)
|
||
};
|
||
|
||
|
||
/***/ },
|
||
/* 169 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var createWrap = __webpack_require__(170);
|
||
|
||
/** Used to compose bitmasks for function metadata. */
|
||
var WRAP_ARY_FLAG = 128;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = ary;
|
||
|
||
|
||
/***/ },
|
||
/* 170 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseSetData = __webpack_require__(171),
|
||
createBind = __webpack_require__(189),
|
||
createCurry = __webpack_require__(192),
|
||
createHybrid = __webpack_require__(194),
|
||
createPartial = __webpack_require__(232),
|
||
getData = __webpack_require__(202),
|
||
mergeData = __webpack_require__(233),
|
||
setData = __webpack_require__(212),
|
||
setWrapToString = __webpack_require__(214),
|
||
toInteger = __webpack_require__(234);
|
||
|
||
/** Error message constants. */
|
||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||
|
||
/** Used to compose bitmasks for function metadata. */
|
||
var WRAP_BIND_FLAG = 1,
|
||
WRAP_BIND_KEY_FLAG = 2,
|
||
WRAP_CURRY_FLAG = 8,
|
||
WRAP_CURRY_RIGHT_FLAG = 16,
|
||
WRAP_PARTIAL_FLAG = 32,
|
||
WRAP_PARTIAL_RIGHT_FLAG = 64;
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeMax = Math.max;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = createWrap;
|
||
|
||
|
||
/***/ },
|
||
/* 171 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var identity = __webpack_require__(172),
|
||
metaMap = __webpack_require__(173);
|
||
|
||
/**
|
||
* 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;
|
||
};
|
||
|
||
module.exports = baseSetData;
|
||
|
||
|
||
/***/ },
|
||
/* 172 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = identity;
|
||
|
||
|
||
/***/ },
|
||
/* 173 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var WeakMap = __webpack_require__(174);
|
||
|
||
/** Used to store function metadata. */
|
||
var metaMap = WeakMap && new WeakMap;
|
||
|
||
module.exports = metaMap;
|
||
|
||
|
||
/***/ },
|
||
/* 174 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getNative = __webpack_require__(175),
|
||
root = __webpack_require__(180);
|
||
|
||
/* Built-in method references that are verified to be native. */
|
||
var WeakMap = getNative(root, 'WeakMap');
|
||
|
||
module.exports = WeakMap;
|
||
|
||
|
||
/***/ },
|
||
/* 175 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseIsNative = __webpack_require__(176),
|
||
getValue = __webpack_require__(188);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = getNative;
|
||
|
||
|
||
/***/ },
|
||
/* 176 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isFunction = __webpack_require__(177),
|
||
isMasked = __webpack_require__(185),
|
||
isObject = __webpack_require__(184),
|
||
toSource = __webpack_require__(187);
|
||
|
||
/**
|
||
* Used to match `RegExp`
|
||
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
|
||
*/
|
||
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
|
||
|
||
/** Used to detect host constructors (Safari). */
|
||
var reIsHostCtor = /^\[object .+?Constructor\]$/;
|
||
|
||
/** Used for built-in method references. */
|
||
var funcProto = Function.prototype,
|
||
objectProto = Object.prototype;
|
||
|
||
/** 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 detect if a method is native. */
|
||
var reIsNative = RegExp('^' +
|
||
funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
|
||
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
|
||
);
|
||
|
||
/**
|
||
* 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));
|
||
}
|
||
|
||
module.exports = baseIsNative;
|
||
|
||
|
||
/***/ },
|
||
/* 177 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseGetTag = __webpack_require__(178),
|
||
isObject = __webpack_require__(184);
|
||
|
||
/** `Object#toString` result references. */
|
||
var asyncTag = '[object AsyncFunction]',
|
||
funcTag = '[object Function]',
|
||
genTag = '[object GeneratorFunction]',
|
||
proxyTag = '[object Proxy]';
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = isFunction;
|
||
|
||
|
||
/***/ },
|
||
/* 178 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Symbol = __webpack_require__(179),
|
||
getRawTag = __webpack_require__(182),
|
||
objectToString = __webpack_require__(183);
|
||
|
||
/** `Object#toString` result references. */
|
||
var nullTag = '[object Null]',
|
||
undefinedTag = '[object Undefined]';
|
||
|
||
/** Built-in value references. */
|
||
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = baseGetTag;
|
||
|
||
|
||
/***/ },
|
||
/* 179 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var root = __webpack_require__(180);
|
||
|
||
/** Built-in value references. */
|
||
var Symbol = root.Symbol;
|
||
|
||
module.exports = Symbol;
|
||
|
||
|
||
/***/ },
|
||
/* 180 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var freeGlobal = __webpack_require__(181);
|
||
|
||
/** 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')();
|
||
|
||
module.exports = root;
|
||
|
||
|
||
/***/ },
|
||
/* 181 */
|
||
/***/ function(module, exports) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */
|
||
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
|
||
|
||
module.exports = freeGlobal;
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
|
||
|
||
/***/ },
|
||
/* 182 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Symbol = __webpack_require__(179);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* Used to resolve the
|
||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||
* of values.
|
||
*/
|
||
var nativeObjectToString = objectProto.toString;
|
||
|
||
/** Built-in value references. */
|
||
var symToStringTag = Symbol ? Symbol.toStringTag : 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;
|
||
}
|
||
|
||
module.exports = getRawTag;
|
||
|
||
|
||
/***/ },
|
||
/* 183 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/**
|
||
* Used to resolve the
|
||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||
* of values.
|
||
*/
|
||
var nativeObjectToString = objectProto.toString;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = objectToString;
|
||
|
||
|
||
/***/ },
|
||
/* 184 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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');
|
||
}
|
||
|
||
module.exports = isObject;
|
||
|
||
|
||
/***/ },
|
||
/* 185 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var coreJsData = __webpack_require__(186);
|
||
|
||
/** 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) : '';
|
||
}());
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = isMasked;
|
||
|
||
|
||
/***/ },
|
||
/* 186 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var root = __webpack_require__(180);
|
||
|
||
/** Used to detect overreaching core-js shims. */
|
||
var coreJsData = root['__core-js_shared__'];
|
||
|
||
module.exports = coreJsData;
|
||
|
||
|
||
/***/ },
|
||
/* 187 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used for built-in method references. */
|
||
var funcProto = Function.prototype;
|
||
|
||
/** Used to resolve the decompiled source of functions. */
|
||
var funcToString = funcProto.toString;
|
||
|
||
/**
|
||
* 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 '';
|
||
}
|
||
|
||
module.exports = toSource;
|
||
|
||
|
||
/***/ },
|
||
/* 188 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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];
|
||
}
|
||
|
||
module.exports = getValue;
|
||
|
||
|
||
/***/ },
|
||
/* 189 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var createCtor = __webpack_require__(190),
|
||
root = __webpack_require__(180);
|
||
|
||
/** Used to compose bitmasks for function metadata. */
|
||
var WRAP_BIND_FLAG = 1;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = createBind;
|
||
|
||
|
||
/***/ },
|
||
/* 190 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseCreate = __webpack_require__(191),
|
||
isObject = __webpack_require__(184);
|
||
|
||
/**
|
||
* 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;
|
||
};
|
||
}
|
||
|
||
module.exports = createCtor;
|
||
|
||
|
||
/***/ },
|
||
/* 191 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isObject = __webpack_require__(184);
|
||
|
||
/** Built-in value references. */
|
||
var objectCreate = Object.create;
|
||
|
||
/**
|
||
* 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;
|
||
};
|
||
}());
|
||
|
||
module.exports = baseCreate;
|
||
|
||
|
||
/***/ },
|
||
/* 192 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var apply = __webpack_require__(193),
|
||
createCtor = __webpack_require__(190),
|
||
createHybrid = __webpack_require__(194),
|
||
createRecurry = __webpack_require__(198),
|
||
getHolder = __webpack_require__(228),
|
||
replaceHolders = __webpack_require__(231),
|
||
root = __webpack_require__(180);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = createCurry;
|
||
|
||
|
||
/***/ },
|
||
/* 193 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = apply;
|
||
|
||
|
||
/***/ },
|
||
/* 194 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var composeArgs = __webpack_require__(195),
|
||
composeArgsRight = __webpack_require__(196),
|
||
countHolders = __webpack_require__(197),
|
||
createCtor = __webpack_require__(190),
|
||
createRecurry = __webpack_require__(198),
|
||
getHolder = __webpack_require__(228),
|
||
reorder = __webpack_require__(229),
|
||
replaceHolders = __webpack_require__(231),
|
||
root = __webpack_require__(180);
|
||
|
||
/** Used to compose bitmasks for function metadata. */
|
||
var WRAP_BIND_FLAG = 1,
|
||
WRAP_BIND_KEY_FLAG = 2,
|
||
WRAP_CURRY_FLAG = 8,
|
||
WRAP_CURRY_RIGHT_FLAG = 16,
|
||
WRAP_ARY_FLAG = 128,
|
||
WRAP_FLIP_FLAG = 512;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = createHybrid;
|
||
|
||
|
||
/***/ },
|
||
/* 195 */
|
||
/***/ function(module, exports) {
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeMax = Math.max;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = composeArgs;
|
||
|
||
|
||
/***/ },
|
||
/* 196 */
|
||
/***/ function(module, exports) {
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeMax = Math.max;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = composeArgsRight;
|
||
|
||
|
||
/***/ },
|
||
/* 197 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = countHolders;
|
||
|
||
|
||
/***/ },
|
||
/* 198 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isLaziable = __webpack_require__(199),
|
||
setData = __webpack_require__(212),
|
||
setWrapToString = __webpack_require__(214);
|
||
|
||
/** 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_PARTIAL_FLAG = 32,
|
||
WRAP_PARTIAL_RIGHT_FLAG = 64;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = createRecurry;
|
||
|
||
|
||
/***/ },
|
||
/* 199 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var LazyWrapper = __webpack_require__(200),
|
||
getData = __webpack_require__(202),
|
||
getFuncName = __webpack_require__(204),
|
||
lodash = __webpack_require__(206);
|
||
|
||
/**
|
||
* 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];
|
||
}
|
||
|
||
module.exports = isLaziable;
|
||
|
||
|
||
/***/ },
|
||
/* 200 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseCreate = __webpack_require__(191),
|
||
baseLodash = __webpack_require__(201);
|
||
|
||
/** Used as references for the maximum length and index of an array. */
|
||
var MAX_ARRAY_LENGTH = 4294967295;
|
||
|
||
/**
|
||
* 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__ = [];
|
||
}
|
||
|
||
// Ensure `LazyWrapper` is an instance of `baseLodash`.
|
||
LazyWrapper.prototype = baseCreate(baseLodash.prototype);
|
||
LazyWrapper.prototype.constructor = LazyWrapper;
|
||
|
||
module.exports = LazyWrapper;
|
||
|
||
|
||
/***/ },
|
||
/* 201 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* The function whose prototype chain sequence wrappers inherit from.
|
||
*
|
||
* @private
|
||
*/
|
||
function baseLodash() {
|
||
// No operation performed.
|
||
}
|
||
|
||
module.exports = baseLodash;
|
||
|
||
|
||
/***/ },
|
||
/* 202 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var metaMap = __webpack_require__(173),
|
||
noop = __webpack_require__(203);
|
||
|
||
/**
|
||
* 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);
|
||
};
|
||
|
||
module.exports = getData;
|
||
|
||
|
||
/***/ },
|
||
/* 203 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* This method returns `undefined`.
|
||
*
|
||
* @static
|
||
* @memberOf _
|
||
* @since 2.3.0
|
||
* @category Util
|
||
* @example
|
||
*
|
||
* _.times(2, _.noop);
|
||
* // => [undefined, undefined]
|
||
*/
|
||
function noop() {
|
||
// No operation performed.
|
||
}
|
||
|
||
module.exports = noop;
|
||
|
||
|
||
/***/ },
|
||
/* 204 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var realNames = __webpack_require__(205);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = getFuncName;
|
||
|
||
|
||
/***/ },
|
||
/* 205 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used to lookup unminified function names. */
|
||
var realNames = {};
|
||
|
||
module.exports = realNames;
|
||
|
||
|
||
/***/ },
|
||
/* 206 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var LazyWrapper = __webpack_require__(200),
|
||
LodashWrapper = __webpack_require__(207),
|
||
baseLodash = __webpack_require__(201),
|
||
isArray = __webpack_require__(208),
|
||
isObjectLike = __webpack_require__(209),
|
||
wrapperClone = __webpack_require__(210);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
// Ensure wrappers are instances of `baseLodash`.
|
||
lodash.prototype = baseLodash.prototype;
|
||
lodash.prototype.constructor = lodash;
|
||
|
||
module.exports = lodash;
|
||
|
||
|
||
/***/ },
|
||
/* 207 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseCreate = __webpack_require__(191),
|
||
baseLodash = __webpack_require__(201);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
LodashWrapper.prototype = baseCreate(baseLodash.prototype);
|
||
LodashWrapper.prototype.constructor = LodashWrapper;
|
||
|
||
module.exports = LodashWrapper;
|
||
|
||
|
||
/***/ },
|
||
/* 208 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
|
||
module.exports = isArray;
|
||
|
||
|
||
/***/ },
|
||
/* 209 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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';
|
||
}
|
||
|
||
module.exports = isObjectLike;
|
||
|
||
|
||
/***/ },
|
||
/* 210 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var LazyWrapper = __webpack_require__(200),
|
||
LodashWrapper = __webpack_require__(207),
|
||
copyArray = __webpack_require__(211);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = wrapperClone;
|
||
|
||
|
||
/***/ },
|
||
/* 211 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = copyArray;
|
||
|
||
|
||
/***/ },
|
||
/* 212 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseSetData = __webpack_require__(171),
|
||
shortOut = __webpack_require__(213);
|
||
|
||
/**
|
||
* 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);
|
||
|
||
module.exports = setData;
|
||
|
||
|
||
/***/ },
|
||
/* 213 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used to detect hot functions by number of calls within a span of milliseconds. */
|
||
var HOT_COUNT = 800,
|
||
HOT_SPAN = 16;
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeNow = Date.now;
|
||
|
||
/**
|
||
* 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);
|
||
};
|
||
}
|
||
|
||
module.exports = shortOut;
|
||
|
||
|
||
/***/ },
|
||
/* 214 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getWrapDetails = __webpack_require__(215),
|
||
insertWrapDetails = __webpack_require__(216),
|
||
setToString = __webpack_require__(217),
|
||
updateWrapDetails = __webpack_require__(221);
|
||
|
||
/**
|
||
* 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)));
|
||
}
|
||
|
||
module.exports = setWrapToString;
|
||
|
||
|
||
/***/ },
|
||
/* 215 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used to match wrap detail comments. */
|
||
var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
|
||
reSplitDetails = /,? & /;
|
||
|
||
/**
|
||
* 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) : [];
|
||
}
|
||
|
||
module.exports = getWrapDetails;
|
||
|
||
|
||
/***/ },
|
||
/* 216 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used to match wrap detail comments. */
|
||
var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;
|
||
|
||
/**
|
||
* 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');
|
||
}
|
||
|
||
module.exports = insertWrapDetails;
|
||
|
||
|
||
/***/ },
|
||
/* 217 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseSetToString = __webpack_require__(218),
|
||
shortOut = __webpack_require__(213);
|
||
|
||
/**
|
||
* 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);
|
||
|
||
module.exports = setToString;
|
||
|
||
|
||
/***/ },
|
||
/* 218 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var constant = __webpack_require__(219),
|
||
defineProperty = __webpack_require__(220),
|
||
identity = __webpack_require__(172);
|
||
|
||
/**
|
||
* 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
|
||
});
|
||
};
|
||
|
||
module.exports = baseSetToString;
|
||
|
||
|
||
/***/ },
|
||
/* 219 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
};
|
||
}
|
||
|
||
module.exports = constant;
|
||
|
||
|
||
/***/ },
|
||
/* 220 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getNative = __webpack_require__(175);
|
||
|
||
var defineProperty = (function() {
|
||
try {
|
||
var func = getNative(Object, 'defineProperty');
|
||
func({}, '', {});
|
||
return func;
|
||
} catch (e) {}
|
||
}());
|
||
|
||
module.exports = defineProperty;
|
||
|
||
|
||
/***/ },
|
||
/* 221 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var arrayEach = __webpack_require__(222),
|
||
arrayIncludes = __webpack_require__(223);
|
||
|
||
/** Used to compose bitmasks for function metadata. */
|
||
var WRAP_BIND_FLAG = 1,
|
||
WRAP_BIND_KEY_FLAG = 2,
|
||
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 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]
|
||
];
|
||
|
||
/**
|
||
* 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();
|
||
}
|
||
|
||
module.exports = updateWrapDetails;
|
||
|
||
|
||
/***/ },
|
||
/* 222 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = arrayEach;
|
||
|
||
|
||
/***/ },
|
||
/* 223 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseIndexOf = __webpack_require__(224);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = arrayIncludes;
|
||
|
||
|
||
/***/ },
|
||
/* 224 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseFindIndex = __webpack_require__(225),
|
||
baseIsNaN = __webpack_require__(226),
|
||
strictIndexOf = __webpack_require__(227);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = baseIndexOf;
|
||
|
||
|
||
/***/ },
|
||
/* 225 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseFindIndex;
|
||
|
||
|
||
/***/ },
|
||
/* 226 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseIsNaN;
|
||
|
||
|
||
/***/ },
|
||
/* 227 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = strictIndexOf;
|
||
|
||
|
||
/***/ },
|
||
/* 228 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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 = func;
|
||
return object.placeholder;
|
||
}
|
||
|
||
module.exports = getHolder;
|
||
|
||
|
||
/***/ },
|
||
/* 229 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var copyArray = __webpack_require__(211),
|
||
isIndex = __webpack_require__(230);
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeMin = Math.min;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = reorder;
|
||
|
||
|
||
/***/ },
|
||
/* 230 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used as references for various `Number` constants. */
|
||
var MAX_SAFE_INTEGER = 9007199254740991;
|
||
|
||
/** Used to detect unsigned integer values. */
|
||
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
||
|
||
/**
|
||
* 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) {
|
||
length = length == null ? MAX_SAFE_INTEGER : length;
|
||
return !!length &&
|
||
(typeof value == 'number' || reIsUint.test(value)) &&
|
||
(value > -1 && value % 1 == 0 && value < length);
|
||
}
|
||
|
||
module.exports = isIndex;
|
||
|
||
|
||
/***/ },
|
||
/* 231 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used as the internal argument placeholder. */
|
||
var PLACEHOLDER = '__lodash_placeholder__';
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = replaceHolders;
|
||
|
||
|
||
/***/ },
|
||
/* 232 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var apply = __webpack_require__(193),
|
||
createCtor = __webpack_require__(190),
|
||
root = __webpack_require__(180);
|
||
|
||
/** Used to compose bitmasks for function metadata. */
|
||
var WRAP_BIND_FLAG = 1;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = createPartial;
|
||
|
||
|
||
/***/ },
|
||
/* 233 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var composeArgs = __webpack_require__(195),
|
||
composeArgsRight = __webpack_require__(196),
|
||
replaceHolders = __webpack_require__(231);
|
||
|
||
/** Used as the internal argument placeholder. */
|
||
var PLACEHOLDER = '__lodash_placeholder__';
|
||
|
||
/** 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_ARY_FLAG = 128,
|
||
WRAP_REARG_FLAG = 256;
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeMin = Math.min;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = mergeData;
|
||
|
||
|
||
/***/ },
|
||
/* 234 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var toFinite = __webpack_require__(235);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = toInteger;
|
||
|
||
|
||
/***/ },
|
||
/* 235 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var toNumber = __webpack_require__(236);
|
||
|
||
/** Used as references for various `Number` constants. */
|
||
var INFINITY = 1 / 0,
|
||
MAX_INTEGER = 1.7976931348623157e+308;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = toFinite;
|
||
|
||
|
||
/***/ },
|
||
/* 236 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isObject = __webpack_require__(184),
|
||
isSymbol = __webpack_require__(237);
|
||
|
||
/** Used as references for various `Number` constants. */
|
||
var NAN = 0 / 0;
|
||
|
||
/** Used to match leading and trailing whitespace. */
|
||
var reTrim = /^\s+|\s+$/g;
|
||
|
||
/** 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 octal string values. */
|
||
var reIsOctal = /^0o[0-7]+$/i;
|
||
|
||
/** Built-in method references without a dependency on `root`. */
|
||
var freeParseInt = parseInt;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = toNumber;
|
||
|
||
|
||
/***/ },
|
||
/* 237 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseGetTag = __webpack_require__(178),
|
||
isObjectLike = __webpack_require__(209);
|
||
|
||
/** `Object#toString` result references. */
|
||
var symbolTag = '[object Symbol]';
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = isSymbol;
|
||
|
||
|
||
/***/ },
|
||
/* 238 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var copyObject = __webpack_require__(239),
|
||
keys = __webpack_require__(243);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = baseAssign;
|
||
|
||
|
||
/***/ },
|
||
/* 239 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var assignValue = __webpack_require__(240),
|
||
baseAssignValue = __webpack_require__(241);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = copyObject;
|
||
|
||
|
||
/***/ },
|
||
/* 240 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseAssignValue = __webpack_require__(241),
|
||
eq = __webpack_require__(242);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
}
|
||
|
||
module.exports = assignValue;
|
||
|
||
|
||
/***/ },
|
||
/* 241 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var defineProperty = __webpack_require__(220);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
}
|
||
|
||
module.exports = baseAssignValue;
|
||
|
||
|
||
/***/ },
|
||
/* 242 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = eq;
|
||
|
||
|
||
/***/ },
|
||
/* 243 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var arrayLikeKeys = __webpack_require__(244),
|
||
baseKeys = __webpack_require__(255),
|
||
isArrayLike = __webpack_require__(259);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = keys;
|
||
|
||
|
||
/***/ },
|
||
/* 244 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseTimes = __webpack_require__(245),
|
||
isArguments = __webpack_require__(246),
|
||
isArray = __webpack_require__(208),
|
||
isBuffer = __webpack_require__(248),
|
||
isIndex = __webpack_require__(230),
|
||
isTypedArray = __webpack_require__(250);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = arrayLikeKeys;
|
||
|
||
|
||
/***/ },
|
||
/* 245 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseTimes;
|
||
|
||
|
||
/***/ },
|
||
/* 246 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseIsArguments = __webpack_require__(247),
|
||
isObjectLike = __webpack_require__(209);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/** Built-in value references. */
|
||
var propertyIsEnumerable = objectProto.propertyIsEnumerable;
|
||
|
||
/**
|
||
* 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');
|
||
};
|
||
|
||
module.exports = isArguments;
|
||
|
||
|
||
/***/ },
|
||
/* 247 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseGetTag = __webpack_require__(178),
|
||
isObjectLike = __webpack_require__(209);
|
||
|
||
/** `Object#toString` result references. */
|
||
var argsTag = '[object Arguments]';
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseIsArguments;
|
||
|
||
|
||
/***/ },
|
||
/* 248 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(180),
|
||
stubFalse = __webpack_require__(249);
|
||
|
||
/** 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;
|
||
|
||
/** Built-in value references. */
|
||
var Buffer = moduleExports ? root.Buffer : undefined;
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
|
||
|
||
/**
|
||
* 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;
|
||
|
||
module.exports = isBuffer;
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(39)(module)))
|
||
|
||
/***/ },
|
||
/* 249 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = stubFalse;
|
||
|
||
|
||
/***/ },
|
||
/* 250 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseIsTypedArray = __webpack_require__(251),
|
||
baseUnary = __webpack_require__(253),
|
||
nodeUtil = __webpack_require__(254);
|
||
|
||
/* Node.js helper references. */
|
||
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
|
||
|
||
/**
|
||
* 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;
|
||
|
||
module.exports = isTypedArray;
|
||
|
||
|
||
/***/ },
|
||
/* 251 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseGetTag = __webpack_require__(178),
|
||
isLength = __webpack_require__(252),
|
||
isObjectLike = __webpack_require__(209);
|
||
|
||
/** `Object#toString` result references. */
|
||
var argsTag = '[object Arguments]',
|
||
arrayTag = '[object Array]',
|
||
boolTag = '[object Boolean]',
|
||
dateTag = '[object Date]',
|
||
errorTag = '[object Error]',
|
||
funcTag = '[object Function]',
|
||
mapTag = '[object Map]',
|
||
numberTag = '[object Number]',
|
||
objectTag = '[object Object]',
|
||
regexpTag = '[object RegExp]',
|
||
setTag = '[object Set]',
|
||
stringTag = '[object String]',
|
||
weakMapTag = '[object WeakMap]';
|
||
|
||
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 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;
|
||
|
||
/**
|
||
* 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)];
|
||
}
|
||
|
||
module.exports = baseIsTypedArray;
|
||
|
||
|
||
/***/ },
|
||
/* 252 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used as references for various `Number` constants. */
|
||
var MAX_SAFE_INTEGER = 9007199254740991;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = isLength;
|
||
|
||
|
||
/***/ },
|
||
/* 253 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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);
|
||
};
|
||
}
|
||
|
||
module.exports = baseUnary;
|
||
|
||
|
||
/***/ },
|
||
/* 254 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(181);
|
||
|
||
/** 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 {
|
||
return freeProcess && freeProcess.binding && freeProcess.binding('util');
|
||
} catch (e) {}
|
||
}());
|
||
|
||
module.exports = nodeUtil;
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(39)(module)))
|
||
|
||
/***/ },
|
||
/* 255 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isPrototype = __webpack_require__(256),
|
||
nativeKeys = __webpack_require__(257);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseKeys;
|
||
|
||
|
||
/***/ },
|
||
/* 256 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = isPrototype;
|
||
|
||
|
||
/***/ },
|
||
/* 257 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var overArg = __webpack_require__(258);
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeKeys = overArg(Object.keys, Object);
|
||
|
||
module.exports = nativeKeys;
|
||
|
||
|
||
/***/ },
|
||
/* 258 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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));
|
||
};
|
||
}
|
||
|
||
module.exports = overArg;
|
||
|
||
|
||
/***/ },
|
||
/* 259 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isFunction = __webpack_require__(177),
|
||
isLength = __webpack_require__(252);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = isArrayLike;
|
||
|
||
|
||
/***/ },
|
||
/* 260 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseClone = __webpack_require__(261);
|
||
|
||
/** Used to compose bitmasks for cloning. */
|
||
var CLONE_SYMBOLS_FLAG = 4;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = clone;
|
||
|
||
|
||
/***/ },
|
||
/* 261 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Stack = __webpack_require__(262),
|
||
arrayEach = __webpack_require__(222),
|
||
assignValue = __webpack_require__(240),
|
||
baseAssign = __webpack_require__(238),
|
||
baseAssignIn = __webpack_require__(291),
|
||
cloneBuffer = __webpack_require__(295),
|
||
copyArray = __webpack_require__(211),
|
||
copySymbols = __webpack_require__(296),
|
||
copySymbolsIn = __webpack_require__(300),
|
||
getAllKeys = __webpack_require__(304),
|
||
getAllKeysIn = __webpack_require__(306),
|
||
getTag = __webpack_require__(307),
|
||
initCloneArray = __webpack_require__(311),
|
||
initCloneByTag = __webpack_require__(312),
|
||
initCloneObject = __webpack_require__(326),
|
||
isArray = __webpack_require__(208),
|
||
isBuffer = __webpack_require__(248),
|
||
isObject = __webpack_require__(184),
|
||
keys = __webpack_require__(243);
|
||
|
||
/** Used to compose bitmasks for cloning. */
|
||
var CLONE_DEEP_FLAG = 1,
|
||
CLONE_FLAT_FLAG = 2,
|
||
CLONE_SYMBOLS_FLAG = 4;
|
||
|
||
/** `Object#toString` result references. */
|
||
var argsTag = '[object Arguments]',
|
||
arrayTag = '[object Array]',
|
||
boolTag = '[object Boolean]',
|
||
dateTag = '[object Date]',
|
||
errorTag = '[object Error]',
|
||
funcTag = '[object Function]',
|
||
genTag = '[object GeneratorFunction]',
|
||
mapTag = '[object Map]',
|
||
numberTag = '[object Number]',
|
||
objectTag = '[object Object]',
|
||
regexpTag = '[object RegExp]',
|
||
setTag = '[object Set]',
|
||
stringTag = '[object String]',
|
||
symbolTag = '[object Symbol]',
|
||
weakMapTag = '[object WeakMap]';
|
||
|
||
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 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;
|
||
|
||
/**
|
||
* 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, baseClone, 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);
|
||
|
||
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;
|
||
}
|
||
|
||
module.exports = baseClone;
|
||
|
||
|
||
/***/ },
|
||
/* 262 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var ListCache = __webpack_require__(263),
|
||
stackClear = __webpack_require__(270),
|
||
stackDelete = __webpack_require__(271),
|
||
stackGet = __webpack_require__(272),
|
||
stackHas = __webpack_require__(273),
|
||
stackSet = __webpack_require__(274);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
// Add methods to `Stack`.
|
||
Stack.prototype.clear = stackClear;
|
||
Stack.prototype['delete'] = stackDelete;
|
||
Stack.prototype.get = stackGet;
|
||
Stack.prototype.has = stackHas;
|
||
Stack.prototype.set = stackSet;
|
||
|
||
module.exports = Stack;
|
||
|
||
|
||
/***/ },
|
||
/* 263 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var listCacheClear = __webpack_require__(264),
|
||
listCacheDelete = __webpack_require__(265),
|
||
listCacheGet = __webpack_require__(267),
|
||
listCacheHas = __webpack_require__(268),
|
||
listCacheSet = __webpack_require__(269);
|
||
|
||
/**
|
||
* 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]);
|
||
}
|
||
}
|
||
|
||
// Add methods to `ListCache`.
|
||
ListCache.prototype.clear = listCacheClear;
|
||
ListCache.prototype['delete'] = listCacheDelete;
|
||
ListCache.prototype.get = listCacheGet;
|
||
ListCache.prototype.has = listCacheHas;
|
||
ListCache.prototype.set = listCacheSet;
|
||
|
||
module.exports = ListCache;
|
||
|
||
|
||
/***/ },
|
||
/* 264 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* Removes all key-value entries from the list cache.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf ListCache
|
||
*/
|
||
function listCacheClear() {
|
||
this.__data__ = [];
|
||
this.size = 0;
|
||
}
|
||
|
||
module.exports = listCacheClear;
|
||
|
||
|
||
/***/ },
|
||
/* 265 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var assocIndexOf = __webpack_require__(266);
|
||
|
||
/** Used for built-in method references. */
|
||
var arrayProto = Array.prototype;
|
||
|
||
/** Built-in value references. */
|
||
var splice = arrayProto.splice;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = listCacheDelete;
|
||
|
||
|
||
/***/ },
|
||
/* 266 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var eq = __webpack_require__(242);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = assocIndexOf;
|
||
|
||
|
||
/***/ },
|
||
/* 267 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var assocIndexOf = __webpack_require__(266);
|
||
|
||
/**
|
||
* 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];
|
||
}
|
||
|
||
module.exports = listCacheGet;
|
||
|
||
|
||
/***/ },
|
||
/* 268 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var assocIndexOf = __webpack_require__(266);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = listCacheHas;
|
||
|
||
|
||
/***/ },
|
||
/* 269 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var assocIndexOf = __webpack_require__(266);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = listCacheSet;
|
||
|
||
|
||
/***/ },
|
||
/* 270 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var ListCache = __webpack_require__(263);
|
||
|
||
/**
|
||
* Removes all key-value entries from the stack.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf Stack
|
||
*/
|
||
function stackClear() {
|
||
this.__data__ = new ListCache;
|
||
this.size = 0;
|
||
}
|
||
|
||
module.exports = stackClear;
|
||
|
||
|
||
/***/ },
|
||
/* 271 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = stackDelete;
|
||
|
||
|
||
/***/ },
|
||
/* 272 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = stackGet;
|
||
|
||
|
||
/***/ },
|
||
/* 273 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = stackHas;
|
||
|
||
|
||
/***/ },
|
||
/* 274 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var ListCache = __webpack_require__(263),
|
||
Map = __webpack_require__(275),
|
||
MapCache = __webpack_require__(276);
|
||
|
||
/** Used as the size to enable large array optimizations. */
|
||
var LARGE_ARRAY_SIZE = 200;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = stackSet;
|
||
|
||
|
||
/***/ },
|
||
/* 275 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getNative = __webpack_require__(175),
|
||
root = __webpack_require__(180);
|
||
|
||
/* Built-in method references that are verified to be native. */
|
||
var Map = getNative(root, 'Map');
|
||
|
||
module.exports = Map;
|
||
|
||
|
||
/***/ },
|
||
/* 276 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var mapCacheClear = __webpack_require__(277),
|
||
mapCacheDelete = __webpack_require__(285),
|
||
mapCacheGet = __webpack_require__(288),
|
||
mapCacheHas = __webpack_require__(289),
|
||
mapCacheSet = __webpack_require__(290);
|
||
|
||
/**
|
||
* 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]);
|
||
}
|
||
}
|
||
|
||
// Add methods to `MapCache`.
|
||
MapCache.prototype.clear = mapCacheClear;
|
||
MapCache.prototype['delete'] = mapCacheDelete;
|
||
MapCache.prototype.get = mapCacheGet;
|
||
MapCache.prototype.has = mapCacheHas;
|
||
MapCache.prototype.set = mapCacheSet;
|
||
|
||
module.exports = MapCache;
|
||
|
||
|
||
/***/ },
|
||
/* 277 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Hash = __webpack_require__(278),
|
||
ListCache = __webpack_require__(263),
|
||
Map = __webpack_require__(275);
|
||
|
||
/**
|
||
* 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
|
||
};
|
||
}
|
||
|
||
module.exports = mapCacheClear;
|
||
|
||
|
||
/***/ },
|
||
/* 278 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var hashClear = __webpack_require__(279),
|
||
hashDelete = __webpack_require__(281),
|
||
hashGet = __webpack_require__(282),
|
||
hashHas = __webpack_require__(283),
|
||
hashSet = __webpack_require__(284);
|
||
|
||
/**
|
||
* 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]);
|
||
}
|
||
}
|
||
|
||
// Add methods to `Hash`.
|
||
Hash.prototype.clear = hashClear;
|
||
Hash.prototype['delete'] = hashDelete;
|
||
Hash.prototype.get = hashGet;
|
||
Hash.prototype.has = hashHas;
|
||
Hash.prototype.set = hashSet;
|
||
|
||
module.exports = Hash;
|
||
|
||
|
||
/***/ },
|
||
/* 279 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var nativeCreate = __webpack_require__(280);
|
||
|
||
/**
|
||
* Removes all key-value entries from the hash.
|
||
*
|
||
* @private
|
||
* @name clear
|
||
* @memberOf Hash
|
||
*/
|
||
function hashClear() {
|
||
this.__data__ = nativeCreate ? nativeCreate(null) : {};
|
||
this.size = 0;
|
||
}
|
||
|
||
module.exports = hashClear;
|
||
|
||
|
||
/***/ },
|
||
/* 280 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getNative = __webpack_require__(175);
|
||
|
||
/* Built-in method references that are verified to be native. */
|
||
var nativeCreate = getNative(Object, 'create');
|
||
|
||
module.exports = nativeCreate;
|
||
|
||
|
||
/***/ },
|
||
/* 281 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = hashDelete;
|
||
|
||
|
||
/***/ },
|
||
/* 282 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var nativeCreate = __webpack_require__(280);
|
||
|
||
/** Used to stand-in for `undefined` hash values. */
|
||
var HASH_UNDEFINED = '__lodash_hash_undefined__';
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = hashGet;
|
||
|
||
|
||
/***/ },
|
||
/* 283 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var nativeCreate = __webpack_require__(280);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = hashHas;
|
||
|
||
|
||
/***/ },
|
||
/* 284 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var nativeCreate = __webpack_require__(280);
|
||
|
||
/** Used to stand-in for `undefined` hash values. */
|
||
var HASH_UNDEFINED = '__lodash_hash_undefined__';
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = hashSet;
|
||
|
||
|
||
/***/ },
|
||
/* 285 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getMapData = __webpack_require__(286);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = mapCacheDelete;
|
||
|
||
|
||
/***/ },
|
||
/* 286 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isKeyable = __webpack_require__(287);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = getMapData;
|
||
|
||
|
||
/***/ },
|
||
/* 287 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = isKeyable;
|
||
|
||
|
||
/***/ },
|
||
/* 288 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getMapData = __webpack_require__(286);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = mapCacheGet;
|
||
|
||
|
||
/***/ },
|
||
/* 289 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getMapData = __webpack_require__(286);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = mapCacheHas;
|
||
|
||
|
||
/***/ },
|
||
/* 290 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getMapData = __webpack_require__(286);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = mapCacheSet;
|
||
|
||
|
||
/***/ },
|
||
/* 291 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var copyObject = __webpack_require__(239),
|
||
keysIn = __webpack_require__(292);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = baseAssignIn;
|
||
|
||
|
||
/***/ },
|
||
/* 292 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var arrayLikeKeys = __webpack_require__(244),
|
||
baseKeysIn = __webpack_require__(293),
|
||
isArrayLike = __webpack_require__(259);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = keysIn;
|
||
|
||
|
||
/***/ },
|
||
/* 293 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isObject = __webpack_require__(184),
|
||
isPrototype = __webpack_require__(256),
|
||
nativeKeysIn = __webpack_require__(294);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseKeysIn;
|
||
|
||
|
||
/***/ },
|
||
/* 294 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = nativeKeysIn;
|
||
|
||
|
||
/***/ },
|
||
/* 295 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(180);
|
||
|
||
/** 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;
|
||
|
||
/** Built-in value references. */
|
||
var Buffer = moduleExports ? root.Buffer : undefined,
|
||
allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = cloneBuffer;
|
||
|
||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(39)(module)))
|
||
|
||
/***/ },
|
||
/* 296 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var copyObject = __webpack_require__(239),
|
||
getSymbols = __webpack_require__(297);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = copySymbols;
|
||
|
||
|
||
/***/ },
|
||
/* 297 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var arrayFilter = __webpack_require__(298),
|
||
stubArray = __webpack_require__(299);
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Built-in value references. */
|
||
var propertyIsEnumerable = objectProto.propertyIsEnumerable;
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeGetSymbols = Object.getOwnPropertySymbols;
|
||
|
||
/**
|
||
* 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);
|
||
});
|
||
};
|
||
|
||
module.exports = getSymbols;
|
||
|
||
|
||
/***/ },
|
||
/* 298 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = arrayFilter;
|
||
|
||
|
||
/***/ },
|
||
/* 299 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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 [];
|
||
}
|
||
|
||
module.exports = stubArray;
|
||
|
||
|
||
/***/ },
|
||
/* 300 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var copyObject = __webpack_require__(239),
|
||
getSymbolsIn = __webpack_require__(301);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = copySymbolsIn;
|
||
|
||
|
||
/***/ },
|
||
/* 301 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var arrayPush = __webpack_require__(302),
|
||
getPrototype = __webpack_require__(303),
|
||
getSymbols = __webpack_require__(297),
|
||
stubArray = __webpack_require__(299);
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeGetSymbols = Object.getOwnPropertySymbols;
|
||
|
||
/**
|
||
* 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;
|
||
};
|
||
|
||
module.exports = getSymbolsIn;
|
||
|
||
|
||
/***/ },
|
||
/* 302 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = arrayPush;
|
||
|
||
|
||
/***/ },
|
||
/* 303 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var overArg = __webpack_require__(258);
|
||
|
||
/** Built-in value references. */
|
||
var getPrototype = overArg(Object.getPrototypeOf, Object);
|
||
|
||
module.exports = getPrototype;
|
||
|
||
|
||
/***/ },
|
||
/* 304 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseGetAllKeys = __webpack_require__(305),
|
||
getSymbols = __webpack_require__(297),
|
||
keys = __webpack_require__(243);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = getAllKeys;
|
||
|
||
|
||
/***/ },
|
||
/* 305 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var arrayPush = __webpack_require__(302),
|
||
isArray = __webpack_require__(208);
|
||
|
||
/**
|
||
* 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));
|
||
}
|
||
|
||
module.exports = baseGetAllKeys;
|
||
|
||
|
||
/***/ },
|
||
/* 306 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseGetAllKeys = __webpack_require__(305),
|
||
getSymbolsIn = __webpack_require__(301),
|
||
keysIn = __webpack_require__(292);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = getAllKeysIn;
|
||
|
||
|
||
/***/ },
|
||
/* 307 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var DataView = __webpack_require__(308),
|
||
Map = __webpack_require__(275),
|
||
Promise = __webpack_require__(309),
|
||
Set = __webpack_require__(310),
|
||
WeakMap = __webpack_require__(174),
|
||
baseGetTag = __webpack_require__(178),
|
||
toSource = __webpack_require__(187);
|
||
|
||
/** `Object#toString` result references. */
|
||
var mapTag = '[object Map]',
|
||
objectTag = '[object Object]',
|
||
promiseTag = '[object Promise]',
|
||
setTag = '[object Set]',
|
||
weakMapTag = '[object WeakMap]';
|
||
|
||
var dataViewTag = '[object DataView]';
|
||
|
||
/** Used to detect maps, sets, and weakmaps. */
|
||
var dataViewCtorString = toSource(DataView),
|
||
mapCtorString = toSource(Map),
|
||
promiseCtorString = toSource(Promise),
|
||
setCtorString = toSource(Set),
|
||
weakMapCtorString = toSource(WeakMap);
|
||
|
||
/**
|
||
* 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;
|
||
};
|
||
}
|
||
|
||
module.exports = getTag;
|
||
|
||
|
||
/***/ },
|
||
/* 308 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getNative = __webpack_require__(175),
|
||
root = __webpack_require__(180);
|
||
|
||
/* Built-in method references that are verified to be native. */
|
||
var DataView = getNative(root, 'DataView');
|
||
|
||
module.exports = DataView;
|
||
|
||
|
||
/***/ },
|
||
/* 309 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getNative = __webpack_require__(175),
|
||
root = __webpack_require__(180);
|
||
|
||
/* Built-in method references that are verified to be native. */
|
||
var Promise = getNative(root, 'Promise');
|
||
|
||
module.exports = Promise;
|
||
|
||
|
||
/***/ },
|
||
/* 310 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getNative = __webpack_require__(175),
|
||
root = __webpack_require__(180);
|
||
|
||
/* Built-in method references that are verified to be native. */
|
||
var Set = getNative(root, 'Set');
|
||
|
||
module.exports = Set;
|
||
|
||
|
||
/***/ },
|
||
/* 311 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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 = 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;
|
||
}
|
||
|
||
module.exports = initCloneArray;
|
||
|
||
|
||
/***/ },
|
||
/* 312 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var cloneArrayBuffer = __webpack_require__(313),
|
||
cloneDataView = __webpack_require__(315),
|
||
cloneMap = __webpack_require__(316),
|
||
cloneRegExp = __webpack_require__(320),
|
||
cloneSet = __webpack_require__(321),
|
||
cloneSymbol = __webpack_require__(324),
|
||
cloneTypedArray = __webpack_require__(325);
|
||
|
||
/** `Object#toString` result references. */
|
||
var boolTag = '[object Boolean]',
|
||
dateTag = '[object Date]',
|
||
mapTag = '[object Map]',
|
||
numberTag = '[object Number]',
|
||
regexpTag = '[object RegExp]',
|
||
setTag = '[object Set]',
|
||
stringTag = '[object String]',
|
||
symbolTag = '[object Symbol]';
|
||
|
||
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]';
|
||
|
||
/**
|
||
* Initializes an object clone based on its `toStringTag`.
|
||
*
|
||
* **Note:** This function only supports cloning values with tags of
|
||
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
|
||
*
|
||
* @private
|
||
* @param {Object} object The object to clone.
|
||
* @param {string} tag The `toStringTag` of the object to clone.
|
||
* @param {Function} cloneFunc The function to clone values.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the initialized clone.
|
||
*/
|
||
function initCloneByTag(object, tag, cloneFunc, 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 cloneMap(object, isDeep, cloneFunc);
|
||
|
||
case numberTag:
|
||
case stringTag:
|
||
return new Ctor(object);
|
||
|
||
case regexpTag:
|
||
return cloneRegExp(object);
|
||
|
||
case setTag:
|
||
return cloneSet(object, isDeep, cloneFunc);
|
||
|
||
case symbolTag:
|
||
return cloneSymbol(object);
|
||
}
|
||
}
|
||
|
||
module.exports = initCloneByTag;
|
||
|
||
|
||
/***/ },
|
||
/* 313 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Uint8Array = __webpack_require__(314);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = cloneArrayBuffer;
|
||
|
||
|
||
/***/ },
|
||
/* 314 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var root = __webpack_require__(180);
|
||
|
||
/** Built-in value references. */
|
||
var Uint8Array = root.Uint8Array;
|
||
|
||
module.exports = Uint8Array;
|
||
|
||
|
||
/***/ },
|
||
/* 315 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var cloneArrayBuffer = __webpack_require__(313);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = cloneDataView;
|
||
|
||
|
||
/***/ },
|
||
/* 316 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var addMapEntry = __webpack_require__(317),
|
||
arrayReduce = __webpack_require__(318),
|
||
mapToArray = __webpack_require__(319);
|
||
|
||
/** Used to compose bitmasks for cloning. */
|
||
var CLONE_DEEP_FLAG = 1;
|
||
|
||
/**
|
||
* Creates a clone of `map`.
|
||
*
|
||
* @private
|
||
* @param {Object} map The map to clone.
|
||
* @param {Function} cloneFunc The function to clone values.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the cloned map.
|
||
*/
|
||
function cloneMap(map, isDeep, cloneFunc) {
|
||
var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);
|
||
return arrayReduce(array, addMapEntry, new map.constructor);
|
||
}
|
||
|
||
module.exports = cloneMap;
|
||
|
||
|
||
/***/ },
|
||
/* 317 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* Adds the key-value `pair` to `map`.
|
||
*
|
||
* @private
|
||
* @param {Object} map The map to modify.
|
||
* @param {Array} pair The key-value pair to add.
|
||
* @returns {Object} Returns `map`.
|
||
*/
|
||
function addMapEntry(map, pair) {
|
||
// Don't return `map.set` because it's not chainable in IE 11.
|
||
map.set(pair[0], pair[1]);
|
||
return map;
|
||
}
|
||
|
||
module.exports = addMapEntry;
|
||
|
||
|
||
/***/ },
|
||
/* 318 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = arrayReduce;
|
||
|
||
|
||
/***/ },
|
||
/* 319 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = mapToArray;
|
||
|
||
|
||
/***/ },
|
||
/* 320 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used to match `RegExp` flags from their coerced string values. */
|
||
var reFlags = /\w*$/;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = cloneRegExp;
|
||
|
||
|
||
/***/ },
|
||
/* 321 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var addSetEntry = __webpack_require__(322),
|
||
arrayReduce = __webpack_require__(318),
|
||
setToArray = __webpack_require__(323);
|
||
|
||
/** Used to compose bitmasks for cloning. */
|
||
var CLONE_DEEP_FLAG = 1;
|
||
|
||
/**
|
||
* Creates a clone of `set`.
|
||
*
|
||
* @private
|
||
* @param {Object} set The set to clone.
|
||
* @param {Function} cloneFunc The function to clone values.
|
||
* @param {boolean} [isDeep] Specify a deep clone.
|
||
* @returns {Object} Returns the cloned set.
|
||
*/
|
||
function cloneSet(set, isDeep, cloneFunc) {
|
||
var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);
|
||
return arrayReduce(array, addSetEntry, new set.constructor);
|
||
}
|
||
|
||
module.exports = cloneSet;
|
||
|
||
|
||
/***/ },
|
||
/* 322 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* Adds `value` to `set`.
|
||
*
|
||
* @private
|
||
* @param {Object} set The set to modify.
|
||
* @param {*} value The value to add.
|
||
* @returns {Object} Returns `set`.
|
||
*/
|
||
function addSetEntry(set, value) {
|
||
// Don't return `set.add` because it's not chainable in IE 11.
|
||
set.add(value);
|
||
return set;
|
||
}
|
||
|
||
module.exports = addSetEntry;
|
||
|
||
|
||
/***/ },
|
||
/* 323 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = setToArray;
|
||
|
||
|
||
/***/ },
|
||
/* 324 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Symbol = __webpack_require__(179);
|
||
|
||
/** Used to convert symbols to primitives and strings. */
|
||
var symbolProto = Symbol ? Symbol.prototype : undefined,
|
||
symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
|
||
|
||
/**
|
||
* 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)) : {};
|
||
}
|
||
|
||
module.exports = cloneSymbol;
|
||
|
||
|
||
/***/ },
|
||
/* 325 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var cloneArrayBuffer = __webpack_require__(313);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = cloneTypedArray;
|
||
|
||
|
||
/***/ },
|
||
/* 326 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseCreate = __webpack_require__(191),
|
||
getPrototype = __webpack_require__(303),
|
||
isPrototype = __webpack_require__(256);
|
||
|
||
/**
|
||
* 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))
|
||
: {};
|
||
}
|
||
|
||
module.exports = initCloneObject;
|
||
|
||
|
||
/***/ },
|
||
/* 327 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var createWrap = __webpack_require__(170);
|
||
|
||
/** Used to compose bitmasks for function metadata. */
|
||
var WRAP_CURRY_FLAG = 8;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
// Assign default placeholders.
|
||
curry.placeholder = {};
|
||
|
||
module.exports = curry;
|
||
|
||
|
||
/***/ },
|
||
/* 328 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseClone = __webpack_require__(261),
|
||
baseIteratee = __webpack_require__(329);
|
||
|
||
/** Used to compose bitmasks for cloning. */
|
||
var CLONE_DEEP_FLAG = 1;
|
||
|
||
/**
|
||
* 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));
|
||
}
|
||
|
||
module.exports = iteratee;
|
||
|
||
|
||
/***/ },
|
||
/* 329 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseMatches = __webpack_require__(330),
|
||
baseMatchesProperty = __webpack_require__(345),
|
||
identity = __webpack_require__(172),
|
||
isArray = __webpack_require__(208),
|
||
property = __webpack_require__(360);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = baseIteratee;
|
||
|
||
|
||
/***/ },
|
||
/* 330 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseIsMatch = __webpack_require__(331),
|
||
getMatchData = __webpack_require__(342),
|
||
matchesStrictComparable = __webpack_require__(344);
|
||
|
||
/**
|
||
* 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);
|
||
};
|
||
}
|
||
|
||
module.exports = baseMatches;
|
||
|
||
|
||
/***/ },
|
||
/* 331 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Stack = __webpack_require__(262),
|
||
baseIsEqual = __webpack_require__(332);
|
||
|
||
/** Used to compose bitmasks for value comparisons. */
|
||
var COMPARE_PARTIAL_FLAG = 1,
|
||
COMPARE_UNORDERED_FLAG = 2;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseIsMatch;
|
||
|
||
|
||
/***/ },
|
||
/* 332 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseIsEqualDeep = __webpack_require__(333),
|
||
isObjectLike = __webpack_require__(209);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = baseIsEqual;
|
||
|
||
|
||
/***/ },
|
||
/* 333 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Stack = __webpack_require__(262),
|
||
equalArrays = __webpack_require__(334),
|
||
equalByTag = __webpack_require__(340),
|
||
equalObjects = __webpack_require__(341),
|
||
getTag = __webpack_require__(307),
|
||
isArray = __webpack_require__(208),
|
||
isBuffer = __webpack_require__(248),
|
||
isTypedArray = __webpack_require__(250);
|
||
|
||
/** Used to compose bitmasks for value comparisons. */
|
||
var COMPARE_PARTIAL_FLAG = 1;
|
||
|
||
/** `Object#toString` result references. */
|
||
var argsTag = '[object Arguments]',
|
||
arrayTag = '[object Array]',
|
||
objectTag = '[object Object]';
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = baseIsEqualDeep;
|
||
|
||
|
||
/***/ },
|
||
/* 334 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var SetCache = __webpack_require__(335),
|
||
arraySome = __webpack_require__(338),
|
||
cacheHas = __webpack_require__(339);
|
||
|
||
/** Used to compose bitmasks for value comparisons. */
|
||
var COMPARE_PARTIAL_FLAG = 1,
|
||
COMPARE_UNORDERED_FLAG = 2;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = equalArrays;
|
||
|
||
|
||
/***/ },
|
||
/* 335 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var MapCache = __webpack_require__(276),
|
||
setCacheAdd = __webpack_require__(336),
|
||
setCacheHas = __webpack_require__(337);
|
||
|
||
/**
|
||
*
|
||
* 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]);
|
||
}
|
||
}
|
||
|
||
// Add methods to `SetCache`.
|
||
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
|
||
SetCache.prototype.has = setCacheHas;
|
||
|
||
module.exports = SetCache;
|
||
|
||
|
||
/***/ },
|
||
/* 336 */
|
||
/***/ function(module, exports) {
|
||
|
||
/** Used to stand-in for `undefined` hash values. */
|
||
var HASH_UNDEFINED = '__lodash_hash_undefined__';
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = setCacheAdd;
|
||
|
||
|
||
/***/ },
|
||
/* 337 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = setCacheHas;
|
||
|
||
|
||
/***/ },
|
||
/* 338 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = arraySome;
|
||
|
||
|
||
/***/ },
|
||
/* 339 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = cacheHas;
|
||
|
||
|
||
/***/ },
|
||
/* 340 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Symbol = __webpack_require__(179),
|
||
Uint8Array = __webpack_require__(314),
|
||
eq = __webpack_require__(242),
|
||
equalArrays = __webpack_require__(334),
|
||
mapToArray = __webpack_require__(319),
|
||
setToArray = __webpack_require__(323);
|
||
|
||
/** Used to compose bitmasks for value comparisons. */
|
||
var COMPARE_PARTIAL_FLAG = 1,
|
||
COMPARE_UNORDERED_FLAG = 2;
|
||
|
||
/** `Object#toString` result references. */
|
||
var boolTag = '[object Boolean]',
|
||
dateTag = '[object Date]',
|
||
errorTag = '[object Error]',
|
||
mapTag = '[object Map]',
|
||
numberTag = '[object Number]',
|
||
regexpTag = '[object RegExp]',
|
||
setTag = '[object Set]',
|
||
stringTag = '[object String]',
|
||
symbolTag = '[object Symbol]';
|
||
|
||
var arrayBufferTag = '[object ArrayBuffer]',
|
||
dataViewTag = '[object DataView]';
|
||
|
||
/** Used to convert symbols to primitives and strings. */
|
||
var symbolProto = Symbol ? Symbol.prototype : undefined,
|
||
symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = equalByTag;
|
||
|
||
|
||
/***/ },
|
||
/* 341 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var getAllKeys = __webpack_require__(304);
|
||
|
||
/** Used to compose bitmasks for value comparisons. */
|
||
var COMPARE_PARTIAL_FLAG = 1;
|
||
|
||
/** Used for built-in method references. */
|
||
var objectProto = Object.prototype;
|
||
|
||
/** Used to check objects for own properties. */
|
||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = equalObjects;
|
||
|
||
|
||
/***/ },
|
||
/* 342 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isStrictComparable = __webpack_require__(343),
|
||
keys = __webpack_require__(243);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = getMatchData;
|
||
|
||
|
||
/***/ },
|
||
/* 343 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isObject = __webpack_require__(184);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = isStrictComparable;
|
||
|
||
|
||
/***/ },
|
||
/* 344 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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)));
|
||
};
|
||
}
|
||
|
||
module.exports = matchesStrictComparable;
|
||
|
||
|
||
/***/ },
|
||
/* 345 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseIsEqual = __webpack_require__(332),
|
||
get = __webpack_require__(346),
|
||
hasIn = __webpack_require__(357),
|
||
isKey = __webpack_require__(349),
|
||
isStrictComparable = __webpack_require__(343),
|
||
matchesStrictComparable = __webpack_require__(344),
|
||
toKey = __webpack_require__(356);
|
||
|
||
/** Used to compose bitmasks for value comparisons. */
|
||
var COMPARE_PARTIAL_FLAG = 1,
|
||
COMPARE_UNORDERED_FLAG = 2;
|
||
|
||
/**
|
||
* 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);
|
||
};
|
||
}
|
||
|
||
module.exports = baseMatchesProperty;
|
||
|
||
|
||
/***/ },
|
||
/* 346 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseGet = __webpack_require__(347);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = get;
|
||
|
||
|
||
/***/ },
|
||
/* 347 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var castPath = __webpack_require__(348),
|
||
toKey = __webpack_require__(356);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseGet;
|
||
|
||
|
||
/***/ },
|
||
/* 348 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isArray = __webpack_require__(208),
|
||
isKey = __webpack_require__(349),
|
||
stringToPath = __webpack_require__(350),
|
||
toString = __webpack_require__(353);
|
||
|
||
/**
|
||
* 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));
|
||
}
|
||
|
||
module.exports = castPath;
|
||
|
||
|
||
/***/ },
|
||
/* 349 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isArray = __webpack_require__(208),
|
||
isSymbol = __webpack_require__(237);
|
||
|
||
/** Used to match property names within property paths. */
|
||
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
|
||
reIsPlainProp = /^\w*$/;
|
||
|
||
/**
|
||
* 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));
|
||
}
|
||
|
||
module.exports = isKey;
|
||
|
||
|
||
/***/ },
|
||
/* 350 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var memoizeCapped = __webpack_require__(351);
|
||
|
||
/** Used to match property names within property paths. */
|
||
var reLeadingDot = /^\./,
|
||
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
|
||
|
||
/** Used to match backslashes in property paths. */
|
||
var reEscapeChar = /\\(\\)?/g;
|
||
|
||
/**
|
||
* 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 (reLeadingDot.test(string)) {
|
||
result.push('');
|
||
}
|
||
string.replace(rePropName, function(match, number, quote, string) {
|
||
result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
|
||
});
|
||
return result;
|
||
});
|
||
|
||
module.exports = stringToPath;
|
||
|
||
|
||
/***/ },
|
||
/* 351 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var memoize = __webpack_require__(352);
|
||
|
||
/** Used as the maximum memoize cache size. */
|
||
var MAX_MEMOIZE_SIZE = 500;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = memoizeCapped;
|
||
|
||
|
||
/***/ },
|
||
/* 352 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var MapCache = __webpack_require__(276);
|
||
|
||
/** Error message constants. */
|
||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||
|
||
/**
|
||
* 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;
|
||
|
||
module.exports = memoize;
|
||
|
||
|
||
/***/ },
|
||
/* 353 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseToString = __webpack_require__(354);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = toString;
|
||
|
||
|
||
/***/ },
|
||
/* 354 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Symbol = __webpack_require__(179),
|
||
arrayMap = __webpack_require__(355),
|
||
isArray = __webpack_require__(208),
|
||
isSymbol = __webpack_require__(237);
|
||
|
||
/** Used as references for various `Number` constants. */
|
||
var INFINITY = 1 / 0;
|
||
|
||
/** Used to convert symbols to primitives and strings. */
|
||
var symbolProto = Symbol ? Symbol.prototype : undefined,
|
||
symbolToString = symbolProto ? symbolProto.toString : undefined;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseToString;
|
||
|
||
|
||
/***/ },
|
||
/* 355 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = arrayMap;
|
||
|
||
|
||
/***/ },
|
||
/* 356 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isSymbol = __webpack_require__(237);
|
||
|
||
/** Used as references for various `Number` constants. */
|
||
var INFINITY = 1 / 0;
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = toKey;
|
||
|
||
|
||
/***/ },
|
||
/* 357 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseHasIn = __webpack_require__(358),
|
||
hasPath = __webpack_require__(359);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = hasIn;
|
||
|
||
|
||
/***/ },
|
||
/* 358 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = baseHasIn;
|
||
|
||
|
||
/***/ },
|
||
/* 359 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var castPath = __webpack_require__(348),
|
||
isArguments = __webpack_require__(246),
|
||
isArray = __webpack_require__(208),
|
||
isIndex = __webpack_require__(230),
|
||
isLength = __webpack_require__(252),
|
||
toKey = __webpack_require__(356);
|
||
|
||
/**
|
||
* 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));
|
||
}
|
||
|
||
module.exports = hasPath;
|
||
|
||
|
||
/***/ },
|
||
/* 360 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseProperty = __webpack_require__(361),
|
||
basePropertyDeep = __webpack_require__(362),
|
||
isKey = __webpack_require__(349),
|
||
toKey = __webpack_require__(356);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = property;
|
||
|
||
|
||
/***/ },
|
||
/* 361 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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];
|
||
};
|
||
}
|
||
|
||
module.exports = baseProperty;
|
||
|
||
|
||
/***/ },
|
||
/* 362 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseGet = __webpack_require__(347);
|
||
|
||
/**
|
||
* 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);
|
||
};
|
||
}
|
||
|
||
module.exports = basePropertyDeep;
|
||
|
||
|
||
/***/ },
|
||
/* 363 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var createWrap = __webpack_require__(170),
|
||
flatRest = __webpack_require__(364);
|
||
|
||
/** Used to compose bitmasks for function metadata. */
|
||
var WRAP_REARG_FLAG = 256;
|
||
|
||
/**
|
||
* 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);
|
||
});
|
||
|
||
module.exports = rearg;
|
||
|
||
|
||
/***/ },
|
||
/* 364 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var flatten = __webpack_require__(365),
|
||
overRest = __webpack_require__(368),
|
||
setToString = __webpack_require__(217);
|
||
|
||
/**
|
||
* 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 + '');
|
||
}
|
||
|
||
module.exports = flatRest;
|
||
|
||
|
||
/***/ },
|
||
/* 365 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseFlatten = __webpack_require__(366);
|
||
|
||
/**
|
||
* 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) : [];
|
||
}
|
||
|
||
module.exports = flatten;
|
||
|
||
|
||
/***/ },
|
||
/* 366 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var arrayPush = __webpack_require__(302),
|
||
isFlattenable = __webpack_require__(367);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = baseFlatten;
|
||
|
||
|
||
/***/ },
|
||
/* 367 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Symbol = __webpack_require__(179),
|
||
isArguments = __webpack_require__(246),
|
||
isArray = __webpack_require__(208);
|
||
|
||
/** Built-in value references. */
|
||
var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
|
||
|
||
/**
|
||
* 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]);
|
||
}
|
||
|
||
module.exports = isFlattenable;
|
||
|
||
|
||
/***/ },
|
||
/* 368 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var apply = __webpack_require__(193);
|
||
|
||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||
var nativeMax = Math.max;
|
||
|
||
/**
|
||
* 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);
|
||
};
|
||
}
|
||
|
||
module.exports = overRest;
|
||
|
||
|
||
/***/ },
|
||
/* 369 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var arrayMap = __webpack_require__(355),
|
||
copyArray = __webpack_require__(211),
|
||
isArray = __webpack_require__(208),
|
||
isSymbol = __webpack_require__(237),
|
||
stringToPath = __webpack_require__(350),
|
||
toKey = __webpack_require__(356),
|
||
toString = __webpack_require__(353);
|
||
|
||
/**
|
||
* 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)));
|
||
}
|
||
|
||
module.exports = toPath;
|
||
|
||
|
||
/***/ },
|
||
/* 370 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseMerge = __webpack_require__(371),
|
||
createAssigner = __webpack_require__(379);
|
||
|
||
/**
|
||
* 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);
|
||
});
|
||
|
||
module.exports = merge;
|
||
|
||
|
||
/***/ },
|
||
/* 371 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var Stack = __webpack_require__(262),
|
||
assignMergeValue = __webpack_require__(372),
|
||
baseFor = __webpack_require__(373),
|
||
baseMergeDeep = __webpack_require__(375),
|
||
isObject = __webpack_require__(184),
|
||
keysIn = __webpack_require__(292);
|
||
|
||
/**
|
||
* 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(object[key], srcValue, (key + ''), object, source, stack)
|
||
: undefined;
|
||
|
||
if (newValue === undefined) {
|
||
newValue = srcValue;
|
||
}
|
||
assignMergeValue(object, key, newValue);
|
||
}
|
||
}, keysIn);
|
||
}
|
||
|
||
module.exports = baseMerge;
|
||
|
||
|
||
/***/ },
|
||
/* 372 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseAssignValue = __webpack_require__(241),
|
||
eq = __webpack_require__(242);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
}
|
||
|
||
module.exports = assignMergeValue;
|
||
|
||
|
||
/***/ },
|
||
/* 373 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var createBaseFor = __webpack_require__(374);
|
||
|
||
/**
|
||
* 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();
|
||
|
||
module.exports = baseFor;
|
||
|
||
|
||
/***/ },
|
||
/* 374 */
|
||
/***/ function(module, exports) {
|
||
|
||
/**
|
||
* 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;
|
||
};
|
||
}
|
||
|
||
module.exports = createBaseFor;
|
||
|
||
|
||
/***/ },
|
||
/* 375 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var assignMergeValue = __webpack_require__(372),
|
||
cloneBuffer = __webpack_require__(295),
|
||
cloneTypedArray = __webpack_require__(325),
|
||
copyArray = __webpack_require__(211),
|
||
initCloneObject = __webpack_require__(326),
|
||
isArguments = __webpack_require__(246),
|
||
isArray = __webpack_require__(208),
|
||
isArrayLikeObject = __webpack_require__(376),
|
||
isBuffer = __webpack_require__(248),
|
||
isFunction = __webpack_require__(177),
|
||
isObject = __webpack_require__(184),
|
||
isPlainObject = __webpack_require__(377),
|
||
isTypedArray = __webpack_require__(250),
|
||
toPlainObject = __webpack_require__(378);
|
||
|
||
/**
|
||
* 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 = object[key],
|
||
srcValue = 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) || (srcIndex && 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);
|
||
}
|
||
|
||
module.exports = baseMergeDeep;
|
||
|
||
|
||
/***/ },
|
||
/* 376 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var isArrayLike = __webpack_require__(259),
|
||
isObjectLike = __webpack_require__(209);
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
module.exports = isArrayLikeObject;
|
||
|
||
|
||
/***/ },
|
||
/* 377 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseGetTag = __webpack_require__(178),
|
||
getPrototype = __webpack_require__(303),
|
||
isObjectLike = __webpack_require__(209);
|
||
|
||
/** `Object#toString` result references. */
|
||
var objectTag = '[object Object]';
|
||
|
||
/** Used for built-in method references. */
|
||
var funcProto = Function.prototype,
|
||
objectProto = Object.prototype;
|
||
|
||
/** 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 infer the `Object` constructor. */
|
||
var objectCtorString = funcToString.call(Object);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = isPlainObject;
|
||
|
||
|
||
/***/ },
|
||
/* 378 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var copyObject = __webpack_require__(239),
|
||
keysIn = __webpack_require__(292);
|
||
|
||
/**
|
||
* 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));
|
||
}
|
||
|
||
module.exports = toPlainObject;
|
||
|
||
|
||
/***/ },
|
||
/* 379 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var baseRest = __webpack_require__(380),
|
||
isIterateeCall = __webpack_require__(381);
|
||
|
||
/**
|
||
* 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;
|
||
});
|
||
}
|
||
|
||
module.exports = createAssigner;
|
||
|
||
|
||
/***/ },
|
||
/* 380 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var identity = __webpack_require__(172),
|
||
overRest = __webpack_require__(368),
|
||
setToString = __webpack_require__(217);
|
||
|
||
/**
|
||
* 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 + '');
|
||
}
|
||
|
||
module.exports = baseRest;
|
||
|
||
|
||
/***/ },
|
||
/* 381 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var eq = __webpack_require__(242),
|
||
isArrayLike = __webpack_require__(259),
|
||
isIndex = __webpack_require__(230),
|
||
isObject = __webpack_require__(184);
|
||
|
||
/**
|
||
* 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;
|
||
}
|
||
|
||
module.exports = isIterateeCall;
|
||
|
||
|
||
/***/ },
|
||
/* 382 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _vue = __webpack_require__(2);
|
||
|
||
var _vue2 = _interopRequireDefault(_vue);
|
||
|
||
var _chart = __webpack_require__(4);
|
||
|
||
var _chart2 = _interopRequireDefault(_chart);
|
||
|
||
var _options = __webpack_require__(162);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = _vue2.default.extend({
|
||
render: function render(createElement) {
|
||
return createElement('div', [createElement('canvas', {
|
||
attrs: {
|
||
id: this.chartId,
|
||
width: this.width,
|
||
height: this.height
|
||
},
|
||
ref: 'canvas'
|
||
})]);
|
||
},
|
||
|
||
props: {
|
||
chartId: {
|
||
default: 'doughnut-chart',
|
||
type: String
|
||
},
|
||
width: {
|
||
default: 400,
|
||
type: Number
|
||
},
|
||
height: {
|
||
default: 400,
|
||
type: Number
|
||
}
|
||
},
|
||
|
||
data: function data() {
|
||
return {
|
||
defaultOptions: {}
|
||
};
|
||
},
|
||
|
||
|
||
methods: {
|
||
renderChart: function renderChart(data, options) {
|
||
var chartOptions = (0, _options.mergeOptions)(this.defaultOptions, options);
|
||
|
||
this._chart = new _chart2.default(this.$refs.canvas.getContext('2d'), {
|
||
type: 'doughnut',
|
||
data: data,
|
||
options: chartOptions
|
||
});
|
||
this._chart.generateLegend();
|
||
}
|
||
},
|
||
beforeDestroy: function beforeDestroy() {
|
||
this._chart.destroy();
|
||
}
|
||
});
|
||
|
||
/***/ },
|
||
/* 383 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _vue = __webpack_require__(2);
|
||
|
||
var _vue2 = _interopRequireDefault(_vue);
|
||
|
||
var _chart = __webpack_require__(4);
|
||
|
||
var _chart2 = _interopRequireDefault(_chart);
|
||
|
||
var _options = __webpack_require__(162);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = _vue2.default.extend({
|
||
render: function render(createElement) {
|
||
return createElement('div', [createElement('canvas', {
|
||
attrs: {
|
||
id: this.chartId,
|
||
width: this.width,
|
||
height: this.height
|
||
},
|
||
ref: 'canvas'
|
||
})]);
|
||
},
|
||
|
||
props: {
|
||
chartId: {
|
||
default: 'line-chart',
|
||
type: String
|
||
},
|
||
width: {
|
||
default: 400,
|
||
type: Number
|
||
},
|
||
height: {
|
||
default: 400,
|
||
type: Number
|
||
}
|
||
},
|
||
|
||
data: function data() {
|
||
return {
|
||
defaultOptions: {
|
||
scales: {
|
||
yAxes: [{
|
||
ticks: {
|
||
beginAtZero: true
|
||
},
|
||
gridLines: {
|
||
display: false
|
||
}
|
||
}],
|
||
xAxes: [{
|
||
gridLines: {
|
||
display: false
|
||
}
|
||
}]
|
||
}
|
||
}
|
||
};
|
||
},
|
||
|
||
|
||
methods: {
|
||
renderChart: function renderChart(data, options) {
|
||
var chartOptions = (0, _options.mergeOptions)(this.defaultOptions, options);
|
||
|
||
this._chart = new _chart2.default(this.$refs.canvas.getContext('2d'), {
|
||
type: 'line',
|
||
data: data,
|
||
options: chartOptions
|
||
});
|
||
this._chart.generateLegend();
|
||
}
|
||
},
|
||
beforeDestroy: function beforeDestroy() {
|
||
this._chart.destroy();
|
||
}
|
||
});
|
||
|
||
/***/ },
|
||
/* 384 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _vue = __webpack_require__(2);
|
||
|
||
var _vue2 = _interopRequireDefault(_vue);
|
||
|
||
var _chart = __webpack_require__(4);
|
||
|
||
var _chart2 = _interopRequireDefault(_chart);
|
||
|
||
var _options = __webpack_require__(162);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = _vue2.default.extend({
|
||
render: function render(createElement) {
|
||
return createElement('div', [createElement('canvas', {
|
||
attrs: {
|
||
id: this.chartId,
|
||
width: this.width,
|
||
height: this.height
|
||
},
|
||
ref: 'canvas'
|
||
})]);
|
||
},
|
||
|
||
props: {
|
||
chartId: {
|
||
default: 'pie-chart',
|
||
type: String
|
||
},
|
||
width: {
|
||
default: 400,
|
||
type: Number
|
||
},
|
||
height: {
|
||
default: 400,
|
||
type: Number
|
||
}
|
||
},
|
||
|
||
data: function data() {
|
||
return {
|
||
defaultOptions: {}
|
||
};
|
||
},
|
||
|
||
|
||
methods: {
|
||
renderChart: function renderChart(data, options) {
|
||
var chartOptions = (0, _options.mergeOptions)(this.defaultOptions, options);
|
||
|
||
this._chart = new _chart2.default(this.$refs.canvas.getContext('2d'), {
|
||
type: 'pie',
|
||
data: data,
|
||
options: chartOptions
|
||
});
|
||
this._chart.generateLegend();
|
||
}
|
||
},
|
||
beforeDestroy: function beforeDestroy() {
|
||
this._chart.destroy();
|
||
}
|
||
});
|
||
|
||
/***/ },
|
||
/* 385 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _vue = __webpack_require__(2);
|
||
|
||
var _vue2 = _interopRequireDefault(_vue);
|
||
|
||
var _chart = __webpack_require__(4);
|
||
|
||
var _chart2 = _interopRequireDefault(_chart);
|
||
|
||
var _options = __webpack_require__(162);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = _vue2.default.extend({
|
||
render: function render(createElement) {
|
||
return createElement('div', [createElement('canvas', {
|
||
attrs: {
|
||
id: this.chartId,
|
||
width: this.width,
|
||
height: this.height
|
||
},
|
||
ref: 'canvas'
|
||
})]);
|
||
},
|
||
|
||
props: {
|
||
chartId: {
|
||
default: 'polar-chart',
|
||
type: String
|
||
},
|
||
width: {
|
||
default: 400,
|
||
type: Number
|
||
},
|
||
height: {
|
||
default: 400,
|
||
type: Number
|
||
}
|
||
},
|
||
|
||
data: function data() {
|
||
return {
|
||
defaultOptions: {}
|
||
};
|
||
},
|
||
|
||
|
||
methods: {
|
||
renderChart: function renderChart(data, options) {
|
||
var chartOptions = (0, _options.mergeOptions)(this.defaultOptions, options);
|
||
|
||
this._chart = new _chart2.default(this.$refs.canvas.getContext('2d'), {
|
||
type: 'polarArea',
|
||
data: data,
|
||
options: chartOptions
|
||
});
|
||
this._chart.generateLegend();
|
||
}
|
||
},
|
||
beforeDestroy: function beforeDestroy() {
|
||
this._chart.destroy();
|
||
}
|
||
});
|
||
|
||
/***/ },
|
||
/* 386 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _vue = __webpack_require__(2);
|
||
|
||
var _vue2 = _interopRequireDefault(_vue);
|
||
|
||
var _chart = __webpack_require__(4);
|
||
|
||
var _chart2 = _interopRequireDefault(_chart);
|
||
|
||
var _options = __webpack_require__(162);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = _vue2.default.extend({
|
||
render: function render(createElement) {
|
||
return createElement('div', [createElement('canvas', {
|
||
attrs: {
|
||
id: this.chartId,
|
||
width: this.width,
|
||
height: this.height
|
||
},
|
||
ref: 'canvas'
|
||
})]);
|
||
},
|
||
|
||
props: {
|
||
chartId: {
|
||
default: 'radar-chart',
|
||
type: String
|
||
},
|
||
width: {
|
||
default: 400,
|
||
type: Number
|
||
},
|
||
height: {
|
||
default: 400,
|
||
type: Number
|
||
}
|
||
},
|
||
|
||
data: function data() {
|
||
return {
|
||
defaultOptions: {}
|
||
};
|
||
},
|
||
|
||
|
||
methods: {
|
||
renderChart: function renderChart(data, options) {
|
||
var chartOptions = (0, _options.mergeOptions)(this.defaultOptions, options);
|
||
|
||
this._chart = new _chart2.default(this.$refs.canvas.getContext('2d'), {
|
||
type: 'radar',
|
||
data: data,
|
||
options: chartOptions
|
||
});
|
||
this._chart.generateLegend();
|
||
}
|
||
},
|
||
beforeDestroy: function beforeDestroy() {
|
||
this._chart.destroy();
|
||
}
|
||
});
|
||
|
||
/***/ },
|
||
/* 387 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _vue = __webpack_require__(2);
|
||
|
||
var _vue2 = _interopRequireDefault(_vue);
|
||
|
||
var _chart = __webpack_require__(4);
|
||
|
||
var _chart2 = _interopRequireDefault(_chart);
|
||
|
||
var _options = __webpack_require__(162);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = _vue2.default.extend({
|
||
render: function render(createElement) {
|
||
return createElement('div', [createElement('canvas', {
|
||
attrs: {
|
||
id: this.chartId,
|
||
width: this.width,
|
||
height: this.height
|
||
},
|
||
ref: 'canvas'
|
||
})]);
|
||
},
|
||
|
||
props: {
|
||
chartId: {
|
||
default: 'bubble-chart',
|
||
type: String
|
||
},
|
||
width: {
|
||
default: 400,
|
||
type: Number
|
||
},
|
||
height: {
|
||
default: 400,
|
||
type: Number
|
||
}
|
||
},
|
||
|
||
data: function data() {
|
||
return {
|
||
defaultOptions: {
|
||
scales: {
|
||
yAxes: [{
|
||
ticks: {
|
||
beginAtZero: true
|
||
},
|
||
gridLines: {
|
||
display: false
|
||
}
|
||
}],
|
||
xAxes: [{
|
||
gridLines: {
|
||
display: false
|
||
},
|
||
categoryPercentage: 0.5,
|
||
barPercentage: 0.2
|
||
}]
|
||
}
|
||
}
|
||
};
|
||
},
|
||
|
||
|
||
methods: {
|
||
renderChart: function renderChart(data, options) {
|
||
var chartOptions = (0, _options.mergeOptions)(this.defaultOptions, options);
|
||
|
||
this._chart = new _chart2.default(this.$refs.canvas.getContext('2d'), {
|
||
type: 'bubble',
|
||
data: data,
|
||
options: chartOptions
|
||
});
|
||
this._chart.generateLegend();
|
||
}
|
||
},
|
||
beforeDestroy: function beforeDestroy() {
|
||
this._chart.destroy();
|
||
}
|
||
});
|
||
|
||
/***/ },
|
||
/* 388 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
|
||
var _reactiveData = __webpack_require__(389);
|
||
|
||
var _reactiveData2 = _interopRequireDefault(_reactiveData);
|
||
|
||
var _reactiveProp = __webpack_require__(393);
|
||
|
||
var _reactiveProp2 = _interopRequireDefault(_reactiveProp);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
exports.default = {
|
||
reactiveData: _reactiveData2.default,
|
||
reactiveProp: _reactiveProp2.default
|
||
};
|
||
|
||
/***/ },
|
||
/* 389 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
var _stringify = __webpack_require__(390);
|
||
|
||
var _stringify2 = _interopRequireDefault(_stringify);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
module.exports = {
|
||
data: function data() {
|
||
return {
|
||
chartData: null
|
||
};
|
||
},
|
||
|
||
watch: {
|
||
'chartData': {
|
||
handler: function handler(newData, oldData) {
|
||
if (oldData) {
|
||
var chart = this._chart;
|
||
|
||
var newDatasetLabels = newData.datasets.map(function (dataset) {
|
||
return dataset.label;
|
||
});
|
||
|
||
var oldDatasetLabels = oldData.datasets.map(function (dataset) {
|
||
return dataset.label;
|
||
});
|
||
|
||
var oldLabels = (0, _stringify2.default)(oldDatasetLabels);
|
||
var newLabels = (0, _stringify2.default)(newDatasetLabels);
|
||
|
||
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
|
||
newData.datasets.forEach(function (dataset, i) {
|
||
chart.data.datasets[i] = dataset;
|
||
});
|
||
|
||
chart.data.labels = newData.labels;
|
||
chart.update();
|
||
} else {
|
||
chart.destroy();
|
||
this.renderChart(this.chartData, this.options);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
/***/ },
|
||
/* 390 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
module.exports = { "default": __webpack_require__(391), __esModule: true };
|
||
|
||
/***/ },
|
||
/* 391 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
var core = __webpack_require__(392)
|
||
, $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
|
||
module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
|
||
return $JSON.stringify.apply($JSON, arguments);
|
||
};
|
||
|
||
/***/ },
|
||
/* 392 */
|
||
/***/ function(module, exports) {
|
||
|
||
var core = module.exports = {version: '2.4.0'};
|
||
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
|
||
|
||
/***/ },
|
||
/* 393 */
|
||
/***/ function(module, exports, __webpack_require__) {
|
||
|
||
'use strict';
|
||
|
||
var _stringify = __webpack_require__(390);
|
||
|
||
var _stringify2 = _interopRequireDefault(_stringify);
|
||
|
||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
||
module.exports = {
|
||
props: {
|
||
chartData: {
|
||
required: true
|
||
}
|
||
},
|
||
|
||
watch: {
|
||
'chartData': {
|
||
handler: function handler(newData, oldData) {
|
||
if (oldData) {
|
||
var chart = this._chart;
|
||
|
||
var newDatasetLabels = newData.datasets.map(function (dataset) {
|
||
return dataset.label;
|
||
});
|
||
|
||
var oldDatasetLabels = oldData.datasets.map(function (dataset) {
|
||
return dataset.label;
|
||
});
|
||
|
||
var oldLabels = (0, _stringify2.default)(oldDatasetLabels);
|
||
var newLabels = (0, _stringify2.default)(newDatasetLabels);
|
||
|
||
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
|
||
newData.datasets.forEach(function (dataset, i) {
|
||
chart.data.datasets[i] = dataset;
|
||
});
|
||
|
||
chart.data.labels = newData.labels;
|
||
chart.update();
|
||
} else {
|
||
chart.destroy();
|
||
this.renderChart(this.chartData, this.options);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
/***/ }
|
||
/******/ ])
|
||
});
|
||
; |