blazer 2.6.5 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|