tolaria 1.1.2 → 1.2.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/README.md +8 -1
- data/app/assets/fonts/admin/fontawesome.eot +0 -0
- data/app/assets/fonts/admin/fontawesome.svg +39 -24
- data/app/assets/fonts/admin/fontawesome.ttf +0 -0
- data/app/assets/fonts/admin/fontawesome.woff +0 -0
- data/app/assets/fonts/admin/fontawesome.woff2 +0 -0
- data/app/assets/javascripts/admin/base.js +1 -0
- data/app/assets/javascripts/admin/lib/autosize.js +262 -0
- data/app/assets/javascripts/admin/lib/backbone.js +242 -216
- data/app/assets/javascripts/admin/lib/jquery.chosen.js +1 -1
- data/app/assets/javascripts/admin/lib/jquery.js +1 -1
- data/app/assets/javascripts/admin/lib/jquery.selection.js +1 -1
- data/app/assets/javascripts/admin/lib/moment.js +301 -189
- data/app/assets/javascripts/admin/views/fields/attachment_field.js +1 -0
- data/app/assets/javascripts/admin/views/fields/textarea.js +9 -0
- data/app/assets/stylesheets/admin/components/_buttons.scss +7 -1
- data/app/assets/stylesheets/admin/components/_navigation.scss +7 -12
- data/app/assets/stylesheets/admin/settings/_icons.scss +81 -1
- data/app/controllers/tolaria/resource_controller.rb +3 -3
- data/app/helpers/admin/table_helper.rb +5 -5
- data/app/views/admin/administrators/_show.html.erb +2 -2
- data/app/views/admin/shared/forms/_markdown_composer.html.erb +3 -1
- data/app/views/admin/tolaria_resource/_form_buttons.html.erb +12 -3
- data/app/views/admin/tolaria_resource/_search_form.html.erb +1 -1
- data/app/views/admin/tolaria_resource/edit.html.erb +7 -1
- data/app/views/admin/tolaria_resource/index.html.erb +11 -4
- data/app/views/admin/tolaria_resource/show.html.erb +13 -4
- data/lib/tasks/admin.rake +16 -7
- data/lib/tolaria/default_config.rb +1 -0
- data/lib/tolaria/form_buildable.rb +3 -2
- data/lib/tolaria/version.rb +1 -1
- data/test/integration/{interface_test.rb → crud_test.rb} +19 -3
- data/test/integration/filter_preservation_test.rb +61 -0
- data/tolaria.gemspec +1 -0
- metadata +9 -6
@@ -1,7 +1,7 @@
|
|
1
|
-
// Moment.js 2.10.
|
1
|
+
// Moment.js 2.10.6
|
2
2
|
// https://github.com/moment/moment/
|
3
3
|
//
|
4
|
-
// Copyright (c)
|
4
|
+
// Copyright (c) Tim Wood, Iskren Chernev, Moment.js contributors
|
5
5
|
//
|
6
6
|
// Permission is hereby granted, free of charge, to any person
|
7
7
|
// obtaining a copy of this software and associated documentation
|
@@ -42,28 +42,12 @@
|
|
42
42
|
hookCallback = callback;
|
43
43
|
}
|
44
44
|
|
45
|
-
function defaultParsingFlags() {
|
46
|
-
// We need to deep clone this object.
|
47
|
-
return {
|
48
|
-
empty : false,
|
49
|
-
unusedTokens : [],
|
50
|
-
unusedInput : [],
|
51
|
-
overflow : -2,
|
52
|
-
charsLeftOver : 0,
|
53
|
-
nullInput : false,
|
54
|
-
invalidMonth : null,
|
55
|
-
invalidFormat : false,
|
56
|
-
userInvalidated : false,
|
57
|
-
iso : false
|
58
|
-
};
|
59
|
-
}
|
60
|
-
|
61
45
|
function isArray(input) {
|
62
46
|
return Object.prototype.toString.call(input) === '[object Array]';
|
63
47
|
}
|
64
48
|
|
65
49
|
function isDate(input) {
|
66
|
-
return Object.prototype.toString.call(input) === '[object Date]'
|
50
|
+
return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
|
67
51
|
}
|
68
52
|
|
69
53
|
function map(arr, fn) {
|
@@ -100,21 +84,46 @@
|
|
100
84
|
return createLocalOrUTC(input, format, locale, strict, true).utc();
|
101
85
|
}
|
102
86
|
|
87
|
+
function defaultParsingFlags() {
|
88
|
+
// We need to deep clone this object.
|
89
|
+
return {
|
90
|
+
empty : false,
|
91
|
+
unusedTokens : [],
|
92
|
+
unusedInput : [],
|
93
|
+
overflow : -2,
|
94
|
+
charsLeftOver : 0,
|
95
|
+
nullInput : false,
|
96
|
+
invalidMonth : null,
|
97
|
+
invalidFormat : false,
|
98
|
+
userInvalidated : false,
|
99
|
+
iso : false
|
100
|
+
};
|
101
|
+
}
|
102
|
+
|
103
|
+
function getParsingFlags(m) {
|
104
|
+
if (m._pf == null) {
|
105
|
+
m._pf = defaultParsingFlags();
|
106
|
+
}
|
107
|
+
return m._pf;
|
108
|
+
}
|
109
|
+
|
103
110
|
function valid__isValid(m) {
|
104
111
|
if (m._isValid == null) {
|
112
|
+
var flags = getParsingFlags(m);
|
105
113
|
m._isValid = !isNaN(m._d.getTime()) &&
|
106
|
-
|
107
|
-
!
|
108
|
-
!
|
109
|
-
!
|
110
|
-
!
|
111
|
-
!
|
114
|
+
flags.overflow < 0 &&
|
115
|
+
!flags.empty &&
|
116
|
+
!flags.invalidMonth &&
|
117
|
+
!flags.invalidWeekday &&
|
118
|
+
!flags.nullInput &&
|
119
|
+
!flags.invalidFormat &&
|
120
|
+
!flags.userInvalidated;
|
112
121
|
|
113
122
|
if (m._strict) {
|
114
123
|
m._isValid = m._isValid &&
|
115
|
-
|
116
|
-
|
117
|
-
|
124
|
+
flags.charsLeftOver === 0 &&
|
125
|
+
flags.unusedTokens.length === 0 &&
|
126
|
+
flags.bigHour === undefined;
|
118
127
|
}
|
119
128
|
}
|
120
129
|
return m._isValid;
|
@@ -123,10 +132,10 @@
|
|
123
132
|
function valid__createInvalid (flags) {
|
124
133
|
var m = create_utc__createUTC(NaN);
|
125
134
|
if (flags != null) {
|
126
|
-
extend(m
|
135
|
+
extend(getParsingFlags(m), flags);
|
127
136
|
}
|
128
137
|
else {
|
129
|
-
m.
|
138
|
+
getParsingFlags(m).userInvalidated = true;
|
130
139
|
}
|
131
140
|
|
132
141
|
return m;
|
@@ -162,7 +171,7 @@
|
|
162
171
|
to._offset = from._offset;
|
163
172
|
}
|
164
173
|
if (typeof from._pf !== 'undefined') {
|
165
|
-
to._pf = from
|
174
|
+
to._pf = getParsingFlags(from);
|
166
175
|
}
|
167
176
|
if (typeof from._locale !== 'undefined') {
|
168
177
|
to._locale = from._locale;
|
@@ -186,7 +195,7 @@
|
|
186
195
|
// Moment prototype object
|
187
196
|
function Moment(config) {
|
188
197
|
copyConfig(this, config);
|
189
|
-
this._d = new Date(
|
198
|
+
this._d = new Date(config._d != null ? config._d.getTime() : NaN);
|
190
199
|
// Prevent infinite loop in case updateOffset creates new moment
|
191
200
|
// objects.
|
192
201
|
if (updateInProgress === false) {
|
@@ -197,7 +206,15 @@
|
|
197
206
|
}
|
198
207
|
|
199
208
|
function isMoment (obj) {
|
200
|
-
return obj instanceof Moment || (obj != null &&
|
209
|
+
return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
|
210
|
+
}
|
211
|
+
|
212
|
+
function absFloor (number) {
|
213
|
+
if (number < 0) {
|
214
|
+
return Math.ceil(number);
|
215
|
+
} else {
|
216
|
+
return Math.floor(number);
|
217
|
+
}
|
201
218
|
}
|
202
219
|
|
203
220
|
function toInt(argumentForCoercion) {
|
@@ -205,11 +222,7 @@
|
|
205
222
|
value = 0;
|
206
223
|
|
207
224
|
if (coercedNumber !== 0 && isFinite(coercedNumber)) {
|
208
|
-
|
209
|
-
value = Math.floor(coercedNumber);
|
210
|
-
} else {
|
211
|
-
value = Math.ceil(coercedNumber);
|
212
|
-
}
|
225
|
+
value = absFloor(coercedNumber);
|
213
226
|
}
|
214
227
|
|
215
228
|
return value;
|
@@ -307,9 +320,7 @@
|
|
307
320
|
function defineLocale (name, values) {
|
308
321
|
if (values !== null) {
|
309
322
|
values.abbr = name;
|
310
|
-
|
311
|
-
locales[name] = new Locale();
|
312
|
-
}
|
323
|
+
locales[name] = locales[name] || new Locale();
|
313
324
|
locales[name].set(values);
|
314
325
|
|
315
326
|
// backwards compat for now: also set the locale
|
@@ -413,16 +424,14 @@
|
|
413
424
|
}
|
414
425
|
|
415
426
|
function zeroFill(number, targetLength, forceSign) {
|
416
|
-
var
|
427
|
+
var absNumber = '' + Math.abs(number),
|
428
|
+
zerosToFill = targetLength - absNumber.length,
|
417
429
|
sign = number >= 0;
|
418
|
-
|
419
|
-
|
420
|
-
output = '0' + output;
|
421
|
-
}
|
422
|
-
return (sign ? (forceSign ? '+' : '') : '-') + output;
|
430
|
+
return (sign ? (forceSign ? '+' : '') : '-') +
|
431
|
+
Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
|
423
432
|
}
|
424
433
|
|
425
|
-
var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,
|
434
|
+
var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
|
426
435
|
|
427
436
|
var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
|
428
437
|
|
@@ -490,10 +499,7 @@
|
|
490
499
|
}
|
491
500
|
|
492
501
|
format = expandFormat(format, m.localeData());
|
493
|
-
|
494
|
-
if (!formatFunctions[format]) {
|
495
|
-
formatFunctions[format] = makeFormatFunction(format);
|
496
|
-
}
|
502
|
+
formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
|
497
503
|
|
498
504
|
return formatFunctions[format](m);
|
499
505
|
}
|
@@ -537,8 +543,15 @@
|
|
537
543
|
|
538
544
|
var regexes = {};
|
539
545
|
|
546
|
+
function isFunction (sth) {
|
547
|
+
// https://github.com/moment/moment/issues/2325
|
548
|
+
return typeof sth === 'function' &&
|
549
|
+
Object.prototype.toString.call(sth) === '[object Function]';
|
550
|
+
}
|
551
|
+
|
552
|
+
|
540
553
|
function addRegexToken (token, regex, strictRegex) {
|
541
|
-
regexes[token] =
|
554
|
+
regexes[token] = isFunction(regex) ? regex : function (isStrict) {
|
542
555
|
return (isStrict && strictRegex) ? strictRegex : regex;
|
543
556
|
};
|
544
557
|
}
|
@@ -635,7 +648,7 @@
|
|
635
648
|
if (month != null) {
|
636
649
|
array[MONTH] = month;
|
637
650
|
} else {
|
638
|
-
config.
|
651
|
+
getParsingFlags(config).invalidMonth = input;
|
639
652
|
}
|
640
653
|
});
|
641
654
|
|
@@ -719,7 +732,7 @@
|
|
719
732
|
var overflow;
|
720
733
|
var a = m._a;
|
721
734
|
|
722
|
-
if (a && m.
|
735
|
+
if (a && getParsingFlags(m).overflow === -2) {
|
723
736
|
overflow =
|
724
737
|
a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
|
725
738
|
a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
|
@@ -729,11 +742,11 @@
|
|
729
742
|
a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
|
730
743
|
-1;
|
731
744
|
|
732
|
-
if (m.
|
745
|
+
if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
|
733
746
|
overflow = DATE;
|
734
747
|
}
|
735
748
|
|
736
|
-
m.
|
749
|
+
getParsingFlags(m).overflow = overflow;
|
737
750
|
}
|
738
751
|
|
739
752
|
return m;
|
@@ -747,9 +760,10 @@
|
|
747
760
|
|
748
761
|
function deprecate(msg, fn) {
|
749
762
|
var firstTime = true;
|
763
|
+
|
750
764
|
return extend(function () {
|
751
765
|
if (firstTime) {
|
752
|
-
warn(msg);
|
766
|
+
warn(msg + '\n' + (new Error()).stack);
|
753
767
|
firstTime = false;
|
754
768
|
}
|
755
769
|
return fn.apply(this, arguments);
|
@@ -794,17 +808,17 @@
|
|
794
808
|
match = from_string__isoRegex.exec(string);
|
795
809
|
|
796
810
|
if (match) {
|
797
|
-
config.
|
811
|
+
getParsingFlags(config).iso = true;
|
798
812
|
for (i = 0, l = isoDates.length; i < l; i++) {
|
799
813
|
if (isoDates[i][1].exec(string)) {
|
800
|
-
|
801
|
-
config._f = isoDates[i][0] + (match[6] || ' ');
|
814
|
+
config._f = isoDates[i][0];
|
802
815
|
break;
|
803
816
|
}
|
804
817
|
}
|
805
818
|
for (i = 0, l = isoTimes.length; i < l; i++) {
|
806
819
|
if (isoTimes[i][1].exec(string)) {
|
807
|
-
|
820
|
+
// match[6] should be 'T' or space
|
821
|
+
config._f += (match[6] || ' ') + isoTimes[i][0];
|
808
822
|
break;
|
809
823
|
}
|
810
824
|
}
|
@@ -883,7 +897,10 @@
|
|
883
897
|
addRegexToken('YYYYY', match1to6, match6);
|
884
898
|
addRegexToken('YYYYYY', match1to6, match6);
|
885
899
|
|
886
|
-
addParseToken(['
|
900
|
+
addParseToken(['YYYYY', 'YYYYYY'], YEAR);
|
901
|
+
addParseToken('YYYY', function (input, array) {
|
902
|
+
array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input);
|
903
|
+
});
|
887
904
|
addParseToken('YY', function (input, array) {
|
888
905
|
array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input);
|
889
906
|
});
|
@@ -1010,18 +1027,18 @@
|
|
1010
1027
|
|
1011
1028
|
//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
|
1012
1029
|
function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
|
1013
|
-
var
|
1014
|
-
|
1015
|
-
|
1030
|
+
var week1Jan = 6 + firstDayOfWeek - firstDayOfWeekOfYear, janX = createUTCDate(year, 0, 1 + week1Jan), d = janX.getUTCDay(), dayOfYear;
|
1031
|
+
if (d < firstDayOfWeek) {
|
1032
|
+
d += 7;
|
1033
|
+
}
|
1034
|
+
|
1035
|
+
weekday = weekday != null ? 1 * weekday : firstDayOfWeek;
|
1016
1036
|
|
1017
|
-
|
1018
|
-
weekday = weekday != null ? weekday : firstDayOfWeek;
|
1019
|
-
daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
|
1020
|
-
dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
|
1037
|
+
dayOfYear = 1 + week1Jan + 7 * (week - 1) - d + weekday;
|
1021
1038
|
|
1022
1039
|
return {
|
1023
|
-
year
|
1024
|
-
dayOfYear
|
1040
|
+
year: dayOfYear > 0 ? year : year - 1,
|
1041
|
+
dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear
|
1025
1042
|
};
|
1026
1043
|
}
|
1027
1044
|
|
@@ -1074,7 +1091,7 @@
|
|
1074
1091
|
yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
|
1075
1092
|
|
1076
1093
|
if (config._dayOfYear > daysInYear(yearToUse)) {
|
1077
|
-
config.
|
1094
|
+
getParsingFlags(config)._overflowDayOfYear = true;
|
1078
1095
|
}
|
1079
1096
|
|
1080
1097
|
date = createUTCDate(yearToUse, 0, config._dayOfYear);
|
@@ -1170,7 +1187,7 @@
|
|
1170
1187
|
}
|
1171
1188
|
|
1172
1189
|
config._a = [];
|
1173
|
-
config.
|
1190
|
+
getParsingFlags(config).empty = true;
|
1174
1191
|
|
1175
1192
|
// This array is used to make a Date, either with `new Date` or `Date.UTC`
|
1176
1193
|
var string = '' + config._i,
|
@@ -1186,7 +1203,7 @@
|
|
1186
1203
|
if (parsedInput) {
|
1187
1204
|
skipped = string.substr(0, string.indexOf(parsedInput));
|
1188
1205
|
if (skipped.length > 0) {
|
1189
|
-
config.
|
1206
|
+
getParsingFlags(config).unusedInput.push(skipped);
|
1190
1207
|
}
|
1191
1208
|
string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
|
1192
1209
|
totalParsedInputLength += parsedInput.length;
|
@@ -1194,27 +1211,29 @@
|
|
1194
1211
|
// don't parse if it's not a known token
|
1195
1212
|
if (formatTokenFunctions[token]) {
|
1196
1213
|
if (parsedInput) {
|
1197
|
-
config.
|
1214
|
+
getParsingFlags(config).empty = false;
|
1198
1215
|
}
|
1199
1216
|
else {
|
1200
|
-
config.
|
1217
|
+
getParsingFlags(config).unusedTokens.push(token);
|
1201
1218
|
}
|
1202
1219
|
addTimeToArrayFromToken(token, parsedInput, config);
|
1203
1220
|
}
|
1204
1221
|
else if (config._strict && !parsedInput) {
|
1205
|
-
config.
|
1222
|
+
getParsingFlags(config).unusedTokens.push(token);
|
1206
1223
|
}
|
1207
1224
|
}
|
1208
1225
|
|
1209
1226
|
// add remaining unparsed input length to the string
|
1210
|
-
config.
|
1227
|
+
getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
|
1211
1228
|
if (string.length > 0) {
|
1212
|
-
config.
|
1229
|
+
getParsingFlags(config).unusedInput.push(string);
|
1213
1230
|
}
|
1214
1231
|
|
1215
1232
|
// clear _12h flag if hour is <= 12
|
1216
|
-
if (config.
|
1217
|
-
|
1233
|
+
if (getParsingFlags(config).bigHour === true &&
|
1234
|
+
config._a[HOUR] <= 12 &&
|
1235
|
+
config._a[HOUR] > 0) {
|
1236
|
+
getParsingFlags(config).bigHour = undefined;
|
1218
1237
|
}
|
1219
1238
|
// handle meridiem
|
1220
1239
|
config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
|
@@ -1258,7 +1277,7 @@
|
|
1258
1277
|
currentScore;
|
1259
1278
|
|
1260
1279
|
if (config._f.length === 0) {
|
1261
|
-
config.
|
1280
|
+
getParsingFlags(config).invalidFormat = true;
|
1262
1281
|
config._d = new Date(NaN);
|
1263
1282
|
return;
|
1264
1283
|
}
|
@@ -1269,7 +1288,6 @@
|
|
1269
1288
|
if (config._useUTC != null) {
|
1270
1289
|
tempConfig._useUTC = config._useUTC;
|
1271
1290
|
}
|
1272
|
-
tempConfig._pf = defaultParsingFlags();
|
1273
1291
|
tempConfig._f = config._f[i];
|
1274
1292
|
configFromStringAndFormat(tempConfig);
|
1275
1293
|
|
@@ -1278,12 +1296,12 @@
|
|
1278
1296
|
}
|
1279
1297
|
|
1280
1298
|
// if there is any input that was not parsed add a penalty for that format
|
1281
|
-
currentScore += tempConfig.
|
1299
|
+
currentScore += getParsingFlags(tempConfig).charsLeftOver;
|
1282
1300
|
|
1283
1301
|
//or tokens
|
1284
|
-
currentScore += tempConfig.
|
1302
|
+
currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
|
1285
1303
|
|
1286
|
-
tempConfig.
|
1304
|
+
getParsingFlags(tempConfig).score = currentScore;
|
1287
1305
|
|
1288
1306
|
if (scoreToBeat == null || currentScore < scoreToBeat) {
|
1289
1307
|
scoreToBeat = currentScore;
|
@@ -1306,9 +1324,19 @@
|
|
1306
1324
|
}
|
1307
1325
|
|
1308
1326
|
function createFromConfig (config) {
|
1327
|
+
var res = new Moment(checkOverflow(prepareConfig(config)));
|
1328
|
+
if (res._nextDay) {
|
1329
|
+
// Adding is smart enough around DST
|
1330
|
+
res.add(1, 'd');
|
1331
|
+
res._nextDay = undefined;
|
1332
|
+
}
|
1333
|
+
|
1334
|
+
return res;
|
1335
|
+
}
|
1336
|
+
|
1337
|
+
function prepareConfig (config) {
|
1309
1338
|
var input = config._i,
|
1310
|
-
format = config._f
|
1311
|
-
res;
|
1339
|
+
format = config._f;
|
1312
1340
|
|
1313
1341
|
config._locale = config._locale || locale_locales__getLocale(config._l);
|
1314
1342
|
|
@@ -1326,18 +1354,13 @@
|
|
1326
1354
|
configFromStringAndArray(config);
|
1327
1355
|
} else if (format) {
|
1328
1356
|
configFromStringAndFormat(config);
|
1357
|
+
} else if (isDate(input)) {
|
1358
|
+
config._d = input;
|
1329
1359
|
} else {
|
1330
1360
|
configFromInput(config);
|
1331
1361
|
}
|
1332
1362
|
|
1333
|
-
|
1334
|
-
if (res._nextDay) {
|
1335
|
-
// Adding is smart enough around DST
|
1336
|
-
res.add(1, 'd');
|
1337
|
-
res._nextDay = undefined;
|
1338
|
-
}
|
1339
|
-
|
1340
|
-
return res;
|
1363
|
+
return config;
|
1341
1364
|
}
|
1342
1365
|
|
1343
1366
|
function configFromInput(config) {
|
@@ -1378,7 +1401,6 @@
|
|
1378
1401
|
c._i = input;
|
1379
1402
|
c._f = format;
|
1380
1403
|
c._strict = strict;
|
1381
|
-
c._pf = defaultParsingFlags();
|
1382
1404
|
|
1383
1405
|
return createFromConfig(c);
|
1384
1406
|
}
|
@@ -1418,7 +1440,7 @@
|
|
1418
1440
|
}
|
1419
1441
|
res = moments[0];
|
1420
1442
|
for (i = 1; i < moments.length; ++i) {
|
1421
|
-
if (moments[i][fn](res)) {
|
1443
|
+
if (!moments[i].isValid() || moments[i][fn](res)) {
|
1422
1444
|
res = moments[i];
|
1423
1445
|
}
|
1424
1446
|
}
|
@@ -1530,7 +1552,6 @@
|
|
1530
1552
|
} else {
|
1531
1553
|
return local__createLocal(input).local();
|
1532
1554
|
}
|
1533
|
-
return model._isUTC ? local__createLocal(input).zone(model._offset || 0) : local__createLocal(input).local();
|
1534
1555
|
}
|
1535
1556
|
|
1536
1557
|
function getDateOffset (m) {
|
@@ -1630,12 +1651,7 @@
|
|
1630
1651
|
}
|
1631
1652
|
|
1632
1653
|
function hasAlignedHourOffset (input) {
|
1633
|
-
|
1634
|
-
input = 0;
|
1635
|
-
}
|
1636
|
-
else {
|
1637
|
-
input = local__createLocal(input).utcOffset();
|
1638
|
-
}
|
1654
|
+
input = input ? local__createLocal(input).utcOffset() : 0;
|
1639
1655
|
|
1640
1656
|
return (this.utcOffset() - input) % 60 === 0;
|
1641
1657
|
}
|
@@ -1648,12 +1664,24 @@
|
|
1648
1664
|
}
|
1649
1665
|
|
1650
1666
|
function isDaylightSavingTimeShifted () {
|
1651
|
-
if (this.
|
1652
|
-
|
1653
|
-
|
1667
|
+
if (typeof this._isDSTShifted !== 'undefined') {
|
1668
|
+
return this._isDSTShifted;
|
1669
|
+
}
|
1670
|
+
|
1671
|
+
var c = {};
|
1672
|
+
|
1673
|
+
copyConfig(c, this);
|
1674
|
+
c = prepareConfig(c);
|
1675
|
+
|
1676
|
+
if (c._a) {
|
1677
|
+
var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a);
|
1678
|
+
this._isDSTShifted = this.isValid() &&
|
1679
|
+
compareArrays(c._a, other.toArray()) > 0;
|
1680
|
+
} else {
|
1681
|
+
this._isDSTShifted = false;
|
1654
1682
|
}
|
1655
1683
|
|
1656
|
-
return
|
1684
|
+
return this._isDSTShifted;
|
1657
1685
|
}
|
1658
1686
|
|
1659
1687
|
function isLocal () {
|
@@ -1813,7 +1841,7 @@
|
|
1813
1841
|
var add_subtract__add = createAdder(1, 'add');
|
1814
1842
|
var add_subtract__subtract = createAdder(-1, 'subtract');
|
1815
1843
|
|
1816
|
-
function moment_calendar__calendar (time) {
|
1844
|
+
function moment_calendar__calendar (time, formats) {
|
1817
1845
|
// We want to compare the start of today, vs this.
|
1818
1846
|
// Getting start-of-today depends on whether we're local/utc/offset or not.
|
1819
1847
|
var now = time || local__createLocal(),
|
@@ -1825,7 +1853,7 @@
|
|
1825
1853
|
diff < 1 ? 'sameDay' :
|
1826
1854
|
diff < 2 ? 'nextDay' :
|
1827
1855
|
diff < 7 ? 'nextWeek' : 'sameElse';
|
1828
|
-
return this.format(this.localeData().calendar(format, this, local__createLocal(now)));
|
1856
|
+
return this.format(formats && formats[format] || this.localeData().calendar(format, this, local__createLocal(now)));
|
1829
1857
|
}
|
1830
1858
|
|
1831
1859
|
function clone () {
|
@@ -1872,14 +1900,6 @@
|
|
1872
1900
|
}
|
1873
1901
|
}
|
1874
1902
|
|
1875
|
-
function absFloor (number) {
|
1876
|
-
if (number < 0) {
|
1877
|
-
return Math.ceil(number);
|
1878
|
-
} else {
|
1879
|
-
return Math.floor(number);
|
1880
|
-
}
|
1881
|
-
}
|
1882
|
-
|
1883
1903
|
function diff (input, units, asFloat) {
|
1884
1904
|
var that = cloneWithOffset(input, this),
|
1885
1905
|
zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4,
|
@@ -1952,6 +1972,9 @@
|
|
1952
1972
|
}
|
1953
1973
|
|
1954
1974
|
function from (time, withoutSuffix) {
|
1975
|
+
if (!this.isValid()) {
|
1976
|
+
return this.localeData().invalidDate();
|
1977
|
+
}
|
1955
1978
|
return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
|
1956
1979
|
}
|
1957
1980
|
|
@@ -1959,6 +1982,17 @@
|
|
1959
1982
|
return this.from(local__createLocal(), withoutSuffix);
|
1960
1983
|
}
|
1961
1984
|
|
1985
|
+
function to (time, withoutSuffix) {
|
1986
|
+
if (!this.isValid()) {
|
1987
|
+
return this.localeData().invalidDate();
|
1988
|
+
}
|
1989
|
+
return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
|
1990
|
+
}
|
1991
|
+
|
1992
|
+
function toNow (withoutSuffix) {
|
1993
|
+
return this.to(local__createLocal(), withoutSuffix);
|
1994
|
+
}
|
1995
|
+
|
1962
1996
|
function locale (key) {
|
1963
1997
|
var newLocaleData;
|
1964
1998
|
|
@@ -2056,16 +2090,29 @@
|
|
2056
2090
|
return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
|
2057
2091
|
}
|
2058
2092
|
|
2093
|
+
function toObject () {
|
2094
|
+
var m = this;
|
2095
|
+
return {
|
2096
|
+
years: m.year(),
|
2097
|
+
months: m.month(),
|
2098
|
+
date: m.date(),
|
2099
|
+
hours: m.hours(),
|
2100
|
+
minutes: m.minutes(),
|
2101
|
+
seconds: m.seconds(),
|
2102
|
+
milliseconds: m.milliseconds()
|
2103
|
+
};
|
2104
|
+
}
|
2105
|
+
|
2059
2106
|
function moment_valid__isValid () {
|
2060
2107
|
return valid__isValid(this);
|
2061
2108
|
}
|
2062
2109
|
|
2063
2110
|
function parsingFlags () {
|
2064
|
-
return extend({}, this
|
2111
|
+
return extend({}, getParsingFlags(this));
|
2065
2112
|
}
|
2066
2113
|
|
2067
2114
|
function invalidAt () {
|
2068
|
-
return this.
|
2115
|
+
return getParsingFlags(this).overflow;
|
2069
2116
|
}
|
2070
2117
|
|
2071
2118
|
addFormatToken(0, ['gg', 2], 0, function () {
|
@@ -2216,7 +2263,7 @@
|
|
2216
2263
|
if (weekday != null) {
|
2217
2264
|
week.d = weekday;
|
2218
2265
|
} else {
|
2219
|
-
config.
|
2266
|
+
getParsingFlags(config).invalidWeekday = input;
|
2220
2267
|
}
|
2221
2268
|
});
|
2222
2269
|
|
@@ -2227,18 +2274,20 @@
|
|
2227
2274
|
// HELPERS
|
2228
2275
|
|
2229
2276
|
function parseWeekday(input, locale) {
|
2230
|
-
if (typeof input
|
2231
|
-
|
2232
|
-
input = parseInt(input, 10);
|
2233
|
-
}
|
2234
|
-
else {
|
2235
|
-
input = locale.weekdaysParse(input);
|
2236
|
-
if (typeof input !== 'number') {
|
2237
|
-
return null;
|
2238
|
-
}
|
2239
|
-
}
|
2277
|
+
if (typeof input !== 'string') {
|
2278
|
+
return input;
|
2240
2279
|
}
|
2241
|
-
|
2280
|
+
|
2281
|
+
if (!isNaN(input)) {
|
2282
|
+
return parseInt(input, 10);
|
2283
|
+
}
|
2284
|
+
|
2285
|
+
input = locale.weekdaysParse(input);
|
2286
|
+
if (typeof input === 'number') {
|
2287
|
+
return input;
|
2288
|
+
}
|
2289
|
+
|
2290
|
+
return null;
|
2242
2291
|
}
|
2243
2292
|
|
2244
2293
|
// LOCALES
|
@@ -2261,9 +2310,7 @@
|
|
2261
2310
|
function localeWeekdaysParse (weekdayName) {
|
2262
2311
|
var i, mom, regex;
|
2263
2312
|
|
2264
|
-
|
2265
|
-
this._weekdaysParse = [];
|
2266
|
-
}
|
2313
|
+
this._weekdaysParse = this._weekdaysParse || [];
|
2267
2314
|
|
2268
2315
|
for (i = 0; i < 7; i++) {
|
2269
2316
|
// make the regex if we don't have it already
|
@@ -2341,7 +2388,7 @@
|
|
2341
2388
|
});
|
2342
2389
|
addParseToken(['h', 'hh'], function (input, array, config) {
|
2343
2390
|
array[HOUR] = toInt(input);
|
2344
|
-
config.
|
2391
|
+
getParsingFlags(config).bigHour = true;
|
2345
2392
|
});
|
2346
2393
|
|
2347
2394
|
// LOCALES
|
@@ -2410,12 +2457,26 @@
|
|
2410
2457
|
return ~~(this.millisecond() / 10);
|
2411
2458
|
});
|
2412
2459
|
|
2413
|
-
|
2414
|
-
|
2415
|
-
|
2460
|
+
addFormatToken(0, ['SSS', 3], 0, 'millisecond');
|
2461
|
+
addFormatToken(0, ['SSSS', 4], 0, function () {
|
2462
|
+
return this.millisecond() * 10;
|
2463
|
+
});
|
2464
|
+
addFormatToken(0, ['SSSSS', 5], 0, function () {
|
2465
|
+
return this.millisecond() * 100;
|
2466
|
+
});
|
2467
|
+
addFormatToken(0, ['SSSSSS', 6], 0, function () {
|
2468
|
+
return this.millisecond() * 1000;
|
2469
|
+
});
|
2470
|
+
addFormatToken(0, ['SSSSSSS', 7], 0, function () {
|
2471
|
+
return this.millisecond() * 10000;
|
2472
|
+
});
|
2473
|
+
addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
|
2474
|
+
return this.millisecond() * 100000;
|
2475
|
+
});
|
2476
|
+
addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
|
2477
|
+
return this.millisecond() * 1000000;
|
2478
|
+
});
|
2416
2479
|
|
2417
|
-
millisecond__milliseconds('SSS');
|
2418
|
-
millisecond__milliseconds('SSSS');
|
2419
2480
|
|
2420
2481
|
// ALIASES
|
2421
2482
|
|
@@ -2426,11 +2487,19 @@
|
|
2426
2487
|
addRegexToken('S', match1to3, match1);
|
2427
2488
|
addRegexToken('SS', match1to3, match2);
|
2428
2489
|
addRegexToken('SSS', match1to3, match3);
|
2429
|
-
|
2430
|
-
|
2490
|
+
|
2491
|
+
var token;
|
2492
|
+
for (token = 'SSSS'; token.length <= 9; token += 'S') {
|
2493
|
+
addRegexToken(token, matchUnsigned);
|
2494
|
+
}
|
2495
|
+
|
2496
|
+
function parseMs(input, array) {
|
2431
2497
|
array[MILLISECOND] = toInt(('0.' + input) * 1000);
|
2432
|
-
}
|
2498
|
+
}
|
2433
2499
|
|
2500
|
+
for (token = 'S'; token.length <= 9; token += 'S') {
|
2501
|
+
addParseToken(token, parseMs);
|
2502
|
+
}
|
2434
2503
|
// MOMENTS
|
2435
2504
|
|
2436
2505
|
var getSetMillisecond = makeGetSet('Milliseconds', false);
|
@@ -2458,6 +2527,8 @@
|
|
2458
2527
|
momentPrototype__proto.format = format;
|
2459
2528
|
momentPrototype__proto.from = from;
|
2460
2529
|
momentPrototype__proto.fromNow = fromNow;
|
2530
|
+
momentPrototype__proto.to = to;
|
2531
|
+
momentPrototype__proto.toNow = toNow;
|
2461
2532
|
momentPrototype__proto.get = getSet;
|
2462
2533
|
momentPrototype__proto.invalidAt = invalidAt;
|
2463
2534
|
momentPrototype__proto.isAfter = isAfter;
|
@@ -2475,6 +2546,7 @@
|
|
2475
2546
|
momentPrototype__proto.startOf = startOf;
|
2476
2547
|
momentPrototype__proto.subtract = add_subtract__subtract;
|
2477
2548
|
momentPrototype__proto.toArray = toArray;
|
2549
|
+
momentPrototype__proto.toObject = toObject;
|
2478
2550
|
momentPrototype__proto.toDate = toDate;
|
2479
2551
|
momentPrototype__proto.toISOString = moment_format__toISOString;
|
2480
2552
|
momentPrototype__proto.toJSON = moment_format__toISOString;
|
@@ -2574,19 +2646,23 @@
|
|
2574
2646
|
LT : 'h:mm A',
|
2575
2647
|
L : 'MM/DD/YYYY',
|
2576
2648
|
LL : 'MMMM D, YYYY',
|
2577
|
-
LLL : 'MMMM D, YYYY
|
2578
|
-
LLLL : 'dddd, MMMM D, YYYY
|
2649
|
+
LLL : 'MMMM D, YYYY h:mm A',
|
2650
|
+
LLLL : 'dddd, MMMM D, YYYY h:mm A'
|
2579
2651
|
};
|
2580
2652
|
|
2581
2653
|
function longDateFormat (key) {
|
2582
|
-
var
|
2583
|
-
|
2584
|
-
|
2585
|
-
|
2586
|
-
|
2587
|
-
this._longDateFormat[key] = output;
|
2654
|
+
var format = this._longDateFormat[key],
|
2655
|
+
formatUpper = this._longDateFormat[key.toUpperCase()];
|
2656
|
+
|
2657
|
+
if (format || !formatUpper) {
|
2658
|
+
return format;
|
2588
2659
|
}
|
2589
|
-
|
2660
|
+
|
2661
|
+
this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
|
2662
|
+
return val.slice(1);
|
2663
|
+
});
|
2664
|
+
|
2665
|
+
return this._longDateFormat[key];
|
2590
2666
|
}
|
2591
2667
|
|
2592
2668
|
var defaultInvalidDate = 'Invalid date';
|
@@ -2646,7 +2722,7 @@
|
|
2646
2722
|
}
|
2647
2723
|
// Lenient ordinal parsing accepts just a number in addition to
|
2648
2724
|
// number + (possibly) stuff coming from _ordinalParseLenient.
|
2649
|
-
this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}
|
2725
|
+
this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
|
2650
2726
|
}
|
2651
2727
|
|
2652
2728
|
var prototype__proto = Locale.prototype;
|
@@ -2795,12 +2871,29 @@
|
|
2795
2871
|
return duration_add_subtract__addSubtract(this, input, value, -1);
|
2796
2872
|
}
|
2797
2873
|
|
2874
|
+
function absCeil (number) {
|
2875
|
+
if (number < 0) {
|
2876
|
+
return Math.floor(number);
|
2877
|
+
} else {
|
2878
|
+
return Math.ceil(number);
|
2879
|
+
}
|
2880
|
+
}
|
2881
|
+
|
2798
2882
|
function bubble () {
|
2799
2883
|
var milliseconds = this._milliseconds;
|
2800
2884
|
var days = this._days;
|
2801
2885
|
var months = this._months;
|
2802
2886
|
var data = this._data;
|
2803
|
-
var seconds, minutes, hours, years
|
2887
|
+
var seconds, minutes, hours, years, monthsFromDays;
|
2888
|
+
|
2889
|
+
// if we have a mix of positive and negative values, bubble down first
|
2890
|
+
// check: https://github.com/moment/moment/issues/2166
|
2891
|
+
if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
|
2892
|
+
(milliseconds <= 0 && days <= 0 && months <= 0))) {
|
2893
|
+
milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
|
2894
|
+
days = 0;
|
2895
|
+
months = 0;
|
2896
|
+
}
|
2804
2897
|
|
2805
2898
|
// The following code bubbles up values, see the tests for
|
2806
2899
|
// examples of what that means.
|
@@ -2817,17 +2910,13 @@
|
|
2817
2910
|
|
2818
2911
|
days += absFloor(hours / 24);
|
2819
2912
|
|
2820
|
-
//
|
2821
|
-
|
2822
|
-
|
2823
|
-
|
2824
|
-
// 30 days to a month
|
2825
|
-
// TODO (iskren): Use anchor date (like 1st Jan) to compute this.
|
2826
|
-
months += absFloor(days / 30);
|
2827
|
-
days %= 30;
|
2913
|
+
// convert days to months
|
2914
|
+
monthsFromDays = absFloor(daysToMonths(days));
|
2915
|
+
months += monthsFromDays;
|
2916
|
+
days -= absCeil(monthsToDays(monthsFromDays));
|
2828
2917
|
|
2829
2918
|
// 12 months -> 1 year
|
2830
|
-
years
|
2919
|
+
years = absFloor(months / 12);
|
2831
2920
|
months %= 12;
|
2832
2921
|
|
2833
2922
|
data.days = days;
|
@@ -2837,15 +2926,15 @@
|
|
2837
2926
|
return this;
|
2838
2927
|
}
|
2839
2928
|
|
2840
|
-
function
|
2929
|
+
function daysToMonths (days) {
|
2841
2930
|
// 400 years have 146097 days (taking into account leap year rules)
|
2842
|
-
|
2931
|
+
// 400 years have 12 months === 4800
|
2932
|
+
return days * 4800 / 146097;
|
2843
2933
|
}
|
2844
2934
|
|
2845
|
-
function
|
2846
|
-
//
|
2847
|
-
|
2848
|
-
return years * 146097 / 400;
|
2935
|
+
function monthsToDays (months) {
|
2936
|
+
// the reverse of daysToMonths
|
2937
|
+
return months * 146097 / 4800;
|
2849
2938
|
}
|
2850
2939
|
|
2851
2940
|
function as (units) {
|
@@ -2857,19 +2946,19 @@
|
|
2857
2946
|
|
2858
2947
|
if (units === 'month' || units === 'year') {
|
2859
2948
|
days = this._days + milliseconds / 864e5;
|
2860
|
-
months = this._months +
|
2949
|
+
months = this._months + daysToMonths(days);
|
2861
2950
|
return units === 'month' ? months : months / 12;
|
2862
2951
|
} else {
|
2863
2952
|
// handle milliseconds separately because of floating point math errors (issue #1867)
|
2864
|
-
days = this._days + Math.round(
|
2953
|
+
days = this._days + Math.round(monthsToDays(this._months));
|
2865
2954
|
switch (units) {
|
2866
|
-
case 'week' : return days / 7
|
2867
|
-
case 'day' : return days
|
2868
|
-
case 'hour' : return days * 24
|
2869
|
-
case 'minute' : return days *
|
2870
|
-
case 'second' : return days *
|
2955
|
+
case 'week' : return days / 7 + milliseconds / 6048e5;
|
2956
|
+
case 'day' : return days + milliseconds / 864e5;
|
2957
|
+
case 'hour' : return days * 24 + milliseconds / 36e5;
|
2958
|
+
case 'minute' : return days * 1440 + milliseconds / 6e4;
|
2959
|
+
case 'second' : return days * 86400 + milliseconds / 1000;
|
2871
2960
|
// Math.floor prevents floating point math errors here
|
2872
|
-
case 'millisecond': return Math.floor(days *
|
2961
|
+
case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
|
2873
2962
|
default: throw new Error('Unknown unit ' + units);
|
2874
2963
|
}
|
2875
2964
|
}
|
@@ -2911,7 +3000,7 @@
|
|
2911
3000
|
};
|
2912
3001
|
}
|
2913
3002
|
|
2914
|
-
var
|
3003
|
+
var milliseconds = makeGetter('milliseconds');
|
2915
3004
|
var seconds = makeGetter('seconds');
|
2916
3005
|
var minutes = makeGetter('minutes');
|
2917
3006
|
var hours = makeGetter('hours');
|
@@ -2989,13 +3078,36 @@
|
|
2989
3078
|
var iso_string__abs = Math.abs;
|
2990
3079
|
|
2991
3080
|
function iso_string__toISOString() {
|
3081
|
+
// for ISO strings we do not use the normal bubbling rules:
|
3082
|
+
// * milliseconds bubble up until they become hours
|
3083
|
+
// * days do not bubble at all
|
3084
|
+
// * months bubble up until they become years
|
3085
|
+
// This is because there is no context-free conversion between hours and days
|
3086
|
+
// (think of clock changes)
|
3087
|
+
// and also not between days and months (28-31 days per month)
|
3088
|
+
var seconds = iso_string__abs(this._milliseconds) / 1000;
|
3089
|
+
var days = iso_string__abs(this._days);
|
3090
|
+
var months = iso_string__abs(this._months);
|
3091
|
+
var minutes, hours, years;
|
3092
|
+
|
3093
|
+
// 3600 seconds -> 60 minutes -> 1 hour
|
3094
|
+
minutes = absFloor(seconds / 60);
|
3095
|
+
hours = absFloor(minutes / 60);
|
3096
|
+
seconds %= 60;
|
3097
|
+
minutes %= 60;
|
3098
|
+
|
3099
|
+
// 12 months -> 1 year
|
3100
|
+
years = absFloor(months / 12);
|
3101
|
+
months %= 12;
|
3102
|
+
|
3103
|
+
|
2992
3104
|
// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
|
2993
|
-
var Y =
|
2994
|
-
var M =
|
2995
|
-
var D =
|
2996
|
-
var h =
|
2997
|
-
var m =
|
2998
|
-
var s =
|
3105
|
+
var Y = years;
|
3106
|
+
var M = months;
|
3107
|
+
var D = days;
|
3108
|
+
var h = hours;
|
3109
|
+
var m = minutes;
|
3110
|
+
var s = seconds;
|
2999
3111
|
var total = this.asSeconds();
|
3000
3112
|
|
3001
3113
|
if (!total) {
|
@@ -3032,7 +3144,7 @@
|
|
3032
3144
|
duration_prototype__proto.valueOf = duration_as__valueOf;
|
3033
3145
|
duration_prototype__proto._bubble = bubble;
|
3034
3146
|
duration_prototype__proto.get = duration_get__get;
|
3035
|
-
duration_prototype__proto.milliseconds =
|
3147
|
+
duration_prototype__proto.milliseconds = milliseconds;
|
3036
3148
|
duration_prototype__proto.seconds = seconds;
|
3037
3149
|
duration_prototype__proto.minutes = minutes;
|
3038
3150
|
duration_prototype__proto.hours = hours;
|
@@ -3070,7 +3182,7 @@
|
|
3070
3182
|
// Side effect imports
|
3071
3183
|
|
3072
3184
|
|
3073
|
-
utils_hooks__hooks.version = '2.10.
|
3185
|
+
utils_hooks__hooks.version = '2.10.6';
|
3074
3186
|
|
3075
3187
|
setHookCallback(local__createLocal);
|
3076
3188
|
|