mirror of
https://github.com/RGBCube/serenity
synced 2025-05-20 13:55:08 +00:00
LibWeb: Bring handling of anchor elements closer to spec
This commit moves the regular handling of links to the anchor elements' activation behavior, and implements a few auxiliary algorithms as defined by the HTML specification. Note that certain things such as javascript links, fragments and opening a new tab are still handled directly in EventHandler, but they have been moved to handle_mouseup so that it behaves closer to how it would if it was entirely up-to-spec.
This commit is contained in:
parent
034c57f1f9
commit
aaa954f900
8 changed files with 357 additions and 40 deletions
|
@ -11,6 +11,9 @@ namespace Web::HTML {
|
|||
HTMLAnchorElement::HTMLAnchorElement(DOM::Document& document, DOM::QualifiedName qualified_name)
|
||||
: HTMLElement(document, move(qualified_name))
|
||||
{
|
||||
activation_behavior = [this](auto const& event) {
|
||||
run_activation_behavior(event);
|
||||
};
|
||||
}
|
||||
|
||||
HTMLAnchorElement::~HTMLAnchorElement() = default;
|
||||
|
@ -33,4 +36,42 @@ void HTMLAnchorElement::set_hyperlink_element_utils_href(String href)
|
|||
set_attribute(HTML::AttributeNames::href, move(href));
|
||||
}
|
||||
|
||||
void HTMLAnchorElement::run_activation_behavior(Web::DOM::Event const&)
|
||||
{
|
||||
// The activation behavior of an a element element given an event event is:
|
||||
|
||||
// 1. If element has no href attribute, then return.
|
||||
if (href().is_empty())
|
||||
return;
|
||||
|
||||
// 2. Let hyperlinkSuffix be null.
|
||||
Optional<String> hyperlink_suffix {};
|
||||
|
||||
// FIXME: 3. If event's target is an img with an ismap attribute
|
||||
// specified, then:
|
||||
// 3.1. Let x and y be 0.
|
||||
//
|
||||
// 3.2. If event's isTrusted attribute is initialized to true, then
|
||||
// set x to the distance in CSS pixels from the left edge of the image
|
||||
// to the location of the click, and set y to the distance in CSS
|
||||
// pixels from the top edge of the image to the location of the click.
|
||||
//
|
||||
// 3.3. If x is negative, set x to 0.
|
||||
//
|
||||
// 3.4. If y is negative, set y to 0.
|
||||
//
|
||||
// 3.5. Set hyperlinkSuffix to the concatenation of U+003F (?), the
|
||||
// value of x expressed as a base-ten integer using ASCII digits,
|
||||
// U+002C (,), and the value of y expressed as a base-ten integer
|
||||
// using ASCII digits.
|
||||
|
||||
// FIXME: 4. If element has a download attribute, or if the user has
|
||||
// expressed a preference to download the hyperlink, then download the
|
||||
// hyperlink created by element given hyperlinkSuffix.
|
||||
|
||||
// 5. Otherwise, follow the hyperlink created by element given
|
||||
// hyperlinkSuffix.
|
||||
follow_the_hyperlink(hyperlink_suffix);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue