Spaces:
Paused
Paused
--- | |
import { Icon } from 'astro-icon/components'; | |
import FrameManager from '@components/FrameManager.astro'; | |
--- | |
<FrameManager /> | |
<div class="flex grow flex-row justify-left items-center"> | |
<a aria-label="home" href="/" class="ml-0 inline no-underline mx-[20px] text-[20px] cursor-pointer"> | |
<svg class="w-[35px] h-[35px]" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 365.37 365.37"><defs> <style> .cls-1{ fill:none; stroke-width:18px;} .cls-1, .cls-2 { stroke: var(--accent); stroke-miterlimit:10;} .cls-2 { fill: var(--accent); stroke-width:5px;} </style> </defs><circle class="cls-1" cx="182.68" cy="182.68" r="173.68"></circle><path class="cls-2" d="M210.41,66.38A115.27,115.27,0,0,1,70.52,248.19,134,134,0,1,0,210.41,66.38Z" transform="translate(-17.32 -17.32)"></path></svg> | |
</a> | |
<div id="form-stuff" class="flex grow flex-col transition-all duration-200"> | |
<div class="flex flex-row"> | |
<input class="flex grow h-[42px] text-[14px] border-none bg-inherit outline-none" id="form-input" form="search-form" placeholder="Search the web"></input> | |
<button aria-label="submit form" class="h-[14px] bg-transparent submit border-none p-[10px] cursor-pointer text-[--accent]" id="form-submit" form="search-form"> | |
<Icon name="fa-solid:search" /> | |
</button> | |
</div> | |
<div id="search-suggestions" class="hidden w-full flex flex-col"></div> | |
</div> | |
<script> | |
import { BareClient } from "@mercuryworkshop/bare-mux"; | |
//simple script I wrote so I don't have to repeat myself (located at: src/ts/serviceWorker.ts) | |
import { initServiceWorker } from "@scripts/serviceWorker.ts"; | |
let scram: typeof ScramjetController; | |
//sets the style of the iframe and enables the little panel at the top | |
async function prox(term: string, sj?: typeof ScramjetController) { | |
let url; | |
if (localStorage.getItem("incog||proxy") === "uv") { | |
url = __uv$config!.prefix + __uv$config.encodeUrl!(search(term, localStorage.getItem("incog||search") as string)) | |
} | |
else if (localStorage.getItem("incog||proxy") === "sj") { | |
url = sj.encodeUrl(search(term, localStorage.getItem("incog||search") as string)); | |
} | |
const iframe = document.getElementById("iframe") as HTMLIFrameElement; | |
const frameManager = document.getElementById("framemanager") as HTMLElement; | |
frameManager.classList.remove("hidden"); | |
iframe.classList.remove("hidden"); | |
iframe.src = url as string || "/load"; | |
if (!iframe) { | |
return; | |
} | |
} | |
document.addEventListener("DOMContentLoaded", async () => { | |
scram = initServiceWorker().then(async (sj): Promise<typeof ScramjetController> => { | |
console.log('SW active'); | |
return sj; | |
}); | |
}); | |
//define all of our events and if there is a link proxy it and set the history to / | |
document.addEventListener("astro:page-load", async function () { | |
let links: URLSearchParams = new URLSearchParams(window.location.search); | |
const link = links.get('link'); | |
const client = new BareClient(); | |
scram = await scram; | |
//this is in a try {} catch {} as to not pollute the console with errors | |
//it will error due to this running on every page and not just this one | |
try { | |
if (link) { | |
prox(search(localStorage.getItem("incog||proxy") === "uv" ? __uv$config.decodeUrl!(link): scram.decodeUrl(link), localStorage.getItem("incog||search") as string), scram); | |
history.pushState({}, "", "/"); | |
} | |
const formInput = document.getElementById("form-input") as HTMLInputElement; | |
document.getElementById("form-submit")?.addEventListener("click", async function () { | |
const iframe = document.getElementById("iframe") as HTMLIFrameElement; | |
if (!iframe) { | |
return; | |
} | |
prox(formInput?.value, scram); | |
}) | |
document.getElementById("form-input")?.addEventListener("keypress", async function (event: any) { | |
if (event.key === "Enter") { | |
const iframe = document.getElementById("iframe") as HTMLIFrameElement; | |
if (!iframe) { | |
return; | |
} | |
prox(formInput?.value, scram); | |
} | |
}) | |
document.getElementById("form-input")?.addEventListener("input", async function() { | |
document.getElementById("form-stuff")?.classList.add("absolute", "top-0", "left-0", "w-full", "h-full", "px-[15%]", "bg-[--background]"); | |
document.getElementById("form-input")?.classList.add("h-[80px]"); | |
document.getElementById("form-submit")?.classList.remove("h-[14px]"); | |
document.getElementById("form-submit")?.classList.add("h-[80px]"); | |
document.getElementById("search-suggestions")?.classList.remove("hidden") | |
const value = formInput?.value | |
if (value.length === 0) { | |
document.getElementById("form-stuff")?.classList.remove("absolute", "top-0", "left-0", "w-full", "h-full", "px-[15%]", "bg-[--background]"); | |
document.getElementById("form-input")?.classList.remove("h-[80px]"); | |
document.getElementById("form-submit")?.classList.add("h-[14px]"); | |
document.getElementById("form-submit")?.classList.remove("h-[80px]"); | |
document.getElementById("search-suggestions")?.classList.add("hidden"); | |
} | |
if (value.length >= 3) { | |
const data = await client.fetch(`https://api.duckduckgo.com/ac?q=${encodeURIComponent(value)}&format=json`); | |
const dataRes = await data.json(); | |
if (dataRes) { | |
const searchSuggestions = document.getElementById("search-suggestions") as HTMLElement | |
searchSuggestions.innerHTML = ""; | |
dataRes.map((results: Suggestion) => { | |
let span = document.createElement("span") | |
span.classList.add("border-t-[1px]", "border-t-[--border-color]", "cursor-pointer", "hover:brightness-75", "text-[20px]", "py-[35px]"); | |
span.id = "search-result" | |
span.innerText = results.phrase; | |
span.addEventListener("click", function() { | |
prox(results.phrase) | |
}) | |
searchSuggestions.appendChild(span); | |
}) | |
} | |
} | |
}) | |
} catch (_) {} | |
}) | |
</script> | |
</div> | |