This repository has been archived by the owner on Jan 11, 2023. It is now read-only.
/
accessible.js
122 lines (107 loc) 路 2.94 KB
/
accessible.js
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
113
114
115
116
117
118
119
120
121
122
/* 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/>. */
// ReactJS
const PropTypes = require("prop-types");
const { button, span } = require("react-dom-factories");
// Utils
const { isGrip, wrapRender } = require("./rep-utils");
const { rep: StringRep } = require("./string");
/**
* Renders Accessible object.
*/
Accessible.propTypes = {
object: PropTypes.object.isRequired,
inspectIconTitle: PropTypes.string,
nameMaxLength: PropTypes.number,
onAccessibleClick: PropTypes.func,
onAccessibleMouseOver: PropTypes.func,
onAccessibleMouseOut: PropTypes.func,
onInspectIconClick: PropTypes.func,
roleFirst: PropTypes.bool,
separatorText: PropTypes.string
};
function Accessible(props) {
const {
object,
inspectIconTitle,
nameMaxLength,
onAccessibleClick,
onAccessibleMouseOver,
onAccessibleMouseOut,
onInspectIconClick,
roleFirst,
separatorText
} = props;
const elements = getElements(object, nameMaxLength, roleFirst, separatorText);
const isInTree = object.preview && object.preview.isConnected === true;
const baseConfig = {
"data-link-actor-id": object.actor,
className: "objectBox objectBox-accessible"
};
let inspectIcon;
if (isInTree) {
if (onAccessibleClick) {
Object.assign(baseConfig, {
onClick: _ => onAccessibleClick(object),
className: `${baseConfig.className} clickable`
});
}
if (onAccessibleMouseOver) {
Object.assign(baseConfig, {
onMouseOver: _ => onAccessibleMouseOver(object)
});
}
if (onAccessibleMouseOut) {
Object.assign(baseConfig, {
onMouseOut: onAccessibleMouseOut
});
}
if (onInspectIconClick) {
inspectIcon = button({
className: "open-accessibility-inspector",
title: inspectIconTitle,
onClick: e => {
if (onAccessibleClick) {
e.stopPropagation();
}
onInspectIconClick(object, e);
}
});
}
}
return span(baseConfig, ...elements, inspectIcon);
}
function getElements(
grip,
nameMaxLength,
roleFirst = false,
separatorText = ": "
) {
const { name, role } = grip.preview;
const elements = [];
if (name) {
elements.push(
StringRep({
className: "accessible-name",
object: name,
cropLimit: nameMaxLength
}),
span({ className: "separator" }, separatorText)
);
}
elements.push(span({ className: "accessible-role" }, role));
return roleFirst ? elements.reverse() : elements;
}
// Registration
function supportsObject(object, noGrip = false) {
if (noGrip === true || !isGrip(object)) {
return false;
}
return object.preview && object.typeName && object.typeName === "accessible";
}
// Exports from this module
module.exports = {
rep: wrapRender(Accessible),
supportsObject
};