import adapter, {Adapter} from "./adapter"; function _s(key: string, value: any | null) { const x = window; x[key] = value; } function _g(key: string): any | null { const x = window; return x[key]; } function $(id: string): HTMLElement | null { return document.getElementById(id); } function main():void { _s("settings", JSON.parse(localStorage.getItem("settings") ?? "{}")); _s("adapters", []); const settings = _g("settings"); const adapters = _g("adapters"); if (settings != null) { for (let s of settings.adapters) { switch (s.protocol) { case "nostr": let a = adapter.toNostrAdapter(adapter.createAdapter(), s); adapters.push(a); break; } } } else { console.log("no settings exist for this client"); _s("settings", { adapters: [] }); } }; function showSettings():void { // tab bar hidden const tabbar = $("tabbar"); if (tabbar) { tabbar.style.display = "none"; } // tabcontent to show settings ui const tabcontent = $("tabcontent"); if (tabcontent) { let html = "

this is our settings dialogue

"; html += ""; html += _g("adapters").reduce((self: string, a: Adapter) => { self += `
  • ${a.nickname}
  • ` return self; }, ""; html += ""; tabcontent.innerHTML = html; } } function addAdapter(): void { const tabcontent = $("tabcontent"); if (tabcontent) { // dropdown for protocol let html = ""; // depending on protocol, different fields // nostr: privkey, initial relays html += "
    "; html += " "; html += " "; html += " "; html += "
    "; // masto/AP: server, username, pw/apikey // save button, back button html += ""; html += ""; tabcontent.innerHTML = html; } } function fillAdapterProtocolOptions(): void { const proto = $("settings_newadapter_protocolselect") as HTMLSelectElement; console.log(proto?.options[proto.selectedIndex] ?? "no proto"); } function saveSettings(): void { const settings = _g("settings"); if (settings) { localStorage.setItem("settings", JSON.stringify(settings)); } // tab bar hidden const tabbar = $("tabbar"); if (tabbar) { tabbar.style.display = "block"; } // tabcontent to show settings ui const tabcontent = $("tabcontent"); if (tabcontent) { tabcontent.innerHTML = ""; } } function saveAdapter(): void { let self: any = {}; // get selected adapter protocol const proto = $("settings_newadapter_protocolselect") as HTMLSelectElement; console.log(proto.options[proto.selectedIndex]); // switch protocol switch (proto.options[proto.selectedIndex].value) { // nostr: save privkey // save relays case "nostr": const privkey = ($("settings_newadapter_nostr_privkey") as HTMLInputElement)?.value ?? ""; const relays = ($("settings_newadapter_nostr_default_relays") as HTMLInputElement)?.value ?? ""; const nickname = ($("settings_newadapter_nickname") as HTMLInputElement)?.value ?? "" ; self = { nickname: nickname, protocol: "nostr", privkey: privkey, relays: relays.split(",").map(r=>r.trim()) }; break; // AP/masto: whatever case "ap": break; } const settings = _g("settings"); const adapters = _g("adapters"); if (settings && adapters) { settings.adapters.push(self); adapters.push(adapter.toNostrAdapter(adapter.createAdapter(), self)); localStorage.setItem("settings", JSON.stringify(settings)); showSettings(); } } _s("addAdapter", addAdapter); _s("saveAdapter", saveAdapter); _s("fillAdapterProtocolOptions", fillAdapterProtocolOptions); _s("showSettings", showSettings); _s("saveSettings", saveSettings); main();