@fileverse-dev/fortune-core 1.3.10 → 1.3.11-input-ref-1
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/range.js +20 -0
- package/es/api/sheet.js +30 -2
- package/es/events/keyboard.js +50 -15
- package/es/events/mouse.js +62 -40
- package/es/events/paste.js +77 -28
- package/es/modules/cell.js +60 -2
- package/es/modules/comment.js +129 -24
- package/es/modules/dataVerification.js +34 -1
- package/es/modules/dropCell.js +65 -1
- package/es/modules/formula.d.ts +11 -0
- package/es/modules/formula.js +390 -47
- package/es/modules/hyperlink.js +52 -5
- package/es/modules/merge.js +93 -1
- package/es/modules/moveCells.js +35 -9
- package/es/modules/rowcol.js +75 -2
- package/es/modules/searchReplace.js +58 -2
- package/es/modules/selection.js +152 -42
- package/es/modules/sort.js +74 -9
- package/es/modules/splitColumn.js +21 -0
- package/es/modules/toolbar.js +46 -3
- package/es/settings.d.ts +5 -0
- package/lib/api/range.js +20 -0
- package/lib/api/sheet.js +29 -1
- package/lib/events/keyboard.js +49 -14
- package/lib/events/mouse.js +61 -39
- package/lib/events/paste.js +77 -28
- package/lib/modules/cell.js +60 -2
- package/lib/modules/comment.js +129 -24
- package/lib/modules/dataVerification.js +34 -1
- package/lib/modules/dropCell.js +65 -1
- package/lib/modules/formula.d.ts +11 -0
- package/lib/modules/formula.js +399 -47
- package/lib/modules/hyperlink.js +52 -5
- package/lib/modules/merge.js +93 -1
- package/lib/modules/moveCells.js +35 -9
- package/lib/modules/rowcol.js +75 -2
- package/lib/modules/searchReplace.js +58 -2
- package/lib/modules/selection.js +152 -42
- package/lib/modules/sort.js +74 -9
- package/lib/modules/splitColumn.js +21 -0
- package/lib/modules/toolbar.js +46 -3
- package/lib/settings.d.ts +5 -0
- package/package.json +1 -1
package/es/modules/formula.js
CHANGED
|
@@ -21,14 +21,13 @@ var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
|
|
|
21
21
|
import { Parser, ERROR_REF } from "@fileverse-dev/formula-parser";
|
|
22
22
|
import _ from "lodash";
|
|
23
23
|
import { getFlowdata } from "../context";
|
|
24
|
-
import { columnCharToIndex, escapeScriptTag, getSheetIndex, indexToColumnChar, getSheetIdByName, escapeHTMLTag } from "../utils";
|
|
24
|
+
import { columnCharToIndex, escapeScriptTag, getSheetIndex, indexToColumnChar, getSheetIdByName, escapeHTMLTag, isLetterNumberPattern, removeLastSpan } from "../utils";
|
|
25
25
|
import { getcellFormula, getRangetxt, mergeMoveMain, setCellValue } from "./cell";
|
|
26
26
|
import { error, detectErrorFromValue } from "./validation";
|
|
27
27
|
import { locale } from "../locale";
|
|
28
28
|
import { colors } from "./color";
|
|
29
29
|
import { colLocation, mousePosition, rowLocation } from "./location";
|
|
30
30
|
import { cancelFunctionrangeSelected, clearCellError, seletedHighlistByindex, setCellError, spillSortResult } from ".";
|
|
31
|
-
import { isLetterNumberPattern, removeLastSpan } from "../utils/index";
|
|
32
31
|
var functionHTMLIndex = 0;
|
|
33
32
|
var rangeIndexes = [];
|
|
34
33
|
var operatorPriority = {
|
|
@@ -55,6 +54,8 @@ var FormulaCache = function () {
|
|
|
55
54
|
var that = this;
|
|
56
55
|
this.data_parm_index = 0;
|
|
57
56
|
this.selectingRangeIndex = -1;
|
|
57
|
+
this.rangeSelectionActive = null;
|
|
58
|
+
this.formulaEditorOwner = null;
|
|
58
59
|
this.functionlistMap = {};
|
|
59
60
|
this.execFunctionGlobalData = {};
|
|
60
61
|
this.cellTextToIndexList = {};
|
|
@@ -785,6 +786,7 @@ function insertUpdateDynamicArray(ctx, dynamicArrayItem) {
|
|
|
785
786
|
return dynamicArray;
|
|
786
787
|
}
|
|
787
788
|
export function groupValuesRefresh(ctx) {
|
|
789
|
+
var _a, _b, _c;
|
|
788
790
|
var luckysheetfile = ctx.luckysheetfile;
|
|
789
791
|
if (ctx.groupValuesRefreshData.length > 0) {
|
|
790
792
|
for (var i = 0; i < ctx.groupValuesRefreshData.length; i += 1) {
|
|
@@ -807,6 +809,19 @@ export function groupValuesRefresh(ctx) {
|
|
|
807
809
|
updateValue.v = item.v;
|
|
808
810
|
updateValue.f = item.f;
|
|
809
811
|
setCellValue(ctx, item.r, item.c, data, updateValue);
|
|
812
|
+
if ((_a = ctx === null || ctx === void 0 ? void 0 : ctx.hooks) === null || _a === void 0 ? void 0 : _a.updateCellYdoc) {
|
|
813
|
+
ctx.hooks.updateCellYdoc([{
|
|
814
|
+
sheetId: item.id,
|
|
815
|
+
path: ["celldata"],
|
|
816
|
+
value: {
|
|
817
|
+
r: item.r,
|
|
818
|
+
c: item.c,
|
|
819
|
+
v: (_c = (_b = data === null || data === void 0 ? void 0 : data[item.r]) === null || _b === void 0 ? void 0 : _b[item.c]) !== null && _c !== void 0 ? _c : null
|
|
820
|
+
},
|
|
821
|
+
key: "".concat(item.r, "_").concat(item.c),
|
|
822
|
+
type: "update"
|
|
823
|
+
}]);
|
|
824
|
+
}
|
|
810
825
|
}
|
|
811
826
|
ctx.groupValuesRefreshData = [];
|
|
812
827
|
}
|
|
@@ -1272,8 +1287,7 @@ export function setCaretPosition(ctx, textDom, children, pos, parentTextDom) {
|
|
|
1272
1287
|
sel === null || sel === void 0 ? void 0 : sel.removeAllRanges();
|
|
1273
1288
|
sel === null || sel === void 0 ? void 0 : sel.addRange(range);
|
|
1274
1289
|
el.focus();
|
|
1275
|
-
} catch (
|
|
1276
|
-
console.error(err);
|
|
1290
|
+
} catch (_c) {
|
|
1277
1291
|
moveCursorToEnd(parentTextDom);
|
|
1278
1292
|
}
|
|
1279
1293
|
}
|
|
@@ -1358,7 +1372,7 @@ export function getrangeseleciton() {
|
|
|
1358
1372
|
return null;
|
|
1359
1373
|
}
|
|
1360
1374
|
function helpFunctionExe($editer, currSelection, ctx) {
|
|
1361
|
-
var _a;
|
|
1375
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1362
1376
|
var functionlist = locale(ctx).functionlist;
|
|
1363
1377
|
if (_.isEmpty(ctx.formulaCache.functionlistMap)) {
|
|
1364
1378
|
for (var i_1 = 0; i_1 < functionlist.length; i_1 += 1) {
|
|
@@ -1369,22 +1383,23 @@ function helpFunctionExe($editer, currSelection, ctx) {
|
|
|
1369
1383
|
return null;
|
|
1370
1384
|
}
|
|
1371
1385
|
var $prev = currSelection;
|
|
1372
|
-
var $span = $editer.querySelectorAll("span");
|
|
1373
|
-
var
|
|
1386
|
+
var $span = Array.from($editer.querySelectorAll("span"));
|
|
1387
|
+
var selectionSpan = currSelection.nodeType === Node.ELEMENT_NODE ? currSelection.closest("span") : (_a = currSelection.parentElement) === null || _a === void 0 ? void 0 : _a.closest("span");
|
|
1388
|
+
var currentIndex = selectionSpan ? $span.indexOf(selectionSpan) : -1;
|
|
1374
1389
|
var i = currentIndex;
|
|
1375
|
-
if ($prev == null) {
|
|
1390
|
+
if ($prev == null || currentIndex < 0 || !$span[currentIndex]) {
|
|
1376
1391
|
return null;
|
|
1377
1392
|
}
|
|
1378
1393
|
var funcName = null;
|
|
1379
1394
|
var paramindex = null;
|
|
1380
|
-
if ($span[i].classList.contains("luckysheet-formula-text-func")) {
|
|
1395
|
+
if ((_c = (_b = $span[i]) === null || _b === void 0 ? void 0 : _b.classList) === null || _c === void 0 ? void 0 : _c.contains("luckysheet-formula-text-func")) {
|
|
1381
1396
|
funcName = $span[i].textContent;
|
|
1382
1397
|
} else {
|
|
1383
1398
|
var $cur = null;
|
|
1384
1399
|
var exceptIndex = [-1, -1];
|
|
1385
1400
|
while (--i > 0) {
|
|
1386
1401
|
$cur = $span[i];
|
|
1387
|
-
if ($cur.classList.contains("luckysheet-formula-text-func") || _.trim($cur.textContent || "").toUpperCase() in ctx.formulaCache.functionlistMap) {
|
|
1402
|
+
if (((_d = $cur === null || $cur === void 0 ? void 0 : $cur.classList) === null || _d === void 0 ? void 0 : _d.contains("luckysheet-formula-text-func")) || _.trim($cur.textContent || "").toUpperCase() in ctx.formulaCache.functionlistMap) {
|
|
1388
1403
|
funcName = $cur.textContent;
|
|
1389
1404
|
paramindex = null;
|
|
1390
1405
|
var endstate = true;
|
|
@@ -1396,13 +1411,13 @@ function helpFunctionExe($editer, currSelection, ctx) {
|
|
|
1396
1411
|
continue;
|
|
1397
1412
|
}
|
|
1398
1413
|
$cur = $span[a];
|
|
1399
|
-
if ($cur.classList.contains("luckysheet-formula-text-rpar")) {
|
|
1414
|
+
if ((_e = $cur === null || $cur === void 0 ? void 0 : $cur.classList) === null || _e === void 0 ? void 0 : _e.contains("luckysheet-formula-text-rpar")) {
|
|
1400
1415
|
exceptIndex = [i, a];
|
|
1401
1416
|
funcName = null;
|
|
1402
1417
|
endstate = false;
|
|
1403
1418
|
break;
|
|
1404
1419
|
}
|
|
1405
|
-
if ($cur.classList.contains("luckysheet-formula-text-comma")) {
|
|
1420
|
+
if ((_f = $cur === null || $cur === void 0 ? void 0 : $cur.classList) === null || _f === void 0 ? void 0 : _f.contains("luckysheet-formula-text-comma")) {
|
|
1406
1421
|
paramindex += 1;
|
|
1407
1422
|
}
|
|
1408
1423
|
}
|
|
@@ -1435,6 +1450,7 @@ export function rangeHightlightselected(ctx, $editor) {
|
|
|
1435
1450
|
var funcName = helpFunctionExe($editor, currSelection, ctx);
|
|
1436
1451
|
ctx.functionHint = funcName === null || funcName === void 0 ? void 0 : funcName.toUpperCase();
|
|
1437
1452
|
ctx.functionCandidates = [];
|
|
1453
|
+
ctx.defaultCandidates = [];
|
|
1438
1454
|
}
|
|
1439
1455
|
}
|
|
1440
1456
|
function functionHTML(txt) {
|
|
@@ -1585,6 +1601,154 @@ function getRangeIndexes($editor) {
|
|
|
1585
1601
|
});
|
|
1586
1602
|
return res;
|
|
1587
1603
|
}
|
|
1604
|
+
export function getLastFormulaRangeIndex($editor) {
|
|
1605
|
+
var spans = Array.from($editor.querySelectorAll("span")).filter(function (span) {
|
|
1606
|
+
var _a;
|
|
1607
|
+
return (_a = span.textContent) === null || _a === void 0 ? void 0 : _a.trim().length;
|
|
1608
|
+
});
|
|
1609
|
+
var lastSpan = spans[spans.length - 1];
|
|
1610
|
+
if (!lastSpan) return null;
|
|
1611
|
+
if (!lastSpan.classList.contains("fortune-formula-functionrange-cell")) {
|
|
1612
|
+
return null;
|
|
1613
|
+
}
|
|
1614
|
+
var indexStr = lastSpan.getAttribute("rangeindex");
|
|
1615
|
+
if (!indexStr) return null;
|
|
1616
|
+
var rangeIndex = parseInt(indexStr, 10);
|
|
1617
|
+
return Number.isNaN(rangeIndex) ? null : rangeIndex;
|
|
1618
|
+
}
|
|
1619
|
+
export function getFormulaRangeIndexAtCaret($editor) {
|
|
1620
|
+
var sel = window.getSelection();
|
|
1621
|
+
if (!sel || sel.rangeCount === 0) return null;
|
|
1622
|
+
var anchorNode = sel.anchorNode;
|
|
1623
|
+
if (!anchorNode) return null;
|
|
1624
|
+
var el = anchorNode.nodeType === Node.ELEMENT_NODE ? anchorNode : anchorNode.parentElement;
|
|
1625
|
+
if (!el) return null;
|
|
1626
|
+
var cell = el.closest(".fortune-formula-functionrange-cell");
|
|
1627
|
+
if (!cell || !$editor.contains(cell)) return null;
|
|
1628
|
+
var ri = cell.getAttribute("rangeindex");
|
|
1629
|
+
if (!ri) return null;
|
|
1630
|
+
var n = parseInt(ri, 10);
|
|
1631
|
+
return Number.isNaN(n) ? null : n;
|
|
1632
|
+
}
|
|
1633
|
+
export function setFormulaEditorOwner(ctx, owner) {
|
|
1634
|
+
ctx.formulaCache.formulaEditorOwner = owner;
|
|
1635
|
+
}
|
|
1636
|
+
export function getFormulaEditorOwner(ctx) {
|
|
1637
|
+
var _a, _b;
|
|
1638
|
+
var cachedOwner = ctx.formulaCache.formulaEditorOwner;
|
|
1639
|
+
if (cachedOwner === "cell" || cachedOwner === "fx") {
|
|
1640
|
+
return cachedOwner;
|
|
1641
|
+
}
|
|
1642
|
+
if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id) === "luckysheet-functionbox-cell") {
|
|
1643
|
+
return "fx";
|
|
1644
|
+
}
|
|
1645
|
+
if (((_b = document.activeElement) === null || _b === void 0 ? void 0 : _b.id) === "luckysheet-rich-text-editor") {
|
|
1646
|
+
return "cell";
|
|
1647
|
+
}
|
|
1648
|
+
return null;
|
|
1649
|
+
}
|
|
1650
|
+
function getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset) {
|
|
1651
|
+
var textBefore = editor.innerText.slice(0, caretOffset);
|
|
1652
|
+
var parts = textBefore.split(/[=,(+\-*/&<>]/);
|
|
1653
|
+
return _.trim(parts[parts.length - 1] || "");
|
|
1654
|
+
}
|
|
1655
|
+
export function isCaretAtValidFormulaRangeInsertionPoint(editor) {
|
|
1656
|
+
var currSelection = window.getSelection();
|
|
1657
|
+
if (!editor || !currSelection || currSelection.rangeCount === 0) {
|
|
1658
|
+
return false;
|
|
1659
|
+
}
|
|
1660
|
+
var anchorNode = currSelection.anchorNode;
|
|
1661
|
+
if (anchorNode && !editor.contains(anchorNode)) {
|
|
1662
|
+
return false;
|
|
1663
|
+
}
|
|
1664
|
+
var inputText = editor.innerText.trim();
|
|
1665
|
+
if (!inputText.startsWith("=")) {
|
|
1666
|
+
return false;
|
|
1667
|
+
}
|
|
1668
|
+
if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
|
|
1669
|
+
return false;
|
|
1670
|
+
}
|
|
1671
|
+
var caretRange = currSelection.getRangeAt(0).cloneRange();
|
|
1672
|
+
var preCaretRange = document.createRange();
|
|
1673
|
+
preCaretRange.selectNodeContents(editor);
|
|
1674
|
+
preCaretRange.setEnd(caretRange.endContainer, caretRange.endOffset);
|
|
1675
|
+
var caretOffset = preCaretRange.toString().length;
|
|
1676
|
+
var slotTextBeforeCaret = getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset);
|
|
1677
|
+
if (slotTextBeforeCaret.length > 0 && !iscelldata(slotTextBeforeCaret)) {
|
|
1678
|
+
return false;
|
|
1679
|
+
}
|
|
1680
|
+
var textAfter = editor.innerText.slice(caretOffset);
|
|
1681
|
+
var remaining = textAfter.replace(/^\s+/, "");
|
|
1682
|
+
if (remaining.length === 0) {
|
|
1683
|
+
return true;
|
|
1684
|
+
}
|
|
1685
|
+
var first = remaining[0];
|
|
1686
|
+
return first === "," || first === ")" || first === "&" || first in operatorjson;
|
|
1687
|
+
}
|
|
1688
|
+
function hasCommaOrAnotherRefAfterRangeCell(cell) {
|
|
1689
|
+
var _a, _b;
|
|
1690
|
+
var n = cell.nextSibling;
|
|
1691
|
+
while (n) {
|
|
1692
|
+
if (n.nodeType === Node.ELEMENT_NODE) {
|
|
1693
|
+
var e = n;
|
|
1694
|
+
if ((_a = e.classList) === null || _a === void 0 ? void 0 : _a.contains("luckysheet-formula-text-comma")) return true;
|
|
1695
|
+
if ((_b = e.classList) === null || _b === void 0 ? void 0 : _b.contains("fortune-formula-functionrange-cell")) return true;
|
|
1696
|
+
}
|
|
1697
|
+
n = n.nextSibling;
|
|
1698
|
+
}
|
|
1699
|
+
return false;
|
|
1700
|
+
}
|
|
1701
|
+
export function markRangeSelectionDirty(ctx) {
|
|
1702
|
+
ctx.formulaCache.rangeSelectionActive = false;
|
|
1703
|
+
ctx.formulaRangeHighlight = [];
|
|
1704
|
+
ctx.formulaRangeSelect = undefined;
|
|
1705
|
+
ctx.formulaCache.selectingRangeIndex = -1;
|
|
1706
|
+
ctx.formulaCache.func_selectedrange = undefined;
|
|
1707
|
+
ctx.formulaCache.rangestart = false;
|
|
1708
|
+
ctx.formulaCache.rangedrag_column_start = false;
|
|
1709
|
+
ctx.formulaCache.rangedrag_row_start = false;
|
|
1710
|
+
ctx.formulaCache.rangechangeindex = undefined;
|
|
1711
|
+
}
|
|
1712
|
+
export function getFormulaRangeIndexForKeyboardSync($editor) {
|
|
1713
|
+
var atCaret = getFormulaRangeIndexAtCaret($editor);
|
|
1714
|
+
if (atCaret !== null) return atCaret;
|
|
1715
|
+
var lastIdx = getLastFormulaRangeIndex($editor);
|
|
1716
|
+
if (lastIdx === null) return null;
|
|
1717
|
+
var cell = $editor.querySelector("span.fortune-formula-functionrange-cell[rangeindex=\"".concat(lastIdx, "\"]"));
|
|
1718
|
+
if (!cell) return null;
|
|
1719
|
+
var sel = window.getSelection();
|
|
1720
|
+
if (!(sel === null || sel === void 0 ? void 0 : sel.anchorNode)) return lastIdx;
|
|
1721
|
+
var caretRange = document.createRange();
|
|
1722
|
+
try {
|
|
1723
|
+
caretRange.setStart(sel.anchorNode, sel.anchorOffset);
|
|
1724
|
+
caretRange.collapse(true);
|
|
1725
|
+
} catch (_a) {
|
|
1726
|
+
return lastIdx;
|
|
1727
|
+
}
|
|
1728
|
+
var cellRange = document.createRange();
|
|
1729
|
+
try {
|
|
1730
|
+
cellRange.selectNodeContents(cell);
|
|
1731
|
+
} catch (_b) {
|
|
1732
|
+
return lastIdx;
|
|
1733
|
+
}
|
|
1734
|
+
if (caretRange.compareBoundaryPoints(Range.START_TO_START, cellRange) < 0) {
|
|
1735
|
+
return null;
|
|
1736
|
+
}
|
|
1737
|
+
var afterCell = document.createRange();
|
|
1738
|
+
try {
|
|
1739
|
+
afterCell.setStartAfter(cell);
|
|
1740
|
+
afterCell.collapse(true);
|
|
1741
|
+
} catch (_c) {
|
|
1742
|
+
return lastIdx;
|
|
1743
|
+
}
|
|
1744
|
+
if (caretRange.compareBoundaryPoints(Range.START_TO_START, afterCell) >= 0) {
|
|
1745
|
+
if (hasCommaOrAnotherRefAfterRangeCell(cell)) {
|
|
1746
|
+
return null;
|
|
1747
|
+
}
|
|
1748
|
+
return lastIdx;
|
|
1749
|
+
}
|
|
1750
|
+
return lastIdx;
|
|
1751
|
+
}
|
|
1588
1752
|
export function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refreshRangeSelect) {
|
|
1589
1753
|
var _a, _b, _c, _d, _e, _f;
|
|
1590
1754
|
if (refreshRangeSelect === void 0) {
|
|
@@ -1592,6 +1756,13 @@ export function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refres
|
|
|
1592
1756
|
}
|
|
1593
1757
|
if (!$editor) return;
|
|
1594
1758
|
try {
|
|
1759
|
+
var isBackspaceOrDelete = kcode === 8 || kcode === 46;
|
|
1760
|
+
var isAlphaNumeric = kcode >= 48 && kcode <= 57 || kcode >= 65 && kcode <= 90 || kcode >= 97 && kcode <= 122;
|
|
1761
|
+
if (ctx.formulaCache.rangeSelectionActive === true) {
|
|
1762
|
+
if (isBackspaceOrDelete || isAlphaNumeric) {
|
|
1763
|
+
markRangeSelectionDirty(ctx);
|
|
1764
|
+
}
|
|
1765
|
+
}
|
|
1595
1766
|
var value1 = void 0;
|
|
1596
1767
|
var value1txt = preText !== null && preText !== void 0 ? preText : $editor.innerText;
|
|
1597
1768
|
var value = $editor.innerText;
|
|
@@ -1822,61 +1993,181 @@ function functionStrChange_range(txt, type, rc, orient, stindex, step) {
|
|
|
1822
1993
|
}
|
|
1823
1994
|
return "";
|
|
1824
1995
|
}
|
|
1996
|
+
function setRangeSetValueToFromCaretPosition(ctx, editor, sel) {
|
|
1997
|
+
if (sel.rangeCount === 0 || !sel.anchorNode) return false;
|
|
1998
|
+
if (!editor.contains(sel.anchorNode)) return false;
|
|
1999
|
+
var range = sel.getRangeAt(0).cloneRange();
|
|
2000
|
+
range.collapse(true);
|
|
2001
|
+
var startContainer = range.startContainer,
|
|
2002
|
+
startOffset = range.startOffset;
|
|
2003
|
+
if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
2004
|
+
if (startOffset === 0) {
|
|
2005
|
+
var textParent = startContainer.parentElement;
|
|
2006
|
+
if (textParent === editor) {
|
|
2007
|
+
var prev = startContainer.previousSibling;
|
|
2008
|
+
if (prev) {
|
|
2009
|
+
ctx.formulaCache.rangeSetValueTo = prev;
|
|
2010
|
+
return true;
|
|
2011
|
+
}
|
|
2012
|
+
return false;
|
|
2013
|
+
}
|
|
2014
|
+
var el = textParent;
|
|
2015
|
+
while (el && el !== editor) {
|
|
2016
|
+
if (el.previousSibling) {
|
|
2017
|
+
ctx.formulaCache.rangeSetValueTo = el.previousSibling;
|
|
2018
|
+
return true;
|
|
2019
|
+
}
|
|
2020
|
+
el = el.parentElement;
|
|
2021
|
+
}
|
|
2022
|
+
return false;
|
|
2023
|
+
}
|
|
2024
|
+
var p = startContainer.parentElement;
|
|
2025
|
+
if (p && editor.contains(p)) {
|
|
2026
|
+
ctx.formulaCache.rangeSetValueTo = p;
|
|
2027
|
+
return true;
|
|
2028
|
+
}
|
|
2029
|
+
return false;
|
|
2030
|
+
}
|
|
2031
|
+
if (startContainer.nodeType === Node.ELEMENT_NODE && startContainer === editor) {
|
|
2032
|
+
if (startOffset > 0) {
|
|
2033
|
+
var prev = startContainer.childNodes[startOffset - 1];
|
|
2034
|
+
if (prev) {
|
|
2035
|
+
ctx.formulaCache.rangeSetValueTo = prev;
|
|
2036
|
+
return true;
|
|
2037
|
+
}
|
|
2038
|
+
}
|
|
2039
|
+
return false;
|
|
2040
|
+
}
|
|
2041
|
+
if (startContainer.nodeType === Node.ELEMENT_NODE) {
|
|
2042
|
+
if (startOffset > 0) {
|
|
2043
|
+
var prev = startContainer.childNodes[startOffset - 1];
|
|
2044
|
+
if (prev) {
|
|
2045
|
+
ctx.formulaCache.rangeSetValueTo = prev;
|
|
2046
|
+
return true;
|
|
2047
|
+
}
|
|
2048
|
+
}
|
|
2049
|
+
var el = startContainer;
|
|
2050
|
+
while (el && el !== editor) {
|
|
2051
|
+
if (el.previousSibling) {
|
|
2052
|
+
ctx.formulaCache.rangeSetValueTo = el.previousSibling;
|
|
2053
|
+
return true;
|
|
2054
|
+
}
|
|
2055
|
+
el = el.parentElement;
|
|
2056
|
+
}
|
|
2057
|
+
}
|
|
2058
|
+
return false;
|
|
2059
|
+
}
|
|
1825
2060
|
export function israngeseleciton(ctx, istooltip) {
|
|
1826
|
-
var _a, _b, _c;
|
|
2061
|
+
var _a, _b, _c, _d;
|
|
1827
2062
|
if (istooltip == null) {
|
|
1828
2063
|
istooltip = false;
|
|
1829
2064
|
}
|
|
1830
2065
|
var currSelection = window.getSelection();
|
|
1831
|
-
if (currSelection == null)
|
|
2066
|
+
if (currSelection == null) {
|
|
2067
|
+
return false;
|
|
2068
|
+
}
|
|
1832
2069
|
var anchor = currSelection.anchorNode;
|
|
1833
|
-
if (!
|
|
2070
|
+
if (!anchor) {
|
|
2071
|
+
return false;
|
|
2072
|
+
}
|
|
1834
2073
|
var anchorOffset = currSelection.anchorOffset;
|
|
1835
2074
|
var anchorElement = anchor;
|
|
1836
2075
|
var parentElement = anchor.parentNode;
|
|
2076
|
+
var allowRangeInsertionAtCaret = function allowRangeInsertionAtCaret() {
|
|
2077
|
+
var _a, _b;
|
|
2078
|
+
if (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true) {
|
|
2079
|
+
return true;
|
|
2080
|
+
}
|
|
2081
|
+
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");
|
|
2082
|
+
return isCaretAtValidFormulaRangeInsertionPoint(editor);
|
|
2083
|
+
};
|
|
1837
2084
|
if (((_a = anchor === null || anchor === void 0 ? void 0 : anchor.parentNode) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === "span" && anchorOffset !== 0) {
|
|
1838
|
-
var txt = _.trim(anchor.textContent);
|
|
2085
|
+
var txt = _.trim((_b = anchor.textContent) !== null && _b !== void 0 ? _b : "");
|
|
1839
2086
|
var lasttxt = "";
|
|
1840
2087
|
if (txt.length === 0 && anchor.parentNode.previousSibling) {
|
|
1841
2088
|
var ahr = anchor.parentNode.previousSibling;
|
|
1842
2089
|
txt = _.trim(ahr.textContent || "");
|
|
1843
|
-
lasttxt = txt.
|
|
1844
|
-
ctx.formulaCache.rangeSetValueTo = anchor.parentNode;
|
|
2090
|
+
lasttxt = txt.slice(-1);
|
|
1845
2091
|
} else {
|
|
1846
|
-
lasttxt = txt.
|
|
1847
|
-
ctx.formulaCache.rangeSetValueTo = anchor.parentNode;
|
|
2092
|
+
lasttxt = anchorOffset > 0 ? txt.charAt(anchorOffset - 1) : "";
|
|
1848
2093
|
}
|
|
1849
2094
|
if (istooltip && (lasttxt === "(" || lasttxt === ",") || !istooltip && (lasttxt === "(" || lasttxt === "," || lasttxt === "=" || lasttxt in operatorjson || lasttxt === "&")) {
|
|
1850
|
-
|
|
2095
|
+
ctx.formulaCache.rangeSetValueTo = anchor.parentNode;
|
|
2096
|
+
return allowRangeInsertionAtCaret();
|
|
1851
2097
|
}
|
|
1852
2098
|
} else if (anchorElement.id === "luckysheet-rich-text-editor" || anchorElement.id === "luckysheet-functionbox-cell") {
|
|
1853
|
-
var
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
2099
|
+
var editorEl = anchorElement;
|
|
2100
|
+
if (currSelection.rangeCount > 0 && setRangeSetValueToFromCaretPosition(ctx, editorEl, currSelection) && allowRangeInsertionAtCaret()) {
|
|
2101
|
+
return true;
|
|
2102
|
+
}
|
|
2103
|
+
var spans = editorEl.querySelectorAll("span");
|
|
2104
|
+
var txt = _.trim((_c = _.last(spans)) === null || _c === void 0 ? void 0 : _c.innerText);
|
|
2105
|
+
var refSpan = _.last(spans);
|
|
2106
|
+
if (txt.length === 0 && spans.length > 1) {
|
|
2107
|
+
txt = _.trim(spans[spans.length - 2].innerText);
|
|
2108
|
+
refSpan = spans[spans.length - 2];
|
|
1860
2109
|
}
|
|
1861
|
-
var lasttxt = txt.
|
|
2110
|
+
var lasttxt = txt.slice(-1);
|
|
1862
2111
|
if (istooltip && (lasttxt === "(" || lasttxt === ",") || !istooltip && (lasttxt === "(" || lasttxt === "," || lasttxt === "=" || lasttxt in operatorjson || lasttxt === "&")) {
|
|
1863
|
-
|
|
2112
|
+
ctx.formulaCache.rangeSetValueTo = refSpan;
|
|
2113
|
+
return allowRangeInsertionAtCaret();
|
|
1864
2114
|
}
|
|
1865
2115
|
} else if (parentElement.id === "luckysheet-rich-text-editor" || parentElement.id === "luckysheet-functionbox-cell" || anchorOffset === 0) {
|
|
1866
2116
|
if (anchorOffset === 0) {
|
|
1867
2117
|
anchor = anchor.parentNode;
|
|
1868
2118
|
}
|
|
1869
|
-
if (!anchor)
|
|
1870
|
-
|
|
2119
|
+
if (!anchor) {
|
|
2120
|
+
return false;
|
|
2121
|
+
}
|
|
2122
|
+
if (((_d = anchor.previousSibling) === null || _d === void 0 ? void 0 : _d.textContent) == null) {
|
|
2123
|
+
return false;
|
|
2124
|
+
}
|
|
1871
2125
|
if (anchor.previousSibling) {
|
|
1872
2126
|
var txt = _.trim(anchor.previousSibling.textContent);
|
|
1873
|
-
var lasttxt = txt.
|
|
1874
|
-
ctx.formulaCache.rangeSetValueTo = anchor.previousSibling;
|
|
2127
|
+
var lasttxt = txt.slice(-1);
|
|
1875
2128
|
if (istooltip && (lasttxt === "(" || lasttxt === ",") || !istooltip && (lasttxt === "(" || lasttxt === "," || lasttxt === "=" || lasttxt in operatorjson || lasttxt === "&")) {
|
|
1876
|
-
|
|
2129
|
+
ctx.formulaCache.rangeSetValueTo = anchor.previousSibling;
|
|
2130
|
+
return allowRangeInsertionAtCaret();
|
|
1877
2131
|
}
|
|
1878
2132
|
}
|
|
1879
2133
|
}
|
|
2134
|
+
if (!istooltip && (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true)) {
|
|
2135
|
+
var editor = document.getElementById("luckysheet-rich-text-editor") || document.getElementById("luckysheet-functionbox-cell");
|
|
2136
|
+
if (editor && currSelection.rangeCount > 0 && setRangeSetValueToFromCaretPosition(ctx, editor, currSelection) && allowRangeInsertionAtCaret()) {
|
|
2137
|
+
return true;
|
|
2138
|
+
}
|
|
2139
|
+
}
|
|
2140
|
+
return false;
|
|
2141
|
+
}
|
|
2142
|
+
export function isFormulaReferenceInputMode(ctx) {
|
|
2143
|
+
var editor = document.getElementById("luckysheet-rich-text-editor");
|
|
2144
|
+
var inputText = ((editor === null || editor === void 0 ? void 0 : editor.innerText) || "").trim();
|
|
2145
|
+
var hasRangeToken = (editor === null || editor === void 0 ? void 0 : editor.querySelector("span.fortune-formula-functionrange-cell")) != null;
|
|
2146
|
+
if (!!ctx.formulaCache.rangestart || !!ctx.formulaCache.rangedrag_column_start || !!ctx.formulaCache.rangedrag_row_start || hasRangeToken || ctx.formulaCache.rangeSelectionActive === true) {
|
|
2147
|
+
return true;
|
|
2148
|
+
}
|
|
2149
|
+
if (!inputText.startsWith("=")) {
|
|
2150
|
+
return false;
|
|
2151
|
+
}
|
|
2152
|
+
if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
|
|
2153
|
+
return false;
|
|
2154
|
+
}
|
|
2155
|
+
return israngeseleciton(ctx);
|
|
2156
|
+
}
|
|
2157
|
+
export function maybeRecoverDirtyRangeSelection(ctx) {
|
|
2158
|
+
if (ctx.formulaCache.rangeSelectionActive !== false) {
|
|
2159
|
+
return false;
|
|
2160
|
+
}
|
|
2161
|
+
var editor = document.getElementById("luckysheet-rich-text-editor");
|
|
2162
|
+
if (!editor) {
|
|
2163
|
+
return false;
|
|
2164
|
+
}
|
|
2165
|
+
var inputText = (editor.innerText || "").trim();
|
|
2166
|
+
var atCaretRangeIndex = getFormulaRangeIndexAtCaret(editor);
|
|
2167
|
+
if (inputText.startsWith("=") && atCaretRangeIndex === null && israngeseleciton(ctx)) {
|
|
2168
|
+
ctx.formulaCache.rangeSelectionActive = null;
|
|
2169
|
+
return true;
|
|
2170
|
+
}
|
|
1880
2171
|
return false;
|
|
1881
2172
|
}
|
|
1882
2173
|
export function functionStrChange(txt, type, rc, orient, stindex, step) {
|
|
@@ -1974,18 +2265,22 @@ export function functionStrChange(txt, type, rc, orient, stindex, step) {
|
|
|
1974
2265
|
return function_str;
|
|
1975
2266
|
}
|
|
1976
2267
|
export function rangeSetValue(ctx, cellInput, selected, fxInput) {
|
|
1977
|
-
var _a, _b, _c, _d, _e;
|
|
2268
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1978
2269
|
var parser = new DOMParser();
|
|
1979
2270
|
var doc = parser.parseFromString("<div>".concat(cellInput.innerHTML, "</div>"), "text/html");
|
|
1980
2271
|
var spans = doc.querySelectorAll("span");
|
|
1981
2272
|
var lastSpan = spans[spans.length - 1];
|
|
1982
|
-
|
|
2273
|
+
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;
|
|
2274
|
+
if (lastSpan && isLetterNumberPattern(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !isManagedRangeSpan) {
|
|
1983
2275
|
var htmlR = removeLastSpan(cellInput.innerHTML);
|
|
1984
2276
|
cellInput.innerHTML = "".concat(htmlR);
|
|
2277
|
+
cellInput.focus();
|
|
2278
|
+
var kids = cellInput.childNodes;
|
|
2279
|
+
ctx.formulaCache.rangeSetValueTo = kids.length > 0 ? kids[kids.length - 1] : undefined;
|
|
1985
2280
|
}
|
|
1986
2281
|
var $editor = cellInput;
|
|
1987
2282
|
var $copyTo = fxInput;
|
|
1988
|
-
if ((
|
|
2283
|
+
if (getFormulaEditorOwner(ctx) === "fx") {
|
|
1989
2284
|
$editor = fxInput;
|
|
1990
2285
|
$copyTo = cellInput;
|
|
1991
2286
|
}
|
|
@@ -2000,20 +2295,23 @@ export function rangeSetValue(ctx, cellInput, selected, fxInput) {
|
|
|
2000
2295
|
} else {
|
|
2001
2296
|
range = getRangetxt(ctx, ctx.currentSheetId, selected, ctx.formulaCache.rangetosheet);
|
|
2002
2297
|
}
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
}
|
|
2298
|
+
var activeRangeFlow = ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true;
|
|
2299
|
+
var spanToReplace = !_.isNil(ctx.formulaCache.rangechangeindex) ? $editor.querySelector("span[rangeindex='".concat(ctx.formulaCache.rangechangeindex, "']")) : null;
|
|
2300
|
+
if (activeRangeFlow && spanToReplace) {
|
|
2301
|
+
spanToReplace.innerHTML = range;
|
|
2302
|
+
setCaretPosition(ctx, spanToReplace, 0, range.length);
|
|
2009
2303
|
} else {
|
|
2010
2304
|
var function_str = "<span class=\"fortune-formula-functionrange-cell\" rangeindex=\"".concat(functionHTMLIndex, "\" dir=\"auto\" style=\"color:").concat(colors[functionHTMLIndex], ";\">").concat(range, "</span>");
|
|
2011
2305
|
var newEle = parseElement(function_str);
|
|
2012
2306
|
var refEle = ctx.formulaCache.rangeSetValueTo;
|
|
2307
|
+
if (refEle && !refEle.parentNode) {
|
|
2308
|
+
israngeseleciton(ctx);
|
|
2309
|
+
refEle = ctx.formulaCache.rangeSetValueTo;
|
|
2310
|
+
}
|
|
2013
2311
|
if (refEle && refEle.parentNode) {
|
|
2014
|
-
var leftPar = (
|
|
2015
|
-
if ((
|
|
2016
|
-
(
|
|
2312
|
+
var leftPar = (_c = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _c === void 0 ? void 0 : _c[0];
|
|
2313
|
+
if ((_d = leftPar === null || leftPar === void 0 ? void 0 : leftPar.parentElement) === null || _d === void 0 ? void 0 : _d.classList.contains("luckysheet-formula-text-color")) {
|
|
2314
|
+
(_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);
|
|
2017
2315
|
} else {
|
|
2018
2316
|
refEle.parentNode.insertBefore(newEle, refEle.nextSibling);
|
|
2019
2317
|
}
|
|
@@ -2053,6 +2351,7 @@ function setRangeSelect(container, left, top, height, width) {
|
|
|
2053
2351
|
rangeElement.style.width = "".concat(width, "px");
|
|
2054
2352
|
}
|
|
2055
2353
|
export function rangeDrag(ctx, e, cellInput, scrollLeft, scrollTop, container, fxInput) {
|
|
2354
|
+
ctx.formulaCache.rangeSelectionActive = true;
|
|
2056
2355
|
var func_selectedrange = ctx.formulaCache.func_selectedrange;
|
|
2057
2356
|
if (!func_selectedrange || func_selectedrange.left == null || func_selectedrange.height == null || func_selectedrange.top == null || func_selectedrange.width == null) return;
|
|
2058
2357
|
var rect = container.getBoundingClientRect();
|
|
@@ -2108,6 +2407,20 @@ export function rangeDrag(ctx, e, cellInput, scrollLeft, scrollTop, container, f
|
|
|
2108
2407
|
func_selectedrange.width_move = width;
|
|
2109
2408
|
func_selectedrange.top_move = top;
|
|
2110
2409
|
func_selectedrange.height_move = height;
|
|
2410
|
+
ctx.luckysheet_select_save = [{
|
|
2411
|
+
row: [rowseleted[0], rowseleted[1]],
|
|
2412
|
+
column: [columnseleted[0], columnseleted[1]],
|
|
2413
|
+
row_focus: row_index,
|
|
2414
|
+
column_focus: col_index,
|
|
2415
|
+
left: left,
|
|
2416
|
+
top: top,
|
|
2417
|
+
width: width,
|
|
2418
|
+
height: height,
|
|
2419
|
+
left_move: left,
|
|
2420
|
+
top_move: top,
|
|
2421
|
+
width_move: width,
|
|
2422
|
+
height_move: height
|
|
2423
|
+
}];
|
|
2111
2424
|
rangeSetValue(ctx, cellInput, {
|
|
2112
2425
|
row: rowseleted,
|
|
2113
2426
|
column: columnseleted
|
|
@@ -2116,6 +2429,7 @@ export function rangeDrag(ctx, e, cellInput, scrollLeft, scrollTop, container, f
|
|
|
2116
2429
|
e.preventDefault();
|
|
2117
2430
|
}
|
|
2118
2431
|
export function rangeDragColumn(ctx, e, cellInput, scrollLeft, scrollTop, container, fxInput) {
|
|
2432
|
+
ctx.formulaCache.rangeSelectionActive = true;
|
|
2119
2433
|
var func_selectedrange = ctx.formulaCache.func_selectedrange;
|
|
2120
2434
|
if (!func_selectedrange || func_selectedrange.left == null || func_selectedrange.height == null || func_selectedrange.top == null || func_selectedrange.width == null) return;
|
|
2121
2435
|
var mouse = mousePosition(e.pageX, e.pageY, ctx);
|
|
@@ -2151,6 +2465,20 @@ export function rangeDragColumn(ctx, e, cellInput, scrollLeft, scrollTop, contai
|
|
|
2151
2465
|
func_selectedrange.column = columnseleted;
|
|
2152
2466
|
func_selectedrange.left_move = left;
|
|
2153
2467
|
func_selectedrange.width_move = width;
|
|
2468
|
+
ctx.luckysheet_select_save = [{
|
|
2469
|
+
row: [0, row_index],
|
|
2470
|
+
column: [columnseleted[0], columnseleted[1]],
|
|
2471
|
+
row_focus: 0,
|
|
2472
|
+
column_focus: col_index,
|
|
2473
|
+
left: left,
|
|
2474
|
+
top: row_pre,
|
|
2475
|
+
width: width,
|
|
2476
|
+
height: row - row_pre - 1,
|
|
2477
|
+
left_move: left,
|
|
2478
|
+
top_move: row_pre,
|
|
2479
|
+
width_move: width,
|
|
2480
|
+
height_move: row - row_pre - 1
|
|
2481
|
+
}];
|
|
2154
2482
|
rangeSetValue(ctx, cellInput, {
|
|
2155
2483
|
row: [null, null],
|
|
2156
2484
|
column: columnseleted
|
|
@@ -2158,6 +2486,7 @@ export function rangeDragColumn(ctx, e, cellInput, scrollLeft, scrollTop, contai
|
|
|
2158
2486
|
setRangeSelect(container, left, row_pre, row - row_pre - 1, width);
|
|
2159
2487
|
}
|
|
2160
2488
|
export function rangeDragRow(ctx, e, cellInput, scrollLeft, scrollTop, container, fxInput) {
|
|
2489
|
+
ctx.formulaCache.rangeSelectionActive = true;
|
|
2161
2490
|
var func_selectedrange = ctx.formulaCache.func_selectedrange;
|
|
2162
2491
|
if (!func_selectedrange || func_selectedrange.left == null || func_selectedrange.height == null || func_selectedrange.top == null || func_selectedrange.width == null) return;
|
|
2163
2492
|
var mouse = mousePosition(e.pageX, e.pageY, ctx);
|
|
@@ -2193,6 +2522,20 @@ export function rangeDragRow(ctx, e, cellInput, scrollLeft, scrollTop, container
|
|
|
2193
2522
|
func_selectedrange.row = rowseleted;
|
|
2194
2523
|
func_selectedrange.top_move = top;
|
|
2195
2524
|
func_selectedrange.height_move = height;
|
|
2525
|
+
ctx.luckysheet_select_save = [{
|
|
2526
|
+
row: [rowseleted[0], rowseleted[1]],
|
|
2527
|
+
column: [0, col_index],
|
|
2528
|
+
row_focus: row_index,
|
|
2529
|
+
column_focus: 0,
|
|
2530
|
+
left: col_pre,
|
|
2531
|
+
top: top,
|
|
2532
|
+
width: col - col_pre - 1,
|
|
2533
|
+
height: height,
|
|
2534
|
+
left_move: col_pre,
|
|
2535
|
+
top_move: top,
|
|
2536
|
+
width_move: col - col_pre - 1,
|
|
2537
|
+
height_move: height
|
|
2538
|
+
}];
|
|
2196
2539
|
rangeSetValue(ctx, cellInput, {
|
|
2197
2540
|
row: rowseleted,
|
|
2198
2541
|
column: [null, null]
|