╭ changed ─╮ │src/ui.zig│ ╰──────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────╮ │← previous│ ╰──────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1443 │ │1444 pub fn parent(self: RoutablePage) PageKind { │ │1445 return switch (self) { │ │1448 - .home_about, .home_users, .home_new_repo, .home_new_user, .home_user => .home, │ │1449 - .user_repos, .user_forks, .user_new_repo, .user_new_user, .user_user => .user, │ │1450 - .repo_files, .repo_commits, .repo_diff, .repo_refs, .repo_issues, .repo_patches, .repo_discussions, .repo_events, .repo_undo, .repo_new_repo, .repo_new_user, .repo_user => .repo,│ │1451 - .fork_patch, .fork_diff, .fork_files, .fork_commits, .fork_new_repo, .fork_new_user, .fork_user => .fork, │ │1446 + .home_about, .home_users, .home_repo_new, .home_user_new, .home_user => .home, │ │1447 + .user_repos, .user_forks, .user_repo_new, .user_user_new, .user_user => .user, │ │1448 + .repo_files, .repo_commits, .repo_diff, .repo_refs, .repo_issues, .repo_patches, .repo_discussions, .repo_events, .repo_undo, .repo_repo_new, .repo_user_new, .repo_user => .repo,│ │1449 + .fork_patch, .fork_diff, .fork_files, .fork_commits, .fork_repo_new, .fork_user_new, .fork_user => .fork, │ │1450 .not_found => .not_found, │ │1451 }; │ │1452 } │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────╮ │1461 } │ │1462 │ │1463 // a list route's tail: at most a "start:<n>" param, null on anything else│ │1464 + // whether the rest of `segments` is exactly "new" │ │1465 + fn isNewTail(segments: *std.mem.SplitIterator(u8, .scalar)) bool { │ │1466 + const next = segments.next() orelse return false; │ │1467 + return std.mem.eql(u8, next, "new") and segments.next() == null; │ │1468 + } │ │1469 + │ │1470 fn listStart(segments: *std.mem.SplitIterator(u8, .scalar)) ?usize { │ │1471 const params = listParams(segments, &.{.start}) orelse return null; │ │1472 return params.start(); │ ╰────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1493 var segments = std.mem.splitScalar(u8, sub, '/'); │ │1494 const tab = segments.next() orelse return null; │ │1495 var params = Params{}; │ │1492 - if (std.mem.eql(u8, tab, "new-repo")) return if (segments.next() == null) .{ .repo_new_repo = Array(repo_route_max_len).from(pair) orelse return null } else null; │ │1493 - if (std.mem.eql(u8, tab, "new-user")) return if (segments.next() == null) .{ .repo_new_user = Array(repo_route_max_len).from(pair) orelse return null } else null; │ │1494 - if (std.mem.eql(u8, tab, "user")) return if (segments.next() == null) .{ .repo_user = Array(repo_route_max_len).from(pair) orelse return null } else null; │ │1496 + if (std.mem.eql(u8, tab, "repo")) return if (isNewTail(&segments)) .{ .repo_repo_new = Array(repo_route_max_len).from(pair) orelse return null } else null; │ │1497 + if (std.mem.eql(u8, tab, "user")) return if (segments.peek() == null) .{ .repo_user = Array(repo_route_max_len).from(pair) orelse return null } else if (isNewTail(&segments)) .{ .repo_user_new = Array(repo_route_max_len).from(pair) orelse return null } else null;│ │1498 if (std.mem.eql(u8, tab, "refs")) { │ │1499 const word = params.scanTail(&segments) catch return null; │ │1500 if (word != null or !params.only(&.{ .branch, .tag, .search })) return null; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1748 .home_users => |a_u| a_u.start == b.home_users.start and std.mem.eql(u8, a_u.search.slice(), b.home_users.search.slice()), │ │1749 .user_repos => |a_u| std.mem.eql(u8, a_u.name.slice(), b.user_repos.name.slice()) and a_u.start == b.user_repos.start and std.mem.eql(u8, a_u.search.slice(), b.user_repos.search.slice()),│ │1750 .user_forks => |a_u| std.mem.eql(u8, a_u.name.slice(), b.user_forks.name.slice()) and a_u.start == b.user_forks.start, │ │1748 - .user_new_repo => |a_name| std.mem.eql(u8, a_name.slice(), b.user_new_repo.slice()), │ │1749 - .user_new_user => |a_name| std.mem.eql(u8, a_name.slice(), b.user_new_user.slice()), │ │1751 + .user_repo_new => |a_name| std.mem.eql(u8, a_name.slice(), b.user_repo_new.slice()), │ │1752 + .user_user_new => |a_name| std.mem.eql(u8, a_name.slice(), b.user_user_new.slice()), │ │1753 .user_user => |a_name| std.mem.eql(u8, a_name.slice(), b.user_user.slice()), │ │1754 .repo_files => |a_f| std.mem.eql(u8, a_f.name.slice(), b.repo_files.name.slice()) and │ │1755 a_f.ref_kind == b.repo_files.ref_kind and │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1804 a_e.moment == b.repo_events.moment and │ │1805 a_e.kind == b.repo_events.kind and │ │1806 std.mem.eql(u8, a_e.selected.slice(), b.repo_events.selected.slice()), │ │1804 - .repo_new_repo => |a_name| std.mem.eql(u8, a_name.slice(), b.repo_new_repo.slice()), │ │1805 - .repo_new_user => |a_name| std.mem.eql(u8, a_name.slice(), b.repo_new_user.slice()), │ │1807 + .repo_repo_new => |a_name| std.mem.eql(u8, a_name.slice(), b.repo_repo_new.slice()), │ │1808 + .repo_user_new => |a_name| std.mem.eql(u8, a_name.slice(), b.repo_user_new.slice()), │ │1809 .repo_user => |a_name| std.mem.eql(u8, a_name.slice(), b.repo_user.slice()), │ │1810 .fork_patch => |a_f| std.mem.eql(u8, a_f.name.slice(), b.fork_patch.name.slice()) and std.mem.eql(u8, a_f.id.slice(), b.fork_patch.id.slice()),│ │1811 .fork_diff => |a_d| std.mem.eql(u8, a_d.fork.name.slice(), b.fork_diff.fork.name.slice()) and │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1823 std.mem.eql(u8, a_c.fork.id.slice(), b.fork_commits.fork.id.slice()) and │ │1824 std.mem.eql(u8, a_c.oid.slice(), b.fork_commits.oid.slice()) and │ │1825 a_c.message == b.fork_commits.message, │ │1823 - .fork_new_repo => |a_f| std.mem.eql(u8, a_f.name.slice(), b.fork_new_repo.name.slice()) and std.mem.eql(u8, a_f.id.slice(), b.fork_new_repo.id.slice()),│ │1824 - .fork_new_user => |a_f| std.mem.eql(u8, a_f.name.slice(), b.fork_new_user.name.slice()) and std.mem.eql(u8, a_f.id.slice(), b.fork_new_user.id.slice()),│ │1826 + .fork_repo_new => |a_f| std.mem.eql(u8, a_f.name.slice(), b.fork_repo_new.name.slice()) and std.mem.eql(u8, a_f.id.slice(), b.fork_repo_new.id.slice()),│ │1827 + .fork_user_new => |a_f| std.mem.eql(u8, a_f.name.slice(), b.fork_user_new.name.slice()) and std.mem.eql(u8, a_f.id.slice(), b.fork_user_new.id.slice()),│ │1828 .fork_user => |a_f| std.mem.eql(u8, a_f.name.slice(), b.fork_user.name.slice()) and std.mem.eql(u8, a_f.id.slice(), b.fork_user.id.slice()), │ │1829 else => true, │ │1830 }; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯