mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 12:44:43 +00:00
Merge pull request #1484 from lightpanda-io/fix-replace-with
Some checks failed
e2e-test / zig build release (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
e2e-test / browser fetch (push) Has been cancelled
zig-test / zig test using v8 in debug mode (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
Some checks failed
e2e-test / zig build release (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
e2e-test / browser fetch (push) Has been cancelled
zig-test / zig test using v8 in debug mode (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
fix Element.replaceWith crash when self replacing
This commit is contained in:
@@ -722,8 +722,19 @@ pub fn replaceWith(self: *Element, nodes: []const Node.NodeOrText, page: *Page)
|
|||||||
|
|
||||||
const parent_is_connected = parent.isConnected();
|
const parent_is_connected = parent.isConnected();
|
||||||
|
|
||||||
|
// Detect if the ref_node must be removed (byt default) or kept.
|
||||||
|
// We kept it when ref_node is present into the nodes list.
|
||||||
|
var rm_ref_node = true;
|
||||||
|
|
||||||
for (nodes) |node_or_text| {
|
for (nodes) |node_or_text| {
|
||||||
const child = try node_or_text.toNode(page);
|
const child = try node_or_text.toNode(page);
|
||||||
|
|
||||||
|
// If a child is the ref node. We keep it at its own current position.
|
||||||
|
if (child == ref_node) {
|
||||||
|
rm_ref_node = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (child._parent) |current_parent| {
|
if (child._parent) |current_parent| {
|
||||||
page.removeNode(current_parent, child, .{ .will_be_reconnected = parent_is_connected });
|
page.removeNode(current_parent, child, .{ .will_be_reconnected = parent_is_connected });
|
||||||
}
|
}
|
||||||
@@ -736,7 +747,9 @@ pub fn replaceWith(self: *Element, nodes: []const Node.NodeOrText, page: *Page)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
page.removeNode(parent, ref_node, .{ .will_be_reconnected = false });
|
if (rm_ref_node) {
|
||||||
|
page.removeNode(parent, ref_node, .{ .will_be_reconnected = false });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn remove(self: *Element, page: *Page) void {
|
pub fn remove(self: *Element, page: *Page) void {
|
||||||
|
|||||||
Reference in New Issue
Block a user