@visactor/vtable 0.22.1 → 0.23.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/core/BaseTable.d.ts +1 -0
- package/cjs/core/BaseTable.js +5 -1
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/TABLE_EVENT_TYPE.d.ts +3 -0
- package/cjs/core/TABLE_EVENT_TYPE.js +4 -1
- package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
- package/cjs/event/event.d.ts +2 -0
- package/cjs/event/event.js +30 -1
- package/cjs/event/event.js.map +1 -1
- package/cjs/event/listener/container-dom.js +78 -39
- package/cjs/event/listener/container-dom.js.map +1 -1
- package/cjs/event/listener/table-group.js +5 -4
- package/cjs/event/listener/table-group.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/layout/tree-helper.js +1 -0
- package/cjs/plugins/themes.js +1 -2
- package/cjs/scenegraph/scenegraph.d.ts +3 -0
- package/cjs/scenegraph/scenegraph.js +3 -0
- package/cjs/scenegraph/scenegraph.js.map +1 -1
- package/cjs/scenegraph/select/create-select-border.d.ts +1 -1
- package/cjs/scenegraph/select/create-select-border.js +24 -5
- package/cjs/scenegraph/select/create-select-border.js.map +1 -1
- package/cjs/scenegraph/select/delete-select-border.d.ts +1 -0
- package/cjs/scenegraph/select/delete-select-border.js +15 -4
- package/cjs/scenegraph/select/delete-select-border.js.map +1 -1
- package/cjs/scenegraph/select/move-select-border.js +3 -1
- package/cjs/scenegraph/select/move-select-border.js.map +1 -1
- package/cjs/scenegraph/select/update-select-border.js +9 -2
- package/cjs/scenegraph/select/update-select-border.js.map +1 -1
- package/cjs/state/state.d.ts +10 -0
- package/cjs/state/state.js +17 -0
- package/cjs/state/state.js.map +1 -1
- package/cjs/ts-types/base-table.d.ts +4 -0
- package/cjs/ts-types/base-table.js.map +1 -1
- package/cjs/ts-types/events.d.ts +8 -0
- package/cjs/ts-types/events.js.map +1 -1
- package/cjs/ts-types/theme.js.map +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +334 -80
- package/dist/vtable.min.js +2 -2
- package/es/core/BaseTable.d.ts +1 -0
- package/es/core/BaseTable.js +6 -2
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/TABLE_EVENT_TYPE.d.ts +3 -0
- package/es/core/TABLE_EVENT_TYPE.js +4 -1
- package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
- package/es/event/event.d.ts +2 -0
- package/es/event/event.js +30 -1
- package/es/event/event.js.map +1 -1
- package/es/event/listener/container-dom.js +78 -39
- package/es/event/listener/container-dom.js.map +1 -1
- package/es/event/listener/table-group.js +5 -4
- package/es/event/listener/table-group.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/layout/tree-helper.js +2 -1
- package/es/plugins/themes.js +1 -2
- package/es/scenegraph/scenegraph.d.ts +3 -0
- package/es/scenegraph/scenegraph.js +4 -1
- package/es/scenegraph/scenegraph.js.map +1 -1
- package/es/scenegraph/select/create-select-border.d.ts +1 -1
- package/es/scenegraph/select/create-select-border.js +24 -5
- package/es/scenegraph/select/create-select-border.js.map +1 -1
- package/es/scenegraph/select/delete-select-border.d.ts +1 -0
- package/es/scenegraph/select/delete-select-border.js +12 -2
- package/es/scenegraph/select/delete-select-border.js.map +1 -1
- package/es/scenegraph/select/move-select-border.js +3 -1
- package/es/scenegraph/select/move-select-border.js.map +1 -1
- package/es/scenegraph/select/update-select-border.js +9 -2
- package/es/scenegraph/select/update-select-border.js.map +1 -1
- package/es/state/state.d.ts +10 -0
- package/es/state/state.js +17 -0
- package/es/state/state.js.map +1 -1
- package/es/ts-types/base-table.d.ts +4 -0
- package/es/ts-types/base-table.js.map +1 -1
- package/es/ts-types/events.d.ts +8 -0
- package/es/ts-types/events.js.map +1 -1
- package/es/ts-types/theme.js.map +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +5 -5
package/dist/vtable.js
CHANGED
|
@@ -23050,7 +23050,10 @@
|
|
|
23050
23050
|
CHECKBOX_STATE_CHANGE: 'checkbox_state_change',
|
|
23051
23051
|
AFTER_RENDER: 'after_render',
|
|
23052
23052
|
INITIALIZED: 'initialized',
|
|
23053
|
-
CHANGE_CELL_VALUE: 'change_cell_value'
|
|
23053
|
+
CHANGE_CELL_VALUE: 'change_cell_value',
|
|
23054
|
+
DRAG_FILL_HANDLE_END: 'drag_fill_handle_end',
|
|
23055
|
+
MOUSEDOWN_FILL_HANDLE: 'mousedown_fill_handle',
|
|
23056
|
+
DBLCLICK_FILL_HANDLE: 'dblclick_fill_handle'
|
|
23054
23057
|
};
|
|
23055
23058
|
|
|
23056
23059
|
const judgeType = (value) => {
|
|
@@ -45269,6 +45272,7 @@
|
|
|
45269
45272
|
const colsWidth = scene.table.getColsWidth(computeRectCellRangeStartCol, computeRectCellRangeEndCol);
|
|
45270
45273
|
const rowsHeight = scene.table.getRowsHeight(computeRectCellRangeStartRow, computeRectCellRangeEndRow);
|
|
45271
45274
|
const firstCellBound = scene.highPerformanceGetCell(computeRectCellRangeStartCol, computeRectCellRangeStartRow).globalAABBBounds;
|
|
45275
|
+
const lastCellBound = scene.highPerformanceGetCell(computeRectCellRangeEndCol, computeRectCellRangeEndRow).globalAABBBounds;
|
|
45272
45276
|
selectComp.rect.setAttributes({
|
|
45273
45277
|
x: firstCellBound.x1 - scene.tableGroup.attribute.x,
|
|
45274
45278
|
y: firstCellBound.y1 - scene.tableGroup.attribute.y,
|
|
@@ -45276,6 +45280,15 @@
|
|
|
45276
45280
|
height: rowsHeight,
|
|
45277
45281
|
visible: true
|
|
45278
45282
|
});
|
|
45283
|
+
if (selectComp.fillhandle) {
|
|
45284
|
+
selectComp.fillhandle.setAttributes({
|
|
45285
|
+
x: lastCellBound.x2 - scene.tableGroup.attribute.x - 3,
|
|
45286
|
+
y: lastCellBound.y2 - scene.tableGroup.attribute.y - 3,
|
|
45287
|
+
width: 6,
|
|
45288
|
+
height: 6,
|
|
45289
|
+
visible: true
|
|
45290
|
+
});
|
|
45291
|
+
}
|
|
45279
45292
|
const isNearRowHeader = scene.table.frozenColCount ? startCol === scene.table.frozenColCount : false;
|
|
45280
45293
|
const isNearRightRowHeader = scene.table.rightFrozenColCount
|
|
45281
45294
|
? scene.table.rightFrozenColCount > 0 && endCol === scene.table.colCount - scene.table.rightFrozenColCount - 1
|
|
@@ -45479,6 +45492,7 @@
|
|
|
45479
45492
|
ifExtendSelectRange && extendSelectRange();
|
|
45480
45493
|
scene.selectingRangeComponents.forEach((selectComp, key) => {
|
|
45481
45494
|
selectComp.rect.delete();
|
|
45495
|
+
selectComp.fillhandle?.delete();
|
|
45482
45496
|
});
|
|
45483
45497
|
scene.selectingRangeComponents = new Map();
|
|
45484
45498
|
let needRowHeader = false;
|
|
@@ -45608,11 +45622,27 @@
|
|
|
45608
45622
|
}
|
|
45609
45623
|
|
|
45610
45624
|
function createCellSelectBorder(scene, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes) {
|
|
45625
|
+
let isHasFillHandleRect = !!scene.table.options.excelOptions?.fillHandle;
|
|
45626
|
+
if (scene.table.stateManager.select.ranges?.length > 1) {
|
|
45627
|
+
isHasFillHandleRect = false;
|
|
45628
|
+
scene.removeFillHandleFromSelectComponents();
|
|
45629
|
+
}
|
|
45630
|
+
else if (scene.table.stateManager.select.ranges?.length === 1) {
|
|
45631
|
+
const maxRow = Math.max(scene.table.stateManager.select.ranges[0].start.row, scene.table.stateManager.select.ranges[0].end.row);
|
|
45632
|
+
const maxCol = Math.max(scene.table.stateManager.select.ranges[0].start.col, scene.table.stateManager.select.ranges[0].end.col);
|
|
45633
|
+
if (scene.table.isHeader(maxCol, maxRow)) {
|
|
45634
|
+
isHasFillHandleRect = false;
|
|
45635
|
+
}
|
|
45636
|
+
}
|
|
45637
|
+
if (Array.isArray(strokes) && (strokes[1] === false || strokes[2] === false)) {
|
|
45638
|
+
isHasFillHandleRect = false;
|
|
45639
|
+
}
|
|
45611
45640
|
const startCol = Math.min(start_Col, end_Col);
|
|
45612
45641
|
const startRow = Math.min(start_Row, end_Row);
|
|
45613
45642
|
const endCol = Math.max(start_Col, end_Col);
|
|
45614
45643
|
const endRow = Math.max(start_Row, end_Row);
|
|
45615
45644
|
const firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds;
|
|
45645
|
+
const lastCellBound = scene.highPerformanceGetCell(endCol, endRow).globalAABBBounds;
|
|
45616
45646
|
const theme = scene.table.theme;
|
|
45617
45647
|
const bodyClickBorderColor = theme.selectionStyle?.cellBorderColor;
|
|
45618
45648
|
const bodyClickLineWidth = theme.selectionStyle?.cellBorderLineWidth;
|
|
@@ -45632,9 +45662,23 @@
|
|
|
45632
45662
|
height: 0,
|
|
45633
45663
|
visible: true
|
|
45634
45664
|
});
|
|
45665
|
+
let fillhandle;
|
|
45666
|
+
if (isHasFillHandleRect) {
|
|
45667
|
+
fillhandle = createRect({
|
|
45668
|
+
pickable: false,
|
|
45669
|
+
fill: bodyClickBorderColor,
|
|
45670
|
+
stroke: bodyClickBorderColor,
|
|
45671
|
+
x: lastCellBound.x2 - 3,
|
|
45672
|
+
y: lastCellBound.y2 - 3,
|
|
45673
|
+
width: 6,
|
|
45674
|
+
height: 6,
|
|
45675
|
+
visible: true
|
|
45676
|
+
});
|
|
45677
|
+
}
|
|
45635
45678
|
scene.lastSelectId = selectId;
|
|
45636
45679
|
scene.selectingRangeComponents.set(`${startCol}-${startRow}-${endCol}-${endRow}-${selectId}`, {
|
|
45637
45680
|
rect,
|
|
45681
|
+
fillhandle,
|
|
45638
45682
|
role: selectRangeType
|
|
45639
45683
|
});
|
|
45640
45684
|
scene.tableGroup.insertAfter(rect, selectRangeType === 'body'
|
|
@@ -45654,12 +45698,31 @@
|
|
|
45654
45698
|
: selectRangeType === 'bottomFrozen'
|
|
45655
45699
|
? scene.bottomFrozenGroup
|
|
45656
45700
|
: scene.rightBottomCornerGroup);
|
|
45701
|
+
isHasFillHandleRect &&
|
|
45702
|
+
scene.tableGroup.insertAfter(fillhandle, selectRangeType === 'body'
|
|
45703
|
+
? scene.bodyGroup
|
|
45704
|
+
: selectRangeType === 'columnHeader'
|
|
45705
|
+
? scene.colHeaderGroup
|
|
45706
|
+
: selectRangeType === 'rowHeader'
|
|
45707
|
+
? scene.rowHeaderGroup
|
|
45708
|
+
: selectRangeType === 'cornerHeader'
|
|
45709
|
+
? scene.cornerHeaderGroup
|
|
45710
|
+
: selectRangeType === 'rightTopCorner'
|
|
45711
|
+
? scene.rightTopCornerGroup
|
|
45712
|
+
: selectRangeType === 'rightFrozen'
|
|
45713
|
+
? scene.rightFrozenGroup
|
|
45714
|
+
: selectRangeType === 'leftBottomCorner'
|
|
45715
|
+
? scene.leftBottomCornerGroup
|
|
45716
|
+
: selectRangeType === 'bottomFrozen'
|
|
45717
|
+
? scene.bottomFrozenGroup
|
|
45718
|
+
: scene.rightBottomCornerGroup);
|
|
45657
45719
|
}
|
|
45658
45720
|
|
|
45659
45721
|
function moveSelectingRangeComponentsToSelectedRangeComponents(scene) {
|
|
45660
45722
|
scene.selectingRangeComponents.forEach((rangeComponent, key) => {
|
|
45661
45723
|
if (scene.selectedRangeComponents.get(key)) {
|
|
45662
|
-
scene.
|
|
45724
|
+
scene.selectingRangeComponents.get(key).rect.delete();
|
|
45725
|
+
scene.selectingRangeComponents.get(key).fillhandle?.delete();
|
|
45663
45726
|
}
|
|
45664
45727
|
scene.selectedRangeComponents.set(key, rangeComponent);
|
|
45665
45728
|
});
|
|
@@ -45672,6 +45735,7 @@
|
|
|
45672
45735
|
const lastSelectId = key.split('-')[4];
|
|
45673
45736
|
if (lastSelectId === scene.lastSelectId) {
|
|
45674
45737
|
selectComp.rect.delete();
|
|
45738
|
+
selectComp.fillhandle?.delete();
|
|
45675
45739
|
scene.selectedRangeComponents.delete(key);
|
|
45676
45740
|
}
|
|
45677
45741
|
});
|
|
@@ -45679,9 +45743,16 @@
|
|
|
45679
45743
|
function deleteAllSelectBorder(scene) {
|
|
45680
45744
|
scene.selectedRangeComponents.forEach((selectComp, key) => {
|
|
45681
45745
|
selectComp.rect.delete();
|
|
45746
|
+
selectComp.fillhandle?.delete();
|
|
45682
45747
|
});
|
|
45683
45748
|
scene.selectedRangeComponents = new Map();
|
|
45684
45749
|
}
|
|
45750
|
+
function removeFillHandleFromSelectComponents(scene) {
|
|
45751
|
+
scene.selectedRangeComponents.forEach((selectComp, key) => {
|
|
45752
|
+
selectComp.fillhandle?.delete();
|
|
45753
|
+
selectComp.fillhandle = undefined;
|
|
45754
|
+
});
|
|
45755
|
+
}
|
|
45685
45756
|
|
|
45686
45757
|
function updateRow(removeCells, addCells, updateCells, table) {
|
|
45687
45758
|
const scene = table.scenegraph;
|
|
@@ -47854,6 +47925,9 @@
|
|
|
47854
47925
|
updateCellSelectBorder(newStartCol, newStartRow, newEndCol, newEndRow, extendSelectRange = true) {
|
|
47855
47926
|
updateCellSelectBorder(this, newStartCol, newStartRow, newEndCol, newEndRow, extendSelectRange);
|
|
47856
47927
|
}
|
|
47928
|
+
removeFillHandleFromSelectComponents() {
|
|
47929
|
+
removeFillHandleFromSelectComponents(this);
|
|
47930
|
+
}
|
|
47857
47931
|
recreateAllSelectRangeComponents() {
|
|
47858
47932
|
deleteAllSelectBorder(this);
|
|
47859
47933
|
this.table.stateManager.select.ranges.forEach((cellRange) => {
|
|
@@ -49648,6 +49722,7 @@
|
|
|
49648
49722
|
table;
|
|
49649
49723
|
interactionState;
|
|
49650
49724
|
select;
|
|
49725
|
+
fillHandle;
|
|
49651
49726
|
hover;
|
|
49652
49727
|
hoverIcon;
|
|
49653
49728
|
residentHoverIcon;
|
|
@@ -49750,6 +49825,11 @@
|
|
|
49750
49825
|
},
|
|
49751
49826
|
selecting: false
|
|
49752
49827
|
};
|
|
49828
|
+
this.fillHandle = {
|
|
49829
|
+
isFilling: false,
|
|
49830
|
+
startX: undefined,
|
|
49831
|
+
startY: undefined
|
|
49832
|
+
};
|
|
49753
49833
|
this.hover = {
|
|
49754
49834
|
highlightScope: HighlightScope.single,
|
|
49755
49835
|
cellPos: {
|
|
@@ -49953,6 +50033,9 @@
|
|
|
49953
50033
|
isResizeCol() {
|
|
49954
50034
|
return this.columnResize.resizing;
|
|
49955
50035
|
}
|
|
50036
|
+
isFillHandle() {
|
|
50037
|
+
return this.fillHandle.isFilling;
|
|
50038
|
+
}
|
|
49956
50039
|
isSelecting() {
|
|
49957
50040
|
return this.select.selecting;
|
|
49958
50041
|
}
|
|
@@ -49989,6 +50072,21 @@
|
|
|
49989
50072
|
this.table.stateManager.updateSelectPos(-1, -1);
|
|
49990
50073
|
this.table.scenegraph.updateNextFrame();
|
|
49991
50074
|
}
|
|
50075
|
+
startFillSelect(x, y) {
|
|
50076
|
+
this.fillHandle.isFilling = true;
|
|
50077
|
+
this.fillHandle.startX = x;
|
|
50078
|
+
this.fillHandle.startY = y;
|
|
50079
|
+
this.table.scenegraph.updateNextFrame();
|
|
50080
|
+
this.table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_FILL_HANDLE, {});
|
|
50081
|
+
}
|
|
50082
|
+
endFillSelect() {
|
|
50083
|
+
this.fillHandle.isFilling = false;
|
|
50084
|
+
this.fillHandle.startX = undefined;
|
|
50085
|
+
this.fillHandle.startY = undefined;
|
|
50086
|
+
this.table.stateManager.fillHandle.directionRow = undefined;
|
|
50087
|
+
this.table.eventManager.isDraging &&
|
|
50088
|
+
this.table.fireListeners(TABLE_EVENT_TYPE.DRAG_FILL_HANDLE_END, { direction: this.fillHandle.direction });
|
|
50089
|
+
}
|
|
49992
50090
|
updateResizeCol(xInTable, yInTable) {
|
|
49993
50091
|
updateResizeColumn(xInTable, yInTable, this);
|
|
49994
50092
|
}
|
|
@@ -50732,6 +50830,9 @@
|
|
|
50732
50830
|
else if (stateManager.isMoveCol()) {
|
|
50733
50831
|
eventManager.dealColumnMover(eventArgsSet);
|
|
50734
50832
|
}
|
|
50833
|
+
else if (stateManager.isFillHandle()) {
|
|
50834
|
+
eventManager.dealFillSelect(eventArgsSet, true);
|
|
50835
|
+
}
|
|
50735
50836
|
else {
|
|
50736
50837
|
eventManager.dealTableSelect(eventArgsSet, true);
|
|
50737
50838
|
}
|
|
@@ -50739,7 +50840,12 @@
|
|
|
50739
50840
|
return;
|
|
50740
50841
|
}
|
|
50741
50842
|
if (stateManager.isResizeCol() || eventManager.checkColumnResize(eventArgsSet)) {
|
|
50742
|
-
stateManager.
|
|
50843
|
+
if (table.stateManager.select && eventManager.checkCellFillhandle(eventArgsSet)) {
|
|
50844
|
+
stateManager.updateCursor('crosshair');
|
|
50845
|
+
}
|
|
50846
|
+
else {
|
|
50847
|
+
stateManager.updateCursor('col-resize');
|
|
50848
|
+
}
|
|
50743
50849
|
}
|
|
50744
50850
|
else {
|
|
50745
50851
|
stateManager.updateCursor();
|
|
@@ -50974,7 +51080,7 @@
|
|
|
50974
51080
|
eventManager.dealTableHover(eventArgsSet);
|
|
50975
51081
|
}
|
|
50976
51082
|
else {
|
|
50977
|
-
if (eventManager.checkColumnResize(eventArgsSet, true)) {
|
|
51083
|
+
if (!eventManager.checkCellFillhandle(eventArgsSet) && eventManager.checkColumnResize(eventArgsSet, true)) {
|
|
50978
51084
|
table.scenegraph.updateChartState(null);
|
|
50979
51085
|
stateManager.updateInteractionState(InteractionState.grabing);
|
|
50980
51086
|
return;
|
|
@@ -50983,6 +51089,10 @@
|
|
|
50983
51089
|
stateManager.updateInteractionState(InteractionState.grabing);
|
|
50984
51090
|
return;
|
|
50985
51091
|
}
|
|
51092
|
+
if (eventManager.checkCellFillhandle(eventArgsSet, true) && eventManager.dealFillSelect(eventArgsSet)) {
|
|
51093
|
+
stateManager.updateInteractionState(InteractionState.grabing);
|
|
51094
|
+
return;
|
|
51095
|
+
}
|
|
50986
51096
|
if (eventManager.dealTableSelect(eventArgsSet)) {
|
|
50987
51097
|
stateManager.updateInteractionState(InteractionState.grabing);
|
|
50988
51098
|
}
|
|
@@ -51028,6 +51138,9 @@
|
|
|
51028
51138
|
}
|
|
51029
51139
|
else if (stateManager.isSelecting()) {
|
|
51030
51140
|
table.stateManager.endSelectCells();
|
|
51141
|
+
if (table.stateManager.isFillHandle()) {
|
|
51142
|
+
table.stateManager.endFillSelect();
|
|
51143
|
+
}
|
|
51031
51144
|
const eventArgsSet = getCellEventArgsSet(e);
|
|
51032
51145
|
if (eventArgsSet.eventArgs && table.hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)) {
|
|
51033
51146
|
const cellsEvent = {
|
|
@@ -51625,84 +51738,13 @@
|
|
|
51625
51738
|
return;
|
|
51626
51739
|
}
|
|
51627
51740
|
if (table.stateManager.select.ranges?.length > 0) {
|
|
51628
|
-
const ranges = table.stateManager.select.ranges;
|
|
51629
|
-
const col = Math.min(ranges[0].start.col, ranges[0].end.col);
|
|
51630
|
-
const row = Math.min(ranges[0].start.row, ranges[0].end.row);
|
|
51631
|
-
const values = [];
|
|
51632
51741
|
navigator.clipboard.read().then(clipboardItems => {
|
|
51633
51742
|
for (const item of clipboardItems) {
|
|
51634
51743
|
if (item.types.includes('text/html')) {
|
|
51635
|
-
item
|
|
51636
|
-
blob.text().then(pastedData => {
|
|
51637
|
-
if (pastedData && /(<table)|(<TABLE)/g.test(pastedData)) {
|
|
51638
|
-
const regex = /<tr[^>]*>(.*?)<\/tr>/gs;
|
|
51639
|
-
const matches = Array.from(pastedData.matchAll(regex));
|
|
51640
|
-
for (const match of matches) {
|
|
51641
|
-
const rowContent = match[1];
|
|
51642
|
-
const cellRegex = /<td[^>]*>(.*?)<\/td>/gs;
|
|
51643
|
-
const cellMatches = Array.from(rowContent.matchAll(cellRegex));
|
|
51644
|
-
const rowValues = cellMatches.map(cellMatch => {
|
|
51645
|
-
return (cellMatch[1]
|
|
51646
|
-
.replace(/(<(?!br)([^>]+)>)/gi, '')
|
|
51647
|
-
.replace(/<br(\s*|\/)>[\r\n]?/gim, '\n')
|
|
51648
|
-
.replace(/&/g, '&')
|
|
51649
|
-
.replace(/</g, '<')
|
|
51650
|
-
.replace(/>/g, '>')
|
|
51651
|
-
.replace(/	/gi, '\t')
|
|
51652
|
-
.replace(/ /g, ' '));
|
|
51653
|
-
});
|
|
51654
|
-
values.push(rowValues);
|
|
51655
|
-
}
|
|
51656
|
-
table.changeCellValues(col, row, values, true);
|
|
51657
|
-
}
|
|
51658
|
-
else {
|
|
51659
|
-
navigator.clipboard.read().then(clipboardItems => {
|
|
51660
|
-
for (const item of clipboardItems) {
|
|
51661
|
-
if (item.types.includes('text/plain')) {
|
|
51662
|
-
item.getType('text/plain').then(blob => {
|
|
51663
|
-
blob.text().then(pastedData => {
|
|
51664
|
-
const rows = pastedData.split('\n');
|
|
51665
|
-
rows.forEach(function (rowCells, rowIndex) {
|
|
51666
|
-
const cells = rowCells.split('\t');
|
|
51667
|
-
const rowValues = [];
|
|
51668
|
-
values.push(rowValues);
|
|
51669
|
-
cells.forEach(function (cell, cellIndex) {
|
|
51670
|
-
if (cellIndex === cells.length - 1) {
|
|
51671
|
-
cell = cell.trim();
|
|
51672
|
-
}
|
|
51673
|
-
rowValues.push(cell);
|
|
51674
|
-
});
|
|
51675
|
-
});
|
|
51676
|
-
table.changeCellValues(col, row, values, true);
|
|
51677
|
-
});
|
|
51678
|
-
});
|
|
51679
|
-
}
|
|
51680
|
-
}
|
|
51681
|
-
});
|
|
51682
|
-
}
|
|
51683
|
-
});
|
|
51684
|
-
});
|
|
51744
|
+
pasteHtmlToTable(item);
|
|
51685
51745
|
}
|
|
51686
51746
|
else if (item.types.length === 1 && item.types[0] === 'text/plain') {
|
|
51687
|
-
item
|
|
51688
|
-
blob.text().then(pastedData => {
|
|
51689
|
-
const rows = pastedData.replace(/\r(?!\n)/g, '\r\n').split('\r\n');
|
|
51690
|
-
if (rows.length > 1 && rows[rows.length - 1] === '') {
|
|
51691
|
-
rows.pop();
|
|
51692
|
-
}
|
|
51693
|
-
rows.forEach(function (rowCells, rowIndex) {
|
|
51694
|
-
const cells = rowCells.split('\t');
|
|
51695
|
-
cells.forEach(function (cell, cellIndex) {
|
|
51696
|
-
if (cell.includes('\n')) {
|
|
51697
|
-
cell = cell
|
|
51698
|
-
.replace(/^"(.*)"$/, '$1')
|
|
51699
|
-
.replace(/["]*/g, match => new Array(Math.floor(match.length / 2)).fill('"').join(''));
|
|
51700
|
-
}
|
|
51701
|
-
});
|
|
51702
|
-
});
|
|
51703
|
-
});
|
|
51704
|
-
});
|
|
51705
|
-
table.changeCellValues(col, row, values, true);
|
|
51747
|
+
pasteTextToTable(item);
|
|
51706
51748
|
}
|
|
51707
51749
|
else ;
|
|
51708
51750
|
}
|
|
@@ -51721,6 +51763,138 @@
|
|
|
51721
51763
|
}
|
|
51722
51764
|
table.resize();
|
|
51723
51765
|
});
|
|
51766
|
+
function pasteHtmlToTable(item) {
|
|
51767
|
+
const ranges = table.stateManager.select.ranges;
|
|
51768
|
+
const selectRangeLength = ranges.length;
|
|
51769
|
+
const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);
|
|
51770
|
+
const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
|
|
51771
|
+
const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);
|
|
51772
|
+
const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
|
|
51773
|
+
let pasteValuesColCount = 0;
|
|
51774
|
+
let pasteValuesRowCount = 0;
|
|
51775
|
+
let values = [];
|
|
51776
|
+
item.getType('text/html').then((blob) => {
|
|
51777
|
+
blob.text().then((pastedData) => {
|
|
51778
|
+
if (pastedData && /(<table)|(<TABLE)/g.test(pastedData)) {
|
|
51779
|
+
const regex = /<tr[^>]*>(.*?)<\/tr>/gs;
|
|
51780
|
+
const matches = Array.from(pastedData.matchAll(regex));
|
|
51781
|
+
for (const match of matches) {
|
|
51782
|
+
const rowContent = match[1];
|
|
51783
|
+
const cellRegex = /<td[^>]*>(.*?)<\/td>/gs;
|
|
51784
|
+
const cellMatches = Array.from(rowContent.matchAll(cellRegex));
|
|
51785
|
+
const rowValues = cellMatches.map(cellMatch => {
|
|
51786
|
+
return (cellMatch[1]
|
|
51787
|
+
.replace(/(<(?!br)([^>]+)>)/gi, '')
|
|
51788
|
+
.replace(/<br(\s*|\/)>[\r\n]?/gim, '\n')
|
|
51789
|
+
.replace(/&/g, '&')
|
|
51790
|
+
.replace(/</g, '<')
|
|
51791
|
+
.replace(/>/g, '>')
|
|
51792
|
+
.replace(/	/gi, '\t')
|
|
51793
|
+
.replace(/ /g, ' '));
|
|
51794
|
+
});
|
|
51795
|
+
values.push(rowValues);
|
|
51796
|
+
pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);
|
|
51797
|
+
}
|
|
51798
|
+
pasteValuesRowCount = values.length ?? 0;
|
|
51799
|
+
values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);
|
|
51800
|
+
table.changeCellValues(col, row, values, true);
|
|
51801
|
+
}
|
|
51802
|
+
else {
|
|
51803
|
+
navigator.clipboard.read().then(clipboardItems => {
|
|
51804
|
+
for (const item of clipboardItems) {
|
|
51805
|
+
if (item.types.includes('text/plain')) {
|
|
51806
|
+
item.getType('text/plain').then((blob) => {
|
|
51807
|
+
blob.text().then(_pasteValue);
|
|
51808
|
+
});
|
|
51809
|
+
}
|
|
51810
|
+
}
|
|
51811
|
+
});
|
|
51812
|
+
}
|
|
51813
|
+
});
|
|
51814
|
+
});
|
|
51815
|
+
}
|
|
51816
|
+
function _pasteValue(pastedData) {
|
|
51817
|
+
const ranges = table.stateManager.select.ranges;
|
|
51818
|
+
const selectRangeLength = ranges.length;
|
|
51819
|
+
const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);
|
|
51820
|
+
const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
|
|
51821
|
+
const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);
|
|
51822
|
+
const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
|
|
51823
|
+
let pasteValuesColCount = 0;
|
|
51824
|
+
let pasteValuesRowCount = 0;
|
|
51825
|
+
let values = [];
|
|
51826
|
+
const rows = pastedData.split('\n');
|
|
51827
|
+
rows.forEach(function (rowCells, rowIndex) {
|
|
51828
|
+
const cells = rowCells.split('\t');
|
|
51829
|
+
const rowValues = [];
|
|
51830
|
+
values.push(rowValues);
|
|
51831
|
+
cells.forEach(function (cell, cellIndex) {
|
|
51832
|
+
if (cellIndex === cells.length - 1) {
|
|
51833
|
+
cell = cell.trim();
|
|
51834
|
+
}
|
|
51835
|
+
rowValues.push(cell);
|
|
51836
|
+
});
|
|
51837
|
+
pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);
|
|
51838
|
+
});
|
|
51839
|
+
pasteValuesRowCount = values.length ?? 0;
|
|
51840
|
+
values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);
|
|
51841
|
+
table.changeCellValues(col, row, values, true);
|
|
51842
|
+
}
|
|
51843
|
+
function pasteTextToTable(item) {
|
|
51844
|
+
const ranges = table.stateManager.select.ranges;
|
|
51845
|
+
const selectRangeLength = ranges.length;
|
|
51846
|
+
const col = Math.min(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);
|
|
51847
|
+
const row = Math.min(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
|
|
51848
|
+
const maxCol = Math.max(ranges[selectRangeLength - 1].start.col, ranges[selectRangeLength - 1].end.col);
|
|
51849
|
+
const maxRow = Math.max(ranges[selectRangeLength - 1].start.row, ranges[selectRangeLength - 1].end.row);
|
|
51850
|
+
let pasteValuesColCount = 0;
|
|
51851
|
+
let pasteValuesRowCount = 0;
|
|
51852
|
+
item.getType('text/plain').then((blob) => {
|
|
51853
|
+
blob.text().then((pastedData) => {
|
|
51854
|
+
const rows = pastedData.replace(/\r(?!\n)/g, '\r\n').split('\r\n');
|
|
51855
|
+
let values = [];
|
|
51856
|
+
if (rows.length > 1 && rows[rows.length - 1] === '') {
|
|
51857
|
+
rows.pop();
|
|
51858
|
+
}
|
|
51859
|
+
rows.forEach(function (rowCells, rowIndex) {
|
|
51860
|
+
const cells = rowCells.split('\t');
|
|
51861
|
+
const rowValues = [];
|
|
51862
|
+
values.push(rowValues);
|
|
51863
|
+
cells.forEach(function (cell, cellIndex) {
|
|
51864
|
+
if (cell.includes('\n')) {
|
|
51865
|
+
cell = cell
|
|
51866
|
+
.replace(/^"(.*)"$/, '$1')
|
|
51867
|
+
.replace(/["]*/g, match => new Array(Math.floor(match.length / 2)).fill('"').join(''));
|
|
51868
|
+
}
|
|
51869
|
+
rowValues.push(cell);
|
|
51870
|
+
});
|
|
51871
|
+
pasteValuesColCount = Math.max(pasteValuesColCount, rowValues?.length ?? 0);
|
|
51872
|
+
});
|
|
51873
|
+
pasteValuesRowCount = values.length ?? 0;
|
|
51874
|
+
values = handlePasteValues(values, pasteValuesRowCount, pasteValuesColCount, maxRow - row + 1, maxCol - col + 1);
|
|
51875
|
+
table.changeCellValues(col, row, values, true);
|
|
51876
|
+
});
|
|
51877
|
+
});
|
|
51878
|
+
}
|
|
51879
|
+
function handlePasteValues(values, rowCount, colCount, selectedRowCount, selectedColCount) {
|
|
51880
|
+
if (selectedColCount > colCount || selectedRowCount > rowCount) {
|
|
51881
|
+
if (selectedColCount % colCount === 0 && selectedRowCount % rowCount === 0) {
|
|
51882
|
+
const toPasteValues = [];
|
|
51883
|
+
for (let i = 0; i < selectedRowCount; i++) {
|
|
51884
|
+
const rowPasteValue = [];
|
|
51885
|
+
toPasteValues.push(rowPasteValue);
|
|
51886
|
+
for (let j = 0; j < selectedColCount; j++) {
|
|
51887
|
+
const copiedRow = i % rowCount;
|
|
51888
|
+
const copiedCol = j % colCount;
|
|
51889
|
+
rowPasteValue.push(values[copiedRow][copiedCol]);
|
|
51890
|
+
}
|
|
51891
|
+
}
|
|
51892
|
+
return toPasteValues;
|
|
51893
|
+
}
|
|
51894
|
+
return values;
|
|
51895
|
+
}
|
|
51896
|
+
return values;
|
|
51897
|
+
}
|
|
51724
51898
|
const globalPointerdownCallback = (e) => {
|
|
51725
51899
|
table.eventManager.LastBodyPointerXY = { x: e.x, y: e.y };
|
|
51726
51900
|
table.eventManager.isDown = true;
|
|
@@ -52110,7 +52284,10 @@
|
|
|
52110
52284
|
if (e.federatedEvent) {
|
|
52111
52285
|
const eventArgsSet = getCellEventArgsSet(e.federatedEvent);
|
|
52112
52286
|
const resizeCol = this.table.scenegraph.getResizeColAt(eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y, eventArgsSet.eventArgs?.targetCell);
|
|
52113
|
-
if (this.table.
|
|
52287
|
+
if (this.table.eventManager.checkCellFillhandle(eventArgsSet)) {
|
|
52288
|
+
this.table.fireListeners(TABLE_EVENT_TYPE.DBLCLICK_FILL_HANDLE, {});
|
|
52289
|
+
}
|
|
52290
|
+
else if (this.table._canResizeColumn(resizeCol.col, resizeCol.row) && resizeCol.col >= 0) {
|
|
52114
52291
|
this.table.scenegraph.updateAutoColWidth(resizeCol.col);
|
|
52115
52292
|
this.table.scenegraph.updateChartSize(resizeCol.col);
|
|
52116
52293
|
const state = this.table.stateManager;
|
|
@@ -52187,6 +52364,53 @@
|
|
|
52187
52364
|
}
|
|
52188
52365
|
return false;
|
|
52189
52366
|
}
|
|
52367
|
+
dealFillSelect(eventArgsSet, isSelectMoving) {
|
|
52368
|
+
const { eventArgs } = eventArgsSet;
|
|
52369
|
+
if (eventArgs) {
|
|
52370
|
+
if (this.table.stateManager.select?.ranges?.length && this.table.stateManager.isFillHandle()) {
|
|
52371
|
+
let updateRow;
|
|
52372
|
+
let updateCol;
|
|
52373
|
+
const currentRange = this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1];
|
|
52374
|
+
if (isSelectMoving) {
|
|
52375
|
+
if (!isValid$3(this.table.stateManager.fillHandle.directionRow)) {
|
|
52376
|
+
if (Math.abs(this.table.stateManager.fillHandle.startY - eventArgsSet.abstractPos.y) >=
|
|
52377
|
+
Math.abs(this.table.stateManager.fillHandle.startX - eventArgsSet.abstractPos.x)) {
|
|
52378
|
+
this.table.stateManager.fillHandle.directionRow = true;
|
|
52379
|
+
if (this.table.stateManager.fillHandle.startY - eventArgsSet.abstractPos.y > 0) {
|
|
52380
|
+
this.table.stateManager.fillHandle.direction = 'top';
|
|
52381
|
+
}
|
|
52382
|
+
else {
|
|
52383
|
+
this.table.stateManager.fillHandle.direction = 'bottom';
|
|
52384
|
+
}
|
|
52385
|
+
}
|
|
52386
|
+
else {
|
|
52387
|
+
this.table.stateManager.fillHandle.directionRow = false;
|
|
52388
|
+
if (this.table.stateManager.fillHandle.startX - eventArgsSet.abstractPos.x > 0) {
|
|
52389
|
+
this.table.stateManager.fillHandle.direction = 'left';
|
|
52390
|
+
}
|
|
52391
|
+
else {
|
|
52392
|
+
this.table.stateManager.fillHandle.direction = 'right';
|
|
52393
|
+
}
|
|
52394
|
+
}
|
|
52395
|
+
}
|
|
52396
|
+
if (this.table.stateManager.fillHandle.directionRow) {
|
|
52397
|
+
updateRow = eventArgs.row;
|
|
52398
|
+
updateCol = currentRange.end.col;
|
|
52399
|
+
}
|
|
52400
|
+
else {
|
|
52401
|
+
updateRow = currentRange.end.row;
|
|
52402
|
+
updateCol = eventArgs.col;
|
|
52403
|
+
}
|
|
52404
|
+
}
|
|
52405
|
+
this.table.stateManager.updateSelectPos(isSelectMoving ? updateCol : currentRange.end.col, isSelectMoving ? updateRow : currentRange.end.row, true, eventArgs.event.ctrlKey || eventArgs.event.metaKey);
|
|
52406
|
+
}
|
|
52407
|
+
else {
|
|
52408
|
+
this.table.stateManager.updateSelectPos(eventArgs.col, eventArgs.row, eventArgs.event.shiftKey, eventArgs.event.ctrlKey || eventArgs.event.metaKey);
|
|
52409
|
+
}
|
|
52410
|
+
return true;
|
|
52411
|
+
}
|
|
52412
|
+
return false;
|
|
52413
|
+
}
|
|
52190
52414
|
deelTableSelectAll() {
|
|
52191
52415
|
this.table.stateManager.updateSelectPos(-1, -1, false, false, true);
|
|
52192
52416
|
}
|
|
@@ -52205,6 +52429,29 @@
|
|
|
52205
52429
|
}
|
|
52206
52430
|
return false;
|
|
52207
52431
|
}
|
|
52432
|
+
checkCellFillhandle(eventArgsSet, update) {
|
|
52433
|
+
if (this.table.options.excelOptions?.fillHandle) {
|
|
52434
|
+
const { eventArgs } = eventArgsSet;
|
|
52435
|
+
if (eventArgs) {
|
|
52436
|
+
if (this.table.stateManager.select?.ranges?.length) {
|
|
52437
|
+
const lastCol = this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.col;
|
|
52438
|
+
const lastRow = this.table.stateManager.select.ranges[this.table.stateManager.select.ranges.length - 1].end.row;
|
|
52439
|
+
const lastCellBound = this.table.scenegraph.highPerformanceGetCell(lastCol, lastRow).globalAABBBounds;
|
|
52440
|
+
const distanceX = Math.abs(eventArgsSet.abstractPos.x - lastCellBound.x2);
|
|
52441
|
+
const distanceY = Math.abs(eventArgsSet.abstractPos.y - lastCellBound.y2);
|
|
52442
|
+
const squareSize = 6 * 3;
|
|
52443
|
+
if (this.table.stateManager.fillHandle?.isFilling ||
|
|
52444
|
+
(distanceX <= squareSize / 2 && distanceY <= squareSize / 2)) {
|
|
52445
|
+
if (update) {
|
|
52446
|
+
this.table.stateManager.startFillSelect(eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y);
|
|
52447
|
+
}
|
|
52448
|
+
return true;
|
|
52449
|
+
}
|
|
52450
|
+
}
|
|
52451
|
+
}
|
|
52452
|
+
}
|
|
52453
|
+
return false;
|
|
52454
|
+
}
|
|
52208
52455
|
dealColumnResize(xInTable, yInTable) {
|
|
52209
52456
|
this.table.stateManager.updateResizeCol(xInTable, yInTable);
|
|
52210
52457
|
}
|
|
@@ -55495,7 +55742,7 @@
|
|
|
55495
55742
|
return TABLE_EVENT_TYPE;
|
|
55496
55743
|
}
|
|
55497
55744
|
options;
|
|
55498
|
-
version = "0.
|
|
55745
|
+
version = "0.23.0-alpha.0";
|
|
55499
55746
|
pagination;
|
|
55500
55747
|
id = `VTable${Date.now()}`;
|
|
55501
55748
|
headerStyleCache;
|
|
@@ -57726,6 +57973,13 @@
|
|
|
57726
57973
|
}
|
|
57727
57974
|
return cellInfoArray;
|
|
57728
57975
|
}
|
|
57976
|
+
getSelectedCellRanges() {
|
|
57977
|
+
const ranges = this.stateManager.select.ranges;
|
|
57978
|
+
if (!ranges.length) {
|
|
57979
|
+
return [];
|
|
57980
|
+
}
|
|
57981
|
+
return cloneDeep(ranges);
|
|
57982
|
+
}
|
|
57729
57983
|
measureText(text, font) {
|
|
57730
57984
|
return textMeasure.measureText(text, font);
|
|
57731
57985
|
}
|
|
@@ -67576,7 +67830,7 @@
|
|
|
67576
67830
|
}
|
|
67577
67831
|
|
|
67578
67832
|
registerForVrender();
|
|
67579
|
-
const version = "0.
|
|
67833
|
+
const version = "0.23.0-alpha.0";
|
|
67580
67834
|
function getIcons() {
|
|
67581
67835
|
return get$2();
|
|
67582
67836
|
}
|