зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1461522 - Factor out a focusableSelector utility; r=jdescottes
We will use this later when we introduce a MenuList class since it will want to manage focus for its menu items. This patch also extends the definition of focusable elements somewhat. MozReview-Commit-ID: 3shnC0t79rF --HG-- extra : rebase_source : 177e05adeef9708bdb78d46fda5286216db6cbb7
This commit is contained in:
Родитель
b8e1efcc44
Коммит
e9258ddad8
|
@ -0,0 +1,19 @@
|
||||||
|
/* 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";
|
||||||
|
|
||||||
|
// Simplied selector targetting elements that can receive the focus, full
|
||||||
|
// version at
|
||||||
|
// http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus
|
||||||
|
// .
|
||||||
|
exports.focusableSelector = [
|
||||||
|
"a[href]:not([tabindex='-1'])",
|
||||||
|
"button:not([disabled]):not([tabindex='-1'])",
|
||||||
|
"iframe:not([tabindex='-1'])",
|
||||||
|
"input:not([disabled]):not([tabindex='-1'])",
|
||||||
|
"select:not([disabled]):not([tabindex='-1'])",
|
||||||
|
"textarea:not([disabled]):not([tabindex='-1'])",
|
||||||
|
"[tabindex]:not([tabindex='-1'])",
|
||||||
|
].join(", ");
|
|
@ -30,6 +30,7 @@ DevToolsModules(
|
||||||
'DOMHelpers.jsm',
|
'DOMHelpers.jsm',
|
||||||
'enum.js',
|
'enum.js',
|
||||||
'file-saver.js',
|
'file-saver.js',
|
||||||
|
'focus.js',
|
||||||
'getjson.js',
|
'getjson.js',
|
||||||
'inplace-editor.js',
|
'inplace-editor.js',
|
||||||
'key-shortcuts.js',
|
'key-shortcuts.js',
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
const EventEmitter = require("devtools/shared/event-emitter");
|
const EventEmitter = require("devtools/shared/event-emitter");
|
||||||
const {TooltipToggle} = require("devtools/client/shared/widgets/tooltip/TooltipToggle");
|
const {TooltipToggle} = require("devtools/client/shared/widgets/tooltip/TooltipToggle");
|
||||||
|
const {focusableSelector} = require("devtools/client/shared/focus");
|
||||||
const {getCurrentZoom} = require("devtools/shared/layout/utils");
|
const {getCurrentZoom} = require("devtools/shared/layout/utils");
|
||||||
const {listenOnce} = require("devtools/shared/async-utils");
|
const {listenOnce} = require("devtools/shared/async-utils");
|
||||||
|
|
||||||
|
@ -759,13 +760,10 @@ HTMLTooltip.prototype = {
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the tootlip is configured to autofocus and a focusable element can be found,
|
* If the tooltip is configured to autofocus and a focusable element can be
|
||||||
* focus it.
|
* found, focus it.
|
||||||
*/
|
*/
|
||||||
_maybeFocusTooltip: function() {
|
_maybeFocusTooltip: function() {
|
||||||
// Simplied selector targetting elements that can receive the focus, full version at
|
|
||||||
// http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus .
|
|
||||||
const focusableSelector = "a, button, iframe, input, select, textarea";
|
|
||||||
const focusableElement = this.panel.querySelector(focusableSelector);
|
const focusableElement = this.panel.querySelector(focusableSelector);
|
||||||
if (this.autofocus && focusableElement) {
|
if (this.autofocus && focusableElement) {
|
||||||
focusableElement.focus();
|
focusableElement.focus();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче