canvas-datagrid 0.4.5 → 0.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/canvas-datagrid.debug.js +3049 -1519
- package/dist/canvas-datagrid.debug.map +1 -1
- package/dist/canvas-datagrid.js +1 -1
- package/dist/canvas-datagrid.module.js +1 -1
- package/dist/canvas-datagrid.module.js.map +1 -1
- package/dist/types.d.ts +270 -69
- package/lib/component.js +1 -2
- package/lib/contextMenu.js +10 -102
- package/lib/defaults.js +3 -0
- package/lib/docs.js +5 -2
- package/lib/dom.js +2 -1
- package/lib/draw.js +75 -58
- package/lib/events/index.js +154 -230
- package/lib/intf.js +24 -219
- package/lib/main.js +2 -0
- package/lib/publicMethods.js +9 -378
- package/lib/selections/index.js +985 -0
- package/lib/selections/type.d.ts +38 -0
- package/lib/selections/util.js +1319 -0
- package/package.json +3 -3
package/lib/events/index.js
CHANGED
|
@@ -702,32 +702,9 @@ export default function (self) {
|
|
|
702
702
|
if (self.hovers.onFilterButton) return;
|
|
703
703
|
if (self.hovers.onCellTreeIcon) return;
|
|
704
704
|
if (!self.dragAddToSelection && cell.rowIndex !== undefined) {
|
|
705
|
-
if (
|
|
706
|
-
self.selections[cell.rowIndex] &&
|
|
707
|
-
self.selections[cell.rowIndex].indexOf(cell.columnIndex) !==
|
|
708
|
-
-1
|
|
709
|
-
) {
|
|
710
|
-
self.selections[cell.rowIndex].splice(
|
|
711
|
-
self.selections[cell.rowIndex].indexOf(cell.columnIndex),
|
|
712
|
-
1,
|
|
713
|
-
);
|
|
714
|
-
}
|
|
705
|
+
if (self.isCellSelected(cell)) self.unselectCell(cell);
|
|
715
706
|
} else {
|
|
716
|
-
self.
|
|
717
|
-
self.selections[cell.rowIndex] || [];
|
|
718
|
-
if (
|
|
719
|
-
self.selections[cell.rowIndex].indexOf(cell.columnIndex) ===
|
|
720
|
-
-1
|
|
721
|
-
) {
|
|
722
|
-
self.selections[cell.rowIndex].push(cell.columnIndex);
|
|
723
|
-
var event = {
|
|
724
|
-
selections: self.selections,
|
|
725
|
-
selectedData: self.getSelectedData(),
|
|
726
|
-
selectedCells: self.getSelectedCells(),
|
|
727
|
-
selectionBounds: self.getSelectionBounds(),
|
|
728
|
-
};
|
|
729
|
-
self.dispatchEvent('selectionchanged', event);
|
|
730
|
-
}
|
|
707
|
+
if (!self.isCellSelected(cell)) self.selectCell(cell);
|
|
731
708
|
}
|
|
732
709
|
}
|
|
733
710
|
}
|
|
@@ -740,11 +717,8 @@ export default function (self) {
|
|
|
740
717
|
dragBounds.right !== self.selectionBounds.right) &&
|
|
741
718
|
!ctrl
|
|
742
719
|
) {
|
|
743
|
-
if (!(cell.hovered && self.hovers.onFilterButton))
|
|
744
|
-
self.
|
|
745
|
-
self.selectedRows = [];
|
|
746
|
-
self.selectedColumns = [];
|
|
747
|
-
}
|
|
720
|
+
if (!(cell.hovered && self.hovers.onFilterButton))
|
|
721
|
+
self.clearSelections();
|
|
748
722
|
if (dragBounds.top === -1) {
|
|
749
723
|
dragBounds.top = 0;
|
|
750
724
|
}
|
|
@@ -832,17 +806,7 @@ export default function (self) {
|
|
|
832
806
|
if (startingBounds === JSON.stringify(sb)) {
|
|
833
807
|
return;
|
|
834
808
|
}
|
|
835
|
-
|
|
836
|
-
selections: self.selections,
|
|
837
|
-
selectionBounds: self.getSelectionBounds(),
|
|
838
|
-
selectedCells: self.getSelectedCells(),
|
|
839
|
-
};
|
|
840
|
-
Object.defineProperty(ev, 'selectedData', {
|
|
841
|
-
get: function () {
|
|
842
|
-
return self.getSelectedData();
|
|
843
|
-
},
|
|
844
|
-
});
|
|
845
|
-
self.dispatchEvent('selectionchanged', ev);
|
|
809
|
+
self.dispatchEvent('selectionchanged', self.getContextOfSelectionEvent());
|
|
846
810
|
}
|
|
847
811
|
if (self.input) {
|
|
848
812
|
self.endEdit();
|
|
@@ -914,7 +878,6 @@ export default function (self) {
|
|
|
914
878
|
return;
|
|
915
879
|
}
|
|
916
880
|
}
|
|
917
|
-
self.selections[i.rowIndex] = self.selections[i.rowIndex] || [];
|
|
918
881
|
if (
|
|
919
882
|
self.attributes.selectionMode === 'row' ||
|
|
920
883
|
self.currentCell.style === 'rowHeaderCell'
|
|
@@ -947,6 +910,7 @@ export default function (self) {
|
|
|
947
910
|
self.draw(true);
|
|
948
911
|
};
|
|
949
912
|
self.dragResizeColumn = function (e) {
|
|
913
|
+
const resizingColumn = self.dragMode === 'ew-resize';
|
|
950
914
|
var pos, x, y;
|
|
951
915
|
pos = self.getLayerPos(e);
|
|
952
916
|
x = self.resizingStartingWidth + pos.x - self.dragStart.x;
|
|
@@ -958,14 +922,31 @@ export default function (self) {
|
|
|
958
922
|
y = self.style.minRowHeight;
|
|
959
923
|
}
|
|
960
924
|
if (
|
|
961
|
-
self.dispatchEvent('resizecolumn', {
|
|
925
|
+
self.dispatchEvent(resizingColumn ? 'resizecolumn' : 'resizerow', {
|
|
962
926
|
x: x,
|
|
963
927
|
y: y,
|
|
928
|
+
width: x,
|
|
929
|
+
height: y,
|
|
930
|
+
columnIndex: resizingColumn ? self.draggingItem.columnIndex : undefined,
|
|
931
|
+
rowIndex: resizingColumn ? undefined : self.draggingItem.rowIndex,
|
|
964
932
|
draggingItem: self.draggingItem,
|
|
965
933
|
})
|
|
966
934
|
) {
|
|
967
935
|
return false;
|
|
968
936
|
}
|
|
937
|
+
if (self.attributes.resizeAfterDragged) {
|
|
938
|
+
self.pendingDragResize = {
|
|
939
|
+
item: self.draggingItem,
|
|
940
|
+
width: x,
|
|
941
|
+
height: y,
|
|
942
|
+
x: e.clientX,
|
|
943
|
+
y: e.clientY,
|
|
944
|
+
};
|
|
945
|
+
} else {
|
|
946
|
+
self.dragResizeApply(self.draggingItem, x, y);
|
|
947
|
+
}
|
|
948
|
+
};
|
|
949
|
+
self.dragResizeApply = function (draggingItem, width, height) {
|
|
969
950
|
if (
|
|
970
951
|
self.scrollBox.scrollLeft >
|
|
971
952
|
self.scrollBox.scrollWidth - self.attributes.resizeScrollZone &&
|
|
@@ -975,29 +956,27 @@ export default function (self) {
|
|
|
975
956
|
}
|
|
976
957
|
if (self.dragMode === 'ew-resize') {
|
|
977
958
|
self.sizes.columns[
|
|
978
|
-
|
|
959
|
+
draggingItem.header.style === 'rowHeaderCell'
|
|
979
960
|
? 'cornerCell'
|
|
980
|
-
:
|
|
981
|
-
] =
|
|
961
|
+
: draggingItem.sortColumnIndex
|
|
962
|
+
] = width;
|
|
982
963
|
if (
|
|
983
|
-
['rowHeaderCell', 'cornerCell'].indexOf(
|
|
984
|
-
|
|
985
|
-
) !== -1
|
|
964
|
+
['rowHeaderCell', 'cornerCell'].indexOf(draggingItem.header.style) !==
|
|
965
|
+
-1
|
|
986
966
|
) {
|
|
987
967
|
self.resize(true);
|
|
988
968
|
}
|
|
989
969
|
self.resizeChildGrids();
|
|
990
970
|
return;
|
|
991
|
-
}
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
self.sizes.trees[self.draggingItem.rowIndex] = y;
|
|
971
|
+
} else if (self.dragMode === 'ns-resize') {
|
|
972
|
+
if (draggingItem.rowOpen) {
|
|
973
|
+
self.sizes.trees[draggingItem.rowIndex] = height;
|
|
995
974
|
} else if (self.attributes.globalRowResize) {
|
|
996
|
-
self.style.cellHeight =
|
|
975
|
+
self.style.cellHeight = height;
|
|
997
976
|
} else {
|
|
998
|
-
self.sizes.rows[
|
|
977
|
+
self.sizes.rows[draggingItem.rowIndex] = height;
|
|
999
978
|
}
|
|
1000
|
-
self.dispatchEvent('resizerow', { row:
|
|
979
|
+
self.dispatchEvent('resizerow', { row: height });
|
|
1001
980
|
self.resizeChildGrids();
|
|
1002
981
|
return;
|
|
1003
982
|
}
|
|
@@ -1006,6 +985,15 @@ export default function (self) {
|
|
|
1006
985
|
self.stopDragResize = function (event) {
|
|
1007
986
|
const pos = self.getLayerPos(event);
|
|
1008
987
|
|
|
988
|
+
if (self.attributes.resizeAfterDragged) {
|
|
989
|
+
self.dragResizeApply(
|
|
990
|
+
self.pendingDragResize.item,
|
|
991
|
+
self.pendingDragResize.width,
|
|
992
|
+
self.pendingDragResize.height,
|
|
993
|
+
);
|
|
994
|
+
self.pendingDragResize = undefined;
|
|
995
|
+
}
|
|
996
|
+
|
|
1009
997
|
if (self.dragMode === 'ew-resize') {
|
|
1010
998
|
const hasMoved = !!(pos.x - self.dragStart.x);
|
|
1011
999
|
// Check that dragItem is selected or part of selection.
|
|
@@ -1021,6 +1009,18 @@ export default function (self) {
|
|
|
1021
1009
|
// If the column is selected, resize it to width plus any other selected columns.
|
|
1022
1010
|
self.fitSelectedColumns(width);
|
|
1023
1011
|
}
|
|
1012
|
+
} else if (self.dragMode === 'ns-resize') {
|
|
1013
|
+
// Do the above for rows.
|
|
1014
|
+
const hasMoved = !!(pos.y - self.dragStart.y);
|
|
1015
|
+
const dragItemIsSelected = self.isRowSelected(self.dragItem.rowIndex);
|
|
1016
|
+
|
|
1017
|
+
if (hasMoved && dragItemIsSelected) {
|
|
1018
|
+
const height = Math.max(
|
|
1019
|
+
self.resizingStartingHeight + pos.y - self.dragStart.y,
|
|
1020
|
+
self.style.minRowHeight,
|
|
1021
|
+
);
|
|
1022
|
+
self.fitSelectedRows(height);
|
|
1023
|
+
}
|
|
1024
1024
|
}
|
|
1025
1025
|
|
|
1026
1026
|
self.resize();
|
|
@@ -1194,17 +1194,16 @@ export default function (self) {
|
|
|
1194
1194
|
}
|
|
1195
1195
|
};
|
|
1196
1196
|
self.stopDragReorder = function (e) {
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
}[self.dragMode];
|
|
1197
|
+
let originalIndex;
|
|
1198
|
+
let targetIndex;
|
|
1199
|
+
const orderLists = {
|
|
1200
|
+
'row-reorder': self.orders.rows,
|
|
1201
|
+
'column-reorder': self.orders.columns,
|
|
1202
|
+
};
|
|
1203
|
+
const indexName = {
|
|
1204
|
+
'row-reorder': 'rowIndex',
|
|
1205
|
+
'column-reorder': 'sortColumnIndex',
|
|
1206
|
+
}[self.dragMode];
|
|
1208
1207
|
window.removeEventListener('mousemove', self.dragReorder, false);
|
|
1209
1208
|
window.removeEventListener('mouseup', self.stopDragReorder, false);
|
|
1210
1209
|
if (
|
|
@@ -1216,7 +1215,7 @@ export default function (self) {
|
|
|
1216
1215
|
(self.dragMode === 'row-reorder' &&
|
|
1217
1216
|
self.reorderTarget.rowIndex > -1 &&
|
|
1218
1217
|
self.reorderTarget.rowIndex < self.viewData.length)) &&
|
|
1219
|
-
self.reorderObject[
|
|
1218
|
+
self.reorderObject[indexName] !== self.reorderTarget[indexName] &&
|
|
1220
1219
|
!self.dispatchEvent('reorder', {
|
|
1221
1220
|
NativeEvent: e,
|
|
1222
1221
|
source: self.reorderObject,
|
|
@@ -1225,61 +1224,64 @@ export default function (self) {
|
|
|
1225
1224
|
})
|
|
1226
1225
|
) {
|
|
1227
1226
|
self.ignoreNextClick = true;
|
|
1228
|
-
|
|
1229
|
-
|
|
1227
|
+
originalIndex = orderLists[self.dragMode].indexOf(
|
|
1228
|
+
self.reorderObject[indexName],
|
|
1229
|
+
);
|
|
1230
|
+
targetIndex = orderLists[self.dragMode].indexOf(
|
|
1231
|
+
self.reorderTarget[indexName],
|
|
1232
|
+
);
|
|
1230
1233
|
if (self.dragMode === 'column-reorder') {
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1234
|
+
/** Select column view indexes in the first row */
|
|
1235
|
+
const selectedIndexes = self.getRowSelectionStates(0);
|
|
1236
|
+
const sortColumnIndices = [];
|
|
1237
|
+
const selectedColumnIndices = [];
|
|
1238
|
+
if (selectedIndexes) {
|
|
1239
|
+
originalIndex = selectedIndexes[0];
|
|
1240
|
+
selectedIndexes.forEach(function (value) {
|
|
1236
1241
|
sortColumnIndices.push(self.orders.columns[value]);
|
|
1237
1242
|
});
|
|
1238
1243
|
}
|
|
1239
|
-
|
|
1244
|
+
const deleteCount = sortColumnIndices.length;
|
|
1240
1245
|
if (
|
|
1241
|
-
|
|
1242
|
-
(
|
|
1246
|
+
targetIndex < originalIndex ||
|
|
1247
|
+
(targetIndex > originalIndex &&
|
|
1248
|
+
Math.abs(targetIndex - originalIndex) >= deleteCount)
|
|
1243
1249
|
) {
|
|
1244
|
-
|
|
1245
|
-
if (
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
for (
|
|
1249
|
-
if (i === 0) self.activeCell.columnIndex =
|
|
1250
|
-
selectedColumnIndices.push(
|
|
1251
|
-
self.
|
|
1252
|
-
|
|
1250
|
+
orderLists[self.dragMode].splice(originalIndex, deleteCount);
|
|
1251
|
+
if (targetIndex > originalIndex)
|
|
1252
|
+
targetIndex = targetIndex - (deleteCount - 1);
|
|
1253
|
+
|
|
1254
|
+
for (let i = 0; i < sortColumnIndices.length; i++) {
|
|
1255
|
+
if (i === 0) self.activeCell.columnIndex = targetIndex;
|
|
1256
|
+
selectedColumnIndices.push(targetIndex + i);
|
|
1257
|
+
orderLists[self.dragMode].splice(
|
|
1258
|
+
targetIndex + i,
|
|
1259
|
+
0,
|
|
1260
|
+
sortColumnIndices[i],
|
|
1261
|
+
);
|
|
1253
1262
|
}
|
|
1254
1263
|
|
|
1255
|
-
self.orders.columns =
|
|
1256
|
-
self.
|
|
1257
|
-
self.selections[rowIndex] = selectedColumnIndices;
|
|
1258
|
-
});
|
|
1264
|
+
self.orders.columns = orderLists[self.dragMode];
|
|
1265
|
+
self.selectColumnViewIndexes(selectedColumnIndices);
|
|
1259
1266
|
}
|
|
1260
1267
|
} else {
|
|
1261
|
-
|
|
1262
|
-
self.
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
}
|
|
1267
|
-
});
|
|
1268
|
+
/** The original name of this variable is `odata` */
|
|
1269
|
+
const rowIndexes = self.getRowViewIndexesFromSelection();
|
|
1270
|
+
const originalData = rowIndexes.map(
|
|
1271
|
+
(rowIndex) => self.viewData[rowIndex],
|
|
1272
|
+
);
|
|
1268
1273
|
if (
|
|
1269
|
-
|
|
1270
|
-
(
|
|
1274
|
+
targetIndex < originalIndex ||
|
|
1275
|
+
(targetIndex > originalIndex &&
|
|
1276
|
+
Math.abs(targetIndex - originalIndex) >= originalData.length)
|
|
1271
1277
|
) {
|
|
1272
|
-
self.viewData.splice(
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
self.viewData.splice(tIndex + i, 0, odata[i]);
|
|
1280
|
-
self.selections[tIndex + i] = selectedRows[i];
|
|
1281
|
-
self.selectedRows.push(tIndex + i);
|
|
1282
|
-
}
|
|
1278
|
+
self.viewData.splice(originalIndex, originalData.length);
|
|
1279
|
+
if (targetIndex > originalIndex)
|
|
1280
|
+
targetIndex = targetIndex - (originalData.length - 1);
|
|
1281
|
+
self.activeCell.rowIndex = targetIndex;
|
|
1282
|
+
for (let i = 0; i < originalData.length; i++)
|
|
1283
|
+
self.viewData.splice(targetIndex + i, 0, originalData[i]);
|
|
1284
|
+
self.moveSelection(0, targetIndex);
|
|
1283
1285
|
}
|
|
1284
1286
|
}
|
|
1285
1287
|
self.resize();
|
|
@@ -1497,9 +1499,7 @@ export default function (self) {
|
|
|
1497
1499
|
!(self.dragMode == 'row-reorder' && self.isMultiRowsSelected) &&
|
|
1498
1500
|
!(self.currentCell.hovered && self.hovers.onFilterButton)
|
|
1499
1501
|
) {
|
|
1500
|
-
self.
|
|
1501
|
-
self.selectedRows = [];
|
|
1502
|
-
self.selectedColumns = [];
|
|
1502
|
+
self.clearSelections();
|
|
1503
1503
|
}
|
|
1504
1504
|
}
|
|
1505
1505
|
if (self.dragStartObject.isGrid) {
|
|
@@ -1569,7 +1569,7 @@ export default function (self) {
|
|
|
1569
1569
|
}
|
|
1570
1570
|
if (move) {
|
|
1571
1571
|
self.draggingItem = self.dragItem;
|
|
1572
|
-
self.movingSelection = self.
|
|
1572
|
+
self.movingSelection = self.cloneSelections();
|
|
1573
1573
|
self.dragging = self.dragStartObject;
|
|
1574
1574
|
if (
|
|
1575
1575
|
self.dispatchEvent('beginmove', {
|
|
@@ -1777,7 +1777,7 @@ export default function (self) {
|
|
|
1777
1777
|
|
|
1778
1778
|
// TODO - most likely some column order related bugs in key based selection
|
|
1779
1779
|
// Arrows
|
|
1780
|
-
|
|
1780
|
+
const isArrowKey = [
|
|
1781
1781
|
'ArrowLeft',
|
|
1782
1782
|
'ArrowUp',
|
|
1783
1783
|
'ArrowRight',
|
|
@@ -1786,63 +1786,12 @@ export default function (self) {
|
|
|
1786
1786
|
|
|
1787
1787
|
// Shrinking and expanding selection using shift and arrow keys
|
|
1788
1788
|
if (e.shiftKey && isArrowKey) {
|
|
1789
|
-
const
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
const xAtLeft = x === 0;
|
|
1796
|
-
const xAtRight = x === cols;
|
|
1797
|
-
|
|
1798
|
-
if (e.key === 'ArrowUp') {
|
|
1799
|
-
if (y + 1 > firstSelectedRowIndex && !yAtTop) {
|
|
1800
|
-
self.selections.pop();
|
|
1801
|
-
} else if (y < firstSelectedRowIndex) {
|
|
1802
|
-
self.selections[y] = self.selections[y] || [];
|
|
1803
|
-
self.selections[y].push(x);
|
|
1804
|
-
} else if (yAtTop && self.activeCell.rowIndex !== 0) {
|
|
1805
|
-
self.selections.pop();
|
|
1806
|
-
}
|
|
1807
|
-
}
|
|
1808
|
-
|
|
1809
|
-
if (e.key === 'ArrowDown') {
|
|
1810
|
-
if (y > firstSelectedRowIndex && y === self.selections.length) {
|
|
1811
|
-
self.selections[y] = self.selections[y] || [];
|
|
1812
|
-
self.selections[y].push(x);
|
|
1813
|
-
} else if (y >= firstSelectedRowIndex && !yAtBottom) {
|
|
1814
|
-
delete self.selections[y - 1];
|
|
1815
|
-
} else if (yAtBottom && self.activeCell.rowIndex !== last) {
|
|
1816
|
-
delete self.selections[y - 1];
|
|
1817
|
-
}
|
|
1818
|
-
}
|
|
1819
|
-
|
|
1820
|
-
for (const selection of self.selections) {
|
|
1821
|
-
if (e.key === 'ArrowRight' && selection) {
|
|
1822
|
-
if (x > lastSelectedColumn) {
|
|
1823
|
-
selection.push(x);
|
|
1824
|
-
} else if (x <= lastSelectedColumn && !xAtRight) {
|
|
1825
|
-
selection.shift();
|
|
1826
|
-
} else if (xAtRight && self.activeCell.columnIndex !== cols) {
|
|
1827
|
-
selection.shift();
|
|
1828
|
-
}
|
|
1829
|
-
}
|
|
1830
|
-
|
|
1831
|
-
if (e.key === 'ArrowLeft' && selection) {
|
|
1832
|
-
if (x < firstSelectedColumnIndex) {
|
|
1833
|
-
selection.unshift(x);
|
|
1834
|
-
} else if (x >= firstSelectedColumnIndex && !xAtLeft) {
|
|
1835
|
-
selection.pop();
|
|
1836
|
-
} else if (xAtLeft && self.activeCell.columnIndex !== 0) {
|
|
1837
|
-
selection.pop();
|
|
1838
|
-
}
|
|
1839
|
-
}
|
|
1840
|
-
}
|
|
1841
|
-
|
|
1842
|
-
self.selectionBounds = self.getSelectionBounds();
|
|
1843
|
-
self.selectArea(undefined, ctrl);
|
|
1844
|
-
|
|
1845
|
-
self.draw(true);
|
|
1789
|
+
const changed = self.shrinkOrExpandSelections(
|
|
1790
|
+
{ rowIndex: y, columnIndex: x },
|
|
1791
|
+
e,
|
|
1792
|
+
true,
|
|
1793
|
+
);
|
|
1794
|
+
if (changed) self.draw(true);
|
|
1846
1795
|
}
|
|
1847
1796
|
|
|
1848
1797
|
if (x !== self.activeCell.columnIndex || y !== self.activeCell.rowIndex) {
|
|
@@ -1853,25 +1802,8 @@ export default function (self) {
|
|
|
1853
1802
|
|
|
1854
1803
|
self.setActiveCell(x, y);
|
|
1855
1804
|
if (!e.shiftKey && self.attributes.selectionFollowsActiveCell) {
|
|
1856
|
-
if (!ctrl)
|
|
1857
|
-
|
|
1858
|
-
self.selectedRows = [];
|
|
1859
|
-
self.selectedColumns = [];
|
|
1860
|
-
}
|
|
1861
|
-
self.selections[y] = self.selections[y] || [];
|
|
1862
|
-
self.selections[y].push(x);
|
|
1863
|
-
ev = {
|
|
1864
|
-
selectedData: self.getSelectedData(),
|
|
1865
|
-
selections: self.selections,
|
|
1866
|
-
selectionBounds: self.getSelectionBounds(),
|
|
1867
|
-
selectedCells: self.getSelectedCells(),
|
|
1868
|
-
};
|
|
1869
|
-
Object.defineProperty(ev, 'selectedData', {
|
|
1870
|
-
get: function () {
|
|
1871
|
-
return self.getSelectedData();
|
|
1872
|
-
},
|
|
1873
|
-
});
|
|
1874
|
-
self.dispatchEvent('selectionchanged', ev);
|
|
1805
|
+
if (!ctrl) self.clearSelections();
|
|
1806
|
+
self.selectCell({ rowIndex: y, viewColumnIndex: x });
|
|
1875
1807
|
}
|
|
1876
1808
|
self.draw(true);
|
|
1877
1809
|
}
|
|
@@ -1952,7 +1884,7 @@ export default function (self) {
|
|
|
1952
1884
|
deltaY = e.deltaY === undefined ? e.NativeEvent.deltaY : e.deltaY,
|
|
1953
1885
|
deltaMode =
|
|
1954
1886
|
e.deltaMode === undefined ? e.NativeEvent.deltaMode : e.deltaMode;
|
|
1955
|
-
|
|
1887
|
+
if (e.NativeEvent) e = e.NativeEvent;
|
|
1956
1888
|
if (wheeling) {
|
|
1957
1889
|
ev.preventDefault(e);
|
|
1958
1890
|
return;
|
|
@@ -2005,9 +1937,6 @@ export default function (self) {
|
|
|
2005
1937
|
return;
|
|
2006
1938
|
}
|
|
2007
1939
|
|
|
2008
|
-
self.selectedRows = [];
|
|
2009
|
-
self.selectedColumns = [];
|
|
2010
|
-
|
|
2011
1940
|
const rows = parseData(pasteValue, mimeType);
|
|
2012
1941
|
const columnsLength = rows[0].length;
|
|
2013
1942
|
|
|
@@ -2050,19 +1979,14 @@ export default function (self) {
|
|
|
2050
1979
|
}
|
|
2051
1980
|
|
|
2052
1981
|
// selections is a sparse array, so we condense:
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
columnIndex,
|
|
2062
|
-
self.getBoundRowIndexFromViewRowIndex(rowIndex),
|
|
2063
|
-
self.getBoundColumnIndexFromViewColumnIndex(columnIndex),
|
|
2064
|
-
]);
|
|
2065
|
-
});
|
|
1982
|
+
const affectedCells = [];
|
|
1983
|
+
self.forEachSelectedCell((viewData, viewRowIndex, columnName, cell) => {
|
|
1984
|
+
affectedCells.push([
|
|
1985
|
+
viewRowIndex,
|
|
1986
|
+
cell.viewColumnIndex,
|
|
1987
|
+
cell.boundRowIndex,
|
|
1988
|
+
cell.boundColumnIndex,
|
|
1989
|
+
]);
|
|
2066
1990
|
});
|
|
2067
1991
|
|
|
2068
1992
|
self.dispatchEvent('afterpaste', {
|
|
@@ -2086,9 +2010,10 @@ export default function (self) {
|
|
|
2086
2010
|
var schema = self.getSchema();
|
|
2087
2011
|
const rowsLength = Math.max(rows.length, minRowsLength);
|
|
2088
2012
|
const fillCellCallback = self.fillCellCallback;
|
|
2089
|
-
const selections = clearSelections ? [] : self.selections;
|
|
2090
2013
|
const filledCells = [];
|
|
2091
2014
|
|
|
2015
|
+
if (clearSelections) self.selections = [];
|
|
2016
|
+
|
|
2092
2017
|
for (
|
|
2093
2018
|
let rowPosReal = 0, rowDataPos = 0;
|
|
2094
2019
|
rowPosReal < rowsLength;
|
|
@@ -2134,12 +2059,6 @@ export default function (self) {
|
|
|
2134
2059
|
}
|
|
2135
2060
|
: undefined;
|
|
2136
2061
|
|
|
2137
|
-
self.selectedRows.push(realRowIndex);
|
|
2138
|
-
|
|
2139
|
-
if (selections[realRowIndex] === undefined) {
|
|
2140
|
-
selections[realRowIndex] = [];
|
|
2141
|
-
}
|
|
2142
|
-
|
|
2143
2062
|
for (
|
|
2144
2063
|
var colPosReal = 0, cellDataPos = 0;
|
|
2145
2064
|
colPosReal < cellsLength;
|
|
@@ -2199,7 +2118,10 @@ export default function (self) {
|
|
|
2199
2118
|
: cellData;
|
|
2200
2119
|
}
|
|
2201
2120
|
|
|
2202
|
-
|
|
2121
|
+
self.selectCell(
|
|
2122
|
+
{ rowIndex: realRowIndex, viewColumnIndex: columnIndex },
|
|
2123
|
+
true,
|
|
2124
|
+
);
|
|
2203
2125
|
|
|
2204
2126
|
if (alwaysFilling || fillingRow || fillingColumn) {
|
|
2205
2127
|
filledCells.push([
|
|
@@ -2209,9 +2131,6 @@ export default function (self) {
|
|
|
2209
2131
|
self.getBoundColumnIndexFromViewColumnIndex(columnIndex),
|
|
2210
2132
|
]);
|
|
2211
2133
|
}
|
|
2212
|
-
|
|
2213
|
-
if (self.selectedColumns.indexOf(columnIndex) === -1)
|
|
2214
|
-
self.selectedColumns.push(columnIndex);
|
|
2215
2134
|
}
|
|
2216
2135
|
|
|
2217
2136
|
self.originalData[self.boundRowIndexMap.get(realRowIndex)] = newRowData;
|
|
@@ -2222,8 +2141,6 @@ export default function (self) {
|
|
|
2222
2141
|
self.viewData[realRowIndex] = newRowData;
|
|
2223
2142
|
}
|
|
2224
2143
|
|
|
2225
|
-
self.selections = selections;
|
|
2226
|
-
|
|
2227
2144
|
if (filledCells.length > 0 || alwaysFilling) {
|
|
2228
2145
|
self.dispatchEvent('afterfill', {
|
|
2229
2146
|
filledCells: filledCells,
|
|
@@ -2251,19 +2168,18 @@ export default function (self) {
|
|
|
2251
2168
|
return -1;
|
|
2252
2169
|
};
|
|
2253
2170
|
self.getSelectionIndex = function () {
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
const row = self.selections[rowIndex];
|
|
2171
|
+
const bounds = self.getSelectionBounds(true);
|
|
2172
|
+
if (!bounds) return;
|
|
2173
|
+
const { top, bottom } = bounds;
|
|
2174
|
+
for (let rowIndex = top; rowIndex <= bottom; rowIndex++) {
|
|
2175
|
+
const row = self.getRowSelectionStates(rowIndex);
|
|
2260
2176
|
if (row) {
|
|
2261
2177
|
if (row[0] === undefined) break;
|
|
2262
2178
|
|
|
2263
2179
|
return {
|
|
2264
2180
|
row: rowIndex,
|
|
2265
2181
|
column: row[0] < 0 ? row[1] : row[0],
|
|
2266
|
-
rowLength:
|
|
2182
|
+
rowLength: bottom - rowIndex + 1,
|
|
2267
2183
|
columnLength: row.length - (row[0] < 0 ? 1 : 0),
|
|
2268
2184
|
};
|
|
2269
2185
|
}
|
|
@@ -2342,9 +2258,17 @@ export default function (self) {
|
|
|
2342
2258
|
self.copySelectedCellsToClipboard(event.clipboardData);
|
|
2343
2259
|
|
|
2344
2260
|
const affectedCells = self.clearSelectedCells();
|
|
2261
|
+
const apiCompatibleCells = affectedCells.map((cell) => {
|
|
2262
|
+
return [
|
|
2263
|
+
cell.viewRowIndex,
|
|
2264
|
+
cell.viewColumnIndex,
|
|
2265
|
+
cell.boundRowIndex,
|
|
2266
|
+
cell.boundColumnIndex,
|
|
2267
|
+
];
|
|
2268
|
+
});
|
|
2345
2269
|
|
|
2346
2270
|
self.dispatchEvent('aftercut', {
|
|
2347
|
-
cells:
|
|
2271
|
+
cells: apiCompatibleCells,
|
|
2348
2272
|
});
|
|
2349
2273
|
|
|
2350
2274
|
requestAnimationFrame(() => self.draw());
|