╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ─────────────╮ │src/ui/Repo/Header.zig│ ╰──────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │237 // patches tab │ │238 { │ │229 - var text_box = try wgt.TextBox.init(allocator, "patches", .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none }); │ │239 + var text_box = try wgt.TextBox.init(allocator, patches_tab_label, .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none });│ │240 errdefer text_box.deinit(allocator); │ │241 text_box.getFocus().mode = .all; │ │242 text_box.getFocus().kind = .{ .custom = patches_link }; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────╮ │245 try tabs_box.children.put(allocator, text_box.getFocus().id, .{ │ │246 .widget = .{ .text_box = text_box }, │ │247 .rect = null, │ │238 - .min_size = .{ .width = "patches".len + 2, .height = null }, │ │248 + .min_size = .{ .width = patches_tab_label.len + 2, .height = null },│ │249 }); │ │250 } │ │251 │ ╰─────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │242 - // discussions tab │ │252 + // discuss tab │ │253 { │ │244 - var text_box = try wgt.TextBox.init(allocator, "discussions", .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none }); │ │254 + var text_box = try wgt.TextBox.init(allocator, discuss_tab_label, .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none });│ │255 errdefer text_box.deinit(allocator); │ │256 text_box.getFocus().mode = .all; │ │257 text_box.getFocus().kind = .{ .custom = discussions_link }; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────╮ │260 try tabs_box.children.put(allocator, text_box.getFocus().id, .{ │ │261 .widget = .{ .text_box = text_box }, │ │262 .rect = null, │ │253 - .min_size = .{ .width = "discussions".len + 2, .height = null }, │ │263 + .min_size = .{ .width = discuss_tab_label.len + 2, .height = null },│ │264 }); │ │265 } │ │266 │ ╰─────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │267 // events │ │268 { │ │259 - var text_box = try wgt.TextBox.init(allocator, "events", .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none }); │ │269 + var text_box = try wgt.TextBox.init(allocator, events_tab_label, .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none });│ │270 errdefer text_box.deinit(allocator); │ │271 text_box.getFocus().mode = .all; │ │272 text_box.getFocus().kind = .{ .custom = events_link }; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────╮ │275 try tabs_box.children.put(allocator, text_box.getFocus().id, .{ │ │276 .widget = .{ .text_box = text_box }, │ │277 .rect = null, │ │268 - .min_size = .{ .width = "events".len + 2, .height = null }, │ │278 + .min_size = .{ .width = events_tab_label.len + 2, .height = null },│ │279 }); │ │280 } │ │281 │ ╰────────────────────────────────────────────────────────────────────────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │294 // settings tab. settings are account preferences, so it needs a login │ │295 // (which also rules out local mode, which has no accounts). │ │296 if (session.data.user_id != null) { │ │287 - var text_box = try wgt.TextBox.init(allocator, "settings", .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none }); │ │297 + var text_box = try wgt.TextBox.init(allocator, settings_tab_label, .{ .border_style = .single, .rounded_corners = true, .wrap_kind = .none });│ │298 errdefer text_box.deinit(allocator); │ │299 text_box.getFocus().mode = .all; │ │300 text_box.getFocus().kind = .{ .custom = settings_link }; │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────╮ │303 try tabs_box.children.put(allocator, text_box.getFocus().id, .{ │ │304 .widget = .{ .text_box = text_box }, │ │305 .rect = null, │ │296 - .min_size = .{ .width = "settings".len + 2, .height = null }, │ │306 + .min_size = .{ .width = settings_tab_label.len + 2, .height = null },│ │307 }); │ │308 } │ │309 │ ╰──────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ─────────────╮ │src/ui/Repo/Issues.zig│ ╰──────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────╮ │353 │ │354 pub const Header = thread.Header; │ │355 │ │356 +const open_tab_label = "open"; │ │357 +const closed_tab_label = "closed"; │ │358 +const tags_tab_label = "tags"; │ │359 +const edit_tab_label = "edit"; │ │360 +const reply_tab_label = "reply"; │ │361 +const remove_tab_label = "remove"; │ │362 +const resolve_tab_label = "resolve"; │ │363 +const new_tab_label = "new"; │ │364 +const conflicts_tab_label = "conflicts"; │ │365 + │ │366 // tabs switching between the issues page's views │ │367 pub fn initHeader(allocator: std.mem.Allocator, session: *ui.Session, data: *const Self) !Header {│ │368 var header = try Header.init(allocator); │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │372 const page_selected = std.meta.activeTag(session.data.current_page) == .repo_issues; │ │373 │ │374 // a list tab per status, labeled with its listing's issue count │ │365 - for ([_]evt.Issue.Status{ .open, .closed }, 0..) |status, index| { │ │375 + const status_labels = [_][]const u8{ open_tab_label, closed_tab_label }; │ │376 + for ([_]evt.Issue.Status{ .open, .closed }, status_labels, 0..) |status, status_label, index| { │ │377 const route = ui.RoutablePage.repoIssuesRoute(data.identity, status, data.tag, "") orelse return error.RouteTooLong;│ │378 const link = try ui.inPageTabLink(session, route, page_selected and selected_index == index); │ │379 var label_buf: [64]u8 = undefined; │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯