1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
9 } = require("resource://devtools/client/accessibility/utils/l10n.js");
15 this.isPicking
= false;
17 this.onPickerAccessibleHovered
= this.onPickerAccessibleHovered
.bind(this);
18 this.onPickerAccessiblePicked
= this.onPickerAccessiblePicked
.bind(this);
19 this.onPickerAccessiblePreviewed
=
20 this.onPickerAccessiblePreviewed
.bind(this);
21 this.onPickerAccessibleCanceled
=
22 this.onPickerAccessibleCanceled
.bind(this);
26 return this._panel
._toolbox
;
29 get accessibilityProxy() {
30 return this._panel
.accessibilityProxy
;
34 return this.toolbox
.pickerButton
;
38 return this._panel
._telemetry
;
46 this.toolbox
.emit(event
, data
);
50 * Select accessible object in the tree.
51 * @param {Object} accessible
52 * Accessiblle object to be selected in the inspector tree.
55 this._panel
.selectAccessible(accessible
);
59 * Highlight accessible object in the tree.
60 * @param {Object} accessible
61 * Accessiblle object to be selected in the inspector tree.
63 highlight(accessible
) {
64 this._panel
.highlightAccessible(accessible
);
68 return L10N
.getStr(key
);
72 * Override the default presentation of the picker button in toolbox's top
76 this.pickerButton
.description
= this.getStr("accessibility.pick");
77 this.pickerButton
.className
= "accessibility";
78 this.pickerButton
.disabled
= !this.accessibilityProxy
.enabled
;
79 if (!this.accessibilityProxy
.enabled
&& this.isPicking
) {
85 * Handle an event when a new accessible object is hovered over.
86 * @param {Object} accessible
87 * newly hovered accessible object
89 onPickerAccessibleHovered(accessible
) {
91 this.emit("picker-accessible-hovered", accessible
);
92 this.highlight(accessible
);
97 * Handle an event when a new accessible is picked by the user.
98 * @param {Object} accessible
99 * newly picked accessible object
101 onPickerAccessiblePicked(accessible
) {
103 this.select(accessible
);
109 * Handle an event when a new accessible is previewed by the user.
110 * @param {Object} accessible
111 * newly previewed accessible object
113 onPickerAccessiblePreviewed(accessible
) {
115 this.select(accessible
);
120 * Handle an event when picking is cancelled by the user.s
122 onPickerAccessibleCanceled() {
124 this.emit("picker-accessible-canceled");
138 if (!this.isPicking
) {
142 this.isPicking
= false;
143 this.pickerButton
.isChecked
= false;
145 await
this.accessibilityProxy
.cancelPick();
146 this._telemetry
.toolClosed("accessibility_picker", this);
147 this.emit("picker-stopped");
152 * @param {Boolean} doFocus
153 * If true, move keyboard focus into content.
155 async
start(doFocus
= true) {
156 if (this.isPicking
) {
160 this.isPicking
= true;
161 this.pickerButton
.isChecked
= true;
163 await
this.accessibilityProxy
.pick(
165 this.onPickerAccessibleHovered
,
166 this.onPickerAccessiblePicked
,
167 this.onPickerAccessiblePreviewed
,
168 this.onPickerAccessibleCanceled
171 this._telemetry
.toolOpened("accessibility_picker", this);
172 this.emit("picker-started");
176 * Toggle between starting and canceling the picker.
177 * @param {Boolean} doFocus
178 * If true, move keyboard focus into content.
181 if (this.isPicking
) {
182 return this.cancel();
185 return this.start(doFocus
);
189 exports
.Picker
= Picker
;