mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-01 05:39:11 +00:00
LibWeb/HTML: Update get_an_elements_target() to current spec
This commit is contained in:
parent
8dfd382e12
commit
9254994687
Notes:
github-actions[bot]
2025-01-31 17:28:29 +00:00
Author: https://github.com/AtkinsSJ
Commit: 9254994687
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3402
Reviewed-by: https://github.com/ADKaster ✅
Reviewed-by: https://github.com/shannonbooth
Reviewed-by: https://github.com/tcl3 ✅
5 changed files with 22 additions and 17 deletions
|
@ -61,9 +61,9 @@ private:
|
||||||
{
|
{
|
||||||
queue_an_element_task(source, move(steps));
|
queue_an_element_task(source, move(steps));
|
||||||
}
|
}
|
||||||
virtual String hyperlink_element_utils_get_an_elements_target() const override
|
virtual String hyperlink_element_utils_get_an_elements_target(Optional<String> target) const override
|
||||||
{
|
{
|
||||||
return get_an_elements_target();
|
return get_an_elements_target(target);
|
||||||
}
|
}
|
||||||
virtual TokenizedFeature::NoOpener hyperlink_element_utils_get_an_elements_noopener(StringView target) const override
|
virtual TokenizedFeature::NoOpener hyperlink_element_utils_get_an_elements_noopener(StringView target) const override
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,9 +44,9 @@ private:
|
||||||
{
|
{
|
||||||
queue_an_element_task(source, move(steps));
|
queue_an_element_task(source, move(steps));
|
||||||
}
|
}
|
||||||
virtual String hyperlink_element_utils_get_an_elements_target() const override
|
virtual String hyperlink_element_utils_get_an_elements_target(Optional<String> target) const override
|
||||||
{
|
{
|
||||||
return get_an_elements_target();
|
return get_an_elements_target(target);
|
||||||
}
|
}
|
||||||
virtual TokenizedFeature::NoOpener hyperlink_element_utils_get_an_elements_noopener(StringView target) const override
|
virtual TokenizedFeature::NoOpener hyperlink_element_utils_get_an_elements_noopener(StringView target) const override
|
||||||
{
|
{
|
||||||
|
|
|
@ -907,21 +907,26 @@ Optional<ARIA::Role> HTMLElement::default_role() const
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/semantics.html#get-an-element's-target
|
// https://html.spec.whatwg.org/multipage/semantics.html#get-an-element's-target
|
||||||
String HTMLElement::get_an_elements_target() const
|
String HTMLElement::get_an_elements_target(Optional<String> target) const
|
||||||
{
|
{
|
||||||
// To get an element's target, given an a, area, or form element element, run these steps:
|
// To get an element's target, given an a, area, or form element element, and an optional string-or-null target (default null), run these steps:
|
||||||
|
|
||||||
// 1. If element has a target attribute, then return that attribute's value.
|
// 1. If target is null, then:
|
||||||
auto maybe_target = attribute(AttributeNames::target);
|
if (!target.has_value()) {
|
||||||
if (maybe_target.has_value())
|
// 1. If element has a target attribute, then set target to that attribute's value.
|
||||||
return maybe_target.release_value();
|
if (auto maybe_target = attribute(AttributeNames::target); maybe_target.has_value()) {
|
||||||
|
target = maybe_target.release_value();
|
||||||
|
}
|
||||||
|
// FIXME: 2. Otherwise, if element's node document contains a base element with a target attribute,
|
||||||
|
// set target to the value of the target attribute of the first such base element.
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: 2. If element's node document contains a base element with a
|
// 2. If target is not null, and contains an ASCII tab or newline and a U+003C (<), then set target to "_blank".
|
||||||
// target attribute, then return the value of the target attribute of the
|
if (target.has_value() && target->bytes_as_string_view().contains("\t\n\r"sv) && target->contains('<'))
|
||||||
// first such base element.
|
target = "_blank"_string;
|
||||||
|
|
||||||
// 3. Return the empty string.
|
// 3. Return target.
|
||||||
return String {};
|
return target.value_or({});
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/links.html#get-an-element's-noopener
|
// https://html.spec.whatwg.org/multipage/links.html#get-an-element's-noopener
|
||||||
|
|
|
@ -116,7 +116,7 @@ public:
|
||||||
|
|
||||||
virtual Optional<ARIA::Role> default_role() const override;
|
virtual Optional<ARIA::Role> default_role() const override;
|
||||||
|
|
||||||
String get_an_elements_target() const;
|
String get_an_elements_target(Optional<String> target = {}) const;
|
||||||
TokenizedFeature::NoOpener get_an_elements_noopener(StringView target) const;
|
TokenizedFeature::NoOpener get_an_elements_noopener(StringView target) const;
|
||||||
|
|
||||||
WebIDL::ExceptionOr<GC::Ref<ElementInternals>> attach_internals();
|
WebIDL::ExceptionOr<GC::Ref<ElementInternals>> attach_internals();
|
||||||
|
|
|
@ -58,7 +58,7 @@ protected:
|
||||||
virtual Optional<String> hyperlink_element_utils_referrerpolicy() const = 0;
|
virtual Optional<String> hyperlink_element_utils_referrerpolicy() const = 0;
|
||||||
virtual bool hyperlink_element_utils_is_html_anchor_element() const = 0;
|
virtual bool hyperlink_element_utils_is_html_anchor_element() const = 0;
|
||||||
virtual bool hyperlink_element_utils_is_connected() const = 0;
|
virtual bool hyperlink_element_utils_is_connected() const = 0;
|
||||||
virtual String hyperlink_element_utils_get_an_elements_target() const = 0;
|
virtual String hyperlink_element_utils_get_an_elements_target(Optional<String> target = {}) const = 0;
|
||||||
virtual TokenizedFeature::NoOpener hyperlink_element_utils_get_an_elements_noopener(StringView target) const = 0;
|
virtual TokenizedFeature::NoOpener hyperlink_element_utils_get_an_elements_noopener(StringView target) const = 0;
|
||||||
|
|
||||||
virtual void hyperlink_element_utils_queue_an_element_task(HTML::Task::Source source, Function<void()> steps) = 0;
|
virtual void hyperlink_element_utils_queue_an_element_task(HTML::Task::Source source, Function<void()> steps) = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue