From f897cda6cd36743da7630b3de7e8f3b5eb817239 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Wed, 25 Feb 2026 16:33:48 +0300 Subject: [PATCH] dispatch `Style` element's load event from `nodeIsReady` --- src/browser/Page.zig | 28 +++++++++++++++++++++++ src/browser/webapi/Node.zig | 1 + src/browser/webapi/element/html/Style.zig | 7 ------ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/browser/Page.zig b/src/browser/Page.zig index 28d47af0..333240ab 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -1053,6 +1053,29 @@ pub fn linkAddedCallback(self: *Page, link: *Element.Html.Link) !void { try self._to_load.append(self.arena, link._proto); } +pub fn styleAddedCallback(self: *Page, style: *Element.Html.Style) !void { + // if we're planning on navigating to another page, don't trigger load event. + if (self.isGoingAway()) { + return; + } + + try self._to_load.append(self.arena, style._proto); +} + +pub fn imageAddedCallback(self: *Page, image: *Element.Html.Image) !void { + // if we're planning on navigating to another page, don't trigger load event. + if (self.isGoingAway()) { + return; + } + + const element = image.asElement(); + // Exit if src not set. + const src = element.getAttributeSafe(comptime .wrap("src")) orelse return; + if (src.len == 0) return; + + try self._to_load.append(self.arena, image._proto); +} + pub fn domChanged(self: *Page) void { self.version += 1; @@ -2867,6 +2890,11 @@ fn nodeIsReady(self: *Page, comptime from_parser: bool, node: *Node) !void { log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "link", .type = self._type }); return error.LinkLoadError; }; + } else if (node.is(Element.Html.Style)) |style| { + self.styleAddedCallback(style) catch |err| { + log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "style", .type = self._type }); + return error.StyleLoadError; + }; } } diff --git a/src/browser/webapi/Node.zig b/src/browser/webapi/Node.zig index 0d5e1570..7849622a 100644 --- a/src/browser/webapi/Node.zig +++ b/src/browser/webapi/Node.zig @@ -723,6 +723,7 @@ const CloneError = error{ IFrameLoadError, TooManyContexts, LinkLoadError, + StyleLoadError, }; pub fn cloneNode(self: *Node, deep_: ?bool, page: *Page) CloneError!*Node { const deep = deep_ orelse false; diff --git a/src/browser/webapi/element/html/Style.zig b/src/browser/webapi/element/html/Style.zig index 3dbb288b..9d97e2cc 100644 --- a/src/browser/webapi/element/html/Style.zig +++ b/src/browser/webapi/element/html/Style.zig @@ -113,13 +113,6 @@ pub const JsApi = struct { pub const sheet = bridge.accessor(Style.getSheet, null, .{}); }; -pub const Build = struct { - pub fn created(node: *Node, page: *Page) !void { - // Push to `_to_load` to dispatch load event just before window load event. - return page._to_load.append(page.arena, node.as(Element.Html)); - } -}; - const testing = @import("../../../../testing.zig"); test "WebApi: Style" { try testing.htmlRunner("element/html/style.html", .{});