#include #include #include Element::Element(const String& tag_name) : ParentNode(NodeType::ELEMENT_NODE) , m_tag_name(tag_name) { } Element::~Element() { } Attribute* Element::find_attribute(const String& name) { for (auto& attribute : m_attributes) { if (attribute.name() == name) return &attribute; } return nullptr; } const Attribute* Element::find_attribute(const String& name) const { for (auto& attribute : m_attributes) { if (attribute.name() == name) return &attribute; } return nullptr; } String Element::attribute(const String& name) const { if (auto* attribute = find_attribute(name)) return attribute->value(); return { }; } void Element::set_attribute(const String& name, const String& value) { if (auto* attribute = find_attribute(name)) attribute->set_value(value); else m_attributes.append({ name, value }); } void Element::set_attributes(Vector&& attributes) { m_attributes = move(attributes); } RetainPtr Element::create_layout_node() { if (m_tag_name == "html") return adopt(*new LayoutBlock(*this)); if (m_tag_name == "body") return adopt(*new LayoutBlock(*this)); if (m_tag_name == "h1") return adopt(*new LayoutBlock(*this)); if (m_tag_name == "p") return adopt(*new LayoutBlock(*this)); if (m_tag_name == "b") return adopt(*new LayoutInline(*this)); return nullptr; }