feat: add clickable tags to item details table

Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-08-29 13:16:20 -03:00
parent 86dbf0c568
commit 9d9f98dc54

View File

@@ -334,37 +334,35 @@ fn build_item_details(conn: &Connection, id: i64) -> Result<String> {
html.push_str("<link rel=\"stylesheet\" href=\"/style.css\">"); html.push_str("<link rel=\"stylesheet\" href=\"/style.css\">");
html.push_str("</head><body>"); html.push_str("</head><body>");
html.push_str(&format!("<h1>Item #{}</h1>", id)); html.push_str(&format!("<h1>Item #{}</h1>", id));
html.push_str("<table>");
html.push_str(&format!("<tr><td>ID:</td><td>{}</td></tr>", item.id.unwrap_or(0)));
html.push_str(&format!("<tr><td>Timestamp:</td><td>{}</td></tr>", item.ts.format("%Y-%m-%d %H:%M:%S")));
html.push_str(&format!("<tr><td>Size:</td><td>{}</td></tr>", item.size.unwrap_or(0)));
html.push_str(&format!("<tr><td>Compression:</td><td>{}</td></tr>", item.compression));
html.push_str("</table>");
// Tags section // Single table for all details
html.push_str("<h2>Tags</h2>"); html.push_str("<table>");
html.push_str(&format!("<tr><th>ID</th><td>{}</td></tr>", item.id.unwrap_or(0)));
html.push_str(&format!("<tr><th>Timestamp</th><td>{}</td></tr>", item.ts.format("%Y-%m-%d %H:%M:%S")));
html.push_str(&format!("<tr><th>Size</th><td>{}</td></tr>", item.size.unwrap_or(0)));
html.push_str(&format!("<tr><th>Compression</th><td>{}</td></tr>", item.compression));
// Tags row
html.push_str("<tr><th>Tags</th><td>");
if tags.is_empty() { if tags.is_empty() {
html.push_str("<p>No tags</p>"); html.push_str("No tags");
} else { } else {
html.push_str("<ul>"); let tag_links: Vec<String> = tags.iter()
for tag in tags { .map(|t| format!("<a href=\"/?tags={}\">{}</a>", t.name, t.name))
html.push_str(&format!("<li>{}</li>", tag.name)); .collect();
} html.push_str(&tag_links.join(", "));
html.push_str("</ul>");
} }
html.push_str("</td></tr>");
// Metadata section // Metadata rows
html.push_str("<h2>Metadata</h2>");
if metas.is_empty() { if metas.is_empty() {
html.push_str("<p>No metadata</p>"); html.push_str("<tr><th>Metadata</th><td>No metadata</td></tr>");
} else { } else {
html.push_str("<table>");
html.push_str("<tr><th>Name</th><th>Value</th></tr>");
for meta in metas { for meta in metas {
html.push_str(&format!("<tr><td>{}</td><td>{}</td></tr>", meta.name, meta.value)); html.push_str(&format!("<tr><th>{}</th><td>{}</td></tr>", meta.name, meta.value));
}
} }
html.push_str("</table>"); html.push_str("</table>");
}
// Links // Links
html.push_str("<h2>Actions</h2>"); html.push_str("<h2>Actions</h2>");