From 7f732c94daf88d172664af1e0e2e79640cbf0bc6 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Wed, 9 Jul 2025 13:27:25 +0800 Subject: [PATCH 1/3] add HTMLElementLink get/set href --- src/browser/html/elements.zig | 15 +++++++++++++++ src/browser/netsurf.zig | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/browser/html/elements.zig b/src/browser/html/elements.zig index 7cd5c4dc..3bc64ddc 100644 --- a/src/browser/html/elements.zig +++ b/src/browser/html/elements.zig @@ -895,6 +895,15 @@ pub const HTMLLinkElement = struct { pub fn constructor(page: *Page, js_this: Env.JsThis) !*parser.Element { return constructHtmlElement(page, js_this); } + + pub fn get_href(self: *parser.Link) ![]const u8 { + return try parser.linkGetHref(self); + } + + pub fn set_href(self: *parser.Link, href: []const u8, page: *const Page) !void { + const full = try urlStitch(page.call_arena, href, page.url.raw, .{}); + return try parser.linkSetHref(self, full); + } }; pub const HTMLMapElement = struct { @@ -1581,6 +1590,12 @@ test "Browser.HTML.Element" { .{ "document.createElement('a').focus()", null }, .{ "document.activeElement === focused", "true" }, }, .{}); + + try runner.testCases(&.{ + .{ "let l2 = document.createElement('link');", null }, + .{ "l2.href = 'https://lightpanda.io/'", null }, + .{ "l2.href", "https://lightpanda.io/" }, + }, .{}); } test "Browser.HTML.Element.DataSet" { diff --git a/src/browser/netsurf.zig b/src/browser/netsurf.zig index 3be9481a..ec1747c9 100644 --- a/src/browser/netsurf.zig +++ b/src/browser/netsurf.zig @@ -1830,6 +1830,21 @@ pub fn anchorSetRel(a: *Anchor, rel: []const u8) !void { try DOMErr(err); } +// HTMLLinkElement + +pub fn linkGetHref(link: *Link) ![]const u8 { + var res: ?*String = undefined; + const err = c.dom_html_link_element_get_href(link, &res); + try DOMErr(err); + if (res == null) return ""; + return strToData(res.?); +} + +pub fn linkSetHref(link: *Link, href: []const u8) !void { + const err = c.dom_html_link_element_set_href(link, try strFromData(href)); + try DOMErr(err); +} + // ElementsHTML pub const MediaElement = struct { base: *c.dom_html_element }; From f612ce262f6916f035bcb7127543ceb2482715f7 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Wed, 9 Jul 2025 16:16:45 +0800 Subject: [PATCH 2/3] Update src/browser/html/elements.zig Co-authored-by: Sjors <72333389+sjorsdonkers@users.noreply.github.com> --- src/browser/html/elements.zig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/browser/html/elements.zig b/src/browser/html/elements.zig index 3bc64ddc..6efb839f 100644 --- a/src/browser/html/elements.zig +++ b/src/browser/html/elements.zig @@ -1593,8 +1593,9 @@ test "Browser.HTML.Element" { try runner.testCases(&.{ .{ "let l2 = document.createElement('link');", null }, - .{ "l2.href = 'https://lightpanda.io/'", null }, - .{ "l2.href", "https://lightpanda.io/" }, + .{ "l2.href", "" }, + .{ "l2.href = 15", null }, + .{ "l2.href", "https://lightpanda.io/15" }, }, .{}); } From da3fe6f7ea5605fec35e79b49ab3a8b46a6e3c8c Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Wed, 9 Jul 2025 17:41:05 +0800 Subject: [PATCH 3/3] fix test --- src/browser/html/elements.zig | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/browser/html/elements.zig b/src/browser/html/elements.zig index 6efb839f..a0f920d2 100644 --- a/src/browser/html/elements.zig +++ b/src/browser/html/elements.zig @@ -1594,8 +1594,11 @@ test "Browser.HTML.Element" { try runner.testCases(&.{ .{ "let l2 = document.createElement('link');", null }, .{ "l2.href", "" }, - .{ "l2.href = 15", null }, - .{ "l2.href", "https://lightpanda.io/15" }, + .{ "l2.href = 'https://lightpanda.io/opensource-browser/15'", null }, + .{ "l2.href", "https://lightpanda.io/opensource-browser/15" }, + + .{ "l2.href = '/over/9000'", null }, + .{ "l2.href", "https://lightpanda.io/over/9000" }, }, .{}); }