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/draw.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
/*globals XMLSerializer: false, define: true, Blob: false, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
|
+
import { isCellSelected } from './selections/util';
|
|
6
|
+
|
|
5
7
|
export default function (self) {
|
|
6
8
|
var perfCounters = [],
|
|
7
9
|
cachedImagesDrawn = false,
|
|
@@ -995,21 +997,23 @@ export default function (self) {
|
|
|
995
997
|
propPrefix,
|
|
996
998
|
offsetPoint,
|
|
997
999
|
) {
|
|
998
|
-
offsetPoint = offsetPoint || { x: 0, y: 0 };
|
|
999
1000
|
cell.selectionBorder = '';
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1001
|
+
// TODO: optimize it by `getSelectionStateFromCells`
|
|
1002
|
+
const isSelected = offsetPoint
|
|
1003
|
+
? (row, col) =>
|
|
1004
|
+
isCellSelected(
|
|
1005
|
+
self.selections,
|
|
1006
|
+
row - offsetPoint.y,
|
|
1007
|
+
col - offsetPoint.x,
|
|
1008
|
+
)
|
|
1009
|
+
: (row, col) => isCellSelected(self.selections, row, col);
|
|
1010
|
+
const lastColumnIndex = Math.max(schema.length - 1, 0);
|
|
1011
|
+
const lastRowIndex = Math.max(viewData.length - 1, 0);
|
|
1012
|
+
const { isRowHeader, rowIndex, columnIndex } = cell;
|
|
1013
|
+
|
|
1014
|
+
if (!isRowHeader && isSelected(rowIndex, columnIndex)) {
|
|
1007
1015
|
if (
|
|
1008
|
-
(!
|
|
1009
|
-
self.selections[cell.rowIndex - 1 + -offsetPoint.y].indexOf(
|
|
1010
|
-
cell.columnIndex + -offsetPoint.x,
|
|
1011
|
-
) === -1 ||
|
|
1012
|
-
cell.rowIndex === 0) &&
|
|
1016
|
+
(!isSelected(rowIndex - 1, columnIndex) || rowIndex === 0) &&
|
|
1013
1017
|
!cell.isHeader
|
|
1014
1018
|
) {
|
|
1015
1019
|
drawArray.push([cell, 't']);
|
|
@@ -1017,32 +1021,21 @@ export default function (self) {
|
|
|
1017
1021
|
cell[propPrefix + 'Border'] += 't';
|
|
1018
1022
|
}
|
|
1019
1023
|
if (
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
cell.columnIndex + -offsetPoint.x,
|
|
1023
|
-
) === -1
|
|
1024
|
+
rowIndex >= lastRowIndex ||
|
|
1025
|
+
!isSelected(rowIndex + 1, columnIndex)
|
|
1024
1026
|
) {
|
|
1025
1027
|
drawArray.push([cell, 'b']);
|
|
1026
1028
|
cell[propPrefix + 'BorderBottom'] = true;
|
|
1027
1029
|
cell[propPrefix + 'Border'] += 'b';
|
|
1028
1030
|
}
|
|
1029
|
-
if (
|
|
1030
|
-
!self.selections[cell.rowIndex + -offsetPoint.y] ||
|
|
1031
|
-
cell.columnIndex === 0 ||
|
|
1032
|
-
self.selections[cell.rowIndex + -offsetPoint.y].indexOf(
|
|
1033
|
-
cell.columnIndex - 1 + -offsetPoint.x,
|
|
1034
|
-
) === -1
|
|
1035
|
-
) {
|
|
1031
|
+
if (columnIndex === 0 || !isSelected(rowIndex, columnIndex - 1)) {
|
|
1036
1032
|
drawArray.push([cell, 'l']);
|
|
1037
1033
|
cell[propPrefix + 'BorderLeft'] = true;
|
|
1038
1034
|
cell[propPrefix + 'Border'] += 'l';
|
|
1039
1035
|
}
|
|
1040
1036
|
if (
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
self.selections[cell.rowIndex + -offsetPoint.y].indexOf(
|
|
1044
|
-
cell.columnIndex + 1 + -offsetPoint.x,
|
|
1045
|
-
) === -1
|
|
1037
|
+
columnIndex >= lastColumnIndex ||
|
|
1038
|
+
!isSelected(rowIndex, columnIndex + 1)
|
|
1046
1039
|
) {
|
|
1047
1040
|
drawArray.push([cell, 'r']);
|
|
1048
1041
|
cell[propPrefix + 'BorderRight'] = true;
|
|
@@ -1051,6 +1044,10 @@ export default function (self) {
|
|
|
1051
1044
|
}
|
|
1052
1045
|
}
|
|
1053
1046
|
function drawCell(rowData, rowOrderIndex, rowIndex) {
|
|
1047
|
+
const isActiveRowHeader =
|
|
1048
|
+
self.orders.rows[self.activeCell.rowIndex] === rowOrderIndex ||
|
|
1049
|
+
self.isRowSelected(rowOrderIndex);
|
|
1050
|
+
|
|
1054
1051
|
return function drawEach(header, headerIndex, columnOrderIndex) {
|
|
1055
1052
|
if (header.hidden) {
|
|
1056
1053
|
return 0;
|
|
@@ -1066,9 +1063,12 @@ export default function (self) {
|
|
|
1066
1063
|
self.filterable.rows.includes(rowIndex) &&
|
|
1067
1064
|
self.filterable.columns.includes(headerIndex),
|
|
1068
1065
|
wrap = self.style.cellWhiteSpace !== 'nowrap',
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
self.selections
|
|
1066
|
+
// TODO: optimize it by `getSelectionStateFromCells`
|
|
1067
|
+
selected = isCellSelected(
|
|
1068
|
+
self.selections,
|
|
1069
|
+
rowOrderIndex,
|
|
1070
|
+
columnOrderIndex,
|
|
1071
|
+
),
|
|
1072
1072
|
hovered =
|
|
1073
1073
|
self.hovers.rowIndex === rowOrderIndex &&
|
|
1074
1074
|
(self.attributes.hoverMode === 'row' ||
|
|
@@ -1082,17 +1082,6 @@ export default function (self) {
|
|
|
1082
1082
|
isColumnHeaderCellCap = cellStyle === 'columnHeaderCellCap',
|
|
1083
1083
|
rawValue = rowData ? rowData[header.name] : undefined,
|
|
1084
1084
|
isGrid = header.type === 'canvas-datagrid',
|
|
1085
|
-
activeHeader =
|
|
1086
|
-
(self.orders.rows[self.activeCell.rowIndex] === rowOrderIndex ||
|
|
1087
|
-
self.selectedRows.indexOf(rowOrderIndex) >= 0 ||
|
|
1088
|
-
self.orders.columns[self.activeCell.columnIndex] ===
|
|
1089
|
-
headerIndex ||
|
|
1090
|
-
self.selectedColumns.indexOf(headerIndex) >= 0) &&
|
|
1091
|
-
(columnOrderIndex === -1 || rowOrderIndex === -1)
|
|
1092
|
-
? isRowHeader
|
|
1093
|
-
? 'activeRowHeaderCell'
|
|
1094
|
-
: 'activeColumnHeaderCell'
|
|
1095
|
-
: false,
|
|
1096
1085
|
val,
|
|
1097
1086
|
f = self.formatters[header.type || 'string'],
|
|
1098
1087
|
orderByArrowSize = 0,
|
|
@@ -1103,6 +1092,19 @@ export default function (self) {
|
|
|
1103
1092
|
row: rowData,
|
|
1104
1093
|
header: header,
|
|
1105
1094
|
};
|
|
1095
|
+
|
|
1096
|
+
const isActiveColumnHeader =
|
|
1097
|
+
self.orders.columns[self.activeCell.columnIndex] === headerIndex ||
|
|
1098
|
+
self.isColumnSelected(self.activeCell.viewColumnIndex);
|
|
1099
|
+
let activeHeader = false;
|
|
1100
|
+
if (
|
|
1101
|
+
(isActiveColumnHeader || isActiveRowHeader) &&
|
|
1102
|
+
(columnOrderIndex === -1 || rowOrderIndex === -1)
|
|
1103
|
+
)
|
|
1104
|
+
activeHeader = isRowHeader
|
|
1105
|
+
? 'activeRowHeaderCell'
|
|
1106
|
+
: 'activeColumnHeaderCell';
|
|
1107
|
+
|
|
1106
1108
|
if (isColumnHeaderCellCap) {
|
|
1107
1109
|
cellWidth = w - x;
|
|
1108
1110
|
}
|
|
@@ -2447,10 +2449,7 @@ export default function (self) {
|
|
|
2447
2449
|
self.ctx.lineWidth = self.style.reorderMarkerBorderWidth;
|
|
2448
2450
|
self.ctx.strokeStyle = self.style.reorderMarkerBorderColor;
|
|
2449
2451
|
if (self.dragMode === 'row-reorder') {
|
|
2450
|
-
|
|
2451
|
-
if (!self.selections[k] || k == self.reorderObject.rowIndex) continue;
|
|
2452
|
-
b.height += self.getRowHeight(k);
|
|
2453
|
-
}
|
|
2452
|
+
b.height = self.getSelectedRowsHeight();
|
|
2454
2453
|
b.width = w;
|
|
2455
2454
|
b.x = 0;
|
|
2456
2455
|
m.width = w;
|
|
@@ -2461,7 +2460,7 @@ export default function (self) {
|
|
|
2461
2460
|
self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;
|
|
2462
2461
|
self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;
|
|
2463
2462
|
if (
|
|
2464
|
-
self.
|
|
2463
|
+
!self.isRowSelected(self.reorderTarget.sortRowIndex) &&
|
|
2465
2464
|
self.currentCell.rowIndex !== self.reorderObject.rowIndex &&
|
|
2466
2465
|
self.currentCell.rowIndex > -1 &&
|
|
2467
2466
|
self.currentCell.rowIndex < l
|
|
@@ -2474,14 +2473,7 @@ export default function (self) {
|
|
|
2474
2473
|
);
|
|
2475
2474
|
}
|
|
2476
2475
|
} else if (self.dragMode === 'column-reorder' && self.reorderObject) {
|
|
2477
|
-
|
|
2478
|
-
if (selectedColumns) {
|
|
2479
|
-
for (var k = 1; k < selectedColumns.length; k++) {
|
|
2480
|
-
b.width += self.getColumnWidth(
|
|
2481
|
-
self.orders.columns[selectedColumns[k]],
|
|
2482
|
-
);
|
|
2483
|
-
}
|
|
2484
|
-
}
|
|
2476
|
+
b.width = self.getSelectedColumnsWidth();
|
|
2485
2477
|
b.height = h;
|
|
2486
2478
|
b.y = 0;
|
|
2487
2479
|
m.height = h;
|
|
@@ -2493,8 +2485,7 @@ export default function (self) {
|
|
|
2493
2485
|
self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;
|
|
2494
2486
|
self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;
|
|
2495
2487
|
if (
|
|
2496
|
-
self.
|
|
2497
|
-
-1 &&
|
|
2488
|
+
!self.isColumnSelected(self.reorderTarget.sortColumnIndex) &&
|
|
2498
2489
|
self.currentCell.sortColumnIndex !==
|
|
2499
2490
|
self.reorderObject.sortColumnIndex &&
|
|
2500
2491
|
self.reorderTarget.columnIndex !== self.reorderObject.columnIndex &&
|
|
@@ -2510,6 +2501,31 @@ export default function (self) {
|
|
|
2510
2501
|
}
|
|
2511
2502
|
}
|
|
2512
2503
|
}
|
|
2504
|
+
function drawResizeMarkers() {
|
|
2505
|
+
if (
|
|
2506
|
+
!self.attributes.resizeAfterDragged ||
|
|
2507
|
+
!self.draggingItem ||
|
|
2508
|
+
!self.pendingDragResize ||
|
|
2509
|
+
(self.dragMode != 'ew-resize' && self.dragMode != 'ns-resize')
|
|
2510
|
+
) {
|
|
2511
|
+
return;
|
|
2512
|
+
}
|
|
2513
|
+
|
|
2514
|
+
const resizingRow = self.dragMode == 'ns-resize';
|
|
2515
|
+
const height = resizingRow ? self.style.resizeMarkerSize : self.height;
|
|
2516
|
+
const width = resizingRow ? self.width : self.style.resizeMarkerSize;
|
|
2517
|
+
const minX =
|
|
2518
|
+
self.dragStart.x -
|
|
2519
|
+
(self.resizingStartingWidth - self.style.minColumnWidth);
|
|
2520
|
+
const minY =
|
|
2521
|
+
self.dragStart.y -
|
|
2522
|
+
(self.resizingStartingHeight - self.style.minRowHeight);
|
|
2523
|
+
const x = resizingRow ? 0 : Math.max(self.pendingDragResize.x, minX);
|
|
2524
|
+
const y = !resizingRow ? 0 : Math.max(self.pendingDragResize.y, minY);
|
|
2525
|
+
|
|
2526
|
+
self.ctx.fillStyle = self.style.resizeMarkerColor;
|
|
2527
|
+
fillRect(x, y, width, height);
|
|
2528
|
+
}
|
|
2513
2529
|
function drawBorder() {
|
|
2514
2530
|
self.ctx.lineWidth = self.style.gridBorderWidth;
|
|
2515
2531
|
self.ctx.strokeStyle = self.style.gridBorderColor;
|
|
@@ -3064,6 +3080,7 @@ export default function (self) {
|
|
|
3064
3080
|
drawSelectionHandles();
|
|
3065
3081
|
drawReorderMarkers();
|
|
3066
3082
|
drawMoveMarkers();
|
|
3083
|
+
drawResizeMarkers();
|
|
3067
3084
|
drawBorder();
|
|
3068
3085
|
drawSelectionBorders();
|
|
3069
3086
|
drawScrollBars();
|