interface SavedSearch { query: string; type: "text" | "title" | "tag"; sort: "hot" | "new"; } export default () => { // deno-lint-ignore ban-types const oldOnloadHandler: Function = window.onload ?? (() => {}); window.onload = () => { oldOnloadHandler(); const button = document.getElementById("favorite"); if (!button) throw "how did your button not init what"; let savedSearches: SavedSearch[] = JSON.parse( localStorage.getItem("savedSearches") ?? "[]", ); function handler() { if (button?.textContent === "Favorite") { savedSearches.push({ query: (new URL(document.URL)).searchParams.get( "query", ) as string, type: (new URL(document.URL)).searchParams.get( "type", ) as "text" | "title" | "tag", sort: (new URL(document.URL)).searchParams.get( "sort", ) as "hot" | "new", }); button.textContent = "Unfavorite"; } else if (button?.textContent === "Unfavorite") { savedSearches = savedSearches.filter((search) => search.query !== (new URL(document.URL)).searchParams.get("query") && search.type !== (new URL(document.URL)).searchParams.get("type") && search.type !== (new URL(document.URL)).searchParams.get("sort") ); button.textContent = "Favorite"; } localStorage.setItem( "savedSearches", JSON.stringify(savedSearches), ); } if ( savedSearches.filter((search) => search.query === (new URL(document.URL)).searchParams.get("query") && search.type === (new URL(document.URL)).searchParams.get("type") && search.sort === (new URL(document.URL)).searchParams.get("sort") ).length > 0 ) { button.textContent = "Unfavorite"; } button.onclick = handler; }; };