handsontable 14.0.0-next-dd92f79-20231124 → 14.0.0-next-88de277-20231127
Sign up to get free protection for your applications and to get access to all the features.
- package/3rdparty/walkontable/src/overlay/_base.js +2 -2
- package/3rdparty/walkontable/src/overlay/_base.mjs +2 -2
- package/3rdparty/walkontable/src/renderer/columnHeaders.js +1 -1
- package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +2 -2
- package/3rdparty/walkontable/src/renderer/rows.js +1 -1
- package/3rdparty/walkontable/src/renderer/rows.mjs +2 -2
- package/3rdparty/walkontable/src/selection/manager.js +20 -6
- package/3rdparty/walkontable/src/selection/manager.mjs +20 -6
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.js +1 -1
- package/core.mjs +1 -1
- package/dataMap/replaceData.js +3 -1
- package/dataMap/replaceData.mjs +3 -1
- package/dist/handsontable.css +62 -44
- package/dist/handsontable.full.css +62 -44
- package/dist/handsontable.full.js +123 -302
- package/dist/handsontable.full.min.css +5 -5
- package/dist/handsontable.full.min.js +64 -64
- package/dist/handsontable.js +123 -302
- package/dist/handsontable.min.css +5 -5
- package/dist/handsontable.min.js +19 -19
- package/dist/languages/all.js +2 -24
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/en-US.js +1 -12
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/pl-PL.js +1 -12
- package/dist/languages/pl-PL.min.js +1 -1
- package/editors/dateEditor/dateEditor.js +0 -7
- package/editors/dateEditor/dateEditor.mjs +1 -8
- package/editors/handsontableEditor/handsontableEditor.js +0 -7
- package/editors/handsontableEditor/handsontableEditor.mjs +1 -8
- package/editors/passwordEditor/passwordEditor.js +4 -0
- package/editors/passwordEditor/passwordEditor.mjs +5 -1
- package/helpers/a11y.js +2 -2
- package/helpers/a11y.mjs +1 -1
- package/helpers/dom/element.js +0 -29
- package/helpers/dom/element.mjs +0 -28
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/i18n/constants.js +1 -14
- package/i18n/constants.mjs +1 -14
- package/i18n/languages/en-US.js +1 -12
- package/i18n/languages/en-US.mjs +1 -12
- package/i18n/languages/pl-PL.js +1 -12
- package/i18n/languages/pl-PL.mjs +1 -12
- package/languages/all.js +2 -24
- package/languages/en-US.js +1 -12
- package/languages/en-US.mjs +1 -12
- package/languages/index.js +2 -24
- package/languages/pl-PL.js +1 -12
- package/languages/pl-PL.mjs +1 -12
- package/package.json +1 -1
- package/plugins/collapsibleColumns/collapsibleColumns.js +2 -3
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +3 -4
- package/plugins/columnSorting/columnSorting.js +4 -30
- package/plugins/columnSorting/columnSorting.mjs +6 -32
- package/plugins/contextMenu/menu/menuItemRenderer.js +0 -12
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +2 -14
- package/plugins/dropdownMenu/dropdownMenu.js +1 -2
- package/plugins/dropdownMenu/dropdownMenu.mjs +2 -3
- package/plugins/filters/ui/input.js +3 -0
- package/plugins/filters/ui/input.mjs +3 -0
- package/plugins/hiddenColumns/hiddenColumns.js +0 -44
- package/plugins/hiddenColumns/hiddenColumns.mjs +1 -45
- package/plugins/hiddenRows/hiddenRows.js +0 -44
- package/plugins/hiddenRows/hiddenRows.mjs +1 -45
- package/plugins/multiColumnSorting/multiColumnSorting.js +0 -21
- package/plugins/multiColumnSorting/multiColumnSorting.mjs +1 -22
- package/plugins/nestedRows/nestedRows.js +1 -2
- package/plugins/nestedRows/nestedRows.mjs +1 -2
- package/plugins/nestedRows/ui/headers.js +3 -3
- package/plugins/nestedRows/ui/headers.mjs +4 -4
- package/renderers/autocompleteRenderer/autocompleteRenderer.js +0 -3
- package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -4
- package/renderers/checkboxRenderer/checkboxRenderer.js +0 -1
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +0 -1
- package/renderers/dateRenderer/dateRenderer.js +0 -5
- package/renderers/dateRenderer/dateRenderer.mjs +0 -5
- package/renderers/handsontableRenderer/handsontableRenderer.js +0 -5
- package/renderers/handsontableRenderer/handsontableRenderer.mjs +0 -5
- package/renderers/selectRenderer/selectRenderer.js +0 -5
- package/renderers/selectRenderer/selectRenderer.mjs +0 -5
- package/selection/highlight/types/focus.js +2 -0
- package/selection/highlight/types/focus.mjs +2 -0
- package/selection/selection.js +0 -1
- package/selection/selection.mjs +0 -1
- package/tableView.js +35 -2
- package/tableView.mjs +35 -2
@@ -10,7 +10,7 @@ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _
|
|
10
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
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 { BasePlugin } from "../base/index.mjs";
|
13
|
-
import { addClass
|
13
|
+
import { addClass } from "../../helpers/dom/element.mjs";
|
14
14
|
import { rangeEach } from "../../helpers/number.mjs";
|
15
15
|
import { arrayEach, arrayMap, arrayReduce } from "../../helpers/array.mjs";
|
16
16
|
import { isObject } from "../../helpers/object.mjs";
|
@@ -20,16 +20,12 @@ import Hooks from "../../pluginHooks.mjs";
|
|
20
20
|
import hideRowItem from "./contextMenuItem/hideRow.mjs";
|
21
21
|
import showRowItem from "./contextMenuItem/showRow.mjs";
|
22
22
|
import { HidingMap } from "../../translations/index.mjs";
|
23
|
-
import { A11Y_LABEL } from "../../helpers/a11y.mjs";
|
24
|
-
import { ROW_HEADER_LABEL_AFTER_HIDDEN_ROW, ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW } from "../../i18n/constants.mjs";
|
25
23
|
Hooks.getSingleton().register('beforeHideRows');
|
26
24
|
Hooks.getSingleton().register('afterHideRows');
|
27
25
|
Hooks.getSingleton().register('beforeUnhideRows');
|
28
26
|
Hooks.getSingleton().register('afterUnhideRows');
|
29
27
|
export const PLUGIN_KEY = 'hiddenRows';
|
30
28
|
export const PLUGIN_PRIORITY = 320;
|
31
|
-
const AFTER_INDICATOR_CLASSNAME = 'afterHiddenRowIndicator';
|
32
|
-
const BEFORE_INDICATOR_CLASSNAME = 'beforeHiddenRowIndicator';
|
33
29
|
|
34
30
|
/* eslint-disable jsdoc/require-description-complete-sentence */
|
35
31
|
|
@@ -139,7 +135,6 @@ const BEFORE_INDICATOR_CLASSNAME = 'beforeHiddenRowIndicator';
|
|
139
135
|
*/
|
140
136
|
var _settings = /*#__PURE__*/new WeakMap();
|
141
137
|
var _hiddenRowsMap = /*#__PURE__*/new WeakMap();
|
142
|
-
var _clearIndicatorElements = /*#__PURE__*/new WeakSet();
|
143
138
|
var _onModifyRowHeight = /*#__PURE__*/new WeakSet();
|
144
139
|
var _onAfterGetCellMeta = /*#__PURE__*/new WeakSet();
|
145
140
|
var _onModifyCopyableRange = /*#__PURE__*/new WeakSet();
|
@@ -189,12 +184,6 @@ export class HiddenRows extends BasePlugin {
|
|
189
184
|
* @returns {number}
|
190
185
|
*/
|
191
186
|
_classPrivateMethodInitSpec(this, _onModifyRowHeight);
|
192
|
-
/**
|
193
|
-
* Remove the indicator elements from the provided row header element.
|
194
|
-
*
|
195
|
-
* @param {HTMLElement} TH Column header element.
|
196
|
-
*/
|
197
|
-
_classPrivateMethodInitSpec(this, _clearIndicatorElements);
|
198
187
|
/**
|
199
188
|
* Cached settings from Handsontable settings.
|
200
189
|
*
|
@@ -284,15 +273,8 @@ export class HiddenRows extends BasePlugin {
|
|
284
273
|
* Disables the plugin functionality for this Handsontable instance.
|
285
274
|
*/
|
286
275
|
disablePlugin() {
|
287
|
-
const clearRowHeader = (columnIndex, TH) => {
|
288
|
-
_classPrivateMethodGet(this, _clearIndicatorElements, _clearIndicatorElements2).call(this, TH);
|
289
|
-
};
|
290
276
|
this.hot.rowIndexMapper.unregisterMap(this.pluginName);
|
291
277
|
_classPrivateFieldSet(this, _settings, {});
|
292
|
-
this.hot.addHook('afterGetRowHeader', clearRowHeader);
|
293
|
-
this.hot.addHookOnce('afterViewRender', () => {
|
294
|
-
this.hot.removeHook('afterGetRowHeader', clearRowHeader);
|
295
|
-
});
|
296
278
|
super.disablePlugin();
|
297
279
|
this.resetCellsMeta();
|
298
280
|
}
|
@@ -440,11 +422,6 @@ export class HiddenRows extends BasePlugin {
|
|
440
422
|
super.destroy();
|
441
423
|
}
|
442
424
|
}
|
443
|
-
function _clearIndicatorElements2(TH) {
|
444
|
-
Array.from(TH.querySelectorAll(`.${AFTER_INDICATOR_CLASSNAME}, .${BEFORE_INDICATOR_CLASSNAME}`)).forEach(element => {
|
445
|
-
element.remove();
|
446
|
-
});
|
447
|
-
}
|
448
425
|
function _onModifyRowHeight2(height, row) {
|
449
426
|
// Hook is triggered internally only for the visible rows. Conditional will be handled for the API
|
450
427
|
// calls of the `getRowHeight` function on not visible indexes.
|
@@ -511,35 +488,14 @@ function _onModifyCopyableRange2(ranges) {
|
|
511
488
|
return newRanges;
|
512
489
|
}
|
513
490
|
function _onAfterGetRowHeader2(row, TH) {
|
514
|
-
const areAriaTagsEnabled = this.hot.getSettings().ariaTags;
|
515
|
-
const beforeHiddenRowIndicatorElement = TH.querySelector('.beforeHiddenRowIndicator');
|
516
|
-
const afterHiddenRowIndicatorElement = TH.querySelector('.afterHiddenRowIndicator');
|
517
491
|
if (!_classPrivateFieldGet(this, _settings).indicators || row < 0) {
|
518
|
-
beforeHiddenRowIndicatorElement === null || beforeHiddenRowIndicatorElement === void 0 || beforeHiddenRowIndicatorElement.remove();
|
519
|
-
afterHiddenRowIndicatorElement === null || afterHiddenRowIndicatorElement === void 0 || afterHiddenRowIndicatorElement.remove();
|
520
492
|
return;
|
521
493
|
}
|
522
494
|
const classList = [];
|
523
495
|
if (row >= 1 && this.isHidden(row - 1)) {
|
524
|
-
if (!afterHiddenRowIndicatorElement) {
|
525
|
-
const attributesToAdd = areAriaTagsEnabled ? [A11Y_LABEL(this.hot.getTranslatedPhrase(ROW_HEADER_LABEL_AFTER_HIDDEN_ROW))] : [];
|
526
|
-
appendElement(TH, {
|
527
|
-
tagName: 'div',
|
528
|
-
attributes: attributesToAdd,
|
529
|
-
className: AFTER_INDICATOR_CLASSNAME
|
530
|
-
});
|
531
|
-
}
|
532
496
|
classList.push('afterHiddenRow');
|
533
497
|
}
|
534
498
|
if (row < this.hot.countRows() - 1 && this.isHidden(row + 1)) {
|
535
|
-
if (!beforeHiddenRowIndicatorElement) {
|
536
|
-
const attributesToAdd = areAriaTagsEnabled ? [A11Y_LABEL(this.hot.getTranslatedPhrase(ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW))] : [];
|
537
|
-
appendElement(TH, {
|
538
|
-
tagName: 'div',
|
539
|
-
attributes: attributesToAdd,
|
540
|
-
className: BEFORE_INDICATOR_CLASSNAME
|
541
|
-
});
|
542
|
-
}
|
543
499
|
classList.push('beforeHiddenRow');
|
544
500
|
}
|
545
501
|
addClass(TH, classList);
|
@@ -9,8 +9,6 @@ var _element = require("../../helpers/dom/element");
|
|
9
9
|
var _rootComparator = require("./rootComparator");
|
10
10
|
var _utils2 = require("./utils");
|
11
11
|
var _domHelpers = require("./domHelpers");
|
12
|
-
var _a11y = require("../../helpers/a11y");
|
13
|
-
var _constants = require("../../i18n/constants");
|
14
12
|
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; }
|
15
13
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
16
14
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
@@ -272,25 +270,6 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
|
|
272
270
|
}
|
273
271
|
}
|
274
272
|
|
275
|
-
/**
|
276
|
-
* Update sorting indicator.
|
277
|
-
*
|
278
|
-
* @private
|
279
|
-
* @param {number} column Visual column index.
|
280
|
-
* @param {HTMLElement} headerSpanElement Header span element.
|
281
|
-
*/
|
282
|
-
updateSortingIndicator(column, headerSpanElement) {
|
283
|
-
super.updateSortingIndicator(column, headerSpanElement);
|
284
|
-
const indicatorElement = headerSpanElement.querySelector('.columnSortingIndicator');
|
285
|
-
if (!indicatorElement || !this.hot.getSettings().ariaTags || !this.columnStatesManager.isColumnSorted(column) || this.columnStatesManager.getNumberOfSortedColumns() <= 1) {
|
286
|
-
return;
|
287
|
-
}
|
288
|
-
const multiColumnSortingOrder = this.columnStatesManager.getIndexOfColumnInSortQueue(column) + 1;
|
289
|
-
const a11yLabelAttribute = (0, _a11y.A11Y_LABEL)(`${this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER)} ${multiColumnSortingOrder}.`);
|
290
|
-
(0, _element.removeAttribute)(indicatorElement, (0, _a11y.A11Y_HIDDEN)()[0]);
|
291
|
-
(0, _element.setAttribute)(indicatorElement, ...a11yLabelAttribute);
|
292
|
-
}
|
293
|
-
|
294
273
|
/**
|
295
274
|
* Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
|
296
275
|
* for `updateSettings` in specific situations.
|
@@ -5,12 +5,10 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
|
|
5
5
|
import { APPEND_COLUMN_CONFIG_STRATEGY, ColumnSorting } from "../columnSorting/index.mjs";
|
6
6
|
import { registerRootComparator } from "../columnSorting/sortService/index.mjs";
|
7
7
|
import { wasHeaderClickedProperly } from "../columnSorting/utils.mjs";
|
8
|
-
import { addClass, removeClass
|
8
|
+
import { addClass, removeClass } from "../../helpers/dom/element.mjs";
|
9
9
|
import { rootComparator } from "./rootComparator.mjs";
|
10
10
|
import { warnAboutPluginsConflict } from "./utils.mjs";
|
11
11
|
import { getClassesToAdd, getClassesToRemove } from "./domHelpers.mjs";
|
12
|
-
import { A11Y_HIDDEN, A11Y_LABEL } from "../../helpers/a11y.mjs";
|
13
|
-
import { COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER } from "../../i18n/constants.mjs";
|
14
12
|
export const PLUGIN_KEY = 'multiColumnSorting';
|
15
13
|
export const PLUGIN_PRIORITY = 170;
|
16
14
|
const CONFLICTED_PLUGIN_KEY = 'columnSorting';
|
@@ -269,25 +267,6 @@ export class MultiColumnSorting extends ColumnSorting {
|
|
269
267
|
}
|
270
268
|
}
|
271
269
|
|
272
|
-
/**
|
273
|
-
* Update sorting indicator.
|
274
|
-
*
|
275
|
-
* @private
|
276
|
-
* @param {number} column Visual column index.
|
277
|
-
* @param {HTMLElement} headerSpanElement Header span element.
|
278
|
-
*/
|
279
|
-
updateSortingIndicator(column, headerSpanElement) {
|
280
|
-
super.updateSortingIndicator(column, headerSpanElement);
|
281
|
-
const indicatorElement = headerSpanElement.querySelector('.columnSortingIndicator');
|
282
|
-
if (!indicatorElement || !this.hot.getSettings().ariaTags || !this.columnStatesManager.isColumnSorted(column) || this.columnStatesManager.getNumberOfSortedColumns() <= 1) {
|
283
|
-
return;
|
284
|
-
}
|
285
|
-
const multiColumnSortingOrder = this.columnStatesManager.getIndexOfColumnInSortQueue(column) + 1;
|
286
|
-
const a11yLabelAttribute = A11Y_LABEL(`${this.hot.getTranslatedPhrase(COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER)} ${multiColumnSortingOrder}.`);
|
287
|
-
removeAttribute(indicatorElement, A11Y_HIDDEN()[0]);
|
288
|
-
setAttribute(indicatorElement, ...a11yLabelAttribute);
|
289
|
-
}
|
290
|
-
|
291
270
|
/**
|
292
271
|
* Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
|
293
272
|
* for `updateSettings` in specific situations.
|
@@ -365,8 +365,7 @@ class NestedRows extends _base.BasePlugin {
|
|
365
365
|
/**
|
366
366
|
* Updates the plugin's state.
|
367
367
|
*
|
368
|
-
* This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the
|
369
|
-
* following configuration options:
|
368
|
+
* This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:
|
370
369
|
* - [`nestedRows`](@/api/options.md#nestedrows)
|
371
370
|
*/
|
372
371
|
updatePlugin() {
|
@@ -361,8 +361,7 @@ export class NestedRows extends BasePlugin {
|
|
361
361
|
/**
|
362
362
|
* Updates the plugin's state.
|
363
363
|
*
|
364
|
-
* This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the
|
365
|
-
* following configuration options:
|
364
|
+
* This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:
|
366
365
|
* - [`nestedRows`](@/api/options.md#nestedrows)
|
367
366
|
*/
|
368
367
|
updatePlugin() {
|
@@ -6,7 +6,6 @@ var _number = require("../../../helpers/number");
|
|
6
6
|
var _element = require("../../../helpers/dom/element");
|
7
7
|
var _base = _interopRequireDefault(require("./_base"));
|
8
8
|
var _a11y = require("../../../helpers/a11y");
|
9
|
-
var _constants = require("../../../i18n/constants");
|
10
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
11
10
|
/**
|
12
11
|
* Class responsible for the UI in the Nested Rows' row headers.
|
@@ -25,6 +24,7 @@ class HeadersUI extends _base.default {
|
|
25
24
|
return {
|
26
25
|
indicatorContainer: 'ht_nestingLevels',
|
27
26
|
parent: 'ht_nestingParent',
|
27
|
+
indicator: 'ht_nestingLevel',
|
28
28
|
emptyIndicator: 'ht_nestingLevel_empty',
|
29
29
|
button: 'ht_nestingButton',
|
30
30
|
expandButton: 'ht_nestingExpand',
|
@@ -102,12 +102,12 @@ class HeadersUI extends _base.default {
|
|
102
102
|
if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {
|
103
103
|
(0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.expandButton}`);
|
104
104
|
if (ariaEnabled) {
|
105
|
-
(0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false)
|
105
|
+
(0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false)]);
|
106
106
|
}
|
107
107
|
} else {
|
108
108
|
(0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.collapseButton}`);
|
109
109
|
if (ariaEnabled) {
|
110
|
-
(0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true)
|
110
|
+
(0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true)]);
|
111
111
|
}
|
112
112
|
}
|
113
113
|
innerDiv.appendChild(buttonsContainer);
|
@@ -2,8 +2,7 @@ import { arrayEach } from "../../../helpers/array.mjs";
|
|
2
2
|
import { rangeEach } from "../../../helpers/number.mjs";
|
3
3
|
import { addClass, setAttribute } from "../../../helpers/dom/element.mjs";
|
4
4
|
import BaseUI from "./_base.mjs";
|
5
|
-
import {
|
6
|
-
import { ROW_HEADER_DESCRIPTION_COLLAPSE_ROW, ROW_HEADER_DESCRIPTION_EXPAND_ROW } from "../../../i18n/constants.mjs";
|
5
|
+
import { A11Y_EXPANDED, A11Y_HIDDEN } from "../../../helpers/a11y.mjs";
|
7
6
|
/**
|
8
7
|
* Class responsible for the UI in the Nested Rows' row headers.
|
9
8
|
*
|
@@ -21,6 +20,7 @@ class HeadersUI extends BaseUI {
|
|
21
20
|
return {
|
22
21
|
indicatorContainer: 'ht_nestingLevels',
|
23
22
|
parent: 'ht_nestingParent',
|
23
|
+
indicator: 'ht_nestingLevel',
|
24
24
|
emptyIndicator: 'ht_nestingLevel_empty',
|
25
25
|
button: 'ht_nestingButton',
|
26
26
|
expandButton: 'ht_nestingExpand',
|
@@ -98,12 +98,12 @@ class HeadersUI extends BaseUI {
|
|
98
98
|
if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {
|
99
99
|
addClass(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.expandButton}`);
|
100
100
|
if (ariaEnabled) {
|
101
|
-
setAttribute(TH, [A11Y_EXPANDED(false)
|
101
|
+
setAttribute(TH, [A11Y_EXPANDED(false)]);
|
102
102
|
}
|
103
103
|
} else {
|
104
104
|
addClass(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.collapseButton}`);
|
105
105
|
if (ariaEnabled) {
|
106
|
-
setAttribute(TH, [A11Y_EXPANDED(true)
|
106
|
+
setAttribute(TH, [A11Y_EXPANDED(true)]);
|
107
107
|
}
|
108
108
|
}
|
109
109
|
innerDiv.appendChild(buttonsContainer);
|
@@ -44,9 +44,6 @@ function autocompleteRenderer(hotInstance, TD, row, col, prop, value, cellProper
|
|
44
44
|
|
45
45
|
TD.insertBefore(ARROW, TD.firstChild);
|
46
46
|
(0, _element.addClass)(TD, 'htAutocomplete');
|
47
|
-
if (isAriaEnabled) {
|
48
|
-
TD.setAttribute(...(0, _a11y.A11Y_HASPOPUP)('listbox'));
|
49
|
-
}
|
50
47
|
if (!hotInstance.acArrowListener) {
|
51
48
|
const eventManager = new _eventManager.default(hotInstance);
|
52
49
|
|
@@ -2,7 +2,7 @@ import { htmlRenderer } from "../htmlRenderer/index.mjs";
|
|
2
2
|
import { textRenderer } from "../textRenderer/index.mjs";
|
3
3
|
import EventManager from "../../eventManager.mjs";
|
4
4
|
import { addClass, hasClass } from "../../helpers/dom/element.mjs";
|
5
|
-
import {
|
5
|
+
import { A11Y_HIDDEN } from "../../helpers/a11y.mjs";
|
6
6
|
export const RENDERER_TYPE = 'autocomplete';
|
7
7
|
|
8
8
|
/**
|
@@ -39,9 +39,6 @@ export function autocompleteRenderer(hotInstance, TD, row, col, prop, value, cel
|
|
39
39
|
|
40
40
|
TD.insertBefore(ARROW, TD.firstChild);
|
41
41
|
addClass(TD, 'htAutocomplete');
|
42
|
-
if (isAriaEnabled) {
|
43
|
-
TD.setAttribute(...A11Y_HASPOPUP('listbox'));
|
44
|
-
}
|
45
42
|
if (!hotInstance.acArrowListener) {
|
46
43
|
const eventManager = new EventManager(hotInstance);
|
47
44
|
|
@@ -294,7 +294,6 @@ function createInput(rootDocument) {
|
|
294
294
|
const input = rootDocument.createElement('input');
|
295
295
|
input.className = 'htCheckboxRendererInput';
|
296
296
|
input.type = 'checkbox';
|
297
|
-
input.setAttribute('autocomplete', 'off');
|
298
297
|
input.setAttribute('tabindex', '-1');
|
299
298
|
return input.cloneNode(false);
|
300
299
|
}
|
@@ -289,7 +289,6 @@ function createInput(rootDocument) {
|
|
289
289
|
const input = rootDocument.createElement('input');
|
290
290
|
input.className = 'htCheckboxRendererInput';
|
291
291
|
input.type = 'checkbox';
|
292
|
-
input.setAttribute('autocomplete', 'off');
|
293
292
|
input.setAttribute('tabindex', '-1');
|
294
293
|
return input.cloneNode(false);
|
295
294
|
}
|
@@ -3,8 +3,6 @@
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
exports.dateRenderer = dateRenderer;
|
5
5
|
var _autocompleteRenderer = require("../autocompleteRenderer");
|
6
|
-
var _a11y = require("../../helpers/a11y");
|
7
|
-
var _element = require("../../helpers/dom/element");
|
8
6
|
const RENDERER_TYPE = exports.RENDERER_TYPE = 'date';
|
9
7
|
|
10
8
|
/**
|
@@ -21,8 +19,5 @@ const RENDERER_TYPE = exports.RENDERER_TYPE = 'date';
|
|
21
19
|
*/
|
22
20
|
function dateRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
|
23
21
|
_autocompleteRenderer.autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);
|
24
|
-
if (hotInstance.getSettings().ariaTags) {
|
25
|
-
(0, _element.setAttribute)(TD, [(0, _a11y.A11Y_HASPOPUP)('dialog'), (0, _a11y.A11Y_EXPANDED)('false')]);
|
26
|
-
}
|
27
22
|
}
|
28
23
|
dateRenderer.RENDERER_TYPE = RENDERER_TYPE;
|
@@ -1,6 +1,4 @@
|
|
1
1
|
import { autocompleteRenderer } from "../autocompleteRenderer/index.mjs";
|
2
|
-
import { A11Y_EXPANDED, A11Y_HASPOPUP } from "../../helpers/a11y.mjs";
|
3
|
-
import { setAttribute } from "../../helpers/dom/element.mjs";
|
4
2
|
export const RENDERER_TYPE = 'date';
|
5
3
|
|
6
4
|
/**
|
@@ -17,8 +15,5 @@ export const RENDERER_TYPE = 'date';
|
|
17
15
|
*/
|
18
16
|
export function dateRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
|
19
17
|
autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);
|
20
|
-
if (hotInstance.getSettings().ariaTags) {
|
21
|
-
setAttribute(TD, [A11Y_HASPOPUP('dialog'), A11Y_EXPANDED('false')]);
|
22
|
-
}
|
23
18
|
}
|
24
19
|
dateRenderer.RENDERER_TYPE = RENDERER_TYPE;
|
@@ -3,8 +3,6 @@
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
exports.handsontableRenderer = handsontableRenderer;
|
5
5
|
var _autocompleteRenderer = require("../autocompleteRenderer");
|
6
|
-
var _a11y = require("../../helpers/a11y");
|
7
|
-
var _element = require("../../helpers/dom/element");
|
8
6
|
const RENDERER_TYPE = exports.RENDERER_TYPE = 'handsontable';
|
9
7
|
|
10
8
|
/**
|
@@ -21,8 +19,5 @@ const RENDERER_TYPE = exports.RENDERER_TYPE = 'handsontable';
|
|
21
19
|
*/
|
22
20
|
function handsontableRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
|
23
21
|
_autocompleteRenderer.autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);
|
24
|
-
if (hotInstance.getSettings().ariaTags) {
|
25
|
-
(0, _element.setAttribute)(TD, [(0, _a11y.A11Y_HASPOPUP)('true'), (0, _a11y.A11Y_EXPANDED)('false')]);
|
26
|
-
}
|
27
22
|
}
|
28
23
|
handsontableRenderer.RENDERER_TYPE = RENDERER_TYPE;
|
@@ -1,6 +1,4 @@
|
|
1
1
|
import { autocompleteRenderer } from "../autocompleteRenderer/index.mjs";
|
2
|
-
import { A11Y_EXPANDED, A11Y_HASPOPUP } from "../../helpers/a11y.mjs";
|
3
|
-
import { setAttribute } from "../../helpers/dom/element.mjs";
|
4
2
|
export const RENDERER_TYPE = 'handsontable';
|
5
3
|
|
6
4
|
/**
|
@@ -17,8 +15,5 @@ export const RENDERER_TYPE = 'handsontable';
|
|
17
15
|
*/
|
18
16
|
export function handsontableRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
|
19
17
|
autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);
|
20
|
-
if (hotInstance.getSettings().ariaTags) {
|
21
|
-
setAttribute(TD, [A11Y_HASPOPUP('true'), A11Y_EXPANDED('false')]);
|
22
|
-
}
|
23
18
|
}
|
24
19
|
handsontableRenderer.RENDERER_TYPE = RENDERER_TYPE;
|
@@ -3,8 +3,6 @@
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
exports.selectRenderer = selectRenderer;
|
5
5
|
var _textRenderer = require("../textRenderer");
|
6
|
-
var _a11y = require("../../helpers/a11y");
|
7
|
-
var _element = require("../../helpers/dom/element");
|
8
6
|
const RENDERER_TYPE = exports.RENDERER_TYPE = 'select';
|
9
7
|
|
10
8
|
/**
|
@@ -19,8 +17,5 @@ const RENDERER_TYPE = exports.RENDERER_TYPE = 'select';
|
|
19
17
|
*/
|
20
18
|
function selectRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
|
21
19
|
_textRenderer.textRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);
|
22
|
-
if (hotInstance.getSettings().ariaTags) {
|
23
|
-
(0, _element.setAttribute)(TD, ...(0, _a11y.A11Y_HASPOPUP)('listbox'));
|
24
|
-
}
|
25
20
|
}
|
26
21
|
selectRenderer.RENDERER_TYPE = RENDERER_TYPE;
|
@@ -1,6 +1,4 @@
|
|
1
1
|
import { textRenderer } from "../textRenderer/index.mjs";
|
2
|
-
import { A11Y_HASPOPUP } from "../../helpers/a11y.mjs";
|
3
|
-
import { setAttribute } from "../../helpers/dom/element.mjs";
|
4
2
|
export const RENDERER_TYPE = 'select';
|
5
3
|
|
6
4
|
/**
|
@@ -15,8 +13,5 @@ export const RENDERER_TYPE = 'select';
|
|
15
13
|
*/
|
16
14
|
export function selectRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
|
17
15
|
textRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);
|
18
|
-
if (hotInstance.getSettings().ariaTags) {
|
19
|
-
setAttribute(TD, ...A11Y_HASPOPUP('listbox'));
|
20
|
-
}
|
21
16
|
}
|
22
17
|
selectRenderer.RENDERER_TYPE = RENDERER_TYPE;
|
@@ -4,6 +4,7 @@ exports.__esModule = true;
|
|
4
4
|
exports.createHighlight = createHighlight;
|
5
5
|
var _src = require("../../../3rdparty/walkontable/src");
|
6
6
|
var _visualSelection = _interopRequireDefault(require("../visualSelection"));
|
7
|
+
var _a11y = require("../../../helpers/a11y");
|
7
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
8
9
|
/**
|
9
10
|
* Creates the new instance of Selection responsible for highlighting currently selected cell. This type of selection
|
@@ -20,6 +21,7 @@ function createHighlight(_ref) {
|
|
20
21
|
} = _ref;
|
21
22
|
return new _visualSelection.default({
|
22
23
|
className: 'current',
|
24
|
+
headerAttributes: [(0, _a11y.A11Y_SELECTED)()],
|
23
25
|
border: {
|
24
26
|
width: 2,
|
25
27
|
color: '#4b89ff',
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { HIGHLIGHT_FOCUS_TYPE } from "../../../3rdparty/walkontable/src/index.mjs";
|
2
2
|
import VisualSelection from "../visualSelection.mjs";
|
3
|
+
import { A11Y_SELECTED } from "../../../helpers/a11y.mjs";
|
3
4
|
/**
|
4
5
|
* Creates the new instance of Selection responsible for highlighting currently selected cell. This type of selection
|
5
6
|
* can present on the table only one at the time.
|
@@ -15,6 +16,7 @@ export function createHighlight(_ref) {
|
|
15
16
|
} = _ref;
|
16
17
|
return new VisualSelection({
|
17
18
|
className: 'current',
|
19
|
+
headerAttributes: [A11Y_SELECTED()],
|
18
20
|
border: {
|
19
21
|
width: 2,
|
20
22
|
color: '#4b89ff',
|
package/selection/selection.js
CHANGED
@@ -99,7 +99,6 @@ class Selection {
|
|
99
99
|
this.tableProps = tableProps;
|
100
100
|
this.highlight = new _highlight.default({
|
101
101
|
headerClassName: settings.currentHeaderClassName,
|
102
|
-
headerAttributes: [(0, _a11y.A11Y_SELECTED)()],
|
103
102
|
activeHeaderClassName: settings.activeHeaderClassName,
|
104
103
|
rowClassName: settings.currentRowClassName,
|
105
104
|
columnClassName: settings.currentColClassName,
|
package/selection/selection.mjs
CHANGED
@@ -93,7 +93,6 @@ class Selection {
|
|
93
93
|
this.tableProps = tableProps;
|
94
94
|
this.highlight = new Highlight({
|
95
95
|
headerClassName: settings.currentHeaderClassName,
|
96
|
-
headerAttributes: [A11Y_SELECTED()],
|
97
96
|
activeHeaderClassName: settings.activeHeaderClassName,
|
98
97
|
rowClassName: settings.currentRowClassName,
|
99
98
|
columnClassName: settings.currentColClassName,
|
package/tableView.js
CHANGED
@@ -11,11 +11,13 @@ var _mouseEventHandler = require("./selection/mouseEventHandler");
|
|
11
11
|
var _rootInstance = require("./utils/rootInstance");
|
12
12
|
var _a11y = require("./helpers/a11y");
|
13
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
14
|
+
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
14
15
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
15
16
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
16
17
|
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; }
|
17
18
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
18
19
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
20
|
+
function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
|
19
21
|
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
|
20
22
|
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
21
23
|
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
@@ -32,11 +34,25 @@ var _mouseDown = /*#__PURE__*/new WeakMap();
|
|
32
34
|
var _table = /*#__PURE__*/new WeakMap();
|
33
35
|
var _lastWidth = /*#__PURE__*/new WeakMap();
|
34
36
|
var _lastHeight = /*#__PURE__*/new WeakMap();
|
37
|
+
var _getAriaColcount = /*#__PURE__*/new WeakSet();
|
38
|
+
var _updateAriaColcount = /*#__PURE__*/new WeakSet();
|
35
39
|
class TableView {
|
36
40
|
/**
|
37
41
|
* @param {Hanstontable} hotInstance Instance of {@link Handsontable}.
|
38
42
|
*/
|
39
43
|
constructor(hotInstance) {
|
44
|
+
/**
|
45
|
+
* Update the `aria-colcount` attribute by the provided value.
|
46
|
+
*
|
47
|
+
* @param {number} delta The number of columns to add or remove to the aria tag.
|
48
|
+
*/
|
49
|
+
_classPrivateMethodInitSpec(this, _updateAriaColcount);
|
50
|
+
/**
|
51
|
+
* Return the value of the `aria-colcount` attribute.
|
52
|
+
*
|
53
|
+
* @returns {number} The value of the `aria-colcount` attribute.
|
54
|
+
*/
|
55
|
+
_classPrivateMethodInitSpec(this, _getAriaColcount);
|
40
56
|
/**
|
41
57
|
* Instance of {@link Handsontable}.
|
42
58
|
*
|
@@ -273,7 +289,7 @@ class TableView {
|
|
273
289
|
}
|
274
290
|
if (this.settings.ariaTags) {
|
275
291
|
(0, _element.setAttribute)(_classPrivateFieldGet(this, _table), [(0, _a11y.A11Y_PRESENTATION)()]);
|
276
|
-
(0, _element.setAttribute)(rootElement, [(0, _a11y.A11Y_TREEGRID)(), (0, _a11y.A11Y_ROWCOUNT)(
|
292
|
+
(0, _element.setAttribute)(rootElement, [(0, _a11y.A11Y_TREEGRID)(), (0, _a11y.A11Y_ROWCOUNT)(-1), (0, _a11y.A11Y_COLCOUNT)(this.hot.countCols()), (0, _a11y.A11Y_MULTISELECTABLE)()]);
|
277
293
|
}
|
278
294
|
this.THEAD = rootDocument.createElement('THEAD');
|
279
295
|
_classPrivateFieldGet(this, _table).appendChild(this.THEAD);
|
@@ -666,6 +682,13 @@ class TableView {
|
|
666
682
|
}
|
667
683
|
this.hot.runHooks('afterGetRowHeaderRenderers', headerRenderers);
|
668
684
|
_classPrivateFieldSet(this, _rowHeadersCount, headerRenderers.length);
|
685
|
+
if (this.hot.getSettings().ariaTags) {
|
686
|
+
// Update the aria-colcount attribute.
|
687
|
+
// Only needs to be done once after initialization/data update.
|
688
|
+
if (_classPrivateMethodGet(this, _getAriaColcount, _getAriaColcount2).call(this) === this.hot.countCols()) {
|
689
|
+
_classPrivateMethodGet(this, _updateAriaColcount, _updateAriaColcount2).call(this, _classPrivateFieldGet(this, _rowHeadersCount));
|
690
|
+
}
|
691
|
+
}
|
669
692
|
return headerRenderers;
|
670
693
|
},
|
671
694
|
columnHeaders: () => {
|
@@ -1158,6 +1181,10 @@ class TableView {
|
|
1158
1181
|
const span = rootDocument.createElement('span');
|
1159
1182
|
div.className = 'relative';
|
1160
1183
|
span.className = 'colHeader';
|
1184
|
+
if (this.settings.ariaTags) {
|
1185
|
+
(0, _element.setAttribute)(div, ...(0, _a11y.A11Y_PRESENTATION)());
|
1186
|
+
(0, _element.setAttribute)(span, ...(0, _a11y.A11Y_PRESENTATION)());
|
1187
|
+
}
|
1161
1188
|
this.updateCellHeader(span, visualColumnIndex, label, headerLevel);
|
1162
1189
|
div.appendChild(span);
|
1163
1190
|
TH.appendChild(div);
|
@@ -1301,7 +1328,6 @@ class TableView {
|
|
1301
1328
|
getRowHeadersCount() {
|
1302
1329
|
return _classPrivateFieldGet(this, _rowHeadersCount);
|
1303
1330
|
}
|
1304
|
-
|
1305
1331
|
/**
|
1306
1332
|
* Destroys internal WalkOnTable's instance. Detaches all of the bonded listeners.
|
1307
1333
|
*
|
@@ -1312,4 +1338,11 @@ class TableView {
|
|
1312
1338
|
this.eventManager.destroy();
|
1313
1339
|
}
|
1314
1340
|
}
|
1341
|
+
function _getAriaColcount2() {
|
1342
|
+
return parseInt(this.hot.rootElement.getAttribute((0, _a11y.A11Y_COLCOUNT)()[0]), 10);
|
1343
|
+
}
|
1344
|
+
function _updateAriaColcount2(delta) {
|
1345
|
+
const colCount = _classPrivateMethodGet(this, _getAriaColcount, _getAriaColcount2).call(this) + delta;
|
1346
|
+
(0, _element.setAttribute)(this.hot.rootElement, ...(0, _a11y.A11Y_COLCOUNT)(colCount));
|
1347
|
+
}
|
1315
1348
|
var _default = exports.default = TableView;
|