From 1b7abf9972cf8ddbba595fabe923fc2c72755775 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Wed, 6 Aug 2025 18:28:53 +0200 Subject: [PATCH] window: partial implementation for indexed_get --- src/browser/html/window.zig | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/browser/html/window.zig b/src/browser/html/window.zig index 7bc31831..705c8682 100644 --- a/src/browser/html/window.zig +++ b/src/browser/html/window.zig @@ -136,6 +136,24 @@ pub const Window = struct { return self; } + pub fn indexed_get(self: *Window, index: u32, has_value: *bool, page: *Page) !*Window { + const frames = try domcss.querySelectorAll( + page.call_arena, + parser.documentHTMLToNode(self.document), + "frame,iframe", + ); + + if (index >= frames.nodes.items.len) { + has_value.* = false; + return undefined; + } + + has_value.* = true; + // TODO return the correct frame's window + // frames.nodes.items[indexed] + return error.TODO; + } + // Retrieve the numbre of frames/iframes from the DOM dynamically. pub fn get_length(self: *const Window, page: *Page) !u32 { const frames = try domcss.querySelectorAll( @@ -553,3 +571,26 @@ test "Browser.HTML.Window" { }, .{}); } } + +test "Browser.HTML.Window.frames" { + var runner = try testing.jsRunner(testing.tracking_allocator, .{ .html = + \\ + \\ + \\ + \\ + }); + + defer runner.deinit(); + + try runner.testCases(&.{ + .{ "frames.length", "2" }, + .{ "try { frames[1] } catch (e) { e }", "Error: TODO" }, // TODO fixme + .{ "frames[3]", "undefined" }, + }, .{}); +}