blob: f0fc05c628bb8a2787e91c7de2e169715694f1af (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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;
|