mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-30 07:31:47 +00:00
dom: implement some element getters
This commit is contained in:
@@ -25,8 +25,20 @@ pub const Element = struct {
|
|||||||
// JS funcs
|
// 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 {
|
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 {
|
pub fn get_attributes(self: *parser.Element) !*parser.NamedNodeMap {
|
||||||
@@ -92,6 +104,15 @@ pub fn testExecFn(
|
|||||||
js_env: *jsruntime.Env,
|
js_env: *jsruntime.Env,
|
||||||
comptime _: []jsruntime.API,
|
comptime _: []jsruntime.API,
|
||||||
) !void {
|
) !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{
|
var attribute = [_]Case{
|
||||||
.{ .src = "let a = document.getElementById('content')", .ex = "undefined" },
|
.{ .src = "let a = document.getElementById('content')", .ex = "undefined" },
|
||||||
.{ .src = "a.hasAttributes()", .ex = "true" },
|
.{ .src = "a.hasAttributes()", .ex = "true" },
|
||||||
|
|||||||
@@ -725,6 +725,22 @@ pub fn nodeGetAttributes(node: *Node) !*NamedNodeMap {
|
|||||||
return res.?;
|
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.
|
// nodeToElement is an helper to convert a node to an element.
|
||||||
pub inline fn nodeToElement(node: *Node) *Element {
|
pub inline fn nodeToElement(node: *Node) *Element {
|
||||||
return @as(*Element, @ptrCast(node));
|
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);
|
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 {
|
pub fn elementGetAttribute(elem: *Element, name: []const u8) !?[]const u8 {
|
||||||
var s: ?*String = undefined;
|
var s: ?*String = undefined;
|
||||||
const err = elementVtable(elem).dom_element_get_attribute.?(elem, try strFromData(name), &s);
|
const err = elementVtable(elem).dom_element_get_attribute.?(elem, try strFromData(name), &s);
|
||||||
|
|||||||
Reference in New Issue
Block a user