mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:47:44 +00:00
LibWeb: Get the first DOM node with a 'title' attribute for tooltip area
Rather than expecting the first parent to have a 'title' attribute, search all ancestors.
This commit is contained in:
parent
4fac577cf0
commit
c503047c71
3 changed files with 11 additions and 1 deletions
|
@ -76,6 +76,15 @@ const HTML::HTMLElement* Node::enclosing_html_element() const
|
||||||
return first_ancestor_of_type<HTML::HTMLElement>();
|
return first_ancestor_of_type<HTML::HTMLElement>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const HTML::HTMLElement* Node::enclosing_html_element_with_attribute(const FlyString& attribute) const
|
||||||
|
{
|
||||||
|
for (auto* node = this; node; node = node->parent()) {
|
||||||
|
if (is<HTML::HTMLElement>(*node) && downcast<HTML::HTMLElement>(*node).has_attribute(attribute))
|
||||||
|
return downcast<HTML::HTMLElement>(node);
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
String Node::text_content() const
|
String Node::text_content() const
|
||||||
{
|
{
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
|
|
|
@ -112,6 +112,7 @@ public:
|
||||||
|
|
||||||
const HTML::HTMLAnchorElement* enclosing_link_element() const;
|
const HTML::HTMLAnchorElement* enclosing_link_element() const;
|
||||||
const HTML::HTMLElement* enclosing_html_element() const;
|
const HTML::HTMLElement* enclosing_html_element() const;
|
||||||
|
const HTML::HTMLElement* enclosing_html_element_with_attribute(const FlyString&) const;
|
||||||
|
|
||||||
String child_text_content() const;
|
String child_text_content() const;
|
||||||
|
|
||||||
|
|
|
@ -357,7 +357,7 @@ bool EventHandler::handle_mousemove(const Gfx::IntPoint& position, unsigned butt
|
||||||
page->client().page_did_request_cursor_change(hovered_node_cursor);
|
page->client().page_did_request_cursor_change(hovered_node_cursor);
|
||||||
|
|
||||||
if (hovered_node_changed) {
|
if (hovered_node_changed) {
|
||||||
RefPtr<HTML::HTMLElement> hovered_html_element = document.hovered_node() ? document.hovered_node()->enclosing_html_element() : nullptr;
|
RefPtr<HTML::HTMLElement> hovered_html_element = document.hovered_node() ? document.hovered_node()->enclosing_html_element_with_attribute(HTML::AttributeNames::title) : nullptr;
|
||||||
if (hovered_html_element && !hovered_html_element->title().is_null()) {
|
if (hovered_html_element && !hovered_html_element->title().is_null()) {
|
||||||
page->client().page_did_enter_tooltip_area(m_frame.to_main_frame_position(position), hovered_html_element->title());
|
page->client().page_did_enter_tooltip_area(m_frame.to_main_frame_position(position), hovered_html_element->title());
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue