From 95c0ff6f3909deef02aa28073ea930a8403d1467 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Tue, 24 Sep 2024 09:18:08 +0200 Subject: [PATCH] dom: implement currentScript --- src/browser/browser.zig | 4 ++++ src/html/document.zig | 4 ++-- src/netsurf/netsurf.zig | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/browser/browser.zig b/src/browser/browser.zig index cc545ff1..100b4498 100644 --- a/src/browser/browser.zig +++ b/src/browser/browser.zig @@ -411,7 +411,9 @@ pub const Page = struct { // > immediately before the browser continues to parse the // > page. // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#notes + try parser.documentHTMLSetCurrentScript(html_doc, @ptrCast(e)); self.evalScript(e) catch |err| log.warn("evaljs: {any}", .{err}); + try parser.documentHTMLSetCurrentScript(html_doc, null); } // TODO wait for deferred scripts @@ -428,7 +430,9 @@ pub const Page = struct { // eval async scripts. for (sasync.items) |e| { + try parser.documentHTMLSetCurrentScript(html_doc, @ptrCast(e)); self.evalScript(e) catch |err| log.warn("evaljs: {any}", .{err}); + try parser.documentHTMLSetCurrentScript(html_doc, null); } // TODO wait for async scripts diff --git a/src/html/document.zig b/src/html/document.zig index 3b53e11e..78ffa864 100644 --- a/src/html/document.zig +++ b/src/html/document.zig @@ -153,8 +153,8 @@ pub const HTMLDocument = struct { return try collection.HTMLCollectionAll(parser.documentHTMLToNode(self), true); } - pub fn get_currentScript(_: *parser.DocumentHTML) !?*parser.Element { - return null; + pub fn get_currentScript(self: *parser.DocumentHTML) !?*parser.Script { + return try parser.documentHTMLGetCurrentScript(self); } pub fn get_designMode(_: *parser.DocumentHTML) []const u8 { diff --git a/src/netsurf/netsurf.zig b/src/netsurf/netsurf.zig index eecf31ea..322bb4b3 100644 --- a/src/netsurf/netsurf.zig +++ b/src/netsurf/netsurf.zig @@ -2249,3 +2249,18 @@ pub inline fn documentHTMLSetTitle(doc: *DocumentHTML, v: []const u8) !void { const err = documentHTMLVtable(doc).set_title.?(doc, try strFromData(v)); try DOMErr(err); } + +pub fn documentHTMLSetCurrentScript(doc: *DocumentHTML, script: ?*Script) !void { + var s: ?*ElementHTML = null; + if (script != null) s = @ptrCast(script.?); + const err = documentHTMLVtable(doc).set_current_script.?(doc, s); + try DOMErr(err); +} + +pub fn documentHTMLGetCurrentScript(doc: *DocumentHTML) !?*Script { + var elem: ?*ElementHTML = undefined; + const err = documentHTMLVtable(doc).get_current_script.?(doc, &elem); + try DOMErr(err); + if (elem == null) return null; + return @ptrCast(elem.?); +}