diff --git a/src/dialogs/dialogs/biomes-editor.js b/src/dialogs/dialogs/biomes-editor.js index 98910aaf..f8858526 100644 --- a/src/dialogs/dialogs/biomes-editor.js +++ b/src/dialogs/dialogs/biomes-editor.js @@ -9,6 +9,8 @@ import {openURL} from "utils/linkUtils"; import {rn} from "utils/numberUtils"; import {getArea, getAreaUnit, si} from "utils/unitUtils"; +let isLoaded = false; + export function open() { closeDialogs("#biomesEditor, .stable"); if (!layerIsOn("toggleBiomes")) toggleBiomes(); @@ -21,8 +23,8 @@ export function open() { const animate = d3.transition().duration(2000).ease(d3.easeSinIn); refreshBiomesEditor(); - if (fmg.modules.editBiomes) return; - fmg.modules.editBiomes = true; + if (isLoaded) return; + isLoaded = true; $("#biomesEditor").dialog({ title: "Biomes Editor", diff --git a/src/dialogs/dialogs/burg-editor.js b/src/dialogs/dialogs/burg-editor.js index ffb0cadc..d5165b10 100644 --- a/src/dialogs/dialogs/burg-editor.js +++ b/src/dialogs/dialogs/burg-editor.js @@ -1,6 +1,7 @@ import * as d3 from "d3"; import {closeDialogs} from "dialogs/utils"; +import {openDialog} from "dialogs"; import {layerIsOn} from "layers"; import {prompt} from "scripts/prompt"; import {clearMainTip, tip} from "scripts/tooltips"; @@ -459,9 +460,9 @@ export function open({id} = {}) { } function openEmblemEdit() { - const id = +elSelected.attr("data-id"), - burg = pack.burgs[id]; - editEmblem("burg", "burgCOA" + id, burg); + const id = +elSelected.attr("data-id"); + const burg = pack.burgs[id]; + openDialog("emblemEditor", null, {type: "burg", id: "burgCOA" + id, el: burg}); } function toggleMFCGMap() { diff --git a/src/modules/ui/emblems-editor.js b/src/dialogs/dialogs/emblem-editor.js similarity index 97% rename from src/modules/ui/emblems-editor.js rename to src/dialogs/dialogs/emblem-editor.js index 321f6fa0..83bcd069 100644 --- a/src/modules/ui/emblems-editor.js +++ b/src/dialogs/dialogs/emblem-editor.js @@ -6,10 +6,7 @@ import {openURL} from "utils/linkUtils"; import {rn} from "utils/numberUtils"; import {parseTransform} from "utils/stringUtils"; -export function editEmblem(type, id, el) { - if (customization) return; - if (!id && d3.event) defineEmblemData(d3.event); - +export function open({type, id, el}) { emblems.selectAll("use").call(d3.drag().on("drag", dragEmblem)).classed("draggable", true); const emblemStates = document.getElementById("emblemStates"); @@ -49,20 +46,6 @@ export function editEmblem(type, id, el) { document.getElementById("emblemsGallery").onclick = downloadGallery; document.getElementById("emblemsFocus").onclick = showArea; - function defineEmblemData(e) { - const parent = e.target.parentNode; - const [g, t] = - parent.id === "burgEmblems" - ? [pack.burgs, "burg"] - : parent.id === "provinceEmblems" - ? [pack.provinces, "province"] - : [pack.states, "state"]; - const i = +e.target.dataset.i; - type = t; - id = type + "COA" + i; - el = g[i]; - } - function updateElementSelectors(type, id, el) { let state = 0, province = 0, diff --git a/src/modules/ui/heightmap-editor.js b/src/dialogs/dialogs/heightmap-editor.js similarity index 99% rename from src/modules/ui/heightmap-editor.js rename to src/dialogs/dialogs/heightmap-editor.js index c4fd6abb..3843523a 100644 --- a/src/modules/ui/heightmap-editor.js +++ b/src/dialogs/dialogs/heightmap-editor.js @@ -18,6 +18,8 @@ import {aleaPRNG} from "scripts/aleaPRNG"; import {undraw} from "scripts/generation"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function editHeightmap(options) { const {mode, tool} = options || {}; restartHistory(); @@ -26,8 +28,8 @@ export function editHeightmap(options) { if (!mode) showModeDialog(); else enterHeightmapEditMode(mode); - if (fmg.modules.editHeightmap) return; - fmg.modules.editHeightmap = true; + if (isLoaded) return; + isLoaded = true; // add listeners byId("paintBrushes").on("click", openBrushesPanel); @@ -555,6 +557,8 @@ export function editHeightmap(options) { updateHistory(); } + let isBrushesPanelLoaded = false; + function openBrushesPanel() { if ($("#brushesPanel").is(":visible")) return; $("#brushesPanel") @@ -565,8 +569,8 @@ export function editHeightmap(options) { }) .on("dialogclose", exitBrushMode); - if (fmg.modules.openBrushesPanel) return; - fmg.modules.openBrushesPanel = true; + if (isBrushesPanelLoaded) return; + isBrushesPanelLoaded = true; // add listeners byId("brushesButtons").on("click", e => toggleBrushMode(e)); @@ -725,6 +729,8 @@ export function editHeightmap(options) { } } + let isTemplateEditorLoaded = false; + function openTemplateEditor() { if ($("#templateEditor").is(":visible")) return; const $body = byId("templateBody"); @@ -737,8 +743,8 @@ export function editHeightmap(options) { position: {my: "right top", at: "right-10 top+10", of: "svg"} }); - if (fmg.modules.openTemplateEditor) return; - fmg.modules.openTemplateEditor = true; + if (isTemplateEditorLoaded) return; + isTemplateEditorLoaded = true; $("#templateBody").sortable({ items: "> div", @@ -1054,6 +1060,8 @@ export function editHeightmap(options) { } } + let isImageConverterLoaded = false; + function openImageConverter() { if ($("#imageConverter").is(":visible")) return; imageToLoad.click(); @@ -1084,8 +1092,8 @@ export function editHeightmap(options) { viewbox.select("#heights").selectAll("*").remove(); updateHistory(); - if (fmg.modules.openImageConverter) return; - fmg.modules.openImageConverter = true; + if (isImageConverterLoaded) return; + isImageConverterLoaded = true; // add color pallete void (function createColorPallete() { diff --git a/src/dialogs/dialogs/states-editor.js b/src/dialogs/dialogs/states-editor.js index fe3de716..44317ae4 100644 --- a/src/dialogs/dialogs/states-editor.js +++ b/src/dialogs/dialogs/states-editor.js @@ -1,6 +1,7 @@ import * as d3 from "d3"; import {closeDialogs} from "dialogs/utils"; +import {openDialog} from "dialogs"; import {restoreDefaultEvents} from "scripts/events"; import {clearMainTip, showMainTip, tip} from "scripts/tooltips"; import {getMixedColor, getRandomColor} from "utils/colorUtils"; @@ -161,7 +162,8 @@ function addListeners() { const stateId = +$element.parentNode?.dataset?.id; if ($element.tagName === "FILL-BOX") stateChangeFill($element); else if (classList.contains("name")) editStateName(stateId); - else if (classList.contains("coaIcon")) editEmblem("state", "stateCOA" + stateId, pack.states[stateId]); + else if (classList.contains("coaIcon")) + openDialog("emblemEditor", null, {type: "state", id: "stateCOA" + stateId, el: pack.state[stateId]}); else if (classList.contains("icon-star-empty")) stateCapitalZoomIn(stateId); else if (classList.contains("statePopulation")) changePopulation(stateId); else if (classList.contains("icon-pin")) toggleFog(stateId, classList); @@ -405,6 +407,8 @@ function stateChangeFill(el) { openPicker(currentFill, callback); } +let isLoaded = false; + function editStateName(state) { const $stateNameEditorCustomForm = byId("stateNameEditorCustomForm"); const $stateNameEditorSelectForm = byId("stateNameEditorSelectForm"); @@ -438,8 +442,8 @@ function editStateName(state) { position: {my: "center", at: "center", of: "svg"} }); - if (fmg.modules.editStateName) return; - fmg.modules.editStateName = true; + if (isLoaded) return; + isLoaded = true; // add listeners byId("stateNameEditorShortCulture").on("click", regenerateShortNameCuture); diff --git a/src/dialogs/dialogs/units-editor.js b/src/dialogs/dialogs/units-editor.js index ea15bc91..8d6d5106 100644 --- a/src/dialogs/dialogs/units-editor.js +++ b/src/dialogs/dialogs/units-editor.js @@ -7,12 +7,14 @@ import {prompt} from "scripts/prompt"; import {closeDialogs} from "dialogs/utils"; import {fitScaleBar} from "modules/measurers"; +let isLoaded = false; + export function open() { closeDialogs("#unitsEditor, .stable"); $("#unitsEditor").dialog(); - if (fmg.modules.editUnits) return; - fmg.modules.editUnits = true; + if (isLoaded) return; + isLoaded = true; $("#unitsEditor").dialog({ title: "Units Editor", diff --git a/src/dialogs/index.ts b/src/dialogs/index.ts index bf298376..88e6ddf0 100644 --- a/src/dialogs/index.ts +++ b/src/dialogs/index.ts @@ -6,6 +6,8 @@ const dialogsMap = { coastlineEditor: "coastline-editor", culturesEditor: "cultures-editor", diplomacyEditor: "diplomacy-editor", + emblemEditor: "emblem-editor", + heightmapEditor: "heightmap-editor", heightmapSelection: "heightmap-selection", hierarchyTree: "hierarchy-tree", religionsEditor: "religions-editor", diff --git a/src/main.ts b/src/main.ts index 93312bdb..35fb19ce 100644 --- a/src/main.ts +++ b/src/main.ts @@ -14,10 +14,6 @@ import {addGlobalListeners} from "./scripts/listeners"; import {checkForUpdates} from "./scripts/updater"; import {getInputNumber} from "utils/nodeUtils"; -window.fmg = { - modules: {} -}; - // default options options = { pinNotes: false, diff --git a/src/modules/ui/battle-screen.js b/src/modules/ui/battle-screen.js index f11982ae..f0020bc7 100644 --- a/src/modules/ui/battle-screen.js +++ b/src/modules/ui/battle-screen.js @@ -9,6 +9,8 @@ import {capitalize} from "utils/stringUtils"; import {getAdjective, list} from "utils/languageUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export class Battle { constructor(attacker, defender) { if (customization) return; @@ -42,8 +44,8 @@ export class Battle { close: () => Battle.prototype.context.cancelResults() }); - if (fmg.modules.Battle) return; - fmg.modules.Battle = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("battleType").addEventListener("click", ev => this.toggleChange(ev)); diff --git a/src/modules/ui/elevation-profile.js b/src/modules/ui/elevation-profile.js index 8dd656bc..572ad2e1 100644 --- a/src/modules/ui/elevation-profile.js +++ b/src/modules/ui/elevation-profile.js @@ -421,6 +421,5 @@ function showElevationProfile(data, routeLen, isRiver) { document.getElementById("epCurve").removeEventListener("change", draw); document.getElementById("epSave").removeEventListener("click", downloadCSV); document.getElementById("elevationGraph").innerHTML = ""; - fmg.modules.elevation = false; } } diff --git a/src/modules/ui/ice-editor.js b/src/modules/ui/ice-editor.js index 9a686474..5a9a990b 100644 --- a/src/modules/ui/ice-editor.js +++ b/src/modules/ui/ice-editor.js @@ -7,6 +7,8 @@ import {ra} from "utils/probabilityUtils"; import {parseTransform} from "utils/stringUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function editIce() { if (customization) return; closeDialogs(".stable"); @@ -26,8 +28,8 @@ export function editIce() { close: closeEditor }); - if (fmg.modules.editIce) return; - fmg.modules.editIce = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("iceEditStyle").addEventListener("click", () => editStyle("ice")); diff --git a/src/modules/ui/labels-editor.js b/src/modules/ui/labels-editor.js index 9212235d..e2717463 100644 --- a/src/modules/ui/labels-editor.js +++ b/src/modules/ui/labels-editor.js @@ -3,6 +3,8 @@ import {tip, showMainTip} from "scripts/tooltips"; import {round, parseTransform} from "utils/stringUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function editLabel() { if (customization) return; closeDialogs(); @@ -26,8 +28,8 @@ export function editLabel() { selectLabelGroup(text); updateValues(textPath); - if (fmg.modules.editLabel) return; - fmg.modules.editLabel = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("labelGroupShow").addEventListener("click", showGroupSection); diff --git a/src/modules/ui/lakes-editor.js b/src/modules/ui/lakes-editor.js index 264d0598..e48733ff 100644 --- a/src/modules/ui/lakes-editor.js +++ b/src/modules/ui/lakes-editor.js @@ -8,6 +8,8 @@ import {rand} from "utils/probabilityUtils"; import {round} from "utils/stringUtils"; import {getArea, getAreaUnit, getHeight, si} from "utils/unitUtils"; +let isLoaded = false; + export function editLake() { if (customization) return; closeDialogs(".stable"); @@ -28,8 +30,8 @@ export function editLake() { drawLakeVertices(); viewbox.on("touchmove mousemove", null); - if (fmg.modules.editLake) return; - fmg.modules.editLake = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("lakeName").addEventListener("input", changeName); diff --git a/src/modules/ui/military-overview.js b/src/modules/ui/military-overview.js index a382effc..06ebbc93 100644 --- a/src/modules/ui/military-overview.js +++ b/src/modules/ui/military-overview.js @@ -7,6 +7,8 @@ import {capitalize} from "utils/stringUtils"; import {si} from "utils/unitUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function overviewMilitary() { if (customization) return; closeDialogs("#militaryOverview, .stable"); @@ -18,8 +20,9 @@ export function overviewMilitary() { addLines(); $("#militaryOverview").dialog(); - if (fmg.modules.overviewMilitary) return; - fmg.modules.overviewMilitary = true; + if (isLoaded) return; + isLoaded = true; + updateHeaders(); $("#militaryOverview").dialog({ @@ -243,6 +246,8 @@ export function overviewMilitary() { } } + let isCustomizeLoaded = false; + function militaryCustomize() { const types = ["melee", "ranged", "mounted", "machinery", "naval", "armored", "aviation", "magical"]; const tableBody = document.getElementById("militaryOptions").querySelector("tbody"); @@ -282,8 +287,8 @@ export function overviewMilitary() { } }); - if (fmg.modules.overviewMilitaryCustomize) return; - fmg.modules.overviewMilitaryCustomize = true; + if (isCustomizeLoaded) return; + isCustomizeLoaded = true; tableBody.addEventListener("click", event => { const el = event.target; diff --git a/src/modules/ui/namesbase-editor.js b/src/modules/ui/namesbase-editor.js index b81f3041..431d80ef 100644 --- a/src/modules/ui/namesbase-editor.js +++ b/src/modules/ui/namesbase-editor.js @@ -6,13 +6,15 @@ import {openURL} from "utils/linkUtils"; import {rn} from "utils/numberUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function editNamesbase() { if (customization) return; closeDialogs("#namesbaseEditor, .stable"); $("#namesbaseEditor").dialog(); - if (fmg.modules.editNamesbase) return; - fmg.modules.editNamesbase = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("namesbaseSelect").addEventListener("change", updateInputs); diff --git a/src/modules/ui/notes-editor.js b/src/modules/ui/notes-editor.js index 46b8c53d..1c0aacb4 100644 --- a/src/modules/ui/notes-editor.js +++ b/src/modules/ui/notes-editor.js @@ -1,5 +1,7 @@ import {tip} from "scripts/tooltips"; +let isLoaded = false; + export function editNotes(id, name) { // elements const notesLegend = document.getElementById("notesLegend"); @@ -49,8 +51,8 @@ export function editNotes(id, name) { }); $("[aria-describedby='notesEditor']").css("top", "10vh"); - if (modules.editNotes) return; - modules.editNotes = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("notesSelect").addEventListener("change", changeElement); diff --git a/src/modules/ui/options.js b/src/modules/ui/options.js index 7fc5a2ce..50f7b22f 100644 --- a/src/modules/ui/options.js +++ b/src/modules/ui/options.js @@ -974,6 +974,8 @@ function resize3d() { ThreeD.redraw(); } +let isLoaded = false; + function toggle3dOptions() { if (options3dUpdate.offsetParent) { $("#options3d").dialog("close"); @@ -988,8 +990,8 @@ function toggle3dOptions() { updateValues(); - if (fmg.modules.options3d) return; - fmg.modules.options3d = true; + if (isLoaded) return; + isLoaded = true; document.getElementById("options3dUpdate").addEventListener("click", ThreeD.update); document.getElementById("options3dSave").addEventListener("click", ThreeD.saveScreenshot); diff --git a/src/modules/ui/provinces-editor.js b/src/modules/ui/provinces-editor.js index f0186ea7..d9f86d1b 100644 --- a/src/modules/ui/provinces-editor.js +++ b/src/modules/ui/provinces-editor.js @@ -1,6 +1,7 @@ import * as d3 from "d3"; import {closeDialogs} from "dialogs/utils"; +import {openDialog} from "dialogs"; import {turnLayerButtonOff} from "layers"; import {restoreDefaultEvents} from "scripts/events"; import {clearMainTip, showMainTip, tip} from "scripts/tooltips"; @@ -13,6 +14,8 @@ import {byId} from "utils/shorthands"; import {parseTransform} from "utils/stringUtils"; import {getArea, getAreaUnit, si} from "utils/unitUtils"; +let isLoaded = false; + export function editProvinces() { if (customization) return; closeDialogs("#provincesEditor, .stable"); @@ -25,8 +28,8 @@ export function editProvinces() { const body = byId("provincesBodySection"); refreshProvincesEditor(); - if (fmg.modules.editProvinces) return; - fmg.modules.editProvinces = true; + if (isLoaded) return; + isLoaded = true; $("#provincesEditor").dialog({ title: "Provinces Editor", @@ -61,7 +64,8 @@ export function editProvinces() { if (el.tagName === "FILL-BOX") changeFill(el); else if (cl.contains("name")) editProvinceName(p); - else if (cl.contains("coaIcon")) editEmblem("province", "provinceCOA" + p, pack.provinces[p]); + else if (cl.contains("coaIcon")) + openDialog("emblemEditor", null, {type: "province", id: "provinceCOA" + p, el: pack.provinces[p]}); else if (cl.contains("icon-star-empty")) capitalZoomIn(p); else if (cl.contains("icon-flag-empty")) triggerIndependencePromps(p); else if (cl.contains("culturePopulation")) changePopulation(p); @@ -506,6 +510,8 @@ export function editProvinces() { }); } + let isNameEditorLoaded = false; + function editProvinceName(province) { const p = pack.provinces[province]; byId("provinceNameEditor").dataset.province = province; @@ -528,8 +534,8 @@ export function editProvinces() { position: {my: "center", at: "center", of: "svg"} }); - if (fmg.modules.editProvinceName) return; - fmg.modules.editProvinceName = true; + if (isNameEditorLoaded) return; + isNameEditorLoaded = true; // add listeners byId("provinceNameEditorShortCulture").addEventListener("click", regenerateShortNameCuture); diff --git a/src/modules/ui/regiment-editor.js b/src/modules/ui/regiment-editor.js index 34689458..d8dd3a77 100644 --- a/src/modules/ui/regiment-editor.js +++ b/src/modules/ui/regiment-editor.js @@ -8,6 +8,8 @@ import {rn} from "utils/numberUtils"; import {capitalize} from "utils/stringUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function editRegiment(selector) { if (customization) return; closeDialogs(".stable"); @@ -28,8 +30,8 @@ export function editRegiment(selector) { position: {my: "left top", at: "left+10 top+10", of: "#map"} }); - if (fmg.modules.editRegiment) return; - fmg.modules.editRegiment = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("regimentNameRestore").addEventListener("click", restoreName); diff --git a/src/modules/ui/regiments-overview.js b/src/modules/ui/regiments-overview.js index 514b3d04..bd5d08be 100644 --- a/src/modules/ui/regiments-overview.js +++ b/src/modules/ui/regiments-overview.js @@ -8,6 +8,8 @@ import {capitalize} from "utils/stringUtils"; import {si} from "utils/unitUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function overviewRegiments(state) { if (customization) return; closeDialogs(".stable"); @@ -18,8 +20,9 @@ export function overviewRegiments(state) { addLines(); $("#regimentsOverview").dialog(); - if (fmg.modules.overviewRegiments) return; - fmg.modules.overviewRegiments = true; + if (isLoaded) return; + isLoaded = true; + updateHeaders(); $("#regimentsOverview").dialog({ diff --git a/src/modules/ui/relief-editor.js b/src/modules/ui/relief-editor.js index 6b4ae948..b998b7cf 100644 --- a/src/modules/ui/relief-editor.js +++ b/src/modules/ui/relief-editor.js @@ -6,6 +6,8 @@ import {tip, showMainTip, clearMainTip} from "scripts/tooltips"; import {rn} from "utils/numberUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function editReliefIcon() { if (customization) return; closeDialogs(".stable"); @@ -26,8 +28,8 @@ export function editReliefIcon() { close: closeReliefEditor }); - if (fmg.modules.editReliefIcon) return; - fmg.modules.editReliefIcon = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("reliefIndividual").addEventListener("click", enterIndividualMode); diff --git a/src/modules/ui/rivers-creator.js b/src/modules/ui/rivers-creator.js index 67f678d3..b9a9041c 100644 --- a/src/modules/ui/rivers-creator.js +++ b/src/modules/ui/rivers-creator.js @@ -7,6 +7,8 @@ import {tip, clearMainTip} from "scripts/tooltips"; import {rn} from "utils/numberUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function createRiver() { if (customization) return; closeDialogs(); @@ -29,8 +31,8 @@ export function createRiver() { close: closeRiverCreator }); - if (fmg.modules.createRiver) return; - fmg.modules.createRiver = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("riverCreatorComplete").addEventListener("click", addRiver); diff --git a/src/modules/ui/rivers-editor.js b/src/modules/ui/rivers-editor.js index c43b5c8e..cfc0da64 100644 --- a/src/modules/ui/rivers-editor.js +++ b/src/modules/ui/rivers-editor.js @@ -7,6 +7,8 @@ import {rn} from "utils/numberUtils"; import {rand} from "utils/probabilityUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function editRiver(id) { if (customization) return; if (elSelected && id === elSelected.attr("id")) return; @@ -40,8 +42,8 @@ export function editRiver(id) { close: closeRiverEditor }); - if (fmg.modules.editRiver) return; - fmg.modules.editRiver = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("riverCreateSelectingCells").addEventListener("click", createRiver); @@ -173,7 +175,7 @@ export function editRiver(id) { elSelected.attr("d", path); updateRiverLength(river); - if (fmg.modules.elevation) showEPForRiver(elSelected.node()); + // TODO: check visibility showEPForRiver(elSelected.node()); } function addControlPoint() { @@ -237,7 +239,6 @@ export function editRiver(id) { } function showElevationProfile() { - fmg.modules.elevation = true; showEPForRiver(elSelected.node()); } diff --git a/src/modules/ui/rivers-overview.js b/src/modules/ui/rivers-overview.js index 8c463c5c..9fdf77bb 100644 --- a/src/modules/ui/rivers-overview.js +++ b/src/modules/ui/rivers-overview.js @@ -3,6 +3,8 @@ import * as d3 from "d3"; import {rn} from "utils/numberUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function overviewRivers() { if (customization) return; closeDialogs("#riversOverview, .stable"); @@ -12,8 +14,8 @@ export function overviewRivers() { riversOverviewAddLines(); $("#riversOverview").dialog(); - if (fmg.modules.overviewRivers) return; - fmg.modules.overviewRivers = true; + if (isLoaded) return; + isLoaded = true; $("#riversOverview").dialog({ title: "Rivers Overview", diff --git a/src/modules/ui/routes-editor.js b/src/modules/ui/routes-editor.js index 6369eec2..1687cdcb 100644 --- a/src/modules/ui/routes-editor.js +++ b/src/modules/ui/routes-editor.js @@ -7,6 +7,8 @@ import {getNextId} from "utils/nodeUtils"; import {round} from "utils/stringUtils"; import {closeDialogs} from "dialogs/utils"; +let isLoaded = false; + export function editRoute(onClick) { if (customization) return; if (!onClick && elSelected && d3.event.target.id === elSelected.attr("id")) return; @@ -29,8 +31,8 @@ export function editRoute(onClick) { viewbox.on("touchmove mousemove", showEditorTips); if (onClick) toggleRouteCreationMode(); - if (fmg.modules.editRoute) return; - fmg.modules.editRoute = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("routeGroupsShow").addEventListener("click", showGroupSection); @@ -106,11 +108,10 @@ export function editRoute(onClick) { const l = elSelected.node().getTotalLength(); routeLength.innerHTML = rn(l * distanceScaleInput.value) + " " + distanceUnitInput.value; - if (fmg.modules.elevation) showEPForRoute(elSelected.node()); + // TODO: check visibility showEPForRoute(elSelected.node()); } function showElevationProfile() { - fmg.modules.elevation = true; showEPForRoute(elSelected.node()); } diff --git a/src/modules/ui/stylePresets.js b/src/modules/ui/stylePresets.js index 8fc2338d..ca303448 100644 --- a/src/modules/ui/stylePresets.js +++ b/src/modules/ui/stylePresets.js @@ -131,6 +131,8 @@ function applyStyleWithUiRefresh(style) { setPresetRemoveButtonVisibiliy(); } +let isLoaded = false; + function addStylePreset() { $("#styleSaver").dialog({title: "Style Saver", width: "26em", position: {my: "center", at: "center", of: "svg"}}); @@ -139,8 +141,8 @@ function addStylePreset() { styleSaverJSON.value = JSON.stringify(collectStyleData(), null, 2); checkName(); - if (fmg.modules.saveStyle) return; - fmg.modules.saveStyle = true; + if (isLoaded) return; + isLoaded = true; // add listeners document.getElementById("styleSaverName").addEventListener("input", checkName); diff --git a/src/modules/ui/tools.js b/src/modules/ui/tools.js index c0d62694..cc4f1664 100644 --- a/src/modules/ui/tools.js +++ b/src/modules/ui/tools.js @@ -126,7 +126,7 @@ async function openEmblemEditor() { } await COArenderer.trigger(id, el.coa); - editEmblem(type, id, el); + openDialog("emblemEditor", null, {type, id, el}); } function regenerateRivers() { diff --git a/src/modules/ui/world-configurator.js b/src/modules/ui/world-configurator.js index 6cdbbf56..69b95cd9 100644 --- a/src/modules/ui/world-configurator.js +++ b/src/modules/ui/world-configurator.js @@ -4,6 +4,8 @@ import {tip} from "scripts/tooltips"; import {rn} from "utils/numberUtils"; import {round, parseTransform} from "utils/stringUtils"; +let isLoaded = false; + export function editWorld() { if (customization) return; $("#worldConfigurator").dialog({ @@ -40,8 +42,8 @@ export function editWorld() { updateGlobeTemperature(); updateGlobePosition(); - if (fmg.modules.editWorld) return; - fmg.modules.editWorld = true; + if (isLoaded) return; + isLoaded = true; document.getElementById("worldControls").addEventListener("input", e => updateWorld(e.target)); globe.select("#globeWindArrows").on("click", changeWind); diff --git a/src/modules/ui/zones-editor.js b/src/modules/ui/zones-editor.js index eec30cd0..62f9f229 100644 --- a/src/modules/ui/zones-editor.js +++ b/src/modules/ui/zones-editor.js @@ -9,6 +9,8 @@ import {getNextId} from "utils/nodeUtils"; import {rn} from "utils/numberUtils"; import {getArea, getAreaUnit, si} from "utils/unitUtils"; +let isLoaded = false; + export function editZones() { closeDialogs(); if (!layerIsOn("toggleZones")) toggleZones(); @@ -17,8 +19,8 @@ export function editZones() { updateFilters(); zonesEditorAddLines(); - if (fmg.modules.editZones) return; - fmg.modules.editZones = true; + if (isLoaded) return; + isLoaded = true; $("#zonesEditor").dialog({ title: "Zones Editor", diff --git a/src/scripts/events.js b/src/scripts/events.js index 3ded2183..6367a0f3 100644 --- a/src/scripts/events.js +++ b/src/scripts/events.js @@ -30,7 +30,7 @@ function clicked() { const p = d3.mouse(this); const i = findCell(p[0], p[1]); - if (grand.id === "emblems") editEmblem(); + if (grand.id === "emblems") openDialog("emblemEditor", null, defineEmblemData(+el.dataset.i, parent)); else if (parent.id === "rivers") editRiver(el.id); else if (grand.id === "routes") editRoute(); else if (el.tagName === "tspan" && grand.parentNode.parentNode.id === "labels") editLabel(); @@ -45,6 +45,16 @@ function clicked() { } else if (grand.id === "lakes") editLake(); } +function defineEmblemData(i, parent) { + const [g, type] = + parent.id === "burgEmblems" + ? [pack.burgs, "burg"] + : parent.id === "provinceEmblems" + ? [pack.provinces, "province"] + : [pack.states, "state"]; + return {type, id: type + "COA" + i, el: g[i]}; +} + const onMouseMove = debounce(handleMouseMove, 100); function handleMouseMove() { const point = d3.mouse(this); diff --git a/src/types/overrides.d.ts b/src/types/overrides.d.ts index 231de2a4..2559b1f4 100644 --- a/src/types/overrides.d.ts +++ b/src/types/overrides.d.ts @@ -5,11 +5,6 @@ interface Navigator { } interface Window { - fmg: { - modules: { - [key: string]: boolean; - }; - }; mapCoordinates: IMapCoordinates; // untyped IIFE modules $: typeof $;