From 344420f7084a8208e72c81bfc90019706d945ad0 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Mon, 20 Oct 2025 12:41:47 +0300 Subject: [PATCH] bring back `hostname` getter/setter functions This was a regression while testing things. --- src/browser/html/elements.zig | 53 +++++++++++++++++------------------ 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/browser/html/elements.zig b/src/browser/html/elements.zig index 6dd18601..d58a6694 100644 --- a/src/browser/html/elements.zig +++ b/src/browser/html/elements.zig @@ -355,34 +355,33 @@ pub const HTMLAnchorElement = struct { return parser.anchorSetHref(self, u.getHref()); } - //pub fn get_hostname(self: *parser.Anchor, page: *Page) ![]const u8 { - // const maybe_href_str = try getAnchorHref(self); - // const href_str = maybe_href_str orelse return ""; - // - // const u = try NativeURL.parse(href_str, null); - // defer u.deinit(); - // - // return page.arena.dupe(u8, u.getHostname()); - //} + pub fn get_hostname(self: *parser.Anchor, page: *Page) []const u8 { + const u = getURL(self, page) catch return ""; + return u.getHostname(); + } - //pub fn set_hostname(self: *parser.Anchor, v: []const u8) !void { - // const maybe_href_str = try getAnchorHref(self); - // - // if (maybe_href_str) |href_str| { - // const u = try NativeURL.parse(href_str, null); - // defer u.deinit(); - // - // try u.setHostname(v); - // - // return parser.anchorSetHref(self, u.getHref()); - // } - // - // // No href string there; use the given value as href. - // const u = try NativeURL.parse(v, null); - // defer u.deinit(); - // - // return parser.anchorSetHref(self, u.getHref()); - //} + pub fn set_hostname(self: *parser.Anchor, hostname: []const u8, page: *Page) !void { + const u = blk: { + if (page.getObjectData(self)) |internal_url| { + break :blk NativeURL.fromInternal(internal_url); + } + + const maybe_anchor_href = try getHref(self); + if (maybe_anchor_href) |anchor_href| { + const new_u = try NativeURL.parse(anchor_href, null); + try page.putObjectData(self, new_u.internal.?); + break :blk new_u; + } + + // Last resort; try to create URL object out of hostname. + const new_u = try NativeURL.parse(hostname, null); + // We can just return here since hostname is updated. + return page.putObjectData(self, new_u.internal.?); + }; + + try u.setHostname(hostname); + return parser.anchorSetHref(self, u.getHref()); + } // TODO return a disposable string pub fn get_port(self: *parser.Anchor, page: *Page) ![]const u8 {