diff --git a/InitUiElements.ts b/InitUiElements.ts index 7e63c59725..a21a8de798 100644 --- a/InitUiElements.ts +++ b/InitUiElements.ts @@ -508,7 +508,6 @@ export class InitUiElements { const initialized =new Set() - for (const overlayToggle of State.state.overlayToggles) { new ShowOverlayLayer(overlayToggle.config, state.leafletMap, overlayToggle.isDisplayed) initialized.add(overlayToggle.config) diff --git a/Models/ThemeConfig/Json/TilesourceConfigJson.ts b/Models/ThemeConfig/Json/TilesourceConfigJson.ts index 43e6f2d139..8780ed1ac8 100644 --- a/Models/ThemeConfig/Json/TilesourceConfigJson.ts +++ b/Models/ThemeConfig/Json/TilesourceConfigJson.ts @@ -3,12 +3,17 @@ */ export default interface TilesourceConfigJson { - + /** + * Id of this overlay, used in the URL-parameters to set the state + */ + id: string, /** * The path, where {x}, {y} and {z} will be substituted */ source: string, - + /** + * Wether or not this is an overlay. Default: true + */ isOverlay?: boolean, /** diff --git a/Models/ThemeConfig/LayerConfig.ts b/Models/ThemeConfig/LayerConfig.ts index 09f3f0fd25..28d8b13b46 100644 --- a/Models/ThemeConfig/LayerConfig.ts +++ b/Models/ThemeConfig/LayerConfig.ts @@ -254,7 +254,7 @@ export default class LayerConfig { )}`; } - return new TagRenderingConfig("questions", undefined); + return new TagRenderingConfig("questions", undefined, context); } if (renderingJson["override"] !== undefined) { diff --git a/Models/ThemeConfig/TilesourceConfig.ts b/Models/ThemeConfig/TilesourceConfig.ts index 2cb01e40e4..aed5b96040 100644 --- a/Models/ThemeConfig/TilesourceConfig.ts +++ b/Models/ThemeConfig/TilesourceConfig.ts @@ -4,6 +4,7 @@ import {Translation} from "../../UI/i18n/Translation"; export default class TilesourceConfig { public readonly source: string + public readonly id: string public readonly isOverlay: boolean public readonly name: Translation public readonly minzoom: number @@ -11,13 +12,16 @@ export default class TilesourceConfig { public readonly defaultState: boolean; constructor(config: TilesourceConfigJson, ctx: string = "") { - + this.id = config.id this.source = config.source; this.isOverlay = config.isOverlay ?? false; this.name = Translations.T(config.name) this.minzoom = config.minZoom ?? 0 this.maxzoom = config.maxZoom ?? 999 this.defaultState = config.defaultState ?? true; + if(this.id === undefined){ + throw "An id is obligated" + } if (this.minzoom > this.maxzoom) { throw "Invalid tilesourceConfig: minzoom should be smaller then maxzoom (at " + ctx + ")" } diff --git a/State.ts b/State.ts index 30485d6085..a040e54cfe 100644 --- a/State.ts +++ b/State.ts @@ -426,7 +426,7 @@ export default class State { this.overlayToggles = this.layoutToUse.tileLayerSources.filter(c => c.name !== undefined).map(c => ({ config: c, - isDisplayed: new UIEventSource(c.defaultState) + isDisplayed: QueryParameters.GetQueryParameter("overlay-"+c.id, ""+c.defaultState,"Wether or not the overlay "+c.id+" is shown").map(str => str === "true", [], b => ""+b) })) } diff --git a/UI/ExportPDF.ts b/UI/ExportPDF.ts index 074efc379a..d6711e493d 100644 --- a/UI/ExportPDF.ts +++ b/UI/ExportPDF.ts @@ -14,6 +14,7 @@ import LayoutConfig from "../Models/ThemeConfig/LayoutConfig"; import FeaturePipeline from "../Logic/FeatureSource/FeaturePipeline"; import ShowDataLayer from "./ShowDataLayer/ShowDataLayer"; import {BBox} from "../Logic/BBox"; +import ShowOverlayLayer from "./ShowDataLayer/ShowOverlayLayer"; /** * Creates screenshoter to take png screenshot * Creates jspdf and downloads it @@ -103,6 +104,19 @@ export default class ExportPDF { }) + const initialized =new Set() + for (const overlayToggle of State.state.overlayToggles) { + new ShowOverlayLayer(overlayToggle.config, minimap.leafletMap, overlayToggle.isDisplayed) + initialized.add(overlayToggle.config) + } + + for (const tileLayerSource of State.state.layoutToUse.tileLayerSources) { + if (initialized.has(tileLayerSource)) { + continue + } + new ShowOverlayLayer(tileLayerSource, minimap.leafletMap) + } + } private cleanup() { diff --git a/UI/Popup/FeatureInfoBox.ts b/UI/Popup/FeatureInfoBox.ts index 484a27ea22..155df8bdc0 100644 --- a/UI/Popup/FeatureInfoBox.ts +++ b/UI/Popup/FeatureInfoBox.ts @@ -133,7 +133,7 @@ export default class FeatureInfoBox extends ScrollableFullScreen { State.state.featureSwitchIsDebugging.map(isDebugging => { if (isDebugging) { const config: TagRenderingConfig = new TagRenderingConfig({render: "{all_tags()}"}, new Tag("id", ""), ""); - return new TagRenderingAnswer(tags, config) + return new TagRenderingAnswer(tags, config, "all_tags") } }) ) diff --git a/assets/themes/uk_addresses/uk_addresses.json b/assets/themes/uk_addresses/uk_addresses.json index d134c69dc8..2694fafd74 100644 --- a/assets/themes/uk_addresses/uk_addresses.json +++ b/assets/themes/uk_addresses/uk_addresses.json @@ -27,13 +27,14 @@ }, "tileLayerSources": [ { + "id": "property-boundaries", "source": "https://tiles.osmuk.org/PropertyBoundaries/{z}/{x}/{y}.png", "isOverlay": true, "minZoom": 18, "maxZoom": 20, "defaultState": false, "name": { - "en": "Parcel boundaries" + "en": "Property boundaries by osmuk.org" } } ], diff --git a/test/Tag.spec.ts b/test/Tag.spec.ts index d3ae8b9c65..833a7afc50 100644 --- a/test/Tag.spec.ts +++ b/test/Tag.spec.ts @@ -166,7 +166,7 @@ export default class TagSpec extends T { } ], condition: "x=" - }, undefined, ""); + }, undefined, "Tests"); equal(undefined, tr.GetRenderValue({"foo": "bar"})); equal("Has no name", tr.GetRenderValue({"noname": "yes"})?.txt);