diff --git a/src/main.ts b/src/main.ts index 499cc49..0d846e2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -804,13 +804,7 @@ async function initDataAndEngine(): Promise { }); } -async function initUI(): Promise { - - applySettings(); // sets the language before bindSettingsUI renders dynamic labels - bindSettingsUI(); - renderDocList(); - syncTitleField(); - +function bindTitleUI(): void { const titleField = $("#doc-title"); titleField.addEventListener("change", () => { const doc = activeDoc(); @@ -834,7 +828,9 @@ async function initUI(): Promise { titleField.addEventListener("keydown", (e) => { if (e.key === "Enter" || e.key === "Escape") titleField.blur(); }); +} +function bindMiscUI(): void { $("#total-line").addEventListener("click", () => { const v = $("#total-line").dataset.value; if (v) { @@ -845,6 +841,10 @@ async function initUI(): Promise { $("#open-search").addEventListener("click", () => search.open()); + window.addEventListener("focus", () => { lastWindowFocusAt = performance.now(); }); +} + +async function bindWindowControls(): Promise { if (isTauri()) { const { getCurrentWindow } = await import("@tauri-apps/api/window"); const win = getCurrentWindow(); @@ -853,7 +853,9 @@ async function initUI(): Promise { } else { $("#win-controls").style.display = "none"; } +} +function bindSidebarUI(): void { $("#toggle-sidebar").addEventListener("click", () => { settings.sidebarVisible = !settings.sidebarVisible; $("#sidebar").classList.toggle("hidden", !settings.sidebarVisible); @@ -873,7 +875,9 @@ async function initUI(): Promise { $("#sidebar").classList.add("hidden"); void saveSettings(settings); }); +} +function bindDividerUI(): void { const divider = $("#col-divider"); const wrap = $("#editor-wrap"); divider.addEventListener("mousedown", (e) => { @@ -897,9 +901,9 @@ async function initUI(): Promise { window.addEventListener("mousemove", onMove); window.addEventListener("mouseup", onUp); }); +} - window.addEventListener("focus", () => { lastWindowFocusAt = performance.now(); }); - +function bindKeyboardShortcuts(): void { document.addEventListener("keydown", (e) => { if (e.ctrlKey && !e.shiftKey && e.key.toLowerCase() === "n") { e.preventDefault(); @@ -923,8 +927,9 @@ async function initUI(): Promise { toast(t("copied")); } }); +} - // export button + dropdown +function bindExportUI(): void { const exportBtn = $("#export-btn"); const exportMenu = $("#export-menu"); exportBtn.addEventListener("click", (e) => { @@ -964,12 +969,16 @@ async function initUI(): Promise { } } }); +} +function bindRatesAndMarketUI(): void { $("#rates-info").addEventListener("click", () => void refreshRates(true)); $("#market-info").addEventListener("click", () => void refreshMarket(true)); setInterval(renderRatesInfo, 60_000); setInterval(renderMarketInfo, 60_000); +} +async function bindLifecycle(): Promise { void onFileDrop((content) => newDoc(content)); if (!(await registerHotkey(null, settings.hotkey))) toast(t("hotkeyFailed")); @@ -1004,6 +1013,24 @@ async function initUI(): Promise { setInterval(() => { if (settings.autoUpdateEnabled) void checkUpdate(); }, 6 * 60 * 60 * 1000); } +async function initUI(): Promise { + + applySettings(); // sets the language before bindSettingsUI renders dynamic labels + bindSettingsUI(); + renderDocList(); + syncTitleField(); + + bindTitleUI(); + bindMiscUI(); + await bindWindowControls(); + bindSidebarUI(); + bindDividerUI(); + bindKeyboardShortcuts(); + bindExportUI(); + bindRatesAndMarketUI(); + await bindLifecycle(); +} + async function boot(): Promise { await initSettings(); await initDataAndEngine();