mirror of
https://github.com/obsqrbtz/goose-highlighter.git
synced 2026-04-08 20:19:06 +03:00
fix: only show filter buttons for list with 1+ matches
This commit is contained in:
@@ -995,8 +995,9 @@ export class PopupController {
|
|||||||
listNames: h.listNames || (h.listName ? [h.listName] : [])
|
listNames: h.listNames || (h.listName ? [h.listName] : [])
|
||||||
}));
|
}));
|
||||||
this.pageHighlightsActiveLists = response.lists || [];
|
this.pageHighlightsActiveLists = response.lists || [];
|
||||||
if (this.pageHighlightsListFilter.size === 0 && this.pageHighlightsActiveLists.length > 0) {
|
const listIdsOnPage = this.getListIdsWithMatchesOnPage();
|
||||||
this.pageHighlightsListFilter = new Set(this.pageHighlightsActiveLists.map((l: { id: number }) => l.id));
|
if (this.pageHighlightsListFilter.size === 0 && listIdsOnPage.size > 0) {
|
||||||
|
this.pageHighlightsListFilter = new Set(listIdsOnPage);
|
||||||
}
|
}
|
||||||
this.highlightIndices.clear();
|
this.highlightIndices.clear();
|
||||||
this.pageHighlights.forEach(h => this.highlightIndices.set(h.word, 0));
|
this.pageHighlights.forEach(h => this.highlightIndices.set(h.word, 0));
|
||||||
@@ -1136,11 +1137,31 @@ export class PopupController {
|
|||||||
|
|
||||||
private static readonly PAGE_HIGHLIGHTS_MANY_LISTS_THRESHOLD = 8;
|
private static readonly PAGE_HIGHLIGHTS_MANY_LISTS_THRESHOLD = 8;
|
||||||
|
|
||||||
|
/** List IDs that have at least one highlight on the current page (from pageHighlights). */
|
||||||
|
private getListIdsWithMatchesOnPage(): Set<number> {
|
||||||
|
const ids = new Set<number>();
|
||||||
|
for (const h of this.pageHighlights) {
|
||||||
|
if (h.listId !== undefined) ids.add(h.listId);
|
||||||
|
for (const name of h.listNames) {
|
||||||
|
const list = this.pageHighlightsActiveLists.find(l => l.name === name);
|
||||||
|
if (list) ids.add(list.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Lists that have at least one word found on the current page (for filter chips only). */
|
||||||
|
private getListsWithMatchesOnPage(): Array<{ id: number; name: string; background: string }> {
|
||||||
|
const ids = this.getListIdsWithMatchesOnPage();
|
||||||
|
return this.pageHighlightsActiveLists.filter(l => ids.has(l.id));
|
||||||
|
}
|
||||||
|
|
||||||
private renderPageHighlightsFilters(): void {
|
private renderPageHighlightsFilters(): void {
|
||||||
const container = document.getElementById('pageHighlightsListFilters');
|
const container = document.getElementById('pageHighlightsListFilters');
|
||||||
const actionsEl = document.getElementById('pageHighlightsFiltersActions');
|
const actionsEl = document.getElementById('pageHighlightsFiltersActions');
|
||||||
if (!container) return;
|
if (!container) return;
|
||||||
if (this.pageHighlightsActiveLists.length <= 1) {
|
const listsOnPage = this.getListsWithMatchesOnPage();
|
||||||
|
if (listsOnPage.length <= 1) {
|
||||||
container.innerHTML = '';
|
container.innerHTML = '';
|
||||||
if (actionsEl) {
|
if (actionsEl) {
|
||||||
actionsEl.innerHTML = '';
|
actionsEl.innerHTML = '';
|
||||||
@@ -1150,8 +1171,8 @@ export class PopupController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const isNone = this.pageHighlightsListFilter.size === 1 && this.pageHighlightsListFilter.has(-1);
|
const isNone = this.pageHighlightsListFilter.size === 1 && this.pageHighlightsListFilter.has(-1);
|
||||||
const allSelected = !isNone && (this.pageHighlightsListFilter.size === 0 || this.pageHighlightsListFilter.size === this.pageHighlightsActiveLists.length);
|
const allSelected = !isNone && (this.pageHighlightsListFilter.size === 0 || this.pageHighlightsListFilter.size === listsOnPage.length);
|
||||||
const showQuickActions = this.pageHighlightsActiveLists.length > PopupController.PAGE_HIGHLIGHTS_MANY_LISTS_THRESHOLD;
|
const showQuickActions = listsOnPage.length > PopupController.PAGE_HIGHLIGHTS_MANY_LISTS_THRESHOLD;
|
||||||
|
|
||||||
if (actionsEl) {
|
if (actionsEl) {
|
||||||
if (showQuickActions) {
|
if (showQuickActions) {
|
||||||
@@ -1185,7 +1206,7 @@ export class PopupController {
|
|||||||
const active = (listId: number) =>
|
const active = (listId: number) =>
|
||||||
!isNone && (this.pageHighlightsListFilter.size === 0 || this.pageHighlightsListFilter.has(listId));
|
!isNone && (this.pageHighlightsListFilter.size === 0 || this.pageHighlightsListFilter.has(listId));
|
||||||
|
|
||||||
container.innerHTML = this.pageHighlightsActiveLists.map(list => {
|
container.innerHTML = listsOnPage.map(list => {
|
||||||
const chipActive = active(list.id);
|
const chipActive = active(list.id);
|
||||||
const bg = DOMUtils.escapeHtml(list.background);
|
const bg = DOMUtils.escapeHtml(list.background);
|
||||||
return `
|
return `
|
||||||
|
|||||||
Reference in New Issue
Block a user