forked from MapComplete/MapComplete
		
	Remove 'language' as field from the layoutConfigJson as it is now calculated based on the title
This commit is contained in:
		
							parent
							
								
									8b46a7e052
								
							
						
					
					
						commit
						0f47b84229
					
				
					 11 changed files with 40 additions and 37 deletions
				
			
		|  | @ -344,9 +344,6 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> { | ||||||
|         { |         { | ||||||
|             // Legacy format checks  
 |             // Legacy format checks  
 | ||||||
|             if (this._isBuiltin) { |             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) { |                 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': ... }) ") |                     errors.push("The theme " + json.id + " has units defined - these should be defined on the layer instead. (Hint: use overrideAll: { '+units': ... }) ") | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|  | @ -41,20 +41,16 @@ export interface LayoutConfigJson { | ||||||
|      * Should be sortable, where the higher value is the later version |      * Should be sortable, where the higher value is the later version | ||||||
|      */ |      */ | ||||||
|     version: string; |     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[] |     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; |     title: string | any; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -301,8 +301,9 @@ export default class LayerConfig extends WithContextLoader { | ||||||
|         if (mapRendering === undefined) { |         if (mapRendering === undefined) { | ||||||
|             return undefined |             return undefined | ||||||
|         } |         } | ||||||
|         const defaultTags = new UIEventSource(TagUtils.changeAsProperties(this.source.osmTags.asChange({id: "node/-1"}))) |         const baseTags = TagUtils.changeAsProperties(this.source.osmTags.asChange({id: "node/-1"})) | ||||||
|         return mapRendering.GenerateLeafletStyle(defaultTags, false, {noSize: true}).html |         return mapRendering.GenerateLeafletStyle(new UIEventSource(baseTags), false,  | ||||||
|  |             {noSize: true, includeBadges: false}).html | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public GenerateDocumentation(usedInThemes: string[], layerIsNeededBy: Map<string, string[]>, dependencies: { |     public GenerateDocumentation(usedInThemes: string[], layerIsNeededBy: Map<string, string[]>, dependencies: { | ||||||
|  |  | ||||||
|  | @ -66,14 +66,13 @@ export default class LayoutConfig { | ||||||
|         this.maintainer = json.maintainer; |         this.maintainer = json.maintainer; | ||||||
|         this.credits = json.credits; |         this.credits = json.credits; | ||||||
|         this.version = json.version; |         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) { |             if (this.language.length == 0) { | ||||||
|                 throw `No languages defined. Define at least one language. (${context}.languages)` |                 throw `No languages defined. Define at least one language. (${context}.languages)` | ||||||
|             } |             } | ||||||
|  | @ -120,7 +119,7 @@ export default class LayoutConfig { | ||||||
| 
 | 
 | ||||||
|         this.clustering = { |         this.clustering = { | ||||||
|             maxZoom: 16, |             maxZoom: 16, | ||||||
|             minNeededElements: 25, |             minNeededElements: 250, | ||||||
|         }; |         }; | ||||||
|         if (json.clustering === false) { |         if (json.clustering === false) { | ||||||
|             this.clustering = { |             this.clustering = { | ||||||
|  | @ -130,7 +129,7 @@ export default class LayoutConfig { | ||||||
|         } else if (json.clustering) { |         } else if (json.clustering) { | ||||||
|             this.clustering = { |             this.clustering = { | ||||||
|                 maxZoom: json.clustering.maxZoom ?? 18, |                 maxZoom: json.clustering.maxZoom ?? 18, | ||||||
|                 minNeededElements: json.clustering.minNeededElements ?? 25, |                 minNeededElements: json.clustering.minNeededElements ?? 250, | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -150,7 +150,8 @@ export default class PointRenderingConfig extends WithContextLoader { | ||||||
|         tags: UIEventSource<any>, |         tags: UIEventSource<any>, | ||||||
|         clickable: boolean, |         clickable: boolean, | ||||||
|         options?: { |         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 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") |             .SetClass("block relative") | ||||||
| 
 | 
 | ||||||
|         if (!options?.noSize) { |         if (!options?.noSize) { | ||||||
|  |  | ||||||
|  | @ -22,7 +22,8 @@ import {InputElement} from "../Input/InputElement"; | ||||||
| import {DropDown} from "../Input/DropDown"; | import {DropDown} from "../Input/DropDown"; | ||||||
| 
 | 
 | ||||||
| export default class FilterView extends VariableUiElement { | export default class FilterView extends VariableUiElement { | ||||||
|     constructor(filteredLayer: UIEventSource<FilteredLayer[]>, tileLayers: { config: TilesourceConfig, isDisplayed: UIEventSource<boolean> }[]) { |     constructor(filteredLayer: UIEventSource<FilteredLayer[]>,  | ||||||
|  |                 tileLayers: { config: TilesourceConfig, isDisplayed: UIEventSource<boolean> }[]) { | ||||||
|         const backgroundSelector = new Toggle( |         const backgroundSelector = new Toggle( | ||||||
|             new BackgroundSelector(), |             new BackgroundSelector(), | ||||||
|             undefined, |             undefined, | ||||||
|  | @ -30,8 +31,11 @@ export default class FilterView extends VariableUiElement { | ||||||
|         ) |         ) | ||||||
|         super( |         super( | ||||||
|             filteredLayer.map((filteredLayers) => { |             filteredLayer.map((filteredLayers) => { | ||||||
|  |                     // Create the views which toggle layers (and filters them) ...
 | ||||||
|                     let elements = filteredLayers?.map(l => FilterView.createOneFilteredLayerElement(l)) |                     let elements = filteredLayers?.map(l => FilterView.createOneFilteredLayerElement(l)) | ||||||
|  |                     // ... create views for non-interactive layers ...
 | ||||||
|                     elements = elements.concat(tileLayers.map(tl => FilterView.createOverlayToggle(tl))) |                     elements = elements.concat(tileLayers.map(tl => FilterView.createOverlayToggle(tl))) | ||||||
|  |                     // ... and add the dropdown to select a different background
 | ||||||
|                     return elements.concat(backgroundSelector); |                     return elements.concat(backgroundSelector); | ||||||
|                 } |                 } | ||||||
|             ) |             ) | ||||||
|  | @ -93,11 +97,6 @@ export default class FilterView extends VariableUiElement { | ||||||
|             iconStyle |             iconStyle | ||||||
|         ); |         ); | ||||||
| 
 | 
 | ||||||
|         if (filteredLayer.layerDef.name === undefined) { |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         const name: Translation = Translations.WT( |         const name: Translation = Translations.WT( | ||||||
|             filteredLayer.layerDef.name |             filteredLayer.layerDef.name | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|  | @ -1,15 +1,16 @@ | ||||||
| { | { | ||||||
|   "id": "notes", |   "id": "notes", | ||||||
|   "language": [ |  | ||||||
|     "en" |  | ||||||
|   ], |  | ||||||
|   "maintainer": "MapComplete", |   "maintainer": "MapComplete", | ||||||
|   "startLat": 0, |   "startLat": 0, | ||||||
|   "startLon": 0, |   "startLon": 0, | ||||||
|   "startZoom": 0, |   "startZoom": 0, | ||||||
|   "title": "Notes on OpenStreetMap", |   "title": { | ||||||
|  |     "en": "Notes on OpenStreetMap" | ||||||
|  |   }, | ||||||
|   "version": "0.1", |   "version": "0.1", | ||||||
|   "description": "A note is a pin on the map with some text to indicate something wrong.<br/><br/>Make sure to checkout the <a href='#filters'>filter view</a> to search for users and text.", |   "description": { | ||||||
|  |     "en": "A note is a pin on the map with some text to indicate something wrong.<br/><br/>Make sure to checkout the <a href='#filters'>filter view</a> to search for users and text." | ||||||
|  |   }, | ||||||
|   "icon": "./assets/svg/resolved.svg", |   "icon": "./assets/svg/resolved.svg", | ||||||
|   "clustering": false, |   "clustering": false, | ||||||
|   "enableDownload": true, |   "enableDownload": true, | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ | ||||||
|     "hu": "WC-térkép" |     "hu": "WC-térkép" | ||||||
|   }, |   }, | ||||||
|   "description": { |   "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! <br/><br/> So, if you need to pee or poo, find a loo!", | ||||||
|     "de": "Eine Karte mit öffentlich zugänglichen Toiletten", |     "de": "Eine Karte mit öffentlich zugänglichen Toiletten", | ||||||
|     "fr": "Carte affichant les WC et toilettes publiques", |     "fr": "Carte affichant les WC et toilettes publiques", | ||||||
|     "nl": "Een kaart met openbare toiletten", |     "nl": "Een kaart met openbare toiletten", | ||||||
|  |  | ||||||
|  | @ -196,4 +196,10 @@ class LayerOverviewUtils { | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | try{ | ||||||
| new LayerOverviewUtils().main(process.argv) | 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'") | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import ScriptUtils from "./ScriptUtils"; | import ScriptUtils from "./ScriptUtils"; | ||||||
| import {writeFileSync} from "fs"; | 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 |  * This script reads all theme and layer files and reformats them inplace | ||||||
|  |  | ||||||
|  | @ -16,7 +16,6 @@ export default class ThemeSpec extends T { | ||||||
|                 let themeConfigJson: LayoutConfigJson = { |                 let themeConfigJson: LayoutConfigJson = { | ||||||
|                     description: "Descr", |                     description: "Descr", | ||||||
|                     icon: "", |                     icon: "", | ||||||
|                     language: ["en"], |  | ||||||
|                     layers: [ |                     layers: [ | ||||||
|                         { |                         { | ||||||
|                             builtin: "public_bookcase", |                             builtin: "public_bookcase", | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue