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/dist/types.d.ts CHANGED
@@ -463,16 +463,16 @@ declare class canvasDatagrid {
463
463
  * @param dontDraw - Suppress the draw method after the selection change.
464
464
  */
465
465
  static selectAll(dontDraw: boolean): void;
466
- /**
467
- * Returns true if indices of columns next to the selected columnIndex is selected on every row.
468
- * @param columnIndex - The column index to check.
469
- */
470
- static isMultiColumnsSelected(columnIndex: number): void;
471
466
  /**
472
467
  * Returns true if the selected columnIndex is selected on every row.
473
468
  * @param columnIndex - The column index to check.
474
469
  */
475
470
  static isColumnSelected(columnIndex: number): void;
471
+ /**
472
+ * Returns true if the selected rowIndex is selected on every column.
473
+ * @param rowIndex - The row index to check.
474
+ */
475
+ static isRowSelected(rowIndex: number): void;
476
476
  /**
477
477
  * Runs the defined method on each selected cell.
478
478
  * @param fn - The function to execute. The signature of the function is: (data, rowIndex, columnName).
@@ -519,15 +519,19 @@ declare class canvasDatagrid {
519
519
  /**
520
520
  * Hide column/columns
521
521
  */
522
- static hideColumns: any;
522
+ static hideColumns(beginColumnOrderIndex: number, endColumnOrderIndex?: number): void;
523
+ /**
524
+ * Unihde column/columns
525
+ */
526
+ static unhideColumns(beginColumnOrderIndex: number, endColumnOrderIndex?: number): void;
523
527
  /**
524
528
  * Hide rows
525
529
  */
526
- static hideRows: any;
530
+ static hideRows(beginRowIndex: number, endRowIndex: number): void;
527
531
  /**
528
532
  * Unhide rows
529
533
  */
530
- static unhideRows: any;
534
+ static unhideRows(beginRowIndex: number, endRowIndex: number): void;
531
535
  /**
532
536
  * Resizes a column to fit the longest value in the column. Call without a value to resize all columns.
533
537
  * Warning, can be slow on very large record sets (1m records ~3-5 seconds on an i7).
@@ -1128,7 +1128,7 @@ export default function (self) {
1128
1128
  function createDisposeEvent() {
1129
1129
  requestAnimationFrame(function () {
1130
1130
  document.addEventListener('click', self.disposeContextMenu);
1131
- document.removeEventListener('mouseup', createDisposeEvent);
1131
+ window.removeEventListener('mouseup', createDisposeEvent);
1132
1132
  });
1133
1133
  }
1134
1134
  var contextPosition,
@@ -1176,7 +1176,7 @@ export default function (self) {
1176
1176
  }
1177
1177
  self.contextMenu = createContextMenu(ev, contextPosition, items);
1178
1178
  if (e.type == 'mousedown') {
1179
- document.addEventListener('mouseup', createDisposeEvent);
1179
+ window.addEventListener('mouseup', createDisposeEvent);
1180
1180
  } else {
1181
1181
  createDisposeEvent();
1182
1182
  }
package/lib/defaults.js CHANGED
@@ -295,14 +295,16 @@ export default function (self) {
295
295
  ['filterButtonHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],
296
296
  ['filterButtonMenuOffsetTop', 10],
297
297
  ['filterButtonWidth', 20],
298
- ['frozenMarkerHoverColor', 'rgba(236, 243, 255, 1)'],
299
- ['frozenMarkerHoverBorderColor', 'rgba(110, 168, 255, 1)'],
300
- ['frozenMarkerActiveColor', 'rgba(236, 243, 255, 1)'],
301
- ['frozenMarkerActiveBorderColor', 'rgba(110, 168, 255, 1)'],
302
- ['frozenMarkerColor', 'rgba(222, 222, 222, 1)'],
303
- ['frozenMarkerBorderColor', 'rgba(168, 168, 168, 1)'],
298
+ ['frozenMarkerHoverColor', 'rgba(165, 198, 254, 1)'],
299
+ ['frozenMarkerHoverBorderColor', 'rgba(165, 198, 254, 1)'],
300
+ ['frozenMarkerActiveColor', 'rgba(165, 198, 254, 0.2)'],
301
+ ['frozenMarkerActiveBorderColor', 'rgba(165, 198, 254, 0.5)'],
302
+ ['frozenMarkerActiveHeaderColor', 'rgba(165, 198, 254, 1)'],
303
+ ['frozenMarkerColor', 'rgba(221, 221, 221, 1)'],
304
+ ['frozenMarkerBorderColor', 'rgba(221, 221, 221, 1)'],
304
305
  ['frozenMarkerBorderWidth', 1],
305
- ['frozenMarkerWidth', 2],
306
+ ['frozenMarkerHeaderColor', 'rgba(188, 188, 188, 1)'],
307
+ ['frozenMarkerWidth', 4],
306
308
  ['groupingAreaBackgroundColor', 'rgba(240, 240, 240, 1)'],
307
309
  ['gridBackgroundColor', 'rgba(240, 240, 240, 1)'],
308
310
  ['gridBorderCollapse', 'collapse'],
package/lib/docs.js CHANGED
@@ -973,6 +973,22 @@
973
973
  * @param {object} e.ctx Canvas context.
974
974
  * @param {canvasDatagrid.cell} e.cell The cell being moved out of.
975
975
  */
976
+ /**
977
+ * Fires column(s) are being hidden
978
+ * @event
979
+ * @name canvasDatagrid#columnhide
980
+ * @param {object} e Event object.
981
+ * @param {object} e.ctx Canvas context.
982
+ * @param {columnIndex} e.columnIndex Index of column being hidden.
983
+ */
984
+ /**
985
+ * Fires column(s) are being unhidden
986
+ * @event
987
+ * @name canvasDatagrid#columnunhide
988
+ * @param {object} e Event object.
989
+ * @param {object} e.ctx Canvas context.
990
+ * @param {columnIndex} e.columnIndex Index of column being unhidden.
991
+ */
976
992
  /**
977
993
  * Fires when the mouse enters a row.
978
994
  * @event
package/lib/dom.js CHANGED
@@ -370,6 +370,19 @@ export default function (self) {
370
370
  var shouldClearCellValue = cellValueIsEmpty || inEnterMode;
371
371
 
372
372
  self.input.value = shouldClearCellValue ? '' : cell.value;
373
+ let width = Math.round(
374
+ self.input.value.length *
375
+ parseInt(self.style.editCellFontSize, 10) *
376
+ 0.7 *
377
+ self.scale,
378
+ );
379
+ if (width + self.style.cellPaddingLeft < cell.width) {
380
+ width = cell.width - self.style.cellPaddingLeft;
381
+ } else if (width > self.width - cell.x - self.style.scrollBarWidth) {
382
+ width = self.width - cell.x - self.style.scrollBarWidth;
383
+ self.input.style.height = 'auto';
384
+ }
385
+ self.input.style.width = width + 'px';
373
386
  self.input.focus();
374
387
  self.input.addEventListener('click', self.stopPropagation);
375
388
  self.input.addEventListener('dblclick', self.stopPropagation);
@@ -450,6 +463,20 @@ export default function (self) {
450
463
  }
451
464
  self.scrollIntoView(nx, ny);
452
465
  self.beginEditAt(nx, ny, e);
466
+ } else {
467
+ let width = Math.round(
468
+ self.input.value.length *
469
+ parseInt(self.style.editCellFontSize, 10) *
470
+ 0.7 *
471
+ self.scale,
472
+ );
473
+ if (width + self.style.cellPaddingLeft < cell.width) {
474
+ width = cell.width - self.style.cellPaddingLeft;
475
+ } else if (width > self.width - cell.x - self.style.scrollBarWidth) {
476
+ width = self.width - cell.x - self.style.scrollBarWidth;
477
+ self.input.style.height = 'auto';
478
+ }
479
+ self.input.style.width = width + 'px';
453
480
  }
454
481
  });
455
482
 
@@ -773,11 +800,11 @@ export default function (self) {
773
800
  });
774
801
  self.eventParent.addEventListener('scroll', self.resize, false);
775
802
  self.eventParent.addEventListener('touchstart', self.touchstart, false);
776
- self.eventParent.addEventListener('mouseup', self.mouseup, false);
777
803
  self.eventParent.addEventListener('mousedown', self.mousedown, false);
778
804
  self.eventParent.addEventListener('dblclick', self.dblclick, false);
779
805
  self.eventParent.addEventListener('click', self.click, false);
780
- document.body.addEventListener('mousemove', self.mousemove);
806
+ window.addEventListener('mouseup', self.mouseup, false);
807
+ window.addEventListener('mousemove', self.mousemove);
781
808
  self[self.isChildGrid ? 'parentGrid' : 'eventParent'].addEventListener(
782
809
  'wheel',
783
810
  self.scrollWheel,
package/lib/draw.js CHANGED
@@ -1064,8 +1064,10 @@ export default function (self) {
1064
1064
  isGrid = header.type === 'canvas-datagrid',
1065
1065
  activeHeader =
1066
1066
  (self.orders.rows[self.activeCell.rowIndex] === rowOrderIndex ||
1067
+ self.selectedRows.indexOf(rowOrderIndex) >= 0 ||
1067
1068
  self.orders.columns[self.activeCell.columnIndex] ===
1068
- headerIndex) &&
1069
+ headerIndex ||
1070
+ self.selectedColumns.indexOf(headerIndex) >= 0) &&
1069
1071
  (columnOrderIndex === -1 || rowOrderIndex === -1)
1070
1072
  ? isRowHeader
1071
1073
  ? 'activeRowHeaderCell'
@@ -1818,7 +1820,7 @@ export default function (self) {
1818
1820
  }
1819
1821
  }
1820
1822
  //draw frozen columns
1821
- x = 0;
1823
+ x = 1;
1822
1824
  if (self.attributes.showRowHeaders) {
1823
1825
  x += rowHeaderCellWidth;
1824
1826
  }
@@ -2311,10 +2313,8 @@ export default function (self) {
2311
2313
  if (self.attributes.allowFreezingRows) {
2312
2314
  // HACK great, another stupid magic number.
2313
2315
  // Background will appear as a 0.5px artifact behind the row freeze bar without this hack
2314
- y +=
2315
- self.style.frozenMarkerBorderWidth +
2316
- self.style.frozenMarkerWidth -
2317
- 0.4999999999;
2316
+ if (y > columnHeaderCellHeight) y += self.style.frozenMarkerWidth;
2317
+ y += self.style.frozenMarkerBorderWidth - 0.4999999999;
2318
2318
  }
2319
2319
  self.lastFrozenRowPixel = y;
2320
2320
  }
@@ -2441,6 +2441,7 @@ export default function (self) {
2441
2441
  self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;
2442
2442
  self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;
2443
2443
  if (
2444
+ self.selectedRows.indexOf(self.reorderTarget.sortRowIndex) === -1 &&
2444
2445
  self.currentCell.rowIndex !== self.reorderObject.rowIndex &&
2445
2446
  self.currentCell.rowIndex > -1 &&
2446
2447
  self.currentCell.rowIndex < l
@@ -2454,10 +2455,12 @@ export default function (self) {
2454
2455
  }
2455
2456
  } else if (self.dragMode === 'column-reorder' && self.reorderObject) {
2456
2457
  var selectedColumns = self.selections[0];
2457
- for (var k = 1; k < selectedColumns.length; k++) {
2458
- b.width += self.getColumnWidth(
2459
- self.orders.columns[selectedColumns[k]],
2460
- );
2458
+ if (selectedColumns) {
2459
+ for (var k = 1; k < selectedColumns.length; k++) {
2460
+ b.width += self.getColumnWidth(
2461
+ self.orders.columns[selectedColumns[k]],
2462
+ );
2463
+ }
2461
2464
  }
2462
2465
  b.height = h;
2463
2466
  b.y = 0;
@@ -2470,8 +2473,11 @@ export default function (self) {
2470
2473
  self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;
2471
2474
  self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;
2472
2475
  if (
2476
+ self.selectedColumns.indexOf(self.reorderTarget.sortColumnIndex) ===
2477
+ -1 &&
2473
2478
  self.currentCell.sortColumnIndex !==
2474
2479
  self.reorderObject.sortColumnIndex &&
2480
+ self.reorderTarget.columnIndex !== self.reorderObject.columnIndex &&
2475
2481
  self.currentCell.sortColumnIndex > -1 &&
2476
2482
  self.currentCell.sortColumnIndex < schema.length
2477
2483
  ) {
@@ -2592,81 +2598,172 @@ export default function (self) {
2592
2598
  self.ctx.restore();
2593
2599
  }
2594
2600
  function drawFrozenMarkers() {
2595
- if (self.dragStartObject !== undefined) return;
2596
2601
  var my = self.lastFrozenRowPixel - self.style.frozenMarkerWidth,
2597
- mx = self.lastFrozenColumnPixel - self.style.frozenMarkerBorderWidth,
2602
+ mx = self.lastFrozenColumnPixel - self.style.frozenMarkerWidth,
2598
2603
  xHover =
2599
2604
  self.currentCell && self.currentCell.style === 'frozen-row-marker',
2600
2605
  yHover =
2601
2606
  self.currentCell && self.currentCell.style === 'frozen-column-marker';
2607
+ let rowHeaderCellWidth = self.getRowHeaderCellWidth();
2602
2608
  self.ctx.lineWidth = self.style.frozenMarkerBorderWidth;
2603
2609
  if (self.attributes.allowFreezingColumns) {
2604
- self.ctx.fillStyle = yHover
2605
- ? self.style.frozenMarkerHoverColor
2606
- : self.style.frozenMarkerColor;
2607
- self.ctx.strokeStyle = yHover
2608
- ? self.style.frozenMarkerHoverBorderColor
2609
- : self.style.frozenMarkerBorderColor;
2610
- fillRect(mx, 0, self.style.frozenMarkerWidth, self.height);
2611
- strokeRect(mx, 0, self.style.frozenMarkerWidth, self.height);
2612
- self.visibleCells.unshift({
2613
- x: mx,
2614
- y: 0,
2615
- height: self.height,
2616
- width:
2617
- self.style.frozenMarkerWidth + self.style.frozenMarkerBorderWidth,
2618
- style: 'frozen-column-marker',
2619
- });
2610
+ if (
2611
+ !self.freezeMarkerPosition ||
2612
+ (self.freezeMarkerPosition && self.dragMode === 'frozen-row-marker')
2613
+ ) {
2614
+ if (mx > self.style.rowHeaderCellWidth) {
2615
+ self.ctx.fillStyle = self.style.frozenMarkerColor;
2616
+ self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;
2617
+ fillRect(mx, 0, self.style.frozenMarkerWidth, self.height);
2618
+ strokeRect(mx, 0, self.style.frozenMarkerWidth, self.height);
2619
+ }
2620
+ self.ctx.fillStyle = yHover
2621
+ ? self.style.frozenMarkerHoverColor
2622
+ : self.style.frozenMarkerHeaderColor;
2623
+ self.ctx.strokeStyle = yHover
2624
+ ? self.style.frozenMarkerHoverBorderColor
2625
+ : self.style.frozenMarkerHeaderColor;
2626
+ fillRect(
2627
+ mx,
2628
+ 0,
2629
+ self.style.frozenMarkerWidth,
2630
+ self.style.columnHeaderCellHeight,
2631
+ );
2632
+ strokeRect(
2633
+ mx,
2634
+ 0,
2635
+ self.style.frozenMarkerWidth,
2636
+ self.style.columnHeaderCellHeight,
2637
+ );
2638
+ }
2639
+
2640
+ if (
2641
+ !self.dragStartObject ||
2642
+ (self.dragStartObject &&
2643
+ self.dragStartObject.style !== 'rowHeaderCell')
2644
+ ) {
2645
+ self.visibleCells.unshift({
2646
+ x: mx,
2647
+ y: 0,
2648
+ height: self.height,
2649
+ width: self.style.frozenMarkerWidth, // + self.style.frozenMarkerBorderWidth,
2650
+ style: 'frozen-column-marker',
2651
+ });
2652
+ }
2620
2653
  }
2621
2654
  if (self.attributes.allowFreezingRows) {
2622
- self.ctx.fillStyle = xHover
2623
- ? self.style.frozenMarkerHoverColor
2624
- : self.style.frozenMarkerColor;
2625
- self.ctx.strokeStyle = xHover
2626
- ? self.style.frozenMarkerHoverBorderColor
2627
- : self.style.frozenMarkerBorderColor;
2628
- fillRect(0, my, self.width, self.style.frozenMarkerWidth);
2629
- strokeRect(0, my, self.width, self.style.frozenMarkerWidth);
2630
- const height =
2655
+ if (
2656
+ !self.freezeMarkerPosition ||
2657
+ (self.freezeMarkerPosition &&
2658
+ self.dragMode === 'frozen-column-marker')
2659
+ ) {
2660
+ if (my > rowHeaderCellWidth) {
2661
+ self.ctx.fillStyle = self.style.frozenMarkerColor;
2662
+ self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;
2663
+ fillRect(0, my, self.width, self.style.frozenMarkerWidth);
2664
+ strokeRect(0, my, self.width, self.style.frozenMarkerWidth);
2665
+ }
2666
+ self.ctx.fillStyle = xHover
2667
+ ? self.style.frozenMarkerHoverColor
2668
+ : self.style.frozenMarkerHeaderColor;
2669
+ self.ctx.strokeStyle = xHover
2670
+ ? self.style.frozenMarkerHoverBorderColor
2671
+ : self.style.frozenMarkerHeaderColor;
2672
+ fillRect(0, my, rowHeaderCellWidth, self.style.frozenMarkerWidth);
2673
+ strokeRect(0, my, rowHeaderCellWidth, self.style.frozenMarkerWidth);
2674
+ }
2675
+ var height =
2631
2676
  self.style.frozenMarkerWidth + self.style.frozenMarkerBorderWidth;
2632
- self.visibleCells.unshift({
2633
- x: 0,
2634
- y: my,
2635
- height,
2636
- width: self.width,
2637
- style: 'frozen-row-marker',
2638
- });
2677
+ if (
2678
+ !self.dragStartObject ||
2679
+ (self.dragStartObject &&
2680
+ self.dragStartObject.style !== 'columnHeaderCell')
2681
+ ) {
2682
+ self.visibleCells.unshift({
2683
+ x: 0,
2684
+ y: my,
2685
+ height: height,
2686
+ width: self.width,
2687
+ style: 'frozen-row-marker',
2688
+ });
2689
+ }
2639
2690
  rowGroupsFrozenInfo = { y: my, h: height };
2640
2691
  }
2641
2692
  if (self.freezeMarkerPosition) {
2642
2693
  self.ctx.fillStyle = self.style.frozenMarkerActiveColor;
2643
2694
  self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;
2644
2695
  if (self.dragMode === 'frozen-column-marker') {
2696
+ let posX = self.freezeMarkerPosition.x;
2697
+ let nearCell = self.getCellAt(posX, 0);
2698
+ if (self.freezeMarkerPosition.isGrab) posX = mx;
2699
+ if (posX > rowHeaderCellWidth) {
2700
+ let x =
2701
+ nearCell.x -
2702
+ self.style.frozenMarkerWidth -
2703
+ self.style.frozenMarkerBorderWidth;
2704
+ if (posX > x + nearCell.width / 2) x = x + nearCell.width;
2705
+ self.ctx.fillStyle = self.style.frozenMarkerColor;
2706
+ self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;
2707
+ fillRect(x, 0, self.style.frozenMarkerWidth, self.height);
2708
+ strokeRect(x, 0, self.style.frozenMarkerWidth, self.height);
2709
+ self.ctx.fillStyle = self.style.frozenMarkerHeaderColor;
2710
+ self.ctx.strokeStyle = self.style.frozenMarkerHeaderColor;
2711
+ fillRect(
2712
+ x,
2713
+ 0,
2714
+ self.style.frozenMarkerWidth,
2715
+ self.style.columnHeaderCellHeight,
2716
+ );
2717
+ strokeRect(
2718
+ x,
2719
+ 0,
2720
+ self.style.frozenMarkerWidth,
2721
+ self.style.columnHeaderCellHeight,
2722
+ );
2723
+ }
2724
+ self.ctx.fillStyle = self.style.frozenMarkerActiveHeaderColor;
2725
+ self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;
2645
2726
  fillRect(
2646
- self.freezeMarkerPosition.x,
2727
+ posX,
2647
2728
  0,
2648
2729
  self.style.frozenMarkerWidth,
2649
- self.height,
2730
+ self.style.columnHeaderCellHeight,
2650
2731
  );
2651
2732
  strokeRect(
2652
- self.freezeMarkerPosition.x,
2733
+ posX,
2653
2734
  0,
2654
2735
  self.style.frozenMarkerWidth,
2655
- self.height,
2736
+ self.style.columnHeaderCellHeight,
2656
2737
  );
2738
+ self.ctx.fillStyle = self.style.frozenMarkerActiveColor;
2739
+ fillRect(posX, 0, self.style.frozenMarkerWidth, self.height);
2740
+ strokeRect(posX, 0, self.style.frozenMarkerWidth, self.height);
2657
2741
  } else {
2658
- fillRect(
2659
- 0,
2660
- self.freezeMarkerPosition.y,
2661
- self.width,
2662
- self.style.frozenMarkerWidth,
2663
- );
2664
- strokeRect(
2665
- 0,
2666
- self.freezeMarkerPosition.y,
2667
- self.width,
2668
- self.style.frozenMarkerWidth,
2669
- );
2742
+ let posY = self.freezeMarkerPosition.y;
2743
+ let nearCell = self.getCellAt(0, posY);
2744
+ if (self.freezeMarkerPosition.isGrab) posY = my;
2745
+ if (posY > self.style.columnHeaderCellHeight) {
2746
+ let y =
2747
+ nearCell.y -
2748
+ self.style.frozenMarkerWidth -
2749
+ self.style.frozenMarkerBorderWidth;
2750
+ if (posY > y + nearCell.height / 2) y = y + nearCell.height;
2751
+ self.ctx.fillStyle = self.style.frozenMarkerColor;
2752
+ self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;
2753
+ fillRect(0, y, self.width, self.style.frozenMarkerWidth);
2754
+ strokeRect(0, y, self.width, self.style.frozenMarkerWidth);
2755
+ self.ctx.fillStyle = self.style.frozenMarkerHeaderColor;
2756
+ self.ctx.strokeStyle = self.style.frozenMarkerHeaderColor;
2757
+ fillRect(0, y, rowHeaderCellWidth, self.style.frozenMarkerWidth);
2758
+ strokeRect(0, y, rowHeaderCellWidth, self.style.frozenMarkerWidth);
2759
+ }
2760
+ self.ctx.fillStyle = self.style.frozenMarkerActiveHeaderColor;
2761
+ self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;
2762
+ fillRect(0, posY, rowHeaderCellWidth, self.style.frozenMarkerWidth);
2763
+ strokeRect(0, posY, rowHeaderCellWidth, self.style.frozenMarkerWidth);
2764
+ self.ctx.fillStyle = self.style.frozenMarkerActiveColor;
2765
+ fillRect(0, posY, self.width, self.style.frozenMarkerWidth);
2766
+ strokeRect(0, posY, self.width, self.style.frozenMarkerWidth);
2670
2767
  }
2671
2768
  }
2672
2769
  }