From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- devtools/client/accessibility/provider.js | 112 ++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 devtools/client/accessibility/provider.js (limited to 'devtools/client/accessibility/provider.js') diff --git a/devtools/client/accessibility/provider.js b/devtools/client/accessibility/provider.js new file mode 100644 index 0000000000..f0fc05c628 --- /dev/null +++ b/devtools/client/accessibility/provider.js @@ -0,0 +1,112 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +const { + fetchChildren, +} = require("resource://devtools/client/accessibility/actions/accessibles.js"); + +/** + * Data provider that is responsible for mapping of an accessibles cache to the + * data format that is supported by the TreeView component. + * @param {Map} accessibles accessibles object cache + * @param {Function} dispatch react dispatch function that triggers a redux + * action. + */ + +class Provider { + constructor(accessibles, filtered, dispatch) { + this.accessibles = accessibles; + this.filtered = filtered; + this.dispatch = dispatch; + } + + /** + * Get accessible's cached children if available, if not fetch them from + * backend. + * @param {Object} accessible accessible object whose children to get. + * @returns {Array} arraof of accessible children. + */ + getChildren(accessible) { + if (!accessible || !accessible.actorID || accessible.childCount === 0) { + return []; + } + + const obj = this.accessibles.get(accessible.actorID); + if (!obj || !obj.children) { + return this.dispatch(fetchChildren(accessible)); + } + + return obj.children; + } + + /** + * Return a flag indicating if an accessible object has any children. + * @param {Object} accessible accessible object whose children to get. + * @returns {Boolean} idicator of whether accessible object has children. + */ + hasChildren(accessible) { + return accessible.childCount > 0; + } + + /** + * Get a value for an accessible object. Used to render the second (value) + * column of the accessible tree. Corresponds to an accesible object name, if + * available. + * @param {Object} accessible accessible object + * @returns {String} accessible object value. + */ + getValue(accessible) { + return accessible.name || ""; + } + + /** + * Get a label for an accessible object. Used to render the first column of + * the accessible tree. Corresponds to an accessible object role. + * @param {Object} accessible accessible object + * @returns {String} accessible object label. + */ + getLabel(accessible) { + return accessible.role; + } + + /** + * Get a unique key for an accessible object. Corresponds to an accessible + * front's actorID. + * @param {Object} accessible accessible object + * @returns {String} a key for an accessible object. + */ + getKey(accessible) { + return accessible.actorID; + } + + /** + * Get a type of an accesible object. Corresponds to the type of an accessible + * front. + * @param {Object} accessible accessible object + * @returns {String} accessible object type + */ + getType(accessible) { + return accessible.typeName; + } + + /** + * Get the depth of the accesible object in the accessibility tree. When the + * tree is filtered it is flattened and the level is set to 0. Otherwise use + * internal TreeView level. + * + * @param {Object} accessible + * accessible object + * @param {Number} defaultLevel + * default level provided by the TreeView component. + * + * @returns {null|Number} + * depth level of the accessible object. + */ + getLevel(accessible, defaultLevel) { + return this.filtered ? 0 : defaultLevel; + } +} + +exports.Provider = Provider; -- cgit v1.2.3