import { loadConfiguration } from "./configuration.js"; import { initializeDialogs } from "./dialogs.js"; import { addEventToButton, addEventToInput, debounce, getElements } from "./dom-utils.js"; import { awaitEvent, emitEvent, listenTo } from "./events.js"; import { initializeFileEvents, loadExampleFile, saveFile, showOpenFileDialog } from "./files.js"; import { initializePlanner } from "./planner.js"; import { initializeMenuResizing } from "./resize-menus.js"; import { getState, setState, STATE } from "./state.js"; import { initializeTooltips } from "./tooltip.js"; import { initializeMenuBar } from "./menu-bar.js"; window.addEventListener("load", () => { emitEvent("setup-start"); getElements("state", "*").forEach(e => { e.classList.add("hidden"); if (e.dataset.state === getState()) { e.classList.remove("hidden"); } }); getElements("button", "*").forEach(elem => { elem.addEventListener("click", e => { emitEvent(elem.dataset.button, e); }); }); getElements("toggle", "*").forEach(elem => { elem.addEventListener("click", e => { const wasChecked = e.currentTarget.dataset.toggled === "true"; const newState = !wasChecked; e.currentTarget.dataset.toggled = newState.toString(); emitEvent(elem.dataset.toggle, { state: newState, event: e }); }); }); getElements("input", "*").forEach(elem => { elem.addEventListener("keydown", e => e.stopPropagation()); elem.addEventListener("input", debounce(e => { emitEvent(elem.dataset.input + ":input", e); })); elem.addEventListener("change", e => { emitEvent(elem.dataset.input + ":change", e); }); }); addEventToInput("configuration", "input", loadConfiguration); addEventToButton("load-configuration", "click", loadConfiguration); listenTo("state", () => { console.log("State changed", getState()); getElements("state", "*").forEach(e => { e.classList.add("hidden"); if (e.dataset.state === getState()) { e.classList.remove("hidden"); } }); }); listenTo("config:end", () => setState(STATE.planning)); initializeFileEvents(); initializePlanner(); initializeMenuResizing(); initializeTooltips(); initializeMenuBar(); initializeDialogs(); emitEvent("setup-end"); void loadConfiguration("addons"); awaitEvent("config:end").then(() => loadExampleFile("tiny reactor")); // awaitEvent("config:end").then(() => loadExampleFile("multi-reactor")); awaitEvent("solver:reset:done").then(() => emitEvent("file:save")); });