Show full file names on hover
This commit is contained in:
parent
3525399041
commit
f3017480d0
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
### 2026-05-25
|
### 2026-05-25
|
||||||
|
|
||||||
|
- **dev SPA 右侧文件列表长名称 hover 显示全路径**:`web/static/dev.html` 在右 pane 文件行 `.file-row .name` 和"选入…"源文件列表 `.sp-row .sp-name` 上补 `title`,内容取 `e.rel || e.name`,保留现有 ellipsis 截断视觉,鼠标悬停可看完整相对路径/名称。`DESIGN.md` 不动(无架构/心智模型变化);`RUN.md` 不动(运行方式无变化)。
|
||||||
- **dev SPA 左侧滚动条只覆盖 task 列表**:`web/static/dev.html` 左 pane 改成 flex column,顶部 4 行 pane-head(任务标题/新建/搜索筛选/排序)固定不参与滚动;`#task-list` 与 `#task-sentinel` 包进 `#task-scroll`,并把 IntersectionObserver root 从 `#pane-left` 改到 `#task-scroll`,保证无限滚动仍按列表区域触发。`DESIGN.md` 不动(无架构/心智模型变化);`RUN.md` 不动(运行方式无变化)。
|
- **dev SPA 左侧滚动条只覆盖 task 列表**:`web/static/dev.html` 左 pane 改成 flex column,顶部 4 行 pane-head(任务标题/新建/搜索筛选/排序)固定不参与滚动;`#task-list` 与 `#task-sentinel` 包进 `#task-scroll`,并把 IntersectionObserver root 从 `#pane-left` 改到 `#task-scroll`,保证无限滚动仍按列表区域触发。`DESIGN.md` 不动(无架构/心智模型变化);`RUN.md` 不动(运行方式无变化)。
|
||||||
|
|
||||||
### 2026-05-22
|
### 2026-05-22
|
||||||
|
|
|
||||||
|
|
@ -2288,10 +2288,11 @@ function renderSrcPicker(data) {
|
||||||
const cls = e.is_dir ? "ico-dir" : "ico-file";
|
const cls = e.is_dir ? "ico-dir" : "ico-file";
|
||||||
const checked = srcPicker.selected.has(e.rel) ? " checked" : "";
|
const checked = srcPicker.selected.has(e.rel) ? " checked" : "";
|
||||||
const disabled = sameAsDest ? " disabled" : "";
|
const disabled = sameAsDest ? " disabled" : "";
|
||||||
|
const fullTitle = e.rel || e.name;
|
||||||
return `
|
return `
|
||||||
<div class="sp-row${disabled}" data-rel="${escapeHtml(e.rel)}" data-isdir="${e.is_dir}">
|
<div class="sp-row${disabled}" data-rel="${escapeHtml(e.rel)}" data-isdir="${e.is_dir}" title="${escapeHtml(fullTitle)}">
|
||||||
<input type="checkbox" class="sp-cb" data-rel="${escapeHtml(e.rel)}"${checked}${sameAsDest ? " disabled" : ""} />
|
<input type="checkbox" class="sp-cb" data-rel="${escapeHtml(e.rel)}"${checked}${sameAsDest ? " disabled" : ""} />
|
||||||
<span class="${cls} sp-name" data-rel="${escapeHtml(e.rel)}" data-isdir="${e.is_dir}">${escapeHtml(e.name)}</span>
|
<span class="${cls} sp-name" data-rel="${escapeHtml(e.rel)}" data-isdir="${e.is_dir}" title="${escapeHtml(fullTitle)}">${escapeHtml(e.name)}</span>
|
||||||
<span class="sp-size">${humanSize(e.size)}</span>
|
<span class="sp-size">${humanSize(e.size)}</span>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
@ -2441,9 +2442,10 @@ function renderFiles(data) {
|
||||||
for (const e of data.entries) state.entriesByRel[e.rel] = e;
|
for (const e of data.entries) state.entriesByRel[e.rel] = e;
|
||||||
$("file-list").innerHTML = data.entries.map((e) => {
|
$("file-list").innerHTML = data.entries.map((e) => {
|
||||||
const cls = e.is_dir ? "ico-dir" : "ico-file";
|
const cls = e.is_dir ? "ico-dir" : "ico-file";
|
||||||
|
const fullTitle = e.rel || e.name;
|
||||||
return `
|
return `
|
||||||
<div class="file-row" data-rel="${escapeHtml(e.rel)}">
|
<div class="file-row" data-rel="${escapeHtml(e.rel)}" title="${escapeHtml(fullTitle)}">
|
||||||
<span class="${cls} name" data-rel="${escapeHtml(e.rel)}" data-isdir="${e.is_dir}">
|
<span class="${cls} name" data-rel="${escapeHtml(e.rel)}" data-isdir="${e.is_dir}" title="${escapeHtml(fullTitle)}">
|
||||||
${escapeHtml(e.name)}
|
${escapeHtml(e.name)}
|
||||||
</span>
|
</span>
|
||||||
<span class="size">${humanSize(e.size)}</span>
|
<span class="size">${humanSize(e.size)}</span>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue