Browse Source

LibWeb: Make HTML{Button,Select,TextArea}Element focusable

From the HTML spec:

    Modulo platform conventions, it is suggested that the following
    elements should be considered as focusable areas and be sequentially
    focusable:

      ...
    - button elements
    - select elements
    - textarea elements
      ...

Also add a spec link to the existing HTMLAnchorElement::is_focusable().

Note that this still doesn't allow triggering keyboard-focused buttons,
checkboxes, or radio buttons - we don't seem to run the expected
activation behavior for any of them.
Linus Groh 3 years ago
parent
commit
de53eb825a

+ 2 - 0
Userland/Libraries/LibWeb/HTML/HTMLAnchorElement.h

@@ -23,6 +23,8 @@ public:
     String target() const { return attribute(HTML::AttributeNames::target); }
     String download() const { return attribute(HTML::AttributeNames::download); }
 
+    // ^EventTarget
+    // https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute:the-a-element
     virtual bool is_focusable() const override { return has_attribute(HTML::AttributeNames::href); }
 
     virtual bool is_html_anchor_element() const override { return true; }

+ 4 - 0
Userland/Libraries/LibWeb/HTML/HTMLButtonElement.h

@@ -37,6 +37,10 @@ public:
     TypeAttributeState type_state() const;
     void set_type(String const&);
 
+    // ^EventTarget
+    // https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute:the-button-element
+    virtual bool is_focusable() const override { return true; }
+
     // ^FormAssociatedElement
     // https://html.spec.whatwg.org/multipage/forms.html#category-listed
     virtual bool is_listed() const override { return true; }

+ 4 - 0
Userland/Libraries/LibWeb/HTML/HTMLSelectElement.h

@@ -34,6 +34,10 @@ public:
 
     NonnullRefPtrVector<HTMLOptionElement> list_of_options() const;
 
+    // ^EventTarget
+    // https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute:the-select-element
+    virtual bool is_focusable() const override { return true; }
+
     // ^FormAssociatedElement
     // https://html.spec.whatwg.org/multipage/forms.html#category-listed
     virtual bool is_listed() const override { return true; }

+ 4 - 0
Userland/Libraries/LibWeb/HTML/HTMLTextAreaElement.h

@@ -29,6 +29,10 @@ public:
         return textarea;
     }
 
+    // ^EventTarget
+    // https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute:the-textarea-element
+    virtual bool is_focusable() const override { return true; }
+
     // ^FormAssociatedElement
     // https://html.spec.whatwg.org/multipage/forms.html#category-listed
     virtual bool is_listed() const override { return true; }