mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 23:23:28 +00:00
dom: implement some element getters
This commit is contained in:
@@ -25,8 +25,20 @@ pub const Element = struct {
|
||||
// JS funcs
|
||||
// --------
|
||||
|
||||
pub fn get_namespaceURI(self: *parser.Element) !?[]const u8 {
|
||||
return try parser.nodeGetNamespace(parser.elementToNode(self));
|
||||
}
|
||||
|
||||
pub fn get_prefix(self: *parser.Element) !?[]const u8 {
|
||||
return try parser.nodeGetPrefix(parser.elementToNode(self));
|
||||
}
|
||||
|
||||
pub fn get_localName(self: *parser.Element) ![]const u8 {
|
||||
return try parser.elementLocalName(self);
|
||||
return try parser.nodeLocalName(parser.elementToNode(self));
|
||||
}
|
||||
|
||||
pub fn get_tagName(self: *parser.Element) ![]const u8 {
|
||||
return try parser.nodeName(parser.elementToNode(self));
|
||||
}
|
||||
|
||||
pub fn get_attributes(self: *parser.Element) !*parser.NamedNodeMap {
|
||||
@@ -92,6 +104,15 @@ pub fn testExecFn(
|
||||
js_env: *jsruntime.Env,
|
||||
comptime _: []jsruntime.API,
|
||||
) !void {
|
||||
var getters = [_]Case{
|
||||
.{ .src = "let g = document.getElementById('content')", .ex = "undefined" },
|
||||
.{ .src = "g.namespaceURI", .ex = "http://www.w3.org/1999/xhtml" },
|
||||
.{ .src = "g.prefix", .ex = "null" },
|
||||
.{ .src = "g.localName", .ex = "div" },
|
||||
.{ .src = "g.tagName", .ex = "DIV" },
|
||||
};
|
||||
try checkCases(js_env, &getters);
|
||||
|
||||
var attribute = [_]Case{
|
||||
.{ .src = "let a = document.getElementById('content')", .ex = "undefined" },
|
||||
.{ .src = "a.hasAttributes()", .ex = "true" },
|
||||
|
||||
@@ -725,6 +725,22 @@ pub fn nodeGetAttributes(node: *Node) !*NamedNodeMap {
|
||||
return res.?;
|
||||
}
|
||||
|
||||
pub fn nodeGetNamespace(node: *Node) !?[]const u8 {
|
||||
var s: ?*String = undefined;
|
||||
const err = nodeVtable(node).dom_node_get_namespace.?(node, &s);
|
||||
try DOMErr(err);
|
||||
if (s == null) return null;
|
||||
return strToData(s.?);
|
||||
}
|
||||
|
||||
pub fn nodeGetPrefix(node: *Node) !?[]const u8 {
|
||||
var s: ?*String = undefined;
|
||||
const err = nodeVtable(node).dom_node_get_prefix.?(node, &s);
|
||||
try DOMErr(err);
|
||||
if (s == null) return null;
|
||||
return strToData(s.?);
|
||||
}
|
||||
|
||||
// nodeToElement is an helper to convert a node to an element.
|
||||
pub inline fn nodeToElement(node: *Node) *Element {
|
||||
return @as(*Element, @ptrCast(node));
|
||||
@@ -831,11 +847,6 @@ fn elementVtable(elem: *Element) c.dom_element_vtable {
|
||||
return getVtable(c.dom_element_vtable, Element, elem);
|
||||
}
|
||||
|
||||
pub fn elementLocalName(elem: *Element) ![]const u8 {
|
||||
const node = @as(*Node, @ptrCast(elem));
|
||||
return try nodeLocalName(node);
|
||||
}
|
||||
|
||||
pub fn elementGetAttribute(elem: *Element, name: []const u8) !?[]const u8 {
|
||||
var s: ?*String = undefined;
|
||||
const err = elementVtable(elem).dom_element_get_attribute.?(elem, try strFromData(name), &s);
|
||||
|
||||
Reference in New Issue
Block a user