mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-28 15:40:04 +00: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`.
|
/// Collect all forms and their fields under `root`.
|
||||||
/// Uses Form.getElements() to include fields outside the <form> that
|
/// Uses Form.getElements() to include fields outside the <form> that
|
||||||
/// reference it via the form="id" attribute, matching browser behavior.
|
/// reference it via the form="id" attribute, matching browser behavior.
|
||||||
|
|||||||
@@ -174,15 +174,7 @@ fn detectForms(cmd: anytype) !void {
|
|||||||
page,
|
page,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Register form and field nodes for backendNodeId references
|
try lp.forms.registerNodes(forms_data, &bc.node_registry);
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return cmd.sendResult(.{
|
return cmd.sendResult(.{
|
||||||
.forms = forms_data,
|
.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");
|
return server.sendError(id, .InternalError, "Failed to collect forms");
|
||||||
};
|
};
|
||||||
|
|
||||||
// Register form and field nodes for backendNodeId references
|
lp.forms.registerNodes(forms_data, &server.node_registry) catch |err| {
|
||||||
for (forms_data) |*form| {
|
log.err(.mcp, "form node registration failed", .{ .err = err });
|
||||||
const form_registered = try server.node_registry.register(form.node);
|
return server.sendError(id, .InternalError, "Failed to register form nodes");
|
||||||
form.backendNodeId = form_registered.id;
|
};
|
||||||
|
|
||||||
for (form.fields) |*field| {
|
|
||||||
const field_registered = try server.node_registry.register(field.node);
|
|
||||||
field.backendNodeId = field_registered.id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var aw: std.Io.Writer.Allocating = .init(arena);
|
var aw: std.Io.Writer.Allocating = .init(arena);
|
||||||
try std.json.Stringify.value(forms_data, .{}, &aw.writer);
|
try std.json.Stringify.value(forms_data, .{}, &aw.writer);
|
||||||
|
|||||||
Reference in New Issue
Block a user