|
|
@@ -89,7 +89,7 @@
|
|
|
<header class="selection-header" [class.refine-selection-header]="isRefineSelectionPage">
|
|
|
<div>
|
|
|
@if (isRefineSelectionPage) {
|
|
|
- <strong>本次待学 {{ selected().size }} / {{ selectionLimit }}</strong>
|
|
|
+ <strong>{{ isReadOnlySelectionPage ? '词库学习进度' : '本次待学 ' + selected().size + ' / ' + selectionLimit }}</strong>
|
|
|
<span>已学完 {{ completedSelectionWords().length }} · 还没学 {{ pendingSelectionWords().length }}</span>
|
|
|
} @else {
|
|
|
<strong>已选 {{ selected().size }} / {{ selectionLimit }}</strong>
|
|
|
@@ -98,9 +98,11 @@
|
|
|
</div>
|
|
|
<div class="header-actions">
|
|
|
@if (!isRefineSelectionPage) { <button type="button" class="quiet-button" (click)="toggleAllWords()">{{ selected().size ? '取消全选' : '全选' }}</button> }
|
|
|
- <button type="button" class="primary-button" [disabled]="submitting()" (click)="startSelected()">
|
|
|
- <lucide-icon [img]="icons.Play" [size]="17" />{{ isRefineSelectionPage ? selectionActionLabel() : '开始学习' }}
|
|
|
- </button>
|
|
|
+ @if (!isReadOnlySelectionPage) {
|
|
|
+ <button type="button" class="primary-button" [disabled]="submitting()" (click)="startSelected()">
|
|
|
+ <lucide-icon [img]="icons.Play" [size]="17" />{{ isRefineSelectionPage ? selectionActionLabel() : '开始学习' }}
|
|
|
+ </button>
|
|
|
+ }
|
|
|
</div>
|
|
|
</header>
|
|
|
@if (isRefineSelectionPage) {
|
|
|
@@ -116,21 +118,25 @@
|
|
|
|
|
|
@if (activeSelectionBucket() === 'pending') {
|
|
|
<section class="word-selection-list pending-column" role="tabpanel" aria-label="还没学的单词">
|
|
|
- <p class="word-column-help">先回忆中文,核对后选择“认识”或“加入学习”。</p>
|
|
|
+ <p class="word-column-help">{{ isReadOnlySelectionPage ? '这些单词尚未完成学习,可点击单词查看释义和读音。' : '先回忆中文,核对后选择“认识”或“加入学习”。' }}</p>
|
|
|
<div class="word-select-list">
|
|
|
@for (word of pendingSelectionWords(); track word.id) {
|
|
|
<article class="word-refine-item" [class.selected]="selected().has(word.id)">
|
|
|
<div class="word-refine-main">
|
|
|
- <button type="button" class="word-select-check" [attr.aria-label]="(selected().has(word.id) ? '移出学习:' : '加入学习:') + word.word" [attr.aria-pressed]="selected().has(word.id)" (click)="toggleWord(word)">
|
|
|
- @if (selected().has(word.id)) { <lucide-icon [img]="icons.Check" [size]="16" /> }
|
|
|
- </button>
|
|
|
+ @if (isReadOnlySelectionPage) {
|
|
|
+ <span class="word-pending-mark" aria-hidden="true"><lucide-icon [img]="icons.CircleHelp" [size]="16" /></span>
|
|
|
+ } @else {
|
|
|
+ <button type="button" class="word-select-check" [attr.aria-label]="(selected().has(word.id) ? '移出学习:' : '加入学习:') + word.word" [attr.aria-pressed]="selected().has(word.id)" (click)="toggleWord(word)">
|
|
|
+ @if (selected().has(word.id)) { <lucide-icon [img]="icons.Check" [size]="16" /> }
|
|
|
+ </button>
|
|
|
+ }
|
|
|
<button type="button" class="word-reveal" [attr.aria-expanded]="selectionWordRevealed(word)" (click)="revealSelectionWord(word)">
|
|
|
<strong>{{ word.word }}</strong>
|
|
|
<small [class.revealed]="selectionWordRevealed(word)">{{ selectionWordRevealed(word) ? (word.meaning || '暂无释义') : '先说出中文意思,再点击核对' }}</small>
|
|
|
</button>
|
|
|
<span class="audio" aria-hidden="true"><lucide-icon [img]="icons.Volume2" [size]="18" /></span>
|
|
|
</div>
|
|
|
- @if (selectionWordRevealed(word)) {
|
|
|
+ @if (selectionWordRevealed(word) && !isReadOnlySelectionPage) {
|
|
|
<div class="word-assessment">
|
|
|
<span>和你刚才说的一样吗?</span>
|
|
|
<button type="button" class="known-button" [class.active]="selectionAssessment()[word.id] === 'known'" (click)="markWordKnown(word)"><lucide-icon [img]="icons.Check" [size]="15" />认识</button>
|