switch from main calling initializers to modules registering for load callback

This commit is contained in:
CodedSakura 2026-07-13 09:31:38 +03:00
parent b69bcacb78
commit 880017ddf3
8 changed files with 35 additions and 25 deletions

View File

@ -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"]');

View File

@ -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");

View File

@ -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"));
});

View File

@ -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() {

View File

@ -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");

View File

@ -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);

View File

@ -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);

View File

@ -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;