mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-26 10:23:10 -04:00
forms: extract form node registration logic
This commit is contained in:
@@ -141,6 +141,19 @@ pub const FormInfo = struct {
|
||||
}
|
||||
};
|
||||
|
||||
/// Populate backendNodeId on each form and its fields by registering
|
||||
/// their nodes in the given registry. Works with both CDP and MCP registries.
|
||||
pub fn registerNodes(forms_data: []FormInfo, registry: anytype) !void {
|
||||
for (forms_data) |*form| {
|
||||
const form_registered = try registry.register(form.node);
|
||||
form.backendNodeId = form_registered.id;
|
||||
for (form.fields) |*field| {
|
||||
const field_registered = try registry.register(field.node);
|
||||
field.backendNodeId = field_registered.id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Collect all forms and their fields under `root`.
|
||||
/// Uses Form.getElements() to include fields outside the <form> that
|
||||
/// reference it via the form="id" attribute, matching browser behavior.
|
||||
|
||||
@@ -174,15 +174,7 @@ fn detectForms(cmd: anytype) !void {
|
||||
page,
|
||||
);
|
||||
|
||||
// Register form and field nodes for backendNodeId references
|
||||
for (forms_data) |*form| {
|
||||
const registered = try bc.node_registry.register(form.node);
|
||||
form.backendNodeId = registered.id;
|
||||
for (form.fields) |*field| {
|
||||
const field_registered = try bc.node_registry.register(field.node);
|
||||
field.backendNodeId = field_registered.id;
|
||||
}
|
||||
}
|
||||
try lp.forms.registerNodes(forms_data, &bc.node_registry);
|
||||
|
||||
return cmd.sendResult(.{
|
||||
.forms = forms_data,
|
||||
|
||||
@@ -471,16 +471,10 @@ fn handleDetectForms(server: *Server, arena: std.mem.Allocator, id: std.json.Val
|
||||
return server.sendError(id, .InternalError, "Failed to collect forms");
|
||||
};
|
||||
|
||||
// Register form and field nodes for backendNodeId references
|
||||
for (forms_data) |*form| {
|
||||
const form_registered = try server.node_registry.register(form.node);
|
||||
form.backendNodeId = form_registered.id;
|
||||
|
||||
for (form.fields) |*field| {
|
||||
const field_registered = try server.node_registry.register(field.node);
|
||||
field.backendNodeId = field_registered.id;
|
||||
}
|
||||
}
|
||||
lp.forms.registerNodes(forms_data, &server.node_registry) catch |err| {
|
||||
log.err(.mcp, "form node registration failed", .{ .err = err });
|
||||
return server.sendError(id, .InternalError, "Failed to register form nodes");
|
||||
};
|
||||
|
||||
var aw: std.Io.Writer.Allocating = .init(arena);
|
||||
try std.json.Stringify.value(forms_data, .{}, &aw.writer);
|
||||
|
||||
Reference in New Issue
Block a user