handsontable 0.0.0-next-820d8a2-20221122 → 0.0.0-next-6812ce6-20221122
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of handsontable might be problematic. Click here for more details.
- package/3rdparty/walkontable/src/cell/range.js +8 -0
- package/3rdparty/walkontable/src/cell/range.mjs +8 -0
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.d.ts +1 -1
- package/core.js +37 -29
- package/core.mjs +37 -29
- package/dist/handsontable.css +2 -2
- package/dist/handsontable.full.css +2 -2
- package/dist/handsontable.full.js +3135 -2444
- package/dist/handsontable.full.min.css +2 -2
- package/dist/handsontable.full.min.js +62 -62
- package/dist/handsontable.js +2563 -1872
- package/dist/handsontable.min.css +2 -2
- package/dist/handsontable.min.js +3 -3
- package/dist/languages/all.js +1 -1
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/en-US.js +1 -1
- package/dist/languages/en-US.min.js +1 -1
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/i18n/constants.js +49 -42
- package/i18n/constants.mjs +45 -41
- package/i18n/languages/en-US.js +1 -1
- package/i18n/languages/en-US.mjs +1 -1
- package/languages/all.js +1 -1
- package/languages/en-US.js +1 -1
- package/languages/en-US.mjs +1 -1
- package/languages/index.js +1 -1
- package/package.json +1 -1
- package/pluginHooks.d.ts +7 -2
- package/pluginHooks.js +23 -3
- package/pluginHooks.mjs +23 -3
- package/plugins/contextMenu/contextMenu.d.ts +4 -3
- package/plugins/copyPaste/contextMenuItem/copy.js +4 -16
- package/plugins/copyPaste/contextMenuItem/copy.mjs +4 -4
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +35 -0
- package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +31 -0
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +35 -0
- package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +31 -0
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +35 -0
- package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +31 -0
- package/plugins/copyPaste/copyPaste.d.ts +10 -2
- package/plugins/copyPaste/copyPaste.js +263 -173
- package/plugins/copyPaste/copyPaste.mjs +263 -173
- package/plugins/copyPaste/copyableRanges.js +260 -0
- package/plugins/copyPaste/copyableRanges.mjs +255 -0
- package/plugins/nestedHeaders/nestedHeaders.js +114 -11
- package/plugins/nestedHeaders/nestedHeaders.mjs +114 -11
- package/plugins/nestedHeaders/stateManager/headersTree.js +1 -0
- package/plugins/nestedHeaders/stateManager/headersTree.mjs +1 -0
- package/plugins/nestedHeaders/stateManager/index.js +21 -10
- package/plugins/nestedHeaders/stateManager/index.mjs +21 -10
- package/selection/selection.js +2 -1
- package/selection/selection.mjs +2 -1
- package/tableView.js +133 -63
- package/tableView.mjs +133 -63
@@ -0,0 +1,260 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
exports.__esModule = true;
|
4
|
+
exports.CopyableRangesFactory = void 0;
|
5
|
+
exports.normalizeRanges = normalizeRanges;
|
6
|
+
require("core-js/modules/es.array.index-of.js");
|
7
|
+
require("core-js/modules/es.array.iterator.js");
|
8
|
+
require("core-js/modules/es.object.to-string.js");
|
9
|
+
require("core-js/modules/es.string.iterator.js");
|
10
|
+
require("core-js/modules/es.weak-map.js");
|
11
|
+
require("core-js/modules/web.dom-collections.iterator.js");
|
12
|
+
require("core-js/modules/es.weak-set.js");
|
13
|
+
var _array = require("../../helpers/array");
|
14
|
+
var _number = require("../../helpers/number");
|
15
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
16
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
17
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
18
|
+
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
19
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
20
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
21
|
+
function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
|
22
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
23
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
24
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
25
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
26
|
+
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
27
|
+
var _selectedRange = /*#__PURE__*/new WeakMap();
|
28
|
+
var _countRows = /*#__PURE__*/new WeakMap();
|
29
|
+
var _countColumns = /*#__PURE__*/new WeakMap();
|
30
|
+
var _rowsLimit = /*#__PURE__*/new WeakMap();
|
31
|
+
var _columnsLimit = /*#__PURE__*/new WeakMap();
|
32
|
+
var _countColumnHeaders = /*#__PURE__*/new WeakMap();
|
33
|
+
var _trimColumnsRange = /*#__PURE__*/new WeakSet();
|
34
|
+
var _trimRowsRange = /*#__PURE__*/new WeakSet();
|
35
|
+
/**
|
36
|
+
* The utils class produces the selection ranges in the `{startRow, startCol, endRow, endCol}` format
|
37
|
+
* based on the current table selection. The CopyPaste plugin consumes that ranges to generate
|
38
|
+
* appropriate data ready to copy to the clipboard.
|
39
|
+
*
|
40
|
+
* @private
|
41
|
+
*/
|
42
|
+
var CopyableRangesFactory = /*#__PURE__*/function () {
|
43
|
+
/**
|
44
|
+
* @type {CellRange}
|
45
|
+
*/
|
46
|
+
|
47
|
+
/**
|
48
|
+
* @type {function(): number}
|
49
|
+
*/
|
50
|
+
|
51
|
+
/**
|
52
|
+
* @type {function(): number}
|
53
|
+
*/
|
54
|
+
|
55
|
+
/**
|
56
|
+
* @type {function(): number}
|
57
|
+
*/
|
58
|
+
|
59
|
+
/**
|
60
|
+
* @type {function(): number}
|
61
|
+
*/
|
62
|
+
|
63
|
+
/**
|
64
|
+
* @type {function(): number}
|
65
|
+
*/
|
66
|
+
|
67
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
68
|
+
/**
|
69
|
+
* @param {{
|
70
|
+
* countRows: function(): number,
|
71
|
+
* countColumns: function(): number,
|
72
|
+
* rowsLimit: function(): number,
|
73
|
+
* columnsLimit: function(): number,
|
74
|
+
* countColumnHeaders: function(): number
|
75
|
+
* }} dependencies The utils class dependencies.
|
76
|
+
*/
|
77
|
+
function CopyableRangesFactory(_ref) {
|
78
|
+
var countRows = _ref.countRows,
|
79
|
+
countColumns = _ref.countColumns,
|
80
|
+
rowsLimit = _ref.rowsLimit,
|
81
|
+
columnsLimit = _ref.columnsLimit,
|
82
|
+
countColumnHeaders = _ref.countColumnHeaders;
|
83
|
+
_classCallCheck(this, CopyableRangesFactory);
|
84
|
+
_classPrivateMethodInitSpec(this, _trimRowsRange);
|
85
|
+
_classPrivateMethodInitSpec(this, _trimColumnsRange);
|
86
|
+
_classPrivateFieldInitSpec(this, _selectedRange, {
|
87
|
+
writable: true,
|
88
|
+
value: void 0
|
89
|
+
});
|
90
|
+
_classPrivateFieldInitSpec(this, _countRows, {
|
91
|
+
writable: true,
|
92
|
+
value: void 0
|
93
|
+
});
|
94
|
+
_classPrivateFieldInitSpec(this, _countColumns, {
|
95
|
+
writable: true,
|
96
|
+
value: void 0
|
97
|
+
});
|
98
|
+
_classPrivateFieldInitSpec(this, _rowsLimit, {
|
99
|
+
writable: true,
|
100
|
+
value: void 0
|
101
|
+
});
|
102
|
+
_classPrivateFieldInitSpec(this, _columnsLimit, {
|
103
|
+
writable: true,
|
104
|
+
value: void 0
|
105
|
+
});
|
106
|
+
_classPrivateFieldInitSpec(this, _countColumnHeaders, {
|
107
|
+
writable: true,
|
108
|
+
value: void 0
|
109
|
+
});
|
110
|
+
_classPrivateFieldSet(this, _countRows, countRows);
|
111
|
+
_classPrivateFieldSet(this, _countColumns, countColumns);
|
112
|
+
_classPrivateFieldSet(this, _rowsLimit, rowsLimit);
|
113
|
+
_classPrivateFieldSet(this, _columnsLimit, columnsLimit);
|
114
|
+
_classPrivateFieldSet(this, _countColumnHeaders, countColumnHeaders);
|
115
|
+
}
|
116
|
+
/* eslint-enable jsdoc/require-description-complete-sentence */
|
117
|
+
|
118
|
+
/**
|
119
|
+
* Sets the selection range to be processed.
|
120
|
+
*
|
121
|
+
* @param {CellRange} selectedRange The selection range represented by the CellRange class.
|
122
|
+
*/
|
123
|
+
_createClass(CopyableRangesFactory, [{
|
124
|
+
key: "setSelectedRange",
|
125
|
+
value: function setSelectedRange(selectedRange) {
|
126
|
+
_classPrivateFieldSet(this, _selectedRange, selectedRange);
|
127
|
+
}
|
128
|
+
|
129
|
+
/**
|
130
|
+
* Returns a new coords object within the dataset range (cells) with `startRow`, `startCol`, `endRow`
|
131
|
+
* and `endCol` keys.
|
132
|
+
*
|
133
|
+
* @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}
|
134
|
+
*/
|
135
|
+
}, {
|
136
|
+
key: "getCellsRange",
|
137
|
+
value: function getCellsRange() {
|
138
|
+
if (_classPrivateFieldGet(this, _countRows).call(this) === 0 || _classPrivateFieldGet(this, _countColumns).call(this) === 0) {
|
139
|
+
return null;
|
140
|
+
}
|
141
|
+
var _classPrivateFieldGet2 = _classPrivateFieldGet(this, _selectedRange).getTopStartCorner(),
|
142
|
+
startRow = _classPrivateFieldGet2.row,
|
143
|
+
startCol = _classPrivateFieldGet2.col;
|
144
|
+
var _classPrivateFieldGet3 = _classPrivateFieldGet(this, _selectedRange).getBottomEndCorner(),
|
145
|
+
endRow = _classPrivateFieldGet3.row,
|
146
|
+
endCol = _classPrivateFieldGet3.col;
|
147
|
+
var finalEndRow = _classPrivateMethodGet(this, _trimRowsRange, _trimRowsRange2).call(this, startRow, endRow);
|
148
|
+
var finalEndCol = _classPrivateMethodGet(this, _trimColumnsRange, _trimColumnsRange2).call(this, startCol, endCol);
|
149
|
+
var isRangeTrimmed = endRow !== finalEndRow || endCol !== finalEndCol;
|
150
|
+
return {
|
151
|
+
isRangeTrimmed: isRangeTrimmed,
|
152
|
+
startRow: startRow,
|
153
|
+
startCol: startCol,
|
154
|
+
endRow: finalEndRow,
|
155
|
+
endCol: finalEndCol
|
156
|
+
};
|
157
|
+
}
|
158
|
+
|
159
|
+
/**
|
160
|
+
* Returns a new coords object within the most-bottom column headers range with `startRow`,
|
161
|
+
* `startCol`, `endRow` and `endCol` keys.
|
162
|
+
*
|
163
|
+
* @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}
|
164
|
+
*/
|
165
|
+
}, {
|
166
|
+
key: "getMostBottomColumnHeadersRange",
|
167
|
+
value: function getMostBottomColumnHeadersRange() {
|
168
|
+
if (_classPrivateFieldGet(this, _countColumns).call(this) === 0 || _classPrivateFieldGet(this, _countColumnHeaders).call(this) === 0) {
|
169
|
+
return null;
|
170
|
+
}
|
171
|
+
var _classPrivateFieldGet4 = _classPrivateFieldGet(this, _selectedRange).getTopStartCorner(),
|
172
|
+
startCol = _classPrivateFieldGet4.col;
|
173
|
+
var _classPrivateFieldGet5 = _classPrivateFieldGet(this, _selectedRange).getBottomEndCorner(),
|
174
|
+
endCol = _classPrivateFieldGet5.col;
|
175
|
+
var finalEndCol = _classPrivateMethodGet(this, _trimColumnsRange, _trimColumnsRange2).call(this, startCol, endCol);
|
176
|
+
var isRangeTrimmed = endCol !== finalEndCol;
|
177
|
+
return {
|
178
|
+
isRangeTrimmed: isRangeTrimmed,
|
179
|
+
startRow: -1,
|
180
|
+
startCol: startCol,
|
181
|
+
endRow: -1,
|
182
|
+
endCol: finalEndCol
|
183
|
+
};
|
184
|
+
}
|
185
|
+
|
186
|
+
/**
|
187
|
+
* Returns a new coords object within all column headers layers (including nested headers) range with
|
188
|
+
* `startRow`, `startCol`, `endRow` and `endCol` keys.
|
189
|
+
*
|
190
|
+
* @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}
|
191
|
+
*/
|
192
|
+
}, {
|
193
|
+
key: "getAllColumnHeadersRange",
|
194
|
+
value: function getAllColumnHeadersRange() {
|
195
|
+
if (_classPrivateFieldGet(this, _countColumns).call(this) === 0 || _classPrivateFieldGet(this, _countColumnHeaders).call(this) === 0) {
|
196
|
+
return null;
|
197
|
+
}
|
198
|
+
var _classPrivateFieldGet6 = _classPrivateFieldGet(this, _selectedRange).getTopStartCorner(),
|
199
|
+
startCol = _classPrivateFieldGet6.col;
|
200
|
+
var _classPrivateFieldGet7 = _classPrivateFieldGet(this, _selectedRange).getBottomEndCorner(),
|
201
|
+
endCol = _classPrivateFieldGet7.col;
|
202
|
+
var finalEndCol = _classPrivateMethodGet(this, _trimColumnsRange, _trimColumnsRange2).call(this, startCol, endCol);
|
203
|
+
var isRangeTrimmed = endCol !== finalEndCol;
|
204
|
+
return {
|
205
|
+
isRangeTrimmed: isRangeTrimmed,
|
206
|
+
startRow: -_classPrivateFieldGet(this, _countColumnHeaders).call(this),
|
207
|
+
startCol: startCol,
|
208
|
+
endRow: -1,
|
209
|
+
endCol: finalEndCol
|
210
|
+
};
|
211
|
+
}
|
212
|
+
|
213
|
+
/**
|
214
|
+
* Trimmed the columns range to the limit.
|
215
|
+
*
|
216
|
+
* @param {*} startColumn The lowest column index in the range.
|
217
|
+
* @param {*} endColumn The highest column index in the range.
|
218
|
+
* @returns {number} Returns trimmed column index if it exceeds the limit.
|
219
|
+
*/
|
220
|
+
}]);
|
221
|
+
return CopyableRangesFactory;
|
222
|
+
}();
|
223
|
+
/**
|
224
|
+
* Returns an object with `rows` and `columns` keys. The arrays contains sorted indexes
|
225
|
+
* generated according to the given `ranges` array.
|
226
|
+
*
|
227
|
+
* @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges The range to process.
|
228
|
+
* @returns {{rows: number[], columns: number[]}}
|
229
|
+
*/
|
230
|
+
exports.CopyableRangesFactory = CopyableRangesFactory;
|
231
|
+
function _trimColumnsRange2(startColumn, endColumn) {
|
232
|
+
return Math.min(endColumn, Math.max(startColumn + _classPrivateFieldGet(this, _columnsLimit).call(this) - 1, startColumn));
|
233
|
+
}
|
234
|
+
function _trimRowsRange2(startRow, endRow) {
|
235
|
+
return Math.min(endRow, Math.max(startRow + _classPrivateFieldGet(this, _rowsLimit).call(this) - 1, startRow));
|
236
|
+
}
|
237
|
+
function normalizeRanges(ranges) {
|
238
|
+
var rows = [];
|
239
|
+
var columns = [];
|
240
|
+
(0, _array.arrayEach)(ranges, function (range) {
|
241
|
+
var minRow = Math.min(range.startRow, range.endRow);
|
242
|
+
var maxRow = Math.max(range.startRow, range.endRow);
|
243
|
+
(0, _number.rangeEach)(minRow, maxRow, function (row) {
|
244
|
+
if (rows.indexOf(row) === -1) {
|
245
|
+
rows.push(row);
|
246
|
+
}
|
247
|
+
});
|
248
|
+
var minColumn = Math.min(range.startCol, range.endCol);
|
249
|
+
var maxColumn = Math.max(range.startCol, range.endCol);
|
250
|
+
(0, _number.rangeEach)(minColumn, maxColumn, function (column) {
|
251
|
+
if (columns.indexOf(column) === -1) {
|
252
|
+
columns.push(column);
|
253
|
+
}
|
254
|
+
});
|
255
|
+
});
|
256
|
+
return {
|
257
|
+
rows: rows,
|
258
|
+
columns: columns
|
259
|
+
};
|
260
|
+
}
|
@@ -0,0 +1,255 @@
|
|
1
|
+
import "core-js/modules/es.array.index-of.js";
|
2
|
+
import "core-js/modules/es.array.iterator.js";
|
3
|
+
import "core-js/modules/es.object.to-string.js";
|
4
|
+
import "core-js/modules/es.string.iterator.js";
|
5
|
+
import "core-js/modules/es.weak-map.js";
|
6
|
+
import "core-js/modules/web.dom-collections.iterator.js";
|
7
|
+
import "core-js/modules/es.weak-set.js";
|
8
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
9
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
10
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
11
|
+
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
12
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
13
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
14
|
+
function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
|
15
|
+
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
16
|
+
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
17
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
18
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
19
|
+
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
|
20
|
+
import { arrayEach } from "../../helpers/array.mjs";
|
21
|
+
import { rangeEach } from "../../helpers/number.mjs";
|
22
|
+
/**
|
23
|
+
* The utils class produces the selection ranges in the `{startRow, startCol, endRow, endCol}` format
|
24
|
+
* based on the current table selection. The CopyPaste plugin consumes that ranges to generate
|
25
|
+
* appropriate data ready to copy to the clipboard.
|
26
|
+
*
|
27
|
+
* @private
|
28
|
+
*/
|
29
|
+
var _selectedRange = /*#__PURE__*/new WeakMap();
|
30
|
+
var _countRows = /*#__PURE__*/new WeakMap();
|
31
|
+
var _countColumns = /*#__PURE__*/new WeakMap();
|
32
|
+
var _rowsLimit = /*#__PURE__*/new WeakMap();
|
33
|
+
var _columnsLimit = /*#__PURE__*/new WeakMap();
|
34
|
+
var _countColumnHeaders = /*#__PURE__*/new WeakMap();
|
35
|
+
var _trimColumnsRange = /*#__PURE__*/new WeakSet();
|
36
|
+
var _trimRowsRange = /*#__PURE__*/new WeakSet();
|
37
|
+
export var CopyableRangesFactory = /*#__PURE__*/function () {
|
38
|
+
/**
|
39
|
+
* @type {CellRange}
|
40
|
+
*/
|
41
|
+
|
42
|
+
/**
|
43
|
+
* @type {function(): number}
|
44
|
+
*/
|
45
|
+
|
46
|
+
/**
|
47
|
+
* @type {function(): number}
|
48
|
+
*/
|
49
|
+
|
50
|
+
/**
|
51
|
+
* @type {function(): number}
|
52
|
+
*/
|
53
|
+
|
54
|
+
/**
|
55
|
+
* @type {function(): number}
|
56
|
+
*/
|
57
|
+
|
58
|
+
/**
|
59
|
+
* @type {function(): number}
|
60
|
+
*/
|
61
|
+
|
62
|
+
/* eslint-disable jsdoc/require-description-complete-sentence */
|
63
|
+
/**
|
64
|
+
* @param {{
|
65
|
+
* countRows: function(): number,
|
66
|
+
* countColumns: function(): number,
|
67
|
+
* rowsLimit: function(): number,
|
68
|
+
* columnsLimit: function(): number,
|
69
|
+
* countColumnHeaders: function(): number
|
70
|
+
* }} dependencies The utils class dependencies.
|
71
|
+
*/
|
72
|
+
function CopyableRangesFactory(_ref) {
|
73
|
+
var countRows = _ref.countRows,
|
74
|
+
countColumns = _ref.countColumns,
|
75
|
+
rowsLimit = _ref.rowsLimit,
|
76
|
+
columnsLimit = _ref.columnsLimit,
|
77
|
+
countColumnHeaders = _ref.countColumnHeaders;
|
78
|
+
_classCallCheck(this, CopyableRangesFactory);
|
79
|
+
_classPrivateMethodInitSpec(this, _trimRowsRange);
|
80
|
+
_classPrivateMethodInitSpec(this, _trimColumnsRange);
|
81
|
+
_classPrivateFieldInitSpec(this, _selectedRange, {
|
82
|
+
writable: true,
|
83
|
+
value: void 0
|
84
|
+
});
|
85
|
+
_classPrivateFieldInitSpec(this, _countRows, {
|
86
|
+
writable: true,
|
87
|
+
value: void 0
|
88
|
+
});
|
89
|
+
_classPrivateFieldInitSpec(this, _countColumns, {
|
90
|
+
writable: true,
|
91
|
+
value: void 0
|
92
|
+
});
|
93
|
+
_classPrivateFieldInitSpec(this, _rowsLimit, {
|
94
|
+
writable: true,
|
95
|
+
value: void 0
|
96
|
+
});
|
97
|
+
_classPrivateFieldInitSpec(this, _columnsLimit, {
|
98
|
+
writable: true,
|
99
|
+
value: void 0
|
100
|
+
});
|
101
|
+
_classPrivateFieldInitSpec(this, _countColumnHeaders, {
|
102
|
+
writable: true,
|
103
|
+
value: void 0
|
104
|
+
});
|
105
|
+
_classPrivateFieldSet(this, _countRows, countRows);
|
106
|
+
_classPrivateFieldSet(this, _countColumns, countColumns);
|
107
|
+
_classPrivateFieldSet(this, _rowsLimit, rowsLimit);
|
108
|
+
_classPrivateFieldSet(this, _columnsLimit, columnsLimit);
|
109
|
+
_classPrivateFieldSet(this, _countColumnHeaders, countColumnHeaders);
|
110
|
+
}
|
111
|
+
/* eslint-enable jsdoc/require-description-complete-sentence */
|
112
|
+
|
113
|
+
/**
|
114
|
+
* Sets the selection range to be processed.
|
115
|
+
*
|
116
|
+
* @param {CellRange} selectedRange The selection range represented by the CellRange class.
|
117
|
+
*/
|
118
|
+
_createClass(CopyableRangesFactory, [{
|
119
|
+
key: "setSelectedRange",
|
120
|
+
value: function setSelectedRange(selectedRange) {
|
121
|
+
_classPrivateFieldSet(this, _selectedRange, selectedRange);
|
122
|
+
}
|
123
|
+
|
124
|
+
/**
|
125
|
+
* Returns a new coords object within the dataset range (cells) with `startRow`, `startCol`, `endRow`
|
126
|
+
* and `endCol` keys.
|
127
|
+
*
|
128
|
+
* @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}
|
129
|
+
*/
|
130
|
+
}, {
|
131
|
+
key: "getCellsRange",
|
132
|
+
value: function getCellsRange() {
|
133
|
+
if (_classPrivateFieldGet(this, _countRows).call(this) === 0 || _classPrivateFieldGet(this, _countColumns).call(this) === 0) {
|
134
|
+
return null;
|
135
|
+
}
|
136
|
+
var _classPrivateFieldGet2 = _classPrivateFieldGet(this, _selectedRange).getTopStartCorner(),
|
137
|
+
startRow = _classPrivateFieldGet2.row,
|
138
|
+
startCol = _classPrivateFieldGet2.col;
|
139
|
+
var _classPrivateFieldGet3 = _classPrivateFieldGet(this, _selectedRange).getBottomEndCorner(),
|
140
|
+
endRow = _classPrivateFieldGet3.row,
|
141
|
+
endCol = _classPrivateFieldGet3.col;
|
142
|
+
var finalEndRow = _classPrivateMethodGet(this, _trimRowsRange, _trimRowsRange2).call(this, startRow, endRow);
|
143
|
+
var finalEndCol = _classPrivateMethodGet(this, _trimColumnsRange, _trimColumnsRange2).call(this, startCol, endCol);
|
144
|
+
var isRangeTrimmed = endRow !== finalEndRow || endCol !== finalEndCol;
|
145
|
+
return {
|
146
|
+
isRangeTrimmed: isRangeTrimmed,
|
147
|
+
startRow: startRow,
|
148
|
+
startCol: startCol,
|
149
|
+
endRow: finalEndRow,
|
150
|
+
endCol: finalEndCol
|
151
|
+
};
|
152
|
+
}
|
153
|
+
|
154
|
+
/**
|
155
|
+
* Returns a new coords object within the most-bottom column headers range with `startRow`,
|
156
|
+
* `startCol`, `endRow` and `endCol` keys.
|
157
|
+
*
|
158
|
+
* @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}
|
159
|
+
*/
|
160
|
+
}, {
|
161
|
+
key: "getMostBottomColumnHeadersRange",
|
162
|
+
value: function getMostBottomColumnHeadersRange() {
|
163
|
+
if (_classPrivateFieldGet(this, _countColumns).call(this) === 0 || _classPrivateFieldGet(this, _countColumnHeaders).call(this) === 0) {
|
164
|
+
return null;
|
165
|
+
}
|
166
|
+
var _classPrivateFieldGet4 = _classPrivateFieldGet(this, _selectedRange).getTopStartCorner(),
|
167
|
+
startCol = _classPrivateFieldGet4.col;
|
168
|
+
var _classPrivateFieldGet5 = _classPrivateFieldGet(this, _selectedRange).getBottomEndCorner(),
|
169
|
+
endCol = _classPrivateFieldGet5.col;
|
170
|
+
var finalEndCol = _classPrivateMethodGet(this, _trimColumnsRange, _trimColumnsRange2).call(this, startCol, endCol);
|
171
|
+
var isRangeTrimmed = endCol !== finalEndCol;
|
172
|
+
return {
|
173
|
+
isRangeTrimmed: isRangeTrimmed,
|
174
|
+
startRow: -1,
|
175
|
+
startCol: startCol,
|
176
|
+
endRow: -1,
|
177
|
+
endCol: finalEndCol
|
178
|
+
};
|
179
|
+
}
|
180
|
+
|
181
|
+
/**
|
182
|
+
* Returns a new coords object within all column headers layers (including nested headers) range with
|
183
|
+
* `startRow`, `startCol`, `endRow` and `endCol` keys.
|
184
|
+
*
|
185
|
+
* @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}
|
186
|
+
*/
|
187
|
+
}, {
|
188
|
+
key: "getAllColumnHeadersRange",
|
189
|
+
value: function getAllColumnHeadersRange() {
|
190
|
+
if (_classPrivateFieldGet(this, _countColumns).call(this) === 0 || _classPrivateFieldGet(this, _countColumnHeaders).call(this) === 0) {
|
191
|
+
return null;
|
192
|
+
}
|
193
|
+
var _classPrivateFieldGet6 = _classPrivateFieldGet(this, _selectedRange).getTopStartCorner(),
|
194
|
+
startCol = _classPrivateFieldGet6.col;
|
195
|
+
var _classPrivateFieldGet7 = _classPrivateFieldGet(this, _selectedRange).getBottomEndCorner(),
|
196
|
+
endCol = _classPrivateFieldGet7.col;
|
197
|
+
var finalEndCol = _classPrivateMethodGet(this, _trimColumnsRange, _trimColumnsRange2).call(this, startCol, endCol);
|
198
|
+
var isRangeTrimmed = endCol !== finalEndCol;
|
199
|
+
return {
|
200
|
+
isRangeTrimmed: isRangeTrimmed,
|
201
|
+
startRow: -_classPrivateFieldGet(this, _countColumnHeaders).call(this),
|
202
|
+
startCol: startCol,
|
203
|
+
endRow: -1,
|
204
|
+
endCol: finalEndCol
|
205
|
+
};
|
206
|
+
}
|
207
|
+
|
208
|
+
/**
|
209
|
+
* Trimmed the columns range to the limit.
|
210
|
+
*
|
211
|
+
* @param {*} startColumn The lowest column index in the range.
|
212
|
+
* @param {*} endColumn The highest column index in the range.
|
213
|
+
* @returns {number} Returns trimmed column index if it exceeds the limit.
|
214
|
+
*/
|
215
|
+
}]);
|
216
|
+
return CopyableRangesFactory;
|
217
|
+
}();
|
218
|
+
|
219
|
+
/**
|
220
|
+
* Returns an object with `rows` and `columns` keys. The arrays contains sorted indexes
|
221
|
+
* generated according to the given `ranges` array.
|
222
|
+
*
|
223
|
+
* @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges The range to process.
|
224
|
+
* @returns {{rows: number[], columns: number[]}}
|
225
|
+
*/
|
226
|
+
function _trimColumnsRange2(startColumn, endColumn) {
|
227
|
+
return Math.min(endColumn, Math.max(startColumn + _classPrivateFieldGet(this, _columnsLimit).call(this) - 1, startColumn));
|
228
|
+
}
|
229
|
+
function _trimRowsRange2(startRow, endRow) {
|
230
|
+
return Math.min(endRow, Math.max(startRow + _classPrivateFieldGet(this, _rowsLimit).call(this) - 1, startRow));
|
231
|
+
}
|
232
|
+
export function normalizeRanges(ranges) {
|
233
|
+
var rows = [];
|
234
|
+
var columns = [];
|
235
|
+
arrayEach(ranges, function (range) {
|
236
|
+
var minRow = Math.min(range.startRow, range.endRow);
|
237
|
+
var maxRow = Math.max(range.startRow, range.endRow);
|
238
|
+
rangeEach(minRow, maxRow, function (row) {
|
239
|
+
if (rows.indexOf(row) === -1) {
|
240
|
+
rows.push(row);
|
241
|
+
}
|
242
|
+
});
|
243
|
+
var minColumn = Math.min(range.startCol, range.endCol);
|
244
|
+
var maxColumn = Math.max(range.startCol, range.endCol);
|
245
|
+
rangeEach(minColumn, maxColumn, function (column) {
|
246
|
+
if (columns.indexOf(column) === -1) {
|
247
|
+
columns.push(column);
|
248
|
+
}
|
249
|
+
});
|
250
|
+
});
|
251
|
+
return {
|
252
|
+
rows: rows,
|
253
|
+
columns: columns
|
254
|
+
};
|
255
|
+
}
|