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.
@@ -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 indices of columns next to the selected columnIndex is selected on every row.
465
+ * Returns true if the selected columnIndex is selected on every row.
463
466
  * @memberof canvasDatagrid
464
- * @name isMultiColumnsSelected
467
+ * @name isColumnSelected
465
468
  * @method
466
469
  * @param {number} columnIndex The column index to check.
467
470
  */
468
- self.isMultiColumnsSelected = function (columnIndex) {
469
- var multiColIsSelected = true;
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
- !columnIndices ||
474
- columnIndices.length <= 1 ||
475
- columnIndices.indexOf(columnIndex) === -1
475
+ !self.selections[rowIndex] ||
476
+ self.selections[rowIndex].indexOf(columnIndex) === -1
476
477
  ) {
477
- multiColIsSelected = false;
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 multiColIsSelected;
481
+ return colIsSelected;
491
482
  };
492
483
  /**
493
- * Returns true if the selected columnIndex is selected on every row.
484
+ * Returns true if the selected rowIndex is selected on every column.
494
485
  * @memberof canvasDatagrid
495
- * @name isColumnSelected
486
+ * @name isRowSelected
496
487
  * @method
497
- * @param {number} columnIndex The column index to check.
488
+ * @param {number} rowIndex The row index to check.
498
489
  */
499
- self.isColumnSelected = function (columnIndex) {
500
- var colIsSelected = true;
501
- self.viewData.forEach(function (row, rowIndex) {
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(columnIndex) === -1
498
+ self.selections[rowIndex].indexOf(index) === -1
505
499
  ) {
506
- colIsSelected = false;
500
+ rowIsSelected = false;
507
501
  }
508
502
  });
509
- return colIsSelected;
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
- let count = 0;
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
- count++;
801
+ hiddenColumns.push(columnIndex);
788
802
  schema[columnIndex].hidden = true;
803
+
804
+ self.dispatchEvent('columnhide', {
805
+ columnIndex,
806
+ });
789
807
  }
790
808
  }
791
- if (count > 0) {
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 = 'row-resize';
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 = 'col-resize';
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.x +
1651
- cell.width -
1652
- self.attributes.columnGrabZoneSize -
1653
- self.style.cellBorderWidth >
1654
- x ||
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.attributes.rowGrabZoneSize +
1668
- (cell.y - self.style.cellBorderWidth) <
1669
- y ||
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",
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",