aboutsummaryrefslogtreecommitdiff
path: root/frontend/query.ts
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-07-26 16:27:16 +0200
committermetamuffin <metamuffin@disroot.org>2023-07-26 16:27:16 +0200
commitf35043b395adf9ffa06b71000dfba6f560d44cb7 (patch)
treef95ecf9785b86da750064510038b5159f36ce2c5 /frontend/query.ts
parent0ae2d031aa2bf13f9e0ba90b945e79cd614cfd7e (diff)
downloadfastbangs-f35043b395adf9ffa06b71000dfba6f560d44cb7.tar
fastbangs-f35043b395adf9ffa06b71000dfba6f560d44cb7.tar.bz2
fastbangs-f35043b395adf9ffa06b71000dfba6f560d44cb7.tar.zst
add a bunch of ui for the search page and style
Diffstat (limited to 'frontend/query.ts')
-rw-r--r--frontend/query.ts42
1 files changed, 42 insertions, 0 deletions
diff --git a/frontend/query.ts b/frontend/query.ts
new file mode 100644
index 0000000..c0cc9ea
--- /dev/null
+++ b/frontend/query.ts
@@ -0,0 +1,42 @@
+import { status } from "./ui.ts"
+
+// TODO embed this information into bangs.js
+const ENGINE_NAMES: {[key:string]:string} = {
+ "ddg": "DuckDuckGo",
+ "qw": "Qwant",
+ "qwl": "Qwant Lite",
+ "g": "Google",
+}
+
+interface Bangs { [key: string]: { url: string, name: string } }
+export let bangs: Promise<Bangs>;
+export function load_bangs() {
+ status("info", "Loading bangs...")
+ bangs = new Promise(r => {
+ (async () => {
+ const bangs_res = await fetch("/bangs.json")
+ if (!bangs_res.ok) return status("error", "could not download bangs.json")
+ const k: {[key:string]:string} = await bangs_res.json()
+ status("info", "Bangs loaded.")
+ r(Object.fromEntries(Object.entries(k).map(([key,url]) => [key, { url, name: ENGINE_NAMES[key] ?? key }])))
+ })()
+ })
+}
+
+export async function process_query(default_engine: string, query: string) {
+ const bang_prefix = "!"
+ let url = ""
+ if (query.startsWith(bang_prefix)) {
+ const [engine, ...query_parts] = query.substring(bang_prefix.length).split(" ")
+ url = await search_url(engine, query_parts.join(" "))
+ } else {
+ url = await search_url(default_engine, query)
+ }
+
+ status("success", `Forwarding to ${url}`)
+ setTimeout(() => document.location.href = url, 0)
+}
+
+async function search_url(engine: string, query: string) {
+ return (await bangs)[engine].url.replace("{{{s}}}", encodeURIComponent(query).replaceAll("%20", "+"))
+}