-
+
+
Add link
diff --git a/public/app/features/org/profile_ctrl.ts b/public/app/features/org/profile_ctrl.ts
index 55d847bb5ff..e82df591382 100644
--- a/public/app/features/org/profile_ctrl.ts
+++ b/public/app/features/org/profile_ctrl.ts
@@ -1,5 +1,3 @@
-///
-
import config from 'app/core/config';
import {coreModule} from 'app/core/core';
diff --git a/public/app/features/panel/metrics_panel_ctrl.ts b/public/app/features/panel/metrics_panel_ctrl.ts
index df73efb9cdb..4e804c1f88a 100644
--- a/public/app/features/panel/metrics_panel_ctrl.ts
+++ b/public/app/features/panel/metrics_panel_ctrl.ts
@@ -1,10 +1,8 @@
-///
-
import config from 'app/core/config';
import $ from 'jquery';
import _ from 'lodash';
import kbn from 'app/core/utils/kbn';
-import {PanelCtrl} from './panel_ctrl';
+import {PanelCtrl} from 'app/features/panel/panel_ctrl';
import * as rangeUtil from 'app/core/utils/rangeutil';
import * as dateMath from 'app/core/utils/datemath';
diff --git a/public/app/features/panel/panel_ctrl.ts b/public/app/features/panel/panel_ctrl.ts
index 00d81b090d2..9806be39273 100644
--- a/public/app/features/panel/panel_ctrl.ts
+++ b/public/app/features/panel/panel_ctrl.ts
@@ -1,5 +1,3 @@
-///
-
import config from 'app/core/config';
import _ from 'lodash';
import $ from 'jquery';
diff --git a/public/app/features/panellinks/specs/link_srv_specs.ts b/public/app/features/panellinks/specs/link_srv_specs.ts
new file mode 100644
index 00000000000..77bb0a36c1f
--- /dev/null
+++ b/public/app/features/panellinks/specs/link_srv_specs.ts
@@ -0,0 +1,46 @@
+import {describe, beforeEach, it, expect, angularMocks} from 'test/lib/common';
+import 'app/features/panellinks/linkSrv';
+import _ from 'lodash';
+
+describe('linkSrv', function() {
+ var _linkSrv;
+
+ beforeEach(angularMocks.module('grafana.core'));
+ beforeEach(angularMocks.module('grafana.services'));
+
+ beforeEach(angularMocks.inject(function(linkSrv) {
+ _linkSrv = linkSrv;
+ }));
+
+ describe('when appending query strings', function() {
+
+ it('add ? to URL if not present', function() {
+ var url = _linkSrv.appendToQueryString('http://example.com', 'foo=bar');
+ expect(url).to.be('http://example.com?foo=bar');
+ });
+
+ it('do not add & to URL if ? is present but query string is empty', function() {
+ var url = _linkSrv.appendToQueryString('http://example.com?', 'foo=bar');
+ expect(url).to.be('http://example.com?foo=bar');
+ });
+
+ it('add & to URL if query string is present', function() {
+ var url = _linkSrv.appendToQueryString('http://example.com?foo=bar', 'hello=world');
+ expect(url).to.be('http://example.com?foo=bar&hello=world');
+ });
+
+ it('do not change the URL if there is nothing to append', function() {
+ _.each(['', undefined, null], function(toAppend) {
+ var url1 = _linkSrv.appendToQueryString('http://example.com', toAppend);
+ expect(url1).to.be('http://example.com');
+
+ var url2 = _linkSrv.appendToQueryString('http://example.com?', toAppend);
+ expect(url2).to.be('http://example.com?');
+
+ var url3 = _linkSrv.appendToQueryString('http://example.com?foo=bar', toAppend);
+ expect(url3).to.be('http://example.com?foo=bar');
+ });
+ });
+
+ });
+});
diff --git a/public/app/features/plugins/all.ts b/public/app/features/plugins/all.ts
index 346fb2b30ef..a0d4e61962c 100644
--- a/public/app/features/plugins/all.ts
+++ b/public/app/features/plugins/all.ts
@@ -4,3 +4,5 @@ import './plugin_list_ctrl';
import './import_list/import_list';
import './ds_edit_ctrl';
import './ds_list_ctrl';
+import './datasource_srv';
+import './plugin_component';
diff --git a/public/app/core/services/datasource_srv.js b/public/app/features/plugins/datasource_srv.js
similarity index 95%
rename from public/app/core/services/datasource_srv.js
rename to public/app/features/plugins/datasource_srv.js
index db8485bb2f1..db74c13331a 100644
--- a/public/app/core/services/datasource_srv.js
+++ b/public/app/features/plugins/datasource_srv.js
@@ -1,10 +1,11 @@
define([
'angular',
'lodash',
- '../core_module',
+ 'app/core/core_module',
'app/core/config',
+ './plugin_loader',
],
-function (angular, _, coreModule, config) {
+function (angular, _, coreModule, config, pluginLoader) {
'use strict';
coreModule.default.service('datasourceSrv', function($q, $injector, $rootScope, templateSrv) {
@@ -41,7 +42,7 @@ function (angular, _, coreModule, config) {
var deferred = $q.defer();
var pluginDef = dsConfig.meta;
- System.import(pluginDef.module).then(function(plugin) {
+ pluginLoader.importPluginModule(pluginDef.module).then(function(plugin) {
// check if its in cache now
if (self.datasources[name]) {
deferred.resolve(self.datasources[name]);
diff --git a/public/app/core/directives/plugin_component.ts b/public/app/features/plugins/plugin_component.ts
similarity index 92%
rename from public/app/core/directives/plugin_component.ts
rename to public/app/features/plugins/plugin_component.ts
index c8b8f2d663f..e8ece7b55c4 100644
--- a/public/app/core/directives/plugin_component.ts
+++ b/public/app/features/plugins/plugin_component.ts
@@ -1,12 +1,12 @@
-///
-
import angular from 'angular';
import _ from 'lodash';
import config from 'app/core/config';
import coreModule from 'app/core/core_module';
+import {importPluginModule} from './plugin_loader';
+
import {UnknownPanelCtrl} from 'app/plugins/panel/unknown/module';
-import {DashboardRowCtrl} from '../components/row_ctrl';
+import {DashboardRowCtrl} from './row_ctrl';
/** @ngInject **/
function pluginDirectiveLoader($compile, datasourceSrv, $rootScope, $q, $http, $templateCache) {
@@ -74,7 +74,7 @@ function pluginDirectiveLoader($compile, datasourceSrv, $rootScope, $q, $http, $
let panelInfo = config.panels[scope.panel.type];
var panelCtrlPromise = Promise.resolve(UnknownPanelCtrl);
if (panelInfo) {
- panelCtrlPromise = System.import(panelInfo.module).then(function(panelModule) {
+ panelCtrlPromise = importPluginModule(panelInfo.module).then(function(panelModule) {
return panelModule.PanelCtrl;
});
}
@@ -114,7 +114,7 @@ function pluginDirectiveLoader($compile, datasourceSrv, $rootScope, $q, $http, $
return datasourceSrv.get(datasource).then(ds => {
scope.datasource = ds;
- return System.import(ds.meta.module).then(dsModule => {
+ return importPluginModule(ds.meta.module).then(dsModule => {
return {
baseUrl: ds.meta.baseUrl,
name: 'query-ctrl-' + ds.meta.id,
@@ -128,7 +128,7 @@ function pluginDirectiveLoader($compile, datasourceSrv, $rootScope, $q, $http, $
// QueryOptionsCtrl
case "query-options-ctrl": {
return datasourceSrv.get(scope.ctrl.panel.datasource).then(ds => {
- return System.import(ds.meta.module).then((dsModule): any => {
+ return importPluginModule(ds.meta.module).then((dsModule): any => {
if (!dsModule.QueryOptionsCtrl) {
return {notFound: true};
}
@@ -145,7 +145,7 @@ function pluginDirectiveLoader($compile, datasourceSrv, $rootScope, $q, $http, $
}
// Annotations
case "annotations-query-ctrl": {
- return System.import(scope.ctrl.currentDatasource.meta.module).then(function(dsModule) {
+ return importPluginModule(scope.ctrl.currentDatasource.meta.module).then(function(dsModule) {
return {
baseUrl: scope.ctrl.currentDatasource.meta.baseUrl,
name: 'annotations-query-ctrl-' + scope.ctrl.currentDatasource.meta.id,
@@ -158,7 +158,7 @@ function pluginDirectiveLoader($compile, datasourceSrv, $rootScope, $q, $http, $
// Datasource ConfigCtrl
case 'datasource-config-ctrl': {
var dsMeta = scope.ctrl.datasourceMeta;
- return System.import(dsMeta.module).then(function(dsModule): any {
+ return importPluginModule(dsMeta.module).then(function(dsModule): any {
if (!dsModule.ConfigCtrl) {
return {notFound: true};
}
@@ -175,7 +175,7 @@ function pluginDirectiveLoader($compile, datasourceSrv, $rootScope, $q, $http, $
// AppConfigCtrl
case 'app-config-ctrl': {
let model = scope.ctrl.model;
- return System.import(model.module).then(function(appModule) {
+ return importPluginModule(model.module).then(function(appModule) {
return {
baseUrl: model.baseUrl,
name: 'app-config-' + model.id,
@@ -188,7 +188,7 @@ function pluginDirectiveLoader($compile, datasourceSrv, $rootScope, $q, $http, $
// App Page
case 'app-page': {
let appModel = scope.ctrl.appModel;
- return System.import(appModel.module).then(function(appModule) {
+ return importPluginModule(appModel.module).then(function(appModule) {
return {
baseUrl: appModel.baseUrl,
name: 'app-page-' + appModel.id + '-' + scope.ctrl.page.slug,
diff --git a/public/app/features/plugins/plugin_loader.ts b/public/app/features/plugins/plugin_loader.ts
new file mode 100644
index 00000000000..ac6fc06ce28
--- /dev/null
+++ b/public/app/features/plugins/plugin_loader.ts
@@ -0,0 +1,128 @@
+import System from 'systemjs/dist/system.js';
+import _ from 'lodash';
+import * as sdk from 'app/plugins/sdk';
+import kbn from 'app/core/utils/kbn';
+import moment from 'moment';
+import angular from 'angular';
+import jquery from 'jquery';
+import config from 'app/core/config';
+import TimeSeries from 'app/core/time_series2';
+import * as datemath from 'app/core/utils/datemath';
+
+import * as graphitePlugin from 'app/plugins/datasource/graphite/module';
+import * as cloudwatchPlugin from 'app/plugins/datasource/cloudwatch/module';
+import * as elasticsearchPlugin from 'app/plugins/datasource/elasticsearch/module';
+import * as opentsdbPlugin from 'app/plugins/datasource/opentsdb/module';
+import * as grafanaPlugin from 'app/plugins/datasource/grafana/module';
+import * as influxdbPlugin from 'app/plugins/datasource/influxdb/module';
+import * as mixedPlugin from 'app/plugins/datasource/mixed/module';
+import * as mysqlPlugin from 'app/plugins/datasource/mysql/module';
+import * as prometheusPlugin from 'app/plugins/datasource/prometheus/module';
+
+import * as textPanel from 'app/plugins/panel/text/module';
+import * as graphPanel from 'app/plugins/panel/graph/module';
+import * as dashListPanel from 'app/plugins/panel/dashlist/module';
+import * as pluginsListPanel from 'app/plugins/panel/pluginlist/module';
+import * as alertListPanel from 'app/plugins/panel/alertlist/module';
+import * as heatmapPanel from 'app/plugins/panel/heatmap/module';
+import * as tablePanel from 'app/plugins/panel/table/module';
+import * as singlestatPanel from 'app/plugins/panel/singlestat/module';
+import * as gettingStartedPanel from 'app/plugins/panel/gettingstarted/module';
+import * as testDataAppPlugin from 'app/plugins/app/testdata/module';
+import * as testDataDSPlugin from 'app/plugins/app/testdata/datasource/module';
+
+let builtInPlugins = {
+ "app/plugins/datasource/graphite/module": graphitePlugin,
+ "app/plugins/datasource/cloudwatch/module": cloudwatchPlugin,
+ "app/plugins/datasource/elasticsearch/module": elasticsearchPlugin,
+ "app/plugins/datasource/opentsdb/module": opentsdbPlugin,
+ "app/plugins/datasource/grafana/module": grafanaPlugin,
+ "app/plugins/datasource/influxdb/module": influxdbPlugin,
+ "app/plugins/datasource/mixed/module": mixedPlugin,
+ "app/plugins/datasource/mysql/module": mysqlPlugin,
+ "app/plugins/datasource/prometheus/module": prometheusPlugin,
+ "app/plugins/app/testdata/module": testDataAppPlugin,
+ "app/plugins/app/testdata/datasource/module": testDataDSPlugin,
+
+ "app/plugins/panel/text/module": textPanel,
+ "app/plugins/panel/graph/module": graphPanel,
+ "app/plugins/panel/dashlist/module": dashListPanel,
+ "app/plugins/panel/pluginlist/module": pluginsListPanel,
+ "app/plugins/panel/alertlist/module": alertListPanel,
+ "app/plugins/panel/heatmap/module": heatmapPanel,
+ "app/plugins/panel/table/module": tablePanel,
+ "app/plugins/panel/singlestat/module": singlestatPanel,
+ "app/plugins/panel/gettingstarted/module": gettingStartedPanel,
+};
+
+System.config({
+ baseURL: 'public',
+ defaultExtension: 'js',
+ packages: {
+ 'plugins': {
+ defaultExtension: 'js'
+ }
+ },
+ map: {
+ text: 'vendor/plugin-text/text.js',
+ css: 'vendor/plugin-css/css.js'
+ },
+});
+
+// add cache busting
+var systemLocate = System.locate;
+System.cacheBust = '?bust=' + Date.now();
+System.locate = function(load) {
+ var System = this;
+ return Promise.resolve(systemLocate.call(this, load)).then(function(address) {
+ return address + System.cacheBust;
+ });
+};
+
+function exposeToPlugin(name: string, component: any) {
+ System.registerDynamic(name, [], true, function(require, exports, module) {
+ module.exports = component;
+ });
+}
+
+exposeToPlugin('lodash', _);
+exposeToPlugin('moment', moment);
+exposeToPlugin('jquery', jquery);
+exposeToPlugin('angular', angular);
+exposeToPlugin('app/plugins/sdk', sdk);
+exposeToPlugin('app/core/utils/datemath', datemath);
+exposeToPlugin('app/core/utils/kbn', kbn);
+exposeToPlugin('app/core/config', config);
+exposeToPlugin('app/core/time_series', TimeSeries);
+exposeToPlugin('app/core/time_series2', TimeSeries);
+
+import 'vendor/flot/jquery.flot';
+import 'vendor/flot/jquery.flot.selection';
+import 'vendor/flot/jquery.flot.time';
+import 'vendor/flot/jquery.flot.stack';
+import 'vendor/flot/jquery.flot.pie';
+import 'vendor/flot/jquery.flot.stackpercent';
+import 'vendor/flot/jquery.flot.fillbelow';
+import 'vendor/flot/jquery.flot.crosshair';
+import 'vendor/flot/jquery.flot.dashes';
+
+for (let flotDep of ['jquery.flot', 'jquery.flot.pie', 'jquery.flot.time']) {
+ System.registerDynamic(flotDep, [], true, function(require, exports, module) { module.exports = {fakeDep: 1}; });
+}
+
+export function importPluginModule(path: string): Promise
{
+ let builtIn = builtInPlugins[path];
+ if (builtIn) {
+ return Promise.resolve(builtIn);
+ }
+ return System.import(path);
+}
+
+export function loadPluginCss(options) {
+ if (config.bootData.user.lightTheme) {
+ System.import(options.light + '!css');
+ } else {
+ System.import(options.dark + '!css');
+ }
+}
+
diff --git a/public/app/core/components/row_ctrl.ts b/public/app/features/plugins/row_ctrl.ts
similarity index 100%
rename from public/app/core/components/row_ctrl.ts
rename to public/app/features/plugins/row_ctrl.ts
diff --git a/public/app/features/plugins/specs/datasource_srv_specs.ts b/public/app/features/plugins/specs/datasource_srv_specs.ts
new file mode 100644
index 00000000000..f4bb22b24a1
--- /dev/null
+++ b/public/app/features/plugins/specs/datasource_srv_specs.ts
@@ -0,0 +1,60 @@
+import {describe, beforeEach, it, expect, angularMocks} from 'test/lib/common';
+import config from 'app/core/config';
+import 'app/features/plugins/datasource_srv';
+
+describe('datasource_srv', function() {
+ var _datasourceSrv;
+ var metricSources;
+ var templateSrv = {};
+
+ beforeEach(angularMocks.module('grafana.core'));
+ beforeEach(angularMocks.module(function($provide) {
+ $provide.value('templateSrv', templateSrv);
+ }));
+ beforeEach(angularMocks.module('grafana.services'));
+ beforeEach(angularMocks.inject(function(datasourceSrv) {
+ _datasourceSrv = datasourceSrv;
+ }));
+
+ describe('when loading metric sources', function() {
+ var unsortedDatasources = {
+ 'mmm': {
+ type: 'test-db',
+ meta: { metrics: {m: 1} }
+ },
+ '--Grafana--': {
+ type: 'grafana',
+ meta: {builtIn: true, metrics: {m: 1}, id: "grafana"}
+ },
+ '--Mixed--': {
+ type: 'test-db',
+ meta: {builtIn: true, metrics: {m: 1}, id: "mixed"}
+ },
+ 'ZZZ': {
+ type: 'test-db',
+ meta: {metrics: {m: 1} }
+ },
+ 'aaa': {
+ type: 'test-db',
+ meta: { metrics: {m: 1} }
+ },
+ 'BBB': {
+ type: 'test-db',
+ meta: { metrics: {m: 1} }
+ },
+ };
+ beforeEach(function() {
+ config.datasources = unsortedDatasources;
+ metricSources = _datasourceSrv.getMetricSources({skipVariables: true});
+ });
+
+ it('should return a list of sources sorted case insensitively with builtin sources last', function() {
+ expect(metricSources[0].name).to.be('aaa');
+ expect(metricSources[1].name).to.be('BBB');
+ expect(metricSources[2].name).to.be('mmm');
+ expect(metricSources[3].name).to.be('ZZZ');
+ expect(metricSources[4].name).to.be('--Grafana--');
+ expect(metricSources[5].name).to.be('--Mixed--');
+ });
+ });
+});
diff --git a/public/app/features/styleguide/styleguide.ts b/public/app/features/styleguide/styleguide.ts
index fcaf0452291..7f3e0f57f95 100644
--- a/public/app/features/styleguide/styleguide.ts
+++ b/public/app/features/styleguide/styleguide.ts
@@ -36,7 +36,7 @@ class StyleGuideCtrl {
}
loadColors() {
- this.$http.get('public/sass/styleguide.json').then(res => {
+ this.$http.get('public/build/styleguide.json').then(res => {
this.colors = _.map(res.data[this.theme], (value, key) => {
return {name: key, value: value};
});
diff --git a/public/app/features/templating/specs/template_srv_specs.ts b/public/app/features/templating/specs/template_srv_specs.ts
index f8a006fc83c..5a48fc8e173 100644
--- a/public/app/features/templating/specs/template_srv_specs.ts
+++ b/public/app/features/templating/specs/template_srv_specs.ts
@@ -10,6 +10,7 @@ describe('templateSrv', function() {
beforeEach(angularMocks.module('grafana.services'));
beforeEach(angularMocks.module($provide => {
$provide.value('timeSrv', {});
+ $provide.value('datasourceSrv', {});
}));
beforeEach(angularMocks.inject(function(variableSrv, templateSrv) {
diff --git a/public/app/headers/common.d.ts b/public/app/headers/common.d.ts
index 00868c3fb42..963040938fd 100644
--- a/public/app/headers/common.d.ts
+++ b/public/app/headers/common.d.ts
@@ -81,3 +81,4 @@ declare module 'ace' {
var ace: any;
export default ace;
}
+
diff --git a/public/app/index.ts b/public/app/index.ts
new file mode 100644
index 00000000000..696b18112a6
--- /dev/null
+++ b/public/app/index.ts
@@ -0,0 +1,3 @@
+import app from './app';
+app.init();
+
diff --git a/public/app/plugins/datasource/cloudwatch/annotation_query.d.ts b/public/app/plugins/datasource/cloudwatch/annotation_query.d.ts
deleted file mode 100644
index c3318b8e133..00000000000
--- a/public/app/plugins/datasource/cloudwatch/annotation_query.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-declare var test: any;
-export default test;
diff --git a/public/app/plugins/datasource/cloudwatch/annotation_query.js b/public/app/plugins/datasource/cloudwatch/annotation_query.js
deleted file mode 100644
index 20d04314e83..00000000000
--- a/public/app/plugins/datasource/cloudwatch/annotation_query.js
+++ /dev/null
@@ -1,106 +0,0 @@
-define([
- 'lodash',
-],
-function (_) {
- 'use strict';
-
- function CloudWatchAnnotationQuery(datasource, annotation, $q, templateSrv) {
- this.datasource = datasource;
- this.annotation = annotation;
- this.$q = $q;
- this.templateSrv = templateSrv;
- }
-
- CloudWatchAnnotationQuery.prototype.process = function(from, to) {
- var self = this;
- var usePrefixMatch = this.annotation.prefixMatching;
- var region = this.templateSrv.replace(this.annotation.region);
- var namespace = this.templateSrv.replace(this.annotation.namespace);
- var metricName = this.templateSrv.replace(this.annotation.metricName);
- var dimensions = this.datasource.convertDimensionFormat(this.annotation.dimensions);
- var statistics = _.map(this.annotation.statistics, function(s) { return self.templateSrv.replace(s); });
- var defaultPeriod = usePrefixMatch ? '' : '300';
- var period = this.annotation.period || defaultPeriod;
- period = parseInt(period, 10);
- var actionPrefix = this.annotation.actionPrefix || '';
- var alarmNamePrefix = this.annotation.alarmNamePrefix || '';
-
- var d = this.$q.defer();
- var allQueryPromise;
- if (usePrefixMatch) {
- allQueryPromise = [
- this.datasource.performDescribeAlarms(region, actionPrefix, alarmNamePrefix, [], '').then(function(alarms) {
- alarms.MetricAlarms = self.filterAlarms(alarms, namespace, metricName, dimensions, statistics, period);
- return alarms;
- })
- ];
- } else {
- if (!region || !namespace || !metricName || _.isEmpty(statistics)) { return this.$q.when([]); }
-
- allQueryPromise = _.map(statistics, function(statistic) {
- return self.datasource.performDescribeAlarmsForMetric(region, namespace, metricName, dimensions, statistic, period);
- });
- }
- this.$q.all(allQueryPromise).then(function(alarms) {
- var eventList = [];
-
- var start = self.datasource.convertToCloudWatchTime(from, false);
- var end = self.datasource.convertToCloudWatchTime(to, true);
- _.chain(alarms)
- .map('MetricAlarms')
- .flatten()
- .each(function(alarm) {
- if (!alarm) {
- d.resolve(eventList);
- return;
- }
-
- self.datasource.performDescribeAlarmHistory(region, alarm.AlarmName, start, end).then(function(history) {
- _.each(history.AlarmHistoryItems, function(h) {
- var event = {
- annotation: self.annotation,
- time: Date.parse(h.Timestamp),
- title: h.AlarmName,
- tags: [h.HistoryItemType],
- text: h.HistorySummary
- };
-
- eventList.push(event);
- });
-
- d.resolve(eventList);
- });
- })
- .value();
- });
-
- return d.promise;
- };
-
- CloudWatchAnnotationQuery.prototype.filterAlarms = function(alarms, namespace, metricName, dimensions, statistics, period) {
- return _.filter(alarms.MetricAlarms, function(alarm) {
- if (!_.isEmpty(namespace) && alarm.Namespace !== namespace) {
- return false;
- }
- if (!_.isEmpty(metricName) && alarm.MetricName !== metricName) {
- return false;
- }
- var sd = function(d) {
- return d.Name;
- };
- var isSameDimensions = JSON.stringify(_.sortBy(alarm.Dimensions, sd)) === JSON.stringify(_.sortBy(dimensions, sd));
- if (!_.isEmpty(dimensions) && !isSameDimensions) {
- return false;
- }
- if (!_.isEmpty(statistics) && !_.includes(statistics, alarm.Statistic)) {
- return false;
- }
- if (!_.isNaN(period) && alarm.Period !== period) {
- return false;
- }
- return true;
- });
- };
-
- return CloudWatchAnnotationQuery;
-});
diff --git a/public/app/plugins/datasource/cloudwatch/datasource.d.ts b/public/app/plugins/datasource/cloudwatch/datasource.d.ts
index afc49d07dea..52adda4164d 100644
--- a/public/app/plugins/datasource/cloudwatch/datasource.d.ts
+++ b/public/app/plugins/datasource/cloudwatch/datasource.d.ts
@@ -1,3 +1,3 @@
declare var CloudWatchDatasource: any;
-export {CloudWatchDatasource};
+export default CloudWatchDatasource;
diff --git a/public/app/plugins/datasource/cloudwatch/datasource.js b/public/app/plugins/datasource/cloudwatch/datasource.js
index 2ec89b854c6..f6ea196e764 100644
--- a/public/app/plugins/datasource/cloudwatch/datasource.js
+++ b/public/app/plugins/datasource/cloudwatch/datasource.js
@@ -5,18 +5,18 @@ define([
'app/core/utils/datemath',
'app/core/utils/kbn',
'app/features/templating/variable',
- './annotation_query',
],
-function (angular, _, moment, dateMath, kbn, templatingVariable, CloudWatchAnnotationQuery) {
+function (angular, _, moment, dateMath, kbn, templatingVariable) {
'use strict';
/** @ngInject */
- function CloudWatchDatasource(instanceSettings, $q, backendSrv, templateSrv) {
+ function CloudWatchDatasource(instanceSettings, $q, backendSrv, templateSrv, timeSrv) {
this.type = 'cloudwatch';
this.name = instanceSettings.name;
this.supportMetrics = true;
this.proxyUrl = instanceSettings.url;
this.defaultRegion = instanceSettings.jsonData.defaultRegion;
+ this.instanceSettings = instanceSettings;
this.standardStatistics = [
'Average',
'Maximum',
@@ -27,31 +27,30 @@ function (angular, _, moment, dateMath, kbn, templatingVariable, CloudWatchAnnot
var self = this;
this.query = function(options) {
- var start = self.convertToCloudWatchTime(options.range.from, false);
- var end = self.convertToCloudWatchTime(options.range.to, true);
-
- var queries = [];
options = angular.copy(options);
options.targets = this.expandTemplateVariable(options.targets, options.scopedVars, templateSrv);
- _.each(options.targets, function(target) {
- if (target.hide || !target.namespace || !target.metricName || _.isEmpty(target.statistics)) {
- return;
- }
- var query = {};
- query.region = templateSrv.replace(target.region, options.scopedVars);
- query.namespace = templateSrv.replace(target.namespace, options.scopedVars);
- query.metricName = templateSrv.replace(target.metricName, options.scopedVars);
- query.dimensions = self.convertDimensionFormat(target.dimensions, options.scopedVars);
- query.statistics = target.statistics;
+ var queries = _.filter(options.targets, function (item) {
+ return item.hide !== true &&
+ !!item.region &&
+ !!item.namespace &&
+ !!item.metricName &&
+ !_.isEmpty(item.statistics);
+ }).map(function (item) {
+ item.region = templateSrv.replace(item.region, options.scopedVars);
+ item.namespace = templateSrv.replace(item.namespace, options.scopedVars);
+ item.metricName = templateSrv.replace(item.metricName, options.scopedVars);
+ item.dimensions = self.convertDimensionFormat(item.dimensions, options.scopeVars);
+ item.period = self.getPeriod(item, options);
- var now = Math.round(Date.now() / 1000);
- var period = this.getPeriod(target, query, options, start, end, now);
- target.period = period;
- query.period = period;
-
- queries.push(query);
- }.bind(this));
+ return _.extend({
+ refId: item.refId,
+ intervalMs: options.intervalMs,
+ maxDataPoints: options.maxDataPoints,
+ datasourceId: self.instanceSettings.id,
+ type: 'timeSeriesQuery',
+ }, item);
+ });
// No valid targets, return the empty result to save a round trip.
if (_.isEmpty(queries)) {
@@ -60,23 +59,20 @@ function (angular, _, moment, dateMath, kbn, templatingVariable, CloudWatchAnnot
return d.promise;
}
- var allQueryPromise = _.map(queries, function(query) {
- return this.performTimeSeriesQuery(query, start, end);
- }.bind(this));
+ var request = {
+ from: options.range.from.valueOf().toString(),
+ to: options.range.to.valueOf().toString(),
+ queries: queries
+ };
- return $q.all(allQueryPromise).then(function(allResponse) {
- var result = [];
-
- _.each(allResponse, function(response, index) {
- var metrics = transformMetricData(response, options.targets[index], options.scopedVars);
- result = result.concat(metrics);
- });
-
- return {data: result};
- });
+ return this.performTimeSeriesQuery(request);
};
- this.getPeriod = function(target, query, options, start, end, now) {
+ this.getPeriod = function(target, options, now) {
+ var start = this.convertToCloudWatchTime(options.range.from, false);
+ var end = this.convertToCloudWatchTime(options.range.to, true);
+ now = Math.round((now || Date.now()) / 1000);
+
var period;
var range = end - start;
@@ -85,7 +81,7 @@ function (angular, _, moment, dateMath, kbn, templatingVariable, CloudWatchAnnot
var periodUnit = 60;
if (!target.period) {
if (now - start <= (daySec * 15)) { // until 15 days ago
- if (query.namespace === 'AWS/EC2') {
+ if (target.namespace === 'AWS/EC2') {
periodUnit = period = 300;
} else {
periodUnit = period = 60;
@@ -114,85 +110,93 @@ function (angular, _, moment, dateMath, kbn, templatingVariable, CloudWatchAnnot
return period;
};
- this.performTimeSeriesQuery = function(query, start, end) {
- var statistics = _.filter(query.statistics, function(s) { return _.includes(self.standardStatistics, s); });
- var extendedStatistics = _.reject(query.statistics, function(s) { return _.includes(self.standardStatistics, s); });
- return this.awsRequest({
- region: query.region,
- action: 'GetMetricStatistics',
- parameters: {
- namespace: query.namespace,
- metricName: query.metricName,
- dimensions: query.dimensions,
- statistics: statistics,
- extendedStatistics: extendedStatistics,
- startTime: start,
- endTime: end,
- period: query.period
+ this.performTimeSeriesQuery = function(request) {
+ return backendSrv.post('/api/tsdb/query', request).then(function (res) {
+ var data = [];
+
+ if (res.results) {
+ _.forEach(res.results, function (queryRes) {
+ _.forEach(queryRes.series, function (series) {
+ data.push({target: series.name, datapoints: series.points});
+ });
+ });
}
+
+ return {data: data};
});
};
- this.getRegions = function() {
- return this.awsRequest({action: '__GetRegions'});
+ function transformSuggestDataFromTable(suggestData) {
+ return _.map(suggestData.results['metricFindQuery'].tables[0].rows, function (v) {
+ return {
+ text: v[0],
+ value: v[1]
+ };
+ });
+ }
+
+ this.doMetricQueryRequest = function (subtype, parameters) {
+ var range = timeSrv.timeRange();
+ return backendSrv.post('/api/tsdb/query', {
+ from: range.from.valueOf().toString(),
+ to: range.to.valueOf().toString(),
+ queries: [
+ _.extend({
+ refId: 'metricFindQuery',
+ intervalMs: 1, // dummy
+ maxDataPoints: 1, // dummy
+ datasourceId: this.instanceSettings.id,
+ type: 'metricFindQuery',
+ subtype: subtype
+ }, parameters)
+ ]
+ }).then(function (r) { return transformSuggestDataFromTable(r); });
+ };
+
+ this.getRegions = function () {
+ return this.doMetricQueryRequest('regions', null);
};
this.getNamespaces = function() {
- return this.awsRequest({action: '__GetNamespaces'});
+ return this.doMetricQueryRequest('namespaces', null);
};
- this.getMetrics = function(namespace, region) {
- return this.awsRequest({
- action: '__GetMetrics',
- region: region,
- parameters: {
- namespace: templateSrv.replace(namespace)
- }
+ this.getMetrics = function (namespace, region) {
+ return this.doMetricQueryRequest('metrics', {
+ region: templateSrv.replace(region),
+ namespace: templateSrv.replace(namespace)
});
};
this.getDimensionKeys = function(namespace, region) {
- return this.awsRequest({
- action: '__GetDimensions',
- region: region,
- parameters: {
- namespace: templateSrv.replace(namespace)
- }
+ return this.doMetricQueryRequest('dimension_keys', {
+ region: templateSrv.replace(region),
+ namespace: templateSrv.replace(namespace)
});
};
this.getDimensionValues = function(region, namespace, metricName, dimensionKey, filterDimensions) {
- var request = {
+ return this.doMetricQueryRequest('dimension_values', {
region: templateSrv.replace(region),
- action: 'ListMetrics',
- parameters: {
- namespace: templateSrv.replace(namespace),
- metricName: templateSrv.replace(metricName),
- dimensions: this.convertDimensionFormat(filterDimensions, {}),
- }
- };
-
- return this.awsRequest(request).then(function(result) {
- return _.chain(result.Metrics)
- .map('Dimensions')
- .flatten()
- .filter(function(dimension) {
- return dimension !== null && dimension.Name === dimensionKey;
- })
- .map('Value')
- .uniq()
- .sortBy()
- .map(function(value) {
- return {value: value, text: value};
- }).value();
+ namespace: templateSrv.replace(namespace),
+ metricName: templateSrv.replace(metricName),
+ dimensionKey: templateSrv.replace(dimensionKey),
+ dimensions: this.convertDimensionFormat(filterDimensions, {}),
});
};
- this.performEC2DescribeInstances = function(region, filters, instanceIds) {
- return this.awsRequest({
- region: region,
- action: 'DescribeInstances',
- parameters: { filters: filters, instanceIds: instanceIds }
+ this.getEbsVolumeIds = function(region, instanceId) {
+ return this.doMetricQueryRequest('ebs_volume_ids', {
+ region: templateSrv.replace(region),
+ instanceId: templateSrv.replace(instanceId)
+ });
+ };
+
+ this.getEc2InstanceAttribute = function(region, attributeName, filters) {
+ return this.doMetricQueryRequest('ec2_instance_attribute', {
+ region: templateSrv.replace(region),
+ attributeName: templateSrv.replace(attributeName),
+ filters: filters
});
};
@@ -201,12 +205,6 @@ function (angular, _, moment, dateMath, kbn, templatingVariable, CloudWatchAnnot
var namespace;
var metricName;
- var transformSuggestData = function(suggestData) {
- return _.map(suggestData, function(v) {
- return { text: v };
- });
- };
-
var regionQuery = query.match(/^regions\(\)/);
if (regionQuery) {
return this.getRegions();
@@ -219,114 +217,98 @@ function (angular, _, moment, dateMath, kbn, templatingVariable, CloudWatchAnnot
var metricNameQuery = query.match(/^metrics\(([^\)]+?)(,\s?([^,]+?))?\)/);
if (metricNameQuery) {
- return this.getMetrics(templateSrv.replace(metricNameQuery[1]), templateSrv.replace(metricNameQuery[3]));
+ namespace = metricNameQuery[1];
+ region = metricNameQuery[3];
+ return this.getMetrics(namespace, region);
}
var dimensionKeysQuery = query.match(/^dimension_keys\(([^\)]+?)(,\s?([^,]+?))?\)/);
if (dimensionKeysQuery) {
- return this.getDimensionKeys(templateSrv.replace(dimensionKeysQuery[1]), templateSrv.replace(dimensionKeysQuery[3]));
+ namespace = dimensionKeysQuery[1];
+ region = dimensionKeysQuery[3];
+ return this.getDimensionKeys(namespace, region);
}
var dimensionValuesQuery = query.match(/^dimension_values\(([^,]+?),\s?([^,]+?),\s?([^,]+?),\s?([^,]+?)\)/);
if (dimensionValuesQuery) {
- region = templateSrv.replace(dimensionValuesQuery[1]);
- namespace = templateSrv.replace(dimensionValuesQuery[2]);
- metricName = templateSrv.replace(dimensionValuesQuery[3]);
- var dimensionKey = templateSrv.replace(dimensionValuesQuery[4]);
+ region = dimensionValuesQuery[1];
+ namespace = dimensionValuesQuery[2];
+ metricName = dimensionValuesQuery[3];
+ var dimensionKey = dimensionValuesQuery[4];
return this.getDimensionValues(region, namespace, metricName, dimensionKey, {});
}
var ebsVolumeIdsQuery = query.match(/^ebs_volume_ids\(([^,]+?),\s?([^,]+?)\)/);
if (ebsVolumeIdsQuery) {
- region = templateSrv.replace(ebsVolumeIdsQuery[1]);
- var instanceId = templateSrv.replace(ebsVolumeIdsQuery[2]);
- var instanceIds = [
- instanceId
- ];
-
- return this.performEC2DescribeInstances(region, [], instanceIds).then(function(result) {
- var volumeIds = _.map(result.Reservations[0].Instances[0].BlockDeviceMappings, function(mapping) {
- return mapping.Ebs.VolumeId;
- });
-
- return transformSuggestData(volumeIds);
- });
+ region = ebsVolumeIdsQuery[1];
+ var instanceId = ebsVolumeIdsQuery[2];
+ return this.getEbsVolumeIds(region, instanceId);
}
var ec2InstanceAttributeQuery = query.match(/^ec2_instance_attribute\(([^,]+?),\s?([^,]+?),\s?(.+?)\)/);
if (ec2InstanceAttributeQuery) {
- region = templateSrv.replace(ec2InstanceAttributeQuery[1]);
+ region = ec2InstanceAttributeQuery[1];
+ var targetAttributeName = ec2InstanceAttributeQuery[2];
var filterJson = JSON.parse(templateSrv.replace(ec2InstanceAttributeQuery[3]));
- var filters = _.map(filterJson, function(values, name) {
- return {
- Name: name,
- Values: values
- };
- });
- var targetAttributeName = templateSrv.replace(ec2InstanceAttributeQuery[2]);
-
- return this.performEC2DescribeInstances(region, filters, null).then(function(result) {
- var attributes = _.chain(result.Reservations)
- .map(function(reservations) {
- return _.map(reservations.Instances, function(instance) {
- var tags = {};
- _.each(instance.Tags, function(tag) {
- tags[tag.Key] = tag.Value;
- });
- instance.Tags = tags;
- return instance;
- });
- })
- .map(function(instances) {
- return _.map(instances, targetAttributeName);
- })
- .flatten().uniq().sortBy().value();
- return transformSuggestData(attributes);
- });
+ return this.getEc2InstanceAttribute(region, targetAttributeName, filterJson);
}
return $q.when([]);
};
- this.performDescribeAlarms = function(region, actionPrefix, alarmNamePrefix, alarmNames, stateValue) {
- return this.awsRequest({
- region: region,
- action: 'DescribeAlarms',
- parameters: { actionPrefix: actionPrefix, alarmNamePrefix: alarmNamePrefix, alarmNames: alarmNames, stateValue: stateValue }
+ this.annotationQuery = function (options) {
+ var annotation = options.annotation;
+ var statistics = _.map(annotation.statistics, function (s) { return templateSrv.replace(s); });
+ var defaultPeriod = annotation.prefixMatching ? '' : '300';
+ var period = annotation.period || defaultPeriod;
+ period = parseInt(period, 10);
+ var parameters = {
+ prefixMatching: annotation.prefixMatching,
+ region: templateSrv.replace(annotation.region),
+ namespace: templateSrv.replace(annotation.namespace),
+ metricName: templateSrv.replace(annotation.metricName),
+ dimensions: this.convertDimensionFormat(annotation.dimensions, {}),
+ statistics: statistics,
+ period: period,
+ actionPrefix: annotation.actionPrefix || '',
+ alarmNamePrefix: annotation.alarmNamePrefix || ''
+ };
+
+ return backendSrv.post('/api/tsdb/query', {
+ from: options.range.from.valueOf().toString(),
+ to: options.range.to.valueOf().toString(),
+ queries: [
+ _.extend({
+ refId: 'annotationQuery',
+ intervalMs: 1, // dummy
+ maxDataPoints: 1, // dummy
+ datasourceId: this.instanceSettings.id,
+ type: 'annotationQuery'
+ }, parameters)
+ ]
+ }).then(function (r) {
+ return _.map(r.results['annotationQuery'].tables[0].rows, function (v) {
+ return {
+ annotation: annotation,
+ time: Date.parse(v[0]),
+ title: v[1],
+ tags: [v[2]],
+ text: v[3]
+ };
+ });
});
};
- this.performDescribeAlarmsForMetric = function(region, namespace, metricName, dimensions, statistic, period) {
- var s = _.includes(self.standardStatistics, statistic) ? statistic : '';
- var es = _.includes(self.standardStatistics, statistic) ? '' : statistic;
- return this.awsRequest({
- region: region,
- action: 'DescribeAlarmsForMetric',
- parameters: {
- namespace: namespace,
- metricName: metricName,
- dimensions: dimensions,
- statistic: s,
- extendedStatistic: es,
- period: period
- }
+ this.targetContainsTemplate = function(target) {
+ return templateSrv.variableExists(target.region) ||
+ templateSrv.variableExists(target.namespace) ||
+ templateSrv.variableExists(target.metricName) ||
+ _.find(target.dimensions, function(v, k) {
+ return templateSrv.variableExists(k) || templateSrv.variableExists(v);
});
};
- this.performDescribeAlarmHistory = function(region, alarmName, startDate, endDate) {
- return this.awsRequest({
- region: region,
- action: 'DescribeAlarmHistory',
- parameters: { alarmName: alarmName, startDate: startDate, endDate: endDate }
- });
- };
-
- this.annotationQuery = function(options) {
- var annotationQuery = new CloudWatchAnnotationQuery(this, options.annotation, $q, templateSrv);
- return annotationQuery.process(options.range.from, options.range.to);
- };
-
this.testDatasource = function() {
/* use billing metrics for test */
var region = this.defaultRegion;
@@ -355,62 +337,6 @@ function (angular, _, moment, dateMath, kbn, templatingVariable, CloudWatchAnnot
return this.defaultRegion;
};
- function transformMetricData(md, options, scopedVars) {
- var aliasRegex = /\{\{(.+?)\}\}/g;
- var aliasPattern = options.alias || '{{metric}}_{{stat}}';
- var aliasData = {
- region: templateSrv.replace(options.region, scopedVars),
- namespace: templateSrv.replace(options.namespace, scopedVars),
- metric: templateSrv.replace(options.metricName, scopedVars),
- };
-
- var aliasDimensions = {};
-
- _.each(_.keys(options.dimensions), function(origKey) {
- var key = templateSrv.replace(origKey, scopedVars);
- var value = templateSrv.replace(options.dimensions[origKey], scopedVars);
- aliasDimensions[key] = value;
- });
-
- _.extend(aliasData, aliasDimensions);
-
- var periodMs = options.period * 1000;
-
- return _.map(options.statistics, function(stat) {
- var extended = !_.includes(self.standardStatistics, stat);
- var dps = [];
- var lastTimestamp = null;
- _.chain(md.Datapoints)
- .sortBy(function(dp) {
- return dp.Timestamp;
- })
- .each(function(dp) {
- var timestamp = new Date(dp.Timestamp).getTime();
- while (lastTimestamp && (timestamp - lastTimestamp) > periodMs) {
- dps.push([null, lastTimestamp + periodMs]);
- lastTimestamp = lastTimestamp + periodMs;
- }
- lastTimestamp = timestamp;
- if (!extended) {
- dps.push([dp[stat], timestamp]);
- } else {
- dps.push([dp.ExtendedStatistics[stat], timestamp]);
- }
- })
- .value();
-
- aliasData.stat = stat;
- var seriesName = aliasPattern.replace(aliasRegex, function(match, g1) {
- if (aliasData[g1]) {
- return aliasData[g1];
- }
- return g1;
- });
-
- return {target: seriesName, datapoints: dps};
- });
- }
-
this.getExpandedVariables = function(target, dimensionKey, variable, templateSrv) {
/* if the all checkbox is marked we should add all values to the targets */
var allSelected = _.find(variable.options, {'selected': true, 'text': 'All'});
@@ -461,17 +387,14 @@ function (angular, _, moment, dateMath, kbn, templatingVariable, CloudWatchAnnot
};
this.convertDimensionFormat = function(dimensions, scopedVars) {
- return _.map(dimensions, function(value, key) {
- return {
- Name: templateSrv.replace(key, scopedVars),
- Value: templateSrv.replace(value, scopedVars)
- };
+ var convertedDimensions = {};
+ _.each(dimensions, function (value, key) {
+ convertedDimensions[templateSrv.replace(key, scopedVars)] = templateSrv.replace(value, scopedVars);
});
+ return convertedDimensions;
};
}
- return {
- CloudWatchDatasource: CloudWatchDatasource
- };
+ return CloudWatchDatasource;
});
diff --git a/public/app/plugins/datasource/cloudwatch/module.ts b/public/app/plugins/datasource/cloudwatch/module.ts
index e2e70ca5f7c..abd68bf47aa 100644
--- a/public/app/plugins/datasource/cloudwatch/module.ts
+++ b/public/app/plugins/datasource/cloudwatch/module.ts
@@ -1,6 +1,6 @@
import './query_parameter_ctrl';
-import {CloudWatchDatasource} from './datasource';
+import CloudWatchDatasource from './datasource';
import {CloudWatchQueryCtrl} from './query_ctrl';
import {CloudWatchConfigCtrl} from './config_ctrl';
diff --git a/public/app/plugins/datasource/cloudwatch/plugin.json b/public/app/plugins/datasource/cloudwatch/plugin.json
index bac2ddca8b9..3af7d8ccb6e 100644
--- a/public/app/plugins/datasource/cloudwatch/plugin.json
+++ b/public/app/plugins/datasource/cloudwatch/plugin.json
@@ -4,6 +4,7 @@
"id": "cloudwatch",
"metrics": true,
+ "alerting": true,
"annotations": true,
"info": {
diff --git a/public/app/plugins/datasource/cloudwatch/specs/annotation_query_specs.ts b/public/app/plugins/datasource/cloudwatch/specs/annotation_query_specs.ts
deleted file mode 100644
index d469ca8685b..00000000000
--- a/public/app/plugins/datasource/cloudwatch/specs/annotation_query_specs.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import "../datasource";
-import {describe, beforeEach, it, expect, angularMocks} from 'test/lib/common';
-import moment from 'moment';
-import helpers from 'test/specs/helpers';
-import {CloudWatchDatasource} from "../datasource";
-import CloudWatchAnnotationQuery from '../annotation_query';
-
-describe('CloudWatchAnnotationQuery', function() {
- var ctx = new helpers.ServiceTestContext();
- var instanceSettings = {
- jsonData: {defaultRegion: 'us-east-1', access: 'proxy'},
- };
-
- beforeEach(angularMocks.module('grafana.core'));
- beforeEach(angularMocks.module('grafana.services'));
- beforeEach(angularMocks.module('grafana.controllers'));
- beforeEach(ctx.providePhase(['templateSrv', 'backendSrv']));
-
- beforeEach(angularMocks.inject(function($q, $rootScope, $httpBackend, $injector) {
- ctx.$q = $q;
- ctx.$httpBackend = $httpBackend;
- ctx.$rootScope = $rootScope;
- ctx.ds = $injector.instantiate(CloudWatchDatasource, {instanceSettings: instanceSettings});
- }));
-
- describe('When performing annotationQuery', function() {
- var parameter = {
- annotation: {
- region: 'us-east-1',
- namespace: 'AWS/EC2',
- metricName: 'CPUUtilization',
- dimensions: {
- InstanceId: 'i-12345678'
- },
- statistics: ['Average'],
- period: 300
- },
- range: {
- from: moment(1443438674760),
- to: moment(1443460274760)
- }
- };
- var alarmResponse = {
- MetricAlarms: [
- {
- AlarmName: 'test_alarm_name'
- }
- ]
- };
- var historyResponse = {
- AlarmHistoryItems: [
- {
- Timestamp: '2015-01-01T00:00:00.000Z',
- HistoryItemType: 'StateUpdate',
- AlarmName: 'test_alarm_name',
- HistoryData: '{}',
- HistorySummary: 'test_history_summary'
- }
- ]
- };
- beforeEach(function() {
- ctx.backendSrv.datasourceRequest = function(params) {
- switch (params.data.action) {
- case 'DescribeAlarmsForMetric':
- return ctx.$q.when({data: alarmResponse});
- case 'DescribeAlarmHistory':
- return ctx.$q.when({data: historyResponse});
- }
- };
- });
- it('should return annotation list', function(done) {
- var annotationQuery = new CloudWatchAnnotationQuery(ctx.ds, parameter.annotation, ctx.$q, ctx.templateSrv);
- annotationQuery.process(parameter.range.from, parameter.range.to).then(function(result) {
- expect(result[0].title).to.be('test_alarm_name');
- expect(result[0].text).to.be('test_history_summary');
- done();
- });
- ctx.$rootScope.$apply();
- });
- });
-});
diff --git a/public/app/plugins/datasource/cloudwatch/specs/datasource_specs.ts b/public/app/plugins/datasource/cloudwatch/specs/datasource_specs.ts
index 0130aee60d3..8642cc871f6 100644
--- a/public/app/plugins/datasource/cloudwatch/specs/datasource_specs.ts
+++ b/public/app/plugins/datasource/cloudwatch/specs/datasource_specs.ts
@@ -1,8 +1,7 @@
-
import "../datasource";
import {describe, beforeEach, it, expect, angularMocks} from 'test/lib/common';
import helpers from 'test/specs/helpers';
-import {CloudWatchDatasource} from "../datasource";
+import CloudWatchDatasource from "../datasource";
describe('CloudWatchDatasource', function() {
var ctx = new helpers.ServiceTestContext();
@@ -28,6 +27,7 @@ describe('CloudWatchDatasource', function() {
var query = {
range: { from: 'now-1h', to: 'now' },
+ rangeRaw: { from: 1483228800, to: 1483232400 },
targets: [
{
region: 'us-east-1',
@@ -43,37 +43,41 @@ describe('CloudWatchDatasource', function() {
};
var response = {
- Datapoints: [
- {
- Average: 1,
- Timestamp: 'Wed Dec 31 1969 16:00:00 GMT-0800 (PST)'
- },
- {
- Average: 2,
- Timestamp: 'Wed Dec 31 1969 16:05:00 GMT-0800 (PST)'
- },
- {
- Average: 5,
- Timestamp: 'Wed Dec 31 1969 16:15:00 GMT-0800 (PST)'
+ timings: [null],
+ results: {
+ A: {
+ error: '',
+ refId: 'A',
+ series: [
+ {
+ name: 'CPUUtilization_Average',
+ points: [
+ [1, 1483228800000],
+ [2, 1483229100000],
+ [5, 1483229700000],
+ ],
+ tags: {
+ InstanceId: 'i-12345678'
+ }
+ }
+ ]
}
- ],
- Label: 'CPUUtilization'
+ }
};
beforeEach(function() {
- ctx.backendSrv.datasourceRequest = function(params) {
+ ctx.backendSrv.post = function(path, params) {
requestParams = params;
- return ctx.$q.when({data: response});
+ return ctx.$q.when(response);
};
});
it('should generate the correct query', function(done) {
ctx.ds.query(query).then(function() {
- var params = requestParams.data.parameters;
+ var params = requestParams.queries[0];
expect(params.namespace).to.be(query.targets[0].namespace);
expect(params.metricName).to.be(query.targets[0].metricName);
- expect(params.dimensions[0].Name).to.be(Object.keys(query.targets[0].dimensions)[0]);
- expect(params.dimensions[0].Value).to.be(query.targets[0].dimensions[Object.keys(query.targets[0].dimensions)[0]]);
+ expect(params.dimensions['InstanceId']).to.be('i-12345678');
expect(params.statistics).to.eql(query.targets[0].statistics);
expect(params.period).to.be(query.targets[0].period);
done();
@@ -88,6 +92,7 @@ describe('CloudWatchDatasource', function() {
var query = {
range: { from: 'now-1h', to: 'now' },
+ rangeRaw: { from: 1483228800, to: 1483232400 },
targets: [
{
region: 'us-east-1',
@@ -103,7 +108,7 @@ describe('CloudWatchDatasource', function() {
};
ctx.ds.query(query).then(function() {
- var params = requestParams.data.parameters;
+ var params = requestParams.queries[0];
expect(params.period).to.be(600);
done();
});
@@ -112,16 +117,8 @@ describe('CloudWatchDatasource', function() {
it('should return series list', function(done) {
ctx.ds.query(query).then(function(result) {
- expect(result.data[0].target).to.be('CPUUtilization_Average');
- expect(result.data[0].datapoints[0][0]).to.be(response.Datapoints[0]['Average']);
- done();
- });
- ctx.$rootScope.$apply();
- });
-
- it('should return null for missing data point', function(done) {
- ctx.ds.query(query).then(function(result) {
- expect(result.data[0].datapoints[2][0]).to.be(null);
+ expect(result.data[0].target).to.be(response.results.A.series[0].name);
+ expect(result.data[0].datapoints[0][0]).to.be(response.results.A.series[0].points[0][0]);
done();
});
ctx.$rootScope.$apply();
@@ -173,6 +170,7 @@ describe('CloudWatchDatasource', function() {
var query = {
range: { from: 'now-1h', to: 'now' },
+ rangeRaw: { from: 1483228800, to: 1483232400 },
targets: [
{
region: 'us-east-1',
@@ -189,40 +187,40 @@ describe('CloudWatchDatasource', function() {
};
var response = {
- Datapoints: [
- {
- ExtendedStatistics: {
- 'p90.00': 1
- },
- Timestamp: 'Wed Dec 31 1969 16:00:00 GMT-0800 (PST)'
- },
- {
- ExtendedStatistics: {
- 'p90.00': 2
- },
- Timestamp: 'Wed Dec 31 1969 16:05:00 GMT-0800 (PST)'
- },
- {
- ExtendedStatistics: {
- 'p90.00': 5
- },
- Timestamp: 'Wed Dec 31 1969 16:15:00 GMT-0800 (PST)'
+ timings: [null],
+ results: {
+ A: {
+ error: '',
+ refId: 'A',
+ series: [
+ {
+ name: 'TargetResponseTime_p90.00',
+ points: [
+ [1, 1483228800000],
+ [2, 1483229100000],
+ [5, 1483229700000],
+ ],
+ tags: {
+ LoadBalancer: 'lb',
+ TargetGroup: 'tg'
+ }
+ }
+ ]
}
- ],
- Label: 'TargetResponseTime'
+ }
};
beforeEach(function() {
- ctx.backendSrv.datasourceRequest = function(params) {
+ ctx.backendSrv.post = function(path, params) {
requestParams = params;
- return ctx.$q.when({data: response});
+ return ctx.$q.when(response);
};
});
it('should return series list', function(done) {
ctx.ds.query(query).then(function(result) {
- expect(result.data[0].target).to.be('TargetResponseTime_p90.00');
- expect(result.data[0].datapoints[0][0]).to.be(response.Datapoints[0].ExtendedStatistics['p90.00']);
+ expect(result.data[0].target).to.be(response.results.A.series[0].name);
+ expect(result.data[0].datapoints[0][0]).to.be(response.results.A.series[0].points[0][0]);
done();
});
ctx.$rootScope.$apply();
@@ -237,7 +235,11 @@ describe('CloudWatchDatasource', function() {
setupCallback();
ctx.backendSrv.datasourceRequest = args => {
scenario.request = args;
- return ctx.$q.when({data: scenario.requestResponse });
+ return ctx.$q.when({ data: scenario.requestResponse });
+ };
+ ctx.backendSrv.post = (path, args) => {
+ scenario.request = args;
+ return ctx.$q.when(scenario.requestResponse);
};
ctx.ds.metricFindQuery(query).then(args => {
scenario.result = args;
@@ -252,135 +254,178 @@ describe('CloudWatchDatasource', function() {
describeMetricFindQuery('regions()', scenario => {
scenario.setup(() => {
- scenario.requestResponse = [{text: 'us-east-1'}];
+ scenario.requestResponse = {
+ results: {
+ metricFindQuery: {
+ tables: [
+ { rows: [['us-east-1', 'us-east-1']] }
+ ]
+ }
+ }
+ };
});
it('should call __GetRegions and return result', () => {
expect(scenario.result[0].text).to.contain('us-east-1');
- expect(scenario.request.data.action).to.be('__GetRegions');
+ expect(scenario.request.queries[0].type).to.be('metricFindQuery');
+ expect(scenario.request.queries[0].subtype).to.be('regions');
});
});
describeMetricFindQuery('namespaces()', scenario => {
scenario.setup(() => {
- scenario.requestResponse = [{text: 'AWS/EC2'}];
+ scenario.requestResponse = {
+ results: {
+ metricFindQuery: {
+ tables: [
+ { rows: [['AWS/EC2', 'AWS/EC2']] }
+ ]
+ }
+ }
+ };
});
it('should call __GetNamespaces and return result', () => {
expect(scenario.result[0].text).to.contain('AWS/EC2');
- expect(scenario.request.data.action).to.be('__GetNamespaces');
+ expect(scenario.request.queries[0].type).to.be('metricFindQuery');
+ expect(scenario.request.queries[0].subtype).to.be('namespaces');
});
});
describeMetricFindQuery('metrics(AWS/EC2)', scenario => {
scenario.setup(() => {
- scenario.requestResponse = [{text: 'CPUUtilization'}];
+ scenario.requestResponse = {
+ results: {
+ metricFindQuery: {
+ tables: [
+ { rows: [['CPUUtilization', 'CPUUtilization']] }
+ ]
+ }
+ }
+ };
});
it('should call __GetMetrics and return result', () => {
expect(scenario.result[0].text).to.be('CPUUtilization');
- expect(scenario.request.data.action).to.be('__GetMetrics');
+ expect(scenario.request.queries[0].type).to.be('metricFindQuery');
+ expect(scenario.request.queries[0].subtype).to.be('metrics');
});
});
describeMetricFindQuery('dimension_keys(AWS/EC2)', scenario => {
scenario.setup(() => {
- scenario.requestResponse = [{text: 'InstanceId'}];
+ scenario.requestResponse = {
+ results: {
+ metricFindQuery: {
+ tables: [
+ { rows: [['InstanceId', 'InstanceId']] }
+ ]
+ }
+ }
+ };
});
it('should call __GetDimensions and return result', () => {
expect(scenario.result[0].text).to.be('InstanceId');
- expect(scenario.request.data.action).to.be('__GetDimensions');
+ expect(scenario.request.queries[0].type).to.be('metricFindQuery');
+ expect(scenario.request.queries[0].subtype).to.be('dimension_keys');
});
});
describeMetricFindQuery('dimension_values(us-east-1,AWS/EC2,CPUUtilization,InstanceId)', scenario => {
scenario.setup(() => {
scenario.requestResponse = {
- Metrics: [
- {
- Namespace: 'AWS/EC2',
- MetricName: 'CPUUtilization',
- Dimensions: [
- {
- Name: 'InstanceId',
- Value: 'i-12345678'
- }
+ results: {
+ metricFindQuery: {
+ tables: [
+ { rows: [['i-12345678', 'i-12345678']] }
]
}
- ]
+ }
};
});
it('should call __ListMetrics and return result', () => {
- expect(scenario.result[0].text).to.be('i-12345678');
- expect(scenario.request.data.action).to.be('ListMetrics');
+ expect(scenario.result[0].text).to.contain('i-12345678');
+ expect(scenario.request.queries[0].type).to.be('metricFindQuery');
+ expect(scenario.request.queries[0].subtype).to.be('dimension_values');
});
});
it('should caclculate the correct period', function () {
var hourSec = 60 * 60;
var daySec = hourSec * 24;
- var start = 1483196400;
+ var start = 1483196400 * 1000;
var testData: any[] = [
- [{ period: 60 }, { namespace: 'AWS/EC2' }, {}, start, start + 3600, (hourSec * 3), 60],
- [{ period: null }, { namespace: 'AWS/EC2' }, {}, start, start + 3600, (hourSec * 3), 300],
- [{ period: 60 }, { namespace: 'AWS/ELB' }, {}, start, start + 3600, (hourSec * 3), 60],
- [{ period: null }, { namespace: 'AWS/ELB' }, {}, start, start + 3600, (hourSec * 3), 60],
- [{ period: 1 }, { namespace: 'CustomMetricsNamespace' }, {}, start, start + 1440 - 1, (hourSec * 3 - 1), 1],
- [{ period: 1 }, { namespace: 'CustomMetricsNamespace' }, {}, start, start + 3600, (hourSec * 3 - 1), 60],
- [{ period: 60 }, { namespace: 'CustomMetricsNamespace' }, {}, start, start + 3600, (hourSec * 3), 60],
- [{ period: null }, { namespace: 'CustomMetricsNamespace' }, {}, start, start + 3600, (hourSec * 3 - 1), 60],
- [{ period: null }, { namespace: 'CustomMetricsNamespace' }, {}, start, start + 3600, (hourSec * 3), 60],
- [{ period: null }, { namespace: 'CustomMetricsNamespace' }, {}, start, start + 3600, (daySec * 15), 60],
- [{ period: null }, { namespace: 'CustomMetricsNamespace' }, {}, start, start + 3600, (daySec * 63), 300],
- [{ period: null }, { namespace: 'CustomMetricsNamespace' }, {}, start, start + 3600, (daySec * 455), 3600]
+ [
+ { period: 60, namespace: 'AWS/EC2' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (hourSec * 3), 60
+ ],
+ [
+ { period: null, namespace: 'AWS/EC2' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (hourSec * 3), 300
+ ],
+ [
+ { period: 60, namespace: 'AWS/ELB' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (hourSec * 3), 60
+ ],
+ [
+ { period: null, namespace: 'AWS/ELB' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (hourSec * 3), 60
+ ],
+ [
+ { period: 1, namespace: 'CustomMetricsNamespace' },
+ { range: { from: new Date(start), to: new Date(start + (1440 - 1) * 1000) } },
+ (hourSec * 3 - 1), 1
+ ],
+ [
+ { period: 1, namespace: 'CustomMetricsNamespace' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (hourSec * 3 - 1), 60
+ ],
+ [
+ { period: 60, namespace: 'CustomMetricsNamespace' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (hourSec * 3), 60
+ ],
+ [
+ { period: null, namespace: 'CustomMetricsNamespace' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (hourSec * 3 - 1), 60
+ ],
+ [
+ { period: null, namespace: 'CustomMetricsNamespace' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (hourSec * 3), 60
+ ],
+ [
+ { period: null, namespace: 'CustomMetricsNamespace' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (daySec * 15), 60
+ ],
+ [
+ { period: null, namespace: 'CustomMetricsNamespace' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (daySec * 63), 300
+ ],
+ [
+ { period: null, namespace: 'CustomMetricsNamespace' },
+ { range: { from: new Date(start), to: new Date(start + 3600 * 1000) } },
+ (daySec * 455), 3600
+ ]
];
for (let t of testData) {
let target = t[0];
- let query = t[1];
- let options = t[2];
- let start = t[3];
- let end = t[4];
- let now = start + t[5];
- let expected = t[6];
- let actual = ctx.ds.getPeriod(target, query, options, start, end, now);
+ let options = t[1];
+ let now = new Date(options.range.from.valueOf() + t[2] * 1000);
+ let expected = t[3];
+ let actual = ctx.ds.getPeriod(target, options, now);
expect(actual).to.be(expected);
}
});
- describeMetricFindQuery('ec2_instance_attribute(us-east-1, Tags.Name, { "tag:team": [ "sysops" ] })', scenario => {
- scenario.setup(() => {
- scenario.requestResponse = {
- Reservations: [
- {
- Instances: [
- {
- Tags: [
- { Key: 'InstanceId', Value: 'i-123456' },
- { Key: 'Name', Value: 'Sysops Dev Server' },
- { Key: 'env', Value: 'dev' },
- { Key: 'team', Value: 'sysops' }
- ]
- },
- {
- Tags: [
- { Key: 'InstanceId', Value: 'i-789012' },
- { Key: 'Name', Value: 'Sysops Staging Server' },
- { Key: 'env', Value: 'staging' },
- { Key: 'team', Value: 'sysops' }
- ]
- }
- ]
- }
- ]
- };
- });
-
- it('should return the "Name" tag for each instance', function() {
- expect(scenario.result[0].text).to.be('Sysops Dev Server');
- expect(scenario.result[1].text).to.be('Sysops Staging Server');
- });
- });
-
});
diff --git a/public/app/plugins/datasource/elasticsearch/datasource.d.ts b/public/app/plugins/datasource/elasticsearch/datasource.d.ts
deleted file mode 100644
index 3682abfb614..00000000000
--- a/public/app/plugins/datasource/elasticsearch/datasource.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-declare var ElasticDatasource: any;
-export {ElasticDatasource};
-
diff --git a/public/app/plugins/datasource/elasticsearch/datasource.js b/public/app/plugins/datasource/elasticsearch/datasource.js
deleted file mode 100644
index d6c2568ae47..00000000000
--- a/public/app/plugins/datasource/elasticsearch/datasource.js
+++ /dev/null
@@ -1,372 +0,0 @@
-define([
- 'angular',
- 'lodash',
- 'moment',
- 'app/core/utils/kbn',
- './query_builder',
- './index_pattern',
- './elastic_response',
- './query_ctrl',
-],
-function (angular, _, moment, kbn, ElasticQueryBuilder, IndexPattern, ElasticResponse) {
- 'use strict';
-
- ElasticResponse = ElasticResponse.ElasticResponse;
-
- /** @ngInject */
- function ElasticDatasource(instanceSettings, $q, backendSrv, templateSrv, timeSrv) {
- this.basicAuth = instanceSettings.basicAuth;
- this.withCredentials = instanceSettings.withCredentials;
- this.url = instanceSettings.url;
- this.name = instanceSettings.name;
- this.index = instanceSettings.index;
- this.timeField = instanceSettings.jsonData.timeField;
- this.esVersion = instanceSettings.jsonData.esVersion;
- this.indexPattern = new IndexPattern(instanceSettings.index, instanceSettings.jsonData.interval);
- this.interval = instanceSettings.jsonData.timeInterval;
- this.queryBuilder = new ElasticQueryBuilder({
- timeField: this.timeField,
- esVersion: this.esVersion,
- });
-
- this._request = function(method, url, data) {
- var options = {
- url: this.url + "/" + url,
- method: method,
- data: data
- };
-
- if (this.basicAuth || this.withCredentials) {
- options.withCredentials = true;
- }
- if (this.basicAuth) {
- options.headers = {
- "Authorization": this.basicAuth
- };
- }
-
- return backendSrv.datasourceRequest(options);
- };
-
- this._get = function(url) {
- var range = timeSrv.timeRange();
- var index_list = this.indexPattern.getIndexList(range.from.valueOf(), range.to.valueOf());
- if (_.isArray(index_list) && index_list.length) {
- return this._request('GET', index_list[0] + url).then(function(results) {
- results.data.$$config = results.config;
- return results.data;
- });
- } else {
- return this._request('GET', this.indexPattern.getIndexForToday() + url).then(function(results) {
- results.data.$$config = results.config;
- return results.data;
- });
- }
- };
-
- this._post = function(url, data) {
- return this._request('POST', url, data).then(function(results) {
- results.data.$$config = results.config;
- return results.data;
- });
- };
-
- this.annotationQuery = function(options) {
- var annotation = options.annotation;
- var timeField = annotation.timeField || '@timestamp';
- var queryString = annotation.query || '*';
- var tagsField = annotation.tagsField || 'tags';
- var titleField = annotation.titleField || 'desc';
- var textField = annotation.textField || null;
-
- var range = {};
- range[timeField]= {
- from: options.range.from.valueOf(),
- to: options.range.to.valueOf(),
- format: "epoch_millis",
- };
-
- var queryInterpolated = templateSrv.replace(queryString, {}, 'lucene');
- var query = {
- "bool": {
- "filter": [
- { "range": range },
- {
- "query_string": {
- "query": queryInterpolated
- }
- }
- ]
- }
- };
-
- var data = {
- "query" : query,
- "size": 10000
- };
-
- // fields field not supported on ES 5.x
- if (this.esVersion < 5) {
- data["fields"] = [timeField, "_source"];
- }
-
- var header = {search_type: "query_then_fetch", "ignore_unavailable": true};
-
- // old elastic annotations had index specified on them
- if (annotation.index) {
- header.index = annotation.index;
- } else {
- header.index = this.indexPattern.getIndexList(options.range.from, options.range.to);
- }
-
- var payload = angular.toJson(header) + '\n' + angular.toJson(data) + '\n';
-
- return this._post('_msearch', payload).then(function(res) {
- var list = [];
- var hits = res.responses[0].hits.hits;
-
- var getFieldFromSource = function(source, fieldName) {
- if (!fieldName) { return; }
-
- var fieldNames = fieldName.split('.');
- var fieldValue = source;
-
- for (var i = 0; i < fieldNames.length; i++) {
- fieldValue = fieldValue[fieldNames[i]];
- if (!fieldValue) {
- console.log('could not find field in annotation: ', fieldName);
- return '';
- }
- }
-
- if (_.isArray(fieldValue)) {
- fieldValue = fieldValue.join(', ');
- }
- return fieldValue;
- };
-
- for (var i = 0; i < hits.length; i++) {
- var source = hits[i]._source;
- var time = source[timeField];
- if (typeof hits[i].fields !== 'undefined') {
- var fields = hits[i].fields;
- if (_.isString(fields[timeField]) || _.isNumber(fields[timeField])) {
- time = fields[timeField];
- }
- }
-
- var event = {
- annotation: annotation,
- time: moment.utc(time).valueOf(),
- title: getFieldFromSource(source, titleField),
- tags: getFieldFromSource(source, tagsField),
- text: getFieldFromSource(source, textField)
- };
-
- list.push(event);
- }
- return list;
- });
- };
-
- this.testDatasource = function() {
- timeSrv.setTime({ from: 'now-1m', to: 'now' }, true);
- // validate that the index exist and has date field
- return this.getFields({type: 'date'}).then(function(dateFields) {
- var timeField = _.find(dateFields, {text: this.timeField});
- if (!timeField) {
- return { status: "error", message: "No date field named " + this.timeField + ' found' };
- }
- return { status: "success", message: "Index OK. Time field name OK." };
- }.bind(this), function(err) {
- console.log(err);
- if (err.data && err.data.error) {
- var message = angular.toJson(err.data.error);
- if (err.data.error.reason) {
- message = err.data.error.reason;
- }
- return { status: "error", message: message };
- } else {
- return { status: "error", message: err.status };
- }
- });
- };
-
- this.getQueryHeader = function(searchType, timeFrom, timeTo) {
- var header = {search_type: searchType, "ignore_unavailable": true};
- header.index = this.indexPattern.getIndexList(timeFrom, timeTo);
- return angular.toJson(header);
- };
-
- this.query = function(options) {
- var payload = "";
- var target;
- var sentTargets = [];
-
- // add global adhoc filters to timeFilter
- var adhocFilters = templateSrv.getAdhocFilters(this.name);
-
- for (var i = 0; i < options.targets.length; i++) {
- target = options.targets[i];
- if (target.hide) {continue;}
-
- var queryString = templateSrv.replace(target.query || '*', options.scopedVars, 'lucene');
- var queryObj = this.queryBuilder.build(target, adhocFilters, queryString);
- var esQuery = angular.toJson(queryObj);
-
- var searchType = (queryObj.size === 0 && this.esVersion < 5) ? 'count' : 'query_then_fetch';
- var header = this.getQueryHeader(searchType, options.range.from, options.range.to);
- payload += header + '\n';
-
- payload += esQuery + '\n';
- sentTargets.push(target);
- }
-
- if (sentTargets.length === 0) {
- return $q.when([]);
- }
-
- payload = payload.replace(/\$timeFrom/g, options.range.from.valueOf());
- payload = payload.replace(/\$timeTo/g, options.range.to.valueOf());
- payload = templateSrv.replace(payload, options.scopedVars);
-
- return this._post('_msearch', payload).then(function(res) {
- return new ElasticResponse(sentTargets, res).getTimeSeries();
- });
- };
-
- this.getFields = function(query) {
- return this._get('/_mapping').then(function(result) {
-
- var typeMap = {
- 'float': 'number',
- 'double': 'number',
- 'integer': 'number',
- 'long': 'number',
- 'date': 'date',
- 'string': 'string',
- 'text': 'string',
- 'scaled_float': 'number',
- 'nested': 'nested'
- };
-
- function shouldAddField(obj, key, query) {
- if (key[0] === '_') {
- return false;
- }
-
- if (!query.type) {
- return true;
- }
-
- // equal query type filter, or via typemap translation
- return query.type === obj.type || query.type === typeMap[obj.type];
- }
-
- // Store subfield names: [system, process, cpu, total] -> system.process.cpu.total
- var fieldNameParts = [];
- var fields = {};
-
- function getFieldsRecursively(obj) {
- for (var key in obj) {
- var subObj = obj[key];
-
- // Check mapping field for nested fields
- if (_.isObject(subObj.properties)) {
- fieldNameParts.push(key);
- getFieldsRecursively(subObj.properties);
- }
-
- if (_.isObject(subObj.fields)) {
- fieldNameParts.push(key);
- getFieldsRecursively(subObj.fields);
- }
-
- if (_.isString(subObj.type)) {
- var fieldName = fieldNameParts.concat(key).join('.');
-
- // Hide meta-fields and check field type
- if (shouldAddField(subObj, key, query)) {
- fields[fieldName] = {
- text: fieldName,
- type: subObj.type
- };
- }
- }
- }
- fieldNameParts.pop();
- }
-
- for (var indexName in result) {
- var index = result[indexName];
- if (index && index.mappings) {
- var mappings = index.mappings;
- for (var typeName in mappings) {
- var properties = mappings[typeName].properties;
- getFieldsRecursively(properties);
- }
- }
- }
-
- // transform to array
- return _.map(fields, function(value) {
- return value;
- });
- });
- };
-
- this.getTerms = function(queryDef) {
- var range = timeSrv.timeRange();
- var searchType = this.esVersion >= 5 ? 'query_then_fetch' : 'count' ;
- var header = this.getQueryHeader(searchType, range.from, range.to);
- var esQuery = angular.toJson(this.queryBuilder.getTermsQuery(queryDef));
-
- esQuery = esQuery.replace(/\$timeFrom/g, range.from.valueOf());
- esQuery = esQuery.replace(/\$timeTo/g, range.to.valueOf());
- esQuery = header + '\n' + esQuery + '\n';
-
- return this._post('_msearch?search_type=' + searchType, esQuery).then(function(res) {
- if (!res.responses[0].aggregations) {
- return [];
- }
-
- var buckets = res.responses[0].aggregations["1"].buckets;
- return _.map(buckets, function(bucket) {
- return {
- text: bucket.key_as_string || bucket.key,
- value: bucket.key
- };
- });
- });
- };
-
- this.metricFindQuery = function(query) {
- query = angular.fromJson(query);
- if (!query) {
- return $q.when([]);
- }
-
- if (query.find === 'fields') {
- query.field = templateSrv.replace(query.field, {}, 'lucene');
- return this.getFields(query);
- }
-
- if (query.find === 'terms') {
- query.query = templateSrv.replace(query.query || '*', {}, 'lucene');
- return this.getTerms(query);
- }
- };
-
- this.getTagKeys = function() {
- return this.getFields({});
- };
-
- this.getTagValues = function(options) {
- return this.getTerms({field: options.key, query: '*'});
- };
- }
-
- return {
- ElasticDatasource: ElasticDatasource
- };
-});
diff --git a/public/app/plugins/datasource/elasticsearch/datasource.ts b/public/app/plugins/datasource/elasticsearch/datasource.ts
new file mode 100644
index 00000000000..543e73d64e5
--- /dev/null
+++ b/public/app/plugins/datasource/elasticsearch/datasource.ts
@@ -0,0 +1,376 @@
+///
+
+import angular from 'angular';
+import _ from 'lodash';
+import moment from 'moment';
+import {ElasticQueryBuilder} from './query_builder';
+import {IndexPattern} from './index_pattern';
+import {ElasticResponse} from './elastic_response';
+
+export class ElasticDatasource {
+ basicAuth: string;
+ withCredentials: boolean;
+ url: string;
+ name: string;
+ index: string;
+ timeField: string;
+ esVersion: number;
+ interval: string;
+ queryBuilder: ElasticQueryBuilder;
+ indexPattern: IndexPattern;
+
+ /** @ngInject */
+ constructor(instanceSettings, private $q, private backendSrv, private templateSrv, private timeSrv) {
+ this.basicAuth = instanceSettings.basicAuth;
+ this.withCredentials = instanceSettings.withCredentials;
+ this.url = instanceSettings.url;
+ this.name = instanceSettings.name;
+ this.index = instanceSettings.index;
+ this.timeField = instanceSettings.jsonData.timeField;
+ this.esVersion = instanceSettings.jsonData.esVersion;
+ this.indexPattern = new IndexPattern(instanceSettings.index, instanceSettings.jsonData.interval);
+ this.interval = instanceSettings.jsonData.timeInterval;
+ this.queryBuilder = new ElasticQueryBuilder({
+ timeField: this.timeField,
+ esVersion: this.esVersion,
+ });
+ }
+
+ private request(method, url, data?) {
+ var options: any = {
+ url: this.url + "/" + url,
+ method: method,
+ data: data
+ };
+
+ if (this.basicAuth || this.withCredentials) {
+ options.withCredentials = true;
+ }
+ if (this.basicAuth) {
+ options.headers = {
+ "Authorization": this.basicAuth
+ };
+ }
+
+ return this.backendSrv.datasourceRequest(options);
+ }
+
+ private get(url) {
+ var range = this.timeSrv.timeRange();
+ var index_list = this.indexPattern.getIndexList(range.from.valueOf(), range.to.valueOf());
+ if (_.isArray(index_list) && index_list.length) {
+ return this.request('GET', index_list[0] + url).then(function(results) {
+ results.data.$$config = results.config;
+ return results.data;
+ });
+ } else {
+ return this.request('GET', this.indexPattern.getIndexForToday() + url).then(function(results) {
+ results.data.$$config = results.config;
+ return results.data;
+ });
+ }
+ }
+
+ private post(url, data) {
+ return this.request('POST', url, data).then(function(results) {
+ results.data.$$config = results.config;
+ return results.data;
+ });
+ }
+
+ annotationQuery(options) {
+ var annotation = options.annotation;
+ var timeField = annotation.timeField || '@timestamp';
+ var queryString = annotation.query || '*';
+ var tagsField = annotation.tagsField || 'tags';
+ var titleField = annotation.titleField || 'desc';
+ var textField = annotation.textField || null;
+
+ var range = {};
+ range[timeField]= {
+ from: options.range.from.valueOf(),
+ to: options.range.to.valueOf(),
+ format: "epoch_millis",
+ };
+
+ var queryInterpolated = this.templateSrv.replace(queryString, {}, 'lucene');
+ var query = {
+ "bool": {
+ "filter": [
+ { "range": range },
+ {
+ "query_string": {
+ "query": queryInterpolated
+ }
+ }
+ ]
+ }
+ };
+
+ var data = {
+ "query" : query,
+ "size": 10000
+ };
+
+ // fields field not supported on ES 5.x
+ if (this.esVersion < 5) {
+ data["fields"] = [timeField, "_source"];
+ }
+
+ var header: any = {search_type: "query_then_fetch", "ignore_unavailable": true};
+
+ // old elastic annotations had index specified on them
+ if (annotation.index) {
+ header.index = annotation.index;
+ } else {
+ header.index = this.indexPattern.getIndexList(options.range.from, options.range.to);
+ }
+
+ var payload = angular.toJson(header) + '\n' + angular.toJson(data) + '\n';
+
+ return this.post('_msearch', payload).then(res => {
+ var list = [];
+ var hits = res.responses[0].hits.hits;
+
+ var getFieldFromSource = function(source, fieldName) {
+ if (!fieldName) { return; }
+
+ var fieldNames = fieldName.split('.');
+ var fieldValue = source;
+
+ for (var i = 0; i < fieldNames.length; i++) {
+ fieldValue = fieldValue[fieldNames[i]];
+ if (!fieldValue) {
+ console.log('could not find field in annotation: ', fieldName);
+ return '';
+ }
+ }
+
+ if (_.isArray(fieldValue)) {
+ fieldValue = fieldValue.join(', ');
+ }
+ return fieldValue;
+ };
+
+ for (var i = 0; i < hits.length; i++) {
+ var source = hits[i]._source;
+ var time = source[timeField];
+ if (typeof hits[i].fields !== 'undefined') {
+ var fields = hits[i].fields;
+ if (_.isString(fields[timeField]) || _.isNumber(fields[timeField])) {
+ time = fields[timeField];
+ }
+ }
+
+ var event = {
+ annotation: annotation,
+ time: moment.utc(time).valueOf(),
+ title: getFieldFromSource(source, titleField),
+ tags: getFieldFromSource(source, tagsField),
+ text: getFieldFromSource(source, textField)
+ };
+
+ list.push(event);
+ }
+ return list;
+ });
+ };
+
+ testDatasource() {
+ this.timeSrv.setTime({ from: 'now-1m', to: 'now' }, true);
+ // validate that the index exist and has date field
+ return this.getFields({type: 'date'}).then(function(dateFields) {
+ var timeField = _.find(dateFields, {text: this.timeField});
+ if (!timeField) {
+ return { status: "error", message: "No date field named " + this.timeField + ' found' };
+ }
+ return { status: "success", message: "Index OK. Time field name OK." };
+ }.bind(this), function(err) {
+ console.log(err);
+ if (err.data && err.data.error) {
+ var message = angular.toJson(err.data.error);
+ if (err.data.error.reason) {
+ message = err.data.error.reason;
+ }
+ return { status: "error", message: message };
+ } else {
+ return { status: "error", message: err.status };
+ }
+ });
+ }
+
+ getQueryHeader(searchType, timeFrom, timeTo) {
+ return angular.toJson({
+ search_type: searchType,
+ "ignore_unavailable": true,
+ index: this.indexPattern.getIndexList(timeFrom, timeTo),
+ });
+ }
+
+ query(options) {
+ var payload = "";
+ var target;
+ var sentTargets = [];
+
+ // add global adhoc filters to timeFilter
+ var adhocFilters = this.templateSrv.getAdhocFilters(this.name);
+
+ for (var i = 0; i < options.targets.length; i++) {
+ target = options.targets[i];
+ if (target.hide) {continue;}
+
+ var queryString = this.templateSrv.replace(target.query || '*', options.scopedVars, 'lucene');
+ var queryObj = this.queryBuilder.build(target, adhocFilters, queryString);
+ var esQuery = angular.toJson(queryObj);
+
+ var searchType = (queryObj.size === 0 && this.esVersion < 5) ? 'count' : 'query_then_fetch';
+ var header = this.getQueryHeader(searchType, options.range.from, options.range.to);
+ payload += header + '\n';
+
+ payload += esQuery + '\n';
+ sentTargets.push(target);
+ }
+
+ if (sentTargets.length === 0) {
+ return this.$q.when([]);
+ }
+
+ payload = payload.replace(/\$timeFrom/g, options.range.from.valueOf());
+ payload = payload.replace(/\$timeTo/g, options.range.to.valueOf());
+ payload = this.templateSrv.replace(payload, options.scopedVars);
+
+ return this.post('_msearch', payload).then(function(res) {
+ return new ElasticResponse(sentTargets, res).getTimeSeries();
+ });
+ };
+
+ getFields(query) {
+ return this.get('/_mapping').then(function(result) {
+
+ var typeMap = {
+ 'float': 'number',
+ 'double': 'number',
+ 'integer': 'number',
+ 'long': 'number',
+ 'date': 'date',
+ 'string': 'string',
+ 'text': 'string',
+ 'scaled_float': 'number',
+ 'nested': 'nested'
+ };
+
+ function shouldAddField(obj, key, query) {
+ if (key[0] === '_') {
+ return false;
+ }
+
+ if (!query.type) {
+ return true;
+ }
+
+ // equal query type filter, or via typemap translation
+ return query.type === obj.type || query.type === typeMap[obj.type];
+ }
+
+ // Store subfield names: [system, process, cpu, total] -> system.process.cpu.total
+ var fieldNameParts = [];
+ var fields = {};
+
+ function getFieldsRecursively(obj) {
+ for (var key in obj) {
+ var subObj = obj[key];
+
+ // Check mapping field for nested fields
+ if (_.isObject(subObj.properties)) {
+ fieldNameParts.push(key);
+ getFieldsRecursively(subObj.properties);
+ }
+
+ if (_.isObject(subObj.fields)) {
+ fieldNameParts.push(key);
+ getFieldsRecursively(subObj.fields);
+ }
+
+ if (_.isString(subObj.type)) {
+ var fieldName = fieldNameParts.concat(key).join('.');
+
+ // Hide meta-fields and check field type
+ if (shouldAddField(subObj, key, query)) {
+ fields[fieldName] = {
+ text: fieldName,
+ type: subObj.type
+ };
+ }
+ }
+ }
+ fieldNameParts.pop();
+ }
+
+ for (var indexName in result) {
+ var index = result[indexName];
+ if (index && index.mappings) {
+ var mappings = index.mappings;
+ for (var typeName in mappings) {
+ var properties = mappings[typeName].properties;
+ getFieldsRecursively(properties);
+ }
+ }
+ }
+
+ // transform to array
+ return _.map(fields, function(value) {
+ return value;
+ });
+ });
+ }
+
+ getTerms(queryDef) {
+ var range = this.timeSrv.timeRange();
+ var searchType = this.esVersion >= 5 ? 'query_then_fetch' : 'count' ;
+ var header = this.getQueryHeader(searchType, range.from, range.to);
+ var esQuery = angular.toJson(this.queryBuilder.getTermsQuery(queryDef));
+
+ esQuery = esQuery.replace(/\$timeFrom/g, range.from.valueOf());
+ esQuery = esQuery.replace(/\$timeTo/g, range.to.valueOf());
+ esQuery = header + '\n' + esQuery + '\n';
+
+ return this.post('_msearch?search_type=' + searchType, esQuery).then(function(res) {
+ if (!res.responses[0].aggregations) {
+ return [];
+ }
+
+ var buckets = res.responses[0].aggregations["1"].buckets;
+ return _.map(buckets, function(bucket) {
+ return {
+ text: bucket.key_as_string || bucket.key,
+ value: bucket.key
+ };
+ });
+ });
+ }
+
+ metricFindQuery(query) {
+ query = angular.fromJson(query);
+ if (!query) {
+ return this.$q.when([]);
+ }
+
+ if (query.find === 'fields') {
+ query.field = this.templateSrv.replace(query.field, {}, 'lucene');
+ return this.getFields(query);
+ }
+
+ if (query.find === 'terms') {
+ query.query = this.templateSrv.replace(query.query || '*', {}, 'lucene');
+ return this.getTerms(query);
+ }
+ }
+
+ getTagKeys() {
+ return this.getFields({});
+ }
+
+ getTagValues(options) {
+ return this.getTerms({field: options.key, query: '*'});
+ }
+}
diff --git a/public/app/plugins/datasource/elasticsearch/elastic_response.ts b/public/app/plugins/datasource/elasticsearch/elastic_response.ts
index 47fa14a99a6..84aa397cb1f 100644
--- a/public/app/plugins/datasource/elasticsearch/elastic_response.ts
+++ b/public/app/plugins/datasource/elasticsearch/elastic_response.ts
@@ -1,130 +1,55 @@
///
import _ from 'lodash';
-import queryDef from "./query_def";
+import * as queryDef from "./query_def";
import TableModel from 'app/core/table_model';
-export function ElasticResponse(targets, response) {
- this.targets = targets;
- this.response = response;
-}
+export class ElasticResponse {
-ElasticResponse.prototype.processMetrics = function(esAgg, target, seriesList, props) {
- var metric, y, i, newSeries, bucket, value;
+ constructor(private targets, private response) {
+ this.targets = targets;
+ this.response = response;
+ }
- for (y = 0; y < target.metrics.length; y++) {
- metric = target.metrics[y];
- if (metric.hide) {
- continue;
- }
+ processMetrics(esAgg, target, seriesList, props) {
+ var metric, y, i, newSeries, bucket, value;
- switch (metric.type) {
- case 'count': {
- newSeries = { datapoints: [], metric: 'count', props: props};
- for (i = 0; i < esAgg.buckets.length; i++) {
- bucket = esAgg.buckets[i];
- value = bucket.doc_count;
- newSeries.datapoints.push([value, bucket.key]);
- }
- seriesList.push(newSeries);
- break;
+ for (y = 0; y < target.metrics.length; y++) {
+ metric = target.metrics[y];
+ if (metric.hide) {
+ continue;
}
- case 'percentiles': {
- if (esAgg.buckets.length === 0) {
+
+ switch (metric.type) {
+ case 'count': {
+ newSeries = { datapoints: [], metric: 'count', props: props};
+ for (i = 0; i < esAgg.buckets.length; i++) {
+ bucket = esAgg.buckets[i];
+ value = bucket.doc_count;
+ newSeries.datapoints.push([value, bucket.key]);
+ }
+ seriesList.push(newSeries);
break;
}
-
- var firstBucket = esAgg.buckets[0];
- var percentiles = firstBucket[metric.id].values;
-
- for (var percentileName in percentiles) {
- newSeries = {datapoints: [], metric: 'p' + percentileName, props: props, field: metric.field};
-
- for (i = 0; i < esAgg.buckets.length; i++) {
- bucket = esAgg.buckets[i];
- var values = bucket[metric.id].values;
- newSeries.datapoints.push([values[percentileName], bucket.key]);
- }
- seriesList.push(newSeries);
- }
-
- break;
- }
- case 'extended_stats': {
- for (var statName in metric.meta) {
- if (!metric.meta[statName]) {
- continue;
+ case 'percentiles': {
+ if (esAgg.buckets.length === 0) {
+ break;
}
- newSeries = {datapoints: [], metric: statName, props: props, field: metric.field};
+ var firstBucket = esAgg.buckets[0];
+ var percentiles = firstBucket[metric.id].values;
- for (i = 0; i < esAgg.buckets.length; i++) {
- bucket = esAgg.buckets[i];
- var stats = bucket[metric.id];
+ for (var percentileName in percentiles) {
+ newSeries = {datapoints: [], metric: 'p' + percentileName, props: props, field: metric.field};
- // add stats that are in nested obj to top level obj
- stats.std_deviation_bounds_upper = stats.std_deviation_bounds.upper;
- stats.std_deviation_bounds_lower = stats.std_deviation_bounds.lower;
-
- newSeries.datapoints.push([stats[statName], bucket.key]);
- }
-
- seriesList.push(newSeries);
- }
-
- break;
- }
- default: {
- newSeries = { datapoints: [], metric: metric.type, field: metric.field, props: props};
- for (i = 0; i < esAgg.buckets.length; i++) {
- bucket = esAgg.buckets[i];
-
- value = bucket[metric.id];
- if (value !== undefined) {
- if (value.normalized_value) {
- newSeries.datapoints.push([value.normalized_value, bucket.key]);
- } else {
- newSeries.datapoints.push([value.value, bucket.key]);
+ for (i = 0; i < esAgg.buckets.length; i++) {
+ bucket = esAgg.buckets[i];
+ var values = bucket[metric.id].values;
+ newSeries.datapoints.push([values[percentileName], bucket.key]);
}
+ seriesList.push(newSeries);
}
- }
- seriesList.push(newSeries);
- break;
- }
- }
- }
-};
-
-ElasticResponse.prototype.processAggregationDocs = function(esAgg, aggDef, target, table, props) {
- // add columns
- if (table.columns.length === 0) {
- for (let propKey of _.keys(props)) {
- table.addColumn({text: propKey, filterable: true});
- }
- table.addColumn({text: aggDef.field, filterable: true});
- }
-
- // helper func to add values to value array
- let addMetricValue = (values, metricName, value) => {
- table.addColumn({text: metricName});
- values.push(value);
- };
-
- for (let bucket of esAgg.buckets) {
- let values = [];
-
- for (let propValues of _.values(props)) {
- values.push(propValues);
- }
-
- // add bucket key (value)
- values.push(bucket.key);
-
- for (let metric of target.metrics) {
- switch (metric.type) {
- case "count": {
- addMetricValue(values, this._getMetricName(metric.type), bucket.doc_count);
break;
}
case 'extended_stats': {
@@ -133,228 +58,304 @@ ElasticResponse.prototype.processAggregationDocs = function(esAgg, aggDef, targe
continue;
}
- var stats = bucket[metric.id];
- // add stats that are in nested obj to top level obj
- stats.std_deviation_bounds_upper = stats.std_deviation_bounds.upper;
- stats.std_deviation_bounds_lower = stats.std_deviation_bounds.lower;
+ newSeries = {datapoints: [], metric: statName, props: props, field: metric.field};
- addMetricValue(values, this._getMetricName(statName), stats[statName]);
+ for (i = 0; i < esAgg.buckets.length; i++) {
+ bucket = esAgg.buckets[i];
+ var stats = bucket[metric.id];
+
+ // add stats that are in nested obj to top level obj
+ stats.std_deviation_bounds_upper = stats.std_deviation_bounds.upper;
+ stats.std_deviation_bounds_lower = stats.std_deviation_bounds.lower;
+
+ newSeries.datapoints.push([stats[statName], bucket.key]);
+ }
+
+ seriesList.push(newSeries);
}
+
break;
}
- default: {
- let metricName = this._getMetricName(metric.type);
- let otherMetrics = _.filter(target.metrics, {type: metric.type});
+ default: {
+ newSeries = { datapoints: [], metric: metric.type, field: metric.field, props: props};
+ for (i = 0; i < esAgg.buckets.length; i++) {
+ bucket = esAgg.buckets[i];
+
+ value = bucket[metric.id];
+ if (value !== undefined) {
+ if (value.normalized_value) {
+ newSeries.datapoints.push([value.normalized_value, bucket.key]);
+ } else {
+ newSeries.datapoints.push([value.value, bucket.key]);
+ }
+ }
- // if more of the same metric type include field field name in property
- if (otherMetrics.length > 1) {
- metricName += ' ' + metric.field;
}
-
- addMetricValue(values, metricName, bucket[metric.id].value);
+ seriesList.push(newSeries);
break;
}
}
}
-
- table.rows.push(values);
}
-};
-// This is quite complex
-// neeed to recurise down the nested buckets to build series
-ElasticResponse.prototype.processBuckets = function(aggs, target, seriesList, table, props, depth) {
- var bucket, aggDef, esAgg, aggId;
- var maxDepth = target.bucketAggs.length-1;
-
- for (aggId in aggs) {
- aggDef = _.find(target.bucketAggs, {id: aggId});
- esAgg = aggs[aggId];
-
- if (!aggDef) {
- continue;
- }
-
- if (depth === maxDepth) {
- if (aggDef.type === 'date_histogram') {
- this.processMetrics(esAgg, target, seriesList, props);
- } else {
- this.processAggregationDocs(esAgg, aggDef, target, table, props);
- }
- } else {
- for (var nameIndex in esAgg.buckets) {
- bucket = esAgg.buckets[nameIndex];
- props = _.clone(props);
- if (bucket.key !== void 0) {
- props[aggDef.field] = bucket.key;
- } else {
- props["filter"] = nameIndex;
- }
- if (bucket.key_as_string) {
- props[aggDef.field] = bucket.key_as_string;
- }
- this.processBuckets(bucket, target, seriesList, table, props, depth+1);
+ processAggregationDocs(esAgg, aggDef, target, table, props) {
+ // add columns
+ if (table.columns.length === 0) {
+ for (let propKey of _.keys(props)) {
+ table.addColumn({text: propKey, filterable: true});
}
+ table.addColumn({text: aggDef.field, filterable: true});
}
- }
-};
-ElasticResponse.prototype._getMetricName = function(metric) {
- var metricDef = _.find(queryDef.metricAggTypes, {value: metric});
- if (!metricDef) {
- metricDef = _.find(queryDef.extendedStats, {value: metric});
- }
-
- return metricDef ? metricDef.text : metric;
-};
-
-ElasticResponse.prototype._getSeriesName = function(series, target, metricTypeCount) {
- var metricName = this._getMetricName(series.metric);
-
- if (target.alias) {
- var regex = /\{\{([\s\S]+?)\}\}/g;
-
- return target.alias.replace(regex, function(match, g1, g2) {
- var group = g1 || g2;
-
- if (group.indexOf('term ') === 0) { return series.props[group.substring(5)]; }
- if (series.props[group] !== void 0) { return series.props[group]; }
- if (group === 'metric') { return metricName; }
- if (group === 'field') { return series.field; }
-
- return match;
- });
- }
-
- if (series.field && queryDef.isPipelineAgg(series.metric)) {
- var appliedAgg = _.find(target.metrics, { id: series.field });
- if (appliedAgg) {
- metricName += ' ' + queryDef.describeMetric(appliedAgg);
- } else {
- metricName = 'Unset';
- }
- } else if (series.field) {
- metricName += ' ' + series.field;
- }
-
- var propKeys = _.keys(series.props);
- if (propKeys.length === 0) {
- return metricName;
- }
-
- var name = '';
- for (var propName in series.props) {
- name += series.props[propName] + ' ';
- }
-
- if (metricTypeCount === 1) {
- return name.trim();
- }
-
- return name.trim() + ' ' + metricName;
-};
-
-ElasticResponse.prototype.nameSeries = function(seriesList, target) {
- var metricTypeCount = _.uniq(_.map(seriesList, 'metric')).length;
- var fieldNameCount = _.uniq(_.map(seriesList, 'field')).length;
-
- for (var i = 0; i < seriesList.length; i++) {
- var series = seriesList[i];
- series.target = this._getSeriesName(series, target, metricTypeCount, fieldNameCount);
- }
-};
-
-ElasticResponse.prototype.processHits = function(hits, seriesList) {
- var series = {target: 'docs', type: 'docs', datapoints: [], total: hits.total, filterable: true};
- var propName, hit, doc, i;
-
- for (i = 0; i < hits.hits.length; i++) {
- hit = hits.hits[i];
- doc = {
- _id: hit._id,
- _type: hit._type,
- _index: hit._index
+ // helper func to add values to value array
+ let addMetricValue = (values, metricName, value) => {
+ table.addColumn({text: metricName});
+ values.push(value);
};
- if (hit._source) {
- for (propName in hit._source) {
- doc[propName] = hit._source[propName];
- }
- }
+ for (let bucket of esAgg.buckets) {
+ let values = [];
- for (propName in hit.fields) {
- doc[propName] = hit.fields[propName];
- }
- series.datapoints.push(doc);
- }
-
- seriesList.push(series);
-};
-
-ElasticResponse.prototype.trimDatapoints = function(aggregations, target) {
- var histogram = _.find(target.bucketAggs, { type: 'date_histogram'});
-
- var shouldDropFirstAndLast = histogram && histogram.settings && histogram.settings.trimEdges;
- if (shouldDropFirstAndLast) {
- var trim = histogram.settings.trimEdges;
- for (var prop in aggregations) {
- var points = aggregations[prop];
- if (points.datapoints.length > trim * 2) {
- points.datapoints = points.datapoints.slice(trim, points.datapoints.length - trim);
- }
- }
- }
-};
-
-ElasticResponse.prototype.getErrorFromElasticResponse = function(response, err) {
- var result: any = {};
- result.data = JSON.stringify(err, null, 4);
- if (err.root_cause && err.root_cause.length > 0 && err.root_cause[0].reason) {
- result.message = err.root_cause[0].reason;
- } else {
- result.message = err.reason || 'Unkown elatic error response';
- }
-
- if (response.$$config) {
- result.config = response.$$config;
- }
-
- return result;
-};
-
-ElasticResponse.prototype.getTimeSeries = function() {
- var seriesList = [];
-
- for (var i = 0; i < this.response.responses.length; i++) {
- var response = this.response.responses[i];
- if (response.error) {
- throw this.getErrorFromElasticResponse(this.response, response.error);
- }
-
- if (response.hits && response.hits.hits.length > 0) {
- this.processHits(response.hits, seriesList);
- }
-
- if (response.aggregations) {
- var aggregations = response.aggregations;
- var target = this.targets[i];
- var tmpSeriesList = [];
- var table = new TableModel();
-
- this.processBuckets(aggregations, target, tmpSeriesList, table, {}, 0);
- this.trimDatapoints(tmpSeriesList, target);
- this.nameSeries(tmpSeriesList, target);
-
- for (var y = 0; y < tmpSeriesList.length; y++) {
- seriesList.push(tmpSeriesList[y]);
+ for (let propValues of _.values(props)) {
+ values.push(propValues);
}
- if (table.rows.length > 0) {
- seriesList.push(table);
+ // add bucket key (value)
+ values.push(bucket.key);
+
+ for (let metric of target.metrics) {
+ switch (metric.type) {
+ case "count": {
+ addMetricValue(values, this.getMetricName(metric.type), bucket.doc_count);
+ break;
+ }
+ case 'extended_stats': {
+ for (var statName in metric.meta) {
+ if (!metric.meta[statName]) {
+ continue;
+ }
+
+ var stats = bucket[metric.id];
+ // add stats that are in nested obj to top level obj
+ stats.std_deviation_bounds_upper = stats.std_deviation_bounds.upper;
+ stats.std_deviation_bounds_lower = stats.std_deviation_bounds.lower;
+
+ addMetricValue(values, this.getMetricName(statName), stats[statName]);
+ }
+ break;
+ }
+ default: {
+ let metricName = this.getMetricName(metric.type);
+ let otherMetrics = _.filter(target.metrics, {type: metric.type});
+
+ // if more of the same metric type include field field name in property
+ if (otherMetrics.length > 1) {
+ metricName += ' ' + metric.field;
+ }
+
+ addMetricValue(values, metricName, bucket[metric.id].value);
+ break;
+ }
+ }
+ }
+
+ table.rows.push(values);
+ }
+ }
+
+ // This is quite complex
+ // neeed to recurise down the nested buckets to build series
+ processBuckets(aggs, target, seriesList, table, props, depth) {
+ var bucket, aggDef, esAgg, aggId;
+ var maxDepth = target.bucketAggs.length-1;
+
+ for (aggId in aggs) {
+ aggDef = _.find(target.bucketAggs, {id: aggId});
+ esAgg = aggs[aggId];
+
+ if (!aggDef) {
+ continue;
+ }
+
+ if (depth === maxDepth) {
+ if (aggDef.type === 'date_histogram') {
+ this.processMetrics(esAgg, target, seriesList, props);
+ } else {
+ this.processAggregationDocs(esAgg, aggDef, target, table, props);
+ }
+ } else {
+ for (var nameIndex in esAgg.buckets) {
+ bucket = esAgg.buckets[nameIndex];
+ props = _.clone(props);
+ if (bucket.key !== void 0) {
+ props[aggDef.field] = bucket.key;
+ } else {
+ props["filter"] = nameIndex;
+ }
+ if (bucket.key_as_string) {
+ props[aggDef.field] = bucket.key_as_string;
+ }
+ this.processBuckets(bucket, target, seriesList, table, props, depth+1);
+ }
}
}
}
- return { data: seriesList };
-};
+ private getMetricName(metric) {
+ var metricDef = _.find(queryDef.metricAggTypes, {value: metric});
+ if (!metricDef) {
+ metricDef = _.find(queryDef.extendedStats, {value: metric});
+ }
+ return metricDef ? metricDef.text : metric;
+ }
+
+ private getSeriesName(series, target, metricTypeCount) {
+ var metricName = this.getMetricName(series.metric);
+
+ if (target.alias) {
+ var regex = /\{\{([\s\S]+?)\}\}/g;
+
+ return target.alias.replace(regex, function(match, g1, g2) {
+ var group = g1 || g2;
+
+ if (group.indexOf('term ') === 0) { return series.props[group.substring(5)]; }
+ if (series.props[group] !== void 0) { return series.props[group]; }
+ if (group === 'metric') { return metricName; }
+ if (group === 'field') { return series.field; }
+
+ return match;
+ });
+ }
+
+ if (series.field && queryDef.isPipelineAgg(series.metric)) {
+ var appliedAgg = _.find(target.metrics, { id: series.field });
+ if (appliedAgg) {
+ metricName += ' ' + queryDef.describeMetric(appliedAgg);
+ } else {
+ metricName = 'Unset';
+ }
+ } else if (series.field) {
+ metricName += ' ' + series.field;
+ }
+
+ var propKeys = _.keys(series.props);
+ if (propKeys.length === 0) {
+ return metricName;
+ }
+
+ var name = '';
+ for (var propName in series.props) {
+ name += series.props[propName] + ' ';
+ }
+
+ if (metricTypeCount === 1) {
+ return name.trim();
+ }
+
+ return name.trim() + ' ' + metricName;
+ }
+
+ nameSeries(seriesList, target) {
+ var metricTypeCount = _.uniq(_.map(seriesList, 'metric')).length;
+
+ for (var i = 0; i < seriesList.length; i++) {
+ var series = seriesList[i];
+ series.target = this.getSeriesName(series, target, metricTypeCount);
+ }
+ }
+
+ processHits(hits, seriesList) {
+ var series = {target: 'docs', type: 'docs', datapoints: [], total: hits.total, filterable: true};
+ var propName, hit, doc, i;
+
+ for (i = 0; i < hits.hits.length; i++) {
+ hit = hits.hits[i];
+ doc = {
+ _id: hit._id,
+ _type: hit._type,
+ _index: hit._index
+ };
+
+ if (hit._source) {
+ for (propName in hit._source) {
+ doc[propName] = hit._source[propName];
+ }
+ }
+
+ for (propName in hit.fields) {
+ doc[propName] = hit.fields[propName];
+ }
+ series.datapoints.push(doc);
+ }
+
+ seriesList.push(series);
+ }
+
+ trimDatapoints(aggregations, target) {
+ var histogram = _.find(target.bucketAggs, { type: 'date_histogram'});
+
+ var shouldDropFirstAndLast = histogram && histogram.settings && histogram.settings.trimEdges;
+ if (shouldDropFirstAndLast) {
+ var trim = histogram.settings.trimEdges;
+ for (var prop in aggregations) {
+ var points = aggregations[prop];
+ if (points.datapoints.length > trim * 2) {
+ points.datapoints = points.datapoints.slice(trim, points.datapoints.length - trim);
+ }
+ }
+ }
+ }
+
+ getErrorFromElasticResponse(response, err) {
+ var result: any = {};
+ result.data = JSON.stringify(err, null, 4);
+ if (err.root_cause && err.root_cause.length > 0 && err.root_cause[0].reason) {
+ result.message = err.root_cause[0].reason;
+ } else {
+ result.message = err.reason || 'Unkown elatic error response';
+ }
+
+ if (response.$$config) {
+ result.config = response.$$config;
+ }
+
+ return result;
+ }
+
+ getTimeSeries() {
+ var seriesList = [];
+
+ for (var i = 0; i < this.response.responses.length; i++) {
+ var response = this.response.responses[i];
+ if (response.error) {
+ throw this.getErrorFromElasticResponse(this.response, response.error);
+ }
+
+ if (response.hits && response.hits.hits.length > 0) {
+ this.processHits(response.hits, seriesList);
+ }
+
+ if (response.aggregations) {
+ var aggregations = response.aggregations;
+ var target = this.targets[i];
+ var tmpSeriesList = [];
+ var table = new TableModel();
+
+ this.processBuckets(aggregations, target, tmpSeriesList, table, {}, 0);
+ this.trimDatapoints(tmpSeriesList, target);
+ this.nameSeries(tmpSeriesList, target);
+
+ for (var y = 0; y < tmpSeriesList.length; y++) {
+ seriesList.push(tmpSeriesList[y]);
+ }
+
+ if (table.rows.length > 0) {
+ seriesList.push(table);
+ }
+ }
+ }
+
+ return { data: seriesList };
+ }
+}
diff --git a/public/app/plugins/datasource/elasticsearch/index_pattern.d.ts b/public/app/plugins/datasource/elasticsearch/index_pattern.d.ts
deleted file mode 100644
index c3318b8e133..00000000000
--- a/public/app/plugins/datasource/elasticsearch/index_pattern.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-declare var test: any;
-export default test;
diff --git a/public/app/plugins/datasource/elasticsearch/index_pattern.js b/public/app/plugins/datasource/elasticsearch/index_pattern.js
deleted file mode 100644
index 6b26e41e1c5..00000000000
--- a/public/app/plugins/datasource/elasticsearch/index_pattern.js
+++ /dev/null
@@ -1,48 +0,0 @@
-define([
- 'lodash',
- 'moment',
-],
-function (_, moment) {
- 'use strict';
-
- function IndexPattern(pattern, interval) {
- this.pattern = pattern;
- this.interval = interval;
- }
-
- IndexPattern.intervalMap = {
- "Hourly": { startOf: 'hour', amount: 'hours'},
- "Daily": { startOf: 'day', amount: 'days'},
- "Weekly": { startOf: 'isoWeek', amount: 'weeks'},
- "Monthly": { startOf: 'month', amount: 'months'},
- "Yearly": { startOf: 'year', amount: 'years'},
- };
-
- IndexPattern.prototype.getIndexForToday = function() {
- if (this.interval) {
- return moment.utc().format(this.pattern);
- } else {
- return this.pattern;
- }
- };
-
- IndexPattern.prototype.getIndexList = function(from, to) {
- if (!this.interval) {
- return this.pattern;
- }
-
- var intervalInfo = IndexPattern.intervalMap[this.interval];
- var start = moment(from).utc().startOf(intervalInfo.startOf);
- var end = moment(to).utc().startOf(intervalInfo.startOf).valueOf();
- var indexList = [];
-
- while (start <= end) {
- indexList.push(start.format(this.pattern));
- start.add(1, intervalInfo.amount);
- }
-
- return indexList;
- };
-
- return IndexPattern;
-});
diff --git a/public/app/plugins/datasource/elasticsearch/index_pattern.ts b/public/app/plugins/datasource/elasticsearch/index_pattern.ts
new file mode 100644
index 00000000000..4778dafa48f
--- /dev/null
+++ b/public/app/plugins/datasource/elasticsearch/index_pattern.ts
@@ -0,0 +1,43 @@
+///
+
+import moment from 'moment';
+
+const intervalMap = {
+ "Hourly": { startOf: 'hour', amount: 'hours'},
+ "Daily": { startOf: 'day', amount: 'days'},
+ "Weekly": { startOf: 'isoWeek', amount: 'weeks'},
+ "Monthly": { startOf: 'month', amount: 'months'},
+ "Yearly": { startOf: 'year', amount: 'years'},
+};
+
+export class IndexPattern {
+
+ constructor(private pattern, private interval: string | null) { }
+
+ getIndexForToday() {
+ if (this.interval) {
+ return moment.utc().format(this.pattern);
+ } else {
+ return this.pattern;
+ }
+ };
+
+ getIndexList(from, to) {
+ if (!this.interval) {
+ return this.pattern;
+ }
+
+ var intervalInfo = intervalMap[this.interval];
+ var start = moment(from).utc().startOf(intervalInfo.startOf);
+ var end = moment(to).utc().startOf(intervalInfo.startOf).valueOf();
+ var indexList = [];
+
+ while (start <= end) {
+ indexList.push(start.format(this.pattern));
+ start.add(1, intervalInfo.amount);
+ }
+
+ return indexList;
+ }
+}
+
diff --git a/public/app/plugins/datasource/elasticsearch/query_builder.d.ts b/public/app/plugins/datasource/elasticsearch/query_builder.d.ts
deleted file mode 100644
index c3318b8e133..00000000000
--- a/public/app/plugins/datasource/elasticsearch/query_builder.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-declare var test: any;
-export default test;
diff --git a/public/app/plugins/datasource/elasticsearch/query_builder.js b/public/app/plugins/datasource/elasticsearch/query_builder.ts
similarity index 88%
rename from public/app/plugins/datasource/elasticsearch/query_builder.js
rename to public/app/plugins/datasource/elasticsearch/query_builder.ts
index 274a0e8f72f..ba4e1e436d4 100644
--- a/public/app/plugins/datasource/elasticsearch/query_builder.js
+++ b/public/app/plugins/datasource/elasticsearch/query_builder.ts
@@ -1,15 +1,15 @@
-define([
- './query_def',
-],
-function (queryDef) {
- 'use strict';
+import * as queryDef from './query_def';
- function ElasticQueryBuilder(options) {
+export class ElasticQueryBuilder {
+ timeField: string;
+ esVersion: number;
+
+ constructor(options) {
this.timeField = options.timeField;
this.esVersion = options.esVersion;
}
- ElasticQueryBuilder.prototype.getRangeFilter = function() {
+ getRangeFilter() {
var filter = {};
filter[this.timeField] = {
gte: "$timeFrom",
@@ -18,9 +18,9 @@ function (queryDef) {
};
return filter;
- };
+ }
- ElasticQueryBuilder.prototype.buildTermsAgg = function(aggDef, queryNode, target) {
+ buildTermsAgg(aggDef, queryNode, target) {
var metricRef, metric, y;
queryNode.terms = { "field": aggDef.field };
@@ -57,10 +57,10 @@ function (queryDef) {
}
return queryNode;
- };
+ }
- ElasticQueryBuilder.prototype.getDateHistogramAgg = function(aggDef) {
- var esAgg = {};
+ getDateHistogramAgg(aggDef) {
+ var esAgg: any = {};
var settings = aggDef.settings || {};
esAgg.interval = settings.interval;
esAgg.field = this.timeField;
@@ -77,10 +77,10 @@ function (queryDef) {
}
return esAgg;
- };
+ }
- ElasticQueryBuilder.prototype.getHistogramAgg = function(aggDef) {
- var esAgg = {};
+ getHistogramAgg(aggDef) {
+ var esAgg: any = {};
var settings = aggDef.settings || {};
esAgg.interval = settings.interval;
esAgg.field = aggDef.field;
@@ -90,9 +90,9 @@ function (queryDef) {
esAgg.missing = settings.missing;
}
return esAgg;
- };
+ }
- ElasticQueryBuilder.prototype.getFiltersAgg = function(aggDef) {
+ getFiltersAgg(aggDef) {
var filterObj = {};
for (var i = 0; i < aggDef.settings.filters.length; i++) {
var query = aggDef.settings.filters[i].query;
@@ -107,9 +107,9 @@ function (queryDef) {
}
return filterObj;
- };
+ }
- ElasticQueryBuilder.prototype.documentQuery = function(query, size) {
+ documentQuery(query, size) {
query.size = size;
query.sort = {};
query.sort[this.timeField] = {order: 'desc', unmapped_type: 'boolean'};
@@ -126,9 +126,9 @@ function (queryDef) {
query.docvalue_fields = [this.timeField];
}
return query;
- };
+ }
- ElasticQueryBuilder.prototype.addAdhocFilters = function(query, adhocFilters) {
+ addAdhocFilters(query, adhocFilters) {
if (!adhocFilters) {
return;
}
@@ -142,7 +142,7 @@ function (queryDef) {
queryCondition = {};
queryCondition[filter.key] = {query: filter.value};
- switch(filter.operator){
+ switch (filter.operator){
case "=":
if (!query.query.bool.must) { query.query.bool.must = []; }
query.query.bool.must.push({match_phrase: queryCondition});
@@ -169,7 +169,7 @@ function (queryDef) {
}
};
- ElasticQueryBuilder.prototype.build = function(target, adhocFilters, queryString) {
+ build(target, adhocFilters?, queryString?) {
// make sure query has defaults;
target.metrics = target.metrics || [{ type: 'count', id: '1' }];
target.dsType = 'elasticsearch';
@@ -213,7 +213,7 @@ function (queryDef) {
var aggDef = target.bucketAggs[i];
var esAgg = {};
- switch(aggDef.type) {
+ switch (aggDef.type) {
case 'date_histogram': {
esAgg["date_histogram"] = this.getDateHistogramAgg(aggDef);
break;
@@ -273,10 +273,10 @@ function (queryDef) {
}
return query;
- };
+ }
- ElasticQueryBuilder.prototype.getTermsQuery = function(queryDef) {
- var query = {
+ getTermsQuery(queryDef) {
+ var query: any = {
"size": 0,
"query": {
"bool": {
@@ -311,7 +311,5 @@ function (queryDef) {
}
};
return query;
- };
-
- return ElasticQueryBuilder;
-});
+ }
+}
diff --git a/public/app/plugins/datasource/elasticsearch/query_ctrl.ts b/public/app/plugins/datasource/elasticsearch/query_ctrl.ts
index 025410c5205..b1195fe637d 100644
--- a/public/app/plugins/datasource/elasticsearch/query_ctrl.ts
+++ b/public/app/plugins/datasource/elasticsearch/query_ctrl.ts
@@ -5,7 +5,7 @@ import './metric_agg';
import angular from 'angular';
import _ from 'lodash';
-import queryDef from './query_def';
+import * as queryDef from './query_def';
import {QueryCtrl} from 'app/plugins/sdk';
export class ElasticQueryCtrl extends QueryCtrl {
diff --git a/public/app/plugins/datasource/elasticsearch/query_def.d.ts b/public/app/plugins/datasource/elasticsearch/query_def.d.ts
deleted file mode 100644
index c3318b8e133..00000000000
--- a/public/app/plugins/datasource/elasticsearch/query_def.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-declare var test: any;
-export default test;
diff --git a/public/app/plugins/datasource/elasticsearch/query_def.js b/public/app/plugins/datasource/elasticsearch/query_def.js
deleted file mode 100644
index a55e2dfd9e5..00000000000
--- a/public/app/plugins/datasource/elasticsearch/query_def.js
+++ /dev/null
@@ -1,199 +0,0 @@
-define([
- 'lodash'
-],
-function (_) {
- 'use strict';
-
- return {
- metricAggTypes: [
- {text: "Count", value: 'count', requiresField: false},
- {text: "Average", value: 'avg', requiresField: true, supportsInlineScript: true, supportsMissing: true},
- {text: "Sum", value: 'sum', requiresField: true, supportsInlineScript: true, supportsMissing: true},
- {text: "Max", value: 'max', requiresField: true, supportsInlineScript: true, supportsMissing: true},
- {text: "Min", value: 'min', requiresField: true, supportsInlineScript: true, supportsMissing: true},
- {text: "Extended Stats", value: 'extended_stats', requiresField: true, supportsMissing: true, supportsInlineScript: true},
- {text: "Percentiles", value: 'percentiles', requiresField: true, supportsMissing: true, supportsInlineScript: true},
- {text: "Unique Count", value: "cardinality", requiresField: true, supportsMissing: true},
- {text: "Moving Average", value: 'moving_avg', requiresField: false, isPipelineAgg: true, minVersion: 2},
- {text: "Derivative", value: 'derivative', requiresField: false, isPipelineAgg: true, minVersion: 2 },
- {text: "Raw Document", value: "raw_document", requiresField: false}
- ],
-
- bucketAggTypes: [
- {text: "Terms", value: 'terms', requiresField: true},
- {text: "Filters", value: 'filters' },
- {text: "Geo Hash Grid", value: 'geohash_grid', requiresField: true},
- {text: "Date Histogram", value: 'date_histogram', requiresField: true},
- {text: "Histogram", value: 'histogram', requiresField: true},
- ],
-
- orderByOptions: [
- {text: "Doc Count", value: '_count' },
- {text: "Term value", value: '_term' },
- ],
-
- orderOptions: [
- {text: "Top", value: 'desc' },
- {text: "Bottom", value: 'asc' },
- ],
-
- sizeOptions: [
- {text: "No limit", value: '0' },
- {text: "1", value: '1' },
- {text: "2", value: '2' },
- {text: "3", value: '3' },
- {text: "5", value: '5' },
- {text: "10", value: '10' },
- {text: "15", value: '15' },
- {text: "20", value: '20' },
- ],
-
- extendedStats: [
- {text: 'Avg', value: 'avg'},
- {text: 'Min', value: 'min'},
- {text: 'Max', value: 'max'},
- {text: 'Sum', value: 'sum'},
- {text: 'Count', value: 'count'},
- {text: 'Std Dev', value: 'std_deviation'},
- {text: 'Std Dev Upper', value: 'std_deviation_bounds_upper'},
- {text: 'Std Dev Lower', value: 'std_deviation_bounds_lower'},
- ],
-
- intervalOptions: [
- {text: 'auto', value: 'auto'},
- {text: '10s', value: '10s'},
- {text: '1m', value: '1m'},
- {text: '5m', value: '5m'},
- {text: '10m', value: '10m'},
- {text: '20m', value: '20m'},
- {text: '1h', value: '1h'},
- {text: '1d', value: '1d'},
- ],
-
- movingAvgModelOptions: [
- {text: 'Simple', value: 'simple'},
- {text: 'Linear', value: 'linear'},
- {text: 'Exponentially Weighted', value: 'ewma'},
- {text: 'Holt Linear', value: 'holt'},
- {text: 'Holt Winters', value: 'holt_winters'},
- ],
-
- pipelineOptions: {
- 'moving_avg' : [
- {text: 'window', default: 5},
- {text: 'model', default: 'simple'},
- {text: 'predict', default: undefined},
- {text: 'minimize', default: false},
- ],
- 'derivative': [
- {text: 'unit', default: undefined},
- ]
- },
-
- movingAvgModelSettings: {
- 'simple' : [],
- 'linear' : [],
- 'ewma' : [
- {text: "Alpha", value: "alpha", default: undefined}],
- 'holt' : [
- {text: "Alpha", value: "alpha", default: undefined},
- {text: "Beta", value: "beta", default: undefined},
- ],
- 'holt_winters' : [
- {text: "Alpha", value: "alpha", default: undefined},
- {text: "Beta", value: "beta", default: undefined},
- {text: "Gamma", value: "gamma", default: undefined},
- {text: "Period", value: "period", default: undefined},
- {text: "Pad", value: "pad", default: undefined, isCheckbox: true},
- ],
- },
-
- getMetricAggTypes: function(esVersion) {
- return _.filter(this.metricAggTypes, function(f) {
- if (f.minVersion) {
- return f.minVersion <= esVersion;
- } else {
- return true;
- }
- });
- },
-
- getPipelineOptions: function(metric) {
- if (!this.isPipelineAgg(metric.type)) {
- return [];
- }
-
- return this.pipelineOptions[metric.type];
- },
-
- isPipelineAgg: function(metricType) {
- if (metricType) {
- var po = this.pipelineOptions[metricType];
- return po !== null && po !== undefined;
- }
-
- return false;
- },
-
- getPipelineAggOptions: function(targets) {
- var self = this;
- var result = [];
- _.each(targets.metrics, function(metric) {
- if (!self.isPipelineAgg(metric.type)) {
- result.push({text: self.describeMetric(metric), value: metric.id });
- }
- });
-
- return result;
- },
-
- getMovingAvgSettings: function(model, filtered) {
- var filteredResult = [];
- if (filtered) {
- _.each(this.movingAvgModelSettings[model], function(setting) {
- if (!(setting.isCheckbox)) {
- filteredResult.push(setting);
- }
- });
- return filteredResult;
- }
- return this.movingAvgModelSettings[model];
- },
-
- getOrderByOptions: function(target) {
- var self = this;
- var metricRefs = [];
- _.each(target.metrics, function(metric) {
- if (metric.type !== 'count') {
- metricRefs.push({text: self.describeMetric(metric), value: metric.id});
- }
- });
-
- return this.orderByOptions.concat(metricRefs);
- },
-
- describeOrder: function(order) {
- var def = _.find(this.orderOptions, {value: order});
- return def.text;
- },
-
- describeMetric: function(metric) {
- var def = _.find(this.metricAggTypes, {value: metric.type});
- return def.text + ' ' + metric.field;
- },
-
- describeOrderBy: function(orderBy, target) {
- var def = _.find(this.orderByOptions, {value: orderBy});
- if (def) {
- return def.text;
- }
- var metric = _.find(target.metrics, {id: orderBy});
- if (metric) {
- return this.describeMetric(metric);
- } else {
- return "metric not found";
- }
- },
- };
-
-});
diff --git a/public/app/plugins/datasource/elasticsearch/query_def.ts b/public/app/plugins/datasource/elasticsearch/query_def.ts
new file mode 100644
index 00000000000..dac48acae48
--- /dev/null
+++ b/public/app/plugins/datasource/elasticsearch/query_def.ts
@@ -0,0 +1,191 @@
+///
+
+import _ from 'lodash';
+
+export const metricAggTypes = [
+ {text: "Count", value: 'count', requiresField: false},
+ {text: "Average", value: 'avg', requiresField: true, supportsInlineScript: true, supportsMissing: true},
+ {text: "Sum", value: 'sum', requiresField: true, supportsInlineScript: true, supportsMissing: true},
+ {text: "Max", value: 'max', requiresField: true, supportsInlineScript: true, supportsMissing: true},
+ {text: "Min", value: 'min', requiresField: true, supportsInlineScript: true, supportsMissing: true},
+ {text: "Extended Stats", value: 'extended_stats', requiresField: true, supportsMissing: true, supportsInlineScript: true},
+ {text: "Percentiles", value: 'percentiles', requiresField: true, supportsMissing: true, supportsInlineScript: true},
+ {text: "Unique Count", value: "cardinality", requiresField: true, supportsMissing: true},
+ {text: "Moving Average", value: 'moving_avg', requiresField: false, isPipelineAgg: true, minVersion: 2},
+ {text: "Derivative", value: 'derivative', requiresField: false, isPipelineAgg: true, minVersion: 2 },
+ {text: "Raw Document", value: "raw_document", requiresField: false}
+];
+
+export const bucketAggTypes = [
+ {text: "Terms", value: 'terms', requiresField: true},
+ {text: "Filters", value: 'filters' },
+ {text: "Geo Hash Grid", value: 'geohash_grid', requiresField: true},
+ {text: "Date Histogram", value: 'date_histogram', requiresField: true},
+ {text: "Histogram", value: 'histogram', requiresField: true},
+];
+
+export const orderByOptions = [
+ {text: "Doc Count", value: '_count' },
+ {text: "Term value", value: '_term' },
+];
+
+export const orderOptions = [
+ {text: "Top", value: 'desc' },
+ {text: "Bottom", value: 'asc' },
+];
+
+export const sizeOptions = [
+ {text: "No limit", value: '0' },
+ {text: "1", value: '1' },
+ {text: "2", value: '2' },
+ {text: "3", value: '3' },
+ {text: "5", value: '5' },
+ {text: "10", value: '10' },
+ {text: "15", value: '15' },
+ {text: "20", value: '20' },
+];
+
+export const extendedStats = [
+ {text: 'Avg', value: 'avg'},
+ {text: 'Min', value: 'min'},
+ {text: 'Max', value: 'max'},
+ {text: 'Sum', value: 'sum'},
+ {text: 'Count', value: 'count'},
+ {text: 'Std Dev', value: 'std_deviation'},
+ {text: 'Std Dev Upper', value: 'std_deviation_bounds_upper'},
+ {text: 'Std Dev Lower', value: 'std_deviation_bounds_lower'},
+];
+
+export const intervalOptions = [
+ {text: 'auto', value: 'auto'},
+ {text: '10s', value: '10s'},
+ {text: '1m', value: '1m'},
+ {text: '5m', value: '5m'},
+ {text: '10m', value: '10m'},
+ {text: '20m', value: '20m'},
+ {text: '1h', value: '1h'},
+ {text: '1d', value: '1d'},
+];
+
+export const movingAvgModelOptions = [
+ {text: 'Simple', value: 'simple'},
+ {text: 'Linear', value: 'linear'},
+ {text: 'Exponentially Weighted', value: 'ewma'},
+ {text: 'Holt Linear', value: 'holt'},
+ {text: 'Holt Winters', value: 'holt_winters'},
+];
+
+export const pipelineOptions = {
+ 'moving_avg' : [
+ {text: 'window', default: 5},
+ {text: 'model', default: 'simple'},
+ {text: 'predict', default: undefined},
+ {text: 'minimize', default: false},
+ ],
+ 'derivative': [
+ {text: 'unit', default: undefined},
+ ]
+};
+
+export const movingAvgModelSettings = {
+ 'simple' : [],
+ 'linear' : [],
+ 'ewma' : [
+ {text: "Alpha", value: "alpha", default: undefined}],
+ 'holt' : [
+ {text: "Alpha", value: "alpha", default: undefined},
+ {text: "Beta", value: "beta", default: undefined},
+ ],
+ 'holt_winters' : [
+ {text: "Alpha", value: "alpha", default: undefined},
+ {text: "Beta", value: "beta", default: undefined},
+ {text: "Gamma", value: "gamma", default: undefined},
+ {text: "Period", value: "period", default: undefined},
+ {text: "Pad", value: "pad", default: undefined, isCheckbox: true},
+ ],
+};
+
+export function getMetricAggTypes(esVersion) {
+ return _.filter(metricAggTypes, function(f) {
+ if (f.minVersion) {
+ return f.minVersion <= esVersion;
+ } else {
+ return true;
+ }
+ });
+}
+
+export function getPipelineOptions(metric) {
+ if (!isPipelineAgg(metric.type)) {
+ return [];
+ }
+
+ return pipelineOptions[metric.type];
+}
+
+export function isPipelineAgg(metricType) {
+ if (metricType) {
+ var po = pipelineOptions[metricType];
+ return po !== null && po !== undefined;
+ }
+
+ return false;
+}
+
+export function getPipelineAggOptions(targets) {
+ var result = [];
+ _.each(targets.metrics, function(metric) {
+ if (!isPipelineAgg(metric.type)) {
+ result.push({text: describeMetric(metric), value: metric.id });
+ }
+ });
+
+ return result;
+}
+
+export function getMovingAvgSettings(model, filtered) {
+ var filteredResult = [];
+ if (filtered) {
+ _.each(movingAvgModelSettings[model], function(setting) {
+ if (!(setting.isCheckbox)) {
+ filteredResult.push(setting);
+ }
+ });
+ return filteredResult;
+ }
+ return movingAvgModelSettings[model];
+}
+
+export function getOrderByOptions(target) {
+ var metricRefs = [];
+ _.each(target.metrics, function(metric) {
+ if (metric.type !== 'count') {
+ metricRefs.push({text: describeMetric(metric), value: metric.id});
+ }
+ });
+
+ return orderByOptions.concat(metricRefs);
+}
+
+export function describeOrder(order) {
+ var def = _.find(orderOptions, {value: order});
+ return def.text;
+}
+
+export function describeMetric(metric) {
+ var def = _.find(metricAggTypes, {value: metric.type});
+ return def.text + ' ' + metric.field;
+}
+
+export function describeOrderBy(orderBy, target) {
+ var def = _.find(orderByOptions, {value: orderBy});
+ if (def) {
+ return def.text;
+ }
+ var metric = _.find(target.metrics, {id: orderBy});
+ if (metric) {
+ return describeMetric(metric);
+ } else {
+ return "metric not found";
+ }
+};
diff --git a/public/app/plugins/datasource/elasticsearch/specs/index_pattern_specs.ts b/public/app/plugins/datasource/elasticsearch/specs/index_pattern_specs.ts
index 3fee81083b7..16ec678f1c0 100644
--- a/public/app/plugins/datasource/elasticsearch/specs/index_pattern_specs.ts
+++ b/public/app/plugins/datasource/elasticsearch/specs/index_pattern_specs.ts
@@ -2,7 +2,7 @@
import {describe, it, expect} from 'test/lib/common';
import moment from 'moment';
-import IndexPattern from '../index_pattern';
+import {IndexPattern} from '../index_pattern';
describe('IndexPattern', function() {
@@ -19,7 +19,7 @@ describe('IndexPattern', function() {
describe('no interval', function() {
it('should return correct index', function() {
- var pattern = new IndexPattern('my-metrics');
+ var pattern = new IndexPattern('my-metrics', null);
var from = new Date(2015, 4, 30, 1, 2, 3);
var to = new Date(2015, 5, 1, 12, 5 , 6);
expect(pattern.getIndexList(from, to)).to.eql('my-metrics');
diff --git a/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts b/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts
index 3440309897b..29876d1ea42 100644
--- a/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts
+++ b/public/app/plugins/datasource/elasticsearch/specs/query_builder_specs.ts
@@ -1,6 +1,6 @@
import {describe, beforeEach, it, expect} from 'test/lib/common';
-import ElasticQueryBuilder from '../query_builder';
+import {ElasticQueryBuilder} from '../query_builder';
describe('ElasticQueryBuilder', function() {
var builder;
diff --git a/public/app/plugins/datasource/elasticsearch/specs/query_def_specs.ts b/public/app/plugins/datasource/elasticsearch/specs/query_def_specs.ts
index e89c9774769..d46fc1aa933 100644
--- a/public/app/plugins/datasource/elasticsearch/specs/query_def_specs.ts
+++ b/public/app/plugins/datasource/elasticsearch/specs/query_def_specs.ts
@@ -1,7 +1,7 @@
import {describe, it, expect} from 'test/lib/common';
-import queryDef from '../query_def';
+import * as queryDef from '../query_def';
describe('ElasticQueryDef', function() {
diff --git a/public/app/plugins/datasource/graphite/query_ctrl.ts b/public/app/plugins/datasource/graphite/query_ctrl.ts
index 7127636d47f..fd753fb77e1 100644
--- a/public/app/plugins/datasource/graphite/query_ctrl.ts
+++ b/public/app/plugins/datasource/graphite/query_ctrl.ts
@@ -1,5 +1,3 @@
-///
-
import './add_graphite_func';
import './func_editor';
diff --git a/public/app/plugins/datasource/graphite/specs/datasource_specs.ts b/public/app/plugins/datasource/graphite/specs/datasource_specs.ts
index 47c2fa070fe..f25bbbd8910 100644
--- a/public/app/plugins/datasource/graphite/specs/datasource_specs.ts
+++ b/public/app/plugins/datasource/graphite/specs/datasource_specs.ts
@@ -9,7 +9,7 @@ describe('graphiteDatasource', function() {
beforeEach(angularMocks.module('grafana.core'));
beforeEach(angularMocks.module('grafana.services'));
- beforeEach(ctx.providePhase(['backendSrv']));
+ beforeEach(ctx.providePhase(['backendSrv', 'templateSrv']));
beforeEach(angularMocks.inject(function($q, $rootScope, $httpBackend, $injector) {
ctx.$q = $q;
ctx.$httpBackend = $httpBackend;
diff --git a/public/app/plugins/datasource/graphite/specs/query_ctrl_specs.ts b/public/app/plugins/datasource/graphite/specs/query_ctrl_specs.ts
index ff1ea9449ee..bbcd90bd40f 100644
--- a/public/app/plugins/datasource/graphite/specs/query_ctrl_specs.ts
+++ b/public/app/plugins/datasource/graphite/specs/query_ctrl_specs.ts
@@ -1,5 +1,4 @@
-import '../query_ctrl';
import 'app/core/services/segment_srv';
import {describe, beforeEach, it, sinon, expect, angularMocks} from 'test/lib/common';
diff --git a/public/app/plugins/datasource/mysql/mode-sql.js b/public/app/plugins/datasource/mysql/mode-sql.js
deleted file mode 100644
index 110cfb24649..00000000000
--- a/public/app/plugins/datasource/mysql/mode-sql.js
+++ /dev/null
@@ -1,106 +0,0 @@
-// jshint ignore: start
-// jscs: disable
-
-ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
-"use strict";
-
-var oop = require("../lib/oop");
-var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
-
-var SqlHighlightRules = function() {
-
- var keywords = (
- "select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|" +
- "when|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|" +
- "foreign|not|references|default|null|inner|cross|natural|database|drop|grant"
- );
-
- var builtinConstants = (
- "true|false"
- );
-
- var builtinFunctions = (
- "avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|" +
- "coalesce|ifnull|isnull|nvl"
- );
-
- var dataTypes = (
- "int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|" +
- "money|real|number|integer"
- );
-
- var keywordMapper = this.createKeywordMapper({
- "support.function": builtinFunctions,
- "keyword": keywords,
- "constant.language": builtinConstants,
- "storage.type": dataTypes
- }, "identifier", true);
-
- this.$rules = {
- "start" : [ {
- token : "comment",
- regex : "--.*$"
- }, {
- token : "comment",
- start : "/\\*",
- end : "\\*/"
- }, {
- token : "string", // " string
- regex : '".*?"'
- }, {
- token : "string", // ' string
- regex : "'.*?'"
- }, {
- token : "string", // ` string (apache drill)
- regex : "`.*?`"
- }, {
- token : "constant.numeric", // float
- regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"
- }, {
- token : keywordMapper,
- regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
- }, {
- token : "keyword.operator",
- regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|="
- }, {
- token : "paren.lparen",
- regex : "[\\(]"
- }, {
- token : "paren.rparen",
- regex : "[\\)]"
- }, {
- token : "text",
- regex : "\\s+"
- } ]
- };
- this.normalizeRules();
-};
-
-oop.inherits(SqlHighlightRules, TextHighlightRules);
-
-exports.SqlHighlightRules = SqlHighlightRules;
-});
-
-ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules"], function(require, exports, module) {
-"use strict";
-
-var oop = require("../lib/oop");
-var TextMode = require("./text").Mode;
-var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules;
-
-var Mode = function() {
- this.HighlightRules = SqlHighlightRules;
- this.$behaviour = this.$defaultBehaviour;
-};
-oop.inherits(Mode, TextMode);
-
-(function() {
-
- this.lineCommentStart = "--";
-
- this.$id = "ace/mode/sql";
-}).call(Mode.prototype);
-
-exports.Mode = Mode;
-
-});
diff --git a/public/app/plugins/datasource/opentsdb/datasource.d.ts b/public/app/plugins/datasource/opentsdb/datasource.d.ts
index bbbf1680f27..2e722bc1976 100644
--- a/public/app/plugins/datasource/opentsdb/datasource.d.ts
+++ b/public/app/plugins/datasource/opentsdb/datasource.d.ts
@@ -1,3 +1,3 @@
declare var OpenTsDatasource: any;
-export {OpenTsDatasource};
+export default OpenTsDatasource;
diff --git a/public/app/plugins/datasource/opentsdb/datasource.js b/public/app/plugins/datasource/opentsdb/datasource.js
index 921805a58ca..5228ce26b9c 100644
--- a/public/app/plugins/datasource/opentsdb/datasource.js
+++ b/public/app/plugins/datasource/opentsdb/datasource.js
@@ -472,7 +472,5 @@ function (angular, _, dateMath) {
}
}
- return {
- OpenTsDatasource: OpenTsDatasource
- };
+ return OpenTsDatasource;
});
diff --git a/public/app/plugins/datasource/opentsdb/module.ts b/public/app/plugins/datasource/opentsdb/module.ts
index 895cbe2ad8c..a34ee2219fe 100644
--- a/public/app/plugins/datasource/opentsdb/module.ts
+++ b/public/app/plugins/datasource/opentsdb/module.ts
@@ -1,4 +1,4 @@
-import {OpenTsDatasource} from './datasource';
+import OpenTsDatasource from './datasource';
import {OpenTsQueryCtrl} from './query_ctrl';
import {OpenTsConfigCtrl} from './config_ctrl';
diff --git a/public/app/plugins/datasource/opentsdb/specs/datasource-specs.ts b/public/app/plugins/datasource/opentsdb/specs/datasource-specs.ts
index cddcd621c01..13379824485 100644
--- a/public/app/plugins/datasource/opentsdb/specs/datasource-specs.ts
+++ b/public/app/plugins/datasource/opentsdb/specs/datasource-specs.ts
@@ -1,6 +1,6 @@
import {describe, beforeEach, it, expect, angularMocks} from 'test/lib/common';
import helpers from 'test/specs/helpers';
-import {OpenTsDatasource} from "../datasource";
+import OpenTsDatasource from "../datasource";
describe('opentsdb', function() {
var ctx = new helpers.ServiceTestContext();
diff --git a/public/app/plugins/datasource/prometheus/query_ctrl.ts b/public/app/plugins/datasource/prometheus/query_ctrl.ts
index f991bd73406..34787373cdd 100644
--- a/public/app/plugins/datasource/prometheus/query_ctrl.ts
+++ b/public/app/plugins/datasource/prometheus/query_ctrl.ts
@@ -1,10 +1,9 @@
-///
-
import angular from 'angular';
import _ from 'lodash';
-
import {QueryCtrl} from 'app/plugins/sdk';
import {PromCompleter} from './completer';
+import './mode-prometheus';
+import './snippets/prometheus';
class PrometheusQueryCtrl extends QueryCtrl {
static templateUrl = 'partials/query.editor.html';
@@ -44,12 +43,6 @@ class PrometheusQueryCtrl extends QueryCtrl {
getCompleter(query) {
return new PromCompleter(this.datasource);
- // console.log('getquery);
- // return this.datasource.performSuggestQuery(query).then(res => {
- // return res.map(item => {
- // return {word: item, type: 'metric'};
- // });
- // });
}
getDefaultFormat() {
diff --git a/public/app/plugins/panel/alertlist/module.html b/public/app/plugins/panel/alertlist/module.html
index 2c0cb00d2ef..39dbb5bbe26 100644
--- a/public/app/plugins/panel/alertlist/module.html
+++ b/public/app/plugins/panel/alertlist/module.html
@@ -1,51 +1,51 @@
-
-
-
-
-
-
-
-
-
-
- {{alert.stateModel.text}}
- for {{alert.newStateDateAgo}}
-
-
- {{alert.executionError}}
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ {{alert.name}}
+
+
+
+ {{alert.stateModel.text}}
+ for {{alert.newStateDateAgo}}
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
{{al.title}}
-
-
-
- {{al.stateModel.text}}
- {{al.info}}
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
{{al.title}}
+
+ {{al.stateModel.text}}
+ {{al.info}}
+
+
+
+
+
+
+
+
diff --git a/public/app/plugins/panel/graph/graph.ts b/public/app/plugins/panel/graph/graph.ts
index 561fd77c6a9..a203648ae04 100755
--- a/public/app/plugins/panel/graph/graph.ts
+++ b/public/app/plugins/panel/graph/graph.ts
@@ -1,13 +1,13 @@
///
-import 'jquery.flot';
-import 'jquery.flot.selection';
-import 'jquery.flot.time';
-import 'jquery.flot.stack';
-import 'jquery.flot.stackpercent';
-import 'jquery.flot.fillbelow';
-import 'jquery.flot.crosshair';
-import 'jquery.flot.dashes';
+import 'vendor/flot/jquery.flot';
+import 'vendor/flot/jquery.flot.selection';
+import 'vendor/flot/jquery.flot.time';
+import 'vendor/flot/jquery.flot.stack';
+import 'vendor/flot/jquery.flot.stackpercent';
+import 'vendor/flot/jquery.flot.fillbelow';
+import 'vendor/flot/jquery.flot.crosshair';
+import 'vendor/flot/jquery.flot.dashes';
import './jquery.flot.events';
import $ from 'jquery';
@@ -21,7 +21,8 @@ import {ThresholdManager} from './threshold_manager';
import {EventManager} from 'app/features/annotations/all';
import {convertValuesToHistogram, getSeriesValues} from './histogram';
-coreModule.directive('grafanaGraph', function($rootScope, timeSrv, popoverSrv) {
+/** @ngInject **/
+function graphDirective($rootScope, timeSrv, popoverSrv) {
return {
restrict: 'A',
template: '',
@@ -683,4 +684,6 @@ coreModule.directive('grafanaGraph', function($rootScope, timeSrv, popoverSrv) {
});
}
};
-});
+}
+
+coreModule.directive('grafanaGraph', graphDirective);
diff --git a/public/app/plugins/panel/graph/legend.js b/public/app/plugins/panel/graph/legend.js
index c29e8949f8e..beee24543d0 100644
--- a/public/app/plugins/panel/graph/legend.js
+++ b/public/app/plugins/panel/graph/legend.js
@@ -2,8 +2,6 @@ define([
'angular',
'lodash',
'jquery',
- 'jquery.flot',
- 'jquery.flot.time',
],
function (angular, _, $) {
'use strict';
diff --git a/public/app/plugins/panel/graph/specs/series_override_ctrl_specs.ts b/public/app/plugins/panel/graph/specs/series_override_ctrl_specs.ts
new file mode 100644
index 00000000000..a7b47e28d6f
--- /dev/null
+++ b/public/app/plugins/panel/graph/specs/series_override_ctrl_specs.ts
@@ -0,0 +1,52 @@
+import {describe, beforeEach, it, expect, sinon, angularMocks} from 'test/lib/common';
+import '../series_overrides_ctrl';
+import helpers from 'test/specs/helpers';
+
+describe('SeriesOverridesCtrl', function() {
+ var ctx = new helpers.ControllerTestContext();
+ var popoverSrv = {};
+
+ beforeEach(angularMocks.module('grafana.services'));
+ beforeEach(angularMocks.module('grafana.controllers'));
+
+ beforeEach(ctx.providePhase({
+ popoverSrv: popoverSrv
+ }));
+
+ beforeEach(angularMocks.inject(function($rootScope, $controller) {
+ ctx.scope = $rootScope.$new();
+ ctx.scope.ctrl = {
+ refresh: sinon.spy(),
+ render: sinon.spy(),
+ seriesList: []
+ };
+ ctx.scope.render = function() {};
+ ctx.controller = $controller('SeriesOverridesCtrl', {
+ $scope: ctx.scope
+ });
+ }));
+
+ describe('When setting an override', function() {
+ beforeEach(function() {
+ ctx.scope.setOverride({propertyName: 'lines'}, {value: true});
+ });
+
+ it('should set override property', function() {
+ expect(ctx.scope.override.lines).to.be(true);
+ });
+
+ it('should update view model', function() {
+ expect(ctx.scope.currentOverrides[0].name).to.be('Lines');
+ expect(ctx.scope.currentOverrides[0].value).to.be('true');
+ });
+ });
+
+ describe('When removing overide', function() {
+ it('click should include option and value index', function() {
+ ctx.scope.setOverride(1,0);
+ ctx.scope.removeOverride({ propertyName: 'lines' });
+ expect(ctx.scope.currentOverrides.length).to.be(0);
+ });
+ });
+});
+
diff --git a/public/app/plugins/panel/graph/threshold_manager.ts b/public/app/plugins/panel/graph/threshold_manager.ts
index 24e1618eb5c..fb4137bd419 100644
--- a/public/app/plugins/panel/graph/threshold_manager.ts
+++ b/public/app/plugins/panel/graph/threshold_manager.ts
@@ -1,6 +1,4 @@
-///
-
-import 'jquery.flot';
+import 'vendor/flot/jquery.flot';
import $ from 'jquery';
import _ from 'lodash';
diff --git a/public/app/plugins/panel/heatmap/color_legend.ts b/public/app/plugins/panel/heatmap/color_legend.ts
index ff9ae089bd8..edf012a0209 100644
--- a/public/app/plugins/panel/heatmap/color_legend.ts
+++ b/public/app/plugins/panel/heatmap/color_legend.ts
@@ -1,9 +1,7 @@
-///
-
import angular from 'angular';
import _ from 'lodash';
import $ from 'jquery';
-import d3 from 'd3';
+import d3 from 'vendor/d3/d3';
import {contextSrv} from 'app/core/core';
import {tickStep} from 'app/core/utils/ticks';
diff --git a/public/app/plugins/panel/heatmap/heatmap_tooltip.ts b/public/app/plugins/panel/heatmap/heatmap_tooltip.ts
index 0d3f65cbf4d..dfd480d09df 100644
--- a/public/app/plugins/panel/heatmap/heatmap_tooltip.ts
+++ b/public/app/plugins/panel/heatmap/heatmap_tooltip.ts
@@ -1,6 +1,4 @@
-///
-
-import d3 from 'd3';
+import d3 from 'vendor/d3/d3';
import $ from 'jquery';
import _ from 'lodash';
import kbn from 'app/core/utils/kbn';
diff --git a/public/app/plugins/panel/heatmap/module.ts b/public/app/plugins/panel/heatmap/module.ts
index d5ef7291308..ce3497eb3e1 100644
--- a/public/app/plugins/panel/heatmap/module.ts
+++ b/public/app/plugins/panel/heatmap/module.ts
@@ -1,4 +1,3 @@
-///
import './color_legend';
import {HeatmapCtrl} from './heatmap_ctrl';
diff --git a/public/app/plugins/panel/heatmap/rendering.ts b/public/app/plugins/panel/heatmap/rendering.ts
index 8d85186b78e..96b93be2741 100644
--- a/public/app/plugins/panel/heatmap/rendering.ts
+++ b/public/app/plugins/panel/heatmap/rendering.ts
@@ -1,12 +1,10 @@
-///
-
import _ from 'lodash';
import $ from 'jquery';
import moment from 'moment';
import kbn from 'app/core/utils/kbn';
import {appEvents, contextSrv} from 'app/core/core';
import {tickStep, getScaledDecimals, getFlotTickSize} from 'app/core/utils/ticks';
-import d3 from 'd3';
+import d3 from 'vendor/d3/d3';
import {HeatmapTooltip} from './heatmap_tooltip';
import {mergeZeroBuckets} from './heatmap_data_converter';
diff --git a/public/app/plugins/panel/singlestat/module.ts b/public/app/plugins/panel/singlestat/module.ts
index a7eaa37441b..7fbd3068375 100644
--- a/public/app/plugins/panel/singlestat/module.ts
+++ b/public/app/plugins/panel/singlestat/module.ts
@@ -1,9 +1,8 @@
-///
-
import _ from 'lodash';
import $ from 'jquery';
-import 'jquery.flot';
-import 'jquery.flot.gauge';
+import 'vendor/flot/jquery.flot';
+import 'vendor/flot/jquery.flot.gauge';
+import 'app/features/panellinks/linkSrv';
import kbn from 'app/core/utils/kbn';
import config from 'app/core/config';
diff --git a/public/app/plugins/panel/singlestat/specs/singlestat_specs.ts b/public/app/plugins/panel/singlestat/specs/singlestat_specs.ts
index 84f8d961c8e..cf74cfbd150 100644
--- a/public/app/plugins/panel/singlestat/specs/singlestat_specs.ts
+++ b/public/app/plugins/panel/singlestat/specs/singlestat_specs.ts
@@ -1,8 +1,6 @@
-///
+import {describe, beforeEach, afterEach, it, sinon, expect, angularMocks} from 'test/lib/common';
-import {describe, beforeEach, afterEach, it, sinon, expect, angularMocks} from '../../../../../test/lib/common';
-
-import helpers from '../../../../../test/specs/helpers';
+import helpers from 'test/specs/helpers';
import {SingleStatCtrl} from '../module';
import moment from 'moment';
diff --git a/public/app/plugins/panel/unknown/module.ts b/public/app/plugins/panel/unknown/module.ts
index c4567599a38..9ed3711df16 100644
--- a/public/app/plugins/panel/unknown/module.ts
+++ b/public/app/plugins/panel/unknown/module.ts
@@ -1,6 +1,5 @@
-///
-import {PanelCtrl} from 'app/plugins/sdk';
+import {PanelCtrl} from 'app/features/panel/panel_ctrl';
export class UnknownPanelCtrl extends PanelCtrl {
static templateUrl = 'public/app/plugins/panel/unknown/module.html';
@@ -9,7 +8,6 @@ export class UnknownPanelCtrl extends PanelCtrl {
constructor($scope, $injector) {
super($scope, $injector);
}
-
}
diff --git a/public/app/plugins/plugin_api.md b/public/app/plugins/plugin_api.md
deleted file mode 100644
index 71db1ef8f09..00000000000
--- a/public/app/plugins/plugin_api.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Plugin API
-
-### 3.0 changes to plugin api changes
-
-There has been big changes to both data source and plugin schema (plugin.json) and how
-you write the plugin main module.
-
-#### Datasource plugin
-
-Now data source plugins AMD/SystemJS module should return:
-
-```javascript
-return {
- Datasource: ElasticDatasource,
- configView: editView.default,
- annotationsQueryEditor: annotationsQueryEditor,
- metricsQueryEditor: metricsQueryEditor,
- metricsQueryOptions: metricsQueryOptions,
-};
-```
-
-Where ElasticDatasource is a constructor function to a javascript. The constructor
-function can take angular services and `instanceSettings` as parameters.
-
-Example:
-
-```javascript
-function ElasticDatasource(instanceSettings, templateSrv) {
- this.instanceSettings = this.instanceSettings;
- ///...
-};
-```
-
-A datasource module can optionally return a configView directive function, metricsQueryEditor directive function, etc.
-
-Example:
-
-```javascript
-function metricsQueryEditor() {
- return {controller: 'ElasticQueryCtrl', templateUrl: 'public/app/plugins/datasource/elasticsearch/partials/query.editor.html'};
-}
-```
-
-#### Panel plugin
-
-The panel plugin AMD/SystemJS module should return an object with a property named `panel`. This needs to be
-a directive function.
-
-### 2.5.1 changes
-datasource annotationQuery changed. now single options parameter with:
-- range
-- rangeRaw
-- annotation
-
-2.5 changed the `range` parameter in the `datasource.query` function's options parameter. This
-parameter now holds a parsed range with `moment` dates `form` and `to`. To get
-millisecond epoch from a `moment` you the function `valueOf`. The raw date range as represented
-internally in grafana (which may be relative expressions like `now-5h`) is included in the
-new property `rangeRaw` (on the options object).
diff --git a/public/app/plugins/sdk.ts b/public/app/plugins/sdk.ts
index 32ee7e34db9..b9fbb317977 100644
--- a/public/app/plugins/sdk.ts
+++ b/public/app/plugins/sdk.ts
@@ -2,20 +2,12 @@ import {PanelCtrl} from 'app/features/panel/panel_ctrl';
import {MetricsPanelCtrl} from 'app/features/panel/metrics_panel_ctrl';
import {QueryCtrl} from 'app/features/panel/query_ctrl';
import {alertTab} from 'app/features/alerting/alert_tab_ctrl';
-
-import config from 'app/core/config';
-
-export function loadPluginCss(options) {
- if (config.bootData.user.lightTheme) {
- System.import(options.light + '!css');
- } else {
- System.import(options.dark + '!css');
- }
-}
+import {loadPluginCss} from 'app/features/plugins/plugin_loader';
export {
PanelCtrl,
MetricsPanelCtrl,
QueryCtrl,
alertTab,
+ loadPluginCss,
};
diff --git a/public/app/system.conf.js b/public/app/system.conf.js
deleted file mode 100644
index bea81e2cac5..00000000000
--- a/public/app/system.conf.js
+++ /dev/null
@@ -1,97 +0,0 @@
-System.config({
- defaultJSExtenions: true,
- baseURL: 'public',
- paths: {
- 'gemini-scrollbar': 'vendor/npm/gemini-scrollbar/index.js',
- 'react': 'vendor/npm/react/dist/react.js',
- 'react-dom': 'vendor/npm/react-dom/dist/react-dom.js',
- 'ngreact': 'vendor/npm/ngreact/ngReact.js',
- 'mousetrap': 'vendor/npm/mousetrap/mousetrap.js',
- 'remarkable': 'vendor/npm/remarkable/dist/remarkable.js',
- 'tether': 'vendor/npm/tether/dist/js/tether.js',
- 'eventemitter3': 'vendor/npm/eventemitter3/index.js',
- 'tether-drop': 'vendor/npm/tether-drop/dist/js/drop.js',
- 'moment': 'vendor/moment.js',
- "jquery": "vendor/npm/jquery/dist/jquery.js",
- 'lodash-src': 'vendor/npm/lodash/lodash.js',
- "lodash": 'app/core/lodash_extended.js',
- "angular": "vendor/npm/angular/angular.js",
- "bootstrap": "vendor/bootstrap/bootstrap.js",
- 'angular-route': 'vendor/npm/angular-route/angular-route.js',
- 'angular-sanitize': 'vendor/npm/angular-sanitize/angular-sanitize.js',
- "angular-ui": "vendor/angular-ui/ui-bootstrap-tpls.js",
- "angular-strap": "vendor/angular-other/angular-strap.js",
- "angular-dragdrop": "vendor/npm/angular-native-dragdrop/draganddrop.js",
- "angular-bindonce": "vendor/npm/angular-bindonce/bindonce.js",
- "spectrum": "vendor/spectrum.js",
- "bootstrap-tagsinput": "vendor/tagsinput/bootstrap-tagsinput.js",
- "jquery.flot": "vendor/flot/jquery.flot",
- "jquery.flot.pie": "vendor/flot/jquery.flot.pie",
- "jquery.flot.selection": "vendor/flot/jquery.flot.selection",
- "jquery.flot.stack": "vendor/flot/jquery.flot.stack",
- "jquery.flot.stackpercent": "vendor/flot/jquery.flot.stackpercent",
- "jquery.flot.time": "vendor/flot/jquery.flot.time",
- "jquery.flot.crosshair": "vendor/flot/jquery.flot.crosshair",
- "jquery.flot.fillbelow": "vendor/flot/jquery.flot.fillbelow",
- "jquery.flot.gauge": "vendor/flot/jquery.flot.gauge",
- "d3": "vendor/d3/d3.js",
- "jquery.flot.dashes": "vendor/flot/jquery.flot.dashes",
- "jquery-ui": "vendor/jquery-ui/custom.js",
- "gridstack": "vendor/npm/gridstack/dist/gridstack.js",
- "gridstack.jquery-ui": "vendor/npm/gridstack/dist/gridstack.jQueryUI.js",
- "ace": "vendor/npm/ace-builds/src-noconflict/ace",
- "clipboard": "vendor/npm/clipboard/dist/clipboard.js"
- },
-
- packages: {
- app: {
- defaultExtension: 'js',
- },
- vendor: {
- defaultExtension: 'js',
- },
- plugins: {
- defaultExtension: 'js',
- },
- test: {
- defaultExtension: 'js',
- },
- },
-
- map: {
- text: 'vendor/plugin-text/text.js',
- css: 'app/core/utils/css_loader.js',
- },
-
- meta: {
- 'vendor/npm/jquery-ui/jquery-ui.js': {
- format: 'amd',
- deps: ['jquery'],
- },
- 'vendor/npm/gridstack/dist/gridstack.js': {
- format: 'global',
- deps: ['jquery', 'jquery-ui', 'lodash'],
- },
- "vendor/npm/gridstack/dist/gridstack.jQueryUI.js": {
- format: 'global',
- deps: ['gridstack'],
- },
- 'vendor/npm/angular/angular.js': {
- format: 'global',
- deps: ['jquery'],
- exports: 'angular',
- },
- 'vendor/npm/eventemitter3/index.js': {
- format: 'cjs',
- exports: 'EventEmitter'
- },
- 'vendor/npm/mousetrap/mousetrap.js': {
- format: 'global',
- exports: 'Mousetrap'
- },
- 'vendor/npm/ace-builds/src-noconflict/ace.js': {
- format: 'global',
- exports: 'ace'
- }
- }
-});
diff --git a/public/sass/_grafana.scss b/public/sass/_grafana.scss
index 83f9a8d3fe1..7ccec0ae56a 100644
--- a/public/sass/_grafana.scss
+++ b/public/sass/_grafana.scss
@@ -1,3 +1,7 @@
+// vendor
+@import "../vendor/css/timepicker.css";
+@import "../vendor/css/spectrum.css";
+
// MIXINS
@import "mixins/mixins";
@import "mixins/animations";
@@ -15,8 +19,7 @@
@import "base/type";
@import "base/forms";
@import "base/grid";
-@import "base/font_awesome";
-@import "base/grafana_icons";
+@import "base/fonts";
@import "base/code";
// UTILS
diff --git a/public/sass/base/_fonts.scss b/public/sass/base/_fonts.scss
index 0021ace5c27..44c27dfeede 100644
--- a/public/sass/base/_fonts.scss
+++ b/public/sass/base/_fonts.scss
@@ -1,24 +1,5 @@
-/* icon fonts
-
-@font-face {
- font-family: 'FontAwesome';
- src: url('../fonts/fontawesome-webfont.eot?v=4.2.0');
- src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-
-@font-face {
- font-family: 'grafana-icons';
- src: url('../fonts/grafana-icons.eot?h6rv8b');
- src: url('../fonts/grafana-icons.eot?h6rv8b#iefix') format('embedded-opentype'),
- url('../fonts/grafana-icons.ttf?h6rv8b') format('truetype'),
- url('../fonts/grafana-icons.woff?h6rv8b') format('woff'),
- url('../fonts/grafana-icons.svg?h6rv8b#grafana-icons') format('svg');
- font-weight: normal;
- font-style: normal;
-}*/
-
+@import "base/font_awesome";
+@import "base/grafana_icons";
/* cyrillic-ext */
@font-face {
diff --git a/public/sass/components/_code_editor.scss b/public/sass/components/_code_editor.scss
index 0ef7e7a11c2..c9a6e94cf9c 100644
--- a/public/sass/components/_code_editor.scss
+++ b/public/sass/components/_code_editor.scss
@@ -3,7 +3,6 @@
min-width: 20rem;
flex-grow: 1;
margin-right: 0.25rem;
- visibility: hidden;
&.ace_editor {
@include font-family-monospace();
@@ -13,10 +12,6 @@
@include border-radius($input-border-radius-sm);
border: $input-btn-border-width solid $input-border-color;
}
-
- &--theme-loaded {
- visibility: visible;
- }
}
.ace_editor.ace_autocomplete {
diff --git a/public/sass/components/_query_editor.scss b/public/sass/components/_query_editor.scss
index 73e02451244..cd8f949ed64 100644
--- a/public/sass/components/_query_editor.scss
+++ b/public/sass/components/_query_editor.scss
@@ -9,14 +9,7 @@
}
}
-.query-segment-key {
- //border-right: none;
- //padding-right: 1px;
-}
-
.query-segment-operator {
- //padding-right: 1px;
- //border-right: none;
color: $orange;
}
diff --git a/public/sass/pages/_alerting.scss b/public/sass/pages/_alerting.scss
index 2829849bcb8..6db3470f3ea 100644
--- a/public/sass/pages/_alerting.scss
+++ b/public/sass/pages/_alerting.scss
@@ -30,15 +30,67 @@
// Alert List
-.alert-list-item-state {
+.alert-list {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.alert-list-icon {
font-weight: bold;
+ display: flex;
+ justify-content: center;
+ align-items: center;
.icon-gf, .fa {
- font-size: 120%;
+ font-size: 200%;
position: relative;
top: 2px;
}
}
+.alert-list-body {
+ display: flex;
+}
+
+.alert-list-main {
+ padding: 0 2rem;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+}
+
+.alert-list-title {
+ font-size: $font-size-base;
+ margin: 0;
+ font-weight: 600;
+}
+
+.alert-list-state {
+ font-weight: bold;
+}
+
+.alert-list-text {
+ font-size: $font-size-sm;
+ margin: 0;
+ line-height: 1.5rem;
+ color: $text-color-weak;
+}
+
+.alert-list-info {
+ color: $text-color;
+}
+
+.alert-list-info-left {
+ padding-left: 2rem;
+}
+
+.alert-list-footer {
+ display: flex;
+ justify-content: space-between;
+ flex-direction: column;
+ align-items: flex-end;
+}
+
.panel-has-alert {
.panel-alert-icon:before {
content: "\e611";
diff --git a/public/sass/pages/_styleguide.scss b/public/sass/pages/_styleguide.scss
index 66543847574..ada2f533eca 100644
--- a/public/sass/pages/_styleguide.scss
+++ b/public/sass/pages/_styleguide.scss
@@ -26,52 +26,3 @@
text-align: center;
}
-// define("areas/styleguide/static/script/app/colors", [], function() {
-// "use strict";
-// var a = function(a) {
-// return 0 === a.indexOf("rgba") ? (a = a.match(/(\d{1,3})/gi),
-// [a[0], a[1], a[2]]) : (a = a.replace(/^#/, "").match(/[0-9a-z]{2}/gi),
-// [parseInt(a[0], 16), parseInt(a[1], 16), parseInt(a[2], 16)])
-// }
-// , b = function(b, c) {
-// var d = 0
-// , e = 0;
-// for (b = a(b),
-// c = a(c); e < b.length; )
-// d += (b[e] - c[e]) * (b[e] - c[e]),
-// e++;
-// return Math.sqrt(d)
-// }
-// , c = function() {
-// $(".color-card").removeClass("isnt-approximate is-approximate is-exact")
-// }
-// , d = function() {
-// var a = $("#proximityMatch").val()
-// , c = $(".swatch");
-// c.each(function() {
-// var c = $(this)
-// , d = b(a, c.children("i").text());
-// c.parent().removeClass("is-approximate isnt-approximate is-exact"),
-// 20 > d ? (c.css("border-color", /^#/.test(a) ? a : "#" + a),
-// c.parent().addClass("is-approximate"),
-// c.parent().addClass("has-match"),
-// 0 === d && c.parent().addClass("is-exact")) : c.parent().addClass("isnt-approximate")
-// })
-// }
-// , e = $("#proximityMatch")
-// , f = function() {
-// var a = e.val();
-// "#" == a[0] && (a = a.substring(1)),
-// 6 == a.length ? d() : c()
-// }
-// ;
-// e.on("input", f),
-// e.val() && f();
-// var g = function() {
-// var a = "/static/images/styleguide/leaves.jpg"
-// , b = $("[data-colors]");
-// "none" === b.css("background-image") ? b.css("background-image", "url('" + a + "')") : b.css("background-image", "none")
-// }
-// ;
-// $("#toggle-background-image").on("click", g)
-// })
diff --git a/public/test/index.ts b/public/test/index.ts
new file mode 100644
index 00000000000..79c911cd32c
--- /dev/null
+++ b/public/test/index.ts
@@ -0,0 +1,31 @@
+// const context = require.context('./', true, /_specs\.ts/);
+// context.keys().forEach(context);
+// module.exports = context;
+
+import 'babel-polyfill';
+import 'jquery';
+import angular from 'angular';
+import 'angular-mocks';
+import 'app/app';
+
+// configure enzyme
+import Enzyme from 'enzyme';
+import Adapter from 'enzyme-adapter-react-16';
+Enzyme.configure({ adapter: new Adapter() });
+
+angular.module('grafana', ['ngRoute']);
+angular.module('grafana.services', ['ngRoute', '$strap.directives']);
+angular.module('grafana.panels', []);
+angular.module('grafana.controllers', []);
+angular.module('grafana.directives', []);
+angular.module('grafana.filters', []);
+angular.module('grafana.routes', ['ngRoute']);
+
+const context = (require).context('../', true, /specs/);
+for (let key of context.keys()) {
+ context(key);
+}
+
+
+
+
diff --git a/public/test/lib/common.ts b/public/test/lib/common.ts
index 75f97bb7576..c6b74fc7ecb 100644
--- a/public/test/lib/common.ts
+++ b/public/test/lib/common.ts
@@ -1,5 +1,3 @@
-///
-
var _global = (window);
var beforeEach = _global.beforeEach;
var afterEach = _global.afterEach;
diff --git a/public/test/mocks/history-mocks.js b/public/test/mocks/history-mocks.js
deleted file mode 100644
index 6bbed54920d..00000000000
--- a/public/test/mocks/history-mocks.js
+++ /dev/null
@@ -1,197 +0,0 @@
-define([],
- function() {
- 'use strict';
-
- return {
- versions: function() {
- return [{
- id: 4,
- dashboardId: 1,
- parentVersion: 3,
- restoredFrom: 0,
- version: 4,
- created: '2017-02-22T17:43:01-08:00',
- createdBy: 'admin',
- message: '',
- },
- {
- id: 3,
- dashboardId: 1,
- parentVersion: 1,
- restoredFrom: 1,
- version: 3,
- created: '2017-02-22T17:43:01-08:00',
- createdBy: 'admin',
- message: '',
- },
- {
- id: 2,
- dashboardId: 1,
- parentVersion: 0,
- restoredFrom: -1,
- version: 2,
- created: '2017-02-22T17:29:52-08:00',
- createdBy: 'admin',
- message: '',
- },
- {
- id: 1,
- dashboardId: 1,
- parentVersion: 0,
- restoredFrom: -1,
- slug: 'history-dashboard',
- version: 1,
- created: '2017-02-22T17:06:37-08:00',
- createdBy: 'admin',
- message: '',
- }];
- },
- compare: function(type) {
- return type === 'basic' ? '
' : '
';
- },
- restore: function(version, restoredFrom) {
- return {
- dashboard: {
- meta: {
- type: 'db',
- canSave: true,
- canEdit: true,
- canStar: true,
- slug: 'history-dashboard',
- expires: '0001-01-01T00:00:00Z',
- created: '2017-02-21T18:40:45-08:00',
- updated: '2017-04-11T21:31:22.59219665-07:00',
- updatedBy: 'admin',
- createdBy: 'admin',
- version: version,
- },
- dashboard: {
- annotations: {
- list: []
- },
- description: 'A random dashboard for implementing the history list',
- editable: true,
- gnetId: null,
- graphTooltip: 0,
- hideControls: false,
- id: 1,
- links: [],
- restoredFrom: restoredFrom,
- rows: [{
- collapse: false,
- height: '250px',
- panels: [{
- aliasColors: {},
- bars: false,
- datasource: null,
- fill: 1,
- id: 1,
- legend: {
- avg: false,
- current: false,
- max: false,
- min: false,
- show: true,
- total: false,
- values: false
- },
- lines: true,
- linewidth: 1,
- nullPointMode: "null",
- percentage: false,
- pointradius: 5,
- points: false,
- renderer: 'flot',
- seriesOverrides: [],
- span: 12,
- stack: false,
- steppedLine: false,
- targets: [{}],
- thresholds: [],
- timeFrom: null,
- timeShift: null,
- title: 'Panel Title',
- tooltip: {
- shared: true,
- sort: 0,
- value_type: 'individual'
- },
- type: 'graph',
- xaxis: {
- mode: 'time',
- name: null,
- show: true,
- values: []
- },
- yaxes: [{
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true
- }, {
- format: 'short',
- label: null,
- logBase: 1,
- max: null,
- min: null,
- show: true
- }]
- }],
- repeat: null,
- repeatIteration: null,
- repeatRowId: null,
- showTitle: false,
- title: 'Dashboard Row',
- titleSize: 'h6'
- }
- ],
- schemaVersion: 14,
- style: 'dark',
- tags: [
- 'development'
- ],
- templating: {
- 'list': []
- },
- time: {
- from: 'now-6h',
- to: 'now'
- },
- timepicker: {
- refresh_intervals: [
- '5s',
- '10s',
- '30s',
- '1m',
- '5m',
- '15m',
- '30m',
- '1h',
- '2h',
- '1d',
- ],
- time_options: [
- '5m',
- '15m',
- '1h',
- '6h',
- '12h',
- '24h',
- '2d',
- '7d',
- '30d'
- ]
- },
- timezone: 'utc',
- title: 'History Dashboard',
- version: version,
- }
- },
- message: 'Dashboard restored to version ' + version,
- version: version
- };
- },
- };
-});
diff --git a/public/test/specs/backend_srv-specs.js b/public/test/specs/backend_srv-specs.js
deleted file mode 100644
index a151fec3f14..00000000000
--- a/public/test/specs/backend_srv-specs.js
+++ /dev/null
@@ -1,33 +0,0 @@
-define([
- 'app/core/config',
- 'app/core/services/backend_srv'
-], function() {
- 'use strict';
-
- describe('backend_srv', function() {
- var _backendSrv;
- var _http;
- var _httpBackend;
-
- beforeEach(module('grafana.core'));
- beforeEach(module('grafana.services'));
- beforeEach(inject(function ($httpBackend, $http, backendSrv) {
- _httpBackend = $httpBackend;
- _http = $http;
- _backendSrv = backendSrv;
- }));
-
- describe('when handling errors', function() {
- it('should return the http status code', function(done) {
- _httpBackend.whenGET('gateway-error').respond(502);
- _backendSrv.datasourceRequest({
- url: 'gateway-error'
- }).catch(function(err) {
- expect(err.status).to.be(502);
- done();
- });
- _httpBackend.flush();
- });
- });
- });
-});
diff --git a/public/test/specs/dashboardViewStateSrv-specs.js b/public/test/specs/dashboardViewStateSrv-specs.js
deleted file mode 100644
index 42bbf709655..00000000000
--- a/public/test/specs/dashboardViewStateSrv-specs.js
+++ /dev/null
@@ -1,56 +0,0 @@
-define([
- 'app/features/dashboard/viewStateSrv',
- 'app/core/config'
-], function(viewStateSrv, config) {
- 'use strict';
-
- describe('when updating view state', function() {
- var viewState, location;
- var timeSrv = {};
- var templateSrv = {};
- var contextSrv = {
- user: {
- orgId: 19
- }
- };
- beforeEach(function() {
- config.bootData = {
- user: {
- orgId: 1
- }
- };
- });
- beforeEach(module('grafana.services'));
- beforeEach(module(function($provide) {
- $provide.value('timeSrv', timeSrv);
- $provide.value('templateSrv', templateSrv);
- $provide.value('contextSrv', contextSrv);
- }));
-
- beforeEach(inject(function(dashboardViewStateSrv, $location, $rootScope) {
- $rootScope.onAppEvent = function() {};
- $rootScope.dashboard = {meta: {}};
- viewState = dashboardViewStateSrv.create($rootScope);
- location = $location;
- }));
-
- describe('to fullscreen true and edit true', function() {
- it('should update querystring and view state', function() {
- var updateState = {fullscreen: true, edit: true, panelId: 1};
- viewState.update(updateState);
- expect(location.search()).to.eql({fullscreen: true, edit: true, panelId: 1, orgId: 1});
- expect(viewState.dashboard.meta.fullscreen).to.be(true);
- expect(viewState.state.fullscreen).to.be(true);
- });
- });
-
- describe('to fullscreen false', function() {
- it('should remove params from query string', function() {
- viewState.update({fullscreen: true, panelId: 1, edit: true});
- viewState.update({fullscreen: false});
- expect(viewState.dashboard.meta.fullscreen).to.be(false);
- expect(viewState.state.fullscreen).to.be(null);
- });
- });
- });
-});
diff --git a/public/test/specs/datasource_srv_specs.js b/public/test/specs/datasource_srv_specs.js
deleted file mode 100644
index e6b38384239..00000000000
--- a/public/test/specs/datasource_srv_specs.js
+++ /dev/null
@@ -1,63 +0,0 @@
-define([
- 'app/core/config',
- 'app/core/services/datasource_srv'
-], function(config) {
- 'use strict';
-
- describe('datasource_srv', function() {
- var _datasourceSrv;
- var metricSources;
- var templateSrv = {};
-
- beforeEach(module('grafana.core'));
- beforeEach(module(function($provide) {
- $provide.value('templateSrv', templateSrv);
- }));
- beforeEach(module('grafana.services'));
- beforeEach(inject(function(datasourceSrv) {
- _datasourceSrv = datasourceSrv;
- }));
-
- describe('when loading metric sources', function() {
- var unsortedDatasources = {
- 'mmm': {
- type: 'test-db',
- meta: { metrics: {m: 1} }
- },
- '--Grafana--': {
- type: 'grafana',
- meta: {builtIn: true, metrics: {m: 1}, id: "grafana"}
- },
- '--Mixed--': {
- type: 'test-db',
- meta: {builtIn: true, metrics: {m: 1}, id: "mixed"}
- },
- 'ZZZ': {
- type: 'test-db',
- meta: {metrics: {m: 1} }
- },
- 'aaa': {
- type: 'test-db',
- meta: { metrics: {m: 1} }
- },
- 'BBB': {
- type: 'test-db',
- meta: { metrics: {m: 1} }
- },
- };
- beforeEach(function() {
- config.datasources = unsortedDatasources;
- metricSources = _datasourceSrv.getMetricSources({skipVariables: true});
- });
-
- it('should return a list of sources sorted case insensitively with builtin sources last', function() {
- expect(metricSources[0].name).to.be('aaa');
- expect(metricSources[1].name).to.be('BBB');
- expect(metricSources[2].name).to.be('mmm');
- expect(metricSources[3].name).to.be('ZZZ');
- expect(metricSources[4].name).to.be('--Grafana--');
- expect(metricSources[5].name).to.be('--Mixed--');
- });
- });
- });
-});
diff --git a/public/test/specs/helpers.js b/public/test/specs/helpers.js
index 53c761aaa6c..a091b1a3b70 100644
--- a/public/test/specs/helpers.js
+++ b/public/test/specs/helpers.js
@@ -25,7 +25,7 @@ define([
};
this.providePhase = function(mocks) {
- return module(function($provide) {
+ return window.module(function($provide) {
$provide.value('datasourceSrv', self.datasourceSrv);
$provide.value('annotationsSrv', self.annotationsSrv);
$provide.value('timeSrv', self.timeSrv);
@@ -38,7 +38,7 @@ define([
};
this.createPanelController = function(Ctrl) {
- return inject(function($controller, $rootScope, $q, $location, $browser) {
+ return window.inject(function($controller, $rootScope, $q, $location, $browser) {
self.scope = $rootScope.$new();
self.$location = $location;
self.$browser = $browser;
@@ -60,7 +60,7 @@ define([
};
this.createControllerPhase = function(controllerName) {
- return inject(function($controller, $rootScope, $q, $location, $browser) {
+ return window.inject(function($controller, $rootScope, $q, $location, $browser) {
self.scope = $rootScope.$new();
self.$location = $location;
self.$browser = $browser;
@@ -95,7 +95,7 @@ define([
self.$routeParams = {};
this.providePhase = function(mocks) {
- return module(function($provide) {
+ return window.module(function($provide) {
_.each(mocks, function(key) {
$provide.value(key, self[key]);
});
@@ -103,7 +103,7 @@ define([
};
this.createService = function(name) {
- return inject(function($q, $rootScope, $httpBackend, $injector, $location) {
+ return window.inject(function($q, $rootScope, $httpBackend, $injector, $location) {
self.$q = $q;
self.$rootScope = $rootScope;
self.$httpBackend = $httpBackend;
diff --git a/public/test/specs/linkSrv-specs.js b/public/test/specs/linkSrv-specs.js
deleted file mode 100644
index 309fdb07076..00000000000
--- a/public/test/specs/linkSrv-specs.js
+++ /dev/null
@@ -1,52 +0,0 @@
-define([
- 'lodash',
- 'app/features/dashboard/all',
- 'app/features/panellinks/linkSrv'
-], function(_) {
- 'use strict';
-
- describe('linkSrv', function() {
- var _linkSrv;
-
- beforeEach(module('grafana.core'));
- beforeEach(module('grafana.services'));
-
- beforeEach(inject(function(linkSrv) {
- _linkSrv = linkSrv;
- }));
-
- describe('when appending query strings', function() {
-
- it('add ? to URL if not present', function() {
- var url = _linkSrv.appendToQueryString('http://example.com', 'foo=bar');
- expect(url).to.be('http://example.com?foo=bar');
- });
-
- it('do not add & to URL if ? is present but query string is empty', function() {
- var url = _linkSrv.appendToQueryString('http://example.com?', 'foo=bar');
- expect(url).to.be('http://example.com?foo=bar');
- });
-
- it('add & to URL if query string is present', function() {
- var url = _linkSrv.appendToQueryString('http://example.com?foo=bar', 'hello=world');
- expect(url).to.be('http://example.com?foo=bar&hello=world');
- });
-
- it('do not change the URL if there is nothing to append', function() {
- _.each(['', undefined, null], function(toAppend) {
- var url1 = _linkSrv.appendToQueryString('http://example.com', toAppend);
- expect(url1).to.be('http://example.com');
-
- var url2 = _linkSrv.appendToQueryString('http://example.com?', toAppend);
- expect(url2).to.be('http://example.com?');
-
- var url3 = _linkSrv.appendToQueryString('http://example.com?foo=bar', toAppend);
- expect(url3).to.be('http://example.com?foo=bar');
- });
- });
-
- });
-
- });
-
-});
diff --git a/public/test/specs/seriesOverridesCtrl-specs.js b/public/test/specs/seriesOverridesCtrl-specs.js
deleted file mode 100644
index f83a87d5977..00000000000
--- a/public/test/specs/seriesOverridesCtrl-specs.js
+++ /dev/null
@@ -1,59 +0,0 @@
-define([
- './helpers',
- 'app/plugins/panel/graph/series_overrides_ctrl'
-], function(helpers) {
- 'use strict';
-
- describe('SeriesOverridesCtrl', function() {
- var ctx = new helpers.ControllerTestContext();
- var popoverSrv = {};
-
- beforeEach(module('grafana.services'));
- beforeEach(module('grafana.controllers'));
-
- beforeEach(ctx.providePhase({
- popoverSrv: popoverSrv
- }));
-
- beforeEach(inject(function($rootScope, $controller) {
- // ctx.createControllerPhase('SeriesOverridesCtrl'));
- // beforeEach(function() {
- ctx.scope = $rootScope.$new();
- ctx.scope.ctrl = {
- refresh: sinon.spy(),
- render: sinon.spy(),
- seriesList: []
- };
- ctx.scope.render = function() {};
- ctx.controller = $controller('SeriesOverridesCtrl', {
- $scope: ctx.scope
- });
- }));
-
- describe('When setting an override', function() {
- beforeEach(function() {
- ctx.scope.setOverride({propertyName: 'lines'}, {value: true});
- });
-
- it('should set override property', function() {
- expect(ctx.scope.override.lines).to.be(true);
- });
-
- it('should update view model', function() {
- expect(ctx.scope.currentOverrides[0].name).to.be('Lines');
- expect(ctx.scope.currentOverrides[0].value).to.be('true');
- });
- });
-
- describe('When removing overide', function() {
- it('click should include option and value index', function() {
- ctx.scope.setOverride(1,0);
- ctx.scope.removeOverride({ propertyName: 'lines' });
- expect(ctx.scope.currentOverrides.length).to.be(0);
- });
- });
-
- });
-
-});
-
diff --git a/public/test/specs/shareModalCtrl-specs.js b/public/test/specs/shareModalCtrl-specs.js
deleted file mode 100644
index 9d3e7f941d0..00000000000
--- a/public/test/specs/shareModalCtrl-specs.js
+++ /dev/null
@@ -1,115 +0,0 @@
-define([
- './helpers',
- 'app/features/dashboard/shareModalCtrl',
- 'app/features/panellinks/linkSrv',
- 'app/core/config',
-], function(helpers, shareModalCtrl, linkSrv, config) {
- 'use strict';
-
- describe('ShareModalCtrl', function() {
- var ctx = new helpers.ControllerTestContext();
-
- function setTime(range) {
- ctx.timeSrv.timeRange = sinon.stub().returns(range);
- }
-
- beforeEach(function() {
- config.bootData = {
- user: {
- orgId: 1
- }
- };
- });
-
- setTime({ from: new Date(1000), to: new Date(2000) });
-
- beforeEach(module('grafana.controllers'));
- beforeEach(module('grafana.services'));
- beforeEach(module(function($compileProvider) {
- $compileProvider.preAssignBindingsEnabled(true);
- }));
-
- beforeEach(ctx.providePhase());
-
- beforeEach(ctx.createControllerPhase('ShareModalCtrl'));
-
- describe('shareUrl with current time range and panel', function() {
- it('should generate share url absolute time', function() {
- ctx.$location.path('/test');
- ctx.scope.panel = { id: 22 };
-
- ctx.scope.init();
- expect(ctx.scope.shareUrl).to.be('http://server/#!/test?from=1000&to=2000&orgId=1&panelId=22&fullscreen');
- });
-
- it('should generate render url', function() {
- ctx.$location.$$absUrl = 'http://dashboards.grafana.com/dashboard/db/my-dash';
-
- ctx.scope.panel = { id: 22 };
-
- ctx.scope.init();
- var base = 'http://dashboards.grafana.com/render/dashboard-solo/db/my-dash';
- var params = '?from=1000&to=2000&orgId=1&panelId=22&width=1000&height=500&tz=UTC';
- expect(ctx.scope.imageUrl).to.contain(base + params);
- });
-
- it('should remove panel id when no panel in scope', function() {
- ctx.$location.path('/test');
- ctx.scope.options.forCurrent = true;
- ctx.scope.panel = null;
-
- ctx.scope.init();
- expect(ctx.scope.shareUrl).to.be('http://server/#!/test?from=1000&to=2000&orgId=1');
- });
-
- it('should add theme when specified', function() {
- ctx.$location.path('/test');
- ctx.scope.options.theme = 'light';
- ctx.scope.panel = null;
-
- ctx.scope.init();
- expect(ctx.scope.shareUrl).to.be('http://server/#!/test?from=1000&to=2000&orgId=1&theme=light');
- });
-
- it('should remove fullscreen from image url when is first param in querystring and modeSharePanel is true', function() {
- ctx.$location.url('/test?fullscreen&edit');
- ctx.scope.modeSharePanel = true;
- ctx.scope.panel = { id: 1 };
-
- ctx.scope.buildUrl();
-
- expect(ctx.scope.shareUrl).to.contain('?fullscreen&edit&from=1000&to=2000&orgId=1&panelId=1');
- expect(ctx.scope.imageUrl).to.contain('?from=1000&to=2000&orgId=1&panelId=1&width=1000&height=500&tz=UTC');
-
- });
-
- it('should remove edit from image url when is first param in querystring and modeSharePanel is true', function() {
- ctx.$location.url('/test?edit&fullscreen');
- ctx.scope.modeSharePanel = true;
- ctx.scope.panel = { id: 1 };
-
- ctx.scope.buildUrl();
-
- expect(ctx.scope.shareUrl).to.contain('?edit&fullscreen&from=1000&to=2000&orgId=1&panelId=1');
- expect(ctx.scope.imageUrl).to.contain('?from=1000&to=2000&orgId=1&panelId=1&width=1000&height=500&tz=UTC');
-
- });
-
- it('should include template variables in url', function() {
- ctx.$location.path('/test');
- ctx.scope.options.includeTemplateVars = true;
-
- ctx.templateSrv.fillVariableValuesForUrl = function(params) {
- params['var-app'] = 'mupp';
- params['var-server'] = 'srv-01';
- };
-
- ctx.scope.buildUrl();
- expect(ctx.scope.shareUrl).to.be('http://server/#!/test?from=1000&to=2000&orgId=1&var-app=mupp&var-server=srv-01');
- });
- });
-
- });
-
-});
-
diff --git a/public/test/specs/unsavedChangesSrv-specs.js b/public/test/specs/unsavedChangesSrv-specs.js
deleted file mode 100644
index a9f0f0b51c0..00000000000
--- a/public/test/specs/unsavedChangesSrv-specs.js
+++ /dev/null
@@ -1,86 +0,0 @@
-define([
- 'app/features/dashboard/unsavedChangesSrv',
- 'app/features/dashboard/dashboard_srv'
-], function() {
- 'use strict';
-
- describe("unsavedChangesSrv", function() {
- var _unsavedChangesSrv;
- var _dashboardSrv;
- var _location;
- var _contextSrvStub = { isEditor: true };
- var _rootScope;
- var tracker;
- var dash;
- var scope;
-
- beforeEach(module('grafana.core'));
- beforeEach(module('grafana.services'));
- beforeEach(module(function($provide) {
- $provide.value('contextSrv', _contextSrvStub);
- $provide.value('$window', {});
- }));
-
- beforeEach(inject(function(unsavedChangesSrv, $location, $rootScope, dashboardSrv) {
- _unsavedChangesSrv = unsavedChangesSrv;
- _dashboardSrv = dashboardSrv;
- _location = $location;
- _rootScope = $rootScope;
- }));
-
- beforeEach(function() {
- dash = _dashboardSrv.create({
- refresh: false,
- rows: [
- {
- panels: [{ test: "asd", legend: { } }]
- }
- ]
- });
- scope = _rootScope.$new();
- scope.appEvent = sinon.spy();
- scope.onAppEvent = sinon.spy();
-
- tracker = new _unsavedChangesSrv.Tracker(dash, scope);
- });
-
- it('No changes should not have changes', function() {
- expect(tracker.hasChanges()).to.be(false);
- });
-
- it('Simple change should be registered', function() {
- dash.property = "google";
- expect(tracker.hasChanges()).to.be(true);
- });
-
- it('Should ignore a lot of changes', function() {
- dash.time = {from: '1h'};
- dash.refresh = true;
- dash.schemaVersion = 10;
- expect(tracker.hasChanges()).to.be(false);
- });
-
- it('Should ignore row collapse change', function() {
- dash.rows[0].collapse = true;
- expect(tracker.hasChanges()).to.be(false);
- });
-
- it('Should ignore panel legend changes', function() {
- dash.rows[0].panels[0].legend.sortDesc = true;
- dash.rows[0].panels[0].legend.sort = "avg";
- expect(tracker.hasChanges()).to.be(false);
- });
-
- it('Should ignore panel repeats', function() {
- dash.rows[0].panels.push({repeatPanelId: 10});
- expect(tracker.hasChanges()).to.be(false);
- });
-
- it('Should ignore row repeats', function() {
- dash.addEmptyRow();
- dash.rows[1].repeatRowId = 10;
- expect(tracker.hasChanges()).to.be(false);
- });
-
- });
-});
diff --git a/public/test/specs/value_select_dropdown_specs.js b/public/test/specs/value_select_dropdown_specs.js
deleted file mode 100644
index 0672ec6eedf..00000000000
--- a/public/test/specs/value_select_dropdown_specs.js
+++ /dev/null
@@ -1,171 +0,0 @@
-define([
- 'app/core/directives/value_select_dropdown',
-],
-function () {
- 'use strict';
-
- describe("SelectDropdownCtrl", function() {
- var scope;
- var ctrl;
- var tagValuesMap = {};
- var rootScope;
- var q;
-
- beforeEach(module('grafana.core'));
- beforeEach(inject(function($controller, $rootScope, $q, $httpBackend) {
- rootScope = $rootScope;
- q = $q;
- scope = $rootScope.$new();
- ctrl = $controller('ValueSelectDropdownCtrl', {$scope: scope});
- ctrl.onUpdated = sinon.spy();
- $httpBackend.when('GET', /\.html$/).respond('');
- }));
-
- describe("Given simple variable", function() {
- beforeEach(function() {
- ctrl.variable = {
- current: {text: 'hej', value: 'hej' },
- getValuesForTag: function(key) {
- return q.when(tagValuesMap[key]);
- },
- };
- ctrl.init();
- });
-
- it("Should init labelText and linkText", function() {
- expect(ctrl.linkText).to.be("hej");
- });
- });
-
- describe("Given variable with tags and dropdown is opened", function() {
- beforeEach(function() {
- ctrl.variable = {
- current: {text: 'server-1', value: 'server-1'},
- options: [
- {text: 'server-1', value: 'server-1', selected: true},
- {text: 'server-2', value: 'server-2'},
- {text: 'server-3', value: 'server-3'},
- ],
- tags: ["key1", "key2", "key3"],
- getValuesForTag: function(key) {
- return q.when(tagValuesMap[key]);
- },
- multi: true
- };
- tagValuesMap.key1 = ['server-1', 'server-3'];
- tagValuesMap.key2 = ['server-2', 'server-3'];
- tagValuesMap.key3 = ['server-1', 'server-2', 'server-3'];
- ctrl.init();
- ctrl.show();
- });
-
- it("should init tags model", function() {
- expect(ctrl.tags.length).to.be(3);
- expect(ctrl.tags[0].text).to.be("key1");
- });
-
- it("should init options model", function() {
- expect(ctrl.options.length).to.be(3);
- });
-
- it("should init selected values array", function() {
- expect(ctrl.selectedValues.length).to.be(1);
- });
-
- it("should set linkText", function() {
- expect(ctrl.linkText).to.be('server-1');
- });
-
- describe('after adititional value is selected', function() {
- beforeEach(function() {
- ctrl.selectValue(ctrl.options[2], {});
- ctrl.commitChanges();
- });
-
- it('should update link text', function() {
- expect(ctrl.linkText).to.be('server-1 + server-3');
- });
- });
-
- describe('When tag is selected', function() {
- beforeEach(function() {
- ctrl.selectTag(ctrl.tags[0]);
- rootScope.$digest();
- ctrl.commitChanges();
- });
-
- it("should select tag", function() {
- expect(ctrl.selectedTags.length).to.be(1);
- });
-
- it("should select values", function() {
- expect(ctrl.options[0].selected).to.be(true);
- expect(ctrl.options[2].selected).to.be(true);
- });
-
- it("link text should not include tag values", function() {
- expect(ctrl.linkText).to.be('');
- });
-
- describe('and then dropdown is opened and closed without changes', function() {
- beforeEach(function() {
- ctrl.show();
- ctrl.commitChanges();
- rootScope.$digest();
- });
-
- it("should still have selected tag", function() {
- expect(ctrl.selectedTags.length).to.be(1);
- });
- });
-
- describe('and then unselected', function() {
- beforeEach(function() {
- ctrl.selectTag(ctrl.tags[0]);
- rootScope.$digest();
- });
-
- it("should deselect tag", function() {
- expect(ctrl.selectedTags.length).to.be(0);
- });
- });
-
- describe('and then value is unselected', function() {
- beforeEach(function() {
- ctrl.selectValue(ctrl.options[0], {});
- });
-
- it("should deselect tag", function() {
- expect(ctrl.selectedTags.length).to.be(0);
- });
- });
- });
- });
-
- describe("Given variable with selected tags", function() {
- beforeEach(function() {
- ctrl.variable = {
- current: {text: 'server-1', value: 'server-1', tags: [{text: 'key1', selected: true}] },
- options: [
- {text: 'server-1', value: 'server-1'},
- {text: 'server-2', value: 'server-2'},
- {text: 'server-3', value: 'server-3'},
- ],
- tags: ["key1", "key2", "key3"],
- getValuesForTag: function(key) {
- return q.when(tagValuesMap[key]);
- },
- multi: true
- };
- ctrl.init();
- ctrl.show();
- });
-
- it("should set tag as selected", function() {
- expect(ctrl.tags[0].selected).to.be(true);
- });
-
- });
-
- });
-});
diff --git a/public/test/test-main.js b/public/test/test-main.js
deleted file mode 100644
index eff23656d14..00000000000
--- a/public/test/test-main.js
+++ /dev/null
@@ -1,149 +0,0 @@
-(function() {
- "use strict";
-
- // Tun on full stack traces in errors to help debugging
- Error.stackTraceLimit=Infinity;
-
- window.__karma__.loaded = function() {};
-
- System.config({
- baseURL: '/base/',
- defaultJSExtensions: true,
- paths: {
- 'gemini-scrollbar': 'vendor/npm/gemini-scrollbar/index.js',
- 'react': 'vendor/npm/react/dist/react.js',
- 'react-dom': 'vendor/npm/react-dom/dist/react-dom.js',
- 'ngreact': 'vendor/npm/ngreact/ngReact.js',
- 'mousetrap': 'vendor/npm/mousetrap/mousetrap.js',
- 'eventemitter3': 'vendor/npm/eventemitter3/index.js',
- 'remarkable': 'vendor/npm/remarkable/dist/remarkable.js',
- 'tether': 'vendor/npm/tether/dist/js/tether.js',
- 'tether-drop': 'vendor/npm/tether-drop/dist/js/drop.js',
- 'moment': 'vendor/moment.js',
- "jquery": "vendor/npm/jquery/dist/jquery.js",
- 'lodash-src': 'vendor/npm/lodash/lodash.js',
- "lodash": 'app/core/lodash_extended.js',
- "angular": 'vendor/npm/angular/angular.js',
- 'angular-mocks': 'vendor/npm/angular-mocks/angular-mocks.js',
- "bootstrap": "vendor/bootstrap/bootstrap.js",
- 'angular-route': 'vendor/npm/angular-route/angular-route.js',
- 'angular-sanitize': 'vendor/npm/angular-sanitize/angular-sanitize.js',
- "angular-ui": "vendor/angular-ui/ui-bootstrap-tpls.js",
- "angular-strap": "vendor/angular-other/angular-strap.js",
- "angular-dragdrop": "vendor/npm/angular-native-dragdrop/draganddrop.js",
- "angular-bindonce": "vendor/npm/angular-bindonce/bindonce.js",
- "spectrum": "vendor/spectrum.js",
- "bootstrap-tagsinput": "vendor/tagsinput/bootstrap-tagsinput.js",
- "jquery.flot": "vendor/flot/jquery.flot",
- "jquery.flot.pie": "vendor/flot/jquery.flot.pie",
- "jquery.flot.selection": "vendor/flot/jquery.flot.selection",
- "jquery.flot.stack": "vendor/flot/jquery.flot.stack",
- "jquery.flot.stackpercent": "vendor/flot/jquery.flot.stackpercent",
- "jquery.flot.time": "vendor/flot/jquery.flot.time",
- "jquery.flot.crosshair": "vendor/flot/jquery.flot.crosshair",
- "jquery.flot.fillbelow": "vendor/flot/jquery.flot.fillbelow",
- "jquery.flot.gauge": "vendor/flot/jquery.flot.gauge",
- "d3": "vendor/d3/d3.js",
- "jquery.flot.dashes": "vendor/flot/jquery.flot.dashes",
- "jquery-ui": "vendor/jquery-ui/custom.js",
- "gridstack": "vendor/npm/gridstack/dist/gridstack.js",
- "gridstack.jquery-ui": "vendor/npm/gridstack/dist/gridstack.jQueryUI.js",
- "ace": "vendor/npm/ace-builds/src-noconflict/ace",
- "clipboard": "vendor/npm/clipboard/dist/clipboard.js"
- },
-
- packages: {
- app: {
- defaultExtension: 'js',
- },
- vendor: {
- defaultExtension: 'js',
- },
- },
-
- map: {
- },
-
- meta: {
- 'vendor/npm/jquery-ui/jquery-ui.js': {
- format: 'amd',
- deps: ['jquery'],
- },
- 'vendor/npm/gridstack/dist/gridstack.js': {
- format: 'global',
- deps: ['jquery', 'jquery-ui', 'lodash'],
- },
- "vendor/npm/gridstack/dist/gridstack.jQueryUI.js": {
- format: 'global',
- deps: ['gridstack'],
- },
- 'vendor/npm/angular/angular.js': {
- format: 'global',
- deps: ['jquery'],
- exports: 'angular',
- },
- 'vendor/npm/angular-mocks/angular-mocks.js': {
- format: 'global',
- deps: ['angular'],
- },
- 'vendor/npm/eventemitter3/index.js': {
- format: 'cjs',
- exports: 'EventEmitter'
- },
- 'vendor/npm/mousetrap/mousetrap.js': {
- format: 'global',
- exports: 'Mousetrap'
- },
- 'vendor/npm/ace-builds/src-noconflict/ace.js': {
- format: 'global',
- exports: 'ace'
- },
- }
- });
-
- function file2moduleName(filePath) {
- return filePath.replace(/\\/g, '/')
- .replace(/^\/base\//, '')
- .replace(/\.\w*$/, '');
- }
-
- function onlySpecFiles(path) {
- return /specs.*/.test(path);
- }
-
- window.grafanaBootData = {settings: {}};
-
- var modules = ['angular', 'angular-mocks', 'app/app'];
- var promises = modules.map(function(name) {
- return System.import(name);
- });
-
- Promise.all(promises).then(function(deps) {
- var angular = deps[0];
-
- angular.module('grafana', ['ngRoute']);
- angular.module('grafana.services', ['ngRoute', '$strap.directives']);
- angular.module('grafana.panels', []);
- angular.module('grafana.controllers', []);
- angular.module('grafana.directives', []);
- angular.module('grafana.filters', []);
- angular.module('grafana.routes', ['ngRoute']);
-
- // load specs
- return Promise.all(
- Object.keys(window.__karma__.files) // All files served by Karma.
- .filter(onlySpecFiles)
- .map(file2moduleName)
- .map(function(path) {
- // console.log(path);
- return System.import(path);
- }));
- }).then(function() {
- window.__karma__.start();
- }, function(error) {
- window.__karma__.error(error.stack || error);
- }).catch(function(error) {
- window.__karma__.error(error.stack || error);
- });
-
-})();
diff --git a/public/vendor/crypto.min.js b/public/vendor/crypto.min.js
deleted file mode 100644
index f97dcd63ac9..00000000000
--- a/public/vendor/crypto.min.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * Crypto-JS v2.5.3
- * http://code.google.com/p/crypto-js/
- * (c) 2009-2012 by Jeff Mott. All rights reserved.
- * http://code.google.com/p/crypto-js/wiki/License
- */
-(typeof Crypto=="undefined"||!Crypto.util)&&function(){var e=window.Crypto={},g=e.util={rotl:function(a,b){return a<>>32-b},rotr:function(a,b){return a<<32-b|a>>>b},endian:function(a){if(a.constructor==Number)return g.rotl(a,8)&16711935|g.rotl(a,24)&4278255360;for(var b=0;b0;a--)b.push(Math.floor(Math.random()*256));return b},bytesToWords:function(a){for(var b=[],c=0,d=0;c>>5]|=(a[c]&255)<<
-24-d%32;return b},wordsToBytes:function(a){for(var b=[],c=0;c>>5]>>>24-c%32&255);return b},bytesToHex:function(a){for(var b=[],c=0;c>>4).toString(16)),b.push((a[c]&15).toString(16));return b.join("")},hexToBytes:function(a){for(var b=[],c=0;c>>6*(3-e)&63)):b.push("=");return b.join("")},base64ToBytes:function(a){if(typeof atob=="function")return f.stringToBytes(atob(a));for(var a=a.replace(/[^A-Z0-9+\/]/ig,""),b=[],c=0,d=0;c>>
-6-d*2);return b}},e=e.charenc={};e.UTF8={stringToBytes:function(a){return f.stringToBytes(unescape(encodeURIComponent(a)))},bytesToString:function(a){return decodeURIComponent(escape(f.bytesToString(a)))}};var f=e.Binary={stringToBytes:function(a){for(var b=[],c=0;c>> 0;
-
- for (var i = 0; i < len; i++) {
- if (i in t && fun.call(this, t[i], i, t)) {
- return true;
- }
- }
-
- return false;
- };
- }
-
- function valid__isValid(m) {
- if (m._isValid == null) {
- var flags = getParsingFlags(m);
- var parsedParts = some.call(flags.parsedDateParts, function (i) {
- return i != null;
- });
- m._isValid = !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) {
- m._isValid = m._isValid &&
- flags.charsLeftOver === 0 &&
- flags.unusedTokens.length === 0 &&
- flags.bigHour === undefined;
- }
- }
- return m._isValid;
- }
-
- function valid__createInvalid (flags) {
- var m = create_utc__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 = utils_hooks__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);
- // Prevent infinite loop in case updateOffset creates new moment
- // objects.
- if (updateInProgress === false) {
- updateInProgress = true;
- utils_hooks__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 (utils_hooks__hooks.suppressDeprecationWarnings === false &&
- (typeof console !== 'undefined') && console.warn) {
- console.warn('Deprecation warning: ' + msg);
- }
- }
-
- function deprecate(msg, fn) {
- var firstTime = true;
-
- return extend(function () {
- if (utils_hooks__hooks.deprecationHandler != null) {
- utils_hooks__hooks.deprecationHandler(null, msg);
- }
- if (firstTime) {
- warn(msg + '\nArguments: ' + Array.prototype.slice.call(arguments).join(', ') + '\n' + (new Error()).stack);
- firstTime = false;
- }
- return fn.apply(this, arguments);
- }, fn);
- }
-
- var deprecations = {};
-
- function deprecateSimple(name, msg) {
- if (utils_hooks__hooks.deprecationHandler != null) {
- utils_hooks__hooks.deprecationHandler(name, msg);
- }
- if (!deprecations[name]) {
- warn(msg);
- deprecations[name] = true;
- }
- }
-
- utils_hooks__hooks.suppressDeprecationWarnings = false;
- utils_hooks__hooks.deprecationHandler = null;
-
- function isFunction(input) {
- return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
- }
-
- function locale_set__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 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 locale_calendar__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 relative__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) {
- get_set__set(this, unit, value);
- utils_hooks__hooks.updateOffset(this, keepTime);
- return this;
- } else {
- return get_set__get(this, unit);
- }
- };
- }
-
- function get_set__get (mom, unit) {
- return mom.isValid() ?
- mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
- }
-
- function get_set__set (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 (typeof callback === 'number') {
- 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;
- };
- }
-
- 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) {
- 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) {
- return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
- this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
- }
-
- function units_month__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 = create_utc__createUTC([2000, i]);
- this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
- this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
- }
- }
-
- if (strict) {
- if (format === 'MMM') {
- ii = indexOf.call(this._shortMonthsParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._longMonthsParse, llc);
- return ii !== -1 ? ii : null;
- }
- } else {
- if (format === 'MMM') {
- ii = indexOf.call(this._shortMonthsParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._longMonthsParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._longMonthsParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._shortMonthsParse, llc);
- return ii !== -1 ? ii : null;
- }
- }
- }
-
- function localeMonthsParse (monthName, format, strict) {
- var i, mom, regex;
-
- if (this._monthsParseExact) {
- return units_month__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 = create_utc__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 (typeof value !== 'number') {
- 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);
- utils_hooks__hooks.updateOffset(this, true);
- return this;
- } else {
- return get_set__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 = create_utc__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 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input);
- });
- addParseToken('YY', function (input, array) {
- array[YEAR] = utils_hooks__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
-
- utils_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) {
- 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 this._weekdaysShort[m.day()];
- }
-
- var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
- function localeWeekdaysMin (m) {
- return this._weekdaysMin[m.day()];
- }
-
- function day_of_week__handleStrictParse(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 = create_utc__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.call(this._weekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else if (format === 'ddd') {
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._minWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- }
- } else {
- if (format === 'dddd') {
- ii = indexOf.call(this._weekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._minWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else if (format === 'ddd') {
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._weekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._minWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._minWeekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._weekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- }
- }
- }
-
- function localeWeekdaysParse (weekdayName, format, strict) {
- var i, mom, regex;
-
- if (this._weekdaysParseExact) {
- return day_of_week__handleStrictParse.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 = create_utc__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 = create_utc__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);
-
- 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 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;
- require('./locale/' + name);
- // because defineLocale currently also sets the global locale, we
- // want to undo that for lazy loaded locales
- locale_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 locale_locales__getSetGlobalLocale (key, values) {
- var data;
- if (key) {
- if (isUndefined(values)) {
- data = locale_locales__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 {
- // treat as if there is no base config
- deprecateSimple('parentLocaleUndefined',
- 'specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/');
- }
- }
- locales[name] = new Locale(mergeConfigs(parentConfig, config));
-
- // backwards compat for now: also set the locale
- locale_locales__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
- locale_locales__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 locale_locales__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 locale_locales__listLocales() {
- return keys(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;
- utils_hooks__hooks.createFromInputFallback(config);
- }
- }
-
- utils_hooks__hooks.createFromInputFallback = deprecate(
- 'moment construction falls back to js Date. This is ' +
- 'discouraged and will be removed in 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(utils_hooks__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(local__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;
-
- weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year);
- week = defaults(w.w, 1);
-
- 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
- utils_hooks__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 === utils_hooks__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 (!valid__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 || locale_locales__getLocale(config._l);
-
- if (input === null || (format === undefined && input === '')) {
- return valid__createInvalid({nullInput: true});
- }
-
- if (typeof input === 'string') {
- config._i = input = config._locale.preparse(input);
- }
-
- if (isMoment(input)) {
- return new Moment(checkOverflow(input));
- } else if (isArray(format)) {
- configFromStringAndArray(config);
- } else if (isDate(input)) {
- config._d = input;
- } else if (format) {
- configFromStringAndFormat(config);
- } else {
- configFromInput(config);
- }
-
- if (!valid__isValid(config)) {
- config._d = null;
- }
-
- return config;
- }
-
- function configFromInput(config) {
- var input = config._i;
- if (input === undefined) {
- config._d = new Date(utils_hooks__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 (typeof(input) === 'number') {
- // from milliseconds
- config._d = new Date(input);
- } else {
- utils_hooks__hooks.createFromInputFallback(config);
- }
- }
-
- function createLocalOrUTC (input, format, locale, strict, isUTC) {
- var c = {};
-
- if (typeof(locale) === 'boolean') {
- 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 local__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 = local__createLocal.apply(null, arguments);
- if (this.isValid() && other.isValid()) {
- return other < this ? this : other;
- } else {
- return valid__createInvalid();
- }
- }
- );
-
- var prototypeMax = deprecate(
- 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
- function () {
- var other = local__createLocal.apply(null, arguments);
- if (this.isValid() && other.isValid()) {
- return other > this ? this : other;
- } else {
- return valid__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 local__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 = locale_locales__getLocale();
-
- this._bubble();
- }
-
- function isDuration (obj) {
- return obj instanceof Duration;
- }
-
- // 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) || []);
- var chunk = matches[matches.length - 1] || [];
- var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
- var minutes = +(parts[1] * 60) + toInt(parts[2]);
-
- return 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() : local__createLocal(input).valueOf()) - res.valueOf();
- // Use low-level api, because this fn is low-level api.
- res._d.setTime(res._d.valueOf() + diff);
- utils_hooks__hooks.updateOffset(res, false);
- return res;
- } else {
- return local__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.
- utils_hooks__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);
- } 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) {
- add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false);
- } else if (!this._changeInProgress) {
- this._changeInProgress = true;
- utils_hooks__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) {
- this.utcOffset(this._tzm);
- } else if (typeof this._i === 'string') {
- this.utcOffset(offsetFromString(matchOffset, this._i));
- }
- return this;
- }
-
- function hasAlignedHourOffset (input) {
- if (!this.isValid()) {
- return false;
- }
- input = input ? local__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 ? create_utc__createUTC(c._a) : local__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{3})?\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 create__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 (typeof input === 'number') {
- 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(match[MILLISECOND]) * sign
- };
- } 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(local__createLocal(duration.from), local__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;
- }
-
- create__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;
- }
-
- function absRound (number) {
- if (number < 0) {
- return Math.round(-1 * number) * -1;
- } else {
- return Math.round(number);
- }
- }
-
- // 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 = create__createDuration(val, period);
- add_subtract__addSubtract(this, dur, direction);
- return this;
- };
- }
-
- function add_subtract__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) {
- get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);
- }
- if (months) {
- setMonth(mom, get_set__get(mom, 'Month') + months * isAdding);
- }
- if (updateOffset) {
- utils_hooks__hooks.updateOffset(mom, days || months);
- }
- }
-
- var add_subtract__add = createAdder(1, 'add');
- var add_subtract__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 moment_calendar__calendar (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 || local__createLocal(),
- sod = cloneWithOffset(now, this).startOf('day'),
- format = utils_hooks__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, local__createLocal(now)));
- }
-
- function clone () {
- return new Moment(this);
- }
-
- function isAfter (input, units) {
- var localInput = isMoment(input) ? input : local__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 : local__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 : local__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;
- }
-
- utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
- utils_hooks__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 moment_format__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]');
- }
- }
-
- function moment_format__format (inputString) {
- if (!inputString) {
- inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat;
- }
- var output = formatMoment(this, inputString);
- return this.localeData().postformat(output);
- }
-
- function from (time, withoutSuffix) {
- if (this.isValid() &&
- ((isMoment(time) && time.isValid()) ||
- local__createLocal(time).isValid())) {
- return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
- } else {
- return this.localeData().invalidDate();
- }
- }
-
- function fromNow (withoutSuffix) {
- return this.from(local__createLocal(), withoutSuffix);
- }
-
- function to (time, withoutSuffix) {
- if (this.isValid() &&
- ((isMoment(time) && time.isValid()) ||
- local__createLocal(time).isValid())) {
- return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
- } else {
- return this.localeData().invalidDate();
- }
- }
-
- function toNow (withoutSuffix) {
- return this.to(local__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 = locale_locales__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 to_type__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 moment_valid__isValid () {
- return valid__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] = utils_hooks__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 momentPrototype__proto = Moment.prototype;
-
- momentPrototype__proto.add = add_subtract__add;
- momentPrototype__proto.calendar = moment_calendar__calendar;
- momentPrototype__proto.clone = clone;
- momentPrototype__proto.diff = diff;
- momentPrototype__proto.endOf = endOf;
- momentPrototype__proto.format = moment_format__format;
- momentPrototype__proto.from = from;
- momentPrototype__proto.fromNow = fromNow;
- momentPrototype__proto.to = to;
- momentPrototype__proto.toNow = toNow;
- momentPrototype__proto.get = stringGet;
- momentPrototype__proto.invalidAt = invalidAt;
- momentPrototype__proto.isAfter = isAfter;
- momentPrototype__proto.isBefore = isBefore;
- momentPrototype__proto.isBetween = isBetween;
- momentPrototype__proto.isSame = isSame;
- momentPrototype__proto.isSameOrAfter = isSameOrAfter;
- momentPrototype__proto.isSameOrBefore = isSameOrBefore;
- momentPrototype__proto.isValid = moment_valid__isValid;
- momentPrototype__proto.lang = lang;
- momentPrototype__proto.locale = locale;
- momentPrototype__proto.localeData = localeData;
- momentPrototype__proto.max = prototypeMax;
- momentPrototype__proto.min = prototypeMin;
- momentPrototype__proto.parsingFlags = parsingFlags;
- momentPrototype__proto.set = stringSet;
- momentPrototype__proto.startOf = startOf;
- momentPrototype__proto.subtract = add_subtract__subtract;
- momentPrototype__proto.toArray = toArray;
- momentPrototype__proto.toObject = toObject;
- momentPrototype__proto.toDate = toDate;
- momentPrototype__proto.toISOString = moment_format__toISOString;
- momentPrototype__proto.toJSON = toJSON;
- momentPrototype__proto.toString = toString;
- momentPrototype__proto.unix = unix;
- momentPrototype__proto.valueOf = to_type__valueOf;
- momentPrototype__proto.creationData = creationData;
-
- // Year
- momentPrototype__proto.year = getSetYear;
- momentPrototype__proto.isLeapYear = getIsLeapYear;
-
- // Week Year
- momentPrototype__proto.weekYear = getSetWeekYear;
- momentPrototype__proto.isoWeekYear = getSetISOWeekYear;
-
- // Quarter
- momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter;
-
- // Month
- momentPrototype__proto.month = getSetMonth;
- momentPrototype__proto.daysInMonth = getDaysInMonth;
-
- // Week
- momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek;
- momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek;
- momentPrototype__proto.weeksInYear = getWeeksInYear;
- momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear;
-
- // Day
- momentPrototype__proto.date = getSetDayOfMonth;
- momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek;
- momentPrototype__proto.weekday = getSetLocaleDayOfWeek;
- momentPrototype__proto.isoWeekday = getSetISODayOfWeek;
- momentPrototype__proto.dayOfYear = getSetDayOfYear;
-
- // Hour
- momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour;
-
- // Minute
- momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute;
-
- // Second
- momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond;
-
- // Millisecond
- momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond;
-
- // Offset
- momentPrototype__proto.utcOffset = getSetOffset;
- momentPrototype__proto.utc = setOffsetToUTC;
- momentPrototype__proto.local = setOffsetToLocal;
- momentPrototype__proto.parseZone = setOffsetToParsedOffset;
- momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;
- momentPrototype__proto.isDST = isDaylightSavingTime;
- momentPrototype__proto.isLocal = isLocal;
- momentPrototype__proto.isUtcOffset = isUtcOffset;
- momentPrototype__proto.isUtc = isUtc;
- momentPrototype__proto.isUTC = isUtc;
-
- // Timezone
- momentPrototype__proto.zoneAbbr = getZoneAbbr;
- momentPrototype__proto.zoneName = getZoneName;
-
- // Deprecations
- momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
- momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
- momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
- momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
- momentPrototype__proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
-
- var momentPrototype = momentPrototype__proto;
-
- function moment_moment__createUnix (input) {
- return local__createLocal(input * 1000);
- }
-
- function moment_moment__createInZone () {
- return local__createLocal.apply(null, arguments).parseZone();
- }
-
- function preParsePostFormat (string) {
- return string;
- }
-
- var prototype__proto = Locale.prototype;
-
- prototype__proto.calendar = locale_calendar__calendar;
- prototype__proto.longDateFormat = longDateFormat;
- prototype__proto.invalidDate = invalidDate;
- prototype__proto.ordinal = ordinal;
- prototype__proto.preparse = preParsePostFormat;
- prototype__proto.postformat = preParsePostFormat;
- prototype__proto.relativeTime = relative__relativeTime;
- prototype__proto.pastFuture = pastFuture;
- prototype__proto.set = locale_set__set;
-
- // Month
- prototype__proto.months = localeMonths;
- prototype__proto.monthsShort = localeMonthsShort;
- prototype__proto.monthsParse = localeMonthsParse;
- prototype__proto.monthsRegex = monthsRegex;
- prototype__proto.monthsShortRegex = monthsShortRegex;
-
- // Week
- prototype__proto.week = localeWeek;
- prototype__proto.firstDayOfYear = localeFirstDayOfYear;
- prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;
-
- // Day of Week
- prototype__proto.weekdays = localeWeekdays;
- prototype__proto.weekdaysMin = localeWeekdaysMin;
- prototype__proto.weekdaysShort = localeWeekdaysShort;
- prototype__proto.weekdaysParse = localeWeekdaysParse;
-
- prototype__proto.weekdaysRegex = weekdaysRegex;
- prototype__proto.weekdaysShortRegex = weekdaysShortRegex;
- prototype__proto.weekdaysMinRegex = weekdaysMinRegex;
-
- // Hours
- prototype__proto.isPM = localeIsPM;
- prototype__proto.meridiem = localeMeridiem;
-
- function lists__get (format, index, field, setter) {
- var locale = locale_locales__getLocale();
- var utc = create_utc__createUTC().set(setter, index);
- return locale[field](utc, format);
- }
-
- function listMonthsImpl (format, index, field) {
- if (typeof format === 'number') {
- index = format;
- format = undefined;
- }
-
- format = format || '';
-
- if (index != null) {
- return lists__get(format, index, field, 'month');
- }
-
- var i;
- var out = [];
- for (i = 0; i < 12; i++) {
- out[i] = lists__get(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 (typeof format === 'number') {
- index = format;
- format = undefined;
- }
-
- format = format || '';
- } else {
- format = localeSorted;
- index = format;
- localeSorted = false;
-
- if (typeof format === 'number') {
- index = format;
- format = undefined;
- }
-
- format = format || '';
- }
-
- var locale = locale_locales__getLocale(),
- shift = localeSorted ? locale._week.dow : 0;
-
- if (index != null) {
- return lists__get(format, (index + shift) % 7, field, 'day');
- }
-
- var i;
- var out = [];
- for (i = 0; i < 7; i++) {
- out[i] = lists__get(format, (i + shift) % 7, field, 'day');
- }
- return out;
- }
-
- function lists__listMonths (format, index) {
- return listMonthsImpl(format, index, 'months');
- }
-
- function lists__listMonthsShort (format, index) {
- return listMonthsImpl(format, index, 'monthsShort');
- }
-
- function lists__listWeekdays (localeSorted, format, index) {
- return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
- }
-
- function lists__listWeekdaysShort (localeSorted, format, index) {
- return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
- }
-
- function lists__listWeekdaysMin (localeSorted, format, index) {
- return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
- }
-
- locale_locales__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
- utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale);
- utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale);
-
- var mathAbs = Math.abs;
-
- function duration_abs__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 duration_add_subtract__addSubtract (duration, input, value, direction) {
- var other = create__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 duration_add_subtract__add (input, value) {
- return duration_add_subtract__addSubtract(this, input, value, 1);
- }
-
- // supports only 2.0-style subtract(1, 's') or subtract(duration)
- function duration_add_subtract__subtract (input, value) {
- return duration_add_subtract__addSubtract(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 duration_as__valueOf () {
- 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 duration_get__get (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 duration_get__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 duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) {
- var duration = create__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 duration_humanize__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 duration_humanize__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 = duration_humanize__relativeTime(this, !withSuffix, locale);
-
- if (withSuffix) {
- output = locale.pastFuture(+this, output);
- }
-
- return locale.postformat(output);
- }
-
- var iso_string__abs = Math.abs;
-
- function iso_string__toISOString() {
- // 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 = iso_string__abs(this._milliseconds) / 1000;
- var days = iso_string__abs(this._days);
- var months = iso_string__abs(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 duration_prototype__proto = Duration.prototype;
-
- duration_prototype__proto.abs = duration_abs__abs;
- duration_prototype__proto.add = duration_add_subtract__add;
- duration_prototype__proto.subtract = duration_add_subtract__subtract;
- duration_prototype__proto.as = as;
- duration_prototype__proto.asMilliseconds = asMilliseconds;
- duration_prototype__proto.asSeconds = asSeconds;
- duration_prototype__proto.asMinutes = asMinutes;
- duration_prototype__proto.asHours = asHours;
- duration_prototype__proto.asDays = asDays;
- duration_prototype__proto.asWeeks = asWeeks;
- duration_prototype__proto.asMonths = asMonths;
- duration_prototype__proto.asYears = asYears;
- duration_prototype__proto.valueOf = duration_as__valueOf;
- duration_prototype__proto._bubble = bubble;
- duration_prototype__proto.get = duration_get__get;
- duration_prototype__proto.milliseconds = milliseconds;
- duration_prototype__proto.seconds = seconds;
- duration_prototype__proto.minutes = minutes;
- duration_prototype__proto.hours = hours;
- duration_prototype__proto.days = days;
- duration_prototype__proto.weeks = weeks;
- duration_prototype__proto.months = duration_get__months;
- duration_prototype__proto.years = years;
- duration_prototype__proto.humanize = humanize;
- duration_prototype__proto.toISOString = iso_string__toISOString;
- duration_prototype__proto.toString = iso_string__toISOString;
- duration_prototype__proto.toJSON = iso_string__toISOString;
- duration_prototype__proto.locale = locale;
- duration_prototype__proto.localeData = localeData;
-
- // Deprecations
- duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString);
- duration_prototype__proto.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
-
- ;
-
-
- utils_hooks__hooks.version = '2.14.1';
-
- setHookCallback(local__createLocal);
-
- utils_hooks__hooks.fn = momentPrototype;
- utils_hooks__hooks.min = min;
- utils_hooks__hooks.max = max;
- utils_hooks__hooks.now = now;
- utils_hooks__hooks.utc = create_utc__createUTC;
- utils_hooks__hooks.unix = moment_moment__createUnix;
- utils_hooks__hooks.months = lists__listMonths;
- utils_hooks__hooks.isDate = isDate;
- utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale;
- utils_hooks__hooks.invalid = valid__createInvalid;
- utils_hooks__hooks.duration = create__createDuration;
- utils_hooks__hooks.isMoment = isMoment;
- utils_hooks__hooks.weekdays = lists__listWeekdays;
- utils_hooks__hooks.parseZone = moment_moment__createInZone;
- utils_hooks__hooks.localeData = locale_locales__getLocale;
- utils_hooks__hooks.isDuration = isDuration;
- utils_hooks__hooks.monthsShort = lists__listMonthsShort;
- utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin;
- utils_hooks__hooks.defineLocale = defineLocale;
- utils_hooks__hooks.updateLocale = updateLocale;
- utils_hooks__hooks.locales = locale_locales__listLocales;
- utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort;
- utils_hooks__hooks.normalizeUnits = normalizeUnits;
- utils_hooks__hooks.relativeTimeRounding = duration_humanize__getSetRelativeTimeRounding;
- utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;
- utils_hooks__hooks.calendarFormat = getCalendarFormat;
- utils_hooks__hooks.prototype = momentPrototype;
-
- var moment__default = utils_hooks__hooks;
-
-
- var af = moment__default.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.
- }
- });
-
-
- var ar_ma = moment__default.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.
- }
- });
-
-
- var ar_sa__symbolMap = {
- '1': '١',
- '2': '٢',
- '3': '٣',
- '4': '٤',
- '5': '٥',
- '6': '٦',
- '7': '٧',
- '8': '٨',
- '9': '٩',
- '0': '٠'
- }, ar_sa__numberMap = {
- '١': '1',
- '٢': '2',
- '٣': '3',
- '٤': '4',
- '٥': '5',
- '٦': '6',
- '٧': '7',
- '٨': '8',
- '٩': '9',
- '٠': '0'
- };
-
- var ar_sa = moment__default.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 ar_sa__numberMap[match];
- }).replace(/،/g, ',');
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return ar_sa__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.
- }
- });
-
-
- var ar_tn = moment__default.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.
- }
- });
-
-
- var ar__symbolMap = {
- '1': '١',
- '2': '٢',
- '3': '٣',
- '4': '٤',
- '5': '٥',
- '6': '٦',
- '7': '٧',
- '8': '٨',
- '9': '٩',
- '0': '٠'
- }, ar__numberMap = {
- '١': '1',
- '٢': '2',
- '٣': '3',
- '٤': '4',
- '٥': '5',
- '٦': '6',
- '٧': '7',
- '٨': '8',
- '٩': '9',
- '٠': '0'
- }, 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;
- }, 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 عام']
- }, 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);
- };
- }, ar__months = [
- 'كانون الثاني يناير',
- 'شباط فبراير',
- 'آذار مارس',
- 'نيسان أبريل',
- 'أيار مايو',
- 'حزيران يونيو',
- 'تموز يوليو',
- 'آب أغسطس',
- 'أيلول سبتمبر',
- 'تشرين الأول أكتوبر',
- 'تشرين الثاني نوفمبر',
- 'كانون الأول ديسمبر'
- ];
-
- var ar = moment__default.defineLocale('ar', {
- months : ar__months,
- monthsShort : ar__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 ar__numberMap[match];
- }).replace(/،/g, ',');
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return ar__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.
- }
- });
-
-
- var az__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__default.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 + (az__suffixes[a] || az__suffixes[b] || az__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.
- }
- });
-
-
- function be__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 be__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 + ' ' + be__plural(format[key], +number);
- }
- }
-
- var be = moment__default.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 : be__relativeTimeWithPlural,
- mm : be__relativeTimeWithPlural,
- h : be__relativeTimeWithPlural,
- hh : be__relativeTimeWithPlural,
- d : 'дзень',
- dd : be__relativeTimeWithPlural,
- M : 'месяц',
- MM : be__relativeTimeWithPlural,
- y : 'год',
- yy : be__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.
- }
- });
-
-
- var bg = moment__default.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.
- }
- });
-
-
- var bn__symbolMap = {
- '1': '১',
- '2': '২',
- '3': '৩',
- '4': '৪',
- '5': '৫',
- '6': '৬',
- '7': '৭',
- '8': '৮',
- '9': '৯',
- '0': '০'
- },
- bn__numberMap = {
- '১': '1',
- '২': '2',
- '৩': '3',
- '৪': '4',
- '৫': '5',
- '৬': '6',
- '৭': '7',
- '৮': '8',
- '৯': '9',
- '০': '0'
- };
-
- var bn = moment__default.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 bn__numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return bn__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.
- }
- });
-
-
- var bo__symbolMap = {
- '1': '༡',
- '2': '༢',
- '3': '༣',
- '4': '༤',
- '5': '༥',
- '6': '༦',
- '7': '༧',
- '8': '༨',
- '9': '༩',
- '0': '༠'
- },
- bo__numberMap = {
- '༡': '1',
- '༢': '2',
- '༣': '3',
- '༤': '4',
- '༥': '5',
- '༦': '6',
- '༧': '7',
- '༨': '8',
- '༩': '9',
- '༠': '0'
- };
-
- var bo = moment__default.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 bo__numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return bo__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.
- }
- });
-
-
- 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__default.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.
- }
- });
-
-
- function bs__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__default.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 : bs__translate,
- mm : bs__translate,
- h : bs__translate,
- hh : bs__translate,
- d : 'dan',
- dd : bs__translate,
- M : 'mjesec',
- MM : bs__translate,
- y : 'godinu',
- yy : bs__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.
- }
- });
-
-
- var ca = moment__default.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 : 'en %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.
- }
- });
-
-
- var cs__months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
- cs__monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
- function cs__plural(n) {
- return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
- }
- function cs__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 + (cs__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 + (cs__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 + (cs__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 + (cs__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 + (cs__plural(number) ? 'roky' : 'let');
- } else {
- return result + 'lety';
- }
- break;
- }
- }
-
- var cs = moment__default.defineLocale('cs', {
- months : cs__months,
- monthsShort : cs__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;
- }(cs__months, cs__monthsShort)),
- shortMonthsParse : (function (monthsShort) {
- var i, _shortMonthsParse = [];
- for (i = 0; i < 12; i++) {
- _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');
- }
- return _shortMonthsParse;
- }(cs__monthsShort)),
- longMonthsParse : (function (months) {
- var i, _longMonthsParse = [];
- for (i = 0; i < 12; i++) {
- _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');
- }
- return _longMonthsParse;
- }(cs__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 : cs__translate,
- m : cs__translate,
- mm : cs__translate,
- h : cs__translate,
- hh : cs__translate,
- d : cs__translate,
- dd : cs__translate,
- M : cs__translate,
- MM : cs__translate,
- y : cs__translate,
- yy : cs__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.
- }
- });
-
-
- var cv = moment__default.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.
- }
- });
-
-
- var cy = moment__default.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.
- }
- });
-
-
- var da = moment__default.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.
- }
- });
-
-
- function de_at__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_at = moment__default.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 : de_at__processRelativeTime,
- mm : '%d Minuten',
- h : de_at__processRelativeTime,
- hh : '%d Stunden',
- d : de_at__processRelativeTime,
- dd : de_at__processRelativeTime,
- M : de_at__processRelativeTime,
- MM : de_at__processRelativeTime,
- y : de_at__processRelativeTime,
- yy : de_at__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 de__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__default.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 : de__processRelativeTime,
- mm : '%d Minuten',
- h : de__processRelativeTime,
- hh : '%d Stunden',
- d : de__processRelativeTime,
- dd : de__processRelativeTime,
- M : de__processRelativeTime,
- MM : de__processRelativeTime,
- y : de__processRelativeTime,
- yy : de__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.
- }
- });
-
-
- var dv__months = [
- 'ޖެނުއަރީ',
- 'ފެބްރުއަރީ',
- 'މާރިޗު',
- 'އޭޕްރީލު',
- 'މޭ',
- 'ޖޫން',
- 'ޖުލައި',
- 'އޯގަސްޓު',
- 'ސެޕްޓެމްބަރު',
- 'އޮކްޓޯބަރު',
- 'ނޮވެމްބަރު',
- 'ޑިސެމްބަރު'
- ], dv__weekdays = [
- 'އާދިއްތަ',
- 'ހޯމަ',
- 'އަންގާރަ',
- 'ބުދަ',
- 'ބުރާސްފަތި',
- 'ހުކުރު',
- 'ހޮނިހިރު'
- ];
-
- var dv = moment__default.defineLocale('dv', {
- months : dv__months,
- monthsShort : dv__months,
- weekdays : dv__weekdays,
- weekdaysShort : dv__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.
- }
- });
-
-
- var el = moment__default.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.
- }
- });
-
-
- var en_au = moment__default.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.
- }
- });
-
-
- var en_ca = moment__default.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;
- }
- });
-
-
- var en_gb = moment__default.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.
- }
- });
-
-
- var en_ie = moment__default.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.
- }
- });
-
-
- var en_nz = moment__default.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.
- }
- });
-
-
- var eo = moment__default.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.
- }
- });
-
-
- var es_do__monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
- es_do__monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
-
- var es_do = moment__default.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 es_do__monthsShort[m.month()];
- } else {
- return es_do__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.
- }
- });
-
-
- var es__monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
- es__monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
-
- var es = moment__default.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 es__monthsShort[m.month()];
- } else {
- return es__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.
- }
- });
-
-
- function et__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__default.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 : et__processRelativeTime,
- m : et__processRelativeTime,
- mm : et__processRelativeTime,
- h : et__processRelativeTime,
- hh : et__processRelativeTime,
- d : et__processRelativeTime,
- dd : '%d päeva',
- M : et__processRelativeTime,
- MM : et__processRelativeTime,
- y : et__processRelativeTime,
- yy : et__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.
- }
- });
-
-
- var eu = moment__default.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.
- }
- });
-
-
- var fa__symbolMap = {
- '1': '۱',
- '2': '۲',
- '3': '۳',
- '4': '۴',
- '5': '۵',
- '6': '۶',
- '7': '۷',
- '8': '۸',
- '9': '۹',
- '0': '۰'
- }, fa__numberMap = {
- '۱': '1',
- '۲': '2',
- '۳': '3',
- '۴': '4',
- '۵': '5',
- '۶': '6',
- '۷': '7',
- '۸': '8',
- '۹': '9',
- '۰': '0'
- };
-
- var fa = moment__default.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 fa__numberMap[match];
- }).replace(/،/g, ',');
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return fa__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.
- }
- });
-
-
- var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
- numbersFuture = [
- 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
- numbersPast[7], numbersPast[8], numbersPast[9]
- ];
- function fi__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__default.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 : fi__translate,
- m : fi__translate,
- mm : fi__translate,
- h : fi__translate,
- hh : fi__translate,
- d : fi__translate,
- dd : fi__translate,
- M : fi__translate,
- MM : fi__translate,
- y : fi__translate,
- yy : fi__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.
- }
- });
-
-
- var fo = moment__default.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.
- }
- });
-
-
- var fr_ca = moment__default.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');
- }
- });
-
-
- var fr_ch = moment__default.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.
- }
- });
-
-
- var fr = moment__default.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.
- }
- });
-
-
- var fy__monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),
- fy__monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
-
- var fy = moment__default.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 fy__monthsShortWithoutDots[m.month()];
- } else {
- return fy__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.
- }
- });
-
-
- var gd__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 gd__monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
-
- var gd__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__default.defineLocale('gd', {
- months : gd__months,
- monthsShort : gd__monthsShort,
- monthsParseExact : true,
- weekdays : gd__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.
- }
- });
-
-
- var gl = moment__default.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 MMMM YYYY',
- LLL : 'D MMMM YYYY H:mm',
- LLLL : 'dddd D MMMM 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 === 'uns segundos') {
- return 'nuns segundos';
- }
- 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 : 7 // The week that contains Jan 1st is the first week of the year.
- }
- });
-
-
- var he = moment__default.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 'בערב';
- }
- }
- });
-
-
- var hi__symbolMap = {
- '1': '१',
- '2': '२',
- '3': '३',
- '4': '४',
- '5': '५',
- '6': '६',
- '7': '७',
- '8': '८',
- '9': '९',
- '0': '०'
- },
- hi__numberMap = {
- '१': '1',
- '२': '2',
- '३': '3',
- '४': '4',
- '५': '5',
- '६': '6',
- '७': '7',
- '८': '8',
- '९': '9',
- '०': '0'
- };
-
- var hi = moment__default.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 hi__numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return hi__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.
- }
- });
-
-
- function hr__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__default.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 : hr__translate,
- mm : hr__translate,
- h : hr__translate,
- hh : hr__translate,
- d : 'dan',
- dd : hr__translate,
- M : 'mjesec',
- MM : hr__translate,
- y : 'godinu',
- yy : hr__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.
- }
- });
-
-
- var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
- function hu__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__default.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 : hu__translate,
- m : hu__translate,
- mm : hu__translate,
- h : hu__translate,
- hh : hu__translate,
- d : hu__translate,
- dd : hu__translate,
- M : hu__translate,
- MM : hu__translate,
- y : hu__translate,
- yy : hu__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.
- }
- });
-
-
- var hy_am = moment__default.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.
- }
- });
-
-
- var id = moment__default.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.
- }
- });
-
-
- function is__plural(n) {
- if (n % 100 === 11) {
- return true;
- } else if (n % 10 === 1) {
- return false;
- }
- return true;
- }
- function is__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 (is__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 (is__plural(number)) {
- return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
- }
- return result + 'klukkustund';
- case 'd':
- if (withoutSuffix) {
- return 'dagur';
- }
- return isFuture ? 'dag' : 'degi';
- case 'dd':
- if (is__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 (is__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 (is__plural(number)) {
- return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
- }
- return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
- }
- }
-
- var is = moment__default.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 : is__translate,
- m : is__translate,
- mm : is__translate,
- h : 'klukkustund',
- hh : is__translate,
- d : is__translate,
- dd : is__translate,
- M : is__translate,
- MM : is__translate,
- y : is__translate,
- yy : is__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.
- }
- });
-
-
- var it = moment__default.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.
- }
- });
-
-
- var ja = moment__default.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年'
- }
- });
-
-
- var jv = moment__default.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.
- }
- });
-
-
- var ka = moment__default.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
- }
- });
-
-
- var kk__suffixes = {
- 0: '-ші',
- 1: '-ші',
- 2: '-ші',
- 3: '-ші',
- 4: '-ші',
- 5: '-ші',
- 6: '-шы',
- 7: '-ші',
- 8: '-ші',
- 9: '-шы',
- 10: '-шы',
- 20: '-шы',
- 30: '-шы',
- 40: '-шы',
- 50: '-ші',
- 60: '-шы',
- 70: '-ші',
- 80: '-ші',
- 90: '-шы',
- 100: '-ші'
- };
-
- var kk = moment__default.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 + (kk__suffixes[number] || kk__suffixes[a] || kk__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.
- }
- });
-
-
- var km = moment__default.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.
- }
- });
-
-
- var ko = moment__default.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 ? '오전' : '오후';
- }
- });
-
-
-
- var ky__suffixes = {
- 0: '-чү',
- 1: '-чи',
- 2: '-чи',
- 3: '-чү',
- 4: '-чү',
- 5: '-чи',
- 6: '-чы',
- 7: '-чи',
- 8: '-чи',
- 9: '-чу',
- 10: '-чу',
- 20: '-чы',
- 30: '-чу',
- 40: '-чы',
- 50: '-чү',
- 60: '-чы',
- 70: '-чи',
- 80: '-чи',
- 90: '-чу',
- 100: '-чү'
- };
-
- var ky = moment__default.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 + (ky__suffixes[number] || ky__suffixes[a] || ky__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.
- }
- });
-
-
- function lb__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__default.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 : lb__processRelativeTime,
- mm : '%d Minutten',
- h : lb__processRelativeTime,
- hh : '%d Stonnen',
- d : lb__processRelativeTime,
- dd : '%d Deeg',
- M : lb__processRelativeTime,
- MM : '%d Méint',
- y : lb__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.
- }
- });
-
-
- var lo = moment__default.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;
- }
- });
-
-
- var lt__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 lt__units[key].split('_');
- }
- function lt__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__default.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 : lt__translate,
- h : translateSingular,
- hh : lt__translate,
- d : translateSingular,
- dd : lt__translate,
- M : translateSingular,
- MM : lt__translate,
- y : translateSingular,
- yy : lt__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.
- }
- });
-
-
- var lv__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 lv__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 lv__relativeTimeWithPlural(number, withoutSuffix, key) {
- return number + ' ' + lv__format(lv__units[key], number, withoutSuffix);
- }
- function relativeTimeWithSingular(number, withoutSuffix, key) {
- return lv__format(lv__units[key], number, withoutSuffix);
- }
- function relativeSeconds(number, withoutSuffix) {
- return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
- }
-
- var lv = moment__default.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 : lv__relativeTimeWithPlural,
- h : relativeTimeWithSingular,
- hh : lv__relativeTimeWithPlural,
- d : relativeTimeWithSingular,
- dd : lv__relativeTimeWithPlural,
- M : relativeTimeWithSingular,
- MM : lv__relativeTimeWithPlural,
- y : relativeTimeWithSingular,
- yy : lv__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.
- }
- });
-
-
- var me__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 = me__translator.words[key];
- if (key.length === 1) {
- return withoutSuffix ? wordKey[0] : wordKey[1];
- } else {
- return number + ' ' + me__translator.correctGrammaticalCase(number, wordKey);
- }
- }
- };
-
- var me = moment__default.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 : me__translator.translate,
- mm : me__translator.translate,
- h : me__translator.translate,
- hh : me__translator.translate,
- d : 'dan',
- dd : me__translator.translate,
- M : 'mjesec',
- MM : me__translator.translate,
- y : 'godinu',
- yy : me__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.
- }
- });
-
-
- var mk = moment__default.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.
- }
- });
-
-
- var ml = moment__default.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 'രാത്രി';
- }
- }
- });
-
-
- var mr__symbolMap = {
- '1': '१',
- '2': '२',
- '3': '३',
- '4': '४',
- '5': '५',
- '6': '६',
- '7': '७',
- '8': '८',
- '9': '९',
- '0': '०'
- },
- mr__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__default.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 mr__numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return mr__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.
- }
- });
-
-
- var ms_my = moment__default.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.
- }
- });
-
-
- var locale_ms = moment__default.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.
- }
- });
-
-
- var my__symbolMap = {
- '1': '၁',
- '2': '၂',
- '3': '၃',
- '4': '၄',
- '5': '၅',
- '6': '၆',
- '7': '၇',
- '8': '၈',
- '9': '၉',
- '0': '၀'
- }, my__numberMap = {
- '၁': '1',
- '၂': '2',
- '၃': '3',
- '၄': '4',
- '၅': '5',
- '၆': '6',
- '၇': '7',
- '၈': '8',
- '၉': '9',
- '၀': '0'
- };
-
- var my = moment__default.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 my__numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return my__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.
- }
- });
-
-
- var nb = moment__default.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.
- }
- });
-
-
- var ne__symbolMap = {
- '1': '१',
- '2': '२',
- '3': '३',
- '4': '४',
- '5': '५',
- '6': '६',
- '7': '७',
- '8': '८',
- '9': '९',
- '0': '०'
- },
- ne__numberMap = {
- '१': '1',
- '२': '2',
- '३': '3',
- '४': '4',
- '५': '5',
- '६': '6',
- '७': '7',
- '८': '8',
- '९': '9',
- '०': '0'
- };
-
- var ne = moment__default.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 ne__numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return ne__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.
- }
- });
-
-
- var nl__monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
- nl__monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
-
- var nl = moment__default.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 nl__monthsShortWithoutDots[m.month()];
- } else {
- return nl__monthsShortWithDots[m.month()];
- }
- },
- monthsParseExact : true,
- 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.
- }
- });
-
-
- var nn = moment__default.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.
- }
- });
-
-
- var pa_in__symbolMap = {
- '1': '੧',
- '2': '੨',
- '3': '੩',
- '4': '੪',
- '5': '੫',
- '6': '੬',
- '7': '੭',
- '8': '੮',
- '9': '੯',
- '0': '੦'
- },
- pa_in__numberMap = {
- '੧': '1',
- '੨': '2',
- '੩': '3',
- '੪': '4',
- '੫': '5',
- '੬': '6',
- '੭': '7',
- '੮': '8',
- '੯': '9',
- '੦': '0'
- };
-
- var pa_in = moment__default.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 pa_in__numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return pa_in__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.
- }
- });
-
-
- var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
- monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
- function pl__plural(n) {
- return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
- }
- function pl__translate(number, withoutSuffix, key) {
- var result = number + ' ';
- switch (key) {
- case 'm':
- return withoutSuffix ? 'minuta' : 'minutę';
- case 'mm':
- return result + (pl__plural(number) ? 'minuty' : 'minut');
- case 'h':
- return withoutSuffix ? 'godzina' : 'godzinę';
- case 'hh':
- return result + (pl__plural(number) ? 'godziny' : 'godzin');
- case 'MM':
- return result + (pl__plural(number) ? 'miesiące' : 'miesięcy');
- case 'yy':
- return result + (pl__plural(number) ? 'lata' : 'lat');
- }
- }
-
- var pl = moment__default.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 : 'nie_pon_wt_śr_czw_pt_sb'.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 : pl__translate,
- mm : pl__translate,
- h : pl__translate,
- hh : pl__translate,
- d : '1 dzień',
- dd : '%d dni',
- M : 'miesiąc',
- MM : pl__translate,
- y : 'rok',
- yy : pl__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.
- }
- });
-
-
- var pt_br = moment__default.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º'
- });
-
-
- var pt = moment__default.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.
- }
- });
-
-
- function ro__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__default.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 : ro__relativeTimeWithPlural,
- h : 'o oră',
- hh : ro__relativeTimeWithPlural,
- d : 'o zi',
- dd : ro__relativeTimeWithPlural,
- M : 'o lună',
- MM : ro__relativeTimeWithPlural,
- y : 'un an',
- yy : ro__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.
- }
- });
-
-
- function ru__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 ru__relativeTimeWithPlural(number, withoutSuffix, key) {
- var format = {
- 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
- 'hh': 'час_часа_часов',
- 'dd': 'день_дня_дней',
- 'MM': 'месяц_месяца_месяцев',
- 'yy': 'год_года_лет'
- };
- if (key === 'm') {
- return withoutSuffix ? 'минута' : 'минуту';
- }
- else {
- return number + ' ' + ru__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__default.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 : ru__relativeTimeWithPlural,
- mm : ru__relativeTimeWithPlural,
- h : 'час',
- hh : ru__relativeTimeWithPlural,
- d : 'день',
- dd : ru__relativeTimeWithPlural,
- M : 'месяц',
- MM : ru__relativeTimeWithPlural,
- y : 'год',
- yy : ru__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.
- }
- });
-
-
-
- var se = moment__default.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.
- }
- });
-
-
- /*jshint -W100*/
- var si = moment__default.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 ? 'පෙ.ව.' : 'පෙර වරු';
- }
- }
- });
-
-
- var sk__months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),
- sk__monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
- function sk__plural(n) {
- return (n > 1) && (n < 5);
- }
- function sk__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 + (sk__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 + (sk__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 + (sk__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 + (sk__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 + (sk__plural(number) ? 'roky' : 'rokov');
- } else {
- return result + 'rokmi';
- }
- break;
- }
- }
-
- var sk = moment__default.defineLocale('sk', {
- months : sk__months,
- monthsShort : sk__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 : sk__translate,
- m : sk__translate,
- mm : sk__translate,
- h : sk__translate,
- hh : sk__translate,
- d : sk__translate,
- dd : sk__translate,
- M : sk__translate,
- MM : sk__translate,
- y : sk__translate,
- yy : sk__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.
- }
- });
-
-
- function sl__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__default.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 : sl__processRelativeTime,
- m : sl__processRelativeTime,
- mm : sl__processRelativeTime,
- h : sl__processRelativeTime,
- hh : sl__processRelativeTime,
- d : sl__processRelativeTime,
- dd : sl__processRelativeTime,
- M : sl__processRelativeTime,
- MM : sl__processRelativeTime,
- y : sl__processRelativeTime,
- yy : sl__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.
- }
- });
-
-
- var sq = moment__default.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.
- }
- });
-
-
- var sr_cyrl__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 = sr_cyrl__translator.words[key];
- if (key.length === 1) {
- return withoutSuffix ? wordKey[0] : wordKey[1];
- } else {
- return number + ' ' + sr_cyrl__translator.correctGrammaticalCase(number, wordKey);
- }
- }
- };
-
- var sr_cyrl = moment__default.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 : sr_cyrl__translator.translate,
- mm : sr_cyrl__translator.translate,
- h : sr_cyrl__translator.translate,
- hh : sr_cyrl__translator.translate,
- d : 'дан',
- dd : sr_cyrl__translator.translate,
- M : 'месец',
- MM : sr_cyrl__translator.translate,
- y : 'годину',
- yy : sr_cyrl__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.
- }
- });
-
-
- var sr__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 = sr__translator.words[key];
- if (key.length === 1) {
- return withoutSuffix ? wordKey[0] : wordKey[1];
- } else {
- return number + ' ' + sr__translator.correctGrammaticalCase(number, wordKey);
- }
- }
- };
-
- var sr = moment__default.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 : sr__translator.translate,
- mm : sr__translator.translate,
- h : sr__translator.translate,
- hh : sr__translator.translate,
- d : 'dan',
- dd : sr__translator.translate,
- M : 'mesec',
- MM : sr__translator.translate,
- y : 'godinu',
- yy : sr__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.
- }
- });
-
-
-
- var ss = moment__default.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.
- }
- });
-
-
- var sv = moment__default.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.
- }
- });
-
-
- var sw = moment__default.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.
- }
- });
-
-
- var ta__symbolMap = {
- '1': '௧',
- '2': '௨',
- '3': '௩',
- '4': '௪',
- '5': '௫',
- '6': '௬',
- '7': '௭',
- '8': '௮',
- '9': '௯',
- '0': '௦'
- }, ta__numberMap = {
- '௧': '1',
- '௨': '2',
- '௩': '3',
- '௪': '4',
- '௫': '5',
- '௬': '6',
- '௭': '7',
- '௮': '8',
- '௯': '9',
- '௦': '0'
- };
-
- var ta = moment__default.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 ta__numberMap[match];
- });
- },
- postformat: function (string) {
- return string.replace(/\d/g, function (match) {
- return ta__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.
- }
- });
-
-
- var te = moment__default.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.
- }
- });
-
-
- var th = moment__default.defineLocale('th', {
- months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
- monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
- monthsParseExact: true,
- weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
- weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
- weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
- weekdaysParseExact : true,
- longDateFormat : {
- LT : 'H นาฬิกา m นาที',
- LTS : 'H นาฬิกา m นาที s วินาที',
- L : 'YYYY/MM/DD',
- LL : 'D MMMM YYYY',
- LLL : 'D MMMM YYYY เวลา H นาฬิกา m นาที',
- LLLL : 'วันddddที่ D MMMM YYYY เวลา H นาฬิกา m นาที'
- },
- 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 ปี'
- }
- });
-
-
- var tl_ph = moment__default.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: '[Ngayon sa] LT',
- nextDay: '[Bukas sa] LT',
- nextWeek: 'dddd [sa] LT',
- lastDay: '[Kahapon sa] LT',
- lastWeek: 'dddd [huling linggo] LT',
- 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.
- }
- });
-
-
- 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 tlh__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__default.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 : tlh__translate,
- h : 'wa’ rep',
- hh : tlh__translate,
- d : 'wa’ jaj',
- dd : tlh__translate,
- M : 'wa’ jar',
- MM : tlh__translate,
- y : 'wa’ DIS',
- yy : tlh__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.
- }
- });
-
-
- var tr__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__default.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 + (tr__suffixes[a] || tr__suffixes[b] || tr__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.
- }
- });
-
-
-
- // 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__default.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 : tzl__processRelativeTime,
- m : tzl__processRelativeTime,
- mm : tzl__processRelativeTime,
- h : tzl__processRelativeTime,
- hh : tzl__processRelativeTime,
- d : tzl__processRelativeTime,
- dd : tzl__processRelativeTime,
- M : tzl__processRelativeTime,
- MM : tzl__processRelativeTime,
- y : tzl__processRelativeTime,
- yy : tzl__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 tzl__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]);
- }
-
-
- var tzm_latn = moment__default.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.
- }
- });
-
-
- var tzm = moment__default.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.
- }
- });
-
-
- function uk__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 uk__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 + ' ' + uk__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__default.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 : uk__relativeTimeWithPlural,
- mm : uk__relativeTimeWithPlural,
- h : 'годину',
- hh : uk__relativeTimeWithPlural,
- d : 'день',
- dd : uk__relativeTimeWithPlural,
- M : 'місяць',
- MM : uk__relativeTimeWithPlural,
- y : 'рік',
- yy : uk__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.
- }
- });
-
-
- var uz = moment__default.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.
- }
- });
-
-
- var vi = moment__default.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.
- }
- });
-
-
- var x_pseudo = moment__default.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.
- }
- });
-
-
- var zh_cn = moment__default.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__default().startOf('week');
- prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]';
- return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
- },
- lastWeek : function () {
- var startOfWeek, prefix;
- startOfWeek = moment__default().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.
- }
- });
-
-
- var zh_tw = moment__default.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 年'
- }
- });
-
- var moment_with_locales = moment__default;
- moment_with_locales.locale('en');
-
- return moment_with_locales;
-
-}));
diff --git a/public/views/407.html b/public/views/407.html
index 67105dcf5e5..ea5ef105d86 100644
--- a/public/views/407.html
+++ b/public/views/407.html
@@ -6,9 +6,10 @@
Grafana
+
-
-
+
+
diff --git a/public/views/500.html b/public/views/500.html
index 5b0150a4654..e0e88803a56 100644
--- a/public/views/500.html
+++ b/public/views/500.html
@@ -5,11 +5,14 @@
Grafana - Error
-
-
-
+
+
+
+
+
+