handsontable 14.1.0-next-1211447-20240205 → 14.2.0-next-4873a35-20240228
Sign up to get free protection for your applications and to get access to all the features.
- package/3rdparty/walkontable/src/core/_base.js +12 -0
- package/3rdparty/walkontable/src/core/_base.mjs +12 -0
- package/3rdparty/walkontable/src/scroll.js +131 -98
- package/3rdparty/walkontable/src/scroll.mjs +133 -100
- package/3rdparty/walkontable/src/selection/border/border.js +3 -3
- package/3rdparty/walkontable/src/selection/border/border.mjs +3 -3
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +26 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +26 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +26 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +26 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +20 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +20 -0
- package/3rdparty/walkontable/src/table.js +2 -0
- package/3rdparty/walkontable/src/table.mjs +2 -0
- package/3rdparty/walkontable/src/viewport.js +9 -0
- package/3rdparty/walkontable/src/viewport.mjs +10 -1
- package/CHANGELOG.md +38 -0
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core/index.js +6 -0
- package/core/index.mjs +2 -1
- package/core/viewportScroll/index.js +65 -0
- package/core/viewportScroll/index.mjs +61 -0
- package/core/viewportScroll/scrollStrategies/columnHeaderScroll.js +20 -0
- package/core/viewportScroll/scrollStrategies/columnHeaderScroll.mjs +16 -0
- package/core/viewportScroll/scrollStrategies/cornerHeaderScroll.js +14 -0
- package/core/viewportScroll/scrollStrategies/cornerHeaderScroll.mjs +10 -0
- package/core/viewportScroll/scrollStrategies/multipleScroll.js +15 -0
- package/core/viewportScroll/scrollStrategies/multipleScroll.mjs +11 -0
- package/core/viewportScroll/scrollStrategies/noncontiguousScroll.js +15 -0
- package/core/viewportScroll/scrollStrategies/noncontiguousScroll.mjs +11 -0
- package/core/viewportScroll/scrollStrategies/rowHeaderScroll.js +20 -0
- package/core/viewportScroll/scrollStrategies/rowHeaderScroll.mjs +16 -0
- package/core/viewportScroll/scrollStrategies/singleScroll.js +46 -0
- package/core/viewportScroll/scrollStrategies/singleScroll.mjs +42 -0
- package/core.d.ts +1 -1
- package/core.js +11 -52
- package/core.mjs +12 -53
- package/dataMap/metaManager/index.js +1 -1
- package/dataMap/metaManager/index.mjs +1 -1
- package/dataMap/metaManager/metaLayers/cellMeta.js +6 -1
- package/dataMap/metaManager/metaLayers/cellMeta.mjs +6 -1
- package/dataMap/metaManager/metaSchema.js +36 -12
- package/dataMap/metaManager/metaSchema.mjs +36 -12
- package/dist/handsontable.css +2 -2
- package/dist/handsontable.full.css +2 -2
- package/dist/handsontable.full.js +2997 -1929
- package/dist/handsontable.full.min.css +2 -2
- package/dist/handsontable.full.min.js +42 -42
- package/dist/handsontable.js +2999 -1931
- package/dist/handsontable.min.css +2 -2
- package/dist/handsontable.min.js +25 -25
- package/dist/languages/all.js +130 -25
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/hr-HR.js +167 -0
- package/dist/languages/hr-HR.min.js +1 -0
- package/editorManager.js +15 -4
- package/editorManager.mjs +15 -4
- package/editors/autocompleteEditor/autocompleteEditor.js +2 -2
- package/editors/autocompleteEditor/autocompleteEditor.mjs +2 -2
- package/editors/baseEditor/baseEditor.js +1 -1
- package/editors/baseEditor/baseEditor.mjs +1 -1
- package/editors/checkboxEditor/checkboxEditor.js +5 -4
- package/editors/checkboxEditor/checkboxEditor.mjs +5 -4
- package/editors/dateEditor/dateEditor.js +1 -1
- package/editors/dateEditor/dateEditor.mjs +1 -1
- package/editors/dropdownEditor/dropdownEditor.js +1 -1
- package/editors/dropdownEditor/dropdownEditor.mjs +1 -1
- package/editors/handsontableEditor/handsontableEditor.js +1 -1
- package/editors/handsontableEditor/handsontableEditor.mjs +1 -1
- package/editors/selectEditor/selectEditor.js +1 -1
- package/editors/selectEditor/selectEditor.mjs +1 -1
- package/editors/textEditor/textEditor.js +1 -2
- package/editors/textEditor/textEditor.mjs +1 -2
- package/editors/timeEditor/timeEditor.js +1 -1
- package/editors/timeEditor/timeEditor.mjs +1 -1
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/helpers/moves.js +86 -0
- package/helpers/moves.mjs +82 -0
- package/i18n/languages/hr-HR.js +96 -0
- package/i18n/languages/hr-HR.mjs +90 -0
- package/i18n/languages/index.js +2 -0
- package/i18n/languages/index.mjs +2 -1
- package/languages/all.js +130 -25
- package/languages/hr-HR.js +167 -0
- package/languages/hr-HR.mjs +92 -0
- package/languages/index.js +130 -25
- package/languages/index.mjs +2 -1
- package/package.json +11 -1
- package/pluginHooks.d.ts +4 -2
- package/pluginHooks.js +33 -3
- package/pluginHooks.mjs +33 -3
- package/plugins/autoColumnSize/autoColumnSize.js +6 -1
- package/plugins/autoColumnSize/autoColumnSize.mjs +6 -1
- package/plugins/autoRowSize/autoRowSize.js +5 -0
- package/plugins/autoRowSize/autoRowSize.mjs +5 -0
- package/plugins/autofill/autofill.js +3 -2
- package/plugins/autofill/autofill.mjs +3 -2
- package/plugins/columnSummary/columnSummary.js +1 -1
- package/plugins/columnSummary/columnSummary.mjs +1 -1
- package/plugins/dropdownMenu/dropdownMenu.js +58 -4
- package/plugins/dropdownMenu/dropdownMenu.mjs +58 -4
- package/plugins/filters/component/value.js +51 -5
- package/plugins/filters/component/value.mjs +51 -5
- package/plugins/filters/utils.js +1 -1
- package/plugins/filters/utils.mjs +1 -1
- package/plugins/formulas/formulas.js +10 -1
- package/plugins/formulas/formulas.mjs +10 -1
- package/plugins/formulas/indexSyncer/axisSyncer.js +3 -75
- package/plugins/formulas/indexSyncer/axisSyncer.mjs +3 -75
- package/plugins/manualColumnResize/manualColumnResize.js +3 -0
- package/plugins/manualColumnResize/manualColumnResize.mjs +3 -0
- package/plugins/mergeCells/cellsCollection.js +1 -1
- package/plugins/mergeCells/cellsCollection.mjs +1 -1
- package/plugins/mergeCells/mergeCells.js +30 -0
- package/plugins/mergeCells/mergeCells.mjs +30 -0
- package/plugins/undoRedo/undoRedo.js +61 -14
- package/plugins/undoRedo/undoRedo.mjs +61 -14
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -1
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -1
- package/renderers/baseRenderer/baseRenderer.js +1 -1
- package/renderers/baseRenderer/baseRenderer.mjs +1 -1
- package/renderers/checkboxRenderer/checkboxRenderer.js +36 -8
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +36 -8
- package/renderers/dateRenderer/dateRenderer.js +1 -1
- package/renderers/dateRenderer/dateRenderer.mjs +1 -1
- package/renderers/dropdownRenderer/dropdownRenderer.js +1 -1
- package/renderers/dropdownRenderer/dropdownRenderer.mjs +1 -1
- package/renderers/handsontableRenderer/handsontableRenderer.js +1 -1
- package/renderers/handsontableRenderer/handsontableRenderer.mjs +1 -1
- package/renderers/htmlRenderer/htmlRenderer.js +1 -1
- package/renderers/htmlRenderer/htmlRenderer.mjs +1 -1
- package/renderers/numericRenderer/index.js +2 -1
- package/renderers/numericRenderer/index.mjs +1 -1
- package/renderers/numericRenderer/numericRenderer.js +28 -13
- package/renderers/numericRenderer/numericRenderer.mjs +27 -13
- package/renderers/passwordRenderer/passwordRenderer.js +1 -1
- package/renderers/passwordRenderer/passwordRenderer.mjs +1 -1
- package/renderers/selectRenderer/selectRenderer.js +1 -1
- package/renderers/selectRenderer/selectRenderer.mjs +1 -1
- package/renderers/textRenderer/textRenderer.js +1 -1
- package/renderers/textRenderer/textRenderer.mjs +1 -1
- package/renderers/timeRenderer/timeRenderer.js +1 -1
- package/renderers/timeRenderer/timeRenderer.mjs +1 -1
- package/selection/mouseEventHandler.js +4 -0
- package/selection/mouseEventHandler.mjs +4 -0
- package/selection/selection.js +64 -5
- package/selection/selection.mjs +64 -5
- package/shortcuts/recorder.js +27 -8
- package/shortcuts/recorder.mjs +27 -8
- package/tableView.js +86 -5
- package/tableView.mjs +87 -6
- package/utils/autoResize.js +0 -1
- package/utils/autoResize.mjs +0 -1
- package/utils/ghostTable.js +6 -6
- package/utils/ghostTable.mjs +6 -6
- package/utils/parseTable.js +9 -1
- package/utils/parseTable.mjs +9 -1
package/selection/selection.js
CHANGED
@@ -21,16 +21,18 @@ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollect
|
|
21
21
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
22
22
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
23
23
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
24
|
-
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
25
|
-
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; } }
|
26
24
|
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
27
|
-
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
28
25
|
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
26
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
27
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
28
|
+
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; } }
|
29
29
|
/**
|
30
30
|
* @class Selection
|
31
31
|
* @util
|
32
32
|
*/
|
33
33
|
var _disableHeadersHighlight = /*#__PURE__*/new WeakMap();
|
34
|
+
var _selectionSource = /*#__PURE__*/new WeakMap();
|
35
|
+
var _expectedLayersCount = /*#__PURE__*/new WeakMap();
|
34
36
|
class Selection {
|
35
37
|
constructor(settings, tableProps) {
|
36
38
|
var _this = this;
|
@@ -95,6 +97,25 @@ class Selection {
|
|
95
97
|
writable: true,
|
96
98
|
value: false
|
97
99
|
});
|
100
|
+
/**
|
101
|
+
* The source of the selection. It can be one of the following values: `mouse`, `unknown` or any other string.
|
102
|
+
*
|
103
|
+
* @type {'mouse' | 'unknown' | string}
|
104
|
+
*/
|
105
|
+
_classPrivateFieldInitSpec(this, _selectionSource, {
|
106
|
+
writable: true,
|
107
|
+
value: 'unknown'
|
108
|
+
});
|
109
|
+
/**
|
110
|
+
* The number of expected layers. It is used mostly to track when the last selection layer of non-contiguous
|
111
|
+
* selection is applied, thus the viewport scroll is triggered.
|
112
|
+
*
|
113
|
+
* @param {number}
|
114
|
+
*/
|
115
|
+
_classPrivateFieldInitSpec(this, _expectedLayersCount, {
|
116
|
+
writable: true,
|
117
|
+
value: -1
|
118
|
+
});
|
98
119
|
this.settings = settings;
|
99
120
|
this.tableProps = tableProps;
|
100
121
|
this.highlight = new _highlight.default({
|
@@ -193,6 +214,41 @@ class Selection {
|
|
193
214
|
return this.selectedRange;
|
194
215
|
}
|
195
216
|
|
217
|
+
/**
|
218
|
+
* Marks the source of the selection. It can be one of the following values: `mouse`, or any other string.
|
219
|
+
*
|
220
|
+
* @param {'mouse' | 'unknown' | string} sourceName The source name.
|
221
|
+
*/
|
222
|
+
markSource(sourceName) {
|
223
|
+
_classPrivateFieldSet(this, _selectionSource, sourceName);
|
224
|
+
}
|
225
|
+
|
226
|
+
/**
|
227
|
+
* Marks end of the selection source. It restores the selection source to default value which is 'unknown'.
|
228
|
+
*/
|
229
|
+
markEndSource() {
|
230
|
+
_classPrivateFieldSet(this, _selectionSource, 'unknown');
|
231
|
+
}
|
232
|
+
|
233
|
+
/**
|
234
|
+
* Returns the source of the selection.
|
235
|
+
*
|
236
|
+
* @returns {'mouse' | 'unknown' | string}
|
237
|
+
*/
|
238
|
+
getSelectionSource() {
|
239
|
+
return _classPrivateFieldGet(this, _selectionSource);
|
240
|
+
}
|
241
|
+
|
242
|
+
/**
|
243
|
+
* Set the number of expected layers. The method is not obligatory to call. It is used mostly internally
|
244
|
+
* to determine when the last selection layer of non-contiguous is applied, thus the viewport scroll is triggered.
|
245
|
+
*
|
246
|
+
* @param {number} layersCount The number of expected layers.
|
247
|
+
*/
|
248
|
+
setExpectedLayers(layersCount) {
|
249
|
+
_classPrivateFieldSet(this, _expectedLayersCount, layersCount);
|
250
|
+
}
|
251
|
+
|
196
252
|
/**
|
197
253
|
* Indicate that selection process began. It sets internally `.inProgress` property to `true`.
|
198
254
|
*/
|
@@ -206,6 +262,7 @@ class Selection {
|
|
206
262
|
finish() {
|
207
263
|
this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));
|
208
264
|
this.inProgress = false;
|
265
|
+
_classPrivateFieldSet(this, _expectedLayersCount, -1);
|
209
266
|
}
|
210
267
|
|
211
268
|
/**
|
@@ -390,7 +447,8 @@ class Selection {
|
|
390
447
|
activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
|
391
448
|
}
|
392
449
|
}
|
393
|
-
this.
|
450
|
+
const isLastLayer = _classPrivateFieldGet(this, _expectedLayersCount) === -1 || this.selectedRange.size() === _classPrivateFieldGet(this, _expectedLayersCount);
|
451
|
+
this.runLocalHooks('afterSetRangeEnd', coords, isLastLayer);
|
394
452
|
}
|
395
453
|
|
396
454
|
/**
|
@@ -708,6 +766,7 @@ class Selection {
|
|
708
766
|
});
|
709
767
|
if (isValid) {
|
710
768
|
this.clear();
|
769
|
+
this.setExpectedLayers(selectionRanges.length);
|
711
770
|
(0, _array.arrayEach)(selectionRanges, selection => {
|
712
771
|
const {
|
713
772
|
from,
|
@@ -715,8 +774,8 @@ class Selection {
|
|
715
774
|
} = selectionSchemaNormalizer(selection);
|
716
775
|
this.setRangeStartOnly(from.clone(), false);
|
717
776
|
this.setRangeEnd(to.clone());
|
718
|
-
this.finish();
|
719
777
|
});
|
778
|
+
this.finish();
|
720
779
|
}
|
721
780
|
return isValid;
|
722
781
|
}
|
package/selection/selection.mjs
CHANGED
@@ -4,11 +4,11 @@ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollect
|
|
4
4
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
5
5
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
6
6
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
7
|
-
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
8
|
-
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; } }
|
9
7
|
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
10
|
-
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
11
8
|
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
9
|
+
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
10
|
+
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
11
|
+
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; } }
|
12
12
|
import Highlight, { AREA_TYPE, HEADER_TYPE, FOCUS_TYPE } from "./highlight/highlight.mjs";
|
13
13
|
import SelectionRange from "./range.mjs";
|
14
14
|
import { createObjectPropListener, mixin } from "./../helpers/object.mjs";
|
@@ -25,6 +25,8 @@ import { A11Y_SELECTED } from "../helpers/a11y.mjs";
|
|
25
25
|
* @util
|
26
26
|
*/
|
27
27
|
var _disableHeadersHighlight = /*#__PURE__*/new WeakMap();
|
28
|
+
var _selectionSource = /*#__PURE__*/new WeakMap();
|
29
|
+
var _expectedLayersCount = /*#__PURE__*/new WeakMap();
|
28
30
|
class Selection {
|
29
31
|
constructor(settings, tableProps) {
|
30
32
|
var _this = this;
|
@@ -89,6 +91,25 @@ class Selection {
|
|
89
91
|
writable: true,
|
90
92
|
value: false
|
91
93
|
});
|
94
|
+
/**
|
95
|
+
* The source of the selection. It can be one of the following values: `mouse`, `unknown` or any other string.
|
96
|
+
*
|
97
|
+
* @type {'mouse' | 'unknown' | string}
|
98
|
+
*/
|
99
|
+
_classPrivateFieldInitSpec(this, _selectionSource, {
|
100
|
+
writable: true,
|
101
|
+
value: 'unknown'
|
102
|
+
});
|
103
|
+
/**
|
104
|
+
* The number of expected layers. It is used mostly to track when the last selection layer of non-contiguous
|
105
|
+
* selection is applied, thus the viewport scroll is triggered.
|
106
|
+
*
|
107
|
+
* @param {number}
|
108
|
+
*/
|
109
|
+
_classPrivateFieldInitSpec(this, _expectedLayersCount, {
|
110
|
+
writable: true,
|
111
|
+
value: -1
|
112
|
+
});
|
92
113
|
this.settings = settings;
|
93
114
|
this.tableProps = tableProps;
|
94
115
|
this.highlight = new Highlight({
|
@@ -187,6 +208,41 @@ class Selection {
|
|
187
208
|
return this.selectedRange;
|
188
209
|
}
|
189
210
|
|
211
|
+
/**
|
212
|
+
* Marks the source of the selection. It can be one of the following values: `mouse`, or any other string.
|
213
|
+
*
|
214
|
+
* @param {'mouse' | 'unknown' | string} sourceName The source name.
|
215
|
+
*/
|
216
|
+
markSource(sourceName) {
|
217
|
+
_classPrivateFieldSet(this, _selectionSource, sourceName);
|
218
|
+
}
|
219
|
+
|
220
|
+
/**
|
221
|
+
* Marks end of the selection source. It restores the selection source to default value which is 'unknown'.
|
222
|
+
*/
|
223
|
+
markEndSource() {
|
224
|
+
_classPrivateFieldSet(this, _selectionSource, 'unknown');
|
225
|
+
}
|
226
|
+
|
227
|
+
/**
|
228
|
+
* Returns the source of the selection.
|
229
|
+
*
|
230
|
+
* @returns {'mouse' | 'unknown' | string}
|
231
|
+
*/
|
232
|
+
getSelectionSource() {
|
233
|
+
return _classPrivateFieldGet(this, _selectionSource);
|
234
|
+
}
|
235
|
+
|
236
|
+
/**
|
237
|
+
* Set the number of expected layers. The method is not obligatory to call. It is used mostly internally
|
238
|
+
* to determine when the last selection layer of non-contiguous is applied, thus the viewport scroll is triggered.
|
239
|
+
*
|
240
|
+
* @param {number} layersCount The number of expected layers.
|
241
|
+
*/
|
242
|
+
setExpectedLayers(layersCount) {
|
243
|
+
_classPrivateFieldSet(this, _expectedLayersCount, layersCount);
|
244
|
+
}
|
245
|
+
|
190
246
|
/**
|
191
247
|
* Indicate that selection process began. It sets internally `.inProgress` property to `true`.
|
192
248
|
*/
|
@@ -200,6 +256,7 @@ class Selection {
|
|
200
256
|
finish() {
|
201
257
|
this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));
|
202
258
|
this.inProgress = false;
|
259
|
+
_classPrivateFieldSet(this, _expectedLayersCount, -1);
|
203
260
|
}
|
204
261
|
|
205
262
|
/**
|
@@ -384,7 +441,8 @@ class Selection {
|
|
384
441
|
activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
|
385
442
|
}
|
386
443
|
}
|
387
|
-
this.
|
444
|
+
const isLastLayer = _classPrivateFieldGet(this, _expectedLayersCount) === -1 || this.selectedRange.size() === _classPrivateFieldGet(this, _expectedLayersCount);
|
445
|
+
this.runLocalHooks('afterSetRangeEnd', coords, isLastLayer);
|
388
446
|
}
|
389
447
|
|
390
448
|
/**
|
@@ -702,6 +760,7 @@ class Selection {
|
|
702
760
|
});
|
703
761
|
if (isValid) {
|
704
762
|
this.clear();
|
763
|
+
this.setExpectedLayers(selectionRanges.length);
|
705
764
|
arrayEach(selectionRanges, selection => {
|
706
765
|
const {
|
707
766
|
from,
|
@@ -709,8 +768,8 @@ class Selection {
|
|
709
768
|
} = selectionSchemaNormalizer(selection);
|
710
769
|
this.setRangeStartOnly(from.clone(), false);
|
711
770
|
this.setRangeEnd(to.clone());
|
712
|
-
this.finish();
|
713
771
|
});
|
772
|
+
this.finish();
|
714
773
|
}
|
715
774
|
return isValid;
|
716
775
|
}
|
package/shortcuts/recorder.js
CHANGED
@@ -10,6 +10,7 @@ var _element = require("../helpers/dom/element");
|
|
10
10
|
var _browser = require("../helpers/browser");
|
11
11
|
const MODIFIER_KEYS = ['meta', 'alt', 'shift', 'control'];
|
12
12
|
const modifierKeysObserver = (0, _keyObserver.createKeysObserver)();
|
13
|
+
const modKeyListeners = [];
|
13
14
|
let instanceCounter = 0;
|
14
15
|
|
15
16
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
@@ -108,9 +109,11 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
|
|
108
109
|
* @param {KeyboardEvent} event The event object
|
109
110
|
*/
|
110
111
|
const onkeydownForModKeys = event => {
|
111
|
-
|
112
|
-
|
113
|
-
|
112
|
+
if (event.key) {
|
113
|
+
const pressedKey = (0, _utils.normalizeEventKey)(event);
|
114
|
+
if (isModifierKey(pressedKey)) {
|
115
|
+
modifierKeysObserver.press(pressedKey);
|
116
|
+
}
|
114
117
|
}
|
115
118
|
};
|
116
119
|
|
@@ -121,9 +124,11 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
|
|
121
124
|
* @param {KeyboardEvent} event The event object
|
122
125
|
*/
|
123
126
|
const onkeyupForModKeys = event => {
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
+
if (event.key) {
|
128
|
+
const pressedKey = (0, _utils.normalizeEventKey)(event);
|
129
|
+
if (isModifierKey(pressedKey)) {
|
130
|
+
modifierKeysObserver.release(pressedKey);
|
131
|
+
}
|
127
132
|
}
|
128
133
|
};
|
129
134
|
|
@@ -145,7 +150,15 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
|
|
145
150
|
while (eventTarget) {
|
146
151
|
if (instanceCounter === 1) {
|
147
152
|
eventTarget.document.documentElement.addEventListener('keydown', onkeydownForModKeys);
|
153
|
+
modKeyListeners.push({
|
154
|
+
event: 'keydown',
|
155
|
+
listener: onkeydownForModKeys
|
156
|
+
});
|
148
157
|
eventTarget.document.documentElement.addEventListener('keyup', onkeyupForModKeys);
|
158
|
+
modKeyListeners.push({
|
159
|
+
event: 'keyup',
|
160
|
+
listener: onkeyupForModKeys
|
161
|
+
});
|
149
162
|
}
|
150
163
|
eventTarget.document.documentElement.addEventListener('keydown', onkeydown);
|
151
164
|
eventTarget.document.documentElement.addEventListener('blur', onblur);
|
@@ -161,8 +174,14 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
|
|
161
174
|
instanceCounter -= 1;
|
162
175
|
while (eventTarget) {
|
163
176
|
if (instanceCounter === 0) {
|
164
|
-
|
165
|
-
|
177
|
+
for (let i = 0; i < modKeyListeners.length; i++) {
|
178
|
+
const {
|
179
|
+
event,
|
180
|
+
listener
|
181
|
+
} = modKeyListeners[i];
|
182
|
+
eventTarget.document.documentElement.removeEventListener(event, listener);
|
183
|
+
}
|
184
|
+
modKeyListeners.length = 0;
|
166
185
|
}
|
167
186
|
eventTarget.document.documentElement.removeEventListener('keydown', onkeydown);
|
168
187
|
eventTarget.document.documentElement.removeEventListener('blur', onblur);
|
package/shortcuts/recorder.mjs
CHANGED
@@ -6,6 +6,7 @@ import { getParentWindow } from "../helpers/dom/element.mjs";
|
|
6
6
|
import { isMacOS } from "../helpers/browser.mjs";
|
7
7
|
const MODIFIER_KEYS = ['meta', 'alt', 'shift', 'control'];
|
8
8
|
const modifierKeysObserver = createKeysObserver();
|
9
|
+
const modKeyListeners = [];
|
9
10
|
let instanceCounter = 0;
|
10
11
|
|
11
12
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
@@ -104,9 +105,11 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
|
|
104
105
|
* @param {KeyboardEvent} event The event object
|
105
106
|
*/
|
106
107
|
const onkeydownForModKeys = event => {
|
107
|
-
|
108
|
-
|
109
|
-
|
108
|
+
if (event.key) {
|
109
|
+
const pressedKey = normalizeEventKey(event);
|
110
|
+
if (isModifierKey(pressedKey)) {
|
111
|
+
modifierKeysObserver.press(pressedKey);
|
112
|
+
}
|
110
113
|
}
|
111
114
|
};
|
112
115
|
|
@@ -117,9 +120,11 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
|
|
117
120
|
* @param {KeyboardEvent} event The event object
|
118
121
|
*/
|
119
122
|
const onkeyupForModKeys = event => {
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
+
if (event.key) {
|
124
|
+
const pressedKey = normalizeEventKey(event);
|
125
|
+
if (isModifierKey(pressedKey)) {
|
126
|
+
modifierKeysObserver.release(pressedKey);
|
127
|
+
}
|
123
128
|
}
|
124
129
|
};
|
125
130
|
|
@@ -141,7 +146,15 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
|
|
141
146
|
while (eventTarget) {
|
142
147
|
if (instanceCounter === 1) {
|
143
148
|
eventTarget.document.documentElement.addEventListener('keydown', onkeydownForModKeys);
|
149
|
+
modKeyListeners.push({
|
150
|
+
event: 'keydown',
|
151
|
+
listener: onkeydownForModKeys
|
152
|
+
});
|
144
153
|
eventTarget.document.documentElement.addEventListener('keyup', onkeyupForModKeys);
|
154
|
+
modKeyListeners.push({
|
155
|
+
event: 'keyup',
|
156
|
+
listener: onkeyupForModKeys
|
157
|
+
});
|
145
158
|
}
|
146
159
|
eventTarget.document.documentElement.addEventListener('keydown', onkeydown);
|
147
160
|
eventTarget.document.documentElement.addEventListener('blur', onblur);
|
@@ -157,8 +170,14 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
|
|
157
170
|
instanceCounter -= 1;
|
158
171
|
while (eventTarget) {
|
159
172
|
if (instanceCounter === 0) {
|
160
|
-
|
161
|
-
|
173
|
+
for (let i = 0; i < modKeyListeners.length; i++) {
|
174
|
+
const {
|
175
|
+
event,
|
176
|
+
listener
|
177
|
+
} = modKeyListeners[i];
|
178
|
+
eventTarget.document.documentElement.removeEventListener(event, listener);
|
179
|
+
}
|
180
|
+
modKeyListeners.length = 0;
|
162
181
|
}
|
163
182
|
eventTarget.document.documentElement.removeEventListener('keydown', onkeydown);
|
164
183
|
eventTarget.document.documentElement.removeEventListener('blur', onblur);
|
package/tableView.js
CHANGED
@@ -307,15 +307,13 @@ class TableView {
|
|
307
307
|
const {
|
308
308
|
rootElement,
|
309
309
|
rootDocument,
|
310
|
-
selection
|
310
|
+
selection,
|
311
|
+
rootWindow
|
311
312
|
} = this.hot;
|
312
313
|
const documentElement = rootDocument.documentElement;
|
313
314
|
this.eventManager.addEventListener(rootElement, 'mousedown', event => {
|
314
315
|
_classPrivateFieldSet(this, _selectionMouseDown, true);
|
315
316
|
if (!this.isTextSelectionAllowed(event.target)) {
|
316
|
-
const {
|
317
|
-
rootWindow
|
318
|
-
} = this.hot;
|
319
317
|
(0, _element.clearTextSelection)(rootWindow);
|
320
318
|
event.preventDefault();
|
321
319
|
rootWindow.focus(); // make sure that window that contains HOT is active. Important when HOT is in iframe.
|
@@ -328,7 +326,7 @@ class TableView {
|
|
328
326
|
if (_classPrivateFieldGet(this, _selectionMouseDown) && !this.isTextSelectionAllowed(event.target)) {
|
329
327
|
// Clear selection only when fragmentSelection is enabled, otherwise clearing selection breaks the IME editor.
|
330
328
|
if (this.settings.fragmentSelection) {
|
331
|
-
(0, _element.clearTextSelection)(
|
329
|
+
(0, _element.clearTextSelection)(rootWindow);
|
332
330
|
}
|
333
331
|
event.preventDefault();
|
334
332
|
}
|
@@ -408,6 +406,13 @@ class TableView {
|
|
408
406
|
this.hot.destroyEditor(false, false);
|
409
407
|
}
|
410
408
|
});
|
409
|
+
let parentWindow = (0, _element.getParentWindow)(rootWindow);
|
410
|
+
while (parentWindow !== null) {
|
411
|
+
this.eventManager.addEventListener(parentWindow.document.documentElement, 'click', () => {
|
412
|
+
this.hot.unlisten();
|
413
|
+
});
|
414
|
+
parentWindow = (0, _element.getParentWindow)(parentWindow);
|
415
|
+
}
|
411
416
|
this.eventManager.addEventListener(_classPrivateFieldGet(this, _table), 'selectstart', event => {
|
412
417
|
if (this.settings.fragmentSelection || (0, _element.isInput)(event.target)) {
|
413
418
|
return;
|
@@ -1310,6 +1315,42 @@ class TableView {
|
|
1310
1315
|
return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastVisibleColumn());
|
1311
1316
|
}
|
1312
1317
|
|
1318
|
+
/**
|
1319
|
+
* Returns the first partially visible row in the table viewport.
|
1320
|
+
*
|
1321
|
+
* @returns {number}
|
1322
|
+
*/
|
1323
|
+
getFirstPartiallyVisibleRow() {
|
1324
|
+
return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstPartiallyVisibleRow());
|
1325
|
+
}
|
1326
|
+
|
1327
|
+
/**
|
1328
|
+
* Returns the last partially visible row in the table viewport.
|
1329
|
+
*
|
1330
|
+
* @returns {number}
|
1331
|
+
*/
|
1332
|
+
getLastPartiallyVisibleRow() {
|
1333
|
+
return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastPartiallyVisibleRow());
|
1334
|
+
}
|
1335
|
+
|
1336
|
+
/**
|
1337
|
+
* Returns the first partially visible column in the table viewport.
|
1338
|
+
*
|
1339
|
+
* @returns {number}
|
1340
|
+
*/
|
1341
|
+
getFirstPartiallyVisibleColumn() {
|
1342
|
+
return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstPartiallyVisibleColumn());
|
1343
|
+
}
|
1344
|
+
|
1345
|
+
/**
|
1346
|
+
* Returns the last partially visible column in the table viewport.
|
1347
|
+
*
|
1348
|
+
* @returns {number}
|
1349
|
+
*/
|
1350
|
+
getLastPartiallyVisibleColumn() {
|
1351
|
+
return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastPartiallyVisibleColumn());
|
1352
|
+
}
|
1353
|
+
|
1313
1354
|
/**
|
1314
1355
|
* Returns the total count of the rendered column headers.
|
1315
1356
|
*
|
@@ -1327,6 +1368,46 @@ class TableView {
|
|
1327
1368
|
getRowHeadersCount() {
|
1328
1369
|
return _classPrivateFieldGet(this, _rowHeadersCount);
|
1329
1370
|
}
|
1371
|
+
|
1372
|
+
/**
|
1373
|
+
* Returns the table's viewport width. When the table has defined the size of the container,
|
1374
|
+
* and the columns do not fill the entire viewport, the viewport width is equal to the sum of
|
1375
|
+
* the columns' widths.
|
1376
|
+
*
|
1377
|
+
* @returns {number}
|
1378
|
+
*/
|
1379
|
+
getViewportWidth() {
|
1380
|
+
return this.hot.view._wt.wtViewport.getViewportWidth();
|
1381
|
+
}
|
1382
|
+
|
1383
|
+
/**
|
1384
|
+
* Returns the table's total width including the scrollbar width.
|
1385
|
+
*
|
1386
|
+
* @returns {number}
|
1387
|
+
*/
|
1388
|
+
getWorkspaceWidth() {
|
1389
|
+
return this.hot.view._wt.wtViewport.getWorkspaceWidth();
|
1390
|
+
}
|
1391
|
+
|
1392
|
+
/**
|
1393
|
+
* Returns the table's viewport height. When the table has defined the size of the container,
|
1394
|
+
* and the rows do not fill the entire viewport, the viewport height is equal to the sum of
|
1395
|
+
* the rows' heights.
|
1396
|
+
*
|
1397
|
+
* @returns {number}
|
1398
|
+
*/
|
1399
|
+
getViewportHeight() {
|
1400
|
+
return this.hot.view._wt.wtViewport.getViewportHeight();
|
1401
|
+
}
|
1402
|
+
|
1403
|
+
/**
|
1404
|
+
* Returns the table's total height including the scrollbar height.
|
1405
|
+
*
|
1406
|
+
* @returns {number}
|
1407
|
+
*/
|
1408
|
+
getWorkspaceHeight() {
|
1409
|
+
return this.hot.view._wt.wtViewport.getWorkspaceHeight();
|
1410
|
+
}
|
1330
1411
|
/**
|
1331
1412
|
* Destroys internal WalkOnTable's instance. Detaches all of the bonded listeners.
|
1332
1413
|
*
|
package/tableView.mjs
CHANGED
@@ -12,7 +12,7 @@ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) {
|
|
12
12
|
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
13
13
|
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
|
14
14
|
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; } }
|
15
|
-
import { addClass, clearTextSelection, empty, fastInnerHTML, fastInnerText, getScrollbarWidth, hasClass, isChildOf, isInput, isOutsideInput, isVisible, setAttribute } from "./helpers/dom/element.mjs";
|
15
|
+
import { addClass, clearTextSelection, empty, fastInnerHTML, fastInnerText, getScrollbarWidth, hasClass, isChildOf, isInput, isOutsideInput, isVisible, setAttribute, getParentWindow } from "./helpers/dom/element.mjs";
|
16
16
|
import EventManager from "./eventManager.mjs";
|
17
17
|
import { isImmediatePropagationStopped, isRightClick, isLeftClick } from "./helpers/dom/event.mjs";
|
18
18
|
import Walkontable from "./3rdparty/walkontable/src/index.mjs";
|
@@ -303,15 +303,13 @@ class TableView {
|
|
303
303
|
const {
|
304
304
|
rootElement,
|
305
305
|
rootDocument,
|
306
|
-
selection
|
306
|
+
selection,
|
307
|
+
rootWindow
|
307
308
|
} = this.hot;
|
308
309
|
const documentElement = rootDocument.documentElement;
|
309
310
|
this.eventManager.addEventListener(rootElement, 'mousedown', event => {
|
310
311
|
_classPrivateFieldSet(this, _selectionMouseDown, true);
|
311
312
|
if (!this.isTextSelectionAllowed(event.target)) {
|
312
|
-
const {
|
313
|
-
rootWindow
|
314
|
-
} = this.hot;
|
315
313
|
clearTextSelection(rootWindow);
|
316
314
|
event.preventDefault();
|
317
315
|
rootWindow.focus(); // make sure that window that contains HOT is active. Important when HOT is in iframe.
|
@@ -324,7 +322,7 @@ class TableView {
|
|
324
322
|
if (_classPrivateFieldGet(this, _selectionMouseDown) && !this.isTextSelectionAllowed(event.target)) {
|
325
323
|
// Clear selection only when fragmentSelection is enabled, otherwise clearing selection breaks the IME editor.
|
326
324
|
if (this.settings.fragmentSelection) {
|
327
|
-
clearTextSelection(
|
325
|
+
clearTextSelection(rootWindow);
|
328
326
|
}
|
329
327
|
event.preventDefault();
|
330
328
|
}
|
@@ -404,6 +402,13 @@ class TableView {
|
|
404
402
|
this.hot.destroyEditor(false, false);
|
405
403
|
}
|
406
404
|
});
|
405
|
+
let parentWindow = getParentWindow(rootWindow);
|
406
|
+
while (parentWindow !== null) {
|
407
|
+
this.eventManager.addEventListener(parentWindow.document.documentElement, 'click', () => {
|
408
|
+
this.hot.unlisten();
|
409
|
+
});
|
410
|
+
parentWindow = getParentWindow(parentWindow);
|
411
|
+
}
|
407
412
|
this.eventManager.addEventListener(_classPrivateFieldGet(this, _table), 'selectstart', event => {
|
408
413
|
if (this.settings.fragmentSelection || isInput(event.target)) {
|
409
414
|
return;
|
@@ -1306,6 +1311,42 @@ class TableView {
|
|
1306
1311
|
return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastVisibleColumn());
|
1307
1312
|
}
|
1308
1313
|
|
1314
|
+
/**
|
1315
|
+
* Returns the first partially visible row in the table viewport.
|
1316
|
+
*
|
1317
|
+
* @returns {number}
|
1318
|
+
*/
|
1319
|
+
getFirstPartiallyVisibleRow() {
|
1320
|
+
return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstPartiallyVisibleRow());
|
1321
|
+
}
|
1322
|
+
|
1323
|
+
/**
|
1324
|
+
* Returns the last partially visible row in the table viewport.
|
1325
|
+
*
|
1326
|
+
* @returns {number}
|
1327
|
+
*/
|
1328
|
+
getLastPartiallyVisibleRow() {
|
1329
|
+
return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastPartiallyVisibleRow());
|
1330
|
+
}
|
1331
|
+
|
1332
|
+
/**
|
1333
|
+
* Returns the first partially visible column in the table viewport.
|
1334
|
+
*
|
1335
|
+
* @returns {number}
|
1336
|
+
*/
|
1337
|
+
getFirstPartiallyVisibleColumn() {
|
1338
|
+
return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstPartiallyVisibleColumn());
|
1339
|
+
}
|
1340
|
+
|
1341
|
+
/**
|
1342
|
+
* Returns the last partially visible column in the table viewport.
|
1343
|
+
*
|
1344
|
+
* @returns {number}
|
1345
|
+
*/
|
1346
|
+
getLastPartiallyVisibleColumn() {
|
1347
|
+
return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastPartiallyVisibleColumn());
|
1348
|
+
}
|
1349
|
+
|
1309
1350
|
/**
|
1310
1351
|
* Returns the total count of the rendered column headers.
|
1311
1352
|
*
|
@@ -1323,6 +1364,46 @@ class TableView {
|
|
1323
1364
|
getRowHeadersCount() {
|
1324
1365
|
return _classPrivateFieldGet(this, _rowHeadersCount);
|
1325
1366
|
}
|
1367
|
+
|
1368
|
+
/**
|
1369
|
+
* Returns the table's viewport width. When the table has defined the size of the container,
|
1370
|
+
* and the columns do not fill the entire viewport, the viewport width is equal to the sum of
|
1371
|
+
* the columns' widths.
|
1372
|
+
*
|
1373
|
+
* @returns {number}
|
1374
|
+
*/
|
1375
|
+
getViewportWidth() {
|
1376
|
+
return this.hot.view._wt.wtViewport.getViewportWidth();
|
1377
|
+
}
|
1378
|
+
|
1379
|
+
/**
|
1380
|
+
* Returns the table's total width including the scrollbar width.
|
1381
|
+
*
|
1382
|
+
* @returns {number}
|
1383
|
+
*/
|
1384
|
+
getWorkspaceWidth() {
|
1385
|
+
return this.hot.view._wt.wtViewport.getWorkspaceWidth();
|
1386
|
+
}
|
1387
|
+
|
1388
|
+
/**
|
1389
|
+
* Returns the table's viewport height. When the table has defined the size of the container,
|
1390
|
+
* and the rows do not fill the entire viewport, the viewport height is equal to the sum of
|
1391
|
+
* the rows' heights.
|
1392
|
+
*
|
1393
|
+
* @returns {number}
|
1394
|
+
*/
|
1395
|
+
getViewportHeight() {
|
1396
|
+
return this.hot.view._wt.wtViewport.getViewportHeight();
|
1397
|
+
}
|
1398
|
+
|
1399
|
+
/**
|
1400
|
+
* Returns the table's total height including the scrollbar height.
|
1401
|
+
*
|
1402
|
+
* @returns {number}
|
1403
|
+
*/
|
1404
|
+
getWorkspaceHeight() {
|
1405
|
+
return this.hot.view._wt.wtViewport.getWorkspaceHeight();
|
1406
|
+
}
|
1326
1407
|
/**
|
1327
1408
|
* Destroys internal WalkOnTable's instance. Detaches all of the bonded listeners.
|
1328
1409
|
*
|
package/utils/autoResize.js
CHANGED
@@ -180,7 +180,6 @@ function createInputElementResizer(ownerDocument) {
|
|
180
180
|
extendDefaults(config);
|
181
181
|
if (observedElement.nodeName === 'TEXTAREA') {
|
182
182
|
observedElement.style.resize = 'none';
|
183
|
-
observedElement.style.overflowY = '';
|
184
183
|
observedElement.style.height = `${defaults.minHeight}px`;
|
185
184
|
observedElement.style.minWidth = `${defaults.minWidth}px`;
|
186
185
|
observedElement.style.maxWidth = `${defaults.maxWidth}px`;
|
package/utils/autoResize.mjs
CHANGED
@@ -176,7 +176,6 @@ export function createInputElementResizer(ownerDocument) {
|
|
176
176
|
extendDefaults(config);
|
177
177
|
if (observedElement.nodeName === 'TEXTAREA') {
|
178
178
|
observedElement.style.resize = 'none';
|
179
|
-
observedElement.style.overflowY = '';
|
180
179
|
observedElement.style.height = `${defaults.minHeight}px`;
|
181
180
|
observedElement.style.minWidth = `${defaults.minWidth}px`;
|
182
181
|
observedElement.style.maxWidth = `${defaults.maxWidth}px`;
|