favicons
This commit is contained in:
@@ -236,10 +236,11 @@
|
||||
box.innerHTML=labels.length?`<div class="small text-muted px-2 mb-1">Labels</div>${labels.map(l=>`<button class="filter label-filter ${activeFilter==='label:'+l?'active':''}" data-filter="label:${esc(l)}"><span><i class="fa-solid fa-tag"></i> ${esc(l)}</span><span>${counts.get(l)}</span></button>`).join('')}`:'';
|
||||
bindSidebarFilterClicks(box);
|
||||
}
|
||||
function trackerFavicon(domain){
|
||||
function trackerFavicon(tracker){
|
||||
const domain=typeof tracker==='string'?tracker:(tracker?.domain||'');
|
||||
if(!trackerFaviconsEnabled || !domain) return '<i class="fa-solid fa-bullseye"></i>';
|
||||
// Note: Favicony trackerów idą przez lokalny cache backendu, więc przeglądarka nie odpytuje tysięcy domen bezpośrednio.
|
||||
const src=`/api/trackers/favicon/${encodeURIComponent(domain)}`;
|
||||
// Note: Cached favicons are served from the static/data symlink; the API path is only a one-time cache warmer fallback.
|
||||
const src=(typeof tracker==='object' && tracker?.favicon_url) ? tracker.favicon_url : `/api/trackers/favicon/${encodeURIComponent(domain)}`;
|
||||
return `<img class="tracker-favicon" src="${esc(src)}" alt="" loading="lazy" onerror="this.classList.add('d-none')"><i class="fa-solid fa-bullseye tracker-fallback-icon"></i>`;
|
||||
}
|
||||
function trackerFilterPlaceholder(){
|
||||
@@ -256,7 +257,7 @@
|
||||
if(activeFilter.startsWith('tracker:') && !trackers.some(t=>t.domain===activeFilter.slice(8))) activeFilter='all';
|
||||
// Note: Tracker filter section is always visible, so an empty or failed tracker scan does not look like a missing feature.
|
||||
const rows=trackers.length
|
||||
? trackers.map(t=>`<button class="filter tracker-filter ${activeFilter==='tracker:'+t.domain?'active':''}" data-filter="tracker:${esc(t.domain)}"><span>${trackerFavicon(t.domain)} ${esc(t.domain)}</span><span>${esc(t.count||0)}</span></button>`).join('')
|
||||
? trackers.map(t=>`<button class="filter tracker-filter ${activeFilter==='tracker:'+t.domain?'active':''}" data-filter="tracker:${esc(t.domain)}"><span>${trackerFavicon(t)} ${esc(t.domain)}</span><span>${esc(t.count||0)}</span></button>`).join('')
|
||||
: trackerFilterPlaceholder();
|
||||
box.innerHTML=`<div class="small text-muted px-2 mb-1">Trackers</div>${rows}`;
|
||||
bindSidebarFilterClicks(box);
|
||||
|
||||
Reference in New Issue
Block a user