diff options
-rw-r--r-- | frontend/admin.ts | 34 | ||||
-rw-r--r-- | frontend/pwmodal.ts | 32 | ||||
-rw-r--r-- | frontend/start.ts | 24 | ||||
-rw-r--r-- | frontend/submit.ts | 8 | ||||
-rw-r--r-- | frontend/ui.ts | 3 |
5 files changed, 46 insertions, 55 deletions
diff --git a/frontend/admin.ts b/frontend/admin.ts index 40a7a94..6c3ee5b 100644 --- a/frontend/admin.ts +++ b/frontend/admin.ts @@ -4,13 +4,12 @@ interface PendingBang { bang: string, name: string, url: string, - email: string | undefined, + email?: string, } -async function sendVerdict(user: string, pw: string, b: PendingBang, - accept: boolean, info_block: HTMLDivElement) -{ - let err = await fetch(accept? "acceptBang" : "rejectBang", { +async function send_verdict(user: string, pw: string, b: PendingBang, + accept: boolean, info_block: HTMLDivElement) { + const err = await fetch(accept ? "acceptBang" : "rejectBang", { headers: { Accept: "application/json", "Content-Type": "application/json", @@ -21,8 +20,7 @@ async function sendVerdict(user: string, pw: string, b: PendingBang, }).then(_ => null).catch(e => "" + e) if (err) - info_block.appendChild(e("p", {class: "verdict-error"}, - "Something went wrong: " + await err)) + info_block.appendChild(e("p", { class: "verdict-error" }, "Something went wrong: " + err)) else info_block.remove() // TODO in the accept case, we should try invalidating the browser cache @@ -30,7 +28,7 @@ async function sendVerdict(user: string, pw: string, b: PendingBang, // see that the etag has changed; idk of that works } -export async function tryLoadAdminPanel(user: string, pw: string) { +export async function try_load_admin_panel(user: string, pw: string) { const r = await fetch("pendingBangs", { headers: { Accept: "application/json", @@ -48,22 +46,22 @@ export async function tryLoadAdminPanel(user: string, pw: string) { for (const e of [...document.getElementsByTagName("section")]) e.remove() document.body.appendChild(e("section", {}, ...pending.map(b => { - const btn_accept = e("button", {class: "pending-accept"}, "Accept") - const btn_reject = e("button", {class: "pending-reject"}, "Reject") + const btn_accept = e("button", { class: "pending-accept" }, "Accept") + const btn_reject = e("button", { class: "pending-reject" }, "Reject") - let r = e("div", {class: "pending-block"}, - e("span", {class: "pending-info"}, - e("p", {class: "pending-bang"}, "!" + b.bang), - e("p", {class: "pending-name"}, b.name), - e("p", {class: "pending-url"}, b.url), - ...(b.email? [e("p", {class: "pending-email"}, b.email)] : []) + const r = e("div", { class: "pending-block" }, + e("span", { class: "pending-info" }, + e("p", { class: "pending-bang" }, "!" + b.bang), + e("p", { class: "pending-name" }, b.name), + e("p", { class: "pending-url" }, b.url), + ...(b.email ? [e("p", { class: "pending-email" }, b.email)] : []) ), btn_accept, btn_reject, ) - btn_accept.addEventListener("click", () => sendVerdict(user, pw, b, true, r)) - btn_reject.addEventListener("click", () => sendVerdict(user, pw, b, false, r)) + btn_accept.addEventListener("click", () => send_verdict(user, pw, b, true, r)) + btn_reject.addEventListener("click", () => send_verdict(user, pw, b, false, r)) return r }))) diff --git a/frontend/pwmodal.ts b/frontend/pwmodal.ts index a20a79f..485896a 100644 --- a/frontend/pwmodal.ts +++ b/frontend/pwmodal.ts @@ -1,25 +1,21 @@ import { e } from "./helper.ts" -import { tryLoadAdminPanel } from "./admin.ts" +import { try_load_admin_panel } from "./admin.ts" export function pw_modal() { - const inp_name = e("input", {type: "text", placeholder: "Username"}) - const inp_pw = e("input", {type: "password", placeholder: "Password"}) - const error_msg = e("span", {class: "error-msg"}, "") - const login_btn = e("button", { - onclick: ev => { - ev.preventDefault() - tryLoadAdminPanel(inp_name.value, inp_pw.value).catch(err => { - error_msg.textContent = err - }) - } - }, "Login") - + let inp_name: HTMLInputElement, inp_pw: HTMLInputElement, error_msg: HTMLSpanElement; return e("dialog", {}, - e("form", {method: "dialog"}, - inp_name, - inp_pw, - login_btn, - error_msg, + e("form", { method: "dialog" }, + inp_name = e("input", { type: "text", placeholder: "Username" }), + inp_pw = e("input", { type: "password", placeholder: "Password" }), + e("button", { + onclick: ev => { + ev.preventDefault() + try_load_admin_panel(inp_name.value, inp_pw.value).catch(err => { + error_msg.textContent = err + }) + } + }, "Login"), + error_msg = e("span", { class: "error-msg" }, ""), ) ) } diff --git a/frontend/start.ts b/frontend/start.ts index 6a82af6..79ee9ef 100644 --- a/frontend/start.ts +++ b/frontend/start.ts @@ -62,25 +62,22 @@ export function section_engine_select() { export function section_admin_btn() { const modal = pw_modal() - - const btn = e("button", { - class: "open-modal", - onclick: () => modal.showModal() - }, "Admin Login") - - return e("section", {class: "admin-btn"}, - btn, - modal) + return e("section", { class: "admin-btn" }, + e("button", { + class: "open-modal", + onclick: () => modal.showModal() + }, "Admin Login"), + modal + ) } interface FuzzItem<E> { score: number, obj: E } -let bangsSearch: Promise<(query: string) => FuzzItem<{bang: string, name: string, url: string}>[]> - | undefined = undefined; +let bangsSearch: Promise<(query: string) => FuzzItem<{ bang: string, name: string, url: string }>[]> | undefined = undefined; function setSearchResults(ul: HTMLElement, input: HTMLInputElement, submit: () => void) { if (bangsSearch === undefined) { bangsSearch = bangs.then(bangs => { - const searchSpace: {bang: string, name: string, url: string}[] = [] + const searchSpace: { bang: string, name: string, url: string }[] = [] for (const k in bangs) { searchSpace.push({ bang: k, @@ -108,7 +105,8 @@ function setSearchResults(ul: HTMLElement, input: HTMLInputElement, submit: () = const it = r.obj const li = e("li", {}, e("p", { class: "name" }, it.name), - e("p", { class: "bang" }, it.bang)) + e("p", { class: "bang" }, it.bang) + ) li.addEventListener("click", () => { input.value = it.bang submit() diff --git a/frontend/submit.ts b/frontend/submit.ts index 44df7b9..1e67b32 100644 --- a/frontend/submit.ts +++ b/frontend/submit.ts @@ -42,10 +42,10 @@ export function section_submit() { If an email address is provided, you will be informed about the status of your proposal. `), e("table", {}, - e("tr", {}, e("td", {}, e("label", {for: "i-name" }, "Website Name:" )), e("td", {}, name_input )), - e("tr", {}, e("td", {}, e("label", {for: "i-bang" }, "Bang:" )), e("td", {}, bang_input )), - e("tr", {}, e("td", {}, e("label", {for: "i-url" }, "Search URL:" )), e("td", {}, url_input )), - e("tr", {}, e("td", {}, e("label", {for: "i-email"}, "Notification email (optional):")), e("td", {}, email_input)) + e("tr", {}, e("td", {}, e("label", { for: "i-name" }, "Website Name:")), e("td", {}, name_input)), + e("tr", {}, e("td", {}, e("label", { for: "i-bang" }, "Bang:")), e("td", {}, bang_input)), + e("tr", {}, e("td", {}, e("label", { for: "i-url" }, "Search URL:")), e("td", {}, url_input)), + e("tr", {}, e("td", {}, e("label", { for: "i-email" }, "Notification email (optional):")), e("td", {}, email_input)) ), submit_button ) diff --git a/frontend/ui.ts b/frontend/ui.ts index 675a5a8..f0146c5 100644 --- a/frontend/ui.ts +++ b/frontend/ui.ts @@ -7,8 +7,7 @@ export function add_page_content(engine?: string) { for (const e of [...document.getElementsByTagName("section")]) e.remove() if (engine == "~submit") document.body.append(section_submit()) else if (engine) document.body.append(section_search(engine), section_info_search()) - else document.body.append(section_info_start(), section_engine_select(), - section_admin_btn()) + else document.body.append(section_info_start(), section_engine_select(), section_admin_btn()) } let status_el: HTMLElement |