mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
LibWeb: Implement popover property and attribute
The popover property now reflects the attribute. It cannot currently use the Reflect IDL concept because the empty string value is special cased.
This commit is contained in:
parent
197f57f5d2
commit
a9669639ce
Notes:
sideshowbarker
2024-07-17 07:25:39 +09:00
Author: https://github.com/lukewarlow Commit: https://github.com/LadybirdBrowser/ladybird/commit/a9669639ce Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/336 Reviewed-by: https://github.com/awesomekling Reviewed-by: https://github.com/tcl3
5 changed files with 34 additions and 2 deletions
|
@ -17,4 +17,4 @@ expected_dir=$(echo $input_dir | sed s/input/expected/)
|
|||
test_name=$(basename $t .html)
|
||||
cd $LADYBIRD_SOURCE_DIR/Build/ladybird
|
||||
mkdir -p $expected_dir
|
||||
./bin/headless-browser $mode_flag --layout-test-mode $input_dir/$test_name.html > $expected_dir/$test_name.txt
|
||||
./bin/Ladybird.app/Contents/MacOS/headless-browser $mode_flag --layout-test-mode $LADYBIRD_SOURCE_DIR/Tests/LibWeb/$input_dir/$test_name.html > $LADYBIRD_SOURCE_DIR/Tests/LibWeb/$expected_dir/$test_name.txt
|
||||
|
|
|
@ -211,6 +211,7 @@ namespace AttributeNames {
|
|||
__ENUMERATE_HTML_ATTRIBUTE(ping) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(placeholder) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(playsinline) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(popover) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(poster) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(preload) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(readonly) \
|
||||
|
|
|
@ -645,6 +645,34 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<ElementInternals>> HTMLElement::attach_inte
|
|||
return { internals };
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/popover.html#dom-popover
|
||||
Optional<String> HTMLElement::popover() const
|
||||
{
|
||||
// FIXME: This should probably be `Reflect` in the IDL.
|
||||
// The popover IDL attribute must reflect the popover attribute, limited to only known values.
|
||||
auto value = get_attribute(HTML::AttributeNames::popover);
|
||||
|
||||
if (!value.has_value())
|
||||
return {};
|
||||
|
||||
if (value.value().is_empty() || value.value().equals_ignoring_ascii_case("auto"sv))
|
||||
return "auto"_string;
|
||||
|
||||
return "manual"_string;
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/popover.html#dom-popover
|
||||
WebIDL::ExceptionOr<void> HTMLElement::set_popover(Optional<String> value)
|
||||
{
|
||||
// FIXME: This should probably be `Reflect` in the IDL.
|
||||
// The popover IDL attribute must reflect the popover attribute, limited to only known values.
|
||||
if (value.has_value())
|
||||
return set_attribute(HTML::AttributeNames::popover, value.release_value());
|
||||
|
||||
remove_attribute(HTML::AttributeNames::popover);
|
||||
return {};
|
||||
}
|
||||
|
||||
void HTMLElement::did_receive_focus()
|
||||
{
|
||||
if (m_content_editable_state != ContentEditableState::True)
|
||||
|
|
|
@ -77,6 +77,9 @@ public:
|
|||
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<ElementInternals>> attach_internals();
|
||||
|
||||
WebIDL::ExceptionOr<void> set_popover(Optional<String> value);
|
||||
Optional<String> popover() const;
|
||||
|
||||
protected:
|
||||
HTMLElement(DOM::Document&, DOM::QualifiedName);
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ interface HTMLElement : Element {
|
|||
[FIXME] undefined showPopover();
|
||||
[FIXME] undefined hidePopover();
|
||||
[FIXME] boolean togglePopover(optional boolean force);
|
||||
[FIXME, CEReactions] attribute DOMString? popover;
|
||||
[CEReactions] attribute DOMString? popover;
|
||||
|
||||
// https://drafts.csswg.org/cssom-view/#extensions-to-the-htmlelement-interface
|
||||
readonly attribute Element? offsetParent;
|
||||
|
|
Loading…
Reference in a new issue