blazer 2.6.5 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/LICENSE.txt +1 -1
- data/README.md +13 -28
- data/app/assets/javascripts/blazer/ace/ace.js +7235 -8906
- data/app/assets/javascripts/blazer/ace/ext-language_tools.js +762 -774
- data/app/assets/javascripts/blazer/ace/mode-sql.js +177 -72
- data/app/assets/javascripts/blazer/ace/snippets/sql.js +5 -29
- data/app/assets/javascripts/blazer/ace/snippets/text.js +1 -6
- data/app/assets/javascripts/blazer/ace/theme-twilight.js +8 -106
- data/app/assets/javascripts/blazer/application.js +9 -6
- data/app/assets/javascripts/blazer/chart.umd.js +13 -0
- data/app/assets/javascripts/blazer/chartjs-adapter-date-fns.bundle.js +6322 -0
- data/app/assets/javascripts/blazer/chartkick.js +1020 -914
- data/app/assets/javascripts/blazer/highlight.min.js +466 -3
- data/app/assets/javascripts/blazer/mapkick.bundle.js +1029 -0
- data/app/assets/javascripts/blazer/moment-timezone-with-data.js +39 -38
- data/app/assets/javascripts/blazer/moment.js +105 -88
- data/app/assets/javascripts/blazer/queries.js +10 -1
- data/app/assets/javascripts/blazer/rails-ujs.js +746 -0
- data/app/assets/javascripts/blazer/vue.global.prod.js +1 -0
- data/app/assets/stylesheets/blazer/bootstrap.css +1 -1
- data/app/assets/stylesheets/blazer/selectize.css +1 -1
- data/app/controllers/blazer/base_controller.rb +85 -84
- data/app/controllers/blazer/checks_controller.rb +6 -6
- data/app/controllers/blazer/dashboards_controller.rb +24 -24
- data/app/controllers/blazer/queries_controller.rb +208 -186
- data/app/controllers/blazer/uploads_controller.rb +49 -49
- data/app/helpers/blazer/base_helper.rb +0 -4
- data/app/models/blazer/query.rb +1 -12
- data/app/views/blazer/checks/index.html.erb +1 -1
- data/app/views/blazer/dashboards/_form.html.erb +11 -5
- data/app/views/blazer/queries/_form.html.erb +19 -14
- data/app/views/blazer/queries/docs.html.erb +11 -1
- data/app/views/blazer/queries/home.html.erb +9 -6
- data/app/views/blazer/queries/run.html.erb +17 -32
- data/app/views/blazer/queries/show.html.erb +12 -20
- data/app/views/layouts/blazer/application.html.erb +1 -5
- data/lib/blazer/adapters/sql_adapter.rb +1 -1
- data/lib/blazer/adapters.rb +17 -0
- data/lib/blazer/anomaly_detectors.rb +22 -0
- data/lib/blazer/data_source.rb +29 -40
- data/lib/blazer/engine.rb +11 -9
- data/lib/blazer/forecasters.rb +7 -0
- data/lib/blazer/result.rb +13 -71
- data/lib/blazer/result_cache.rb +71 -0
- data/lib/blazer/run_statement.rb +1 -1
- data/lib/blazer/run_statement_job.rb +2 -2
- data/lib/blazer/statement.rb +3 -1
- data/lib/blazer/version.rb +1 -1
- data/lib/blazer.rb +51 -53
- data/licenses/LICENSE-chart.js.txt +1 -1
- data/licenses/LICENSE-chartjs-adapter-date-fns.txt +9 -0
- data/licenses/LICENSE-chartkick.js.txt +1 -1
- data/licenses/LICENSE-date-fns.txt +21 -0
- data/licenses/LICENSE-kurkle-color.txt +9 -0
- data/licenses/LICENSE-mapkick-bundle.txt +1029 -0
- data/licenses/{LICENSE-jquery-ujs.txt → LICENSE-rails-ujs.txt} +1 -1
- data/licenses/LICENSE-vue.txt +1 -1
- metadata +26 -18
- data/app/assets/javascripts/blazer/Chart.js +0 -16172
- data/app/assets/javascripts/blazer/jquery-ujs.js +0 -555
- data/app/assets/javascripts/blazer/vue.js +0 -12014
- data/lib/blazer/adapters/mongodb_adapter.rb +0 -43
- data/lib/blazer/detect_anomalies.R +0 -19
@@ -1,5 +1,5 @@
|
|
1
1
|
//! moment.js
|
2
|
-
//! version : 2.
|
2
|
+
//! version : 2.29.4
|
3
3
|
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
|
4
4
|
//! license : MIT
|
5
5
|
//! momentjs.com
|
@@ -76,8 +76,9 @@
|
|
76
76
|
|
77
77
|
function map(arr, fn) {
|
78
78
|
var res = [],
|
79
|
-
i
|
80
|
-
|
79
|
+
i,
|
80
|
+
arrLen = arr.length;
|
81
|
+
for (i = 0; i < arrLen; ++i) {
|
81
82
|
res.push(fn(arr[i], i));
|
82
83
|
}
|
83
84
|
return res;
|
@@ -206,7 +207,10 @@
|
|
206
207
|
updateInProgress = false;
|
207
208
|
|
208
209
|
function copyConfig(to, from) {
|
209
|
-
var i,
|
210
|
+
var i,
|
211
|
+
prop,
|
212
|
+
val,
|
213
|
+
momentPropertiesLen = momentProperties.length;
|
210
214
|
|
211
215
|
if (!isUndefined(from._isAMomentObject)) {
|
212
216
|
to._isAMomentObject = from._isAMomentObject;
|
@@ -239,8 +243,8 @@
|
|
239
243
|
to._locale = from._locale;
|
240
244
|
}
|
241
245
|
|
242
|
-
if (
|
243
|
-
for (i = 0; i <
|
246
|
+
if (momentPropertiesLen > 0) {
|
247
|
+
for (i = 0; i < momentPropertiesLen; i++) {
|
244
248
|
prop = momentProperties[i];
|
245
249
|
val = from[prop];
|
246
250
|
if (!isUndefined(val)) {
|
@@ -295,8 +299,9 @@
|
|
295
299
|
var args = [],
|
296
300
|
arg,
|
297
301
|
i,
|
298
|
-
key
|
299
|
-
|
302
|
+
key,
|
303
|
+
argLen = arguments.length;
|
304
|
+
for (i = 0; i < argLen; i++) {
|
300
305
|
arg = '';
|
301
306
|
if (typeof arguments[i] === 'object') {
|
302
307
|
arg += '\n[' + i + '] ';
|
@@ -446,7 +451,8 @@
|
|
446
451
|
);
|
447
452
|
}
|
448
453
|
|
449
|
-
var formattingTokens =
|
454
|
+
var formattingTokens =
|
455
|
+
/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
|
450
456
|
localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
|
451
457
|
formatFunctions = {},
|
452
458
|
formatTokenFunctions = {};
|
@@ -750,8 +756,9 @@
|
|
750
756
|
if (typeof units === 'object') {
|
751
757
|
units = normalizeObjectUnits(units);
|
752
758
|
var prioritized = getPrioritizedUnits(units),
|
753
|
-
i
|
754
|
-
|
759
|
+
i,
|
760
|
+
prioritizedLen = prioritized.length;
|
761
|
+
for (i = 0; i < prioritizedLen; i++) {
|
755
762
|
this[prioritized[i].unit](units[prioritized[i].unit]);
|
756
763
|
}
|
757
764
|
} else {
|
@@ -781,7 +788,8 @@
|
|
781
788
|
matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
|
782
789
|
// any word (or two) characters or numbers including two/three word month in arabic.
|
783
790
|
// includes scottish gaelic two word and hyphenated months
|
784
|
-
matchWord =
|
791
|
+
matchWord =
|
792
|
+
/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
|
785
793
|
regexes;
|
786
794
|
|
787
795
|
regexes = {};
|
@@ -807,15 +815,12 @@
|
|
807
815
|
return regexEscape(
|
808
816
|
s
|
809
817
|
.replace('\\', '')
|
810
|
-
.replace(
|
811
|
-
|
812
|
-
p1,
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
) {
|
817
|
-
return p1 || p2 || p3 || p4;
|
818
|
-
})
|
818
|
+
.replace(
|
819
|
+
/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
|
820
|
+
function (matched, p1, p2, p3, p4) {
|
821
|
+
return p1 || p2 || p3 || p4;
|
822
|
+
}
|
823
|
+
)
|
819
824
|
);
|
820
825
|
}
|
821
826
|
|
@@ -827,7 +832,8 @@
|
|
827
832
|
|
828
833
|
function addParseToken(token, callback) {
|
829
834
|
var i,
|
830
|
-
func = callback
|
835
|
+
func = callback,
|
836
|
+
tokenLen;
|
831
837
|
if (typeof token === 'string') {
|
832
838
|
token = [token];
|
833
839
|
}
|
@@ -836,7 +842,8 @@
|
|
836
842
|
array[callback] = toInt(input);
|
837
843
|
};
|
838
844
|
}
|
839
|
-
|
845
|
+
tokenLen = token.length;
|
846
|
+
for (i = 0; i < tokenLen; i++) {
|
840
847
|
tokens[token[i]] = func;
|
841
848
|
}
|
842
849
|
}
|
@@ -947,12 +954,12 @@
|
|
947
954
|
|
948
955
|
// LOCALES
|
949
956
|
|
950
|
-
var defaultLocaleMonths =
|
951
|
-
'
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
957
|
+
var defaultLocaleMonths =
|
958
|
+
'January_February_March_April_May_June_July_August_September_October_November_December'.split(
|
959
|
+
'_'
|
960
|
+
),
|
961
|
+
defaultLocaleMonthsShort =
|
962
|
+
'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
|
956
963
|
MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
|
957
964
|
defaultMonthsShortRegex = matchWord,
|
958
965
|
defaultMonthsRegex = matchWord;
|
@@ -1394,14 +1401,12 @@
|
|
1394
1401
|
addRegexToken('W', match1to2);
|
1395
1402
|
addRegexToken('WW', match1to2, match2);
|
1396
1403
|
|
1397
|
-
addWeekParseToken(
|
1398
|
-
|
1399
|
-
week,
|
1400
|
-
|
1401
|
-
|
1402
|
-
)
|
1403
|
-
week[token.substr(0, 1)] = toInt(input);
|
1404
|
-
});
|
1404
|
+
addWeekParseToken(
|
1405
|
+
['w', 'ww', 'W', 'WW'],
|
1406
|
+
function (input, week, config, token) {
|
1407
|
+
week[token.substr(0, 1)] = toInt(input);
|
1408
|
+
}
|
1409
|
+
);
|
1405
1410
|
|
1406
1411
|
// HELPERS
|
1407
1412
|
|
@@ -1526,9 +1531,8 @@
|
|
1526
1531
|
return ws.slice(n, 7).concat(ws.slice(0, n));
|
1527
1532
|
}
|
1528
1533
|
|
1529
|
-
var defaultLocaleWeekdays =
|
1530
|
-
'_'
|
1531
|
-
),
|
1534
|
+
var defaultLocaleWeekdays =
|
1535
|
+
'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
|
1532
1536
|
defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
|
1533
1537
|
defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
|
1534
1538
|
defaultWeekdaysRegex = matchWord,
|
@@ -2076,6 +2080,11 @@
|
|
2076
2080
|
return globalLocale;
|
2077
2081
|
}
|
2078
2082
|
|
2083
|
+
function isLocaleNameSane(name) {
|
2084
|
+
// Prevent names that look like filesystem paths, i.e contain '/' or '\'
|
2085
|
+
return name.match('^[^/\\\\]*$') != null;
|
2086
|
+
}
|
2087
|
+
|
2079
2088
|
function loadLocale(name) {
|
2080
2089
|
var oldLocale = null,
|
2081
2090
|
aliasedRequire;
|
@@ -2084,7 +2093,8 @@
|
|
2084
2093
|
locales[name] === undefined &&
|
2085
2094
|
typeof module !== 'undefined' &&
|
2086
2095
|
module &&
|
2087
|
-
module.exports
|
2096
|
+
module.exports &&
|
2097
|
+
isLocaleNameSane(name)
|
2088
2098
|
) {
|
2089
2099
|
try {
|
2090
2100
|
oldLocale = globalLocale._abbr;
|
@@ -2301,8 +2311,10 @@
|
|
2301
2311
|
|
2302
2312
|
// iso 8601 regex
|
2303
2313
|
// 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)
|
2304
|
-
var extendedIsoRegex =
|
2305
|
-
|
2314
|
+
var extendedIsoRegex =
|
2315
|
+
/^\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)?)?$/,
|
2316
|
+
basicIsoRegex =
|
2317
|
+
/^\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)?)?$/,
|
2306
2318
|
tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
|
2307
2319
|
isoDates = [
|
2308
2320
|
['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
|
@@ -2333,7 +2345,8 @@
|
|
2333
2345
|
],
|
2334
2346
|
aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
|
2335
2347
|
// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
|
2336
|
-
rfc2822 =
|
2348
|
+
rfc2822 =
|
2349
|
+
/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
|
2337
2350
|
obsOffsets = {
|
2338
2351
|
UT: 0,
|
2339
2352
|
GMT: 0,
|
@@ -2356,12 +2369,13 @@
|
|
2356
2369
|
allowTime,
|
2357
2370
|
dateFormat,
|
2358
2371
|
timeFormat,
|
2359
|
-
tzFormat
|
2372
|
+
tzFormat,
|
2373
|
+
isoDatesLen = isoDates.length,
|
2374
|
+
isoTimesLen = isoTimes.length;
|
2360
2375
|
|
2361
2376
|
if (match) {
|
2362
2377
|
getParsingFlags(config).iso = true;
|
2363
|
-
|
2364
|
-
for (i = 0, l = isoDates.length; i < l; i++) {
|
2378
|
+
for (i = 0, l = isoDatesLen; i < l; i++) {
|
2365
2379
|
if (isoDates[i][1].exec(match[1])) {
|
2366
2380
|
dateFormat = isoDates[i][0];
|
2367
2381
|
allowTime = isoDates[i][2] !== false;
|
@@ -2373,7 +2387,7 @@
|
|
2373
2387
|
return;
|
2374
2388
|
}
|
2375
2389
|
if (match[3]) {
|
2376
|
-
for (i = 0, l =
|
2390
|
+
for (i = 0, l = isoTimesLen; i < l; i++) {
|
2377
2391
|
if (isoTimes[i][1].exec(match[3])) {
|
2378
2392
|
// match[2] should be 'T' or space
|
2379
2393
|
timeFormat = (match[2] || ' ') + isoTimes[i][0];
|
@@ -2440,7 +2454,7 @@
|
|
2440
2454
|
function preprocessRFC2822(s) {
|
2441
2455
|
// Remove comments and folding whitespace and replace multiple-spaces with a single space
|
2442
2456
|
return s
|
2443
|
-
.replace(/\([^)]*\)|[\n\t]/g, ' ')
|
2457
|
+
.replace(/\([^()]*\)|[\n\t]/g, ' ')
|
2444
2458
|
.replace(/(\s\s+)/g, ' ')
|
2445
2459
|
.replace(/^\s\s*/, '')
|
2446
2460
|
.replace(/\s\s*$/, '');
|
@@ -2540,8 +2554,7 @@
|
|
2540
2554
|
hooks.createFromInputFallback = deprecate(
|
2541
2555
|
'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
|
2542
2556
|
'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
|
2543
|
-
'discouraged
|
2544
|
-
'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
|
2557
|
+
'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
|
2545
2558
|
function (config) {
|
2546
2559
|
config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
|
2547
2560
|
}
|
@@ -2754,12 +2767,13 @@
|
|
2754
2767
|
skipped,
|
2755
2768
|
stringLength = string.length,
|
2756
2769
|
totalParsedInputLength = 0,
|
2757
|
-
era
|
2770
|
+
era,
|
2771
|
+
tokenLen;
|
2758
2772
|
|
2759
2773
|
tokens =
|
2760
2774
|
expandFormat(config._f, config._locale).match(formattingTokens) || [];
|
2761
|
-
|
2762
|
-
for (i = 0; i <
|
2775
|
+
tokenLen = tokens.length;
|
2776
|
+
for (i = 0; i < tokenLen; i++) {
|
2763
2777
|
token = tokens[i];
|
2764
2778
|
parsedInput = (string.match(getParseRegexForToken(token, config)) ||
|
2765
2779
|
[])[0];
|
@@ -2854,15 +2868,16 @@
|
|
2854
2868
|
i,
|
2855
2869
|
currentScore,
|
2856
2870
|
validFormatFound,
|
2857
|
-
bestFormatIsValid = false
|
2871
|
+
bestFormatIsValid = false,
|
2872
|
+
configfLen = config._f.length;
|
2858
2873
|
|
2859
|
-
if (
|
2874
|
+
if (configfLen === 0) {
|
2860
2875
|
getParsingFlags(config).invalidFormat = true;
|
2861
2876
|
config._d = new Date(NaN);
|
2862
2877
|
return;
|
2863
2878
|
}
|
2864
2879
|
|
2865
|
-
for (i = 0; i <
|
2880
|
+
for (i = 0; i < configfLen; i++) {
|
2866
2881
|
currentScore = 0;
|
2867
2882
|
validFormatFound = false;
|
2868
2883
|
tempConfig = copyConfig({}, config);
|
@@ -3103,7 +3118,8 @@
|
|
3103
3118
|
function isDurationValid(m) {
|
3104
3119
|
var key,
|
3105
3120
|
unitHasDecimal = false,
|
3106
|
-
i
|
3121
|
+
i,
|
3122
|
+
orderLen = ordering.length;
|
3107
3123
|
for (key in m) {
|
3108
3124
|
if (
|
3109
3125
|
hasOwnProp(m, key) &&
|
@@ -3116,7 +3132,7 @@
|
|
3116
3132
|
}
|
3117
3133
|
}
|
3118
3134
|
|
3119
|
-
for (i = 0; i <
|
3135
|
+
for (i = 0; i < orderLen; ++i) {
|
3120
3136
|
if (m[ordering[i]]) {
|
3121
3137
|
if (unitHasDecimal) {
|
3122
3138
|
return false; // only allow non-integers for smallest unit
|
@@ -3441,7 +3457,8 @@
|
|
3441
3457
|
// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
|
3442
3458
|
// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
|
3443
3459
|
// and further modified to allow for strings containing both week and day
|
3444
|
-
isoRegex =
|
3460
|
+
isoRegex =
|
3461
|
+
/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
|
3445
3462
|
|
3446
3463
|
function createDuration(input, key) {
|
3447
3464
|
var duration = input,
|
@@ -3662,9 +3679,10 @@
|
|
3662
3679
|
'ms',
|
3663
3680
|
],
|
3664
3681
|
i,
|
3665
|
-
property
|
3682
|
+
property,
|
3683
|
+
propertyLen = properties.length;
|
3666
3684
|
|
3667
|
-
for (i = 0; i <
|
3685
|
+
for (i = 0; i < propertyLen; i += 1) {
|
3668
3686
|
property = properties[i];
|
3669
3687
|
propertyTest = propertyTest || hasOwnProp(input, property);
|
3670
3688
|
}
|
@@ -3726,7 +3744,10 @@
|
|
3726
3744
|
function calendar$1(time, formats) {
|
3727
3745
|
// Support for single parameter, formats only overload to the calendar function
|
3728
3746
|
if (arguments.length === 1) {
|
3729
|
-
if (
|
3747
|
+
if (!arguments[0]) {
|
3748
|
+
time = undefined;
|
3749
|
+
formats = undefined;
|
3750
|
+
} else if (isMomentInput(arguments[0])) {
|
3730
3751
|
time = arguments[0];
|
3731
3752
|
formats = undefined;
|
3732
3753
|
} else if (isCalendarSpec(arguments[0])) {
|
@@ -4284,19 +4305,17 @@
|
|
4284
4305
|
addRegexToken('NNNN', matchEraName);
|
4285
4306
|
addRegexToken('NNNNN', matchEraNarrow);
|
4286
4307
|
|
4287
|
-
addParseToken(
|
4288
|
-
|
4289
|
-
array,
|
4290
|
-
|
4291
|
-
|
4292
|
-
|
4293
|
-
|
4294
|
-
|
4295
|
-
|
4296
|
-
} else {
|
4297
|
-
getParsingFlags(config).invalidEra = input;
|
4308
|
+
addParseToken(
|
4309
|
+
['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],
|
4310
|
+
function (input, array, config, token) {
|
4311
|
+
var era = config._locale.erasParse(input, token, config._strict);
|
4312
|
+
if (era) {
|
4313
|
+
getParsingFlags(config).era = era;
|
4314
|
+
} else {
|
4315
|
+
getParsingFlags(config).invalidEra = input;
|
4316
|
+
}
|
4298
4317
|
}
|
4299
|
-
|
4318
|
+
);
|
4300
4319
|
|
4301
4320
|
addRegexToken('y', matchUnsigned);
|
4302
4321
|
addRegexToken('yy', matchUnsigned);
|
@@ -4404,7 +4423,7 @@
|
|
4404
4423
|
eras = this.localeData().eras();
|
4405
4424
|
for (i = 0, l = eras.length; i < l; ++i) {
|
4406
4425
|
// truncate time
|
4407
|
-
val = this.startOf('day').valueOf();
|
4426
|
+
val = this.clone().startOf('day').valueOf();
|
4408
4427
|
|
4409
4428
|
if (eras[i].since <= val && val <= eras[i].until) {
|
4410
4429
|
return eras[i].name;
|
@@ -4424,7 +4443,7 @@
|
|
4424
4443
|
eras = this.localeData().eras();
|
4425
4444
|
for (i = 0, l = eras.length; i < l; ++i) {
|
4426
4445
|
// truncate time
|
4427
|
-
val = this.startOf('day').valueOf();
|
4446
|
+
val = this.clone().startOf('day').valueOf();
|
4428
4447
|
|
4429
4448
|
if (eras[i].since <= val && val <= eras[i].until) {
|
4430
4449
|
return eras[i].narrow;
|
@@ -4444,7 +4463,7 @@
|
|
4444
4463
|
eras = this.localeData().eras();
|
4445
4464
|
for (i = 0, l = eras.length; i < l; ++i) {
|
4446
4465
|
// truncate time
|
4447
|
-
val = this.startOf('day').valueOf();
|
4466
|
+
val = this.clone().startOf('day').valueOf();
|
4448
4467
|
|
4449
4468
|
if (eras[i].since <= val && val <= eras[i].until) {
|
4450
4469
|
return eras[i].abbr;
|
@@ -4467,7 +4486,7 @@
|
|
4467
4486
|
dir = eras[i].since <= eras[i].until ? +1 : -1;
|
4468
4487
|
|
4469
4488
|
// truncate time
|
4470
|
-
val = this.startOf('day').valueOf();
|
4489
|
+
val = this.clone().startOf('day').valueOf();
|
4471
4490
|
|
4472
4491
|
if (
|
4473
4492
|
(eras[i].since <= val && val <= eras[i].until) ||
|
@@ -4588,14 +4607,12 @@
|
|
4588
4607
|
addRegexToken('GGGGG', match1to6, match6);
|
4589
4608
|
addRegexToken('ggggg', match1to6, match6);
|
4590
4609
|
|
4591
|
-
addWeekParseToken(
|
4592
|
-
|
4593
|
-
week,
|
4594
|
-
|
4595
|
-
|
4596
|
-
)
|
4597
|
-
week[token.substr(0, 2)] = toInt(input);
|
4598
|
-
});
|
4610
|
+
addWeekParseToken(
|
4611
|
+
['gggg', 'ggggg', 'GGGG', 'GGGGG'],
|
4612
|
+
function (input, week, config, token) {
|
4613
|
+
week[token.substr(0, 2)] = toInt(input);
|
4614
|
+
}
|
4615
|
+
);
|
4599
4616
|
|
4600
4617
|
addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
|
4601
4618
|
week[token] = hooks.parseTwoDigitYear(input);
|
@@ -5618,7 +5635,7 @@
|
|
5618
5635
|
|
5619
5636
|
//! moment.js
|
5620
5637
|
|
5621
|
-
hooks.version = '2.
|
5638
|
+
hooks.version = '2.29.4';
|
5622
5639
|
|
5623
5640
|
setHookCallback(createLocal);
|
5624
5641
|
|
@@ -106,7 +106,16 @@ function cancelServerQuery(query) {
|
|
106
106
|
var path = Routes.cancel_queries_path()
|
107
107
|
var data = {run_id: query.run_id, data_source: query.data_source}
|
108
108
|
if (navigator.sendBeacon) {
|
109
|
-
|
109
|
+
// use FormData over Blob and URLSearchParams for maximum compatibility
|
110
|
+
// Blob works with Chrome 81+ and URLSearchParams works with Chrome 88+
|
111
|
+
var formdata = new FormData()
|
112
|
+
var params = csrfProtect(data)
|
113
|
+
for (var key in params) {
|
114
|
+
if (Object.prototype.hasOwnProperty.call(params, key)) {
|
115
|
+
formdata.append(key, params[key])
|
116
|
+
}
|
117
|
+
}
|
118
|
+
navigator.sendBeacon(path, formdata)
|
110
119
|
} else {
|
111
120
|
// TODO make sync
|
112
121
|
$.post(path, data)
|