From 8e710b16de32fbe282e8c4a42f8728f74b0df98b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 21 Oct 2019 12:04:17 +0200 Subject: [PATCH] LibHTML: Clicking on a fragment link should prefer over It turns out that other engines prefer over when deciding which anchor element to jump to. This patch aligns LibHTML's behavior with WebKit and Gecko. Thanks to "/cam 2" for bringing this up. :^) --- Libraries/LibHTML/HtmlView.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Libraries/LibHTML/HtmlView.cpp b/Libraries/LibHTML/HtmlView.cpp index 66eb4462d7..b467290cdf 100644 --- a/Libraries/LibHTML/HtmlView.cpp +++ b/Libraries/LibHTML/HtmlView.cpp @@ -319,17 +319,20 @@ void HtmlView::scroll_to_anchor(const StringView& name) if (!document()) return; - HTMLAnchorElement* element = nullptr; - document()->for_each_in_subtree([&](auto& node) { - if (is(node)) { - auto& anchor_element = to(node); - if (anchor_element.name() == name) { - element = &anchor_element; - return IterationDecision::Break; + const HTMLAnchorElement* element = nullptr; + if (auto* candidate = document()->get_element_by_id(name)) { + if (is(*candidate)) + element = to(candidate); + } + if (!element) { + auto candidates = document()->get_elements_by_name(name); + for (auto* candidate : candidates) { + if (is(*candidate)) { + element = to(candidate); + break; } } - return IterationDecision::Continue; - }); + } if (!element) { dbg() << "HtmlView::scroll_to_anchor(): Anchor not found: '" << name << "'";