From 3425aa0737e273bfa922c44ca5a40d549e2c5e93 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Mon, 17 Mar 2025 16:00:12 +0000 Subject: [PATCH] LibWeb/DOM: Introduce an ElementReference type We have the "Element, but also maybe a pseudo-element of it" concept in a lot of places, so let's wrap it up in a single type to make it easier to deal with. --- Libraries/LibWeb/DOM/ElementReference.h | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Libraries/LibWeb/DOM/ElementReference.h diff --git a/Libraries/LibWeb/DOM/ElementReference.h b/Libraries/LibWeb/DOM/ElementReference.h new file mode 100644 index 00000000000..d8c23b38f6b --- /dev/null +++ b/Libraries/LibWeb/DOM/ElementReference.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2025, Sam Atkins + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include + +namespace Web::DOM { + +class ElementReference { +public: + ElementReference(GC::Ref element, Optional pseudo_element = {}) + : m_element(element) + , m_pseudo_element(move(pseudo_element)) + { + } + + Element& element() { return m_element; } + Element const& element() const { return m_element; } + Optional pseudo_element() const { return m_pseudo_element; } + + void visit(GC::Cell::Visitor& visitor) const + { + visitor.visit(m_element); + } + +private: + GC::Ref m_element; + Optional m_pseudo_element; +}; + +}