diff --git a/Tests/LibWeb/Text/expected/DOM/Node-isDefaultNamespace.txt b/Tests/LibWeb/Text/expected/DOM/Node-isDefaultNamespace.txt new file mode 100644 index 00000000000..6f1aa7dbfd7 --- /dev/null +++ b/Tests/LibWeb/Text/expected/DOM/Node-isDefaultNamespace.txt @@ -0,0 +1,12 @@ +documentFragment.isDefaultNamespace(null): true +documentFragment.isDefaultNamespace(""): true +documentFragment.isDefaultNamespace("foo"): false +documentFragment.isDefaultNamespace("xmlms"): false +docType.isDefaultNamespace(null): true +docType.isDefaultNamespace(""): true +docType.isDefaultNamespace("foo"): false +docType.isDefaultNamespace("xmlms"): false +element.isDefaultNamespace(null): true +element.isDefaultNamespace(""): true +element.isDefaultNamespace("foo"): false +element.isDefaultNamespace("xmlms"): false diff --git a/Tests/LibWeb/Text/input/DOM/Node-isDefaultNamespace.html b/Tests/LibWeb/Text/input/DOM/Node-isDefaultNamespace.html new file mode 100644 index 00000000000..fe8a9797dea --- /dev/null +++ b/Tests/LibWeb/Text/input/DOM/Node-isDefaultNamespace.html @@ -0,0 +1,31 @@ + + + diff --git a/Userland/Libraries/LibWeb/DOM/Node.cpp b/Userland/Libraries/LibWeb/DOM/Node.cpp index fbfb089decd..097c94547ad 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.cpp +++ b/Userland/Libraries/LibWeb/DOM/Node.cpp @@ -1733,6 +1733,20 @@ Optional Node::lookup_namespace_uri(Optional prefix) const return locate_a_namespace(prefix); } +// https://dom.spec.whatwg.org/#dom-node-isdefaultnamespace +bool Node::is_default_namespace(Optional namespace_) const +{ + // 1. If namespace is the empty string, then set it to null. + if (namespace_.has_value() && namespace_->is_empty()) + namespace_ = {}; + + // 2. Let defaultNamespace be the result of running locate a namespace for this using null. + auto default_namespace = locate_a_namespace({}); + + // 3. Return true if defaultNamespace is the same as namespace; otherwise false. + return default_namespace == namespace_; +} + // https://dom.spec.whatwg.org/#in-a-document-tree bool Node::in_a_document_tree() const { diff --git a/Userland/Libraries/LibWeb/DOM/Node.h b/Userland/Libraries/LibWeb/DOM/Node.h index 1efa4f5cc77..02f7d698c25 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.h +++ b/Userland/Libraries/LibWeb/DOM/Node.h @@ -697,6 +697,7 @@ public: Optional locate_a_namespace(Optional const& prefix) const; Optional lookup_namespace_uri(Optional prefix) const; + bool is_default_namespace(Optional namespace_) const; protected: Node(JS::Realm&, Document&, NodeType); diff --git a/Userland/Libraries/LibWeb/DOM/Node.idl b/Userland/Libraries/LibWeb/DOM/Node.idl index 0b6e88f95e6..f09c7933963 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.idl +++ b/Userland/Libraries/LibWeb/DOM/Node.idl @@ -56,7 +56,7 @@ interface Node : EventTarget { [FIXME] DOMString? lookupPrefix(DOMString? namespace); DOMString? lookupNamespaceURI(DOMString? prefix); - [FIXME] boolean isDefaultNamespace(DOMString? namespace); + boolean isDefaultNamespace(DOMString? namespace); [ImplementedAs=pre_insert, CEReactions] Node insertBefore(Node node, Node? child); [CEReactions] Node appendChild(Node node);