From 3d17c531d7b50cb4adc34227e381bd7f9b87e173 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Thu, 3 Jul 2025 19:37:07 +0800 Subject: [PATCH] make window.scrollTo triggers scroll and scrollend events --- src/browser/html/window.zig | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/browser/html/window.zig b/src/browser/html/window.zig index 66c4dc0d..78f57fd1 100644 --- a/src/browser/html/window.zig +++ b/src/browser/html/window.zig @@ -298,9 +298,31 @@ pub const Window = struct { behavior: []const u8, }; }; - pub fn _scrollTo(_: *const Window, opts: ScrollToOpts, y: ?u32) void { + pub fn _scrollTo(self: *Window, opts: ScrollToOpts, y: ?u32) !void { _ = opts; _ = y; + + { + const scroll_event = try parser.eventCreate(); + defer parser.eventDestroy(scroll_event); + + try parser.eventInit(scroll_event, "scroll", .{}); + _ = try parser.eventTargetDispatchEvent( + parser.toEventTarget(Window, self), + scroll_event, + ); + } + + { + const scroll_end = try parser.eventCreate(); + defer parser.eventDestroy(scroll_end); + + try parser.eventInit(scroll_end, "scrollend", .{}); + _ = try parser.eventTargetDispatchEvent( + parser.toEventTarget(parser.DocumentHTML, self.document), + scroll_end, + ); + } } }; @@ -437,4 +459,13 @@ test "Browser.HTML.Window" { .{ "str", "https://ziglang.org/documentation/master/std/#std.base64.Base64Decoder" }, .{ "try { atob('b') } catch (e) { e } ", "Error: InvalidCharacterError" }, }, .{}); + + try runner.testCases(&.{ + .{ "let scroll = false; let scrolend = false", null }, + .{ "window.addEventListener('scroll', () => {scroll = true});", null }, + .{ "document.addEventListener('scrollend', () => {scrollend = true});", null }, + .{ "window.scrollTo(0)", null }, + .{ "scroll", "true" }, + .{ "scrollend", "true" }, + }, .{}); }