@fileverse-dev/fortune-core 1.3.11-input-ref → 1.3.11-input-ref-2
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/events/keyboard.d.ts +1 -1
- package/es/events/keyboard.js +129 -15
- package/es/events/mouse.js +45 -26
- package/es/modules/cell.js +39 -1
- package/es/modules/formula.d.ts +7 -0
- package/es/modules/formula.js +130 -40
- package/es/types.d.ts +2 -0
- package/lib/events/keyboard.d.ts +1 -1
- package/lib/events/keyboard.js +128 -14
- package/lib/events/mouse.js +44 -25
- package/lib/modules/cell.js +38 -0
- package/lib/modules/formula.d.ts +7 -0
- package/lib/modules/formula.js +137 -41
- package/lib/types.d.ts +2 -0
- package/package.json +1 -1
package/lib/events/mouse.js
CHANGED
|
@@ -196,6 +196,7 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
|
|
|
196
196
|
ctx.luckysheet_scroll_status = true;
|
|
197
197
|
if (ctx.luckysheetCellUpdate.length > 0) {
|
|
198
198
|
if (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || (0, _modules.israngeseleciton)(ctx)) {
|
|
199
|
+
var formulaEditorForCmdComma = (0, _modules.getFormulaEditorOwner)(ctx) === "fx" && fxInput ? fxInput : cellInput;
|
|
199
200
|
var rowseleted = [row_index, row_index_ed];
|
|
200
201
|
var columnseleted = [col_index, col_index_ed];
|
|
201
202
|
var left = col_pre;
|
|
@@ -262,13 +263,14 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
|
|
|
262
263
|
last.top_move = top_1;
|
|
263
264
|
last.height_move = height;
|
|
264
265
|
ctx.formulaCache.func_selectedrange = last;
|
|
265
|
-
} else if (e.ctrlKey && ((_g = _lodash.default.last(
|
|
266
|
-
var
|
|
266
|
+
} else if ((e.ctrlKey || e.metaKey) && ((_g = _lodash.default.last(formulaEditorForCmdComma.querySelectorAll("span"))) === null || _g === void 0 ? void 0 : _g.innerText) !== ",") {
|
|
267
|
+
var didCmdCommaFormulaHtml = false;
|
|
268
|
+
var vText = formulaEditorForCmdComma.innerText;
|
|
267
269
|
if (vText[vText.length - 1] === ")") {
|
|
268
270
|
vText = vText.substring(0, vText.length - 1);
|
|
269
271
|
}
|
|
270
272
|
if (vText.length > 0) {
|
|
271
|
-
var lastWord = vText.
|
|
273
|
+
var lastWord = vText.slice(-1);
|
|
272
274
|
if (lastWord !== "," && lastWord !== "=" && lastWord !== "(") {
|
|
273
275
|
vText += ",";
|
|
274
276
|
}
|
|
@@ -284,15 +286,21 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
|
|
|
284
286
|
ctx.formulaCache.functionRangeIndex = textRange;
|
|
285
287
|
}
|
|
286
288
|
cellInput.innerHTML = vText;
|
|
289
|
+
if (fxInput) fxInput.innerHTML = vText;
|
|
287
290
|
(0, _cell.cancelFunctionrangeSelected)(ctx);
|
|
288
291
|
(0, _modules.createRangeHightlight)(ctx, vText);
|
|
292
|
+
didCmdCommaFormulaHtml = true;
|
|
289
293
|
}
|
|
290
294
|
ctx.formulaCache.rangestart = false;
|
|
291
295
|
ctx.formulaCache.rangedrag_column_start = false;
|
|
292
296
|
ctx.formulaCache.rangedrag_row_start = false;
|
|
293
|
-
|
|
294
|
-
(0, _modules.rangeHightlightselected)(ctx, cellInput);
|
|
297
|
+
(0, _modules.rangeHightlightselected)(ctx, formulaEditorForCmdComma);
|
|
295
298
|
(0, _modules.israngeseleciton)(ctx);
|
|
299
|
+
if (didCmdCommaFormulaHtml) {
|
|
300
|
+
ctx.formulaCache.rangechangeindex = undefined;
|
|
301
|
+
var ch = formulaEditorForCmdComma.childNodes;
|
|
302
|
+
ctx.formulaCache.rangeSetValueTo = ch.length > 0 ? ch[ch.length - 1] : undefined;
|
|
303
|
+
}
|
|
296
304
|
ctx.formulaCache.func_selectedrange = {
|
|
297
305
|
left: left,
|
|
298
306
|
width: width,
|
|
@@ -326,6 +334,7 @@ function handleCellAreaMouseDown(ctx, globalCache, e, cellInput, container, fxIn
|
|
|
326
334
|
ctx.formulaCache.rangestart = true;
|
|
327
335
|
ctx.formulaCache.rangedrag_column_start = false;
|
|
328
336
|
ctx.formulaCache.rangedrag_row_start = false;
|
|
337
|
+
ctx.formulaCache.rangeSelectionActive = true;
|
|
329
338
|
(0, _modules.rangeSetValue)(ctx, cellInput, {
|
|
330
339
|
row: rowseleted,
|
|
331
340
|
column: columnseleted
|
|
@@ -504,6 +513,8 @@ function handleCellAreaDoubleClick(ctx, globalCache, settings, e, container) {
|
|
|
504
513
|
row_index = row_focus;
|
|
505
514
|
col_index = column_focus;
|
|
506
515
|
}
|
|
516
|
+
globalCache.enteredEditByTyping = false;
|
|
517
|
+
delete globalCache.pendingTypeOverCell;
|
|
507
518
|
(0, _cell.luckysheetUpdateCell)(ctx, row_index, col_index);
|
|
508
519
|
}
|
|
509
520
|
function handleContextMenu(ctx, settings, e, workbookContainer, container, area) {
|
|
@@ -971,7 +982,7 @@ function handleOverlayMouseMove(ctx, globalCache, e, cellInput, scrollX, scrollY
|
|
|
971
982
|
}
|
|
972
983
|
}
|
|
973
984
|
function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollbarY, container, cellInput, fxInput) {
|
|
974
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m
|
|
985
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
975
986
|
var rect = container.getBoundingClientRect();
|
|
976
987
|
(0, _modules.onImageMoveEnd)(ctx, globalCache);
|
|
977
988
|
(0, _modules.onImageResizeEnd)(ctx, globalCache);
|
|
@@ -984,11 +995,17 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
|
|
|
984
995
|
(0, _hyperlink.onRangeSelectionModalMoveEnd)(globalCache);
|
|
985
996
|
(0, _modules.onCellsMoveEnd)(ctx, globalCache, e, scrollbarX, scrollbarY, container);
|
|
986
997
|
if (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start) {
|
|
987
|
-
if ((
|
|
998
|
+
if ((0, _modules.getFormulaEditorOwner)(ctx) === "fx") {
|
|
988
999
|
(0, _formula.handleFormulaInput)(ctx, cellInput, fxInput, 0, undefined, false);
|
|
989
1000
|
} else {
|
|
990
1001
|
(0, _formula.handleFormulaInput)(ctx, fxInput, cellInput, 0, undefined, false);
|
|
991
1002
|
}
|
|
1003
|
+
ctx.luckysheet_select_status = false;
|
|
1004
|
+
ctx.luckysheet_scroll_status = false;
|
|
1005
|
+
ctx.luckysheet_rows_selected_status = false;
|
|
1006
|
+
ctx.luckysheet_cols_selected_status = false;
|
|
1007
|
+
e.preventDefault();
|
|
1008
|
+
return;
|
|
992
1009
|
}
|
|
993
1010
|
if (ctx.luckysheet_select_status) {
|
|
994
1011
|
if (ctx.luckysheetPaintModelOn) {
|
|
@@ -1030,10 +1047,10 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
|
|
|
1030
1047
|
cfg_1.customHeight[ctx.luckysheet_rows_change_size_start[1]] = 1;
|
|
1031
1048
|
var changeRowIndex_1 = ctx.luckysheet_rows_change_size_start[1];
|
|
1032
1049
|
var changeRowSelected_1 = false;
|
|
1033
|
-
if (((
|
|
1034
|
-
(
|
|
1050
|
+
if (((_b = (_a = ctx.luckysheet_select_save) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0) {
|
|
1051
|
+
(_d = (_c = ctx.luckysheet_select_save) === null || _c === void 0 ? void 0 : _c.filter(function (select) {
|
|
1035
1052
|
return select.row_select;
|
|
1036
|
-
})) === null ||
|
|
1053
|
+
})) === null || _d === void 0 ? void 0 : _d.some(function (select) {
|
|
1037
1054
|
if (changeRowIndex_1 >= select.row[0] && changeRowIndex_1 <= select.row[1]) {
|
|
1038
1055
|
changeRowSelected_1 = true;
|
|
1039
1056
|
}
|
|
@@ -1042,9 +1059,9 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
|
|
|
1042
1059
|
}
|
|
1043
1060
|
if (changeRowSelected_1) {
|
|
1044
1061
|
cfg_1.rowlen || (cfg_1.rowlen = {});
|
|
1045
|
-
(
|
|
1062
|
+
(_f = (_e = ctx.luckysheet_select_save) === null || _e === void 0 ? void 0 : _e.filter(function (select) {
|
|
1046
1063
|
return select.row_select;
|
|
1047
|
-
})) === null ||
|
|
1064
|
+
})) === null || _f === void 0 ? void 0 : _f.forEach(function (select) {
|
|
1048
1065
|
for (var r = select.row[0]; r <= select.row[1]; r += 1) {
|
|
1049
1066
|
cfg_1.rowlen[r] = Math.ceil(size_1 / ctx.zoomRatio);
|
|
1050
1067
|
}
|
|
@@ -1088,10 +1105,10 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
|
|
|
1088
1105
|
cfg_2.customWidth[ctx.luckysheet_cols_change_size_start[1]] = 1;
|
|
1089
1106
|
var changeColumnIndex_1 = ctx.luckysheet_cols_change_size_start[1];
|
|
1090
1107
|
var changeColumnSelected_1 = false;
|
|
1091
|
-
if (((
|
|
1092
|
-
(
|
|
1108
|
+
if (((_h = (_g = ctx.luckysheet_select_save) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0) > 0) {
|
|
1109
|
+
(_k = (_j = ctx.luckysheet_select_save) === null || _j === void 0 ? void 0 : _j.filter(function (select) {
|
|
1093
1110
|
return select.column_select;
|
|
1094
|
-
})) === null ||
|
|
1111
|
+
})) === null || _k === void 0 ? void 0 : _k.some(function (select) {
|
|
1095
1112
|
if (changeColumnIndex_1 >= select.column[0] && changeColumnIndex_1 <= select.column[1]) {
|
|
1096
1113
|
changeColumnSelected_1 = true;
|
|
1097
1114
|
}
|
|
@@ -1100,9 +1117,9 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
|
|
|
1100
1117
|
}
|
|
1101
1118
|
if (changeColumnSelected_1) {
|
|
1102
1119
|
cfg_2.columnlen || (cfg_2.columnlen = {});
|
|
1103
|
-
(
|
|
1120
|
+
(_m = (_l = ctx.luckysheet_select_save) === null || _l === void 0 ? void 0 : _l.filter(function (select) {
|
|
1104
1121
|
return select.column_select;
|
|
1105
|
-
})) === null ||
|
|
1122
|
+
})) === null || _m === void 0 ? void 0 : _m.forEach(function (select) {
|
|
1106
1123
|
for (var r = select.column[0]; r <= select.column[1]; r += 1) {
|
|
1107
1124
|
cfg_2.columnlen[r] = Math.ceil(size_2 / ctx.zoomRatio);
|
|
1108
1125
|
}
|
|
@@ -1119,10 +1136,10 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
|
|
|
1119
1136
|
ctx.luckysheet_cols_freeze_drag = false;
|
|
1120
1137
|
var scrollLeft = ctx.scrollLeft;
|
|
1121
1138
|
var x = e.pageX - rect.left - ctx.rowHeaderWidth + scrollLeft - window.scrollX;
|
|
1122
|
-
var
|
|
1123
|
-
col_pre =
|
|
1124
|
-
col_curr =
|
|
1125
|
-
col_index_curr =
|
|
1139
|
+
var _o = (0, _location.colLocation)(x, ctx.visibledatacolumn),
|
|
1140
|
+
col_pre = _o[0],
|
|
1141
|
+
col_curr = _o[1],
|
|
1142
|
+
col_index_curr = _o[2];
|
|
1126
1143
|
var col_index = x > (col_curr + col_pre) / 2 ? col_index_curr : col_index_curr - 1;
|
|
1127
1144
|
var idx = (0, _utils.getSheetIndex)(ctx, ctx.currentSheetId);
|
|
1128
1145
|
if (idx == null) return;
|
|
@@ -1170,10 +1187,10 @@ function handleOverlayMouseUp(ctx, globalCache, settings, e, scrollbarX, scrollb
|
|
|
1170
1187
|
ctx.luckysheet_rows_freeze_drag = false;
|
|
1171
1188
|
var scrollTop = ctx.scrollTop;
|
|
1172
1189
|
var y = e.pageY - rect.top - ctx.columnHeaderHeight + scrollTop - window.scrollY;
|
|
1173
|
-
var
|
|
1174
|
-
row_pre =
|
|
1175
|
-
row_curr =
|
|
1176
|
-
row_index_curr =
|
|
1190
|
+
var _p = (0, _location.rowLocation)(y, ctx.visibledatarow),
|
|
1191
|
+
row_pre = _p[0],
|
|
1192
|
+
row_curr = _p[1],
|
|
1193
|
+
row_index_curr = _p[2];
|
|
1177
1194
|
var row_index = y > (row_curr + row_pre) / 2 ? row_index_curr : row_index_curr - 1;
|
|
1178
1195
|
var idx = (0, _utils.getSheetIndex)(ctx, ctx.currentSheetId);
|
|
1179
1196
|
if (idx == null) return;
|
|
@@ -1357,6 +1374,7 @@ function handleRowHeaderMouseDown(ctx, globalCache, e, container, cellInput, fxI
|
|
|
1357
1374
|
ctx.formulaCache.rangedrag_row_start = true;
|
|
1358
1375
|
ctx.formulaCache.rangestart = false;
|
|
1359
1376
|
ctx.formulaCache.rangedrag_column_start = false;
|
|
1377
|
+
ctx.formulaCache.rangeSelectionActive = true;
|
|
1360
1378
|
ctx.formulaCache.selectingRangeIndex = ctx.formulaCache.rangechangeindex;
|
|
1361
1379
|
if (ctx.formulaCache.rangechangeindex > ctx.formulaRangeHighlight.length) {
|
|
1362
1380
|
(0, _modules.createRangeHightlight)(ctx, cellInput.innerHTML, ctx.formulaCache.rangechangeindex);
|
|
@@ -1589,6 +1607,7 @@ function handleColumnHeaderMouseDown(ctx, globalCache, e, container, cellInput,
|
|
|
1589
1607
|
ctx.formulaCache.rangedrag_column_start = true;
|
|
1590
1608
|
ctx.formulaCache.rangestart = false;
|
|
1591
1609
|
ctx.formulaCache.rangedrag_row_start = false;
|
|
1610
|
+
ctx.formulaCache.rangeSelectionActive = true;
|
|
1592
1611
|
ctx.formulaCache.selectingRangeIndex = ctx.formulaCache.rangechangeindex;
|
|
1593
1612
|
if (ctx.formulaCache.rangechangeindex > ctx.formulaRangeHighlight.length) {
|
|
1594
1613
|
(0, _modules.createRangeHightlight)(ctx, cellInput.innerHTML, ctx.formulaCache.rangechangeindex);
|
package/lib/modules/cell.js
CHANGED
|
@@ -102,6 +102,32 @@ function newlinesToBr(text) {
|
|
|
102
102
|
if (!text) return "";
|
|
103
103
|
return text.replace(/\r\n|\r|\n/g, "<br />");
|
|
104
104
|
}
|
|
105
|
+
function closeUnclosedParenthesesInFormula(formula) {
|
|
106
|
+
if (!formula.startsWith("=") || formula.length <= 1) return formula;
|
|
107
|
+
var body = formula.slice(1);
|
|
108
|
+
var depth = 0;
|
|
109
|
+
var inString = false;
|
|
110
|
+
for (var i = 0; i < body.length; i += 1) {
|
|
111
|
+
var ch = body[i];
|
|
112
|
+
if (inString) {
|
|
113
|
+
if (ch === '"') {
|
|
114
|
+
if (body[i + 1] === '"') {
|
|
115
|
+
i += 1;
|
|
116
|
+
} else {
|
|
117
|
+
inString = false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (ch === '"') {
|
|
123
|
+
inString = true;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (ch === "(") depth += 1;else if (ch === ")") depth = Math.max(0, depth - 1);
|
|
127
|
+
}
|
|
128
|
+
if (depth <= 0) return formula;
|
|
129
|
+
return "".concat(formula).concat(")".repeat(depth));
|
|
130
|
+
}
|
|
105
131
|
function getCellValue(r, c, data, attr) {
|
|
106
132
|
var _a;
|
|
107
133
|
if (!attr) {
|
|
@@ -575,6 +601,7 @@ function cancelNormalSelected(ctx) {
|
|
|
575
601
|
ctx.formulaCache.rangedrag_column_start = false;
|
|
576
602
|
ctx.formulaCache.rangedrag_row_start = false;
|
|
577
603
|
ctx.formulaCache.rangeSelectionActive = null;
|
|
604
|
+
ctx.formulaCache.formulaEditorOwner = null;
|
|
578
605
|
}
|
|
579
606
|
function updateCell(ctx, r, c, $input, value, canvas) {
|
|
580
607
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
@@ -650,6 +677,11 @@ function updateCell(ctx, r, c, $input, value, canvas) {
|
|
|
650
677
|
}
|
|
651
678
|
}
|
|
652
679
|
value = value || inputText;
|
|
680
|
+
if (_lodash.default.isString(value) && value.startsWith("=") && value.length > 1) {
|
|
681
|
+
value = closeUnclosedParenthesesInFormula(value);
|
|
682
|
+
} else if (_lodash.default.isPlainObject(value) && _lodash.default.isString(value.f) && value.f.startsWith("=") && value.f.length > 1) {
|
|
683
|
+
value.f = closeUnclosedParenthesesInFormula(value.f);
|
|
684
|
+
}
|
|
653
685
|
var shouldClearError = (oldValue_1 === null || oldValue_1 === void 0 ? void 0 : oldValue_1.f) ? oldValue_1.f !== value : (oldValue_1 === null || oldValue_1 === void 0 ? void 0 : oldValue_1.v) !== value;
|
|
654
686
|
if (shouldClearError) {
|
|
655
687
|
(0, _api.clearCellError)(ctx, r, c);
|
|
@@ -1258,6 +1290,12 @@ function getdatabyselection(ctx, range, sheetId) {
|
|
|
1258
1290
|
return data;
|
|
1259
1291
|
}
|
|
1260
1292
|
function luckysheetUpdateCell(ctx, row_index, col_index) {
|
|
1293
|
+
var _a;
|
|
1294
|
+
var flowdata = (0, _context.getFlowdata)(ctx);
|
|
1295
|
+
var cell = (_a = flowdata === null || flowdata === void 0 ? void 0 : flowdata[row_index]) === null || _a === void 0 ? void 0 : _a[col_index];
|
|
1296
|
+
if ((cell === null || cell === void 0 ? void 0 : cell.f) != null && String(cell.f).trim() !== "") {
|
|
1297
|
+
(0, _formula.suppressFormulaRangeSelectionForInitialEdit)(ctx);
|
|
1298
|
+
}
|
|
1261
1299
|
ctx.luckysheetCellUpdate = [row_index, col_index];
|
|
1262
1300
|
}
|
|
1263
1301
|
function getDataBySelectionNoCopy(ctx, range) {
|
package/lib/modules/formula.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export declare class FormulaCache {
|
|
|
21
21
|
rangedrag_column_start?: boolean;
|
|
22
22
|
rangedrag_row_start?: boolean;
|
|
23
23
|
rangeSelectionActive?: boolean | null;
|
|
24
|
+
formulaEditorOwner?: "cell" | "fx" | null;
|
|
24
25
|
functionRangeIndex?: number[];
|
|
25
26
|
functionlistMap: any;
|
|
26
27
|
execFunctionExist?: any[];
|
|
@@ -47,6 +48,12 @@ export declare function rangeHightlightselected(ctx: Context, $editor: HTMLDivEl
|
|
|
47
48
|
export declare function functionHTMLGenerate(txt: string): string;
|
|
48
49
|
export declare function getLastFormulaRangeIndex($editor: HTMLDivElement): number | null;
|
|
49
50
|
export declare function getFormulaRangeIndexAtCaret($editor: HTMLDivElement): number | null;
|
|
51
|
+
export declare function setFormulaEditorOwner(ctx: Context, owner: "cell" | "fx" | null): void;
|
|
52
|
+
export declare function getFormulaEditorOwner(ctx: Context): "cell" | "fx" | null;
|
|
53
|
+
export declare function hasIncompleteTruncatedCellRangeSyntax(formulaText: string): boolean;
|
|
54
|
+
export declare function isBareCellOrRangeOnlyFormula(formulaText: string): boolean;
|
|
55
|
+
export declare function suppressFormulaRangeSelectionForInitialEdit(ctx: Context): void;
|
|
56
|
+
export declare function isCaretAtValidFormulaRangeInsertionPoint(editor: HTMLElement | null): boolean;
|
|
50
57
|
export declare function markRangeSelectionDirty(ctx: Context): void;
|
|
51
58
|
export declare function getFormulaRangeIndexForKeyboardSync($editor: HTMLDivElement): number | null;
|
|
52
59
|
export declare function handleFormulaInput(ctx: Context, $copyTo: HTMLDivElement | null | undefined, $editor: HTMLDivElement, kcode: number, preText?: string, refreshRangeSelect?: boolean): void;
|
package/lib/modules/formula.js
CHANGED
|
@@ -13,6 +13,7 @@ exports.functionCopy = functionCopy;
|
|
|
13
13
|
exports.functionHTMLGenerate = functionHTMLGenerate;
|
|
14
14
|
exports.functionStrChange = functionStrChange;
|
|
15
15
|
exports.getAllFunctionGroup = getAllFunctionGroup;
|
|
16
|
+
exports.getFormulaEditorOwner = getFormulaEditorOwner;
|
|
16
17
|
exports.getFormulaRangeIndexAtCaret = getFormulaRangeIndexAtCaret;
|
|
17
18
|
exports.getFormulaRangeIndexForKeyboardSync = getFormulaRangeIndexForKeyboardSync;
|
|
18
19
|
exports.getLastFormulaRangeIndex = getLastFormulaRangeIndex;
|
|
@@ -20,7 +21,10 @@ exports.getcellrange = getcellrange;
|
|
|
20
21
|
exports.getrangeseleciton = getrangeseleciton;
|
|
21
22
|
exports.groupValuesRefresh = groupValuesRefresh;
|
|
22
23
|
exports.handleFormulaInput = handleFormulaInput;
|
|
24
|
+
exports.hasIncompleteTruncatedCellRangeSyntax = hasIncompleteTruncatedCellRangeSyntax;
|
|
23
25
|
exports.insertUpdateFunctionGroup = insertUpdateFunctionGroup;
|
|
26
|
+
exports.isBareCellOrRangeOnlyFormula = isBareCellOrRangeOnlyFormula;
|
|
27
|
+
exports.isCaretAtValidFormulaRangeInsertionPoint = isCaretAtValidFormulaRangeInsertionPoint;
|
|
24
28
|
exports.isFormulaReferenceInputMode = isFormulaReferenceInputMode;
|
|
25
29
|
exports.iscelldata = iscelldata;
|
|
26
30
|
exports.israngeseleciton = israngeseleciton;
|
|
@@ -34,6 +38,8 @@ exports.rangeDragRow = rangeDragRow;
|
|
|
34
38
|
exports.rangeHightlightselected = rangeHightlightselected;
|
|
35
39
|
exports.rangeSetValue = rangeSetValue;
|
|
36
40
|
exports.setCaretPosition = setCaretPosition;
|
|
41
|
+
exports.setFormulaEditorOwner = setFormulaEditorOwner;
|
|
42
|
+
exports.suppressFormulaRangeSelectionForInitialEdit = suppressFormulaRangeSelectionForInitialEdit;
|
|
37
43
|
var _formulaParser = require("@fileverse-dev/formula-parser");
|
|
38
44
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
39
45
|
var _context = require("../context");
|
|
@@ -44,7 +50,6 @@ var _locale = require("../locale");
|
|
|
44
50
|
var _color = require("./color");
|
|
45
51
|
var _location = require("./location");
|
|
46
52
|
var _2 = require(".");
|
|
47
|
-
var _index = require("../utils/index");
|
|
48
53
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
49
54
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
50
55
|
var __assign = void 0 && (void 0).__assign || function () {
|
|
@@ -93,6 +98,7 @@ var FormulaCache = exports.FormulaCache = function () {
|
|
|
93
98
|
this.data_parm_index = 0;
|
|
94
99
|
this.selectingRangeIndex = -1;
|
|
95
100
|
this.rangeSelectionActive = null;
|
|
101
|
+
this.formulaEditorOwner = null;
|
|
96
102
|
this.functionlistMap = {};
|
|
97
103
|
this.execFunctionGlobalData = {};
|
|
98
104
|
this.cellTextToIndexList = {};
|
|
@@ -1666,6 +1672,115 @@ function getFormulaRangeIndexAtCaret($editor) {
|
|
|
1666
1672
|
var n = parseInt(ri, 10);
|
|
1667
1673
|
return Number.isNaN(n) ? null : n;
|
|
1668
1674
|
}
|
|
1675
|
+
function setFormulaEditorOwner(ctx, owner) {
|
|
1676
|
+
ctx.formulaCache.formulaEditorOwner = owner;
|
|
1677
|
+
}
|
|
1678
|
+
function getFormulaEditorOwner(ctx) {
|
|
1679
|
+
var _a, _b;
|
|
1680
|
+
var cachedOwner = ctx.formulaCache.formulaEditorOwner;
|
|
1681
|
+
if (cachedOwner === "cell" || cachedOwner === "fx") {
|
|
1682
|
+
return cachedOwner;
|
|
1683
|
+
}
|
|
1684
|
+
if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id) === "luckysheet-functionbox-cell") {
|
|
1685
|
+
return "fx";
|
|
1686
|
+
}
|
|
1687
|
+
if (((_b = document.activeElement) === null || _b === void 0 ? void 0 : _b.id) === "luckysheet-rich-text-editor") {
|
|
1688
|
+
return "cell";
|
|
1689
|
+
}
|
|
1690
|
+
return null;
|
|
1691
|
+
}
|
|
1692
|
+
function getActiveFormulaEditorElement(ctx) {
|
|
1693
|
+
var _a;
|
|
1694
|
+
var cellEditor = document.getElementById("luckysheet-rich-text-editor");
|
|
1695
|
+
var fxEditor = document.getElementById("luckysheet-functionbox-cell");
|
|
1696
|
+
var owner = getFormulaEditorOwner(ctx);
|
|
1697
|
+
if (owner === "fx") return fxEditor !== null && fxEditor !== void 0 ? fxEditor : cellEditor;
|
|
1698
|
+
if (owner === "cell") return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
|
|
1699
|
+
var activeId = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id;
|
|
1700
|
+
if (activeId === "luckysheet-functionbox-cell") return fxEditor !== null && fxEditor !== void 0 ? fxEditor : cellEditor;
|
|
1701
|
+
if (activeId === "luckysheet-rich-text-editor") return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
|
|
1702
|
+
return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
|
|
1703
|
+
}
|
|
1704
|
+
function getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset) {
|
|
1705
|
+
var textBefore = editor.innerText.slice(0, caretOffset);
|
|
1706
|
+
var parts = textBefore.split(/[=,(+\-*/&<>]/);
|
|
1707
|
+
return _lodash.default.trim(parts[parts.length - 1] || "");
|
|
1708
|
+
}
|
|
1709
|
+
function hasIncompleteTruncatedCellRangeSyntax(formulaText) {
|
|
1710
|
+
var t = formulaText.replace(/\s/g, "");
|
|
1711
|
+
if (!t.startsWith("=")) return false;
|
|
1712
|
+
if (/[A-Za-z]+\d+:[A-Za-z]+$/i.test(t)) return true;
|
|
1713
|
+
if (/[A-Za-z]+\d+:\s*$/i.test(t)) return true;
|
|
1714
|
+
return false;
|
|
1715
|
+
}
|
|
1716
|
+
function isBareCellOrRangeOnlyFormula(formulaText) {
|
|
1717
|
+
var t = formulaText.trim();
|
|
1718
|
+
if (!t.startsWith("=")) return false;
|
|
1719
|
+
var body = t.slice(1).trim();
|
|
1720
|
+
if (!body) return false;
|
|
1721
|
+
if (body.includes("(") || body.includes(")")) return false;
|
|
1722
|
+
return iscelldata(body);
|
|
1723
|
+
}
|
|
1724
|
+
function suppressFormulaRangeSelectionForInitialEdit(ctx) {
|
|
1725
|
+
ctx.formulaCache.rangeSelectionActive = false;
|
|
1726
|
+
ctx.formulaCache.rangestart = false;
|
|
1727
|
+
ctx.formulaCache.rangedrag_column_start = false;
|
|
1728
|
+
ctx.formulaCache.rangedrag_row_start = false;
|
|
1729
|
+
}
|
|
1730
|
+
function isCaretAtValidFormulaRangeInsertionPoint(editor) {
|
|
1731
|
+
var currSelection = window.getSelection();
|
|
1732
|
+
if (!editor || !currSelection || currSelection.rangeCount === 0) {
|
|
1733
|
+
return false;
|
|
1734
|
+
}
|
|
1735
|
+
var anchorNode = currSelection.anchorNode;
|
|
1736
|
+
if (anchorNode && !editor.contains(anchorNode)) {
|
|
1737
|
+
return false;
|
|
1738
|
+
}
|
|
1739
|
+
var inputText = editor.innerText.trim();
|
|
1740
|
+
if (!inputText.startsWith("=")) {
|
|
1741
|
+
return false;
|
|
1742
|
+
}
|
|
1743
|
+
if (hasIncompleteTruncatedCellRangeSyntax(inputText)) {
|
|
1744
|
+
return false;
|
|
1745
|
+
}
|
|
1746
|
+
if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
|
|
1747
|
+
return false;
|
|
1748
|
+
}
|
|
1749
|
+
if (isBareCellOrRangeOnlyFormula(inputText)) {
|
|
1750
|
+
return false;
|
|
1751
|
+
}
|
|
1752
|
+
var caretRange = currSelection.getRangeAt(0).cloneRange();
|
|
1753
|
+
var preCaretRange = document.createRange();
|
|
1754
|
+
preCaretRange.selectNodeContents(editor);
|
|
1755
|
+
preCaretRange.setEnd(caretRange.endContainer, caretRange.endOffset);
|
|
1756
|
+
var caretOffset = preCaretRange.toString().length;
|
|
1757
|
+
var slotTextBeforeCaret = getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset);
|
|
1758
|
+
if (slotTextBeforeCaret.length > 0 && !iscelldata(slotTextBeforeCaret)) {
|
|
1759
|
+
return false;
|
|
1760
|
+
}
|
|
1761
|
+
var textAfter = editor.innerText.slice(caretOffset);
|
|
1762
|
+
var remaining = textAfter.replace(/^\s+/, "");
|
|
1763
|
+
if (remaining.length === 0) {
|
|
1764
|
+
var atCaret = getFormulaRangeIndexAtCaret(editor);
|
|
1765
|
+
if (atCaret !== null) {
|
|
1766
|
+
return true;
|
|
1767
|
+
}
|
|
1768
|
+
var textBefore = editor.innerText.slice(0, caretOffset).trimEnd();
|
|
1769
|
+
var lastCh = textBefore.slice(-1);
|
|
1770
|
+
if (!lastCh) {
|
|
1771
|
+
return false;
|
|
1772
|
+
}
|
|
1773
|
+
if (lastCh === ")") {
|
|
1774
|
+
return false;
|
|
1775
|
+
}
|
|
1776
|
+
if (/^[=,(+\-*/&%^<>]$/.test(lastCh)) {
|
|
1777
|
+
return true;
|
|
1778
|
+
}
|
|
1779
|
+
return false;
|
|
1780
|
+
}
|
|
1781
|
+
var first = remaining[0];
|
|
1782
|
+
return first === "," || first === ")" || first === "&" || first in operatorjson;
|
|
1783
|
+
}
|
|
1669
1784
|
function hasCommaOrAnotherRefAfterRangeCell(cell) {
|
|
1670
1785
|
var _a, _b;
|
|
1671
1786
|
var n = cell.nextSibling;
|
|
@@ -1772,9 +1887,7 @@ function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refreshRangeS
|
|
|
1772
1887
|
functionRange(ctx, $editor, value, value1);
|
|
1773
1888
|
if (refreshRangeSelect) {
|
|
1774
1889
|
(0, _2.cancelFunctionrangeSelected)(ctx);
|
|
1775
|
-
|
|
1776
|
-
createRangeHightlight(ctx, value);
|
|
1777
|
-
}
|
|
1890
|
+
createRangeHightlight(ctx, value);
|
|
1778
1891
|
ctx.formulaCache.rangestart = false;
|
|
1779
1892
|
ctx.formulaCache.rangedrag_column_start = false;
|
|
1780
1893
|
ctx.formulaCache.rangedrag_row_start = false;
|
|
@@ -2060,31 +2173,7 @@ function israngeseleciton(ctx, istooltip) {
|
|
|
2060
2173
|
return true;
|
|
2061
2174
|
}
|
|
2062
2175
|
var editor = ((_a = anchorElement.closest) === null || _a === void 0 ? void 0 : _a.call(anchorElement, "#luckysheet-rich-text-editor, #luckysheet-functionbox-cell")) || ((_b = parentElement.closest) === null || _b === void 0 ? void 0 : _b.call(parentElement, "#luckysheet-rich-text-editor, #luckysheet-functionbox-cell")) || document.getElementById("luckysheet-rich-text-editor");
|
|
2063
|
-
|
|
2064
|
-
return true;
|
|
2065
|
-
}
|
|
2066
|
-
var inputText = editor.innerText.trim();
|
|
2067
|
-
if (!inputText.startsWith("=")) {
|
|
2068
|
-
return false;
|
|
2069
|
-
}
|
|
2070
|
-
if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
|
|
2071
|
-
return false;
|
|
2072
|
-
}
|
|
2073
|
-
var caretRange = currSelection.getRangeAt(0).cloneRange();
|
|
2074
|
-
var preCaretRange = document.createRange();
|
|
2075
|
-
preCaretRange.selectNodeContents(editor);
|
|
2076
|
-
preCaretRange.setEnd(caretRange.endContainer, caretRange.endOffset);
|
|
2077
|
-
var caretOffset = preCaretRange.toString().length;
|
|
2078
|
-
var textAfter = editor.innerText.slice(caretOffset);
|
|
2079
|
-
var remaining = textAfter.replace(/^\s+/, "");
|
|
2080
|
-
if (remaining.length === 0) {
|
|
2081
|
-
return true;
|
|
2082
|
-
}
|
|
2083
|
-
var first = remaining[0];
|
|
2084
|
-
if (first === "," || first === ")" || first === "&" || first in operatorjson) {
|
|
2085
|
-
return true;
|
|
2086
|
-
}
|
|
2087
|
-
return false;
|
|
2176
|
+
return isCaretAtValidFormulaRangeInsertionPoint(editor);
|
|
2088
2177
|
};
|
|
2089
2178
|
if (((_a = anchor === null || anchor === void 0 ? void 0 : anchor.parentNode) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === "span" && anchorOffset !== 0) {
|
|
2090
2179
|
var txt = _lodash.default.trim((_b = anchor.textContent) !== null && _b !== void 0 ? _b : "");
|
|
@@ -2145,12 +2234,15 @@ function israngeseleciton(ctx, istooltip) {
|
|
|
2145
2234
|
return false;
|
|
2146
2235
|
}
|
|
2147
2236
|
function isFormulaReferenceInputMode(ctx) {
|
|
2148
|
-
var editor =
|
|
2237
|
+
var editor = getActiveFormulaEditorElement(ctx);
|
|
2149
2238
|
var inputText = ((editor === null || editor === void 0 ? void 0 : editor.innerText) || "").trim();
|
|
2150
|
-
var
|
|
2151
|
-
if (
|
|
2239
|
+
var refFlowActive = !!ctx.formulaCache.rangestart || !!ctx.formulaCache.rangedrag_column_start || !!ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true;
|
|
2240
|
+
if (refFlowActive) {
|
|
2152
2241
|
return true;
|
|
2153
2242
|
}
|
|
2243
|
+
if (ctx.formulaCache.rangeSelectionActive === false) {
|
|
2244
|
+
return false;
|
|
2245
|
+
}
|
|
2154
2246
|
if (!inputText.startsWith("=")) {
|
|
2155
2247
|
return false;
|
|
2156
2248
|
}
|
|
@@ -2163,12 +2255,16 @@ function maybeRecoverDirtyRangeSelection(ctx) {
|
|
|
2163
2255
|
if (ctx.formulaCache.rangeSelectionActive !== false) {
|
|
2164
2256
|
return false;
|
|
2165
2257
|
}
|
|
2166
|
-
var editor =
|
|
2258
|
+
var editor = getActiveFormulaEditorElement(ctx);
|
|
2167
2259
|
if (!editor) {
|
|
2168
2260
|
return false;
|
|
2169
2261
|
}
|
|
2170
2262
|
var inputText = (editor.innerText || "").trim();
|
|
2171
|
-
if (inputText
|
|
2263
|
+
if (hasIncompleteTruncatedCellRangeSyntax(inputText)) {
|
|
2264
|
+
return false;
|
|
2265
|
+
}
|
|
2266
|
+
var atCaretRangeIndex = getFormulaRangeIndexAtCaret(editor);
|
|
2267
|
+
if (inputText.startsWith("=") && atCaretRangeIndex === null && isCaretAtValidFormulaRangeInsertionPoint(editor) && israngeseleciton(ctx)) {
|
|
2172
2268
|
ctx.formulaCache.rangeSelectionActive = null;
|
|
2173
2269
|
return true;
|
|
2174
2270
|
}
|
|
@@ -2269,14 +2365,14 @@ function functionStrChange(txt, type, rc, orient, stindex, step) {
|
|
|
2269
2365
|
return function_str;
|
|
2270
2366
|
}
|
|
2271
2367
|
function rangeSetValue(ctx, cellInput, selected, fxInput) {
|
|
2272
|
-
var _a, _b, _c, _d, _e, _f
|
|
2368
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2273
2369
|
var parser = new DOMParser();
|
|
2274
2370
|
var doc = parser.parseFromString("<div>".concat(cellInput.innerHTML, "</div>"), "text/html");
|
|
2275
2371
|
var spans = doc.querySelectorAll("span");
|
|
2276
2372
|
var lastSpan = spans[spans.length - 1];
|
|
2277
2373
|
var isManagedRangeSpan = (_b = (_a = lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.classList) === null || _a === void 0 ? void 0 : _a.contains("fortune-formula-functionrange-cell")) !== null && _b !== void 0 ? _b : false;
|
|
2278
|
-
if (lastSpan && (0,
|
|
2279
|
-
var htmlR = (0,
|
|
2374
|
+
if (lastSpan && (0, _utils.isLetterNumberPattern)(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !isManagedRangeSpan) {
|
|
2375
|
+
var htmlR = (0, _utils.removeLastSpan)(cellInput.innerHTML);
|
|
2280
2376
|
cellInput.innerHTML = "".concat(htmlR);
|
|
2281
2377
|
cellInput.focus();
|
|
2282
2378
|
var kids = cellInput.childNodes;
|
|
@@ -2284,7 +2380,7 @@ function rangeSetValue(ctx, cellInput, selected, fxInput) {
|
|
|
2284
2380
|
}
|
|
2285
2381
|
var $editor = cellInput;
|
|
2286
2382
|
var $copyTo = fxInput;
|
|
2287
|
-
if ((
|
|
2383
|
+
if (getFormulaEditorOwner(ctx) === "fx") {
|
|
2288
2384
|
$editor = fxInput;
|
|
2289
2385
|
$copyTo = cellInput;
|
|
2290
2386
|
}
|
|
@@ -2313,9 +2409,9 @@ function rangeSetValue(ctx, cellInput, selected, fxInput) {
|
|
|
2313
2409
|
refEle = ctx.formulaCache.rangeSetValueTo;
|
|
2314
2410
|
}
|
|
2315
2411
|
if (refEle && refEle.parentNode) {
|
|
2316
|
-
var leftPar = (
|
|
2317
|
-
if ((
|
|
2318
|
-
(
|
|
2412
|
+
var leftPar = (_c = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _c === void 0 ? void 0 : _c[0];
|
|
2413
|
+
if ((_d = leftPar === null || leftPar === void 0 ? void 0 : leftPar.parentElement) === null || _d === void 0 ? void 0 : _d.classList.contains("luckysheet-formula-text-color")) {
|
|
2414
|
+
(_f = (_e = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _e === void 0 ? void 0 : _e[0].parentNode) === null || _f === void 0 ? void 0 : _f.appendChild(newEle);
|
|
2319
2415
|
} else {
|
|
2320
2416
|
refEle.parentNode.insertBefore(newEle, refEle.nextSibling);
|
|
2321
2417
|
}
|
package/lib/types.d.ts
CHANGED