mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:17:45 +00:00
LibWeb: Implement Element.setAttributeNode{,NS}()
This commit is contained in:
parent
8c5c78f1f1
commit
fb6d6a985f
7 changed files with 33 additions and 8 deletions
|
@ -18,6 +18,11 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<Attr>> Attr::create(Document& document, Dep
|
||||||
return MUST_OR_THROW_OOM(document.heap().allocate<Attr>(document.realm(), document, QualifiedName(move(local_name), {}, {}), move(value), owner_element));
|
return MUST_OR_THROW_OOM(document.heap().allocate<Attr>(document.realm(), document, QualifiedName(move(local_name), {}, {}), move(value), owner_element));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<Attr>> Attr::create(Document& document, QualifiedName qualified_name, DeprecatedString value, Element const* owner_element)
|
||||||
|
{
|
||||||
|
return MUST_OR_THROW_OOM(document.heap().allocate<Attr>(document.realm(), document, move(qualified_name), move(value), owner_element));
|
||||||
|
}
|
||||||
|
|
||||||
JS::NonnullGCPtr<Attr> Attr::clone(Document& document)
|
JS::NonnullGCPtr<Attr> Attr::clone(Document& document)
|
||||||
{
|
{
|
||||||
return *heap().allocate<Attr>(realm(), document, m_qualified_name, m_value, nullptr).release_allocated_value_but_fixme_should_propagate_errors();
|
return *heap().allocate<Attr>(realm(), document, m_qualified_name, m_value, nullptr).release_allocated_value_but_fixme_should_propagate_errors();
|
||||||
|
|
|
@ -18,7 +18,8 @@ class Attr final : public Node {
|
||||||
WEB_PLATFORM_OBJECT(Attr, Node);
|
WEB_PLATFORM_OBJECT(Attr, Node);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<Attr>> create(Document&, DeprecatedFlyString local_name, DeprecatedString value, Element const* = nullptr);
|
static WebIDL::ExceptionOr<JS::NonnullGCPtr<Attr>> create(Document&, QualifiedName, DeprecatedString value = "", Element const* = nullptr);
|
||||||
|
static WebIDL::ExceptionOr<JS::NonnullGCPtr<Attr>> create(Document&, DeprecatedFlyString local_name, DeprecatedString value = "", Element const* = nullptr);
|
||||||
JS::NonnullGCPtr<Attr> clone(Document&);
|
JS::NonnullGCPtr<Attr> clone(Document&);
|
||||||
|
|
||||||
virtual ~Attr() override = default;
|
virtual ~Attr() override = default;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
|
* Copyright (c) 2018-2023, Andreas Kling <kling@serenityos.org>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -197,6 +197,20 @@ WebIDL::ExceptionOr<void> Element::set_attribute_ns(DeprecatedFlyString const& n
|
||||||
return set_attribute(extracted_qualified_name.local_name(), value);
|
return set_attribute(extracted_qualified_name.local_name(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://dom.spec.whatwg.org/#dom-element-setattributenode
|
||||||
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> Element::set_attribute_node(Attr& attr)
|
||||||
|
{
|
||||||
|
// The setAttributeNode(attr) and setAttributeNodeNS(attr) methods steps are to return the result of setting an attribute given attr and this.
|
||||||
|
return m_attributes->set_attribute(attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://dom.spec.whatwg.org/#dom-element-setattributenodens
|
||||||
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> Element::set_attribute_node_ns(Attr& attr)
|
||||||
|
{
|
||||||
|
// The setAttributeNode(attr) and setAttributeNodeNS(attr) methods steps are to return the result of setting an attribute given attr and this.
|
||||||
|
return m_attributes->set_attribute(attr);
|
||||||
|
}
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#dom-element-removeattribute
|
// https://dom.spec.whatwg.org/#dom-element-removeattribute
|
||||||
void Element::remove_attribute(DeprecatedFlyString const& name)
|
void Element::remove_attribute(DeprecatedFlyString const& name)
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,6 +71,8 @@ public:
|
||||||
DeprecatedString get_attribute(DeprecatedFlyString const& name) const;
|
DeprecatedString get_attribute(DeprecatedFlyString const& name) const;
|
||||||
WebIDL::ExceptionOr<void> set_attribute(DeprecatedFlyString const& name, DeprecatedString const& value);
|
WebIDL::ExceptionOr<void> set_attribute(DeprecatedFlyString const& name, DeprecatedString const& value);
|
||||||
WebIDL::ExceptionOr<void> set_attribute_ns(DeprecatedFlyString const& namespace_, DeprecatedFlyString const& qualified_name, DeprecatedString const& value);
|
WebIDL::ExceptionOr<void> set_attribute_ns(DeprecatedFlyString const& namespace_, DeprecatedFlyString const& qualified_name, DeprecatedString const& value);
|
||||||
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> set_attribute_node(Attr&);
|
||||||
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> set_attribute_node_ns(Attr&);
|
||||||
void remove_attribute(DeprecatedFlyString const& name);
|
void remove_attribute(DeprecatedFlyString const& name);
|
||||||
WebIDL::ExceptionOr<bool> toggle_attribute(DeprecatedFlyString const& name, Optional<bool> force);
|
WebIDL::ExceptionOr<bool> toggle_attribute(DeprecatedFlyString const& name, Optional<bool> force);
|
||||||
size_t attribute_list_size() const { return m_attributes->length(); }
|
size_t attribute_list_size() const { return m_attributes->length(); }
|
||||||
|
|
|
@ -30,6 +30,9 @@ interface Element : Node {
|
||||||
DOMString? getAttribute(DOMString qualifiedName);
|
DOMString? getAttribute(DOMString qualifiedName);
|
||||||
undefined setAttribute(DOMString qualifiedName, DOMString value);
|
undefined setAttribute(DOMString qualifiedName, DOMString value);
|
||||||
[CEReactions] undefined setAttributeNS(DOMString? namespace , DOMString qualifiedName , DOMString value);
|
[CEReactions] undefined setAttributeNS(DOMString? namespace , DOMString qualifiedName , DOMString value);
|
||||||
|
[CEReactions] Attr? setAttributeNode(Attr attr);
|
||||||
|
[CEReactions] Attr? setAttributeNodeNS(Attr attr);
|
||||||
|
|
||||||
undefined removeAttribute(DOMString qualifiedName);
|
undefined removeAttribute(DOMString qualifiedName);
|
||||||
[CEReactions] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
|
[CEReactions] boolean toggleAttribute(DOMString qualifiedName, optional boolean force);
|
||||||
boolean hasAttribute(DOMString qualifiedName);
|
boolean hasAttribute(DOMString qualifiedName);
|
||||||
|
|
|
@ -95,13 +95,13 @@ Attr const* NamedNodeMap::get_named_item_ns(StringView namespace_, StringView lo
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#dom-namednodemap-setnameditem
|
// https://dom.spec.whatwg.org/#dom-namednodemap-setnameditem
|
||||||
WebIDL::ExceptionOr<Attr const*> NamedNodeMap::set_named_item(Attr& attribute)
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> NamedNodeMap::set_named_item(Attr& attribute)
|
||||||
{
|
{
|
||||||
return set_attribute(attribute);
|
return set_attribute(attribute);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#dom-namednodemap-setnameditemns
|
// https://dom.spec.whatwg.org/#dom-namednodemap-setnameditemns
|
||||||
WebIDL::ExceptionOr<Attr const*> NamedNodeMap::set_named_item_ns(Attr& attribute)
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> NamedNodeMap::set_named_item_ns(Attr& attribute)
|
||||||
{
|
{
|
||||||
return set_attribute(attribute);
|
return set_attribute(attribute);
|
||||||
}
|
}
|
||||||
|
@ -195,7 +195,7 @@ Attr const* NamedNodeMap::get_attribute_ns(StringView namespace_, StringView loc
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#concept-element-attributes-set
|
// https://dom.spec.whatwg.org/#concept-element-attributes-set
|
||||||
WebIDL::ExceptionOr<Attr const*> NamedNodeMap::set_attribute(Attr& attribute)
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> NamedNodeMap::set_attribute(Attr& attribute)
|
||||||
{
|
{
|
||||||
// 1. If attr’s element is neither null nor element, throw an "InUseAttributeError" DOMException.
|
// 1. If attr’s element is neither null nor element, throw an "InUseAttributeError" DOMException.
|
||||||
if ((attribute.owner_element() != nullptr) && (attribute.owner_element() != &associated_element()))
|
if ((attribute.owner_element() != nullptr) && (attribute.owner_element() != &associated_element()))
|
||||||
|
|
|
@ -37,8 +37,8 @@ public:
|
||||||
Attr const* item(u32 index) const;
|
Attr const* item(u32 index) const;
|
||||||
Attr const* get_named_item(StringView qualified_name) const;
|
Attr const* get_named_item(StringView qualified_name) const;
|
||||||
Attr const* get_named_item_ns(StringView namespace_, StringView local_name) const;
|
Attr const* get_named_item_ns(StringView namespace_, StringView local_name) const;
|
||||||
WebIDL::ExceptionOr<Attr const*> set_named_item(Attr& attribute);
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> set_named_item(Attr& attribute);
|
||||||
WebIDL::ExceptionOr<Attr const*> set_named_item_ns(Attr& attribute);
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> set_named_item_ns(Attr& attribute);
|
||||||
WebIDL::ExceptionOr<Attr const*> remove_named_item(StringView qualified_name);
|
WebIDL::ExceptionOr<Attr const*> remove_named_item(StringView qualified_name);
|
||||||
WebIDL::ExceptionOr<Attr const*> remove_named_item_ns(StringView namespace_, StringView local_name);
|
WebIDL::ExceptionOr<Attr const*> remove_named_item_ns(StringView namespace_, StringView local_name);
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ public:
|
||||||
Attr* get_attribute_ns(StringView namespace_, StringView local_name, size_t* item_index = nullptr);
|
Attr* get_attribute_ns(StringView namespace_, StringView local_name, size_t* item_index = nullptr);
|
||||||
Attr const* get_attribute(StringView qualified_name, size_t* item_index = nullptr) const;
|
Attr const* get_attribute(StringView qualified_name, size_t* item_index = nullptr) const;
|
||||||
Attr const* get_attribute_ns(StringView namespace_, StringView local_name, size_t* item_index = nullptr) const;
|
Attr const* get_attribute_ns(StringView namespace_, StringView local_name, size_t* item_index = nullptr) const;
|
||||||
WebIDL::ExceptionOr<Attr const*> set_attribute(Attr& attribute);
|
WebIDL::ExceptionOr<JS::GCPtr<Attr>> set_attribute(Attr& attribute);
|
||||||
void replace_attribute(Attr& old_attribute, Attr& new_attribute, size_t old_attribute_index);
|
void replace_attribute(Attr& old_attribute, Attr& new_attribute, size_t old_attribute_index);
|
||||||
void append_attribute(Attr& attribute);
|
void append_attribute(Attr& attribute);
|
||||||
Attr const* remove_attribute(StringView qualified_name);
|
Attr const* remove_attribute(StringView qualified_name);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue