mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 15:13:28 +00:00
characterdata: add previouselementSibling getter
Signed-off-by: Francis Bouvier <francis.bouvier@gmail.com>
This commit is contained in:
@@ -34,6 +34,14 @@ pub const CharacterData = struct {
|
|||||||
return HTMLElem.toInterface(HTMLElem.Union, res.?);
|
return HTMLElem.toInterface(HTMLElem.Union, res.?);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_previousElementSibling(self: *parser.CharacterData) ?HTMLElem.Union {
|
||||||
|
const res = parser.nodePreviousElementSibling(parser.characterDataToNode(self));
|
||||||
|
if (res == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return HTMLElem.toInterface(HTMLElem.Union, res.?);
|
||||||
|
}
|
||||||
|
|
||||||
// Read/Write attributes
|
// Read/Write attributes
|
||||||
|
|
||||||
pub fn get_data(self: *parser.CharacterData) []const u8 {
|
pub fn get_data(self: *parser.CharacterData) []const u8 {
|
||||||
@@ -88,4 +96,13 @@ pub fn testExecFn(
|
|||||||
.{ .src = "cdata.nextElementSibling.localName === 'a' ", .ex = "true" },
|
.{ .src = "cdata.nextElementSibling.localName === 'a' ", .ex = "true" },
|
||||||
};
|
};
|
||||||
try checkCases(js_env, &get_next_elem_sibling);
|
try checkCases(js_env, &get_next_elem_sibling);
|
||||||
|
|
||||||
|
var get_prev_elem_sibling = [_]Case{
|
||||||
|
.{ .src = "cdata.previousElementSibling === null", .ex = "true" },
|
||||||
|
// create a prev element
|
||||||
|
.{ .src = "let prev = document.createElement('div')", .ex = "undefined" },
|
||||||
|
.{ .src = "link.insertBefore(prev, cdata) !== undefined", .ex = "true" },
|
||||||
|
.{ .src = "cdata.previousElementSibling.localName === 'div' ", .ex = "true" },
|
||||||
|
};
|
||||||
|
try checkCases(js_env, &get_prev_elem_sibling);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -270,14 +270,14 @@ pub fn nodeNextSibling(node: *Node) ?*Node {
|
|||||||
pub fn nodeNextElementSibling(node: *Node) ?*Element {
|
pub fn nodeNextElementSibling(node: *Node) ?*Element {
|
||||||
var n = node;
|
var n = node;
|
||||||
while (true) {
|
while (true) {
|
||||||
const next = nodeNextSibling(n);
|
const res = nodeNextSibling(n);
|
||||||
if (next == null) {
|
if (res == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (nodeType(next.?) == .element) {
|
if (nodeType(res.?) == .element) {
|
||||||
return @as(*Element, @ptrCast(next.?));
|
return @as(*Element, @ptrCast(res.?));
|
||||||
}
|
}
|
||||||
n = next.?;
|
n = res.?;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -288,6 +288,21 @@ pub fn nodePreviousSibling(node: *Node) ?*Node {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn nodePreviousElementSibling(node: *Node) ?*Element {
|
||||||
|
var n = node;
|
||||||
|
while (true) {
|
||||||
|
const res = nodePreviousSibling(n);
|
||||||
|
if (res == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (nodeType(res.?) == .element) {
|
||||||
|
return @as(*Element, @ptrCast(res.?));
|
||||||
|
}
|
||||||
|
n = res.?;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn nodeParentNode(node: *Node) ?*Node {
|
pub fn nodeParentNode(node: *Node) ?*Node {
|
||||||
var res: ?*Node = undefined;
|
var res: ?*Node = undefined;
|
||||||
_ = nodeVtable(node).dom_node_get_parent_node.?(node, &res);
|
_ = nodeVtable(node).dom_node_get_parent_node.?(node, &res);
|
||||||
|
|||||||
Reference in New Issue
Block a user