╭──────────╮ │← previous│ ╰──────────╯ ╭ changed ────╮ │src/event.zig│ ╰─────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │574 std.mem.writeInt(u64, key[0..@sizeOf(u64)], timestamp, .big); │ │575 @memcpy(key[@sizeOf(u64)..], event_id); │ │576 return key; │ │577 +} │ │578 + │ │579 +pub fn orderKeyDesc(timestamp: u64, event_id: *const [event_id_size]u8) [@sizeOf(u64) + event_id_size]u8 {│ │580 + return orderKey(std.math.maxInt(u64) - timestamp, event_id); │ │581 } │ │582 │ │583 // split a pushed "<owner>/<repo>" path into its two components, or null if it │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │633 io.random(&id_bytes); │ │634 const event_id_hex = std.fmt.bytesToHex(id_bytes, .lower); │ │635 │ │605 - try commitAndConsume(admin_repo_opts, io, allocator, &repo, events_ref, &[_]EventWithId{.{ │ │636 + try commitAndConsume(.xit, admin_repo_opts, io, allocator, &repo, events_ref, &[_]EventWithId{.{│ │637 .id = event_id_hex, │ │638 .timestamp = @intCast(std.Io.Timestamp.now(io, .real).toSeconds()), │ │639 .event = .{ .repo = .{ │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────────────────────────────────────╮ │642 .description = "", │ │643 .enable_issue = true,│ │644 } }, │ │614 - }}); │ │645 + }}, false); │ │646 │ │647 return event_id_hex; │ │648 } │ ╰──────────────────────────────────────╯ ╭ changed ──────────╮ │src/event/Issue.zig│ ╰───────────────────╯ ╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │80 event_to_write.created_ts = existing_event.created_ts; │ │81 │ │82 // drop the old status's and tags' entries; the current ones are re-added below │ │83 - const order_key = evt.orderKey(existing_event.created_ts, event_id); │ │83 + const order_key = evt.orderKeyDesc(existing_event.created_ts, event_id); │ │84 const status_set = try statusSet(DB, status_to_issues, existing_event.status); │ │85 _ = try status_set.remove(&order_key); │ │86 try removeFromTagSets(DB, tag_to_issues, existing_event.tags, existing_event.status, &order_key);│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────╮ │93 const issue = try DB.HashMap(.read_write).init(issue_cursor); │ │94 try evt.upsert(@This(), DB, hash_kind, issue, event_to_write); │ │95 │ │96 - const order_key = evt.orderKey(event_to_write.created_ts, event_id); │ │96 + const order_key = evt.orderKeyDesc(event_to_write.created_ts, event_id);│ │97 │ │98 const status_set = try statusSet(DB, status_to_issues, event.status); │ │99 try status_set.put(&order_key); │ ╰────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────────────╮ │112 if (try event_id_to_issue.getCursor(issue_key)) |existing_cursor| { │ │113 const existing_issue = try DB.HashMap(.read_only).init(existing_cursor); │ │114 const existing_event = try evt.read(@This(), DB, hash_kind, arena, existing_issue);│ │115 - const order_key = evt.orderKey(existing_event.created_ts, event_id); │ │115 + const order_key = evt.orderKeyDesc(existing_event.created_ts, event_id); │ │116 │ │117 const status_set = try statusSet(DB, status_to_issues, existing_event.status); │ │118 _ = try status_set.remove(&order_key); │ ╰────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭ changed ─────────╮ │src/event/User.zig│ ╰──────────────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │243 │ │244 var updated = user; │ │245 updated.enable_ansi = !user.enable_ansi; │ │246 - try evt.commitAndConsume(repo_opts, io, allocator, repo, evt.events_ref, &[_]evt.EventWithId{.{ │ │246 + try evt.commitAndConsume(.xit, repo_opts, io, allocator, repo, evt.events_ref, &[_]evt.EventWithId{.{│ │247 .id = std.fmt.bytesToHex(user_id[0..evt.event_id_size].*, .lower), │ │248 .timestamp = @intCast(std.Io.Timestamp.now(io, .real).toSeconds()), │ │249 .event = .{ .user = updated }, │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────╮ │250 - }}); │ │250 + }}, false);│ │251 } │ │252 │ ╰────────────────────╯ ╭ changed ────────╮ │src/main_wasm.zig│ ╰─────────────────╯ ╭───────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ 94 // so the browser handles typing and Enter-to-submit natively. without this │ │ 95 // the submit button never gets focus and Enter falls through to the wasm. │ │ 96 switch (child.focus.kind) { │ │ 97 - .text_input, .text_input_password => _focusInput(@intCast(gid)), │ │ 97 + .text_input, .text_input_password, .text_area => _focusInput(@intCast(gid)), │ │ 98 .custom => |custom| if (std.mem.eql(u8, custom, "submit")) _focusInput(@intCast(gid)),│ │ 99 else => {}, │ │100 } │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────╯ ╭────────────────────────────────────────────────────────────────────────────────────────────╮ │232 const root_focus = root_ptr.getFocus(); │ │233 const child = root_focus.children.get(focus_id) orelse return error.UnknownFocusId;│ │234 switch (child.focus.kind) { │ │235 - .text_input, .text_input_password => {}, │ │235 + .text_input, .text_input_password, .text_area => {}, │ │236 else => return error.NotATextInput, │ │237 } │ │238 const ti = session.text_inputs.get(focus_id) orelse return error.UnknownFocusId; │ ╰────────────────────────────────────────────────────────────────────────────────────────────╯ ╭──────╮ │next →│ ╰──────╯