╭ changed ────╮ │src/event.zig│ ╰─────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │1245 const record_maybe: ?Comment.Record = if (event_maybe) |event| .{ │ │1246 .event = event, │ │1247 .author_email = authorEmail(commit_object.content.commit.metadata.author orelse ""),│ │1248 + .created_timestamp = commit_object.content.commit.metadata.timestamp, │ │1249 .created_order = event_order, │ │1250 .updated_order = event_order, │ │1251 } else null; │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ────────────╮ │src/event/Comment.zig│ ╰─────────────────────╯ ╭─────────────────────────────────────────╮ │13 event: Self, │ │14 removed: bool = false, │ │15 author_email: ?[]const u8 = null,│ │16 + created_timestamp: u64 = 0, │ │17 created_order: u64 = 0, │ │18 updated_order: u64 = 0, │ │19 }; │ ╰─────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │69 // updates preserve the original creation order and author │ │70 record_to_write.created_order = existing_record.created_order; │ │71 record_to_write.author_email = existing_record.author_email; │ │72 + record_to_write.created_timestamp = existing_record.created_timestamp; │ │73 │ │74 // a comment cannot move between threads or positions in the thread │ │75 if (!std.mem.eql(u8, &existing_record.event.thread_id, &record_to_write.event.thread_id)) return error.ThreadChanged;│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ──────────────╮ │src/ui/Repo/Comment.zig│ ╰───────────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │198 try bar.children.put(allocator, parent.getFocus().id, .{ .widget = .{ .text_box = parent }, .rect = null, .min_size = .{ .width = @max(parent_text.len, " replying to ".len) + 2, .height = null } });│ │199 } │ │200 │ │201 - var permalink = try linkBox(allocator, session, "permalink", commentsRoute(thread_kind, identity, &entry.comment.event.thread_id, &entry.id, 0) orelse return error.RouteTooLong); │ │201 + const timestamp = try ui.Repo.Undo.formatTimestamp(session.page_arena.allocator(), std.math.cast(i64, entry.comment.created_timestamp) orelse -1); │ │202 + var permalink = try linkBox(allocator, session, timestamp, commentsRoute(thread_kind, identity, &entry.comment.event.thread_id, &entry.id, 0) orelse return error.RouteTooLong); │ │203 errdefer permalink.deinit(allocator); │ │203 - try bar.children.put(allocator, permalink.getFocus().id, .{ .widget = .{ .text_box = permalink }, .rect = null, .min_size = .{ .width = "permalink".len + 2, .height = null } }); │ │204 + permalink.options.top_label.text = " permalink "; │ │205 + try bar.children.put(allocator, permalink.getFocus().id, .{ .widget = .{ .text_box = permalink }, .rect = null, .min_size = .{ .width = @max(timestamp.len, " permalink ".len) + 2, .height = null } }); │ │206 │ │207 if (entry.can_modify and !entry.comment.removed) { │ │208 var remove = try linkBox(allocator, session, "✕", removeRoute(thread_kind, identity, &entry.comment.event.thread_id, &entry.id) orelse return error.RouteTooLong); │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯