From 0f47b84229c9b2f0023f5770c6df8e3ec1c321de Mon Sep 17 00:00:00 2001 From: pietervdvn Date: Thu, 27 Jan 2022 01:23:04 +0100 Subject: [PATCH] Remove 'language' as field from the layoutConfigJson as it is now calculated based on the title --- .../ThemeConfig/Conversion/LegacyJsonConvert.ts | 3 --- Models/ThemeConfig/Json/LayoutConfigJson.ts | 12 ++++-------- Models/ThemeConfig/LayerConfig.ts | 5 +++-- Models/ThemeConfig/LayoutConfig.ts | 15 +++++++-------- Models/ThemeConfig/PointRenderingConfig.ts | 9 +++++++-- UI/BigComponents/FilterView.ts | 11 +++++------ assets/themes/notes/notes.json | 11 ++++++----- assets/themes/toilets/toilets.json | 2 +- scripts/generateLayerOverview.ts | 6 ++++++ scripts/lint.ts | 2 +- test/Theme.spec.ts | 1 - 11 files changed, 40 insertions(+), 37 deletions(-) diff --git a/Models/ThemeConfig/Conversion/LegacyJsonConvert.ts b/Models/ThemeConfig/Conversion/LegacyJsonConvert.ts index c03b1b4d7f..7be672c92b 100644 --- a/Models/ThemeConfig/Conversion/LegacyJsonConvert.ts +++ b/Models/ThemeConfig/Conversion/LegacyJsonConvert.ts @@ -344,9 +344,6 @@ class ValidateTheme extends DesugaringStep { { // Legacy format checks if (this._isBuiltin) { - if (typeof json.language === "string") { - errors.push("The theme " + json.id + " has a string as language. Please use a list of strings") - } if (json["units"] !== undefined) { errors.push("The theme " + json.id + " has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) ") } diff --git a/Models/ThemeConfig/Json/LayoutConfigJson.ts b/Models/ThemeConfig/Json/LayoutConfigJson.ts index 79742b2fba..d3f5455812 100644 --- a/Models/ThemeConfig/Json/LayoutConfigJson.ts +++ b/Models/ThemeConfig/Json/LayoutConfigJson.ts @@ -41,20 +41,16 @@ export interface LayoutConfigJson { * Should be sortable, where the higher value is the later version */ version: string; - /** - * The supported language(s). - * This should be a two-letter, lowercase code which identifies the language, e.g. "en", "nl", ... - * If the theme supports multiple languages, use a list: `["en","nl","fr"]` to allow the user to pick any of them - */ - language: string | string[]; /** - * Only used in 'generateLayerOverview': if present, every translation will be checked to make sure it is fully translated + * Only used in 'generateLayerOverview': if present, every translation will be checked to make sure it is fully translated. + * + * This must be a list of two-letter, lowercase codes which identifies the language, e.g. "en", "nl", ... */ mustHaveLanguage?: string[] /** - * The title, as shown in the welcome message and the more-screen + * The title, as shown in the welcome message and the more-screen. */ title: string | any; diff --git a/Models/ThemeConfig/LayerConfig.ts b/Models/ThemeConfig/LayerConfig.ts index 065c0b74d5..eea16081bf 100644 --- a/Models/ThemeConfig/LayerConfig.ts +++ b/Models/ThemeConfig/LayerConfig.ts @@ -301,8 +301,9 @@ export default class LayerConfig extends WithContextLoader { if (mapRendering === undefined) { return undefined } - const defaultTags = new UIEventSource(TagUtils.changeAsProperties(this.source.osmTags.asChange({id: "node/-1"}))) - return mapRendering.GenerateLeafletStyle(defaultTags, false, {noSize: true}).html + const baseTags = TagUtils.changeAsProperties(this.source.osmTags.asChange({id: "node/-1"})) + return mapRendering.GenerateLeafletStyle(new UIEventSource(baseTags), false, + {noSize: true, includeBadges: false}).html } public GenerateDocumentation(usedInThemes: string[], layerIsNeededBy: Map, dependencies: { diff --git a/Models/ThemeConfig/LayoutConfig.ts b/Models/ThemeConfig/LayoutConfig.ts index 4fb8336124..389a690007 100644 --- a/Models/ThemeConfig/LayoutConfig.ts +++ b/Models/ThemeConfig/LayoutConfig.ts @@ -66,14 +66,13 @@ export default class LayoutConfig { this.maintainer = json.maintainer; this.credits = json.credits; this.version = json.version; - this.language = []; + this.language = Array.from(Object.keys(json.title)); - if (typeof json.language === "string") { - this.language = [json.language]; - } else { - this.language = json.language; - } { + if (typeof json.title === "string") { + console.error("The title is not a translation, it instead is ", json.title, "("+typeof json.title+")") + throw `The title of a theme should always be a translation, as it sets the corresponding languages (${context}.title)` + } if (this.language.length == 0) { throw `No languages defined. Define at least one language. (${context}.languages)` } @@ -120,7 +119,7 @@ export default class LayoutConfig { this.clustering = { maxZoom: 16, - minNeededElements: 25, + minNeededElements: 250, }; if (json.clustering === false) { this.clustering = { @@ -130,7 +129,7 @@ export default class LayoutConfig { } else if (json.clustering) { this.clustering = { maxZoom: json.clustering.maxZoom ?? 18, - minNeededElements: json.clustering.minNeededElements ?? 25, + minNeededElements: json.clustering.minNeededElements ?? 250, } } diff --git a/Models/ThemeConfig/PointRenderingConfig.ts b/Models/ThemeConfig/PointRenderingConfig.ts index ac957a985f..6ef8f5aa7e 100644 --- a/Models/ThemeConfig/PointRenderingConfig.ts +++ b/Models/ThemeConfig/PointRenderingConfig.ts @@ -150,7 +150,8 @@ export default class PointRenderingConfig extends WithContextLoader { tags: UIEventSource, clickable: boolean, options?: { - noSize: false | boolean + noSize: false | boolean, + includeBadges: true | boolean } ): { @@ -201,7 +202,11 @@ export default class PointRenderingConfig extends WithContextLoader { const icon = this.GetSimpleIcon(tags) - const iconAndBadges = new Combine([icon, this.GetBadges(tags)]) + let badges = undefined; + if( options?.includeBadges ?? true){ + badges = this.GetBadges(tags) + } + const iconAndBadges = new Combine([icon,badges ]) .SetClass("block relative") if (!options?.noSize) { diff --git a/UI/BigComponents/FilterView.ts b/UI/BigComponents/FilterView.ts index fe1ecec8e7..738bd9b00c 100644 --- a/UI/BigComponents/FilterView.ts +++ b/UI/BigComponents/FilterView.ts @@ -22,7 +22,8 @@ import {InputElement} from "../Input/InputElement"; import {DropDown} from "../Input/DropDown"; export default class FilterView extends VariableUiElement { - constructor(filteredLayer: UIEventSource, tileLayers: { config: TilesourceConfig, isDisplayed: UIEventSource }[]) { + constructor(filteredLayer: UIEventSource, + tileLayers: { config: TilesourceConfig, isDisplayed: UIEventSource }[]) { const backgroundSelector = new Toggle( new BackgroundSelector(), undefined, @@ -30,8 +31,11 @@ export default class FilterView extends VariableUiElement { ) super( filteredLayer.map((filteredLayers) => { + // Create the views which toggle layers (and filters them) ... let elements = filteredLayers?.map(l => FilterView.createOneFilteredLayerElement(l)) + // ... create views for non-interactive layers ... elements = elements.concat(tileLayers.map(tl => FilterView.createOverlayToggle(tl))) + // ... and add the dropdown to select a different background return elements.concat(backgroundSelector); } ) @@ -93,11 +97,6 @@ export default class FilterView extends VariableUiElement { iconStyle ); - if (filteredLayer.layerDef.name === undefined) { - return; - } - - const name: Translation = Translations.WT( filteredLayer.layerDef.name ); diff --git a/assets/themes/notes/notes.json b/assets/themes/notes/notes.json index b92bbbadc2..73b1e830e0 100644 --- a/assets/themes/notes/notes.json +++ b/assets/themes/notes/notes.json @@ -1,15 +1,16 @@ { "id": "notes", - "language": [ - "en" - ], "maintainer": "MapComplete", "startLat": 0, "startLon": 0, "startZoom": 0, - "title": "Notes on OpenStreetMap", + "title": { + "en": "Notes on OpenStreetMap" + }, "version": "0.1", - "description": "A note is a pin on the map with some text to indicate something wrong.

Make sure to checkout the filter view to search for users and text.", + "description": { + "en": "A note is a pin on the map with some text to indicate something wrong.

Make sure to checkout the filter view to search for users and text." + }, "icon": "./assets/svg/resolved.svg", "clustering": false, "enableDownload": true, diff --git a/assets/themes/toilets/toilets.json b/assets/themes/toilets/toilets.json index 7653ba81ba..e008133c11 100644 --- a/assets/themes/toilets/toilets.json +++ b/assets/themes/toilets/toilets.json @@ -14,7 +14,7 @@ "hu": "WC-térkép" }, "description": { - "en": "A map of public toilets", + "en": "OpenStreetMap has the biggest dataset of toilets. Worldwide, over 300.000 toilets are known in this map. And, best of all, if one is missing, you can easily add it yourself!

So, if you need to pee or poo, find a loo!", "de": "Eine Karte mit öffentlich zugänglichen Toiletten", "fr": "Carte affichant les WC et toilettes publiques", "nl": "Een kaart met openbare toiletten", diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts index 251a92f2d8..d293889ee0 100644 --- a/scripts/generateLayerOverview.ts +++ b/scripts/generateLayerOverview.ts @@ -196,4 +196,10 @@ class LayerOverviewUtils { } } +try{ new LayerOverviewUtils().main(process.argv) + +}catch(e){ + console.error("ERROR WHILE GENERATING THE LAYERS:", e) + console.log("If a weird error persists, 'npm run reset:layeroverview'") +} diff --git a/scripts/lint.ts b/scripts/lint.ts index c41ded14d8..4857af6cbe 100644 --- a/scripts/lint.ts +++ b/scripts/lint.ts @@ -1,6 +1,6 @@ import ScriptUtils from "./ScriptUtils"; import {writeFileSync} from "fs"; -import {FixLegacyTheme, UpdateLegacyLayer} from "../Models/ThemeConfig/LegacyJsonConvert"; +import {FixLegacyTheme, UpdateLegacyLayer} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert"; /* * This script reads all theme and layer files and reformats them inplace diff --git a/test/Theme.spec.ts b/test/Theme.spec.ts index ce005bbd1a..4cd428f06a 100644 --- a/test/Theme.spec.ts +++ b/test/Theme.spec.ts @@ -16,7 +16,6 @@ export default class ThemeSpec extends T { let themeConfigJson: LayoutConfigJson = { description: "Descr", icon: "", - language: ["en"], layers: [ { builtin: "public_bookcase",