forked from pdsls.dev/pdsls
atproto explorer

add favicon in collection list

juli.ee 53708883 454daf8f

verified
+1 -1
index.html
··· 3 3 <head> 4 4 <meta charset="utf-8" /> 5 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 - <link rel="icon" href="/favicon.png" /> 6 + <link rel="icon" href="/favicon.ico" /> 7 7 <meta property="og:title" content="PDSls" /> 8 8 <meta property="og:type" content="website" /> 9 9 <meta property="og:url" content="https://pdsls.dev" />
public/favicon.png public/favicon.ico
+1 -1
public/manifest.json
··· 8 8 "theme_color": "#1f1f1f", 9 9 "icons": [ 10 10 { 11 - "src": "/favicon.png", 11 + "src": "/favicon.ico", 12 12 "type": "image/png", 13 13 "sizes": "512x512" 14 14 },
+1 -1
public/oauth-client-metadata.json
··· 2 2 "client_id": "https://pdsls.dev/oauth-client-metadata.json", 3 3 "client_name": "PDSls", 4 4 "client_uri": "https://pdsls.dev", 5 - "logo_uri": "https://pdsls.dev/favicon.png", 5 + "logo_uri": "https://pdsls.dev/favicon.ico", 6 6 "redirect_uris": ["https://pdsls.dev/"], 7 7 "scope": "atproto transition:generic", 8 8 "grant_types": ["authorization_code", "refresh_token"],
+46 -18
src/views/repo.tsx
··· 395 395 : true, 396 396 )} 397 397 > 398 - {(authority) => ( 399 - <div class="dark:hover:bg-dark-200 flex flex-col rounded-lg p-1 hover:bg-neutral-200"> 400 - <For 401 - each={nsids()?.[authority].nsids.filter((nsid) => 402 - filter() ? nsid.startsWith(filter()!.split(".").slice(2).join(".")) : true, 403 - )} 404 - > 405 - {(nsid) => ( 406 - <A 407 - href={`/at://${did}/${authority}.${nsid}`} 408 - class="hover:underline active:underline" 398 + {(authority) => { 399 + const reversedDomain = authority.split(".").reverse().join("."); 400 + const [faviconError, setFaviconError] = createSignal(false); 401 + 402 + return ( 403 + <div class="dark:hover:bg-dark-200 flex items-start gap-2 rounded-lg p-1 hover:bg-neutral-200"> 404 + <div class="flex h-5 w-4 shrink-0 items-center justify-center"> 405 + <Show 406 + when={!faviconError()} 407 + fallback={ 408 + <span class="iconify lucide--globe size-4 text-neutral-400 dark:text-neutral-500" /> 409 + } 409 410 > 410 - <span>{authority}</span> 411 - <span class="text-neutral-500 dark:text-neutral-400">.{nsid}</span> 412 - </A> 413 - )} 414 - </For> 415 - </div> 416 - )} 411 + <img 412 + src={ 413 + reversedDomain === "bsky.app" ? 414 + "https://web-cdn.bsky.app/static/apple-touch-icon.png" 415 + : `https://${reversedDomain}/favicon.ico` 416 + } 417 + alt={`${reversedDomain} favicon`} 418 + class="h-4 w-4" 419 + onError={() => setFaviconError(true)} 420 + /> 421 + </Show> 422 + </div> 423 + <div class="flex flex-1 flex-col"> 424 + <For 425 + each={nsids()?.[authority].nsids.filter((nsid) => 426 + filter() ? 427 + nsid.startsWith(filter()!.split(".").slice(2).join(".")) 428 + : true, 429 + )} 430 + > 431 + {(nsid) => ( 432 + <A 433 + href={`/at://${did}/${authority}.${nsid}`} 434 + class="hover:underline active:underline" 435 + > 436 + <span>{authority}</span> 437 + <span class="text-neutral-500 dark:text-neutral-400">.{nsid}</span> 438 + </A> 439 + )} 440 + </For> 441 + </div> 442 + </div> 443 + ); 444 + }} 417 445 </For> 418 446 </div> 419 447 </Show>