From 880017ddf33ace66aab1c630fcde089cb74eb864 Mon Sep 17 00:00:00 2001 From: CodedSakura Date: Mon, 13 Jul 2026 09:31:38 +0300 Subject: [PATCH] switch from main calling initializers to modules registering for load callback --- scripts/dialogs.js | 5 +++-- scripts/files.js | 5 +++-- scripts/main.js | 26 +++++++++++++------------- scripts/menu-bar.js | 5 +++-- scripts/planner.js | 5 +++-- scripts/resize-menus.js | 5 +++-- scripts/solver.js | 4 ++++ scripts/tooltip.js | 5 +++-- 8 files changed, 35 insertions(+), 25 deletions(-) diff --git a/scripts/dialogs.js b/scripts/dialogs.js index ba9da53..4d5717d 100644 --- a/scripts/dialogs.js +++ b/scripts/dialogs.js @@ -1,10 +1,11 @@ import { DomList } from "./dom-list.js"; import { addEventToElement, setText } from "./dom-utils.js"; import { emitEvent, listenTo } from "./events.js"; +import { registerLoadCallback } from "./main.js"; -export function initializeDialogs() { +registerLoadCallback(() => { listenTo("fileLoad:chooseDesign", designChoiceDialog); -} +}) function designChoiceDialog(e) { const dialog = document.querySelector('[data-dialog="fileLoad:chooseDesign"]'); diff --git a/scripts/files.js b/scripts/files.js index 6457cdc..e6a7dce 100644 --- a/scripts/files.js +++ b/scripts/files.js @@ -3,12 +3,13 @@ import { findFullEntry, stripEntryToMinimums } from "./ncpf-utils.js"; import { getPlannerMultiblockSize, getPlannerMultiblockType, loadPlanner, readPlannerTiles } from "./planner.js"; import { getAtlasIndexFromMetadata, getAtlasMetadata } from "./atlas.js"; import { resetSolver } from "./solver.js"; +import { registerLoadCallback } from "./main.js"; -export function initializeFileEvents() { +registerLoadCallback(() => { listenTo("file:load", () => showOpenFileDialog()); listenTo("file:new", () => {}); listenTo("file:save", () => saveFile("test")); -} +}); export function showOpenFileDialog() { const input = document.createElement("input"); diff --git a/scripts/main.js b/scripts/main.js index ea5a776..12e9430 100644 --- a/scripts/main.js +++ b/scripts/main.js @@ -1,13 +1,18 @@ 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 { loadExampleFile } from "./files.js"; import { getState, setState, STATE } from "./state.js"; -import { initializeTooltips } from "./tooltip.js"; -import { initializeMenuBar } from "./menu-bar.js"; + +let loadCallbacks = []; +export function registerLoadCallback(cb) { + queueMicrotask(() => { + loadCallbacks.push(cb); + }); +} +function runLoadCallbacks() { + loadCallbacks.forEach(cb => cb()); +} window.addEventListener("load", () => { emitEvent("setup-start"); @@ -57,12 +62,7 @@ window.addEventListener("load", () => { listenTo("config:end", () => setState(STATE.planning)); - initializeFileEvents(); - initializePlanner(); - initializeMenuResizing(); - initializeTooltips(); - initializeMenuBar(); - initializeDialogs(); + runLoadCallbacks(); emitEvent("setup-end"); @@ -70,5 +70,5 @@ window.addEventListener("load", () => { awaitEvent("config:end").then(() => loadExampleFile("tiny reactor")); // awaitEvent("config:end").then(() => loadExampleFile("multi-reactor")); - awaitEvent("solver:reset:done").then(() => emitEvent("file:save")); + // awaitEvent("solver:reset:done").then(() => emitEvent("file:save")); }); diff --git a/scripts/menu-bar.js b/scripts/menu-bar.js index dc59be1..fc9f98e 100644 --- a/scripts/menu-bar.js +++ b/scripts/menu-bar.js @@ -1,8 +1,9 @@ import { positionAsTooltip } from "./tooltip.js"; +import { registerLoadCallback } from "./main.js"; let activeMenuBar = null; -export function initializeMenuBar() { +registerLoadCallback(() => { document.querySelectorAll(".menu-bar").forEach(menuBar => { menuBar.querySelectorAll("button").forEach(button => { button.setAttribute("tabindex", "-1"); @@ -66,7 +67,7 @@ export function initializeMenuBar() { }); // TODO: keyboard navigation with alt and arrow keys -} +}); function handleGlobalClick() { diff --git a/scripts/planner.js b/scripts/planner.js index 85f561e..5753a8c 100644 --- a/scripts/planner.js +++ b/scripts/planner.js @@ -7,6 +7,7 @@ import { initialize3dArray } from "./js-utils.js"; import { recall, save } from "./storage.js"; import { createTooltip, tooltipDataToPlain } from "./tooltip.js"; import { lookupFromMetadata, resolveBlockName } from "./ncpf-utils.js"; +import { registerLoadCallback } from "./main.js"; const zoomOptions = [ 0.5, 1, 2, 3, 4, 5 ]; const zoomDefault = 2; @@ -17,7 +18,7 @@ let multiblockSize = [9, 7, 9]; // width (screen x), height (xy grids), depth (s let multiblockType = "nuclearcraft:overhaul_sfr"; let activeItem = -1; -export function initializePlanner() { +registerLoadCallback(() => { listenTo("config:end", buildBlockPicker); listenTo("config:end", buildPlanner); @@ -84,7 +85,7 @@ export function initializePlanner() { console.log("Suppressing hover:", suppressHover); } }); -} +}); function buildBlockPicker() { const filter = Filter.fromInput("block-picker:filter"); diff --git a/scripts/resize-menus.js b/scripts/resize-menus.js index 73092ee..5b2defb 100644 --- a/scripts/resize-menus.js +++ b/scripts/resize-menus.js @@ -1,6 +1,7 @@ import { recall, save } from "./storage.js"; +import { registerLoadCallback } from "./main.js"; -export function initializeMenuResizing() { +registerLoadCallback(() => { const handles = document.querySelectorAll('[data-resize]'); handles.forEach(handle => { handle.addEventListener("mousedown", startResize); @@ -9,7 +10,7 @@ export function initializeMenuResizing() { document.body.style.setProperty(`--${handle.dataset.resize}-size`, stored); } }); -} +}); function startResize(e) { window.addEventListener("mouseup", endResize); diff --git a/scripts/solver.js b/scripts/solver.js index a844177..3ae0ab6 100644 --- a/scripts/solver.js +++ b/scripts/solver.js @@ -1,5 +1,9 @@ import { configuration } from "./configuration.js"; import { emitEvent } from "./events.js"; +import { registerLoadCallback } from "./main.js"; + +registerLoadCallback(() => { +}); export function resetSolver(design = undefined) { console.log("solver", configuration, design); diff --git a/scripts/tooltip.js b/scripts/tooltip.js index 02a85b3..0e0ef3a 100644 --- a/scripts/tooltip.js +++ b/scripts/tooltip.js @@ -1,5 +1,6 @@ import { debounce } from "./dom-utils.js"; import { emitEvent, listenTo } from "./events.js"; +import { registerLoadCallback } from "./main.js"; const tooltips = {}; let tooltipsCounter = 0; @@ -7,7 +8,7 @@ let lastCoordinates = null; let suppressTooltips = false; let activeTooltipTarget = null; -export function initializeTooltips() { +registerLoadCallback(() => { document.querySelectorAll("[data-retain-tooltip-hover]").forEach(elem => elem.addEventListener("mousemove", e => { if (lastCoordinates !== null) { @@ -40,7 +41,7 @@ export function initializeTooltips() { suppressTooltips = !suppressTooltips; } }); -} +}); export function createTooltip(data) { const id = tooltipsCounter;