╭ changed ─────────────╮ │src/ui/Repo/Header.zig│ ╰──────────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ 93 │ │ 94 // every tab link is repo-scoped so selecting one stays on this page — │ │ 95 // switching its stack and updating the url — instead of navigating to │ │ 96 - // the global settings or auth pages. the files tab routes through the │ │ 97 - // shared helper so the /repo/.../files url format lives in one place. │ │ 96 + // the global settings or auth pages. the "ai:" prefix makes each an │ │ 97 + // in-page anchor: crossPageLink ignores it so a wasm click just switches │ │ 98 + // tabs (the page already holds every tab's content), while the href is │ │ 99 + // still followed with js off. the files tab routes through the shared │ │100 + // helper so the /repo/.../files url format lives in one place. │ │101 const identity = try std.fmt.allocPrint(aa, "{s}/{s}", .{ data.owner_name, data.name });│ │102 // both tabs link to the ref/oid this page is viewing, so switching tabs │ │103 // keeps the same ref (the files tab opens at its root directory). │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │104 const files_route = ui.RoutablePage.repoFilesRoute(identity, data.ref_or_oid, data.ref_or_oid_value, "", 0) orelse return error.RouteTooLong;│ │102 - const files_link = try std.fmt.allocPrint(aa, "a:{s}", .{try files_route.urlAlloc(session.page_arena)}); │ │105 + const files_link = try std.fmt.allocPrint(aa, "ai:{s}", .{try files_route.urlAlloc(session.page_arena)}); │ │106 const commits_route = ui.RoutablePage.repoCommitsRoute(identity, data.ref_or_oid, data.ref_or_oid_value, 0) orelse return error.RouteTooLong;│ │104 - const commits_link = try std.fmt.allocPrint(aa, "a:{s}", .{try commits_route.urlAlloc(session.page_arena)}); │ │105 - const refs_link = try std.fmt.allocPrint(aa, "a:/repo/{s}/{s}/refs", .{ data.owner_name, data.name }); │ │106 - const settings_link = try std.fmt.allocPrint(aa, "a:/repo/{s}/{s}/settings", .{ data.owner_name, data.name }); │ │107 - const auth_link = try std.fmt.allocPrint(aa, "a:/repo/{s}/{s}/auth", .{ data.owner_name, data.name }); │ │107 + const commits_link = try std.fmt.allocPrint(aa, "ai:{s}", .{try commits_route.urlAlloc(session.page_arena)}); │ │108 + const refs_link = try std.fmt.allocPrint(aa, "ai:/repo/{s}/{s}/refs", .{ data.owner_name, data.name }); │ │109 + const settings_link = try std.fmt.allocPrint(aa, "ai:/repo/{s}/{s}/settings", .{ data.owner_name, data.name }); │ │110 + const auth_link = try std.fmt.allocPrint(aa, "ai:/repo/{s}/{s}/auth", .{ data.owner_name, data.name }); │ │111 │ │112 // the tab matching the current page is focused initially; matching by │ │113 // link (rather than position) keeps this robust to tab changes. │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────╮ │191 }); │ │192 } │ │193 │ │191 - // auth tab (login / logout). AuthTab defaults to the global a:/auth link; │ │192 - // repoint its instance at this repo's auth route so it stays local too. │ │194 + // auth tab (login / logout). AuthTab defaults to the global ai:/auth │ │195 + // link; repoint its instance at this repo's auth route so it stays local. │ │196 { │ │197 var auth_tab = try AuthTab.View.init(allocator, &data.auth_tab, session);│ │198 errdefer auth_tab.deinit(allocator); │ ╰──────────────────────────────────────────────────────────────────────────────────────────╯