112 lines
3.4 KiB
JavaScript
112 lines
3.4 KiB
JavaScript
/* 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;
|