diff --git a/index.html b/index.html index 79c5a79e..ec71f62b 100644 --- a/index.html +++ b/index.html @@ -5855,11 +5855,7 @@
- + diff --git a/src/dialogs/dialogs/biomes-editor.js b/src/dialogs/dialogs/biomes-editor.js index 8d203e7d..df096076 100644 --- a/src/dialogs/dialogs/biomes-editor.js +++ b/src/dialogs/dialogs/biomes-editor.js @@ -1,7 +1,7 @@ import * as d3 from "d3"; import {closeDialogs} from "dialogs/utils"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {clearMainTip, showMainTip, tip} from "scripts/tooltips"; import {getRandomColor} from "utils/colorUtils"; import {findAll, findCell, getPackPolygon, isLand} from "utils/graphUtils"; @@ -467,7 +467,7 @@ export function open() { biomesFooter.style.display = "block"; if (!close) $("#biomesEditor").dialog({position: {my: "right top", at: "right-10 top+10", of: "svg"}}); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); const selected = document.querySelector("#biomesBody > div.selected"); if (selected) selected.classList.remove("selected"); diff --git a/src/dialogs/dialogs/burg-editor.js b/src/dialogs/dialogs/burg-editor.js index 0ed74e1a..ff0ec06b 100644 --- a/src/dialogs/dialogs/burg-editor.js +++ b/src/dialogs/dialogs/burg-editor.js @@ -11,7 +11,7 @@ import {rn} from "utils/numberUtils"; import {rand} from "utils/probabilityUtils"; import {parseTransform} from "utils/stringUtils"; import {convertTemperature, getHeight, getBurgPopulation, getBurgPopulationPoints} from "utils/unitUtils"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; let isLoaded = false; @@ -484,7 +484,7 @@ export function open({id} = {}) { } } else { clearMainTip(); - restoreDefaultEvents(); + setDefaultEventHandlers(); if (layerIsOn("toggleCells") && toggler.dataset.forced) { toggleCells(); diff --git a/src/dialogs/dialogs/burgs-overview.js b/src/dialogs/dialogs/burgs-overview.js index 1e560c37..91baee84 100644 --- a/src/dialogs/dialogs/burgs-overview.js +++ b/src/dialogs/dialogs/burgs-overview.js @@ -4,7 +4,7 @@ import {openDialog} from "dialogs"; import {closeDialogs} from "dialogs/utils"; import {layerIsOn, toggleLayer} from "layers"; import {applySorting} from "modules/ui/editors"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {clearMainTip, tip} from "scripts/tooltips"; import {getCoordinates} from "utils/coordinateUtils"; import {findCell} from "utils/graphUtils"; @@ -312,7 +312,7 @@ export function open() { function exitAddBurgMode() { customization = 0; - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); if (addBurgTool.classList.contains("pressed")) addBurgTool.classList.remove("pressed"); if (addNewBurg.classList.contains("pressed")) addNewBurg.classList.remove("pressed"); diff --git a/src/dialogs/dialogs/cultures-editor.js b/src/dialogs/dialogs/cultures-editor.js index 94035586..0a8b9640 100644 --- a/src/dialogs/dialogs/cultures-editor.js +++ b/src/dialogs/dialogs/cultures-editor.js @@ -2,7 +2,7 @@ import * as d3 from "d3"; import {openDialog} from "dialogs"; import {closeDialogs} from "dialogs/utils"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {clearMainTip, showMainTip, tip} from "scripts/tooltips"; import {debounce} from "utils/functionUtils"; import {findAll, findCell, getPackPolygon, isLand} from "utils/graphUtils"; @@ -811,7 +811,7 @@ function exitCulturesManualAssignment(close) { if (!close) $("#culturesEditor").dialog({position: {my: "right top", at: "right-10 top+10", of: "svg"}}); debug.select("#cultureCenters").style("display", null); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); const selected = $body.querySelector("div.selected"); if (selected) selected.classList.remove("selected"); @@ -829,7 +829,7 @@ function enterAddCulturesMode() { function exitAddCultureMode() { customization = 0; - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); $body.querySelectorAll("div > input, select, span, svg").forEach(e => (e.style.pointerEvents = "all")); if (culturesAdd.classList.contains("pressed")) culturesAdd.classList.remove("pressed"); diff --git a/src/dialogs/dialogs/diplomacy-editor.js b/src/dialogs/dialogs/diplomacy-editor.js index 4acc63a8..e6467d42 100644 --- a/src/dialogs/dialogs/diplomacy-editor.js +++ b/src/dialogs/dialogs/diplomacy-editor.js @@ -2,7 +2,7 @@ import * as d3 from "d3"; import {closeDialogs} from "dialogs/utils"; import {layerIsOn} from "layers"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {clearMainTip, tip} from "scripts/tooltips"; import {findCell} from "utils/graphUtils"; import {applySorting} from "modules/ui/editors"; @@ -455,7 +455,7 @@ export function open() { } function closeDiplomacyEditor() { - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); const selected = body.querySelector("div.Self"); if (selected) selected.classList.remove("Self"); diff --git a/src/dialogs/dialogs/heightmap-editor.js b/src/dialogs/dialogs/heightmap-editor.js index 73e7aa99..db47b427 100644 --- a/src/dialogs/dialogs/heightmap-editor.js +++ b/src/dialogs/dialogs/heightmap-editor.js @@ -13,7 +13,7 @@ import {moveCircle, removeCircle} from "modules/ui/editors"; import {changeViewMode} from "modules/ui/options"; import {addZones} from "modules/zones"; import {aleaPRNG} from "scripts/aleaPRNG"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {undraw} from "scripts/generation"; import {prompt} from "scripts/prompt"; import {rankCells} from "scripts/rankCells"; @@ -182,7 +182,7 @@ export function open(options) { if (byId("options").querySelector(".tab > button.active").id === "toolsTab") toolsContent.style.display = "block"; layersPreset.disabled = false; exitCustomization.style.display = "none"; // hide finalize button - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); closeDialogs(); Zoom.reset(); diff --git a/src/dialogs/dialogs/ice-editor.ts b/src/dialogs/dialogs/ice-editor.ts index 46377834..db24c291 100644 --- a/src/dialogs/dialogs/ice-editor.ts +++ b/src/dialogs/dialogs/ice-editor.ts @@ -11,8 +11,7 @@ import {byId} from "utils/shorthands"; import {parseTransform} from "utils/stringUtils"; // @ts-expect-error js module import {editStyle} from "modules/style"; -// @ts-expect-error js module -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; // @ts-expect-error js module import {unselect} from "modules/ui/editors"; @@ -85,7 +84,7 @@ export function open() { tip("Click on map to create an iceberg. Hold Shift to add multiple", true); } else { clearMainTip(); - restoreDefaultEvents(); + setDefaultEventHandlers(); } } diff --git a/src/dialogs/dialogs/religions-editor.js b/src/dialogs/dialogs/religions-editor.js index f82c79bd..331b9730 100644 --- a/src/dialogs/dialogs/religions-editor.js +++ b/src/dialogs/dialogs/religions-editor.js @@ -3,7 +3,7 @@ import * as d3 from "d3"; import {openDialog} from "dialogs"; import {closeDialogs} from "dialogs/utils"; import {applySortingByHeader} from "modules/ui/editors"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {clearMainTip, showMainTip, tip} from "scripts/tooltips"; import {debounce} from "utils/functionUtils"; import {findAll, findCell, getPackPolygon, isLand} from "utils/graphUtils"; @@ -710,7 +710,7 @@ function exitReligionsManualAssignment(close) { if (!close) $("#religionsEditor").dialog({position: {my: "right top", at: "right-10 top+10", of: "svg"}}); debug.select("#religionCenters").style("display", null); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); const $selected = $body.querySelector("div.selected"); if ($selected) $selected.classList.remove("selected"); @@ -728,7 +728,7 @@ function enterAddReligionMode() { function exitAddReligionMode() { customization = 0; - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); $body.querySelectorAll("div > input, select, span, svg").forEach(e => (e.style.pointerEvents = "all")); if (religionsAdd.classList.contains("pressed")) religionsAdd.classList.remove("pressed"); diff --git a/src/dialogs/dialogs/states-editor.js b/src/dialogs/dialogs/states-editor.js index 150a3990..ac964b66 100644 --- a/src/dialogs/dialogs/states-editor.js +++ b/src/dialogs/dialogs/states-editor.js @@ -3,7 +3,7 @@ import * as d3 from "d3"; import {openDialog} from "dialogs"; import {closeDialogs} from "dialogs/utils"; import {applySortingByHeader, unfog} from "modules/ui/editors"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {clearMainTip, showMainTip, tip} from "scripts/tooltips"; import {getMixedColor, getRandomColor} from "utils/colorUtils"; import {findAll, findCell, getPackPolygon, isLand} from "utils/graphUtils"; @@ -1217,7 +1217,7 @@ function exitStatesManualAssignment(close) { if (!close) $("#statesEditor").dialog({position: {my: "right top", at: "right-10 top+10", of: "svg", collision: "fit"}}); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); const selected = $body.querySelector("div.selected"); if (selected) selected.classList.remove("selected"); @@ -1349,7 +1349,7 @@ function addState() { function exitAddStateMode() { customization = 0; - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); $body.querySelectorAll("div > input, select, span, svg").forEach(e => (e.style.pointerEvents = "all")); if (statesAdd.classList.contains("pressed")) statesAdd.classList.remove("pressed"); diff --git a/src/dialogs/dialogs/units-editor.js b/src/dialogs/dialogs/units-editor.js index 8d6d5106..2dcea13c 100644 --- a/src/dialogs/dialogs/units-editor.js +++ b/src/dialogs/dialogs/units-editor.js @@ -1,6 +1,6 @@ import * as d3 from "d3"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {findCell} from "utils/graphUtils"; import {tip} from "scripts/tooltips"; import {prompt} from "scripts/prompt"; @@ -174,7 +174,7 @@ export function open() { function toggleOpisometerMode() { if (this.classList.contains("pressed")) { - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); this.classList.remove("pressed"); } else { @@ -193,7 +193,7 @@ export function open() { }); d3.event.on("end", function () { - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); addOpisometer.classList.remove("pressed"); if (opisometer.points.length < 2) rulers.remove(opisometer.id); @@ -206,7 +206,7 @@ export function open() { function toggleRouteOpisometerMode() { if (this.classList.contains("pressed")) { - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); this.classList.remove("pressed"); } else { @@ -235,7 +235,7 @@ export function open() { }); d3.event.on("end", function () { - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); addRouteOpisometer.classList.remove("pressed"); if (routeOpisometer.points.length < 2) { @@ -243,7 +243,7 @@ export function open() { } }); } else { - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); addRouteOpisometer.classList.remove("pressed"); tip("Must start in a cell with a route in it", false, "error"); @@ -255,7 +255,7 @@ export function open() { function togglePlanimeterMode() { if (this.classList.contains("pressed")) { - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); this.classList.remove("pressed"); } else { @@ -274,7 +274,7 @@ export function open() { }); d3.event.on("end", function () { - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); addPlanimeter.classList.remove("pressed"); if (planimeter.points.length < 3) rulers.remove(planimeter.id); diff --git a/src/modules/io/load.js b/src/modules/io/load.js index 1f129f5c..b8a87337 100644 --- a/src/modules/io/load.js +++ b/src/modules/io/load.js @@ -2,7 +2,7 @@ import * as d3 from "d3"; import {INFO} from "config/logging"; import {updatePresetInput} from "layers"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {ldb} from "scripts/indexedDB"; import {tip} from "scripts/tooltips"; import {last} from "utils/arrayUtils"; @@ -624,7 +624,7 @@ async function parseLoadedData(data) { eraInput.value = options.era; shapeRendering.value = viewbox.attr("shape-rendering") || "geometricPrecision"; - restoreDefaultEvents(); + setDefaultEventHandlers(); focusOn(); // based on searchParams focus on point, cell or burg Zoom.invoke(); diff --git a/src/modules/ui/editors.js b/src/modules/ui/editors.js index a7b5f01e..41503e5c 100644 --- a/src/modules/ui/editors.js +++ b/src/modules/ui/editors.js @@ -1,6 +1,6 @@ import * as d3 from "d3"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {tip} from "scripts/tooltips"; import {findCell} from "utils/graphUtils"; import {minmax, normalize, rn} from "utils/numberUtils"; @@ -11,7 +11,7 @@ import {getBurgPopulation} from "utils/unitUtils"; // clear elSelected variable export function unselect() { - restoreDefaultEvents(); + setDefaultEventHandlers(); if (!elSelected) return; elSelected.call(d3.drag().on("drag", null)).attr("class", null); debug.selectAll("*").remove(); diff --git a/src/modules/ui/markers-editor.js b/src/modules/ui/markers-editor.js index 39f3b6e8..52bbd342 100644 --- a/src/modules/ui/markers-editor.js +++ b/src/modules/ui/markers-editor.js @@ -1,6 +1,6 @@ import * as d3 from "d3"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {findCell} from "utils/graphUtils"; import {clearMainTip} from "scripts/tooltips"; import {rn} from "utils/numberUtils"; @@ -271,7 +271,7 @@ export function editMarker(markerI) { unselect(); addMarker.classList.remove("pressed"); markerAdd.classList.remove("pressed"); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); } } diff --git a/src/modules/ui/markers-overview.js b/src/modules/ui/markers-overview.js index fa52cb5c..f413bd4d 100644 --- a/src/modules/ui/markers-overview.js +++ b/src/modules/ui/markers-overview.js @@ -1,4 +1,4 @@ -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {clearMainTip} from "scripts/tooltips"; import {closeDialogs} from "dialogs/utils"; @@ -197,7 +197,7 @@ export function overviewMarkers() { addMarker.classList.remove("pressed"); markerAdd.classList.remove("pressed"); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); } } diff --git a/src/modules/ui/provinces-editor.js b/src/modules/ui/provinces-editor.js index cade03c3..d8ba38f9 100644 --- a/src/modules/ui/provinces-editor.js +++ b/src/modules/ui/provinces-editor.js @@ -4,7 +4,7 @@ import {openDialog} from "dialogs"; import {closeDialogs} from "dialogs/utils"; import {turnLayerButtonOff} from "layers"; import {unfog} from "modules/ui/editors"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {clearMainTip, showMainTip, tip} from "scripts/tooltips"; import {unique} from "utils/arrayUtils"; import {getRandomColor} from "utils/colorUtils"; @@ -993,7 +993,7 @@ export function editProvinces() { if (!close) $("#provincesEditor").dialog({position: {my: "right top", at: "right-10 top+10", of: "svg", collision: "fit"}}); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); const selected = body.querySelector("div.selected"); if (selected) selected.classList.remove("selected"); @@ -1069,7 +1069,7 @@ export function editProvinces() { function exitAddProvinceMode() { customization = 0; - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); body.querySelectorAll("div > input, select, span, svg").forEach(e => (e.style.pointerEvents = "all")); if (provincesAdd.classList.contains("pressed")) provincesAdd.classList.remove("pressed"); diff --git a/src/modules/ui/regiment-editor.js b/src/modules/ui/regiment-editor.js index f74e67d2..ea267126 100644 --- a/src/modules/ui/regiment-editor.js +++ b/src/modules/ui/regiment-editor.js @@ -1,6 +1,6 @@ import * as d3 from "d3"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {findCell} from "utils/graphUtils"; import {last} from "utils/arrayUtils"; import {tip, clearMainTip} from "scripts/tooltips"; @@ -210,7 +210,7 @@ export function editRegiment(selector) { tip("Click on map to create new regiment or fleet", true); } else { clearMainTip(); - restoreDefaultEvents(); + setDefaultEventHandlers(); } } @@ -240,7 +240,7 @@ export function editRegiment(selector) { armies.selectAll(":scope > g").classed("draggable", false); } else { clearMainTip(); - restoreDefaultEvents(); + setDefaultEventHandlers(); armies.selectAll(":scope > g").classed("draggable", true); } } @@ -313,7 +313,7 @@ export function editRegiment(selector) { } else { clearMainTip(); armies.selectAll(":scope > g").classed("draggable", true); - restoreDefaultEvents(); + setDefaultEventHandlers(); } } @@ -453,7 +453,7 @@ export function editRegiment(selector) { document.getElementById("regimentAdd").classList.remove("pressed"); document.getElementById("regimentAttack").classList.remove("pressed"); document.getElementById("regimentAttach").classList.remove("pressed"); - restoreDefaultEvents(); + setDefaultEventHandlers(); elSelected = null; } } diff --git a/src/modules/ui/regiments-overview.js b/src/modules/ui/regiments-overview.js index da0dec85..38370661 100644 --- a/src/modules/ui/regiments-overview.js +++ b/src/modules/ui/regiments-overview.js @@ -7,7 +7,7 @@ import {rn} from "utils/numberUtils"; import {capitalize} from "utils/stringUtils"; import {si} from "utils/unitUtils"; import {closeDialogs} from "dialogs/utils"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; let isLoaded = false; @@ -171,7 +171,7 @@ export function overviewRegiments(state) { if (regimentAdd.offsetParent) regimentAdd.classList.add("pressed"); } else { clearMainTip(); - restoreDefaultEvents(); + setDefaultEventHandlers(); addLines(); if (regimentAdd.offsetParent) regimentAdd.classList.remove("pressed"); } diff --git a/src/modules/ui/relief-editor.js b/src/modules/ui/relief-editor.js index b998b7cf..d2cc2646 100644 --- a/src/modules/ui/relief-editor.js +++ b/src/modules/ui/relief-editor.js @@ -1,6 +1,6 @@ import * as d3 from "d3"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {findCell} from "utils/graphUtils"; import {tip, showMainTip, clearMainTip} from "scripts/tooltips"; import {rn} from "utils/numberUtils"; @@ -92,7 +92,7 @@ export function editReliefIcon() { removeCircle(); updateReliefSizeInput(); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); } diff --git a/src/modules/ui/rivers-creator.js b/src/modules/ui/rivers-creator.js index b9a9041c..f93a9a75 100644 --- a/src/modules/ui/rivers-creator.js +++ b/src/modules/ui/rivers-creator.js @@ -1,6 +1,6 @@ import * as d3 from "d3"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {getPackPolygon, findCell} from "utils/graphUtils"; import {last} from "utils/arrayUtils"; import {tip, clearMainTip} from "scripts/tooltips"; @@ -140,7 +140,7 @@ export function createRiver() { function closeRiverCreator() { body.innerHTML = ""; debug.select("#controlCells").remove(); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); const forced = +document.getElementById("toggleCells").dataset.forced; diff --git a/src/modules/ui/routes-editor.js b/src/modules/ui/routes-editor.js index b2305d1f..47fc38cf 100644 --- a/src/modules/ui/routes-editor.js +++ b/src/modules/ui/routes-editor.js @@ -6,7 +6,7 @@ import {rn} from "utils/numberUtils"; import {getNextId} from "utils/nodeUtils"; import {round} from "utils/stringUtils"; import {closeDialogs} from "dialogs/utils"; -import {restoreDefaultEvents} from "../../scripts/events"; +import {setDefaultEventHandlers} from "../../scripts/events"; let isLoaded = false; @@ -279,7 +279,7 @@ export function editRoute(onClick) { elSelected.on("click", null); } else { clearMainTip(); - restoreDefaultEvents(); + setDefaultEventHandlers(); elSelected.on("click", addInterimControlPoint).attr("data-new", null); } } diff --git a/src/modules/ui/tools.js b/src/modules/ui/tools.js index c64c5a1a..19ca3949 100644 --- a/src/modules/ui/tools.js +++ b/src/modules/ui/tools.js @@ -5,7 +5,7 @@ import {closeDialogs} from "dialogs/utils"; import {renderLayer, toggleLayer, turnLayerButtonOn} from "layers"; import {unfog} from "modules/ui/editors"; import {aleaPRNG} from "scripts/aleaPRNG"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {prompt} from "scripts/prompt"; import {clearMainTip, tip} from "scripts/tooltips"; import {last} from "utils/arrayUtils"; @@ -465,7 +465,7 @@ function regenerateZones(event) { function unpressClickToAddButton() { addFeature.querySelectorAll("button.pressed").forEach(b => b.classList.remove("pressed")); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); } diff --git a/src/modules/ui/zones-editor.js b/src/modules/ui/zones-editor.js index e7cc9b5e..cb7f52a2 100644 --- a/src/modules/ui/zones-editor.js +++ b/src/modules/ui/zones-editor.js @@ -2,7 +2,7 @@ import * as d3 from "d3"; import {closeDialogs} from "dialogs/utils"; import {unfog} from "modules/ui/editors"; -import {restoreDefaultEvents} from "scripts/events"; +import {setDefaultEventHandlers} from "scripts/events"; import {clearMainTip, showMainTip, tip} from "scripts/tooltips"; import {unique} from "utils/arrayUtils"; import {findAll, findCell, getPackPolygon} from "utils/graphUtils"; @@ -329,7 +329,7 @@ export function editZones() { if (!close) $("#zonesEditor").dialog({position: {my: "right top", at: "right-10 top+10", of: "svg", collision: "fit"}}); - restoreDefaultEvents(); + setDefaultEventHandlers(); clearMainTip(); zones.selectAll("g").each(function () { this.removeAttribute("data-init"); diff --git a/src/scripts/events.ts b/src/scripts/events.ts deleted file mode 100644 index 9c443978..00000000 --- a/src/scripts/events.ts +++ /dev/null @@ -1,262 +0,0 @@ -import * as d3 from "d3"; - -import {openDialog} from "dialogs"; -import {layerIsOn} from "layers"; -// @ts-expect-error js module -import {clearLegend, dragLegendBox} from "modules/legend"; -// @ts-expect-error js module -import {updateCellInfo} from "modules/ui/cell-info"; -import {debounce} from "utils/functionUtils"; -import {findCell, findGridCell, isLand} from "utils/graphUtils"; -import {byId} from "utils/shorthands"; -import { - convertTemperature, - getBurgPopulation, - getCellIdPrecipitation, - getFriendlyHeight, - getCellPopulation, - getPopulationTip, - si -} from "utils/unitUtils"; -import {showMainTip, tip} from "./tooltips"; - -export function restoreDefaultEvents() { - window.Zoom.setZoomBehavior(); - viewbox - .style("cursor", "default") - .on(".drag", null) - .on("click", handleMapClick) - .on("touchmove mousemove", onMouseMove); - scaleBar.on("mousemove", () => tip("Click to open Units Editor")).on("click", () => openDialog("unitsEditor")); - legend - .on("mousemove", () => tip("Drag to change the position. Click to hide the legend")) - .on("click", clearLegend) - .call(d3.drag().on("start", dragLegendBox)); -} - -// on viewbox click event - run function based on target -function handleMapClick(this: d3.ContainerElement) { - const el: HTMLElement = d3.event.target; - if (!el?.parentElement?.parentElement?.parentElement) return; - - const parent = el.parentElement; - const grand = parent.parentElement!; - const great = grand.parentElement!; - const greatGreat = great.parentElement; - - const p = d3.mouse(this); - const i = findCell(p[0], p[1]); - - if (grand.id === "emblems" && defineEmblemData(el)) openDialog("emblemEditor", null, defineEmblemData(el)); - else if (parent.id === "rivers") editRiver(el.id); - else if (grand.id === "routes") editRoute(); - else if (el.tagName === "tspan" && greatGreat?.id === "labels") openDialog("labelEditor", null, {el}); - else if (grand.id === "burgLabels" || grand.id === "burgIcons") - openDialog("burgEditor", null, {id: +(el.dataset.id || 0)}); - else if (parent.id === "ice") openDialog("iceEditor"); - else if (parent.id === "terrain") editReliefIcon(); - else if (grand.id === "markers" || great.id === "markers") editMarker(); - else if (grand.id === "coastline") openDialog("coastlineEditor", null, {el}); - else if (great.id === "armies") editRegiment(); - else if (pack.cells.t[i] === 1) { - openDialog("coastlineEditor", null, {node: byId("island_" + pack.cells.f[i])}); - } else if (grand.id === "lakes") openDialog("lakeEditor", null, {el}); -} - -function defineEmblemData(el: HTMLElement) { - const i = +(el.dataset?.i || 0); - - type TEmblemType = "state" | "burg" | "province"; - type TEmblemTypeArray = IPack[`${TEmblemType}s`]; - - const emblemTypeMap: Dict<[TEmblemTypeArray, TEmblemType]> = { - burgEmblems: [pack.burgs, "burg"], - provinceEmblems: [pack.provinces, "province"], - stateEmblems: [pack.states, "state"] - }; - - const emblemType = el.parentElement?.id; - if (emblemType && emblemType in emblemTypeMap) { - const [data, type] = emblemTypeMap[emblemType]; - return {type, id: type + "COA" + i, el: data[i]}; - } - - return undefined; -} - -const onMouseMove = debounce(handleMouseMove, 100); -function handleMouseMove(this: d3.ContainerElement) { - const point = d3.mouse(this); - const i = findCell(point[0], point[1]); // pack cell id - if (i === undefined) return; - - showNotes(d3.event); - const gridCell = findGridCell(point[0], point[1], grid); - if (byId("tooltip")?.dataset.main) showMainTip(); - else showTooltipOnMapHover(point, d3.event, i, gridCell); - if (byId("cellInfo")?.offsetParent) updateCellInfo(point, i, gridCell); -} - -// show note box on hover (if any) -function showNotes(event: Event) { - if (byId("notesEditor")?.offsetParent) return; - - const el = event.target as SVGElement; - if (!el?.parentElement?.parentElement?.parentElement) return; - - const parent = el.parentElement; - const grand = parent.parentElement!; - - let id = el.id || parent.id || grand.id; - if (grand.id === "burgLabels") id = "burg" + el.dataset.id; - else if (grand.id === "burgIcons") id = "burg" + el.dataset.id; - - const note = notes.find(note => note.id === id); - if (note !== undefined && note.legend !== "") { - byId("notes")!.style.display = "block"; - byId("notesHeader")!.innerHTML = note.name; - byId("notesBody")!.innerHTML = note.legend; - } else if (!options.pinNotes && !byId("markerEditor")?.offsetParent) { - byId("notes")!.style.display = "none"; - byId("notesHeader")!.innerHTML = ""; - byId("notesBody")!.innerHTML = ""; - } -} - -// show viewbox tooltip if main tooltip is blank -function showTooltipOnMapHover(point: TPoint, event: Event, packCellId: number, gridCellId: number) { - tip(""); // clear tip - const path = event.composedPath() as HTMLElement[]; - if (!path[path.length - 8]) return; - - const group = path[path.length - 7].id; - const subgroup = path[path.length - 8].id; - - const element = event.target as HTMLElement; - const parent = element.parentElement!; - - const land = isLand(packCellId); - - // specific elements - if (group === "armies") return tip(parent.dataset.name + ". Click to edit"); - - if (group === "emblems" && element.tagName === "use") { - d3.select(element).raise(); - d3.select(parent).raise(); - - const emblemData = defineEmblemData(element); - if (!emblemData) return; - - const {type, el} = emblemData; - const name = ("fullName" in el && el.fullName) || el.name; - tip(`${name} ${type} emblem. Click to edit`); - return; - } - - if (group === "rivers") { - const riverId = +element.id.slice(5); - const river = pack.rivers.find(r => r.i === riverId); - const name = river ? `${river.name} ${river.type}` : ""; - tip(name + ". Click to edit"); - - const $riversOverview = byId("riversOverview")!; - if ($riversOverview?.offsetParent) highlightEditorLine($riversOverview, riverId, 5000); - return; - } - - if (group === "routes") return tip("Click to edit the Route"); - - if (group === "terrain") return tip("Click to edit the Relief Icon"); - - if (subgroup === "burgLabels" || subgroup === "burgIcons") { - const burgId = +(path[path.length - 10].dataset.id || 0); - const burg = pack.burgs[burgId]; - - const population = si(getBurgPopulation(burg.population)); - tip(`${burg.name}. Population: ${population}. Click to edit`); - - const $burgOverview = byId("burgOverview"); - if ($burgOverview?.offsetParent) highlightEditorLine($burgOverview, burgId, 5000); - return; - } - if (group === "labels") return tip("Click to edit the Label"); - - if (group === "markers") return tip("Click to edit the Marker and pin the marker note"); - - if (group === "ruler") { - const tag = element.tagName; - const className = element.getAttribute("class"); - if (tag === "circle" && className === "edge") - return tip("Drag to adjust. Hold Ctrl and drag to add a point. Click to remove the point"); - if (tag === "circle" && className === "control") - return tip("Drag to adjust. Hold Shift and drag to keep axial direction. Click to remove the point"); - if (tag === "circle") return tip("Drag to adjust the measurer"); - if (tag === "polyline") return tip("Click on drag to add a control point"); - if (tag === "path") return tip("Drag to move the measurer"); - if (tag === "text") return tip("Drag to move, click to remove the measurer"); - } - - if (subgroup === "burgIcons") return tip("Click to edit the Burg"); - - if (subgroup === "burgLabels") return tip("Click to edit the Burg"); - - if (group === "lakes" && !land) { - const lakeId = +element.dataset.f; - const name = pack.features[lakeId]?.name; - const fullName = subgroup === "freshwater" ? name : name + " " + subgroup; - tip(`${fullName} lake. Click to edit`); - return; - } - if (group === "coastline") return tip("Click to edit the coastline"); - - if (group === "zones") { - const zone = path[path.length - 8]; - tip(zone.dataset.description); - if (zonesEditor?.offsetParent) highlightEditorLine(zonesEditor, zone.id, 5000); - return; - } - - if (group === "ice") return tip("Click to edit the Ice"); - - // covering elements - if (layerIsOn("togglePrec") && land) tip("Annual Precipitation: " + getCellIdPrecipitation(packCellId)); - else if (layerIsOn("togglePopulation")) { - const [rural, urban] = getCellPopulation(packCellId); - tip(getPopulationTip("Cell population", rural, urban)); - } else if (layerIsOn("toggleTemp")) tip("Temperature: " + convertTemperature(grid.cells.temp[gridCellId])); - else if (layerIsOn("toggleBiomes") && pack.cells.biome[packCellId]) { - const biome = pack.cells.biome[packCellId]; - tip("Biome: " + biomesData.name[biome]); - if (biomesEditor?.offsetParent) highlightEditorLine(biomesEditor, biome); - } else if (layerIsOn("toggleReligions") && pack.cells.religion[packCellId]) { - const religion = pack.cells.religion[packCellId]; - const r = pack.religions[religion]; - const type = r.type === "Cult" || r.type == "Heresy" ? r.type : r.type + " religion"; - tip(type + ": " + r.name); - if (religionsEditor?.offsetParent) highlightEditorLine(religionsEditor, religion); - } else if (pack.cells.state[packCellId] && (layerIsOn("toggleProvinces") || layerIsOn("toggleStates"))) { - const state = pack.cells.state[packCellId]; - const stateName = pack.states[state].fullName; - const province = pack.cells.province[packCellId]; - const prov = province ? pack.provinces[province].fullName + ", " : ""; - tip(prov + stateName); - if (byId("statesEditor")?.offsetParent) highlightEditorLine(statesEditor, state); - if (byId("diplomacyEditor")?.offsetParent) highlightEditorLine(diplomacyEditor, state); - if (byId("militaryOverview")?.offsetParent) highlightEditorLine(militaryOverview, state); - if (byId("provincesEditor")?.offsetParent) highlightEditorLine(provincesEditor, province); - } else if (layerIsOn("toggleCultures") && pack.cells.culture[packCellId]) { - const culture = pack.cells.culture[packCellId]; - tip("Culture: " + pack.cultures[culture].name); - if (byId("culturesEditor")?.offsetParent) highlightEditorLine(culturesEditor, culture); - } else if (layerIsOn("toggleHeight")) tip("Height: " + getFriendlyHeight(point)); -} - -function highlightEditorLine($editor, id, timeout = 10000) { - Array.from($editor.getElementsByClassName("states hovered")).forEach(el => el.classList.remove("hovered")); // clear all hovered - const hovered = Array.from($editor.querySelectorAll("div")).find(el => el.dataset.id == id); - if (hovered) hovered.classList.add("hovered"); // add hovered class - if (timeout) - setTimeout(() => { - hovered && hovered.classList.remove("hovered"); - }, timeout); -} diff --git a/src/scripts/events/index.ts b/src/scripts/events/index.ts new file mode 100644 index 00000000..0ad46d8e --- /dev/null +++ b/src/scripts/events/index.ts @@ -0,0 +1,25 @@ +import * as d3 from "d3"; + +import {openDialog} from "dialogs"; +import {tip} from "scripts/tooltips"; +import {handleMapClick} from "./onclick"; +import {onMouseMove} from "./onhover"; +// @ts-expect-error js module +import {clearLegend, dragLegendBox} from "modules/legend"; + +export function setDefaultEventHandlers() { + window.Zoom.setZoomBehavior(); + + viewbox + .style("cursor", "default") + .on(".drag", null) + .on("click", handleMapClick) + .on("touchmove mousemove", onMouseMove); + + scaleBar.on("mousemove", () => tip("Click to open Units Editor")).on("click", () => openDialog("unitsEditor")); + + legend + .on("mousemove", () => tip("Drag to change the position. Click to hide the legend")) + .on("click", clearLegend) + .call(d3.drag().on("start", dragLegendBox)); +} diff --git a/src/scripts/events/onclick.ts b/src/scripts/events/onclick.ts new file mode 100644 index 00000000..4d86f35a --- /dev/null +++ b/src/scripts/events/onclick.ts @@ -0,0 +1,65 @@ +import * as d3 from "d3"; + +import {openDialog} from "dialogs"; +// @ts-expect-error js module +import {clearLegend, dragLegendBox} from "modules/legend"; +// @ts-expect-error js module +import {updateCellInfo} from "modules/ui/cell-info"; +import {findCell} from "utils/graphUtils"; +import {defineEmblemData} from "./utils"; + +const getClickedElement = ( + tagName: string, + parentId: string, + grandId: string, + greatId: string, + greatGrandId: string, + isCoastalCell: boolean +) => { + if (grandId === "emblems") return "emblem"; + if (parentId === "rivers") return "river"; + if (grandId === "routes") return "route"; + if (tagName === "tspan" && greatGrandId === "labels") return "label"; + if (grandId === "burgLabels" || grandId === "burgIcons") return "burg"; + if (parentId === "ice") return "ice"; + if (parentId === "terrain") return "reliefIcon"; + if (grandId === "markers" || greatId === "markers") return "marker"; + if (grandId === "coastline" || isCoastalCell) return "coastline"; + if (greatId === "armies") return "regiment"; + if (grandId === "lakes") return "lake"; + return null; +}; + +type ClickedElement = ReturnType