╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │108 - .fork_patch, .fork_diff, .fork_files, .fork_commits, .fork_repo_new, .fork_user_new, .fork_user => .{ .fork = try Fork.init(arena, session, route) }, │ │109 + .fork_patch, .fork_diff, .fork_files, .fork_commits, .fork_delete, .fork_repo_new, .fork_user_new, .fork_user => .{ .fork = try Fork.init(arena, session, route) },│ │110 else => return error.UnexpectedRoute, │ │111 }, │ │112 .not_found => .not_found, │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────╮ │195 repo_settings: Array(repo_route_max_len), │ │196 repo_members: RepoMembersRoute, │ │197 repo_branches: RepoBranchesRoute, │ │198 + repo_delete: Array(repo_route_max_len), │ │199 repo_user: struct { name: Array(repo_route_max_len), tab: UserTab = .{} },│ │200 fork_patch: ForkRoute, │ │201 fork_diff: ForkDiffRoute, │ ╰───────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────╮ │202 fork_files: ForkFilesRoute, │ │203 fork_commits: ForkCommitsRoute, │ │204 + fork_delete: ForkRoute, │ │205 fork_repo_new: ForkRoute, │ │206 fork_user_new: ForkRoute, │ │207 fork_user: struct { fork: ForkRoute, tab: UserTab = .{} },│ ╰───────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────╮ │219 │ │220 pub const EventsView = enum { active, removed }; │ │221 │ │219 - pub const UserView = enum { notifications, settings, keys }; │ │222 + pub const UserView = enum { notifications, settings, keys, delete };│ │223 │ │224 // the user tab's sub tab and the notifications window it shows │ │225 pub const UserTab = struct { │ ╰─────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │467 return .{ .repo_branches = .{ .name = Array(repo_identity_max_len).from(identity) orelse return null } }; │ │468 } │ │469 │ │470 + pub fn repoDeleteRoute(identity: []const u8) ?RoutablePage { │ │471 + return .{ .repo_delete = Array(repo_route_max_len).from(identity) orelse return null }; │ │472 + } │ │473 + │ │474 pub fn repoUndoRoute(identity: []const u8, index: ?u64) ?RoutablePage { │ │475 return .{ .repo_undo = .{ .name = Array(repo_identity_max_len).from(identity) orelse return null, .index = index } };│ │476 } │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────╮ │627 .oid = Array(ref_route_max_len).from(oid) orelse return null, │ │628 .message = true, │ │629 } }; │ │630 + } │ │631 + │ │632 + pub fn forkDeleteRoute(identity: []const u8, id: []const u8) ?RoutablePage { │ │633 + return .{ .fork_delete = initForkRoute(identity, id) orelse return null };│ │634 } │ │635 │ │636 pub fn forkRepoNewRoute(identity: []const u8, id: []const u8) ?RoutablePage { │ ╰───────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1298 if (b.branch.len != 0) try out.writer.print("/" ++ branch_seg ++ "{s}", .{b.branch.slice()}); │ │1299 break :blk out.written(); │ │1300 }, │ │1301 + .repo_delete => |name| try arena.allocator().print("{s}/repo/delete", .{try repoUrlPrefix(arena, name.slice())}),│ │1302 .repo_user => |u| try userTabUrl(arena, try repoUrlPrefix(arena, u.name.slice()), u.tab), │ │1303 .fork_patch => |f| try arena.allocator().print("/{s}+{s}", .{ f.name.slice(), f.id.slice() }), │ │1304 .fork_diff => |d| blk: { │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1325 if (c.message) try out.writer.print("/" ++ message_seg, .{}); │ │1326 break :blk out.written(); │ │1327 }, │ │1328 + .fork_delete => |f| try arena.allocator().print("/{s}+{s}/delete", .{ f.name.slice(), f.id.slice() }), │ │1329 .fork_repo_new => |f| try arena.allocator().print("/{s}+{s}/repo/new", .{ f.name.slice(), f.id.slice() }), │ │1330 .fork_user_new => |f| try arena.allocator().print("/{s}+{s}/user/new", .{ f.name.slice(), f.id.slice() }), │ │1331 .fork_user => |u| try userTabUrl(arena, try arena.allocator().print("/{s}+{s}", .{ u.fork.name.slice(), u.fork.id.slice() }), u.tab),│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1336 fn userTabUrl(arena: *std.heap.ArenaAllocator, prefix: []const u8, tab: UserTab) ![]const u8 {│ │1337 return switch (tab.view) { │ │1338 .settings => try arena.allocator().print("{s}/user/settings", .{prefix}), │ │1339 + .delete => try arena.allocator().print("{s}/user/delete", .{prefix}), │ │1340 .keys => blk: { │ │1341 var out: std.Io.Writer.Allocating = .init(arena.allocator()); │ │1342 try out.writer.print("{s}/user/keys", .{prefix}); │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1394 return if (oid.len != 0) forkCommitMessageRoute(identity, id, oid) else null; │ │1395 return if (segments.rest().len == 0) forkCommitsRoute(identity, id, oid) else null; │ │1396 } │ │1397 + if (std.mem.eql(u8, tab, "delete")) return if (segments.next() == null) forkDeleteRoute(identity, id) else null;│ │1398 if (std.mem.eql(u8, tab, "repo")) return if (isNewTail(&segments)) forkRepoNewRoute(identity, id) else null; │ │1399 if (std.mem.eql(u8, tab, "user")) return switch (userTail(&segments) orelse return null) { │ │1400 .new => forkUserNewRoute(identity, id), │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯