| 04-bbs-polish-and-live-content |
01 |
ui |
| ansi-to-tui |
| notify |
| walkdir |
| ratatui |
| rust |
| splash-screen |
| file-metadata |
| status-bar |
|
| phase |
provides |
| 03-navigation-and-links |
navigate_to/back/forward with link_records, breadcrumb status bar, draw_status_bar() |
|
|
| src/splash.rs with load_splash() loading ANSI art from splash.txt via ansi-to-tui |
| PageMeta struct and read_page_meta() with pure Gregorian date math in app.rs |
| Splash prepend with link_record line_index offsetting in navigate_to/back/forward and initial load |
| Status bar right side shows 'Last modified: Mon DD, YYYY | X.X KB' with graceful truncation |
| All Phase 4 dependencies (notify=6.1, ansi-to-tui=8.0, walkdir=2.5) in Cargo.toml |
|
| 04-02-live-reload |
| 04-03-directory-listing |
|
| added |
patterns |
| ansi-to-tui = 8.0 — ANSI SGR escape code parser targeting ratatui-core types |
| notify = 6.1 — cross-platform filesystem watcher (for Phase 4 plan 02) |
| walkdir = 2.5 — recursive directory traversal with depth tracking (for Phase 4 plan 03) |
|
| Splash prepend pattern: load_splash() returns Vec<Line<'static>>, prepend to markdown lines, offset link_records by splash_count + 1 (blank separator) |
| Page metadata computed in App::new() and on every navigation from vault_path.join(current_path) |
| Status bar graceful truncation: loop removing second-to-last right_part until left.len + right.len <= width |
|
|
| created |
modified |
| src/splash.rs — load_splash() reading splash.txt as Vec<u8>, parsing via IntoText trait |
|
| Cargo.toml — added notify, ansi-to-tui, walkdir dependencies |
| src/app.rs — PageMeta struct, read_page_meta(), unix_secs_to_ymd(), is_leap(), format_file_size(), page_meta field in App, splash logic in navigate_to/back/forward/handle_resize, metadata in draw_status_bar |
| src/main.rs — splash prepend in initial index.md load, mod splash declaration |
|
|
| App::new() computes page_meta internally from config.vault_path + current_path — keeps PageMeta private, no public type exposure needed |
| splash_count = splash_lines.len() + 1 for the blank separator Line — all link_record line_index values offset by this amount to keep Tab-cycling correct |
| Status bar truncation drops right_parts[hints_idx - 1] (the metadata item) progressively until bar fits — hints always kept as last item |
| Hand-rolled Gregorian date math (unix_secs_to_ymd + is_leap) — avoids external time crate dependency, ~20 lines |
| ratatui-core verified as single version via cargo tree — ansi-to-tui 8.0 unifies correctly with ratatui 0.30 |
|
| Splash pattern: load bytes with std::fs::read, call .into_text().ok()?, return .lines — all owned, 'static lifetime |
| Link offset pattern: splash_count = splash_lines.len() + 1; for record in &mut link_records { record.line_index += splash_count; } |
| Metadata pattern: read_page_meta(&vault_path.join(vault_relative)) after successful VaultDocument::Loaded |
|
|
4min |
2026-02-28 |