fix: if group is missing, recreate all labels or icons

This commit is contained in:
Azgaar 2026-01-09 22:50:58 +01:00
parent 753db70283
commit fa8fd58259
6 changed files with 44 additions and 48 deletions

View file

@ -8563,7 +8563,7 @@
<script defer src="libs/rgbquant.min.js"></script> <script defer src="libs/rgbquant.min.js"></script>
<script defer src="libs/jquery.ui.touch-punch.min.js"></script> <script defer src="libs/jquery.ui.touch-punch.min.js"></script>
<script defer src="modules/io/save.js?v=1.107.4"></script> <script defer src="modules/io/save.js?v=1.107.4"></script>
<script defer src="modules/io/load.js?v=1.109.3"></script> <script defer src="modules/io/load.js?v=1.109.4"></script>
<script defer src="modules/io/cloud.js?v=1.106.0"></script> <script defer src="modules/io/cloud.js?v=1.106.0"></script>
<script defer src="modules/io/export.js?v=1.108.13"></script> <script defer src="modules/io/export.js?v=1.108.13"></script>
@ -8576,8 +8576,8 @@
<script defer src="modules/renderers/draw-emblems.js?v=1.104.0"></script> <script defer src="modules/renderers/draw-emblems.js?v=1.104.0"></script>
<script defer src="modules/renderers/draw-military.js?v=1.108.5"></script> <script defer src="modules/renderers/draw-military.js?v=1.108.5"></script>
<script defer src="modules/renderers/draw-state-labels.js?v=1.108.1"></script> <script defer src="modules/renderers/draw-state-labels.js?v=1.108.1"></script>
<script defer src="modules/renderers/draw-burg-labels.js?v=1.108.1"></script> <script defer src="modules/renderers/draw-burg-labels.js?v=1.109.4"></script>
<script defer src="modules/renderers/draw-burg-icons.js?v=1.104.0"></script> <script defer src="modules/renderers/draw-burg-icons.js?v=1.109.4"></script>
<script defer src="modules/renderers/draw-relief-icons.js?v=1.108.4"></script> <script defer src="modules/renderers/draw-relief-icons.js?v=1.108.4"></script>
</body> </body>
</html> </html>

View file

@ -977,49 +977,40 @@ export function resolveVersionConflicts(mapVersion) {
// v1.109.0 added customizable burg groups and icons // v1.109.0 added customizable burg groups and icons
options.burgs = {groups: []}; options.burgs = {groups: []};
// default groups were 'cities' and 'towns' burgIcons.selectAll("circle, use").each(function () {
const iconGroups = burgIcons.selectAll("g"); const group = this.parentNode.id;
const citiesGroup = burgIcons.select("#cities"); const id = this.id.replace(/^burg/, "");
const townsGroup = burgIcons.select("#towns"); const burg = pack.burgs[id];
if (!iconGroups.size() || (iconGroups.size() === 2 && citiesGroup.size() && townsGroup.size())) { if (group && burg) burg.group = group;
// it looks the loaded map has old default groups });
options.burgs.groups = Burgs.getDefaultGroups();
} else {
burgIcons.selectAll("circle, use").each(function () {
const group = this.parentNode.id;
const id = this.id.replace(/^burg/, "");
const burg = pack.burgs[id];
if (group && burg) burg.group = group;
});
burgIcons.selectAll("g").each(function (_el, index) { burgIcons.selectAll("g").each(function (_el, index) {
const name = this.id; const name = this.id;
const isDefault = name === "towns"; const isDefault = name === "towns";
options.burgs.groups.push({name, active: true, order: index + 1, isDefault, preview: "watabou-city"}); options.burgs.groups.push({name, active: true, order: index + 1, isDefault, preview: "watabou-city"});
if (!this.dataset.icon) this.dataset.icon = "#icon-circle"; if (!this.dataset.icon) this.dataset.icon = "#icon-circle";
const size = Number(this.getAttribute("size") || 2) * 2; const size = Number(this.getAttribute("size") || 2) * 2;
this.removeAttribute("size"); this.removeAttribute("size");
this.setAttribute("font-size", size); this.setAttribute("font-size", size);
this.setAttribute("stroke-width", 1); this.setAttribute("stroke-width", 1);
}); });
if (options.burgs.groups.filter(g => g.isDefault).length === 0) { if (options.burgs.groups.filter(g => g.isDefault).length === 0) {
options.burgs.groups[0].isDefault = true; options.burgs.groups[0].isDefault = true;
}
anchors.selectAll("g").each(function () {
const size = Number(this.getAttribute("size") || 1);
this.removeAttribute("size");
this.setAttribute("font-size", size);
});
burgLabels.selectAll("g").each(function () {
if (!this.dataset.dy) this.dataset.dy = -0.4;
});
} }
anchors.selectAll("g").each(function () {
const size = Number(this.getAttribute("size") || 1);
this.removeAttribute("size");
this.setAttribute("font-size", size);
});
burgLabels.selectAll("g").each(function () {
if (!this.dataset.dy) this.dataset.dy = -0.4;
});
const anchorSymbol = byId("icon-anchor"); const anchorSymbol = byId("icon-anchor");
if (anchorSymbol) { if (anchorSymbol) {
anchorSymbol.outerHTML = /* html */ `<symbol id="icon-anchor" viewBox="0 0 30 30" width="1em" height="1em" overflow="visible"> anchorSymbol.outerHTML = /* html */ `<symbol id="icon-anchor" viewBox="0 0 30 30" width="1em" height="1em" overflow="visible">

View file

@ -472,7 +472,7 @@ async function parseLoadedData(data, mapVersion) {
{ {
// dynamically import and run auto-update script // dynamically import and run auto-update script
const {resolveVersionConflicts} = await import("../dynamic/auto-update.js?v=1.109.3"); const {resolveVersionConflicts} = await import("../dynamic/auto-update.js?v=1.109.4");
resolveVersionConflicts(mapVersion); resolveVersionConflicts(mapVersion);
} }

View file

@ -31,11 +31,13 @@ function drawBurgIcons() {
} }
function drawBurgIcon(burg) { function drawBurgIcon(burg) {
removeBurgIcon(burg.i);
const iconGroup = burgIcons.select("#" + burg.group); const iconGroup = burgIcons.select("#" + burg.group);
if (iconGroup.empty()) return; if (iconGroup.empty()) {
drawBurgIcons();
return; // redraw all icons if group is missing
}
removeBurgIcon(burg.i);
const icon = iconGroup.attr("data-icon") || "#icon-circle"; const icon = iconGroup.attr("data-icon") || "#icon-circle";
burgIcons burgIcons
.select("#" + burg.group) .select("#" + burg.group)

View file

@ -33,13 +33,16 @@ function drawBurgLabels() {
} }
function drawBurgLabel(burg) { function drawBurgLabel(burg) {
removeBurgLabel(burg.i);
const labelGroup = burgLabels.select("#" + burg.group); const labelGroup = burgLabels.select("#" + burg.group);
if (labelGroup.empty()) return; if (labelGroup.empty()) {
drawBurgLabels();
return; // redraw all labels if group is missing
}
const dx = labelGroup.attr("data-dx") || 0; const dx = labelGroup.attr("data-dx") || 0;
const dy = labelGroup.attr("data-dy") || 0; const dy = labelGroup.attr("data-dy") || 0;
removeBurgLabel(burg.i);
labelGroup labelGroup
.append("text") .append("text")
.attr("text-rendering", "optimizeSpeed") .attr("text-rendering", "optimizeSpeed")

View file

@ -13,7 +13,7 @@
* Example: 1.102.2 -> Major version 1, Minor version 102, Patch version 2 * Example: 1.102.2 -> Major version 1, Minor version 102, Patch version 2
*/ */
const VERSION = "1.109.3"; const VERSION = "1.109.4";
if (parseMapVersion(VERSION) !== VERSION) alert("versioning.js: Invalid format or parsing function"); if (parseMapVersion(VERSION) !== VERSION) alert("versioning.js: Invalid format or parsing function");
{ {