generated from Dicken/dickendock
Kritische Bugfixes: Export/CA-Download (Service-Worker), Speichern-Bug bei Diensten/Lesezeichen, Dark-Mode-Direktlink, Favicon-Mixed-Content-Proxy, Live-Update Zuletzt-besucht, Kategorie-Farb-Picker, Startseite-Nav
This commit is contained in:
@@ -18,6 +18,18 @@ const SIZE_CLASSES: Record<NonNullable<FaviconProps["size"]>, string> = {
|
||||
* einem fehlgeschlagenen Ladeversuch (kaputte URL, 404, CORS) wird
|
||||
* stattdessen der erste Buchstabe des Namens gezeigt.
|
||||
*/
|
||||
/**
|
||||
* Externe/Geräte-Favicons laufen über den Backend-Proxy (/api/favicon-proxy):
|
||||
* Ohne das würden auf der HTTPS-Seite viele http://-Favicons (typisch für
|
||||
* Homelab-Geräte ohne eigenes TLS) vom Browser als "Mixed Content" blockiert
|
||||
* und nie angezeigt - das Backend selbst fetcht sie ohne diese Einschränkung.
|
||||
* Data-URLs (z. B. selbst hochgeladene Icons) werden direkt durchgereicht.
|
||||
*/
|
||||
function resolveFaviconSrc(src: string): string {
|
||||
if (src.startsWith("data:")) return src;
|
||||
return `/api/favicon-proxy?url=${encodeURIComponent(src)}`;
|
||||
}
|
||||
|
||||
export function Favicon({ src, fallbackLetter, size = "md" }: FaviconProps) {
|
||||
const dimension = SIZE_CLASSES[size];
|
||||
const [failed, setFailed] = useState(false);
|
||||
@@ -46,7 +58,7 @@ export function Favicon({ src, fallbackLetter, size = "md" }: FaviconProps) {
|
||||
bg-white p-0.5 ring-1 ring-black/5`}
|
||||
>
|
||||
<img
|
||||
src={src}
|
||||
src={resolveFaviconSrc(src)}
|
||||
alt=""
|
||||
className="h-full w-full object-contain"
|
||||
onError={() => setFailed(true)}
|
||||
|
||||
Reference in New Issue
Block a user