[verified] move trash restore into action menu
ci / gitleaks (push) Successful in 1m9s
ci / docker (push) Successful in 5m49s

This commit is contained in:
2026-09-21 10:22:46 +08:00
parent 927e15cf17
commit 7f8b435164
5 changed files with 39 additions and 16 deletions
+13 -5
View File
@@ -34,7 +34,7 @@ describe('unified task due display', () => {
expect(app.match(/<span v-if="[^\"]+\.due_at" class="task-tail"><TaskDueDisplay/g)).toHaveLength(3)
expect(app).not.toContain('class="meta"><TaskDueDisplay')
expect(app).toContain('</div><span v-if="node.task.due_at" class="task-tail"><TaskDueDisplay')
expect(app).toContain('<span class="task-actions"><button class="restore" @click.stop="restoreTask(node.task)">')
expect(app).toContain('<span class="task-actions"><button class="icon ghost trash-more"')
expect(app).not.toContain('restoreTask(subtask)')
expect(app).not.toContain('purgeTask(subtask)')
expect(app).not.toContain('task-detail-trigger')
@@ -325,7 +325,7 @@ describe('approved UI detail direction', () => {
expect(ordinaryRows).not.toContain('aria-label="删除任务"')
const trashRows = app.slice(app.indexOf('class="trash-groups"'), ordinaryStart)
expect(trashRows).toContain('class="task-actions"')
expect(trashRows).toContain('restoreTask(node.task)')
expect(trashRows).not.toContain('restoreTask(node.task)')
expect(trashRows).toContain('openTrashAction(node.task,$event)')
const overdue = app.slice(app.indexOf('<section v-if="overdueTaskTree.length"'), app.indexOf('id="today-tasks-heading"'))
expect(overdue).toContain('selectTaskUnlessSwiped(node.task)')
@@ -841,8 +841,14 @@ describe('task and habit row decoration', () => {
expect(app).not.toContain('<strong>{{node.task.title}}</strong>')
})
it('keeps the Trash restore action at least 44px tall', () => {
expect(css).toMatch(/\.restore\{[^}]*min-height:44px/)
it('keeps Trash row actions inside the ellipsis menu', () => {
const trashRows = app.slice(app.indexOf('class="trash-groups"'), app.indexOf('<section v-else'))
const trashMenu = app.slice(app.indexOf('class="trash-action-menu"'), app.indexOf('class="archived-action-mask"'))
expect(trashRows).not.toContain('class="restore"')
expect(trashRows).not.toContain('restoreTask(node.task)')
expect(trashMenu).toContain('@click="requestRestoreTask"')
expect(trashMenu).toContain('<ArchiveRestore/>恢复')
expect(trashMenu).toContain('@click="requestPurgeTask"')
})
it('keeps Trash deadlines visible on mobile before the action area', () => {
@@ -858,7 +864,9 @@ describe('task and habit row decoration', () => {
expect(app).toContain('@click.stop="openTrashAction(node.task,$event)"')
expect(app).toContain('ref="trashMenu" class="trash-action-menu" role="menu" aria-label="回收站任务操作"')
expect(app).toContain('@keydown.esc.stop="closeTrashAction()"')
expect(app).toContain('@keydown.tab.prevent="focusTrashMenuItem"')
expect(app).toContain('@keydown.tab.prevent="moveTrashMenuFocus($event.shiftKey?-1:1)"')
expect(app).toContain('@keydown.down.prevent="moveTrashMenuFocus(1)"')
expect(app).toContain('@keydown.up.prevent="moveTrashMenuFocus(-1)"')
expect(app).toContain("nextTick(() => trashMenu.value?.querySelector<HTMLElement>('[role=menuitem]')?.focus())")
expect(app).toContain('if (trigger?.isConnected) trigger.focus()')
expect(app).toContain('await purgeTask(task)')