1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-23 16:17:41 +00:00

LibWeb: Implement Node.cloneNode for Attr nodes

This commit is contained in:
Andreas Kling 2022-12-13 13:08:46 +01:00
parent 9a9c8460aa
commit a004d3043f
3 changed files with 12 additions and 6 deletions

View file

@ -15,12 +15,17 @@ namespace Web::DOM {
JS::NonnullGCPtr<Attr> Attr::create(Document& document, FlyString local_name, DeprecatedString value, Element const* owner_element) JS::NonnullGCPtr<Attr> Attr::create(Document& document, FlyString local_name, DeprecatedString value, Element const* owner_element)
{ {
return *document.heap().allocate<Attr>(document.realm(), document, move(local_name), move(value), owner_element); return *document.heap().allocate<Attr>(document.realm(), document, QualifiedName(move(local_name), {}, {}), move(value), owner_element);
} }
Attr::Attr(Document& document, FlyString local_name, DeprecatedString value, Element const* owner_element) JS::NonnullGCPtr<Attr> Attr::clone(Document& document)
{
return *heap().allocate<Attr>(realm(), document, m_qualified_name, m_value, nullptr);
}
Attr::Attr(Document& document, QualifiedName qualified_name, DeprecatedString value, Element const* owner_element)
: Node(document, NodeType::ATTRIBUTE_NODE) : Node(document, NodeType::ATTRIBUTE_NODE)
, m_qualified_name(move(local_name), {}, {}) , m_qualified_name(move(qualified_name))
, m_value(move(value)) , m_value(move(value))
, m_owner_element(owner_element) , m_owner_element(owner_element)
{ {

View file

@ -19,6 +19,7 @@ class Attr final : public Node {
public: public:
static JS::NonnullGCPtr<Attr> create(Document&, FlyString local_name, DeprecatedString value, Element const* = nullptr); static JS::NonnullGCPtr<Attr> create(Document&, FlyString local_name, DeprecatedString value, Element const* = nullptr);
JS::NonnullGCPtr<Attr> clone(Document&);
virtual ~Attr() override = default; virtual ~Attr() override = default;
@ -42,7 +43,7 @@ public:
void handle_attribute_changes(Element&, DeprecatedString const& old_value, DeprecatedString const& new_value); void handle_attribute_changes(Element&, DeprecatedString const& old_value, DeprecatedString const& new_value);
private: private:
Attr(Document&, FlyString local_name, DeprecatedString value, Element const*); Attr(Document&, QualifiedName, DeprecatedString value, Element const*);
virtual void visit_edges(Cell::Visitor&) override; virtual void visit_edges(Cell::Visitor&) override;

View file

@ -750,10 +750,10 @@ JS::NonnullGCPtr<Node> Node::clone_node(Document* document, bool clone_children)
document_type_copy->set_system_id(document_type->system_id()); document_type_copy->set_system_id(document_type->system_id());
copy = move(document_type_copy); copy = move(document_type_copy);
} else if (is<Attr>(this)) { } else if (is<Attr>(this)) {
// FIXME:
// Attr // Attr
// Set copys namespace, namespace prefix, local name, and value to those of node. // Set copys namespace, namespace prefix, local name, and value to those of node.
dbgln("clone_node() not implemented for Attribute"); auto& attr = static_cast<Attr&>(*this);
copy = attr.clone(*document);
} else if (is<Text>(this)) { } else if (is<Text>(this)) {
// Text // Text
auto text = verify_cast<Text>(this); auto text = verify_cast<Text>(this);