@fileverse-dev/fortune-core 1.3.5 → 1.3.6
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.
- package/es/api/sheet.js +41 -6
- package/es/canvas.js +1 -1
- package/es/events/keyboard.js +3 -3
- package/es/events/mouse.js +1 -1
- package/es/events/paste.js +34 -18
- package/es/modules/cell.js +8 -6
- package/es/modules/cursor.d.ts +1 -0
- package/es/modules/cursor.js +35 -0
- package/es/modules/format.js +29 -38
- package/es/modules/hyperlink.d.ts +2 -2
- package/es/modules/hyperlink.js +6 -2
- package/es/modules/selection.js +29 -7
- package/es/modules/ssf.js +1 -1
- package/es/modules/toolbar.js +34 -13
- package/es/modules/validation.d.ts +10 -0
- package/es/modules/validation.js +283 -20
- package/es/paste-table-helpers.js +11 -11
- package/lib/api/sheet.js +41 -6
- package/lib/canvas.js +1 -1
- package/lib/events/keyboard.js +3 -3
- package/lib/events/mouse.js +1 -1
- package/lib/events/paste.js +32 -16
- package/lib/modules/cell.js +8 -6
- package/lib/modules/cursor.d.ts +1 -0
- package/lib/modules/cursor.js +36 -0
- package/lib/modules/format.js +28 -37
- package/lib/modules/hyperlink.d.ts +2 -2
- package/lib/modules/hyperlink.js +6 -2
- package/lib/modules/selection.js +29 -7
- package/lib/modules/ssf.js +1 -1
- package/lib/modules/toolbar.js +33 -12
- package/lib/modules/validation.d.ts +10 -0
- package/lib/modules/validation.js +284 -20
- package/lib/paste-table-helpers.js +11 -11
- package/package.json +1 -1
package/lib/modules/cursor.d.ts
CHANGED
|
@@ -6,3 +6,4 @@ export declare function getSelectionCharacterOffsets(element: Node): {
|
|
|
6
6
|
end: number;
|
|
7
7
|
} | null;
|
|
8
8
|
export declare function setSelectionByCharacterOffset(element: HTMLDivElement, start: number, end: number): void;
|
|
9
|
+
export declare function getRangeRectsByCharacterOffset(element: HTMLDivElement, start: number, end: number): DOMRect[];
|
package/lib/modules/cursor.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.getRangeRectsByCharacterOffset = getRangeRectsByCharacterOffset;
|
|
6
7
|
exports.getSelectionCharacterOffsets = getSelectionCharacterOffsets;
|
|
7
8
|
exports.moveToEnd = moveToEnd;
|
|
8
9
|
exports.selectTextContent = selectTextContent;
|
|
@@ -124,4 +125,39 @@ function setSelectionByCharacterOffset(element, start, end) {
|
|
|
124
125
|
sel.removeAllRanges();
|
|
125
126
|
sel.addRange(range);
|
|
126
127
|
}
|
|
128
|
+
}
|
|
129
|
+
function getRangeRectsByCharacterOffset(element, start, end) {
|
|
130
|
+
if (start >= end) return [];
|
|
131
|
+
var charIndex = 0;
|
|
132
|
+
var startNode = null;
|
|
133
|
+
var startOffset = 0;
|
|
134
|
+
var endNode = null;
|
|
135
|
+
var endOffset = 0;
|
|
136
|
+
function walk(node) {
|
|
137
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
138
|
+
var len = (node.textContent || "").length;
|
|
139
|
+
if (startNode == null && charIndex + len > start) {
|
|
140
|
+
startNode = node;
|
|
141
|
+
startOffset = start - charIndex;
|
|
142
|
+
}
|
|
143
|
+
if (endNode == null && charIndex + len >= end) {
|
|
144
|
+
endNode = node;
|
|
145
|
+
endOffset = end - charIndex;
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
charIndex += len;
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
for (var i = 0; i < node.childNodes.length; i += 1) {
|
|
152
|
+
if (walk(node.childNodes[i])) return true;
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
walk(element);
|
|
157
|
+
if (!startNode || !endNode) return [];
|
|
158
|
+
var range = document.createRange();
|
|
159
|
+
range.setStart(startNode, startOffset);
|
|
160
|
+
range.setEnd(endNode, endOffset);
|
|
161
|
+
var rects = range.getClientRects();
|
|
162
|
+
return Array.from(rects);
|
|
127
163
|
}
|
package/lib/modules/format.js
CHANGED
|
@@ -21,29 +21,6 @@ function datenum_local(v, date1904) {
|
|
|
21
21
|
if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1000;else if (v >= base1904) epoch += 24 * 60 * 60 * 1000;
|
|
22
22
|
return (epoch - dnthresh_utc) / (24 * 60 * 60 * 1000);
|
|
23
23
|
}
|
|
24
|
-
var good_pd_date = new Date("2017-02-19T19:06:09.000Z");
|
|
25
|
-
if (Number.isNaN(good_pd_date.getFullYear())) good_pd_date = new Date("2/19/17");
|
|
26
|
-
var good_pd = good_pd_date.getFullYear() === 2017;
|
|
27
|
-
function parseDate(str, fixdate) {
|
|
28
|
-
var d = new Date(str);
|
|
29
|
-
if (good_pd) {
|
|
30
|
-
if (!_lodash.default.isNil(fixdate)) {
|
|
31
|
-
if (fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);else if (fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);
|
|
32
|
-
}
|
|
33
|
-
return d;
|
|
34
|
-
}
|
|
35
|
-
if (str instanceof Date) return str;
|
|
36
|
-
if (good_pd_date.getFullYear() === 1917 && !Number.isNaN(d.getFullYear())) {
|
|
37
|
-
var s = d.getFullYear();
|
|
38
|
-
if (str.indexOf("".concat(s)) > -1) return d;
|
|
39
|
-
d.setFullYear(d.getFullYear() + 100);
|
|
40
|
-
return d;
|
|
41
|
-
}
|
|
42
|
-
var n = str.match(/\d+/g) || ["2017", "2", "19", "0", "0", "0"];
|
|
43
|
-
var out = new Date(+n[0], +n[1] - 1, +n[2], +n[3] || 0, +n[4] || 0, +n[5] || 0);
|
|
44
|
-
if (str.indexOf("Z") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);
|
|
45
|
-
return out;
|
|
46
|
-
}
|
|
47
24
|
function genarate(value) {
|
|
48
25
|
var m = null;
|
|
49
26
|
var ct = {};
|
|
@@ -267,23 +244,37 @@ function genarate(value) {
|
|
|
267
244
|
t: "n"
|
|
268
245
|
};
|
|
269
246
|
v = parseFloat(value);
|
|
270
|
-
} else if (
|
|
271
|
-
|
|
272
|
-
if (
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
247
|
+
} else if (typeof value === "string") {
|
|
248
|
+
var df = (0, _validation.detectDateFormat)(value.toString());
|
|
249
|
+
if (df) {
|
|
250
|
+
var dateObj = new Date(df.year, df.month - 1, df.day, df.hours, df.minutes, df.seconds);
|
|
251
|
+
v = datenum_local(dateObj);
|
|
252
|
+
ct.t = "d";
|
|
253
|
+
var map = {
|
|
254
|
+
"yyyy-MM-dd": "dd/MM/yyyy",
|
|
255
|
+
"yyyy-MM-dd HH:mm": "dd/MM/yyyy",
|
|
256
|
+
"yyyy-MM-ddTHH:mm": "dd/MM/yyyy",
|
|
257
|
+
"yyyy/MM/dd": "dd/MM/yyyy",
|
|
258
|
+
"yyyy/MM/dd HH:mm": "dd/MM/yyyy",
|
|
259
|
+
"yyyy.MM.dd": "yyyy.MM.dd",
|
|
260
|
+
"MM/dd/yyyy h:mm AM/PM": "MM/dd/yyyy h:mm AM/PM",
|
|
261
|
+
"MM/dd/yyyy": "MM/dd/yyyy",
|
|
262
|
+
"M/d/yyyy": "M/d/yyyy",
|
|
263
|
+
"MM/dd/yy": "MM/dd/yy",
|
|
264
|
+
"dd/MM/yyyy": "dd/MM/yyyy",
|
|
265
|
+
"dd-MM-yyyy": "dd/MM/yyyy",
|
|
266
|
+
"dd.MM.yyyy": "dd.MM.yyyy",
|
|
267
|
+
named: "dd/MM/yyyy"
|
|
268
|
+
};
|
|
269
|
+
ct.fa = map[df.formatType] || "dd/MM/yyyy";
|
|
270
|
+
m = _ssf.default.format(ct.fa, v);
|
|
280
271
|
} else {
|
|
281
|
-
|
|
272
|
+
m = value.toString();
|
|
273
|
+
ct.fa = "General";
|
|
274
|
+
ct.t = "g";
|
|
282
275
|
}
|
|
283
|
-
ct.t = "d";
|
|
284
|
-
m = _ssf.default.format(ct.fa, v);
|
|
285
276
|
} else {
|
|
286
|
-
m = value;
|
|
277
|
+
m = value.toString();
|
|
287
278
|
ct.fa = "General";
|
|
288
279
|
ct.t = "g";
|
|
289
280
|
}
|
|
@@ -13,14 +13,14 @@ export declare function saveHyperlink(ctx: Context, r: number, c: number, linkTe
|
|
|
13
13
|
cellInput?: HTMLDivElement | null;
|
|
14
14
|
}): void;
|
|
15
15
|
export declare function removeHyperlink(ctx: Context, r: number, c: number): void;
|
|
16
|
-
export declare function showLinkCard(ctx: Context, r: number, c: number,
|
|
16
|
+
export declare function showLinkCard(ctx: Context, r: number, c: number, options?: {
|
|
17
17
|
applyToSelection?: boolean;
|
|
18
18
|
originText?: string;
|
|
19
19
|
selectionOffsets?: {
|
|
20
20
|
start: number;
|
|
21
21
|
end: number;
|
|
22
22
|
};
|
|
23
|
-
}): void;
|
|
23
|
+
}, isEditing?: boolean, isMouseDown?: boolean): void;
|
|
24
24
|
export declare function goToLink(ctx: Context, r: number, c: number, linkType: string, linkAddress: string, scrollbarX: HTMLDivElement, scrollbarY: HTMLDivElement): void;
|
|
25
25
|
export declare function isLinkValid(ctx: Context, linkType: string, linkAddress: string): {
|
|
26
26
|
isValid: boolean;
|
package/lib/modules/hyperlink.js
CHANGED
|
@@ -127,7 +127,7 @@ function removeHyperlink(ctx, r, c) {
|
|
|
127
127
|
}
|
|
128
128
|
ctx.linkCard = undefined;
|
|
129
129
|
}
|
|
130
|
-
function showLinkCard(ctx, r, c, isEditing, isMouseDown
|
|
130
|
+
function showLinkCard(ctx, r, c, options, isEditing, isMouseDown) {
|
|
131
131
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
132
132
|
if (isEditing === void 0) {
|
|
133
133
|
isEditing = false;
|
|
@@ -146,7 +146,11 @@ function showLinkCard(ctx, r, c, isEditing, isMouseDown, options) {
|
|
|
146
146
|
if (isEditing || link != null && (!((_f = ctx.linkCard) === null || _f === void 0 ? void 0 : _f.isEditing) || isMouseDown) || ((_g = ctx.linkCard) === null || _g === void 0 ? void 0 : _g.sheetId) !== ctx.currentSheetId) {
|
|
147
147
|
var col_pre = c - 1 === -1 ? 0 : ctx.visibledatacolumn[c - 1];
|
|
148
148
|
var row = ctx.visibledatarow[r];
|
|
149
|
-
var originText =
|
|
149
|
+
var originText = function () {
|
|
150
|
+
if ((options === null || options === void 0 ? void 0 : options.originText) !== undefined) return options.originText;
|
|
151
|
+
if ((cell === null || cell === void 0 ? void 0 : cell.v) == null) return "";
|
|
152
|
+
return "".concat(cell.v);
|
|
153
|
+
}();
|
|
150
154
|
ctx.linkCard = {
|
|
151
155
|
sheetId: ctx.currentSheetId,
|
|
152
156
|
r: r,
|
package/lib/modules/selection.js
CHANGED
|
@@ -1648,6 +1648,7 @@ function deleteSelectedCellFormat(ctx) {
|
|
|
1648
1648
|
return "success";
|
|
1649
1649
|
}
|
|
1650
1650
|
function fillRightData(ctx) {
|
|
1651
|
+
var _a, _b;
|
|
1651
1652
|
var allowEdit = (0, _utils.isAllowEdit)(ctx);
|
|
1652
1653
|
if (allowEdit === false) {
|
|
1653
1654
|
return "allowEdit";
|
|
@@ -1675,10 +1676,20 @@ function fillRightData(ctx) {
|
|
|
1675
1676
|
var r2 = selection[s].row[1];
|
|
1676
1677
|
var c1 = selection[s].column[0];
|
|
1677
1678
|
var c2 = selection[s].column[1];
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
d[
|
|
1679
|
+
var isSingleCell = r1 === r2 && c1 === c2;
|
|
1680
|
+
if (isSingleCell) {
|
|
1681
|
+
if (c1 - 1 >= 0 && d[r1]) {
|
|
1682
|
+
var prev = d[r1][c1 - 1];
|
|
1683
|
+
d[r1][c1] = prev != null ? __assign({}, prev) : {};
|
|
1684
|
+
}
|
|
1685
|
+
} else {
|
|
1686
|
+
for (var r = r1; r <= r2; r += 1) {
|
|
1687
|
+
var sourceCell = (_a = d[r]) === null || _a === void 0 ? void 0 : _a[c1];
|
|
1688
|
+
for (var c = c1 + 1; c <= c2; c += 1) {
|
|
1689
|
+
if (d[r]) {
|
|
1690
|
+
d[r][c] = sourceCell != null ? __assign({}, sourceCell) : (_b = d[r][c]) !== null && _b !== void 0 ? _b : {};
|
|
1691
|
+
}
|
|
1692
|
+
}
|
|
1682
1693
|
}
|
|
1683
1694
|
}
|
|
1684
1695
|
}
|
|
@@ -1686,6 +1697,7 @@ function fillRightData(ctx) {
|
|
|
1686
1697
|
return "success";
|
|
1687
1698
|
}
|
|
1688
1699
|
function fillDownData(ctx) {
|
|
1700
|
+
var _a, _b;
|
|
1689
1701
|
var allowEdit = (0, _utils.isAllowEdit)(ctx);
|
|
1690
1702
|
if (allowEdit === false) {
|
|
1691
1703
|
return "allowEdit";
|
|
@@ -1713,10 +1725,20 @@ function fillDownData(ctx) {
|
|
|
1713
1725
|
var r2 = selection[s].row[1];
|
|
1714
1726
|
var c1 = selection[s].column[0];
|
|
1715
1727
|
var c2 = selection[s].column[1];
|
|
1716
|
-
|
|
1728
|
+
var isSingleCell = r1 === r2 && c1 === c2;
|
|
1729
|
+
if (isSingleCell) {
|
|
1730
|
+
if (r1 - 1 >= 0 && d[r1 - 1]) {
|
|
1731
|
+
var prev = d[r1 - 1][c1];
|
|
1732
|
+
if (!d[r1]) d[r1] = [];
|
|
1733
|
+
d[r1][c1] = prev != null ? __assign({}, prev) : {};
|
|
1734
|
+
}
|
|
1735
|
+
} else {
|
|
1717
1736
|
for (var c = c1; c <= c2; c += 1) {
|
|
1718
|
-
var
|
|
1719
|
-
|
|
1737
|
+
var sourceCell = (_a = d[r1]) === null || _a === void 0 ? void 0 : _a[c];
|
|
1738
|
+
for (var r = r1 + 1; r <= r2; r += 1) {
|
|
1739
|
+
if (!d[r]) d[r] = [];
|
|
1740
|
+
d[r][c] = sourceCell != null ? __assign({}, sourceCell) : (_b = d[r][c]) !== null && _b !== void 0 ? _b : {};
|
|
1741
|
+
}
|
|
1720
1742
|
}
|
|
1721
1743
|
}
|
|
1722
1744
|
}
|
package/lib/modules/ssf.js
CHANGED
|
@@ -1370,7 +1370,7 @@ var make_ssf = function make_ssf(SSF) {
|
|
|
1370
1370
|
if (typeof n !== "number" || !Number.isFinite(n)) return null;
|
|
1371
1371
|
if (!Number.isInteger(n)) return null;
|
|
1372
1372
|
if (n < 0) return null;
|
|
1373
|
-
var minSec =
|
|
1373
|
+
var minSec = 100000; // Excel serial numbers max ~73050 for year 2100; avoids collision
|
|
1374
1374
|
var maxSec = 4102444800; // ~2100-01-01
|
|
1375
1375
|
var minMs = minSec * 1000;
|
|
1376
1376
|
var maxMs = maxSec * 1000;
|
package/lib/modules/toolbar.js
CHANGED
|
@@ -36,8 +36,8 @@ var _context = require("../context");
|
|
|
36
36
|
var _utils = require("../utils");
|
|
37
37
|
var _cell = require("./cell");
|
|
38
38
|
var _color = require("./color");
|
|
39
|
-
var _format = require("./format");
|
|
40
39
|
var _cursor = require("./cursor");
|
|
40
|
+
var _format = require("./format");
|
|
41
41
|
var _formula2 = require("./formula");
|
|
42
42
|
var _inlineString = require("./inline-string");
|
|
43
43
|
var _location = require("./location");
|
|
@@ -67,21 +67,42 @@ function updateFormatCell(ctx, d, attr, foucsStatus, row_st, row_ed, col_st, col
|
|
|
67
67
|
} else {
|
|
68
68
|
value = cell;
|
|
69
69
|
}
|
|
70
|
+
var type = "n";
|
|
71
|
+
if ((0, _format.is_date)(foucsStatus) || foucsStatus === 14 || foucsStatus === 15 || foucsStatus === 16 || foucsStatus === 17 || foucsStatus === 18 || foucsStatus === 19 || foucsStatus === 20 || foucsStatus === 21 || foucsStatus === 22 || foucsStatus === 45 || foucsStatus === 46 || foucsStatus === 47) {
|
|
72
|
+
type = "d";
|
|
73
|
+
} else if (foucsStatus === "@" || foucsStatus === 49) {
|
|
74
|
+
type = "s";
|
|
75
|
+
}
|
|
70
76
|
if (_lodash.default.isNil(value)) {
|
|
77
|
+
if (!_lodash.default.isNil(d[r])) {
|
|
78
|
+
if (_lodash.default.isNil(d[r][c])) {
|
|
79
|
+
d[r][c] = {
|
|
80
|
+
ct: {
|
|
81
|
+
fa: foucsStatus,
|
|
82
|
+
t: type
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
} else if (_lodash.default.isPlainObject(d[r][c])) {
|
|
86
|
+
if (_lodash.default.isNil(d[r][c].ct)) d[r][c].ct = {};
|
|
87
|
+
d[r][c].ct.fa = foucsStatus;
|
|
88
|
+
d[r][c].ct.t = type;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
71
91
|
continue;
|
|
72
92
|
}
|
|
73
93
|
if (foucsStatus !== "@" && (0, _validation.isRealNum)(value)) {
|
|
74
94
|
value = Number(value);
|
|
95
|
+
} else if (type === "d" && typeof value === "string") {
|
|
96
|
+
var dateInfo = (0, _validation.detectDateFormat)(value);
|
|
97
|
+
if (dateInfo) {
|
|
98
|
+
var dateObj = new Date(dateInfo.year, dateInfo.month - 1, dateInfo.day, dateInfo.hours, dateInfo.minutes, dateInfo.seconds);
|
|
99
|
+
value = (0, _format.datenum_local)(dateObj);
|
|
100
|
+
}
|
|
75
101
|
}
|
|
76
|
-
|
|
77
|
-
var type = "n";
|
|
78
|
-
if ((0, _format.is_date)(foucsStatus) || foucsStatus === 14 || foucsStatus === 15 || foucsStatus === 16 || foucsStatus === 17 || foucsStatus === 18 || foucsStatus === 19 || foucsStatus === 20 || foucsStatus === 21 || foucsStatus === 22 || foucsStatus === 45 || foucsStatus === 46 || foucsStatus === 47) {
|
|
79
|
-
type = "d";
|
|
80
|
-
} else if (foucsStatus === "@" || foucsStatus === 49) {
|
|
81
|
-
type = "s";
|
|
82
|
-
} else if (foucsStatus === "General" || foucsStatus === 0) {
|
|
102
|
+
if (foucsStatus === "General" || foucsStatus === 0) {
|
|
83
103
|
type = (0, _validation.isRealNum)(value) ? "n" : "g";
|
|
84
104
|
}
|
|
105
|
+
var mask = (0, _format.update)(foucsStatus, value);
|
|
85
106
|
if (cell && _lodash.default.isPlainObject(cell)) {
|
|
86
107
|
cell.m = "".concat(mask);
|
|
87
108
|
if (_lodash.default.isNil(cell.ct)) {
|
|
@@ -89,7 +110,7 @@ function updateFormatCell(ctx, d, attr, foucsStatus, row_st, row_ed, col_st, col
|
|
|
89
110
|
}
|
|
90
111
|
cell.ct.fa = foucsStatus;
|
|
91
112
|
cell.ct.t = type;
|
|
92
|
-
cell.v = String(value);
|
|
113
|
+
cell.v = typeof value === "number" ? value : String(value);
|
|
93
114
|
cell.fc = cell.fc || ((_f = (_e = (_d = cell.ct) === null || _d === void 0 ? void 0 : _d.s) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.fc);
|
|
94
115
|
cell.bl = cell.bl || ((_j = (_h = (_g = cell.ct) === null || _g === void 0 ? void 0 : _g.s) === null || _h === void 0 ? void 0 : _h[0]) === null || _j === void 0 ? void 0 : _j.bl);
|
|
95
116
|
cell.it = cell.it || ((_m = (_l = (_k = cell.ct) === null || _k === void 0 ? void 0 : _k.s) === null || _l === void 0 ? void 0 : _l[0]) === null || _m === void 0 ? void 0 : _m.it);
|
|
@@ -102,7 +123,7 @@ function updateFormatCell(ctx, d, attr, foucsStatus, row_st, row_ed, col_st, col
|
|
|
102
123
|
fa: foucsStatus,
|
|
103
124
|
t: type
|
|
104
125
|
},
|
|
105
|
-
v: value,
|
|
126
|
+
v: typeof value === "number" ? value : value,
|
|
106
127
|
m: mask
|
|
107
128
|
};
|
|
108
129
|
}
|
|
@@ -1028,11 +1049,11 @@ function handleLink(ctx, cellInput) {
|
|
|
1028
1049
|
}
|
|
1029
1050
|
}
|
|
1030
1051
|
}
|
|
1031
|
-
(0, _hyperlink.showLinkCard)(ctx, r, c,
|
|
1052
|
+
(0, _hyperlink.showLinkCard)(ctx, r, c, {
|
|
1032
1053
|
applyToSelection: applyToSelection || undefined,
|
|
1033
1054
|
originText: originText,
|
|
1034
1055
|
selectionOffsets: selectionOffsets
|
|
1035
|
-
});
|
|
1056
|
+
}, true, false);
|
|
1036
1057
|
}
|
|
1037
1058
|
var handlerMap = {
|
|
1038
1059
|
"currency-format": handleCurrencyFormat,
|
|
@@ -15,6 +15,16 @@ export declare function valueIsError(value: string): boolean;
|
|
|
15
15
|
export declare function isRealNull(val: any): boolean;
|
|
16
16
|
export declare function isHexValue(str: string): boolean;
|
|
17
17
|
export declare function isRealNum(val: any): boolean;
|
|
18
|
+
export type DateFormatInfo = {
|
|
19
|
+
year: number;
|
|
20
|
+
month: number;
|
|
21
|
+
day: number;
|
|
22
|
+
hours: number;
|
|
23
|
+
minutes: number;
|
|
24
|
+
seconds: number;
|
|
25
|
+
formatType: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function detectDateFormat(str: string): DateFormatInfo | null;
|
|
18
28
|
export declare function isdatetime(s: any): boolean;
|
|
19
29
|
export declare function diff(now: any, then: any): number;
|
|
20
30
|
export declare function isdatatypemulti(s: any): any;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.detectDateFormat = detectDateFormat;
|
|
6
7
|
exports.detectErrorFromValue = detectErrorFromValue;
|
|
7
8
|
exports.diff = diff;
|
|
8
9
|
exports.errorMessagesFromValue = exports.error = void 0;
|
|
@@ -56,33 +57,296 @@ function isRealNum(val) {
|
|
|
56
57
|
}
|
|
57
58
|
return !Number.isNaN(Number(val));
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
var MONTH_NAME_MAP = {
|
|
61
|
+
january: 1,
|
|
62
|
+
february: 2,
|
|
63
|
+
march: 3,
|
|
64
|
+
april: 4,
|
|
65
|
+
may: 5,
|
|
66
|
+
june: 6,
|
|
67
|
+
july: 7,
|
|
68
|
+
august: 8,
|
|
69
|
+
september: 9,
|
|
70
|
+
october: 10,
|
|
71
|
+
november: 11,
|
|
72
|
+
december: 12,
|
|
73
|
+
jan: 1,
|
|
74
|
+
feb: 2,
|
|
75
|
+
mar: 3,
|
|
76
|
+
apr: 4,
|
|
77
|
+
jun: 6,
|
|
78
|
+
jul: 7,
|
|
79
|
+
aug: 8,
|
|
80
|
+
sep: 9,
|
|
81
|
+
oct: 10,
|
|
82
|
+
nov: 11,
|
|
83
|
+
dec: 12
|
|
84
|
+
};
|
|
85
|
+
var MONTH_NAMES_RE = "january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|jun|jul|aug|sep|oct|nov|dec";
|
|
86
|
+
var MONTH_ABBR_RE = "jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec";
|
|
87
|
+
function isValidDateParts(year, month, day) {
|
|
88
|
+
if (year < 1900) return false;
|
|
89
|
+
if (month < 1 || month > 12) return false;
|
|
90
|
+
if (day < 1 || day > 31) return false;
|
|
91
|
+
if (month === 2) {
|
|
92
|
+
var isLeap = new Date(year, 1, 29).getDate() === 29;
|
|
93
|
+
if (isLeap && day > 29) return false;
|
|
94
|
+
if (!isLeap && day > 28) return false;
|
|
64
95
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
96
|
+
if ([4, 6, 9, 11].includes(month) && day > 30) return false;
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
function detectDateFormat(str) {
|
|
100
|
+
if (!str || str.toString().length < 5) return null;
|
|
101
|
+
var s = str.toString().trim();
|
|
102
|
+
var m;
|
|
103
|
+
m = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?$/.exec(s);
|
|
104
|
+
if (m) {
|
|
105
|
+
var y = +m[1];
|
|
106
|
+
var mo = +m[2];
|
|
107
|
+
var d = +m[3];
|
|
108
|
+
var h = +m[4];
|
|
109
|
+
var mi = +m[5];
|
|
110
|
+
var sec = m[6] != null ? +m[6] : 0;
|
|
111
|
+
if (isValidDateParts(y, mo, d)) {
|
|
112
|
+
return {
|
|
113
|
+
year: y,
|
|
114
|
+
month: mo,
|
|
115
|
+
day: d,
|
|
116
|
+
hours: h,
|
|
117
|
+
minutes: mi,
|
|
118
|
+
seconds: sec,
|
|
119
|
+
formatType: "yyyy-MM-ddTHH:mm"
|
|
120
|
+
};
|
|
121
|
+
}
|
|
70
122
|
}
|
|
71
|
-
|
|
72
|
-
|
|
123
|
+
m = /^(\d{4})-(\d{1,2})-(\d{1,2})(?:\s(\d{1,2}):(\d{2})(?::(\d{2}))?)?$/.exec(s);
|
|
124
|
+
if (m) {
|
|
125
|
+
var y = +m[1];
|
|
126
|
+
var mo = +m[2];
|
|
127
|
+
var d = +m[3];
|
|
128
|
+
if (isValidDateParts(y, mo, d)) {
|
|
129
|
+
var h = m[4] != null ? +m[4] : 0;
|
|
130
|
+
var mi = m[5] != null ? +m[5] : 0;
|
|
131
|
+
var sec = m[6] != null ? +m[6] : 0;
|
|
132
|
+
return {
|
|
133
|
+
year: y,
|
|
134
|
+
month: mo,
|
|
135
|
+
day: d,
|
|
136
|
+
hours: h,
|
|
137
|
+
minutes: mi,
|
|
138
|
+
seconds: sec,
|
|
139
|
+
formatType: m[4] != null ? "yyyy-MM-dd HH:mm" : "yyyy-MM-dd"
|
|
140
|
+
};
|
|
141
|
+
}
|
|
73
142
|
}
|
|
74
|
-
|
|
75
|
-
|
|
143
|
+
m = /^(\d{4})\/(\d{1,2})\/(\d{1,2})(?:\s(\d{1,2}):(\d{2})(?::(\d{2}))?)?$/.exec(s);
|
|
144
|
+
if (m) {
|
|
145
|
+
var y = +m[1];
|
|
146
|
+
var mo = +m[2];
|
|
147
|
+
var d = +m[3];
|
|
148
|
+
if (isValidDateParts(y, mo, d)) {
|
|
149
|
+
var h = m[4] != null ? +m[4] : 0;
|
|
150
|
+
var mi = m[5] != null ? +m[5] : 0;
|
|
151
|
+
var sec = m[6] != null ? +m[6] : 0;
|
|
152
|
+
return {
|
|
153
|
+
year: y,
|
|
154
|
+
month: mo,
|
|
155
|
+
day: d,
|
|
156
|
+
hours: h,
|
|
157
|
+
minutes: mi,
|
|
158
|
+
seconds: sec,
|
|
159
|
+
formatType: m[4] != null ? "yyyy/MM/dd HH:mm" : "yyyy/MM/dd"
|
|
160
|
+
};
|
|
161
|
+
}
|
|
76
162
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
163
|
+
m = /^(\d{4})\.(\d{1,2})\.(\d{1,2})$/.exec(s);
|
|
164
|
+
if (m) {
|
|
165
|
+
var y = +m[1];
|
|
166
|
+
var mo = +m[2];
|
|
167
|
+
var d = +m[3];
|
|
168
|
+
if (isValidDateParts(y, mo, d)) {
|
|
169
|
+
return {
|
|
170
|
+
year: y,
|
|
171
|
+
month: mo,
|
|
172
|
+
day: d,
|
|
173
|
+
hours: 0,
|
|
174
|
+
minutes: 0,
|
|
175
|
+
seconds: 0,
|
|
176
|
+
formatType: "yyyy.MM.dd"
|
|
177
|
+
};
|
|
80
178
|
}
|
|
81
|
-
|
|
82
|
-
|
|
179
|
+
}
|
|
180
|
+
m = /^(\d{1,2})\/(\d{1,2})\/(\d{4})\s(\d{1,2}):(\d{2})\s?(AM|PM)$/i.exec(s);
|
|
181
|
+
if (m) {
|
|
182
|
+
var p1 = +m[1];
|
|
183
|
+
var p2 = +m[2];
|
|
184
|
+
var y = +m[3];
|
|
185
|
+
var h = +m[4];
|
|
186
|
+
var mi = +m[5];
|
|
187
|
+
var ampm = m[6].toUpperCase();
|
|
188
|
+
if (p1 <= 12 && isValidDateParts(y, p1, p2)) {
|
|
189
|
+
var actualH = h;
|
|
190
|
+
if (ampm === "PM" && h !== 12) actualH = h + 12;
|
|
191
|
+
if (ampm === "AM" && h === 12) actualH = 0;
|
|
192
|
+
return {
|
|
193
|
+
year: y,
|
|
194
|
+
month: p1,
|
|
195
|
+
day: p2,
|
|
196
|
+
hours: actualH,
|
|
197
|
+
minutes: mi,
|
|
198
|
+
seconds: 0,
|
|
199
|
+
formatType: "MM/dd/yyyy h:mm AM/PM"
|
|
200
|
+
};
|
|
83
201
|
}
|
|
84
202
|
}
|
|
85
|
-
|
|
203
|
+
m = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/.exec(s);
|
|
204
|
+
if (m) {
|
|
205
|
+
var p1 = +m[1];
|
|
206
|
+
var p2 = +m[2];
|
|
207
|
+
var y = +m[3];
|
|
208
|
+
if (p1 > 12 && isValidDateParts(y, p2, p1)) {
|
|
209
|
+
return {
|
|
210
|
+
year: y,
|
|
211
|
+
month: p2,
|
|
212
|
+
day: p1,
|
|
213
|
+
hours: 0,
|
|
214
|
+
minutes: 0,
|
|
215
|
+
seconds: 0,
|
|
216
|
+
formatType: "dd/MM/yyyy"
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
if (p2 > 12 && p1 <= 12 && isValidDateParts(y, p1, p2)) {
|
|
220
|
+
var formatType = m[1].length === 1 ? "M/d/yyyy" : "MM/dd/yyyy";
|
|
221
|
+
return {
|
|
222
|
+
year: y,
|
|
223
|
+
month: p1,
|
|
224
|
+
day: p2,
|
|
225
|
+
hours: 0,
|
|
226
|
+
minutes: 0,
|
|
227
|
+
seconds: 0,
|
|
228
|
+
formatType: formatType
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
if (p1 <= 12 && p2 <= 31 && isValidDateParts(y, p1, p2)) {
|
|
232
|
+
var formatType = m[1].length === 1 ? "M/d/yyyy" : "MM/dd/yyyy";
|
|
233
|
+
return {
|
|
234
|
+
year: y,
|
|
235
|
+
month: p1,
|
|
236
|
+
day: p2,
|
|
237
|
+
hours: 0,
|
|
238
|
+
minutes: 0,
|
|
239
|
+
seconds: 0,
|
|
240
|
+
formatType: formatType
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
m = /^(\d{2})\/(\d{2})\/(\d{2})$/.exec(s);
|
|
245
|
+
if (m) {
|
|
246
|
+
var p1 = +m[1];
|
|
247
|
+
var p2 = +m[2];
|
|
248
|
+
var y = 2000 + +m[3];
|
|
249
|
+
if (p1 <= 12 && p2 <= 31 && isValidDateParts(y, p1, p2)) {
|
|
250
|
+
return {
|
|
251
|
+
year: y,
|
|
252
|
+
month: p1,
|
|
253
|
+
day: p2,
|
|
254
|
+
hours: 0,
|
|
255
|
+
minutes: 0,
|
|
256
|
+
seconds: 0,
|
|
257
|
+
formatType: "MM/dd/yy"
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
m = /^(\d{1,2})-(\d{1,2})-(\d{4})$/.exec(s);
|
|
262
|
+
if (m) {
|
|
263
|
+
var p1 = +m[1];
|
|
264
|
+
var p2 = +m[2];
|
|
265
|
+
var y = +m[3];
|
|
266
|
+
if (p1 > 12 && isValidDateParts(y, p2, p1)) {
|
|
267
|
+
return {
|
|
268
|
+
year: y,
|
|
269
|
+
month: p2,
|
|
270
|
+
day: p1,
|
|
271
|
+
hours: 0,
|
|
272
|
+
minutes: 0,
|
|
273
|
+
seconds: 0,
|
|
274
|
+
formatType: "dd-MM-yyyy"
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
m = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/.exec(s);
|
|
279
|
+
if (m) {
|
|
280
|
+
var p1 = +m[1];
|
|
281
|
+
var p2 = +m[2];
|
|
282
|
+
var y = +m[3];
|
|
283
|
+
if (p1 > 12 && isValidDateParts(y, p2, p1)) {
|
|
284
|
+
return {
|
|
285
|
+
year: y,
|
|
286
|
+
month: p2,
|
|
287
|
+
day: p1,
|
|
288
|
+
hours: 0,
|
|
289
|
+
minutes: 0,
|
|
290
|
+
seconds: 0,
|
|
291
|
+
formatType: "dd.MM.yyyy"
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
m = new RegExp("^(".concat(MONTH_NAMES_RE, ")\\s+(\\d{1,2}),?\\s+(\\d{4})$"), "i").exec(s);
|
|
296
|
+
if (m) {
|
|
297
|
+
var mo = MONTH_NAME_MAP[m[1].toLowerCase()];
|
|
298
|
+
var d = +m[2];
|
|
299
|
+
var y = +m[3];
|
|
300
|
+
if (mo && isValidDateParts(y, mo, d)) {
|
|
301
|
+
return {
|
|
302
|
+
year: y,
|
|
303
|
+
month: mo,
|
|
304
|
+
day: d,
|
|
305
|
+
hours: 0,
|
|
306
|
+
minutes: 0,
|
|
307
|
+
seconds: 0,
|
|
308
|
+
formatType: "named"
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
m = new RegExp("^(\\d{1,2})\\s+(".concat(MONTH_NAMES_RE, ")\\s+(\\d{4})$"), "i").exec(s);
|
|
313
|
+
if (m) {
|
|
314
|
+
var d = +m[1];
|
|
315
|
+
var mo = MONTH_NAME_MAP[m[2].toLowerCase()];
|
|
316
|
+
var y = +m[3];
|
|
317
|
+
if (mo && isValidDateParts(y, mo, d)) {
|
|
318
|
+
return {
|
|
319
|
+
year: y,
|
|
320
|
+
month: mo,
|
|
321
|
+
day: d,
|
|
322
|
+
hours: 0,
|
|
323
|
+
minutes: 0,
|
|
324
|
+
seconds: 0,
|
|
325
|
+
formatType: "named"
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
m = new RegExp("^(".concat(MONTH_ABBR_RE, ")-(\\d{1,2})-(\\d{4})$"), "i").exec(s);
|
|
330
|
+
if (m) {
|
|
331
|
+
var mo = MONTH_NAME_MAP[m[1].toLowerCase()];
|
|
332
|
+
var d = +m[2];
|
|
333
|
+
var y = +m[3];
|
|
334
|
+
if (mo && isValidDateParts(y, mo, d)) {
|
|
335
|
+
return {
|
|
336
|
+
year: y,
|
|
337
|
+
month: mo,
|
|
338
|
+
day: d,
|
|
339
|
+
hours: 0,
|
|
340
|
+
minutes: 0,
|
|
341
|
+
seconds: 0,
|
|
342
|
+
formatType: "named"
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
function checkDateTime(str) {
|
|
349
|
+
return detectDateFormat(str) !== null;
|
|
86
350
|
}
|
|
87
351
|
function isdatetime(s) {
|
|
88
352
|
if (s === null || s.toString().length < 5) {
|