╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ──────╮ │src/ui/User.zig│ ╰───────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │232 // the header shows new repo with a login and new user without │ │233 // one, so keep the stack's children 1:1 with the tabs │ │234 if (session.data.user_id != null) { │ │235 - const route = ui.RoutablePage{ .user_new_repo = ui.RoutablePage.Array(evt.User.name_max_len).from(data.user.name) orelse return error.RouteTooLong };│ │235 + const route = ui.RoutablePage{ .user_repo_new = ui.RoutablePage.Array(evt.User.name_max_len).from(data.user.name) orelse return error.RouteTooLong };│ │236 var new_repo_view = try ui.NewRepo.View.init(allocator, session, route); │ │237 errdefer new_repo_view.deinit(allocator); │ │238 try stack.children.put(allocator, new_repo_view.getFocus().id, .{ .new_repo = new_repo_view }); │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │239 } else { │ │240 - const route = ui.RoutablePage{ .user_new_user = ui.RoutablePage.Array(evt.User.name_max_len).from(data.user.name) orelse return error.RouteTooLong };│ │240 + const route = ui.RoutablePage{ .user_user_new = ui.RoutablePage.Array(evt.User.name_max_len).from(data.user.name) orelse return error.RouteTooLong };│ │241 var new_user_view = try ui.NewUser.View.init(allocator, session, route); │ │242 errdefer new_user_view.deinit(allocator); │ │243 try stack.children.put(allocator, new_user_view.getFocus().id, .{ .new_user = new_user_view }); │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ─────────────╮ │src/ui/User/Header.zig│ ╰──────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │102 const current_link = try std.fmt.allocPrint(aa, "ai:{s}", .{try current_page.toUrl(session.page_arena)}); │ │103 const repos_link = if (current_tag == .user_repos) current_link else try std.fmt.allocPrint(aa, "ai:/user/{s}", .{data.name}); │ │104 const forks_link = if (current_tag == .user_forks) current_link else try std.fmt.allocPrint(aa, "ai:/user/{s}/forks", .{data.name}); │ │105 - const new_repo_link = if (current_tag == .user_new_repo) current_link else try std.fmt.allocPrint(aa, "ai:/user/{s}/new-repo", .{data.name});│ │106 - const new_user_link = if (current_tag == .user_new_user) current_link else try std.fmt.allocPrint(aa, "ai:/user/{s}/new-user", .{data.name});│ │105 + const new_repo_link = if (current_tag == .user_repo_new) current_link else try std.fmt.allocPrint(aa, "ai:/user/{s}/repo/new", .{data.name});│ │106 + const new_user_link = if (current_tag == .user_user_new) current_link else try std.fmt.allocPrint(aa, "ai:/user/{s}/user/new", .{data.name});│ │107 const user_link = if (current_tag == .user_user) current_link else try std.fmt.allocPrint(aa, "ai:/user/{s}/user", .{data.name}); │ │108 │ │109 // the tab matching the current page is focused initially; matching by │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────╮ │110 // link (rather than position) keeps this robust to tab changes.│ │111 const selected_link: []const u8 = switch (current_page) { │ │112 - .user_new_repo => new_repo_link, │ │113 - .user_new_user => new_user_link, │ │112 + .user_repo_new => new_repo_link, │ │113 + .user_user_new => new_user_link, │ │114 .user_user => user_link, │ │115 .user_forks => forks_link, │ │116 else => repos_link, │ ╰─────────────────────────────────────────────────────────────────────────────╯ ╭ changed ──╮ │src/web.zig│ ╰───────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │140 if (method == .POST) { │ │141 switch (host) { │ │142 .server => |server| { │ │143 - // the home page's new repo form, which the "/new" suffix below would claim │ │144 - if (std.mem.eql(u8, path, "/repo/new")) return handleRepoNew(io, request, allocator, path, server.admin_repo_path, server.users_dir, server.session_store);│ │145 - // likewise the home page's new user form │ │146 - if (std.mem.eql(u8, path, "/user/new")) return handleUserNew(io, request, allocator, path, server.admin_repo_path, server.users_dir, server.session_store);│ │147 - const PostRoute = enum { login, logout, @"new-repo", @"new-user", new, edit, remove, open, close, resolve, publish, merge, squash, attach, undo, clear }; │ │143 + // "repo/new" and "user/new" come before "new", which would claim them │ │144 + const PostRoute = enum { login, logout, @"repo/new", @"user/new", new, edit, remove, open, close, resolve, publish, merge, squash, attach, undo, clear }; │ │145 inline for (@typeInfo(PostRoute).@"enum".fields) |field| { │ │146 const suffix = "/" ++ field.name; │ │147 if (std.mem.endsWith(u8, path, suffix)) { │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │149 return switch (@field(PostRoute, field.name)) { │ │150 .login => handleLogin(io, request, allocator, base, server.admin_repo_path, server.session_store), │ │151 .logout => handleLogout(request, base, server.session_store), │ │155 - .@"new-repo" => handleRepoNew(io, request, allocator, path, server.admin_repo_path, server.users_dir, server.session_store),│ │156 - .@"new-user" => handleUserNew(io, request, allocator, path, server.admin_repo_path, server.users_dir, server.session_store),│ │152 + .@"repo/new" => handleRepoNew(io, request, allocator, path, server.admin_repo_path, server.users_dir, server.session_store),│ │153 + .@"user/new" => handleUserNew(io, request, allocator, path, server.admin_repo_path, server.users_dir, server.session_store),│ │154 .new => handleNew(io, request, allocator, base, host), │ │155 .edit => handleEdit(io, request, allocator, base, host), │ │156 .remove => handleRemove(io, request, allocator, base, host), │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯