LibWeb: Implement HTMLOptionElement.label more correctly

This shouldn't just be a simple reflection of the label attribute.
It also needs fallback to the HTMLOptionElement.text property if the
label attribute is absent.
This commit is contained in:
Andreas Kling 2024-11-15 11:14:28 +01:00 committed by Andreas Kling
parent f7993495bd
commit 4c2d4cdf50
Notes: github-actions[bot] 2024-11-15 11:55:47 +00:00
4 changed files with 25 additions and 5 deletions

View file

@ -99,6 +99,23 @@ static void concatenate_descendants_text_content(DOM::Node const* node, StringBu
});
}
// https://html.spec.whatwg.org/multipage/form-elements.html#dom-option-label
String HTMLOptionElement::label() const
{
// The label IDL attribute, on getting, if there is a label content attribute,
// must return that attribute's value; otherwise, it must return the element's label.
if (auto label = attribute(HTML::AttributeNames::label); label.has_value())
return label.release_value();
return text();
}
// https://html.spec.whatwg.org/multipage/form-elements.html#dom-option-label
void HTMLOptionElement::set_label(String const& label)
{
MUST(set_attribute(HTML::AttributeNames::label, label));
}
// https://html.spec.whatwg.org/multipage/form-elements.html#dom-option-text
String HTMLOptionElement::text() const
{

View file

@ -29,6 +29,9 @@ public:
String text() const;
void set_text(String const&);
[[nodiscard]] String label() const;
void set_label(String const&);
int index() const;
bool disabled() const;

View file

@ -7,7 +7,7 @@ interface HTMLOptionElement : HTMLElement {
[CEReactions, Reflect] attribute boolean disabled;
readonly attribute HTMLFormElement? form;
[CEReactions, Reflect] attribute DOMString label;
[CEReactions] attribute DOMString label;
[CEReactions, Reflect=selected] attribute boolean defaultSelected;
attribute boolean selected;
[CEReactions] attribute DOMString value;

View file

@ -6,18 +6,18 @@ Rerun
Found 12 tests
7 Pass
5 Fail
9 Pass
3 Fail
Details
Result Test Name MessagePass No children, no label
Pass No children, empty label
Pass No children, label
Fail No children, namespaced label
Fail Single child, no label
Pass Single child, no label
Pass Single child, empty label
Pass Single child, label
Fail Single child, namespaced label
Fail Two children, no label
Pass Two children, no label
Pass Two children, empty label
Pass Two children, label
Fail Two children, namespaced label