dom: add Element AttributeNode funcs

This commit is contained in:
Pierre Tachoire
2024-01-03 14:44:24 +01:00
parent 152014fe16
commit 3b851f889e
2 changed files with 59 additions and 0 deletions

View File

@@ -131,6 +131,22 @@ pub const Element = struct {
return try parser.elementGetAttributeNode(self, name);
}
pub fn _getAttributeNodeNS(self: *parser.Element, ns: []const u8, name: []const u8) !?*parser.Attribute {
return try parser.elementGetAttributeNodeNS(self, ns, name);
}
pub fn _setAttributeNode(self: *parser.Element, attr: *parser.Attribute) !?*parser.Attribute {
return try parser.elementSetAttributeNode(self, attr);
}
pub fn _setAttributeNodeNS(self: *parser.Element, attr: *parser.Attribute) !?*parser.Attribute {
return try parser.elementSetAttributeNodeNS(self, attr);
}
pub fn _removeAttributeNode(self: *parser.Element, attr: *parser.Attribute) !*parser.Attribute {
return try parser.elementRemoveAttributeNode(self, attr);
}
pub fn _getElementsByTagName(
self: *parser.Element,
alloc: std.mem.Allocator,
@@ -370,4 +386,14 @@ pub fn testExecFn(
.{ .src = "e.querySelectorAll('*').length", .ex = "4" },
};
try checkCases(js_env, &querySelector);
var attrNode = [_]Case{
.{ .src = "let f = document.getElementById('content')", .ex = "undefined" },
.{ .src = "let ff = document.createAttribute('foo')", .ex = "undefined" },
.{ .src = "f.setAttributeNode(ff)", .ex = "null" },
.{ .src = "f.getAttributeNode('foo').name", .ex = "foo" },
.{ .src = "f.removeAttributeNode(ff).name", .ex = "foo" },
.{ .src = "f.getAttributeNode('bar')", .ex = "null" },
};
try checkCases(js_env, &attrNode);
}

View File

@@ -924,6 +924,39 @@ pub fn elementGetAttributeNode(elem: *Element, name: []const u8) !?*Attribute {
return a;
}
pub fn elementGetAttributeNodeNS(elem: *Element, ns: []const u8, name: []const u8) !?*Attribute {
var a: ?*Attribute = undefined;
const err = elementVtable(elem).dom_element_get_attribute_node_ns.?(
elem,
try strFromData(ns),
try strFromData(name),
&a,
);
try DOMErr(err);
return a;
}
pub fn elementSetAttributeNode(elem: *Element, attr: *Attribute) !?*Attribute {
var a: ?*Attribute = undefined;
const err = elementVtable(elem).dom_element_set_attribute_node.?(elem, attr, &a);
try DOMErr(err);
return a;
}
pub fn elementSetAttributeNodeNS(elem: *Element, attr: *Attribute) !?*Attribute {
var a: ?*Attribute = undefined;
const err = elementVtable(elem).dom_element_set_attribute_node_ns.?(elem, attr, &a);
try DOMErr(err);
return a;
}
pub fn elementRemoveAttributeNode(elem: *Element, attr: *Attribute) !*Attribute {
var a: ?*Attribute = undefined;
const err = elementVtable(elem).dom_element_remove_attribute_node.?(elem, attr, &a);
try DOMErr(err);
return a.?;
}
pub fn elementHasClass(elem: *Element, class: []const u8) !bool {
var res: bool = undefined;
const err = elementVtable(elem).dom_element_has_class.?(