cohost/html/bookmarks.tsx

70 lines
2.2 KiB
TypeScript
Raw Normal View History

2023-09-21 23:42:42 -04:00
import { make_sync_no_matter_the_cost, render_and_copy } from "./common.tsx";
import { DOMParser } from "https://deno.land/x/deno_dom@v0.1.38/deno-dom-wasm.ts";
const try_so_so_hard_to_get_favicon_link = async (
url: URL
): Promise<URL | undefined> => {
const text = await (await fetch(url)).text();
const doc = new DOMParser().parseFromString(text, "text/html");
if (!doc) return;
const link =
doc.querySelector('link[rel="icon"]') ??
doc.querySelector('link[id="favicon"]') ??
doc.querySelector('link[rel="shortcut icon"]');
2023-09-21 23:42:42 -04:00
if (!link) return;
const href = link.getAttribute("href");
if (!href) return;
return new URL(href, url);
};
const Bookmark = async ({ url }: { url: string }) => {
const u = new URL(url);
const link = await try_so_so_hard_to_get_favicon_link(u);
// if (!link) throw `figure it out: ${url}`;
const l = link?.toString() || `https://${u.hostname}/favicon.ico`;
return (
<a href={url}>
<img alt={`the favicon for ${u.hostname}`} src={l} style={{}} />
</a>
);
};
const urls = `
https://en.wikipedia.org/wiki/Main_Page
https://git.pyrope.net/
https://old.reddit.com/
https://stackexchange.com/
https://youtube.com/
https://jstris.jezevec10.com/u/mehbark
https://www.amazon.com/
https://mail.google.com/mail/u/0/#inbox
https://www.timeanddate.com/worldclock/turkey/istanbul
https://en.wikibooks.org/wiki/Main_Page
https://caltrop.dev/plop/
https://www.nytimes.com/games/wordle/index.html
https://rust-lang.github.io/rust-clippy/master/
https://cheats.rs/
https://www.rust-lang.org/
https://play.rust-lang.org/
https://pl.pyrope.net/main/friends
https://adventofcode.com/
https://godbolt.org/
https://www.codewars.com/dashboard
https://text.caltrop.dev/@-361,56
https://lichess.org/
https://translate.google.com/?sl=auto&tl=en&op=translate&hl=en
https://www.tumblr.com/blog/mehbark/activity
https://cohost.org/
https://feedly.com/i/collection/content/user/0b9f211d-d58b-4bc8-bcc7-3af7d33799a1/category/global.all
https://minesweeper.online/
`
.trim()
.split("\n");
const imgs = await Promise.all(urls.map(async url => await Bookmark({ url })));
render_and_copy(<>{...imgs}</>);