0.6.12: Redesign the dedup review table for faster, more accurate scanning
The keep/delete columns were raw paths in a fixed-width cell: ellipsis- truncated, full text only on hover. Slow to scan (mousing over every row to read the song name) and, once "fixed" with a tag-derived title/ artist header in a first pass of this change, actively worse for the thing dedup review actually needs -- confirming two files are really the same recording. Tags can be wrong; the filename on disk can't. New layout: each candidate gets a title row (song title, large, unclipped -- parsed from beets' known singleton path template, Artist/Album/Title.ext) followed by a compact detail row. The detail row shows a color-coded format pill (FLAC/MP3/etc, matching the same quality judgment dedup-library.sh's rank_file() already makes) and the full relative file path, always rendered as visible text -- never hover-only -- so a real difference in filename, album, or folder is still plainly visible even when tags line up. Shared artist collapses onto the title row so it isn't repeated per side; a colored left rail marks which side survives without having to read the words. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+54
-5
@@ -475,11 +475,60 @@ tbody tr:hover { background: rgba(167, 139, 250, 0.055); }
|
||||
tbody td.actions-cell { display: flex; gap: 0.5rem; flex-wrap: wrap; }
|
||||
|
||||
.dedup-table { table-layout: fixed; }
|
||||
.dedup-table .path-cell {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
max-width: 0; /* forces the cell to respect the colgroup width instead of the content's natural width */
|
||||
|
||||
/* Each candidate is its own <tbody> (title row + detail row) so the pair
|
||||
highlights together on hover, and so :hover can bubble from either row
|
||||
up to the shared group without JS. That means every detail row is now
|
||||
a tbody's last-child, which would otherwise strip the separator between
|
||||
one candidate and the next (the generic `tbody tr:last-child` rule above
|
||||
assumed one shared tbody) -- restore it here, and only drop it for the
|
||||
actual last group in the table. */
|
||||
.dedup-table .dedup-row-group:hover td { background: rgba(167, 139, 250, 0.06); }
|
||||
.dedup-table .dedup-detail-row td { border-bottom: 1px solid var(--border); }
|
||||
.dedup-table .dedup-row-group:last-of-type .dedup-detail-row td { border-bottom: none; }
|
||||
|
||||
.dedup-title-row td { padding: 0.75rem 1.1rem 0.2rem; border-bottom: none; }
|
||||
.dedup-detail-row td { padding-top: 0.15rem; }
|
||||
|
||||
.dedup-title {
|
||||
font-family: var(--font-display);
|
||||
font-size: 1.02rem;
|
||||
font-weight: 700;
|
||||
color: var(--fg);
|
||||
line-height: 1.35;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
.dedup-title-alt { font-weight: 400; color: var(--muted); }
|
||||
|
||||
.dedup-context { font-size: 0.8rem; margin-top: 0.15rem; }
|
||||
|
||||
/* A thin colored rail on each side echoes the keep/delete verdict itself --
|
||||
green for the copy that survives, muted-pink for the one on the chopping
|
||||
block -- so which side is which reads before you've even read the words. */
|
||||
.dedup-side {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.55rem;
|
||||
padding-left: 0.65rem;
|
||||
border-left: 2px solid transparent;
|
||||
min-height: 1.6rem;
|
||||
}
|
||||
.dedup-side-keep { border-left-color: var(--status-success); }
|
||||
.dedup-side-delete { border-left-color: var(--status-danger); }
|
||||
|
||||
.dedup-side-size { font-size: 0.78rem; white-space: nowrap; flex-shrink: 0; }
|
||||
|
||||
/* The actual filename/path -- always visible, never truncated. Tags can be
|
||||
wrong; this is the ground truth for judging whether two files are really
|
||||
the same recording, so it can't be hover-only the way it was in the first
|
||||
pass of this redesign. */
|
||||
.dedup-side-path {
|
||||
padding-left: 0.65rem;
|
||||
margin-top: 0.2rem;
|
||||
font-size: 0.78rem;
|
||||
color: var(--muted-2);
|
||||
overflow-wrap: anywhere;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.empty-row td { padding: 2.5rem 1rem; text-align: center; }
|
||||
|
||||
Reference in New Issue
Block a user