fixed layout in "on page" section

This commit is contained in:
2026-02-11 11:38:35 +03:00
parent 26e3bac589
commit 4932b20991
17 changed files with 127 additions and 31 deletions

View File

@@ -36,7 +36,7 @@
"message": "Wörter hinzufügen" "message": "Wörter hinzufügen"
}, },
"select_all": { "select_all": {
"message": "Auswählen" "message": "Alle auswählen"
}, },
"delete_selected": { "delete_selected": {
"message": "Ausgewählte löschen" "message": "Ausgewählte löschen"
@@ -78,7 +78,7 @@
"message": "Möchten Sie die ausgewählten Wörter wirklich löschen?" "message": "Möchten Sie die ausgewählten Wörter wirklich löschen?"
}, },
"deselect_all": { "deselect_all": {
"message": "Abwählen" "message": "Alle abwählen"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Hervorhebungslisten" "message": "Hervorhebungslisten"

View File

@@ -36,7 +36,7 @@
"message": "Add Words" "message": "Add Words"
}, },
"select_all": { "select_all": {
"message": "Select" "message": "Select all"
}, },
"delete_selected": { "delete_selected": {
"message": "Delete selected" "message": "Delete selected"
@@ -78,7 +78,7 @@
"message": "Are you sure you want to delete the selected words?" "message": "Are you sure you want to delete the selected words?"
}, },
"deselect_all": { "deselect_all": {
"message": "Deselect" "message": "Deselect all"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Highlight Lists" "message": "Highlight Lists"

View File

@@ -35,8 +35,8 @@
"apply_paste": { "apply_paste": {
"message": "Agregar palabras" "message": "Agregar palabras"
}, },
"select_all": { "select_all": {
"message": "Seleccionar" "message": "Seleccionar todo"
}, },
"delete_selected": { "delete_selected": {
"message": "Eliminar seleccionados" "message": "Eliminar seleccionados"
@@ -77,8 +77,8 @@
"confirm_delete_words": { "confirm_delete_words": {
"message": "¿Estás seguro de que deseas eliminar las palabras seleccionadas?" "message": "¿Estás seguro de que deseas eliminar las palabras seleccionadas?"
}, },
"deselect_all": { "deselect_all": {
"message": "Deseleccionar" "message": "Deseleccionar todo"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Listas de resaltado" "message": "Listas de resaltado"

View File

@@ -36,7 +36,7 @@
"message": "Ajouter des mots" "message": "Ajouter des mots"
}, },
"select_all": { "select_all": {
"message": "Sélectionner" "message": "Tout sélectionner"
}, },
"delete_selected": { "delete_selected": {
"message": "Supprimer la sélection" "message": "Supprimer la sélection"
@@ -78,7 +78,7 @@
"message": "Êtes-vous sûr de vouloir supprimer les mots sélectionnés ?" "message": "Êtes-vous sûr de vouloir supprimer les mots sélectionnés ?"
}, },
"deselect_all": { "deselect_all": {
"message": "Désélectionner" "message": "Tout désélectionner"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Listes de surbrillance" "message": "Listes de surbrillance"

View File

@@ -78,7 +78,7 @@
"message": "क्या आप वाकई चयनित शब्दों को हटाना चाहते हैं?" "message": "क्या आप वाकई चयनित शब्दों को हटाना चाहते हैं?"
}, },
"deselect_all": { "deselect_all": {
"message": "चयन हटाएँ" "message": "सभी का चयन हटाएँ"
}, },
"highlight_lists": { "highlight_lists": {
"message": "हाइलाइट सूचियाँ" "message": "हाइलाइट सूचियाँ"

View File

@@ -36,7 +36,7 @@
"message": "Aggiungi parole" "message": "Aggiungi parole"
}, },
"select_all": { "select_all": {
"message": "Seleziona" "message": "Seleziona tutto"
}, },
"delete_selected": { "delete_selected": {
"message": "Elimina selezionati" "message": "Elimina selezionati"
@@ -78,7 +78,7 @@
"message": "Sei sicuro di voler eliminare le parole selezionate?" "message": "Sei sicuro di voler eliminare le parole selezionate?"
}, },
"deselect_all": { "deselect_all": {
"message": "Deseleziona" "message": "Deseleziona tutto"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Elenchi di evidenziazione" "message": "Elenchi di evidenziazione"

View File

@@ -78,7 +78,7 @@
"message": "選択した単語を削除してもよろしいですか?" "message": "選択した単語を削除してもよろしいですか?"
}, },
"deselect_all": { "deselect_all": {
"message": "すべて解除" "message": "すべての選択を解除"
}, },
"highlight_lists": { "highlight_lists": {
"message": "ハイライトリスト" "message": "ハイライトリスト"

View File

@@ -36,7 +36,7 @@
"message": "단어 추가" "message": "단어 추가"
}, },
"select_all": { "select_all": {
"message": "선택" "message": "모두 선택"
}, },
"delete_selected": { "delete_selected": {
"message": "선택 항목 삭제" "message": "선택 항목 삭제"
@@ -78,7 +78,7 @@
"message": "선택한 단어를 삭제하시겠습니까?" "message": "선택한 단어를 삭제하시겠습니까?"
}, },
"deselect_all": { "deselect_all": {
"message": "선택 해제" "message": "모두 선택 해제"
}, },
"highlight_lists": { "highlight_lists": {
"message": "하이라이트 리스트" "message": "하이라이트 리스트"

View File

@@ -36,7 +36,7 @@
"message": "Woorden toevoegen" "message": "Woorden toevoegen"
}, },
"select_all": { "select_all": {
"message": "Selecteren" "message": "Alles selecteren"
}, },
"delete_selected": { "delete_selected": {
"message": "Geselecteerde verwijderen" "message": "Geselecteerde verwijderen"
@@ -78,7 +78,7 @@
"message": "Weet je zeker dat je de geselecteerde woorden wilt verwijderen?" "message": "Weet je zeker dat je de geselecteerde woorden wilt verwijderen?"
}, },
"deselect_all": { "deselect_all": {
"message": "Deselecteren" "message": "Alles deselecteren"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Markeer lijsten" "message": "Markeer lijsten"

View File

@@ -36,7 +36,7 @@
"message": "Dodaj słowa" "message": "Dodaj słowa"
}, },
"select_all": { "select_all": {
"message": "Zaznacz" "message": "Zaznacz wszystko"
}, },
"delete_selected": { "delete_selected": {
"message": "Usuń zaznaczone" "message": "Usuń zaznaczone"
@@ -78,7 +78,7 @@
"message": "Czy na pewno chcesz usunąć wybrane słowa?" "message": "Czy na pewno chcesz usunąć wybrane słowa?"
}, },
"deselect_all": { "deselect_all": {
"message": "Odznacz" "message": "Odznacz wszystko"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Listy podświetleń" "message": "Listy podświetleń"

View File

@@ -36,7 +36,7 @@
"message": "Adicionar palavras" "message": "Adicionar palavras"
}, },
"select_all": { "select_all": {
"message": "Selecionar" "message": "Selecionar tudo"
}, },
"delete_selected": { "delete_selected": {
"message": "Excluir selecionados" "message": "Excluir selecionados"
@@ -78,7 +78,7 @@
"message": "Tem certeza de que deseja excluir as palavras selecionadas?" "message": "Tem certeza de que deseja excluir as palavras selecionadas?"
}, },
"deselect_all": { "deselect_all": {
"message": "Desmarcar" "message": "Desmarcar tudo"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Listas de destaque" "message": "Listas de destaque"

View File

@@ -78,7 +78,7 @@
"message": "Вы уверены, что хотите удалить выбранные слова?" "message": "Вы уверены, что хотите удалить выбранные слова?"
}, },
"deselect_all": { "deselect_all": {
"message": "Отменить выбор" "message": "Снять выделение со всех"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Списки" "message": "Списки"

View File

@@ -36,7 +36,7 @@
"message": "Kelimeleri Ekle" "message": "Kelimeleri Ekle"
}, },
"select_all": { "select_all": {
"message": "Seç" "message": "Tümünü seç"
}, },
"delete_selected": { "delete_selected": {
"message": "Seçilenleri sil" "message": "Seçilenleri sil"
@@ -78,7 +78,7 @@
"message": "Seçili kelimeleri silmek istediğinizden emin misiniz?" "message": "Seçili kelimeleri silmek istediğinizden emin misiniz?"
}, },
"deselect_all": { "deselect_all": {
"message": "Seçimi Kaldır" "message": "Tümünün seçimini kaldır"
}, },
"highlight_lists": { "highlight_lists": {
"message": "Vurgulama Listeleri" "message": "Vurgulama Listeleri"

View File

@@ -36,7 +36,7 @@
"message": "添加单词" "message": "添加单词"
}, },
"select_all": { "select_all": {
"message": "选" "message": "选"
}, },
"delete_selected": { "delete_selected": {
"message": "删除所选" "message": "删除所选"
@@ -78,7 +78,7 @@
"message": "您确定要删除选中的单词吗?" "message": "您确定要删除选中的单词吗?"
}, },
"deselect_all": { "deselect_all": {
"message": "取消选" "message": "取消选"
}, },
"highlight_lists": { "highlight_lists": {
"message": "高亮列表" "message": "高亮列表"

View File

@@ -865,11 +865,55 @@ body {
user-select: none; user-select: none;
} }
.page-highlights-filters-wrap {
display: flex;
flex-direction: column;
gap: 6px;
flex-shrink: 0;
}
.page-highlights-filters-actions {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 8px;
flex-shrink: 0;
}
.page-highlights-filters-actions .page-highlights-filter-link {
font-size: var(--text-xs);
font-weight: 500;
color: var(--text-color);
opacity: 0.7;
background: none;
border: none;
padding: 0;
cursor: pointer;
text-decoration: underline;
text-underline-offset: 2px;
transition: opacity 0.2s, color 0.2s;
}
.page-highlights-filters-actions .page-highlights-filter-link:hover {
opacity: 1;
color: var(--accent);
}
.page-highlights-filters-actions span[aria-hidden="true"] {
font-size: var(--text-xs);
color: var(--text-color);
opacity: 0.5;
user-select: none;
}
.page-highlights-filters { .page-highlights-filters {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 6px; gap: 6px;
align-items: center; align-items: center;
max-height: 62px;
overflow-y: auto;
overflow-x: hidden;
} }
.page-highlights-filter-chip { .page-highlights-filter-chip {

View File

@@ -210,7 +210,10 @@
</span> </span>
<span class="page-highlights-group-label" data-i18n="group_by_list">Group by list</span> <span class="page-highlights-group-label" data-i18n="group_by_list">Group by list</span>
</label> </label>
<div id="pageHighlightsListFilters" class="page-highlights-filters"></div> <div class="page-highlights-filters-wrap">
<div id="pageHighlightsFiltersActions" class="page-highlights-filters-actions" hidden></div>
<div id="pageHighlightsListFilters" class="page-highlights-filters"></div>
</div>
</div> </div>
<div id="pageHighlightsList" class="page-highlights-list"></div> <div id="pageHighlightsList" class="page-highlights-list"></div>
</div> </div>

View File

@@ -1026,6 +1026,7 @@ export class PopupController {
private passesListFilter(h: { listId?: number; listNames: string[] }): boolean { private passesListFilter(h: { listId?: number; listNames: string[] }): boolean {
if (this.pageHighlightsListFilter.size === 0) return true; if (this.pageHighlightsListFilter.size === 0) return true;
if (this.pageHighlightsListFilter.has(-1)) return false;
const wordListIds = new Set<number>(); const wordListIds = new Set<number>();
if (h.listId !== undefined) wordListIds.add(h.listId); if (h.listId !== undefined) wordListIds.add(h.listId);
for (const name of h.listNames) { for (const name of h.listNames) {
@@ -1122,19 +1123,62 @@ export class PopupController {
} }
} }
private static readonly PAGE_HIGHLIGHTS_MANY_LISTS_THRESHOLD = 8;
private renderPageHighlightsFilters(): void { private renderPageHighlightsFilters(): void {
const container = document.getElementById('pageHighlightsListFilters'); const container = document.getElementById('pageHighlightsListFilters');
const actionsEl = document.getElementById('pageHighlightsFiltersActions');
if (!container) return; if (!container) return;
if (this.pageHighlightsActiveLists.length <= 1) { if (this.pageHighlightsActiveLists.length <= 1) {
container.innerHTML = ''; container.innerHTML = '';
if (actionsEl) {
actionsEl.innerHTML = '';
actionsEl.hidden = true;
}
return; return;
} }
const allSelected = this.pageHighlightsListFilter.size === 0 || this.pageHighlightsListFilter.size === this.pageHighlightsActiveLists.length;
const isNone = this.pageHighlightsListFilter.size === 1 && this.pageHighlightsListFilter.has(-1);
const allSelected = !isNone && (this.pageHighlightsListFilter.size === 0 || this.pageHighlightsListFilter.size === this.pageHighlightsActiveLists.length);
const showQuickActions = this.pageHighlightsActiveLists.length > PopupController.PAGE_HIGHLIGHTS_MANY_LISTS_THRESHOLD;
if (actionsEl) {
if (showQuickActions) {
const allLabel = chrome.i18n.getMessage('select_all') || 'Select all';
const noneLabel = chrome.i18n.getMessage('deselect_all') || 'Deselect all';
actionsEl.innerHTML = `
<button type="button" class="page-highlights-filter-link" data-filter-action="all">${DOMUtils.escapeHtml(allLabel)}</button>
<span aria-hidden="true"> · </span>
<button type="button" class="page-highlights-filter-link" data-filter-action="none">${DOMUtils.escapeHtml(noneLabel)}</button>
`;
actionsEl.hidden = false;
actionsEl.querySelectorAll('.page-highlights-filter-link').forEach(btn => {
btn.addEventListener('click', () => {
const action = (btn as HTMLElement).dataset.filterAction;
if (action === 'all') {
this.pageHighlightsListFilter = new Set();
} else if (action === 'none') {
this.pageHighlightsListFilter = new Set([-1]);
}
this.savePopupState();
this.renderPageHighlights();
this.renderPageHighlightsFilters();
});
});
} else {
actionsEl.innerHTML = '';
actionsEl.hidden = true;
}
}
const active = (listId: number) =>
!isNone && (this.pageHighlightsListFilter.size === 0 || this.pageHighlightsListFilter.has(listId));
container.innerHTML = this.pageHighlightsActiveLists.map(list => { container.innerHTML = this.pageHighlightsActiveLists.map(list => {
const active = this.pageHighlightsListFilter.size === 0 || this.pageHighlightsListFilter.has(list.id); const chipActive = active(list.id);
const bg = DOMUtils.escapeHtml(list.background); const bg = DOMUtils.escapeHtml(list.background);
return ` return `
<button type="button" class="page-highlights-filter-chip ${active ? 'active' : ''}" data-list-id="${list.id}" title="${DOMUtils.escapeHtml(list.name)}" style="--list-color: ${bg};"> <button type="button" class="page-highlights-filter-chip ${chipActive ? 'active' : ''}" data-list-id="${list.id}" title="${DOMUtils.escapeHtml(list.name)}" style="--list-color: ${bg};">
<span class="filter-dot" style="background-color: ${bg};"></span> <span class="filter-dot" style="background-color: ${bg};"></span>
<span>${DOMUtils.escapeHtml(list.name)}</span> <span>${DOMUtils.escapeHtml(list.name)}</span>
</button> </button>
@@ -1149,6 +1193,11 @@ export class PopupController {
} else { } else {
this.pageHighlightsListFilter.add(id); this.pageHighlightsListFilter.add(id);
} }
if (this.pageHighlightsListFilter.size === 0) {
this.pageHighlightsListFilter = new Set();
} else if (this.pageHighlightsListFilter.has(-1)) {
this.pageHighlightsListFilter.delete(-1);
}
this.savePopupState(); this.savePopupState();
this.renderPageHighlights(); this.renderPageHighlights();
this.renderPageHighlightsFilters(); this.renderPageHighlightsFilters();