@fileverse-dev/fortune-core 1.3.12 → 1.3.13-create-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 +2 -2
- package/es/events/keyboard.js +204 -30
- package/es/events/mouse.js +79 -44
- package/es/events/paste.js +240 -56
- package/es/locale/en.d.ts +3 -0
- package/es/locale/en.js +3 -0
- package/es/locale/es.d.ts +3 -0
- package/es/locale/es.js +3 -0
- package/es/locale/hi.d.ts +3 -0
- package/es/locale/hi.js +3 -0
- package/es/locale/index.d.ts +3 -0
- package/es/locale/zh.d.ts +3 -0
- package/es/locale/zh.js +3 -0
- package/es/locale/zh_tw.d.ts +3 -0
- package/es/locale/zh_tw.js +3 -0
- package/es/modules/ConditionFormat.js +26 -0
- package/es/modules/cell.d.ts +5 -1
- package/es/modules/cell.js +182 -38
- package/es/modules/clipboard.js +111 -2
- package/es/modules/format.js +12 -7
- package/es/modules/formula.d.ts +23 -0
- package/es/modules/formula.js +610 -51
- package/es/modules/hyperlink.js +18 -6
- package/es/modules/inline-string.js +61 -8
- package/es/modules/moveCells.js +52 -9
- package/es/modules/selection.d.ts +1 -0
- package/es/modules/selection.js +102 -16
- package/es/modules/validation.js +6 -3
- package/es/paste-helpers/calculate-range-cell-size.js +5 -4
- package/es/paste-table-helpers.d.ts +1 -1
- package/es/paste-table-helpers.js +170 -21
- package/es/types.d.ts +3 -0
- package/lib/events/keyboard.d.ts +2 -2
- package/lib/events/keyboard.js +203 -29
- package/lib/events/mouse.js +78 -43
- package/lib/events/paste.js +238 -54
- package/lib/locale/en.d.ts +3 -0
- package/lib/locale/en.js +3 -0
- package/lib/locale/es.d.ts +3 -0
- package/lib/locale/es.js +3 -0
- package/lib/locale/hi.d.ts +3 -0
- package/lib/locale/hi.js +3 -0
- package/lib/locale/index.d.ts +3 -0
- package/lib/locale/zh.d.ts +3 -0
- package/lib/locale/zh.js +3 -0
- package/lib/locale/zh_tw.d.ts +3 -0
- package/lib/locale/zh_tw.js +3 -0
- package/lib/modules/ConditionFormat.js +26 -0
- package/lib/modules/cell.d.ts +5 -1
- package/lib/modules/cell.js +180 -36
- package/lib/modules/clipboard.js +111 -2
- package/lib/modules/format.js +12 -7
- package/lib/modules/formula.d.ts +23 -0
- package/lib/modules/formula.js +623 -51
- package/lib/modules/hyperlink.js +18 -6
- package/lib/modules/inline-string.js +61 -8
- package/lib/modules/moveCells.js +52 -9
- package/lib/modules/selection.d.ts +1 -0
- package/lib/modules/selection.js +101 -15
- package/lib/modules/validation.js +6 -3
- package/lib/paste-helpers/calculate-range-cell-size.js +5 -4
- package/lib/paste-table-helpers.d.ts +1 -1
- package/lib/paste-table-helpers.js +170 -21
- package/lib/types.d.ts +3 -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 = {};
|
|
@@ -1286,8 +1287,7 @@ export function setCaretPosition(ctx, textDom, children, pos, parentTextDom) {
|
|
|
1286
1287
|
sel === null || sel === void 0 ? void 0 : sel.removeAllRanges();
|
|
1287
1288
|
sel === null || sel === void 0 ? void 0 : sel.addRange(range);
|
|
1288
1289
|
el.focus();
|
|
1289
|
-
} catch (
|
|
1290
|
-
console.error(err);
|
|
1290
|
+
} catch (_c) {
|
|
1291
1291
|
moveCursorToEnd(parentTextDom);
|
|
1292
1292
|
}
|
|
1293
1293
|
}
|
|
@@ -1372,7 +1372,7 @@ export function getrangeseleciton() {
|
|
|
1372
1372
|
return null;
|
|
1373
1373
|
}
|
|
1374
1374
|
function helpFunctionExe($editer, currSelection, ctx) {
|
|
1375
|
-
var _a;
|
|
1375
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1376
1376
|
var functionlist = locale(ctx).functionlist;
|
|
1377
1377
|
if (_.isEmpty(ctx.formulaCache.functionlistMap)) {
|
|
1378
1378
|
for (var i_1 = 0; i_1 < functionlist.length; i_1 += 1) {
|
|
@@ -1383,22 +1383,23 @@ function helpFunctionExe($editer, currSelection, ctx) {
|
|
|
1383
1383
|
return null;
|
|
1384
1384
|
}
|
|
1385
1385
|
var $prev = currSelection;
|
|
1386
|
-
var $span = $editer.querySelectorAll("span");
|
|
1387
|
-
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;
|
|
1388
1389
|
var i = currentIndex;
|
|
1389
|
-
if ($prev == null) {
|
|
1390
|
+
if ($prev == null || currentIndex < 0 || !$span[currentIndex]) {
|
|
1390
1391
|
return null;
|
|
1391
1392
|
}
|
|
1392
1393
|
var funcName = null;
|
|
1393
1394
|
var paramindex = null;
|
|
1394
|
-
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")) {
|
|
1395
1396
|
funcName = $span[i].textContent;
|
|
1396
1397
|
} else {
|
|
1397
1398
|
var $cur = null;
|
|
1398
1399
|
var exceptIndex = [-1, -1];
|
|
1399
1400
|
while (--i > 0) {
|
|
1400
1401
|
$cur = $span[i];
|
|
1401
|
-
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) {
|
|
1402
1403
|
funcName = $cur.textContent;
|
|
1403
1404
|
paramindex = null;
|
|
1404
1405
|
var endstate = true;
|
|
@@ -1410,13 +1411,13 @@ function helpFunctionExe($editer, currSelection, ctx) {
|
|
|
1410
1411
|
continue;
|
|
1411
1412
|
}
|
|
1412
1413
|
$cur = $span[a];
|
|
1413
|
-
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")) {
|
|
1414
1415
|
exceptIndex = [i, a];
|
|
1415
1416
|
funcName = null;
|
|
1416
1417
|
endstate = false;
|
|
1417
1418
|
break;
|
|
1418
1419
|
}
|
|
1419
|
-
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")) {
|
|
1420
1421
|
paramindex += 1;
|
|
1421
1422
|
}
|
|
1422
1423
|
}
|
|
@@ -1449,6 +1450,7 @@ export function rangeHightlightselected(ctx, $editor) {
|
|
|
1449
1450
|
var funcName = helpFunctionExe($editor, currSelection, ctx);
|
|
1450
1451
|
ctx.functionHint = funcName === null || funcName === void 0 ? void 0 : funcName.toUpperCase();
|
|
1451
1452
|
ctx.functionCandidates = [];
|
|
1453
|
+
ctx.defaultCandidates = [];
|
|
1452
1454
|
}
|
|
1453
1455
|
}
|
|
1454
1456
|
function functionHTML(txt) {
|
|
@@ -1599,6 +1601,226 @@ function getRangeIndexes($editor) {
|
|
|
1599
1601
|
});
|
|
1600
1602
|
return res;
|
|
1601
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 getActiveFormulaEditorElement(ctx) {
|
|
1651
|
+
var _a;
|
|
1652
|
+
var cellEditor = document.getElementById("luckysheet-rich-text-editor");
|
|
1653
|
+
var fxEditor = document.getElementById("luckysheet-functionbox-cell");
|
|
1654
|
+
var owner = getFormulaEditorOwner(ctx);
|
|
1655
|
+
if (owner === "fx") return fxEditor !== null && fxEditor !== void 0 ? fxEditor : cellEditor;
|
|
1656
|
+
if (owner === "cell") return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
|
|
1657
|
+
var activeId = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id;
|
|
1658
|
+
if (activeId === "luckysheet-functionbox-cell") return fxEditor !== null && fxEditor !== void 0 ? fxEditor : cellEditor;
|
|
1659
|
+
if (activeId === "luckysheet-rich-text-editor") return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
|
|
1660
|
+
return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
|
|
1661
|
+
}
|
|
1662
|
+
function getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset) {
|
|
1663
|
+
var textBefore = editor.innerText.slice(0, caretOffset);
|
|
1664
|
+
var parts = textBefore.split(/[=,(+\-*/&<>]/);
|
|
1665
|
+
return _.trim(parts[parts.length - 1] || "");
|
|
1666
|
+
}
|
|
1667
|
+
export function hasIncompleteTruncatedCellRangeSyntax(formulaText) {
|
|
1668
|
+
var t = formulaText.replace(/\s/g, "");
|
|
1669
|
+
if (!t.startsWith("=")) return false;
|
|
1670
|
+
if (/[A-Za-z]+\d+:[A-Za-z]+$/i.test(t)) return true;
|
|
1671
|
+
if (/[A-Za-z]+\d+:\s*$/i.test(t)) return true;
|
|
1672
|
+
return false;
|
|
1673
|
+
}
|
|
1674
|
+
function isIncompleteTruncatedRangeToken(token) {
|
|
1675
|
+
var t = token.replace(/\s/g, "");
|
|
1676
|
+
if (!t) return false;
|
|
1677
|
+
if (/[A-Za-z]+\d+:[A-Za-z]*$/i.test(t)) {
|
|
1678
|
+
return !/[A-Za-z]+\d+:[A-Za-z]+\d+$/i.test(t);
|
|
1679
|
+
}
|
|
1680
|
+
return false;
|
|
1681
|
+
}
|
|
1682
|
+
function isCaretInsideIncompleteTruncatedRangeSyntax(editor, caretOffset) {
|
|
1683
|
+
var textBefore = editor.innerText.slice(0, caretOffset);
|
|
1684
|
+
var textAfter = editor.innerText.slice(caretOffset);
|
|
1685
|
+
var tokenSplit = /[=,()+\-*/&<>%^]/;
|
|
1686
|
+
var leftToken = (textBefore.split(tokenSplit).pop() || "").trim();
|
|
1687
|
+
var rightToken = (textAfter.split(tokenSplit)[0] || "").trim();
|
|
1688
|
+
var tokenAtCaret = "".concat(leftToken).concat(rightToken);
|
|
1689
|
+
return isIncompleteTruncatedRangeToken(tokenAtCaret);
|
|
1690
|
+
}
|
|
1691
|
+
export function isBareCellOrRangeOnlyFormula(formulaText) {
|
|
1692
|
+
var t = formulaText.trim();
|
|
1693
|
+
if (!t.startsWith("=")) return false;
|
|
1694
|
+
var body = t.slice(1).trim();
|
|
1695
|
+
if (!body) return false;
|
|
1696
|
+
if (body.includes("(") || body.includes(")")) return false;
|
|
1697
|
+
return iscelldata(body);
|
|
1698
|
+
}
|
|
1699
|
+
export function suppressFormulaRangeSelectionForInitialEdit(ctx) {
|
|
1700
|
+
ctx.formulaCache.rangeSelectionActive = false;
|
|
1701
|
+
ctx.formulaCache.keyboardRangeSelectionLock = true;
|
|
1702
|
+
ctx.formulaCache.rangestart = false;
|
|
1703
|
+
ctx.formulaCache.rangedrag_column_start = false;
|
|
1704
|
+
ctx.formulaCache.rangedrag_row_start = false;
|
|
1705
|
+
}
|
|
1706
|
+
export function isCaretAtValidFormulaRangeInsertionPoint(editor) {
|
|
1707
|
+
var currSelection = window.getSelection();
|
|
1708
|
+
if (!editor || !currSelection || currSelection.rangeCount === 0) {
|
|
1709
|
+
return false;
|
|
1710
|
+
}
|
|
1711
|
+
var anchorNode = currSelection.anchorNode;
|
|
1712
|
+
if (anchorNode && !editor.contains(anchorNode)) {
|
|
1713
|
+
return false;
|
|
1714
|
+
}
|
|
1715
|
+
var inputText = editor.innerText.trim();
|
|
1716
|
+
if (!inputText.startsWith("=")) {
|
|
1717
|
+
return false;
|
|
1718
|
+
}
|
|
1719
|
+
if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
|
|
1720
|
+
return false;
|
|
1721
|
+
}
|
|
1722
|
+
if (isBareCellOrRangeOnlyFormula(inputText)) {
|
|
1723
|
+
return false;
|
|
1724
|
+
}
|
|
1725
|
+
var caretRange = currSelection.getRangeAt(0).cloneRange();
|
|
1726
|
+
var preCaretRange = document.createRange();
|
|
1727
|
+
preCaretRange.selectNodeContents(editor);
|
|
1728
|
+
preCaretRange.setEnd(caretRange.endContainer, caretRange.endOffset);
|
|
1729
|
+
var caretOffset = preCaretRange.toString().length;
|
|
1730
|
+
var slotTextBeforeCaret = getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset);
|
|
1731
|
+
if (isCaretInsideIncompleteTruncatedRangeSyntax(editor, caretOffset)) {
|
|
1732
|
+
return false;
|
|
1733
|
+
}
|
|
1734
|
+
if (slotTextBeforeCaret.length > 0 && !iscelldata(slotTextBeforeCaret)) {
|
|
1735
|
+
return false;
|
|
1736
|
+
}
|
|
1737
|
+
var textAfter = editor.innerText.slice(caretOffset);
|
|
1738
|
+
var remaining = textAfter.replace(/^\s+/, "");
|
|
1739
|
+
if (remaining.length === 0) {
|
|
1740
|
+
var atCaret = getFormulaRangeIndexAtCaret(editor);
|
|
1741
|
+
if (atCaret !== null) {
|
|
1742
|
+
return true;
|
|
1743
|
+
}
|
|
1744
|
+
var textBefore = editor.innerText.slice(0, caretOffset).trimEnd();
|
|
1745
|
+
var lastCh = textBefore.slice(-1);
|
|
1746
|
+
if (!lastCh) {
|
|
1747
|
+
return false;
|
|
1748
|
+
}
|
|
1749
|
+
if (lastCh === ")") {
|
|
1750
|
+
return false;
|
|
1751
|
+
}
|
|
1752
|
+
if (/^[=,(+\-*/&%^<>]$/.test(lastCh)) {
|
|
1753
|
+
return true;
|
|
1754
|
+
}
|
|
1755
|
+
return false;
|
|
1756
|
+
}
|
|
1757
|
+
var first = remaining[0];
|
|
1758
|
+
return first === "," || first === ")" || first === "&" || first in operatorjson;
|
|
1759
|
+
}
|
|
1760
|
+
function hasCommaOrAnotherRefAfterRangeCell(cell) {
|
|
1761
|
+
var _a, _b;
|
|
1762
|
+
var n = cell.nextSibling;
|
|
1763
|
+
while (n) {
|
|
1764
|
+
if (n.nodeType === Node.ELEMENT_NODE) {
|
|
1765
|
+
var e = n;
|
|
1766
|
+
if ((_a = e.classList) === null || _a === void 0 ? void 0 : _a.contains("luckysheet-formula-text-comma")) return true;
|
|
1767
|
+
if ((_b = e.classList) === null || _b === void 0 ? void 0 : _b.contains("fortune-formula-functionrange-cell")) return true;
|
|
1768
|
+
}
|
|
1769
|
+
n = n.nextSibling;
|
|
1770
|
+
}
|
|
1771
|
+
return false;
|
|
1772
|
+
}
|
|
1773
|
+
export function markRangeSelectionDirty(ctx) {
|
|
1774
|
+
ctx.formulaCache.rangeSelectionActive = false;
|
|
1775
|
+
ctx.formulaRangeHighlight = [];
|
|
1776
|
+
ctx.formulaRangeSelect = undefined;
|
|
1777
|
+
ctx.formulaCache.selectingRangeIndex = -1;
|
|
1778
|
+
ctx.formulaCache.func_selectedrange = undefined;
|
|
1779
|
+
ctx.formulaCache.rangestart = false;
|
|
1780
|
+
ctx.formulaCache.rangedrag_column_start = false;
|
|
1781
|
+
ctx.formulaCache.rangedrag_row_start = false;
|
|
1782
|
+
ctx.formulaCache.rangechangeindex = undefined;
|
|
1783
|
+
}
|
|
1784
|
+
export function getFormulaRangeIndexForKeyboardSync($editor) {
|
|
1785
|
+
var atCaret = getFormulaRangeIndexAtCaret($editor);
|
|
1786
|
+
if (atCaret !== null) return atCaret;
|
|
1787
|
+
var lastIdx = getLastFormulaRangeIndex($editor);
|
|
1788
|
+
if (lastIdx === null) return null;
|
|
1789
|
+
var cell = $editor.querySelector("span.fortune-formula-functionrange-cell[rangeindex=\"".concat(lastIdx, "\"]"));
|
|
1790
|
+
if (!cell) return null;
|
|
1791
|
+
var sel = window.getSelection();
|
|
1792
|
+
if (!(sel === null || sel === void 0 ? void 0 : sel.anchorNode)) return lastIdx;
|
|
1793
|
+
var caretRange = document.createRange();
|
|
1794
|
+
try {
|
|
1795
|
+
caretRange.setStart(sel.anchorNode, sel.anchorOffset);
|
|
1796
|
+
caretRange.collapse(true);
|
|
1797
|
+
} catch (_a) {
|
|
1798
|
+
return lastIdx;
|
|
1799
|
+
}
|
|
1800
|
+
var cellRange = document.createRange();
|
|
1801
|
+
try {
|
|
1802
|
+
cellRange.selectNodeContents(cell);
|
|
1803
|
+
} catch (_b) {
|
|
1804
|
+
return lastIdx;
|
|
1805
|
+
}
|
|
1806
|
+
if (caretRange.compareBoundaryPoints(Range.START_TO_START, cellRange) < 0) {
|
|
1807
|
+
return null;
|
|
1808
|
+
}
|
|
1809
|
+
var afterCell = document.createRange();
|
|
1810
|
+
try {
|
|
1811
|
+
afterCell.setStartAfter(cell);
|
|
1812
|
+
afterCell.collapse(true);
|
|
1813
|
+
} catch (_c) {
|
|
1814
|
+
return lastIdx;
|
|
1815
|
+
}
|
|
1816
|
+
if (caretRange.compareBoundaryPoints(Range.START_TO_START, afterCell) >= 0) {
|
|
1817
|
+
if (hasCommaOrAnotherRefAfterRangeCell(cell)) {
|
|
1818
|
+
return null;
|
|
1819
|
+
}
|
|
1820
|
+
return lastIdx;
|
|
1821
|
+
}
|
|
1822
|
+
return lastIdx;
|
|
1823
|
+
}
|
|
1602
1824
|
export function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refreshRangeSelect) {
|
|
1603
1825
|
var _a, _b, _c, _d, _e, _f;
|
|
1604
1826
|
if (refreshRangeSelect === void 0) {
|
|
@@ -1606,6 +1828,16 @@ export function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refres
|
|
|
1606
1828
|
}
|
|
1607
1829
|
if (!$editor) return;
|
|
1608
1830
|
try {
|
|
1831
|
+
if (ctx.formulaCache.keyboardRangeSelectionLock === true) {
|
|
1832
|
+
ctx.formulaCache.keyboardRangeSelectionLock = false;
|
|
1833
|
+
}
|
|
1834
|
+
var isBackspaceOrDelete = kcode === 8 || kcode === 46;
|
|
1835
|
+
var isAlphaNumeric = kcode >= 48 && kcode <= 57 || kcode >= 65 && kcode <= 90 || kcode >= 97 && kcode <= 122;
|
|
1836
|
+
if (ctx.formulaCache.rangeSelectionActive === true) {
|
|
1837
|
+
if (isBackspaceOrDelete || isAlphaNumeric) {
|
|
1838
|
+
markRangeSelectionDirty(ctx);
|
|
1839
|
+
}
|
|
1840
|
+
}
|
|
1609
1841
|
var value1 = void 0;
|
|
1610
1842
|
var value1txt = preText !== null && preText !== void 0 ? preText : $editor.innerText;
|
|
1611
1843
|
var value = $editor.innerText;
|
|
@@ -1634,9 +1866,7 @@ export function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refres
|
|
|
1634
1866
|
functionRange(ctx, $editor, value, value1);
|
|
1635
1867
|
if (refreshRangeSelect) {
|
|
1636
1868
|
cancelFunctionrangeSelected(ctx);
|
|
1637
|
-
|
|
1638
|
-
createRangeHightlight(ctx, value);
|
|
1639
|
-
}
|
|
1869
|
+
createRangeHightlight(ctx, value);
|
|
1640
1870
|
ctx.formulaCache.rangestart = false;
|
|
1641
1871
|
ctx.formulaCache.rangedrag_column_start = false;
|
|
1642
1872
|
ctx.formulaCache.rangedrag_row_start = false;
|
|
@@ -1836,61 +2066,190 @@ function functionStrChange_range(txt, type, rc, orient, stindex, step) {
|
|
|
1836
2066
|
}
|
|
1837
2067
|
return "";
|
|
1838
2068
|
}
|
|
2069
|
+
function setRangeSetValueToFromCaretPosition(ctx, editor, sel) {
|
|
2070
|
+
if (sel.rangeCount === 0 || !sel.anchorNode) return false;
|
|
2071
|
+
if (!editor.contains(sel.anchorNode)) return false;
|
|
2072
|
+
var range = sel.getRangeAt(0).cloneRange();
|
|
2073
|
+
range.collapse(true);
|
|
2074
|
+
var startContainer = range.startContainer,
|
|
2075
|
+
startOffset = range.startOffset;
|
|
2076
|
+
if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
2077
|
+
if (startOffset === 0) {
|
|
2078
|
+
var textParent = startContainer.parentElement;
|
|
2079
|
+
if (textParent === editor) {
|
|
2080
|
+
var prev = startContainer.previousSibling;
|
|
2081
|
+
if (prev) {
|
|
2082
|
+
ctx.formulaCache.rangeSetValueTo = prev;
|
|
2083
|
+
return true;
|
|
2084
|
+
}
|
|
2085
|
+
return false;
|
|
2086
|
+
}
|
|
2087
|
+
var el = textParent;
|
|
2088
|
+
while (el && el !== editor) {
|
|
2089
|
+
if (el.previousSibling) {
|
|
2090
|
+
ctx.formulaCache.rangeSetValueTo = el.previousSibling;
|
|
2091
|
+
return true;
|
|
2092
|
+
}
|
|
2093
|
+
el = el.parentElement;
|
|
2094
|
+
}
|
|
2095
|
+
return false;
|
|
2096
|
+
}
|
|
2097
|
+
var p = startContainer.parentElement;
|
|
2098
|
+
if (p && editor.contains(p)) {
|
|
2099
|
+
ctx.formulaCache.rangeSetValueTo = p;
|
|
2100
|
+
return true;
|
|
2101
|
+
}
|
|
2102
|
+
return false;
|
|
2103
|
+
}
|
|
2104
|
+
if (startContainer.nodeType === Node.ELEMENT_NODE && startContainer === editor) {
|
|
2105
|
+
if (startOffset > 0) {
|
|
2106
|
+
var prev = startContainer.childNodes[startOffset - 1];
|
|
2107
|
+
if (prev) {
|
|
2108
|
+
ctx.formulaCache.rangeSetValueTo = prev;
|
|
2109
|
+
return true;
|
|
2110
|
+
}
|
|
2111
|
+
}
|
|
2112
|
+
return false;
|
|
2113
|
+
}
|
|
2114
|
+
if (startContainer.nodeType === Node.ELEMENT_NODE) {
|
|
2115
|
+
if (startOffset > 0) {
|
|
2116
|
+
var prev = startContainer.childNodes[startOffset - 1];
|
|
2117
|
+
if (prev) {
|
|
2118
|
+
ctx.formulaCache.rangeSetValueTo = prev;
|
|
2119
|
+
return true;
|
|
2120
|
+
}
|
|
2121
|
+
}
|
|
2122
|
+
var el = startContainer;
|
|
2123
|
+
while (el && el !== editor) {
|
|
2124
|
+
if (el.previousSibling) {
|
|
2125
|
+
ctx.formulaCache.rangeSetValueTo = el.previousSibling;
|
|
2126
|
+
return true;
|
|
2127
|
+
}
|
|
2128
|
+
el = el.parentElement;
|
|
2129
|
+
}
|
|
2130
|
+
}
|
|
2131
|
+
return false;
|
|
2132
|
+
}
|
|
1839
2133
|
export function israngeseleciton(ctx, istooltip) {
|
|
1840
|
-
var _a, _b, _c;
|
|
2134
|
+
var _a, _b, _c, _d;
|
|
1841
2135
|
if (istooltip == null) {
|
|
1842
2136
|
istooltip = false;
|
|
1843
2137
|
}
|
|
1844
2138
|
var currSelection = window.getSelection();
|
|
1845
|
-
if (currSelection == null)
|
|
2139
|
+
if (currSelection == null) {
|
|
2140
|
+
return false;
|
|
2141
|
+
}
|
|
1846
2142
|
var anchor = currSelection.anchorNode;
|
|
1847
|
-
if (!
|
|
2143
|
+
if (!anchor) {
|
|
2144
|
+
return false;
|
|
2145
|
+
}
|
|
1848
2146
|
var anchorOffset = currSelection.anchorOffset;
|
|
1849
2147
|
var anchorElement = anchor;
|
|
1850
2148
|
var parentElement = anchor.parentNode;
|
|
2149
|
+
var allowRangeInsertionAtCaret = function allowRangeInsertionAtCaret() {
|
|
2150
|
+
var _a, _b;
|
|
2151
|
+
if (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true) {
|
|
2152
|
+
return true;
|
|
2153
|
+
}
|
|
2154
|
+
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");
|
|
2155
|
+
return isCaretAtValidFormulaRangeInsertionPoint(editor);
|
|
2156
|
+
};
|
|
1851
2157
|
if (((_a = anchor === null || anchor === void 0 ? void 0 : anchor.parentNode) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === "span" && anchorOffset !== 0) {
|
|
1852
|
-
var txt = _.trim(anchor.textContent);
|
|
2158
|
+
var txt = _.trim((_b = anchor.textContent) !== null && _b !== void 0 ? _b : "");
|
|
1853
2159
|
var lasttxt = "";
|
|
1854
2160
|
if (txt.length === 0 && anchor.parentNode.previousSibling) {
|
|
1855
2161
|
var ahr = anchor.parentNode.previousSibling;
|
|
1856
2162
|
txt = _.trim(ahr.textContent || "");
|
|
1857
|
-
lasttxt = txt.
|
|
1858
|
-
ctx.formulaCache.rangeSetValueTo = anchor.parentNode;
|
|
2163
|
+
lasttxt = txt.slice(-1);
|
|
1859
2164
|
} else {
|
|
1860
|
-
lasttxt = txt.
|
|
1861
|
-
ctx.formulaCache.rangeSetValueTo = anchor.parentNode;
|
|
2165
|
+
lasttxt = anchorOffset > 0 ? txt.charAt(anchorOffset - 1) : "";
|
|
1862
2166
|
}
|
|
1863
2167
|
if (istooltip && (lasttxt === "(" || lasttxt === ",") || !istooltip && (lasttxt === "(" || lasttxt === "," || lasttxt === "=" || lasttxt in operatorjson || lasttxt === "&")) {
|
|
1864
|
-
|
|
2168
|
+
ctx.formulaCache.rangeSetValueTo = anchor.parentNode;
|
|
2169
|
+
return allowRangeInsertionAtCaret();
|
|
1865
2170
|
}
|
|
1866
2171
|
} else if (anchorElement.id === "luckysheet-rich-text-editor" || anchorElement.id === "luckysheet-functionbox-cell") {
|
|
1867
|
-
var
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
2172
|
+
var editorEl = anchorElement;
|
|
2173
|
+
if (currSelection.rangeCount > 0 && setRangeSetValueToFromCaretPosition(ctx, editorEl, currSelection) && allowRangeInsertionAtCaret()) {
|
|
2174
|
+
return true;
|
|
2175
|
+
}
|
|
2176
|
+
var spans = editorEl.querySelectorAll("span");
|
|
2177
|
+
var txt = _.trim((_c = _.last(spans)) === null || _c === void 0 ? void 0 : _c.innerText);
|
|
2178
|
+
var refSpan = _.last(spans);
|
|
2179
|
+
if (txt.length === 0 && spans.length > 1) {
|
|
2180
|
+
txt = _.trim(spans[spans.length - 2].innerText);
|
|
2181
|
+
refSpan = spans[spans.length - 2];
|
|
1874
2182
|
}
|
|
1875
|
-
var lasttxt = txt.
|
|
2183
|
+
var lasttxt = txt.slice(-1);
|
|
1876
2184
|
if (istooltip && (lasttxt === "(" || lasttxt === ",") || !istooltip && (lasttxt === "(" || lasttxt === "," || lasttxt === "=" || lasttxt in operatorjson || lasttxt === "&")) {
|
|
1877
|
-
|
|
2185
|
+
ctx.formulaCache.rangeSetValueTo = refSpan;
|
|
2186
|
+
return allowRangeInsertionAtCaret();
|
|
1878
2187
|
}
|
|
1879
2188
|
} else if (parentElement.id === "luckysheet-rich-text-editor" || parentElement.id === "luckysheet-functionbox-cell" || anchorOffset === 0) {
|
|
1880
2189
|
if (anchorOffset === 0) {
|
|
1881
2190
|
anchor = anchor.parentNode;
|
|
1882
2191
|
}
|
|
1883
|
-
if (!anchor)
|
|
1884
|
-
|
|
2192
|
+
if (!anchor) {
|
|
2193
|
+
return false;
|
|
2194
|
+
}
|
|
2195
|
+
if (((_d = anchor.previousSibling) === null || _d === void 0 ? void 0 : _d.textContent) == null) {
|
|
2196
|
+
return false;
|
|
2197
|
+
}
|
|
1885
2198
|
if (anchor.previousSibling) {
|
|
1886
2199
|
var txt = _.trim(anchor.previousSibling.textContent);
|
|
1887
|
-
var lasttxt = txt.
|
|
1888
|
-
ctx.formulaCache.rangeSetValueTo = anchor.previousSibling;
|
|
2200
|
+
var lasttxt = txt.slice(-1);
|
|
1889
2201
|
if (istooltip && (lasttxt === "(" || lasttxt === ",") || !istooltip && (lasttxt === "(" || lasttxt === "," || lasttxt === "=" || lasttxt in operatorjson || lasttxt === "&")) {
|
|
1890
|
-
|
|
2202
|
+
ctx.formulaCache.rangeSetValueTo = anchor.previousSibling;
|
|
2203
|
+
return allowRangeInsertionAtCaret();
|
|
1891
2204
|
}
|
|
1892
2205
|
}
|
|
1893
2206
|
}
|
|
2207
|
+
if (!istooltip && (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true)) {
|
|
2208
|
+
var editor = document.getElementById("luckysheet-rich-text-editor") || document.getElementById("luckysheet-functionbox-cell");
|
|
2209
|
+
if (editor && currSelection.rangeCount > 0 && setRangeSetValueToFromCaretPosition(ctx, editor, currSelection) && allowRangeInsertionAtCaret()) {
|
|
2210
|
+
return true;
|
|
2211
|
+
}
|
|
2212
|
+
}
|
|
2213
|
+
return false;
|
|
2214
|
+
}
|
|
2215
|
+
export function isFormulaReferenceInputMode(ctx) {
|
|
2216
|
+
var editor = getActiveFormulaEditorElement(ctx);
|
|
2217
|
+
var inputText = ((editor === null || editor === void 0 ? void 0 : editor.innerText) || "").trim();
|
|
2218
|
+
var refFlowActive = !!ctx.formulaCache.rangestart || !!ctx.formulaCache.rangedrag_column_start || !!ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true;
|
|
2219
|
+
if (refFlowActive) {
|
|
2220
|
+
return true;
|
|
2221
|
+
}
|
|
2222
|
+
if (!inputText.startsWith("=")) {
|
|
2223
|
+
return false;
|
|
2224
|
+
}
|
|
2225
|
+
if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
|
|
2226
|
+
return false;
|
|
2227
|
+
}
|
|
2228
|
+
if (editor && isCaretAtValidFormulaRangeInsertionPoint(editor)) {
|
|
2229
|
+
if (ctx.formulaCache.rangeSelectionActive === false) {
|
|
2230
|
+
ctx.formulaCache.rangeSelectionActive = null;
|
|
2231
|
+
}
|
|
2232
|
+
return true;
|
|
2233
|
+
}
|
|
2234
|
+
if (ctx.formulaCache.rangeSelectionActive === false) {
|
|
2235
|
+
return false;
|
|
2236
|
+
}
|
|
2237
|
+
return israngeseleciton(ctx);
|
|
2238
|
+
}
|
|
2239
|
+
export function maybeRecoverDirtyRangeSelection(ctx) {
|
|
2240
|
+
if (ctx.formulaCache.rangeSelectionActive !== false) {
|
|
2241
|
+
return false;
|
|
2242
|
+
}
|
|
2243
|
+
var editor = getActiveFormulaEditorElement(ctx);
|
|
2244
|
+
if (!editor) {
|
|
2245
|
+
return false;
|
|
2246
|
+
}
|
|
2247
|
+
var inputText = (editor.innerText || "").trim();
|
|
2248
|
+
var atCaretRangeIndex = getFormulaRangeIndexAtCaret(editor);
|
|
2249
|
+
if (inputText.startsWith("=") && atCaretRangeIndex === null && isCaretAtValidFormulaRangeInsertionPoint(editor) && israngeseleciton(ctx)) {
|
|
2250
|
+
ctx.formulaCache.rangeSelectionActive = null;
|
|
2251
|
+
return true;
|
|
2252
|
+
}
|
|
1894
2253
|
return false;
|
|
1895
2254
|
}
|
|
1896
2255
|
export function functionStrChange(txt, type, rc, orient, stindex, step) {
|
|
@@ -1988,18 +2347,22 @@ export function functionStrChange(txt, type, rc, orient, stindex, step) {
|
|
|
1988
2347
|
return function_str;
|
|
1989
2348
|
}
|
|
1990
2349
|
export function rangeSetValue(ctx, cellInput, selected, fxInput) {
|
|
1991
|
-
var _a, _b, _c, _d, _e;
|
|
2350
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1992
2351
|
var parser = new DOMParser();
|
|
1993
2352
|
var doc = parser.parseFromString("<div>".concat(cellInput.innerHTML, "</div>"), "text/html");
|
|
1994
2353
|
var spans = doc.querySelectorAll("span");
|
|
1995
2354
|
var lastSpan = spans[spans.length - 1];
|
|
1996
|
-
|
|
2355
|
+
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;
|
|
2356
|
+
if (lastSpan && isLetterNumberPattern(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !isManagedRangeSpan) {
|
|
1997
2357
|
var htmlR = removeLastSpan(cellInput.innerHTML);
|
|
1998
2358
|
cellInput.innerHTML = "".concat(htmlR);
|
|
2359
|
+
cellInput.focus();
|
|
2360
|
+
var kids = cellInput.childNodes;
|
|
2361
|
+
ctx.formulaCache.rangeSetValueTo = kids.length > 0 ? kids[kids.length - 1] : undefined;
|
|
1999
2362
|
}
|
|
2000
2363
|
var $editor = cellInput;
|
|
2001
2364
|
var $copyTo = fxInput;
|
|
2002
|
-
if ((
|
|
2365
|
+
if (getFormulaEditorOwner(ctx) === "fx") {
|
|
2003
2366
|
$editor = fxInput;
|
|
2004
2367
|
$copyTo = cellInput;
|
|
2005
2368
|
}
|
|
@@ -2014,20 +2377,23 @@ export function rangeSetValue(ctx, cellInput, selected, fxInput) {
|
|
|
2014
2377
|
} else {
|
|
2015
2378
|
range = getRangetxt(ctx, ctx.currentSheetId, selected, ctx.formulaCache.rangetosheet);
|
|
2016
2379
|
}
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
}
|
|
2380
|
+
var activeRangeFlow = ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true;
|
|
2381
|
+
var spanToReplace = !_.isNil(ctx.formulaCache.rangechangeindex) ? $editor.querySelector("span[rangeindex='".concat(ctx.formulaCache.rangechangeindex, "']")) : null;
|
|
2382
|
+
if (activeRangeFlow && spanToReplace) {
|
|
2383
|
+
spanToReplace.innerHTML = range;
|
|
2384
|
+
setCaretPosition(ctx, spanToReplace, 0, range.length);
|
|
2023
2385
|
} else {
|
|
2024
2386
|
var function_str = "<span class=\"fortune-formula-functionrange-cell\" rangeindex=\"".concat(functionHTMLIndex, "\" dir=\"auto\" style=\"color:").concat(colors[functionHTMLIndex], ";\">").concat(range, "</span>");
|
|
2025
2387
|
var newEle = parseElement(function_str);
|
|
2026
2388
|
var refEle = ctx.formulaCache.rangeSetValueTo;
|
|
2389
|
+
if (refEle && !refEle.parentNode) {
|
|
2390
|
+
israngeseleciton(ctx);
|
|
2391
|
+
refEle = ctx.formulaCache.rangeSetValueTo;
|
|
2392
|
+
}
|
|
2027
2393
|
if (refEle && refEle.parentNode) {
|
|
2028
|
-
var leftPar = (
|
|
2029
|
-
if ((
|
|
2030
|
-
(
|
|
2394
|
+
var leftPar = (_c = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _c === void 0 ? void 0 : _c[0];
|
|
2395
|
+
if ((_d = leftPar === null || leftPar === void 0 ? void 0 : leftPar.parentElement) === null || _d === void 0 ? void 0 : _d.classList.contains("luckysheet-formula-text-color")) {
|
|
2396
|
+
(_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);
|
|
2031
2397
|
} else {
|
|
2032
2398
|
refEle.parentNode.insertBefore(newEle, refEle.nextSibling);
|
|
2033
2399
|
}
|
|
@@ -2067,6 +2433,7 @@ function setRangeSelect(container, left, top, height, width) {
|
|
|
2067
2433
|
rangeElement.style.width = "".concat(width, "px");
|
|
2068
2434
|
}
|
|
2069
2435
|
export function rangeDrag(ctx, e, cellInput, scrollLeft, scrollTop, container, fxInput) {
|
|
2436
|
+
ctx.formulaCache.rangeSelectionActive = true;
|
|
2070
2437
|
var func_selectedrange = ctx.formulaCache.func_selectedrange;
|
|
2071
2438
|
if (!func_selectedrange || func_selectedrange.left == null || func_selectedrange.height == null || func_selectedrange.top == null || func_selectedrange.width == null) return;
|
|
2072
2439
|
var rect = container.getBoundingClientRect();
|
|
@@ -2122,6 +2489,20 @@ export function rangeDrag(ctx, e, cellInput, scrollLeft, scrollTop, container, f
|
|
|
2122
2489
|
func_selectedrange.width_move = width;
|
|
2123
2490
|
func_selectedrange.top_move = top;
|
|
2124
2491
|
func_selectedrange.height_move = height;
|
|
2492
|
+
ctx.luckysheet_select_save = [{
|
|
2493
|
+
row: [rowseleted[0], rowseleted[1]],
|
|
2494
|
+
column: [columnseleted[0], columnseleted[1]],
|
|
2495
|
+
row_focus: row_index,
|
|
2496
|
+
column_focus: col_index,
|
|
2497
|
+
left: left,
|
|
2498
|
+
top: top,
|
|
2499
|
+
width: width,
|
|
2500
|
+
height: height,
|
|
2501
|
+
left_move: left,
|
|
2502
|
+
top_move: top,
|
|
2503
|
+
width_move: width,
|
|
2504
|
+
height_move: height
|
|
2505
|
+
}];
|
|
2125
2506
|
rangeSetValue(ctx, cellInput, {
|
|
2126
2507
|
row: rowseleted,
|
|
2127
2508
|
column: columnseleted
|
|
@@ -2130,6 +2511,7 @@ export function rangeDrag(ctx, e, cellInput, scrollLeft, scrollTop, container, f
|
|
|
2130
2511
|
e.preventDefault();
|
|
2131
2512
|
}
|
|
2132
2513
|
export function rangeDragColumn(ctx, e, cellInput, scrollLeft, scrollTop, container, fxInput) {
|
|
2514
|
+
ctx.formulaCache.rangeSelectionActive = true;
|
|
2133
2515
|
var func_selectedrange = ctx.formulaCache.func_selectedrange;
|
|
2134
2516
|
if (!func_selectedrange || func_selectedrange.left == null || func_selectedrange.height == null || func_selectedrange.top == null || func_selectedrange.width == null) return;
|
|
2135
2517
|
var mouse = mousePosition(e.pageX, e.pageY, ctx);
|
|
@@ -2165,6 +2547,20 @@ export function rangeDragColumn(ctx, e, cellInput, scrollLeft, scrollTop, contai
|
|
|
2165
2547
|
func_selectedrange.column = columnseleted;
|
|
2166
2548
|
func_selectedrange.left_move = left;
|
|
2167
2549
|
func_selectedrange.width_move = width;
|
|
2550
|
+
ctx.luckysheet_select_save = [{
|
|
2551
|
+
row: [0, row_index],
|
|
2552
|
+
column: [columnseleted[0], columnseleted[1]],
|
|
2553
|
+
row_focus: 0,
|
|
2554
|
+
column_focus: col_index,
|
|
2555
|
+
left: left,
|
|
2556
|
+
top: row_pre,
|
|
2557
|
+
width: width,
|
|
2558
|
+
height: row - row_pre - 1,
|
|
2559
|
+
left_move: left,
|
|
2560
|
+
top_move: row_pre,
|
|
2561
|
+
width_move: width,
|
|
2562
|
+
height_move: row - row_pre - 1
|
|
2563
|
+
}];
|
|
2168
2564
|
rangeSetValue(ctx, cellInput, {
|
|
2169
2565
|
row: [null, null],
|
|
2170
2566
|
column: columnseleted
|
|
@@ -2172,6 +2568,7 @@ export function rangeDragColumn(ctx, e, cellInput, scrollLeft, scrollTop, contai
|
|
|
2172
2568
|
setRangeSelect(container, left, row_pre, row - row_pre - 1, width);
|
|
2173
2569
|
}
|
|
2174
2570
|
export function rangeDragRow(ctx, e, cellInput, scrollLeft, scrollTop, container, fxInput) {
|
|
2571
|
+
ctx.formulaCache.rangeSelectionActive = true;
|
|
2175
2572
|
var func_selectedrange = ctx.formulaCache.func_selectedrange;
|
|
2176
2573
|
if (!func_selectedrange || func_selectedrange.left == null || func_selectedrange.height == null || func_selectedrange.top == null || func_selectedrange.width == null) return;
|
|
2177
2574
|
var mouse = mousePosition(e.pageX, e.pageY, ctx);
|
|
@@ -2207,6 +2604,20 @@ export function rangeDragRow(ctx, e, cellInput, scrollLeft, scrollTop, container
|
|
|
2207
2604
|
func_selectedrange.row = rowseleted;
|
|
2208
2605
|
func_selectedrange.top_move = top;
|
|
2209
2606
|
func_selectedrange.height_move = height;
|
|
2607
|
+
ctx.luckysheet_select_save = [{
|
|
2608
|
+
row: [rowseleted[0], rowseleted[1]],
|
|
2609
|
+
column: [0, col_index],
|
|
2610
|
+
row_focus: row_index,
|
|
2611
|
+
column_focus: 0,
|
|
2612
|
+
left: col_pre,
|
|
2613
|
+
top: top,
|
|
2614
|
+
width: col - col_pre - 1,
|
|
2615
|
+
height: height,
|
|
2616
|
+
left_move: col_pre,
|
|
2617
|
+
top_move: top,
|
|
2618
|
+
width_move: col - col_pre - 1,
|
|
2619
|
+
height_move: height
|
|
2620
|
+
}];
|
|
2210
2621
|
rangeSetValue(ctx, cellInput, {
|
|
2211
2622
|
row: rowseleted,
|
|
2212
2623
|
column: [null, null]
|
|
@@ -2408,7 +2819,7 @@ export function functionCopy(ctx, txt, mode, step) {
|
|
|
2408
2819
|
str += s;
|
|
2409
2820
|
}
|
|
2410
2821
|
if (i === funcstack.length - 1) {
|
|
2411
|
-
if (iscelldata(_.trim(str))
|
|
2822
|
+
if (iscelldata(_.trim(str))) {
|
|
2412
2823
|
if (mode === "down") {
|
|
2413
2824
|
function_str += downparam(_.trim(str), step);
|
|
2414
2825
|
} else if (mode === "up") {
|
|
@@ -2426,4 +2837,152 @@ export function functionCopy(ctx, txt, mode, step) {
|
|
|
2426
2837
|
}
|
|
2427
2838
|
function_str = function_str.replace(/NaN/g, "");
|
|
2428
2839
|
return function_str;
|
|
2840
|
+
}
|
|
2841
|
+
function normalizeSheetName(ref) {
|
|
2842
|
+
var unquoted = ref.startsWith("'") && ref.endsWith("'") ? ref.slice(1, -1).replace(/''/g, "'") : ref;
|
|
2843
|
+
return unquoted;
|
|
2844
|
+
}
|
|
2845
|
+
function parseRefToken(token) {
|
|
2846
|
+
var m = token.match(/^(\$?)([A-Za-z]+)(\$?)(\d+)$/);
|
|
2847
|
+
if (!m) return null;
|
|
2848
|
+
var colAbs = m[1] === "$";
|
|
2849
|
+
var col = columnCharToIndex(m[2]);
|
|
2850
|
+
var rowAbs = m[3] === "$";
|
|
2851
|
+
var row = parseInt(m[4], 10) - 1;
|
|
2852
|
+
if (Number.isNaN(row) || Number.isNaN(col)) return null;
|
|
2853
|
+
return {
|
|
2854
|
+
colAbs: colAbs,
|
|
2855
|
+
rowAbs: rowAbs,
|
|
2856
|
+
col: col,
|
|
2857
|
+
row: row
|
|
2858
|
+
};
|
|
2859
|
+
}
|
|
2860
|
+
function formatRefToken(parts) {
|
|
2861
|
+
return "".concat(parts.colAbs ? "$" : "").concat(indexToColumnChar(parts.col)).concat(parts.rowAbs ? "$" : "").concat(parts.row + 1);
|
|
2862
|
+
}
|
|
2863
|
+
function moveSingleRefToken(token, sourceRect, targetRowStart, targetColStart) {
|
|
2864
|
+
var parsed = parseRefToken(token);
|
|
2865
|
+
if (!parsed) return token;
|
|
2866
|
+
var inSourceRect = parsed.row >= sourceRect.rowStart && parsed.row <= sourceRect.rowEnd && parsed.col >= sourceRect.colStart && parsed.col <= sourceRect.colEnd;
|
|
2867
|
+
if (!inSourceRect) return token;
|
|
2868
|
+
return formatRefToken(__assign(__assign({}, parsed), {
|
|
2869
|
+
row: targetRowStart + (parsed.row - sourceRect.rowStart),
|
|
2870
|
+
col: targetColStart + (parsed.col - sourceRect.colStart)
|
|
2871
|
+
}));
|
|
2872
|
+
}
|
|
2873
|
+
function moveRangeRefToken(token, sourceRect, targetRowStart, targetColStart) {
|
|
2874
|
+
var parts = token.split(":");
|
|
2875
|
+
if (parts.length === 1) {
|
|
2876
|
+
return moveSingleRefToken(token, sourceRect, targetRowStart, targetColStart);
|
|
2877
|
+
}
|
|
2878
|
+
if (parts.length !== 2) return token;
|
|
2879
|
+
var left = moveSingleRefToken(parts[0], sourceRect, targetRowStart, targetColStart);
|
|
2880
|
+
var right = moveSingleRefToken(parts[1], sourceRect, targetRowStart, targetColStart);
|
|
2881
|
+
return "".concat(left, ":").concat(right);
|
|
2882
|
+
}
|
|
2883
|
+
function moveFormulaReferenceToken(token, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart) {
|
|
2884
|
+
var exclamation = token.lastIndexOf("!");
|
|
2885
|
+
var sheetPrefix = "";
|
|
2886
|
+
var rangeToken = token;
|
|
2887
|
+
var refSheetName = formulaSheetName;
|
|
2888
|
+
if (exclamation > -1) {
|
|
2889
|
+
sheetPrefix = token.slice(0, exclamation + 1);
|
|
2890
|
+
rangeToken = token.slice(exclamation + 1);
|
|
2891
|
+
refSheetName = normalizeSheetName(sheetPrefix.slice(0, -1));
|
|
2892
|
+
}
|
|
2893
|
+
if (refSheetName !== movedSheetName) return token;
|
|
2894
|
+
var moved = moveRangeRefToken(rangeToken, sourceRect, targetRowStart, targetColStart);
|
|
2895
|
+
return "".concat(sheetPrefix).concat(moved);
|
|
2896
|
+
}
|
|
2897
|
+
export function functionMoveReference(txt, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart) {
|
|
2898
|
+
if (!txt) {
|
|
2899
|
+
return "";
|
|
2900
|
+
}
|
|
2901
|
+
if (txt.substring(0, 1) === "=") {
|
|
2902
|
+
txt = txt.substring(1);
|
|
2903
|
+
}
|
|
2904
|
+
var funcstack = txt.split("");
|
|
2905
|
+
var i = 0;
|
|
2906
|
+
var str = "";
|
|
2907
|
+
var function_str = "";
|
|
2908
|
+
var matchConfig = {
|
|
2909
|
+
bracket: 0,
|
|
2910
|
+
comma: 0,
|
|
2911
|
+
squote: 0,
|
|
2912
|
+
dquote: 0
|
|
2913
|
+
};
|
|
2914
|
+
while (i < funcstack.length) {
|
|
2915
|
+
var s = funcstack[i];
|
|
2916
|
+
if (s === "(" && matchConfig.dquote === 0) {
|
|
2917
|
+
matchConfig.bracket += 1;
|
|
2918
|
+
function_str += str.length > 0 ? "".concat(str, "(") : "(";
|
|
2919
|
+
str = "";
|
|
2920
|
+
} else if (s === ")" && matchConfig.dquote === 0) {
|
|
2921
|
+
matchConfig.bracket -= 1;
|
|
2922
|
+
function_str += "".concat(functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart), ")");
|
|
2923
|
+
str = "";
|
|
2924
|
+
} else if (s === '"' && matchConfig.squote === 0) {
|
|
2925
|
+
if (matchConfig.dquote > 0) {
|
|
2926
|
+
function_str += "".concat(str, "\"");
|
|
2927
|
+
matchConfig.dquote -= 1;
|
|
2928
|
+
str = "";
|
|
2929
|
+
} else {
|
|
2930
|
+
matchConfig.dquote += 1;
|
|
2931
|
+
str += '"';
|
|
2932
|
+
}
|
|
2933
|
+
} else if (s === "," && matchConfig.dquote === 0) {
|
|
2934
|
+
function_str += "".concat(functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart), ",");
|
|
2935
|
+
str = "";
|
|
2936
|
+
} else if (s === "&" && matchConfig.dquote === 0) {
|
|
2937
|
+
if (str.length > 0) {
|
|
2938
|
+
function_str += "".concat(functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart), "&");
|
|
2939
|
+
str = "";
|
|
2940
|
+
} else {
|
|
2941
|
+
function_str += "&";
|
|
2942
|
+
}
|
|
2943
|
+
} else if (s in operatorjson && matchConfig.dquote === 0) {
|
|
2944
|
+
var s_next = "";
|
|
2945
|
+
if (i + 1 < funcstack.length) {
|
|
2946
|
+
s_next = funcstack[i + 1];
|
|
2947
|
+
}
|
|
2948
|
+
var p = i - 1;
|
|
2949
|
+
var s_pre = null;
|
|
2950
|
+
if (p >= 0) {
|
|
2951
|
+
do {
|
|
2952
|
+
s_pre = funcstack[p];
|
|
2953
|
+
p -= 1;
|
|
2954
|
+
} while (p >= 0 && s_pre === " ");
|
|
2955
|
+
}
|
|
2956
|
+
if (s + s_next in operatorjson) {
|
|
2957
|
+
if (str.length > 0) {
|
|
2958
|
+
function_str += functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart) + s + s_next;
|
|
2959
|
+
str = "";
|
|
2960
|
+
} else {
|
|
2961
|
+
function_str += s + s_next;
|
|
2962
|
+
}
|
|
2963
|
+
i += 1;
|
|
2964
|
+
} else if (!/[^0-9]/.test(s_next) && s === "-" && (s_pre === "(" || s_pre == null || s_pre === "," || s_pre === " " || s_pre in operatorjson)) {
|
|
2965
|
+
str += s;
|
|
2966
|
+
} else {
|
|
2967
|
+
if (str.length > 0) {
|
|
2968
|
+
function_str += functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart) + s;
|
|
2969
|
+
str = "";
|
|
2970
|
+
} else {
|
|
2971
|
+
function_str += s;
|
|
2972
|
+
}
|
|
2973
|
+
}
|
|
2974
|
+
} else {
|
|
2975
|
+
str += s;
|
|
2976
|
+
}
|
|
2977
|
+
if (i === funcstack.length - 1) {
|
|
2978
|
+
var t = _.trim(str);
|
|
2979
|
+
if (iscelldata(t)) {
|
|
2980
|
+
function_str += moveFormulaReferenceToken(t, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart);
|
|
2981
|
+
} else {
|
|
2982
|
+
function_str += t;
|
|
2983
|
+
}
|
|
2984
|
+
}
|
|
2985
|
+
i += 1;
|
|
2986
|
+
}
|
|
2987
|
+
return function_str;
|
|
2429
2988
|
}
|