From b74bf31a53560c1d0cc2d928d0db52e4f6734610 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 22 Apr 2021 22:14:55 +0200 Subject: LibWeb: Implement document.anchors This returns an HTMLCollection of all elements in the document that have a "name" attribute. --- Userland/Libraries/LibWeb/DOM/Document.cpp | 10 ++++++++++ Userland/Libraries/LibWeb/DOM/Document.h | 1 + Userland/Libraries/LibWeb/DOM/Document.idl | 1 + 3 files changed, 12 insertions(+) (limited to 'Userland/Libraries') diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index e4f9ae1f47..de8102c8c5 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -517,6 +518,15 @@ NonnullRefPtr Document::applets() return HTMLCollection::create(*this, [] { return false; }); } +NonnullRefPtr Document::anchors() +{ + // FIXME: This should return the same HTMLCollection object every time, + // but that would cause a reference cycle since HTMLCollection refs the root. + return HTMLCollection::create(*this, [](Element const& element) { + return is(element) && element.has_attribute(HTML::AttributeNames::name); + }); +} + Color Document::link_color() const { if (m_link_color.has_value()) diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h index a470b0379b..f070ac17fd 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.h +++ b/Userland/Libraries/LibWeb/DOM/Document.h @@ -141,6 +141,7 @@ public: NonnullRefPtr get_elements_by_class_name(FlyString const&); NonnullRefPtr applets(); + NonnullRefPtr anchors(); const String& source() const { return m_source; } void set_source(const String& source) { m_source = source; } diff --git a/Userland/Libraries/LibWeb/DOM/Document.idl b/Userland/Libraries/LibWeb/DOM/Document.idl index cc31659525..07b11682dd 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.idl +++ b/Userland/Libraries/LibWeb/DOM/Document.idl @@ -19,6 +19,7 @@ interface Document : Node { HTMLCollection getElementsByClassName(DOMString className); readonly attribute HTMLCollection applets; + readonly attribute HTMLCollection anchors; Element createElement(DOMString tagName); Element createElementNS(DOMString? namespace, DOMString qualifiedName); -- cgit v1.2.3