@@ -29,6 +29,7 @@ const Node = @This();
2929
3030id : Id ,
3131_node : * parser.Node ,
32+ set_child_nodes_event : bool ,
3233
3334// Whenever we send a node to the client, we register it here for future lookup.
3435// We maintain a node -> id and id -> node lookup.
@@ -85,6 +86,7 @@ pub const Registry = struct {
8586 node .* = .{
8687 ._node = n ,
8788 .id = id ,
89+ .set_child_nodes_event = false ,
8890 };
8991
9092 node_lookup_gop .value_ptr .* = node ;
@@ -218,7 +220,7 @@ pub const Writer = struct {
218220
219221 fn toJSON (self : * const Writer , w : anytype ) ! void {
220222 try w .beginObject ();
221- try writeCommon (self .node , false , w );
223+ try self . writeCommon (self .node , false , w );
222224
223225 {
224226 var registry = self .registry ;
@@ -232,7 +234,7 @@ pub const Writer = struct {
232234 const child = (try parser .nodeListItem (child_nodes , @intCast (i ))) orelse break ;
233235 const child_node = try registry .register (child );
234236 try w .beginObject ();
235- try writeCommon (child_node , true , w );
237+ try self . writeCommon (child_node , true , w );
236238 try w .endObject ();
237239 i += 1 ;
238240 }
@@ -245,7 +247,7 @@ pub const Writer = struct {
245247 try w .endObject ();
246248 }
247249
248- fn writeCommon (node : * const Node , include_child_count : bool , w : anytype ) ! void {
250+ fn writeCommon (self : * const Writer , node : * const Node , include_child_count : bool , w : anytype ) ! void {
249251 try w .objectField ("nodeId" );
250252 try w .write (node .id );
251253
@@ -254,9 +256,24 @@ pub const Writer = struct {
254256
255257 const n = node ._node ;
256258
257- // TODO:
258- // try w.objectField("parentId");
259- // try w.write(pid);
259+ if (try parser .nodeParentNode (n )) | p | {
260+ const parent_node = try self .registry .register (p );
261+ try w .objectField ("parentId" );
262+ try w .write (parent_node .id );
263+ }
264+
265+ const _map = try parser .nodeGetAttributes (n );
266+ if (_map ) | map | {
267+ const attr_count = try parser .namedNodeMapGetLength (map );
268+ try w .objectField ("attributes" );
269+ try w .beginArray ();
270+ for (0.. attr_count ) | i | {
271+ const attr = try parser .namedNodeMapItem (map , @intCast (i )) orelse continue ;
272+ try w .write (try parser .attributeGetName (attr ));
273+ try w .write (try parser .attributeGetValue (attr ) orelse continue );
274+ }
275+ try w .endArray ();
276+ }
260277
261278 try w .objectField ("nodeType" );
262279 try w .write (@intFromEnum (try parser .nodeType (n )));
@@ -461,6 +478,7 @@ test "cdp Node: Writer" {
461478 .xmlVersion = "" ,
462479 .compatibilityMode = "NoQuirksMode" ,
463480 .isScrollable = false ,
481+ .parentId = 1 ,
464482 }, .{
465483 .nodeId = 3 ,
466484 .backendNodeId = 3 ,
@@ -474,6 +492,7 @@ test "cdp Node: Writer" {
474492 .xmlVersion = "" ,
475493 .compatibilityMode = "NoQuirksMode" ,
476494 .isScrollable = false ,
495+ .parentId = 1 ,
477496 } },
478497 }, json );
479498 }
0 commit comments