canvas-datagrid 0.4.3 → 0.4.4
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 +12 -0
- package/dist/canvas-datagrid.debug.js +355 -144
- 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 +12 -8
- package/lib/contextMenu.js +2 -2
- package/lib/defaults.js +9 -7
- package/lib/docs.js +16 -0
- package/lib/dom.js +29 -2
- package/lib/draw.js +157 -60
- package/lib/events/index.js +130 -65
- package/lib/intf.js +8 -14
- package/lib/publicMethods.js +118 -42
- package/package.json +1 -1
package/lib/publicMethods.js
CHANGED
|
@@ -408,6 +408,7 @@ export default function (self) {
|
|
|
408
408
|
* @param {number} y The row index of the cell to set active.
|
|
409
409
|
*/
|
|
410
410
|
self.setActiveCell = function (x, y) {
|
|
411
|
+
if (typeof x === 'undefined') return;
|
|
411
412
|
if (x < 0) {
|
|
412
413
|
x = 0;
|
|
413
414
|
}
|
|
@@ -428,6 +429,8 @@ export default function (self) {
|
|
|
428
429
|
*/
|
|
429
430
|
self.selectNone = function (dontDraw) {
|
|
430
431
|
self.selections = [];
|
|
432
|
+
self.selectedRows = [];
|
|
433
|
+
self.selectedColumns = [];
|
|
431
434
|
self.dispatchEvent('selectionchanged', {
|
|
432
435
|
selectedData: self.getSelectedData(),
|
|
433
436
|
selections: self.selections,
|
|
@@ -459,55 +462,47 @@ export default function (self) {
|
|
|
459
462
|
self.draw();
|
|
460
463
|
};
|
|
461
464
|
/**
|
|
462
|
-
* Returns true if
|
|
465
|
+
* Returns true if the selected columnIndex is selected on every row.
|
|
463
466
|
* @memberof canvasDatagrid
|
|
464
|
-
* @name
|
|
467
|
+
* @name isColumnSelected
|
|
465
468
|
* @method
|
|
466
469
|
* @param {number} columnIndex The column index to check.
|
|
467
470
|
*/
|
|
468
|
-
self.
|
|
469
|
-
var
|
|
471
|
+
self.isColumnSelected = function (columnIndex) {
|
|
472
|
+
var colIsSelected = true;
|
|
470
473
|
self.viewData.forEach(function (row, rowIndex) {
|
|
471
|
-
var columnIndices = self.selections[rowIndex];
|
|
472
474
|
if (
|
|
473
|
-
!
|
|
474
|
-
|
|
475
|
-
columnIndices.indexOf(columnIndex) === -1
|
|
475
|
+
!self.selections[rowIndex] ||
|
|
476
|
+
self.selections[rowIndex].indexOf(columnIndex) === -1
|
|
476
477
|
) {
|
|
477
|
-
|
|
478
|
-
} else if (columnIndices.length > 1) {
|
|
479
|
-
if (columnIndices[0] != columnIndex) multiColIsSelected = false;
|
|
480
|
-
else {
|
|
481
|
-
for (var i = 0; i < columnIndices.length - 1; i++) {
|
|
482
|
-
if (columnIndices[i] + 1 != columnIndices[i + 1]) {
|
|
483
|
-
multiColIsSelected = false;
|
|
484
|
-
break;
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
}
|
|
478
|
+
colIsSelected = false;
|
|
488
479
|
}
|
|
489
480
|
});
|
|
490
|
-
return
|
|
481
|
+
return colIsSelected;
|
|
491
482
|
};
|
|
492
483
|
/**
|
|
493
|
-
* Returns true if the selected
|
|
484
|
+
* Returns true if the selected rowIndex is selected on every column.
|
|
494
485
|
* @memberof canvasDatagrid
|
|
495
|
-
* @name
|
|
486
|
+
* @name isRowSelected
|
|
496
487
|
* @method
|
|
497
|
-
* @param {number}
|
|
488
|
+
* @param {number} rowIndex The row index to check.
|
|
498
489
|
*/
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
self.
|
|
490
|
+
|
|
491
|
+
self.isRowSelected = function (rowIndex) {
|
|
492
|
+
if (!self.selections[rowIndex]) return false;
|
|
493
|
+
var rowIsSelected = true;
|
|
494
|
+
var schema = self.getVisibleSchema();
|
|
495
|
+
schema.forEach(function (col, index) {
|
|
502
496
|
if (
|
|
503
497
|
!self.selections[rowIndex] ||
|
|
504
|
-
self.selections[rowIndex].indexOf(
|
|
498
|
+
self.selections[rowIndex].indexOf(index) === -1
|
|
505
499
|
) {
|
|
506
|
-
|
|
500
|
+
rowIsSelected = false;
|
|
507
501
|
}
|
|
508
502
|
});
|
|
509
|
-
return
|
|
503
|
+
return rowIsSelected;
|
|
510
504
|
};
|
|
505
|
+
|
|
511
506
|
/**
|
|
512
507
|
* Runs the defined method on each selected cell.
|
|
513
508
|
* @memberof canvasDatagrid
|
|
@@ -549,6 +544,8 @@ export default function (self) {
|
|
|
549
544
|
*/
|
|
550
545
|
self.selectColumn = function (columnIndex, ctrl, shift, supressEvent) {
|
|
551
546
|
var s, e, x;
|
|
547
|
+
self.isMultiRowsSelected = false;
|
|
548
|
+
self.isMultiColumnsSelected = false;
|
|
552
549
|
function addCol(i) {
|
|
553
550
|
self.viewData.forEach(function (row, rowIndex) {
|
|
554
551
|
self.selections[rowIndex] = self.selections[rowIndex] || [];
|
|
@@ -576,17 +573,23 @@ export default function (self) {
|
|
|
576
573
|
e = Math.max(self.activeCell.columnIndex, columnIndex);
|
|
577
574
|
for (x = s; e > x; x += 1) {
|
|
578
575
|
addCol(x);
|
|
576
|
+
if (self.selectedColumns.indexOf(x) === -1)
|
|
577
|
+
self.selectedColumns.push(x);
|
|
579
578
|
}
|
|
579
|
+
if (s != e) self.isMultiColumnsSelected = true;
|
|
580
580
|
}
|
|
581
581
|
if (!ctrl && !shift) {
|
|
582
582
|
self.selections = [];
|
|
583
|
+
self.selectedColumns = [];
|
|
583
584
|
self.activeCell.columnIndex = columnIndex;
|
|
584
585
|
self.activeCell.rowIndex = self.scrollIndexTop;
|
|
585
586
|
}
|
|
586
587
|
if (ctrl && self.isColumnSelected(columnIndex)) {
|
|
587
588
|
removeCol(columnIndex);
|
|
589
|
+
self.selectedColumns.splice(columnIndex, 1);
|
|
588
590
|
} else {
|
|
589
591
|
addCol(columnIndex);
|
|
592
|
+
self.selectedColumns.push(columnIndex);
|
|
590
593
|
}
|
|
591
594
|
if (supressEvent) {
|
|
592
595
|
return;
|
|
@@ -630,6 +633,13 @@ export default function (self) {
|
|
|
630
633
|
self.selections[ri].push(-1);
|
|
631
634
|
s.forEach(function (col, index) {
|
|
632
635
|
self.selections[ri].push(self.orders.columns.indexOf(col.index));
|
|
636
|
+
if (
|
|
637
|
+
col.index !== -1 &&
|
|
638
|
+
self.selectedColumns.indexOf(
|
|
639
|
+
self.orders.columns.indexOf(col.index),
|
|
640
|
+
) === -1
|
|
641
|
+
)
|
|
642
|
+
self.selectedColumns.push(self.orders.columns.indexOf(col.index));
|
|
633
643
|
});
|
|
634
644
|
}
|
|
635
645
|
if (self.dragAddToSelection === false || self.dragObject === undefined) {
|
|
@@ -653,9 +663,12 @@ export default function (self) {
|
|
|
653
663
|
en = Math.max(self.activeCell.rowIndex, rowIndex);
|
|
654
664
|
for (x = st; en >= x; x += 1) {
|
|
655
665
|
addRow(x);
|
|
666
|
+
self.selectedRows.push(x);
|
|
656
667
|
}
|
|
657
668
|
} else {
|
|
658
669
|
addRow(rowIndex);
|
|
670
|
+
self.selectedRows = [];
|
|
671
|
+
self.selectedRows.push(rowIndex);
|
|
659
672
|
}
|
|
660
673
|
}
|
|
661
674
|
de();
|
|
@@ -768,13 +781,14 @@ export default function (self) {
|
|
|
768
781
|
* Hide column/columns
|
|
769
782
|
* @memberof canvasDatagrid
|
|
770
783
|
* @name hideColumns
|
|
784
|
+
* @method
|
|
771
785
|
* @param {number} beginColumnOrderIndex
|
|
772
786
|
* @param {number} [endColumnOrderIndex]
|
|
773
787
|
*/
|
|
774
788
|
self.hideColumns = function (beginColumnOrderIndex, endColumnOrderIndex) {
|
|
775
789
|
const schema = self.getSchema();
|
|
776
790
|
const orders = self.orders.columns;
|
|
777
|
-
|
|
791
|
+
const hiddenColumns = [];
|
|
778
792
|
if (typeof endColumnOrderIndex !== 'number')
|
|
779
793
|
endColumnOrderIndex = beginColumnOrderIndex;
|
|
780
794
|
for (
|
|
@@ -784,21 +798,57 @@ export default function (self) {
|
|
|
784
798
|
) {
|
|
785
799
|
const columnIndex = orders[orderIndex];
|
|
786
800
|
if (columnIndex >= 0 && !schema[columnIndex].hidden) {
|
|
787
|
-
|
|
801
|
+
hiddenColumns.push(columnIndex);
|
|
788
802
|
schema[columnIndex].hidden = true;
|
|
803
|
+
|
|
804
|
+
self.dispatchEvent('columnhide', {
|
|
805
|
+
columnIndex,
|
|
806
|
+
});
|
|
789
807
|
}
|
|
790
808
|
}
|
|
791
|
-
|
|
809
|
+
|
|
810
|
+
if (hiddenColumns.length > 0) {
|
|
792
811
|
self.setStorageData();
|
|
793
812
|
setTimeout(function () {
|
|
794
813
|
self.resize(true);
|
|
795
814
|
}, 10);
|
|
796
815
|
}
|
|
816
|
+
|
|
817
|
+
self.dispatchEvent('hidecolumns', {
|
|
818
|
+
hiddenColumns,
|
|
819
|
+
});
|
|
820
|
+
};
|
|
821
|
+
/**
|
|
822
|
+
* Unihde column/columns
|
|
823
|
+
* @memberof canvasDatagrid
|
|
824
|
+
* @name unhideColumns
|
|
825
|
+
* @method
|
|
826
|
+
* @param {number} beginColumnOrderIndex
|
|
827
|
+
* @param {number} [endColumnOrderIndex]
|
|
828
|
+
*/
|
|
829
|
+
self.unhideColumns = function (beginColumnOrderIndex, endColumnOrderIndex) {
|
|
830
|
+
const orders = self.orders.columns;
|
|
831
|
+
const schema = self.getSchema();
|
|
832
|
+
|
|
833
|
+
for (let i = beginColumnOrderIndex; i <= endColumnOrderIndex; i++) {
|
|
834
|
+
const columnIndex = orders[i];
|
|
835
|
+
const s = schema[columnIndex];
|
|
836
|
+
|
|
837
|
+
if (s && s.hidden) {
|
|
838
|
+
s.hidden = false;
|
|
839
|
+
|
|
840
|
+
self.dispatchEvent('columnunhide', {
|
|
841
|
+
columnIndex,
|
|
842
|
+
});
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
self.refresh();
|
|
797
846
|
};
|
|
798
847
|
/**
|
|
799
848
|
* Hide rows
|
|
800
849
|
* @memberof canvasDatagrid
|
|
801
850
|
* @name hideRows
|
|
851
|
+
* @method
|
|
802
852
|
* @param {number} beginRowIndex
|
|
803
853
|
* @param {number} endRowIndex
|
|
804
854
|
*/
|
|
@@ -812,6 +862,7 @@ export default function (self) {
|
|
|
812
862
|
* Unhide rows
|
|
813
863
|
* @memberof canvasDatagrid
|
|
814
864
|
* @name unhideRows
|
|
865
|
+
* @method
|
|
815
866
|
* @param {number} beginRowIndex
|
|
816
867
|
* @param {number} endRowIndex
|
|
817
868
|
*/
|
|
@@ -949,6 +1000,7 @@ export default function (self) {
|
|
|
949
1000
|
/**
|
|
950
1001
|
* Add grouping
|
|
951
1002
|
* @param {'columns'|'rows'} groupFor
|
|
1003
|
+
* @method
|
|
952
1004
|
* @param {number} from
|
|
953
1005
|
* @param {number} to
|
|
954
1006
|
*/
|
|
@@ -1004,6 +1056,7 @@ export default function (self) {
|
|
|
1004
1056
|
/**
|
|
1005
1057
|
* Remove grouping
|
|
1006
1058
|
* @param {Array<Array<{from:number,to:number,collapsed:boolean}>>} allGroups
|
|
1059
|
+
* @method
|
|
1007
1060
|
* @param {number} from
|
|
1008
1061
|
* @param {number} to
|
|
1009
1062
|
*/
|
|
@@ -1199,10 +1252,15 @@ export default function (self) {
|
|
|
1199
1252
|
*/
|
|
1200
1253
|
self.moveSelection = function (offsetX, offsetY) {
|
|
1201
1254
|
var sel = [];
|
|
1255
|
+
self.selectedRows = [];
|
|
1256
|
+
self.selectedColumns = [];
|
|
1202
1257
|
self.selections.forEach(function (row, rowIndex) {
|
|
1203
1258
|
sel[rowIndex + offsetY] = [];
|
|
1259
|
+
self.selectedRows.push(rowIndex + offsetY);
|
|
1204
1260
|
row.forEach(function (colIndex) {
|
|
1205
1261
|
sel[rowIndex + offsetY].push(colIndex + offsetX);
|
|
1262
|
+
if (self.selectedColumns.indexOf(colIndex + offsetX) === -1)
|
|
1263
|
+
self.selectedColumns.push(colIndex + offsetX);
|
|
1206
1264
|
});
|
|
1207
1265
|
});
|
|
1208
1266
|
self.selections = sel;
|
|
@@ -1498,6 +1556,14 @@ export default function (self) {
|
|
|
1498
1556
|
}
|
|
1499
1557
|
x -= self.getRowGroupAreaWidth();
|
|
1500
1558
|
y -= self.getColumnGroupAreaHeight();
|
|
1559
|
+
|
|
1560
|
+
if (self.dragStartObject !== undefined) {
|
|
1561
|
+
if (x <= 0) x = 1;
|
|
1562
|
+
if (x >= self.width) x = self.width - 1;
|
|
1563
|
+
if (y <= 0) y = 1;
|
|
1564
|
+
if (y >= self.height) y = self.height - 1;
|
|
1565
|
+
}
|
|
1566
|
+
|
|
1501
1567
|
var border,
|
|
1502
1568
|
tsz = useTouchScrollZones ? self.attributes.touchScrollZone : 0,
|
|
1503
1569
|
moveMode = self.attributes.borderDragBehavior === 'move',
|
|
@@ -1544,13 +1610,15 @@ export default function (self) {
|
|
|
1544
1610
|
entitiy.y + entitiy.height + self.style.cellBorderWidth > y
|
|
1545
1611
|
) {
|
|
1546
1612
|
if (/frozen-row-marker/.test(cell.style)) {
|
|
1613
|
+
if (self.dragMode === 'frozen-column-marker') continue;
|
|
1547
1614
|
cell.dragContext = cell.style;
|
|
1548
|
-
cell.context = '
|
|
1615
|
+
cell.context = 'grab';
|
|
1549
1616
|
return cell;
|
|
1550
1617
|
}
|
|
1551
1618
|
if (/frozen-column-marker/.test(cell.style)) {
|
|
1619
|
+
if (self.dragMode === 'frozen-row-marker') continue;
|
|
1552
1620
|
cell.dragContext = cell.style;
|
|
1553
|
-
cell.context = '
|
|
1621
|
+
cell.context = 'grab';
|
|
1554
1622
|
return cell;
|
|
1555
1623
|
}
|
|
1556
1624
|
if (/selection-handle-/.test(cell.style)) {
|
|
@@ -1647,11 +1715,12 @@ export default function (self) {
|
|
|
1647
1715
|
}
|
|
1648
1716
|
if (cell.style === 'columnHeaderCell') {
|
|
1649
1717
|
if (
|
|
1650
|
-
cell.
|
|
1651
|
-
cell.
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1718
|
+
(!self.isColumnSelected(cell.columnIndex) &&
|
|
1719
|
+
cell.x +
|
|
1720
|
+
cell.width -
|
|
1721
|
+
self.attributes.columnGrabZoneSize -
|
|
1722
|
+
self.style.cellBorderWidth >
|
|
1723
|
+
x) ||
|
|
1655
1724
|
!self.attributes.allowRowReordering
|
|
1656
1725
|
) {
|
|
1657
1726
|
cell.dragContext = 'cell';
|
|
@@ -1664,9 +1733,10 @@ export default function (self) {
|
|
|
1664
1733
|
}
|
|
1665
1734
|
if (cell.style === 'rowHeaderCell') {
|
|
1666
1735
|
if (
|
|
1667
|
-
self.
|
|
1668
|
-
|
|
1669
|
-
|
|
1736
|
+
(!self.isRowSelected(cell.rowIndex) &&
|
|
1737
|
+
self.attributes.rowGrabZoneSize +
|
|
1738
|
+
(cell.y - self.style.cellBorderWidth) <
|
|
1739
|
+
y) ||
|
|
1670
1740
|
!self.attributes.allowRowReordering
|
|
1671
1741
|
) {
|
|
1672
1742
|
cell.dragContext = 'cell';
|
|
@@ -1790,6 +1860,8 @@ export default function (self) {
|
|
|
1790
1860
|
s = self.getSchema();
|
|
1791
1861
|
if (!ctrl) {
|
|
1792
1862
|
self.selections = [];
|
|
1863
|
+
self.selectedRows = [];
|
|
1864
|
+
self.selectedColumns = [];
|
|
1793
1865
|
}
|
|
1794
1866
|
if (
|
|
1795
1867
|
self.selectionBounds.top < -1 ||
|
|
@@ -1805,6 +1877,7 @@ export default function (self) {
|
|
|
1805
1877
|
x += 1
|
|
1806
1878
|
) {
|
|
1807
1879
|
self.selections[x] = [];
|
|
1880
|
+
self.selectedRows.push(x);
|
|
1808
1881
|
for (
|
|
1809
1882
|
y = self.selectionBounds.left;
|
|
1810
1883
|
y <= self.selectionBounds.right;
|
|
@@ -1813,6 +1886,9 @@ export default function (self) {
|
|
|
1813
1886
|
if (self.selections[x].indexOf(y) === -1) {
|
|
1814
1887
|
self.selections[x].push(y);
|
|
1815
1888
|
}
|
|
1889
|
+
if (y !== -1 && self.selectedColumns.indexOf(y) === -1) {
|
|
1890
|
+
self.selectedColumns.push(y);
|
|
1891
|
+
}
|
|
1816
1892
|
}
|
|
1817
1893
|
}
|
|
1818
1894
|
ev = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "canvas-datagrid",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "Canvas based data grid web component. Capable of displaying millions of contiguous hierarchical rows and columns without paging or loading, on a single canvas element.",
|
|
5
5
|
"main": "./dist/canvas-datagrid.js",
|
|
6
6
|
"module": "./dist/canvas-datagrid.module.js",
|