canvas-datagrid 0.3.21 → 0.3.25

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 CHANGED
@@ -7,6 +7,33 @@ All notable changes to this project will be documented in this file.
7
7
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
8
8
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
+ ## 0.3.25 - 2021-12-22
11
+
12
+ ### Fixed
13
+
14
+ - Fix null value bug when copying value (ndrsn)
15
+ - Fix setting property `dragOffset` of undefined (Lie Yue, #457)
16
+ - Fix cell editing in the inner grid (Liu Yue, #456)
17
+
18
+ ## 0.3.24 - 2021-12-22
19
+
20
+ ### Changed
21
+
22
+ - Prevent default when handling cut event and cleanup utility functions (mdebrauw, #454)
23
+
24
+ ## 0.3.23 - 2021-12-16
25
+
26
+ ### Fixed
27
+
28
+ - Slight refactor and set minimum width when resizing (mdebrauw, #452)
29
+
30
+ ## 0.3.22 - 2021-12-15
31
+
32
+ ### Changed
33
+
34
+ - Resize selected columns simultaneously (mdebrauw, #451)
35
+ - Refactor `cut` and `copy` event handlers (mdebrauw, #450)
36
+
10
37
  ## 0.3.21 - 2021-12-08
11
38
 
12
39
  ### Added
@@ -1538,12 +1538,19 @@ __webpack_require__.r(__webpack_exports__);
1538
1538
  s = e,
1539
1539
  h,
1540
1540
  w;
1541
+ var calculatedTree = false;
1541
1542
 
1542
1543
  while (e.offsetParent && e.nodeName !== 'CANVAS-DATAGRID') {
1543
- x += e.offsetLeft;
1544
- y += e.offsetTop;
1545
- h = e.offsetHeight;
1546
- w = e.offsetWidth;
1544
+ var isTree = e.nodeType === 'canvas-datagrid-tree';
1545
+
1546
+ if (!isTree || !calculatedTree) {
1547
+ x += e.offsetLeft;
1548
+ y += e.offsetTop;
1549
+ h = e.offsetHeight;
1550
+ w = e.offsetWidth;
1551
+ }
1552
+
1553
+ if (isTree) calculatedTree = true;
1547
1554
  e = e.offsetParent;
1548
1555
  }
1549
1556
 
@@ -4084,15 +4091,7 @@ __webpack_require__.r(__webpack_exports__);
4084
4091
  /*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/
4085
4092
 
4086
4093
 
4087
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4088
-
4089
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4090
-
4091
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
4092
-
4093
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4094
-
4095
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4094
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4096
4095
 
4097
4096
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4098
4097
 
@@ -4834,7 +4833,21 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
4834
4833
  self.ellipsisCache = {};
4835
4834
  };
4836
4835
 
4837
- self.stopDragResize = function () {
4836
+ self.stopDragResize = function (event) {
4837
+ var pos = self.getLayerPos(event);
4838
+
4839
+ if (self.dragMode === 'ew-resize') {
4840
+ var hasMoved = !!(pos.x - self.dragStart.x); // Check that dragItem is selected or part of selection.
4841
+
4842
+ var dragItemIsSelected = self.isColumnSelected(self.dragItem.columnIndex);
4843
+
4844
+ if (hasMoved && dragItemIsSelected) {
4845
+ var width = Math.max(self.resizingStartingWidth + pos.x - self.dragStart.x, self.style.minColumnWidth); // If the column is selected, resize it to width plus any other selected columns.
4846
+
4847
+ self.fitSelectedColumns(width);
4848
+ }
4849
+ }
4850
+
4838
4851
  self.resize();
4839
4852
  document.body.removeEventListener('mousemove', self.dragResizeColumn, false);
4840
4853
  document.body.removeEventListener('mouseup', self.stopDragResize, false);
@@ -4953,6 +4966,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
4953
4966
  if (Math.abs(x) > self.attributes.reorderDeadZone || Math.abs(y) > self.attributes.reorderDeadZone) {
4954
4967
  self.reorderObject = self.draggingItem;
4955
4968
  if (self.isMultiRowsSelected) self.reorderObject = self.getVisibleCellByIndex(-1, self.activeCell.rowIndex);
4969
+ if (!self.reorderObject) return;
4956
4970
  self.reorderTarget = self.currentCell;
4957
4971
  self.reorderObject.dragOffset = {
4958
4972
  x: x,
@@ -5586,7 +5600,15 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5586
5600
  }
5587
5601
 
5588
5602
  if (self.currentCell.context === 'ew-resize' && self.currentCell.style === 'columnHeaderCell') {
5589
- self.fitColumnToValues(self.currentCell.header.name);
5603
+ // Check that double-clicked cell is selected or part of selection.
5604
+ var currentCellIsSelected = self.isColumnSelected(self.currentCell.columnIndex);
5605
+
5606
+ if (currentCellIsSelected) {
5607
+ // There might be more
5608
+ self.fitSelectedColumns();
5609
+ } else {
5610
+ self.fitColumnToValues(self.currentCell.header.name);
5611
+ }
5590
5612
  } else if (self.currentCell.context === 'ew-resize' && self.currentCell.style === 'cornerCell') {
5591
5613
  self.autosize();
5592
5614
  } else if (['cell', 'activeCell'].includes(self.currentCell.style) && !self.hovers.onFilterButton) {
@@ -5795,139 +5817,43 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5795
5817
  });
5796
5818
  };
5797
5819
 
5798
- self.cut = function (e) {
5799
- self.copy(e);
5800
- var schema = self.getSchema();
5801
- var affectedCells = [];
5802
-
5803
- var _iterator2 = _createForOfIteratorHelper(self.selections.entries()),
5804
- _step2;
5805
-
5806
- try {
5807
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
5808
- var _step2$value = _slicedToArray(_step2.value, 2),
5809
- rowIndex = _step2$value[0],
5810
- row = _step2$value[1];
5811
-
5812
- if (!row) continue;
5813
- var boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);
5814
-
5815
- var _iterator3 = _createForOfIteratorHelper(row),
5816
- _step3;
5817
-
5818
- try {
5819
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
5820
- var columnIndex = _step3.value;
5821
- var boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(columnIndex);
5822
- var colName = schema[boundColumnIndex].name;
5823
- self.viewData[rowIndex][colName] = '';
5824
- affectedCells.push([rowIndex, columnIndex, boundRowIndex, boundColumnIndex]);
5825
- }
5826
- } catch (err) {
5827
- _iterator3.e(err);
5828
- } finally {
5829
- _iterator3.f();
5830
- }
5831
- }
5832
- } catch (err) {
5833
- _iterator2.e(err);
5834
- } finally {
5835
- _iterator2.f();
5836
- }
5837
-
5820
+ self.cut = function (event) {
5838
5821
  if (self.dispatchEvent('cut', {
5839
- NativeEvent: e,
5840
- cells: affectedCells
5822
+ NativeEvent: event
5841
5823
  })) {
5842
5824
  return;
5825
+ } // Expecting instance of `ClipboardEvent` with `clipboardData` attribute
5826
+
5827
+
5828
+ if (!self.hasFocus || !event.clipboardData) {
5829
+ return;
5843
5830
  }
5844
5831
 
5832
+ self.copySelectedCellsToClipboard(event.clipboardData);
5833
+ var affectedCells = self.clearSelectedCells();
5834
+ self.dispatchEvent('aftercut', {
5835
+ cells: affectedCells
5836
+ });
5845
5837
  requestAnimationFrame(function () {
5846
5838
  return self.draw();
5847
5839
  });
5840
+ event.preventDefault();
5848
5841
  };
5849
5842
 
5850
- self.copy = function (e) {
5843
+ self.copy = function (event) {
5851
5844
  if (self.dispatchEvent('copy', {
5852
- NativeEvent: e
5845
+ NativeEvent: event
5853
5846
  })) {
5854
5847
  return;
5855
- }
5848
+ } // Expecting instance of `ClipboardEvent` with `clipboardData` attribute
5856
5849
 
5857
- if (!self.hasFocus || !e.clipboardData) {
5858
- return;
5859
- }
5860
-
5861
- var t = '',
5862
- d = '',
5863
- textRows = [],
5864
- sData = self.getSelectedData(),
5865
- s = self.getSchema(),
5866
- sSorted = [],
5867
- firstRowKeys,
5868
- isNeat = true; // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy
5869
5850
 
5870
- function htmlSafe(v) {
5871
- if (typeof v === 'number') return v;
5872
- return v.replace(/</g, '&lt;').replace(/>/g, '&gt;');
5851
+ if (!self.hasFocus || !event.clipboardData) {
5852
+ return;
5873
5853
  }
5874
5854
 
5875
- s.forEach(function (column, columnIndex) {
5876
- sSorted.push(s[self.orders.columns[columnIndex]]);
5877
- });
5878
-
5879
- if (sData.length > 0) {
5880
- sData.forEach(function (row) {
5881
- if (!row) return;
5882
- var rowKeys = Object.keys(row);
5883
- var textRow = [];
5884
- if (!firstRowKeys) firstRowKeys = Object.keys(row);
5885
- if (isNeat && rowKeys.length !== firstRowKeys.length) isNeat = false;
5886
- sSorted.forEach(function (column, columnIndex) {
5887
- if (rowKeys.indexOf(String(column.name)) < 0) {
5888
- if (firstRowKeys.indexOf(String(column.name)) < 0) {
5889
- return;
5890
- } else if (isNeat) {
5891
- isNeat = false;
5892
- }
5893
- }
5894
-
5895
- textRow.push(row[column.name] || '');
5896
- });
5897
- textRows.push(textRow);
5898
- });
5899
-
5900
- if (isNeat) {
5901
- t = textRows.map(function (row) {
5902
- return row.join('\t');
5903
- }).join('\n');
5904
- /**
5905
- * The html content copied by Excel has not header
5906
- */
5907
-
5908
- d += '<table>';
5909
- d += textRows.map(function (row) {
5910
- return '<tr>' + row.map(function (value) {
5911
- return '<td>' + htmlSafe(value) + '</td>';
5912
- }).join('') + '</tr>';
5913
- }).join('');
5914
- d += '</table>';
5915
- } else {
5916
- t = textRows.map(function (row) {
5917
- return row.join('');
5918
- }).join('');
5919
- d = t;
5920
- }
5921
-
5922
- if (t) {
5923
- e.clipboardData.setData('text/html', d);
5924
- e.clipboardData.setData('text/plain', t);
5925
- e.clipboardData.setData('text/csv', t);
5926
- e.clipboardData.setData('application/json', JSON.stringify(sData));
5927
- }
5928
-
5929
- e.preventDefault();
5930
- }
5855
+ self.copySelectedCellsToClipboard(event.clipboardData);
5856
+ event.preventDefault();
5931
5857
  };
5932
5858
 
5933
5859
  return;
@@ -5940,6 +5866,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5940
5866
  !*** ./lib/events/util.js ***!
5941
5867
  \****************************/
5942
5868
  /*! namespace exports */
5869
+ /*! export createHTMLString [provided] [no usage info] [missing usage info prevents renaming] */
5870
+ /*! export createTextString [provided] [no usage info] [missing usage info prevents renaming] */
5871
+ /*! export htmlSafe [provided] [no usage info] [missing usage info prevents renaming] */
5943
5872
  /*! export isSupportedHtml [provided] [no usage info] [missing usage info prevents renaming] */
5944
5873
  /*! export parseData [provided] [no usage info] [missing usage info prevents renaming] */
5945
5874
  /*! export parseHtmlTable [provided] [no usage info] [missing usage info prevents renaming] */
@@ -5953,12 +5882,15 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
5953
5882
  "use strict";
5954
5883
  __webpack_require__.r(__webpack_exports__);
5955
5884
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
5885
+ /* harmony export */ "createTextString": function() { return /* binding */ createTextString; },
5886
+ /* harmony export */ "createHTMLString": function() { return /* binding */ createHTMLString; },
5956
5887
  /* harmony export */ "isSupportedHtml": function() { return /* binding */ isSupportedHtml; },
5957
- /* harmony export */ "sanitizeElementData": function() { return /* binding */ sanitizeElementData; },
5888
+ /* harmony export */ "htmlSafe": function() { return /* binding */ htmlSafe; },
5958
5889
  /* harmony export */ "parseData": function() { return /* binding */ parseData; },
5959
5890
  /* harmony export */ "parseHtmlTable": function() { return /* binding */ parseHtmlTable; },
5960
5891
  /* harmony export */ "parseHtmlText": function() { return /* binding */ parseHtmlText; },
5961
- /* harmony export */ "parseText": function() { return /* binding */ parseText; }
5892
+ /* harmony export */ "parseText": function() { return /* binding */ parseText; },
5893
+ /* harmony export */ "sanitizeElementData": function() { return /* binding */ sanitizeElementData; }
5962
5894
  /* harmony export */ });
5963
5895
 
5964
5896
 
@@ -6081,6 +6013,36 @@ var parseData = function parseData(data, mimeType) {
6081
6013
  return parseText(data);
6082
6014
  };
6083
6015
 
6016
+ var htmlSafe = function htmlSafe(value) {
6017
+ if (typeof value !== 'string') return value;
6018
+ return value.replace(/</g, '&lt;').replace(/>/g, '&gt;');
6019
+ };
6020
+
6021
+ var createTextString = function createTextString(selectedData, isNeat) {
6022
+ // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy.
6023
+ // If not isNeat we just return a simple string of concatenated values.
6024
+ if (!isNeat) return selectedData.map(function (row) {
6025
+ return Object.values(row).join('');
6026
+ }).join(''); // If isNeat, we can create tab separated mutti-line text.
6027
+
6028
+ return selectedData.map(function (row) {
6029
+ return Object.values(row).join('\t');
6030
+ }).join('\n');
6031
+ };
6032
+
6033
+ var createHTMLString = function createHTMLString(selectedData, isNeat) {
6034
+ if (!isNeat) return createTextString(selectedData, isNeat); // If isNeat, we can create a HTML table with the selected data.
6035
+
6036
+ var htmlString = '<table>';
6037
+ htmlString += selectedData.map(function (row) {
6038
+ return '<tr>' + Object.values(row).map(function (value) {
6039
+ return '<td>' + htmlSafe(value) + '</td>';
6040
+ }).join('') + '</tr>';
6041
+ }).join('');
6042
+ htmlString += '</table>';
6043
+ return htmlString;
6044
+ };
6045
+
6084
6046
 
6085
6047
 
6086
6048
  /***/ }),
@@ -6092,7 +6054,7 @@ var parseData = function parseData(data, mimeType) {
6092
6054
  /*! namespace exports */
6093
6055
  /*! export default [provided] [no usage info] [missing usage info prevents renaming] */
6094
6056
  /*! other exports [not provided] [no usage info] */
6095
- /*! runtime requirements: __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
6057
+ /*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */
6096
6058
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
6097
6059
 
6098
6060
  "use strict";
@@ -6100,6 +6062,7 @@ __webpack_require__.r(__webpack_exports__);
6100
6062
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6101
6063
  /* harmony export */ "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
6102
6064
  /* harmony export */ });
6065
+ /* harmony import */ var _events_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/util */ "./lib/events/util.js");
6103
6066
  /*jslint browser: true, unparam: true, todo: true*/
6104
6067
 
6105
6068
  /*globals HTMLElement: false, Reflect: false, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/
@@ -6121,6 +6084,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
6121
6084
 
6122
6085
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
6123
6086
 
6087
+
6124
6088
  /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(self, ctor) {
6125
6089
  self.scale = 1;
6126
6090
  self.orders = {
@@ -6325,9 +6289,11 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6325
6289
  return selectedCells;
6326
6290
  };
6327
6291
 
6328
- self.clearSelectedCells = function () {
6292
+ self.copySelectedCellsToClipboard = function (clipboardData) {
6293
+ var selectedData = [];
6329
6294
  var schema = self.getSchema();
6330
- var affectedCells = [];
6295
+ var firstRowAsString;
6296
+ var isNeat = true; // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy
6331
6297
 
6332
6298
  var _iterator3 = _createForOfIteratorHelper(self.selections.entries()),
6333
6299
  _step3;
@@ -6339,7 +6305,12 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6339
6305
  row = _step3$value[1];
6340
6306
 
6341
6307
  // If no cells are selected for a particular rowIndex the selections array will contain an empty element for that rowIndex.
6342
- if (!row) continue;
6308
+ if (!row) continue; // Convert to string for easy comparison to the first row.
6309
+
6310
+ var rowAsString = row.join(',').toString();
6311
+ var rowDict = {};
6312
+ if (!firstRowAsString) firstRowAsString = row.join(',').toString();
6313
+ if (isNeat && rowAsString !== firstRowAsString) isNeat = false;
6343
6314
  var boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);
6344
6315
 
6345
6316
  var _iterator4 = _createForOfIteratorHelper(row),
@@ -6352,14 +6323,16 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6352
6323
  if (columnIndex < 0) continue;
6353
6324
  var boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(columnIndex);
6354
6325
  var columnName = schema[boundColumnIndex].name;
6355
- self.viewData[boundRowIndex][columnName] = null;
6356
- affectedCells.push([rowIndex, columnIndex, boundRowIndex, boundColumnIndex]);
6326
+ var value = self.originalData[boundRowIndex][columnName];
6327
+ rowDict[columnName] = value;
6357
6328
  }
6358
6329
  } catch (err) {
6359
6330
  _iterator4.e(err);
6360
6331
  } finally {
6361
6332
  _iterator4.f();
6362
6333
  }
6334
+
6335
+ selectedData.push(rowDict);
6363
6336
  }
6364
6337
  } catch (err) {
6365
6338
  _iterator3.e(err);
@@ -6367,6 +6340,68 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6367
6340
  _iterator3.f();
6368
6341
  }
6369
6342
 
6343
+ if (selectedData.length > 0) {
6344
+ var textString = (0,_events_util__WEBPACK_IMPORTED_MODULE_0__.createTextString)(selectedData, isNeat);
6345
+ var htmlString = (0,_events_util__WEBPACK_IMPORTED_MODULE_0__.createHTMLString)(selectedData, isNeat);
6346
+ var copiedData = {
6347
+ 'text/plain': textString,
6348
+ 'text/html': htmlString,
6349
+ 'text/csv': textString,
6350
+ 'application/json': JSON.stringify(selectedData)
6351
+ };
6352
+
6353
+ for (var _i2 = 0, _Object$entries = Object.entries(copiedData); _i2 < _Object$entries.length; _i2++) {
6354
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
6355
+ mimeType = _Object$entries$_i[0],
6356
+ data = _Object$entries$_i[1];
6357
+
6358
+ clipboardData.setData(mimeType, data);
6359
+ }
6360
+ }
6361
+ };
6362
+
6363
+ self.clearSelectedCells = function () {
6364
+ var schema = self.getSchema();
6365
+ var affectedCells = [];
6366
+
6367
+ var _iterator5 = _createForOfIteratorHelper(self.selections.entries()),
6368
+ _step5;
6369
+
6370
+ try {
6371
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
6372
+ var _step5$value = _slicedToArray(_step5.value, 2),
6373
+ rowIndex = _step5$value[0],
6374
+ row = _step5$value[1];
6375
+
6376
+ // If no cells are selected for a particular rowIndex the selections array will contain an empty element for that rowIndex.
6377
+ if (!row) continue;
6378
+ var boundRowIndex = self.getBoundRowIndexFromViewRowIndex(rowIndex);
6379
+
6380
+ var _iterator6 = _createForOfIteratorHelper(row),
6381
+ _step6;
6382
+
6383
+ try {
6384
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
6385
+ var columnIndex = _step6.value;
6386
+ // If the whole row is selected the columnIndex for the rowHeader is -1.
6387
+ if (columnIndex < 0) continue;
6388
+ var boundColumnIndex = self.getBoundColumnIndexFromViewColumnIndex(columnIndex);
6389
+ var columnName = schema[boundColumnIndex].name;
6390
+ self.viewData[boundRowIndex][columnName] = '';
6391
+ affectedCells.push([rowIndex, columnIndex, boundRowIndex, boundColumnIndex]);
6392
+ }
6393
+ } catch (err) {
6394
+ _iterator6.e(err);
6395
+ } finally {
6396
+ _iterator6.f();
6397
+ }
6398
+ }
6399
+ } catch (err) {
6400
+ _iterator5.e(err);
6401
+ } finally {
6402
+ _iterator5.f();
6403
+ }
6404
+
6370
6405
  return affectedCells;
6371
6406
  };
6372
6407
 
@@ -6446,6 +6481,39 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6446
6481
  self.orders.rows = fillArray(0, self.originalData.length - 1);
6447
6482
  };
6448
6483
 
6484
+ self.fitSelectedColumns = function (width) {
6485
+ var selectedColumns = self.selections[0];
6486
+ var schema = self.getSchema();
6487
+
6488
+ var _iterator7 = _createForOfIteratorHelper(selectedColumns),
6489
+ _step7;
6490
+
6491
+ try {
6492
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
6493
+ var selectedColumn = _step7.value;
6494
+
6495
+ // Make sure the column is not the row header and that the whole column has in fact been selected.
6496
+ if (selectedColumn >= 0 && self.isColumnSelected(selectedColumn)) {
6497
+ if (isNaN(width)) {
6498
+ var column = schema[self.orders.columns[selectedColumn]];
6499
+ self.fitColumnToValues(column.name);
6500
+ } else {
6501
+ self.sizes.columns[selectedColumn] = width;
6502
+ self.dispatchEvent('resizecolumn', {
6503
+ x: width,
6504
+ y: self.resizingStartingHeight,
6505
+ draggingItem: self.currentCell
6506
+ });
6507
+ }
6508
+ }
6509
+ }
6510
+ } catch (err) {
6511
+ _iterator7.e(err);
6512
+ } finally {
6513
+ _iterator7.f();
6514
+ }
6515
+ };
6516
+
6449
6517
  self.getVisibleSchema = function () {
6450
6518
  return self.getSchema().filter(function (col) {
6451
6519
  return !col.hidden;
@@ -6512,9 +6580,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6512
6580
  }); // Apply filtering
6513
6581
 
6514
6582
  var _loop = function _loop() {
6515
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
6516
- headerName = _Object$entries$_i[0],
6517
- filterText = _Object$entries$_i[1];
6583
+ var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i3], 2),
6584
+ headerName = _Object$entries2$_i[0],
6585
+ filterText = _Object$entries2$_i[1];
6518
6586
 
6519
6587
  var header = self.getHeaderByName(headerName);
6520
6588
 
@@ -6533,19 +6601,19 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6533
6601
  });
6534
6602
  };
6535
6603
 
6536
- for (var _i2 = 0, _Object$entries = Object.entries(self.columnFilters); _i2 < _Object$entries.length; _i2++) {
6604
+ for (var _i3 = 0, _Object$entries2 = Object.entries(self.columnFilters); _i3 < _Object$entries2.length; _i3++) {
6537
6605
  var _ret = _loop();
6538
6606
 
6539
6607
  if (_ret === "continue") continue;
6540
6608
  } // Apply sorting
6541
6609
 
6542
6610
 
6543
- var _iterator5 = _createForOfIteratorHelper(self.orderings.columns),
6544
- _step5;
6611
+ var _iterator8 = _createForOfIteratorHelper(self.orderings.columns),
6612
+ _step8;
6545
6613
 
6546
6614
  try {
6547
6615
  var _loop2 = function _loop2() {
6548
- var column = _step5.value;
6616
+ var column = _step8.value;
6549
6617
  var sortFn = column.sortFunction(column.orderBy, column.orderDirection);
6550
6618
  newViewData.sort(function (_ref7, _ref8) {
6551
6619
  var _ref9 = _slicedToArray(_ref7, 1),
@@ -6560,13 +6628,13 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
6560
6628
  });
6561
6629
  };
6562
6630
 
6563
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
6631
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
6564
6632
  _loop2();
6565
6633
  }
6566
6634
  } catch (err) {
6567
- _iterator5.e(err);
6635
+ _iterator8.e(err);
6568
6636
  } finally {
6569
- _iterator5.f();
6637
+ _iterator8.f();
6570
6638
  }
6571
6639
 
6572
6640
  return {
@@ -8411,9 +8479,16 @@ __webpack_require__.r(__webpack_exports__);
8411
8479
 
8412
8480
 
8413
8481
  self.scrollIntoView = function (x, y, offsetX, offsetY) {
8414
- if (self.visibleCells.filter(function (cell) {
8482
+ var matched = self.visibleCells.filter(function (cell) {
8415
8483
  return (cell.rowIndex === y || y === undefined) && (cell.columnIndex === x || x === undefined) && cell.x > 0 && cell.y > 0 && cell.x + cell.width < self.width && cell.y + cell.height < self.height;
8416
- }).length === 0) {
8484
+ });
8485
+
8486
+ if (matched.length === 1 && x !== undefined && y !== undefined) {
8487
+ // goto specific cell and its part be hidden by header
8488
+ if (matched[0].x < self.getRowHeaderCellWidth() || matched[0].y < self.getColumnHeaderCellHeight()) matched.length = 0;
8489
+ }
8490
+
8491
+ if (matched.length === 0) {
8417
8492
  self.gotoCell(x, y, offsetX, offsetY);
8418
8493
  }
8419
8494
  };