forked from MapComplete/MapComplete
		
	Add some IDs and validation on IDS
This commit is contained in:
		
							parent
							
								
									4cb09ba8e7
								
							
						
					
					
						commit
						699e609fd7
					
				
					 6 changed files with 20 additions and 285 deletions
				
			
		| 
						 | 
				
			
			@ -8,7 +8,7 @@ export interface TagRenderingConfigJson {
 | 
			
		|||
 | 
			
		||||
    /**
 | 
			
		||||
     * The id of the tagrendering, should be an unique string.
 | 
			
		||||
     * Used to keep the translations in sync
 | 
			
		||||
     * Used to keep the translations in sync. Only used in the tagRenderings-array of a layerConfig, not requered otherwise
 | 
			
		||||
     */
 | 
			
		||||
    id?: string,
 | 
			
		||||
    
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -276,6 +276,13 @@ export default class LayerConfig {
 | 
			
		|||
 | 
			
		||||
        this.tagRenderings = trs(json.tagRenderings, false);
 | 
			
		||||
        
 | 
			
		||||
       const missingIds = json.tagRenderings.filter(tr => typeof tr !== "string" && tr["builtin"] === undefined && tr["id"] === undefined);
 | 
			
		||||
 | 
			
		||||
       if(missingIds.length > 0){
 | 
			
		||||
           console.error("Some tagRenderings of", this.id, "are missing an id:", missingIds)
 | 
			
		||||
           throw "Missing ids in tagrenderings"
 | 
			
		||||
       }
 | 
			
		||||
       
 | 
			
		||||
        this.filters = (json.filter ?? []).map((option, i) => {
 | 
			
		||||
            return new FilterConfig(option, `${context}.filter-[${i}]`)
 | 
			
		||||
        });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ import {Utils} from "../../Utils";
 | 
			
		|||
 */
 | 
			
		||||
export default class TagRenderingConfig {
 | 
			
		||||
 | 
			
		||||
    readonly id?: string;
 | 
			
		||||
    readonly id: string;
 | 
			
		||||
    readonly render?: Translation;
 | 
			
		||||
    readonly question?: Translation;
 | 
			
		||||
    readonly condition?: TagsFilter;
 | 
			
		||||
| 
						 | 
				
			
			@ -57,6 +57,7 @@ export default class TagRenderingConfig {
 | 
			
		|||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        this.id = json.id ?? "";
 | 
			
		||||
        this.render = Translations.T(json.render, context + ".render");
 | 
			
		||||
        this.question = Translations.T(json.question, context + ".question");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,6 +63,7 @@
 | 
			
		|||
      },
 | 
			
		||||
      "tagRenderings": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": "turbine-output",
 | 
			
		||||
          "render": {
 | 
			
		||||
            "en": "The power output of this wind turbine is {generator:output:electricity}.",
 | 
			
		||||
            "fr": "La puissance générée par cette éolienne est de {generator:output:electricity}."
 | 
			
		||||
| 
						 | 
				
			
			@ -77,6 +78,7 @@
 | 
			
		|||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": "turbine-operator",
 | 
			
		||||
          "render": {
 | 
			
		||||
            "en": "This wind turbine is operated by {operator}.",
 | 
			
		||||
            "fr": "Cette éolienne est opérée par {operator}."
 | 
			
		||||
| 
						 | 
				
			
			@ -90,6 +92,7 @@
 | 
			
		|||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": "turbine-height",
 | 
			
		||||
          "render": {
 | 
			
		||||
            "en": "The total height (including rotor radius) of this wind turbine is {height} metres.",
 | 
			
		||||
            "fr": "La hauteur totale, incluant les pales, est de {height} mètres."
 | 
			
		||||
| 
						 | 
				
			
			@ -104,6 +107,7 @@
 | 
			
		|||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": "turbine-diameter",
 | 
			
		||||
          "render": {
 | 
			
		||||
            "en": "The rotor diameter of this wind turbine is {rotor:diameter} metres.",
 | 
			
		||||
            "fr": "Le diamètre du rotor est de {rotor:diameter} mètres."
 | 
			
		||||
| 
						 | 
				
			
			@ -118,6 +122,7 @@
 | 
			
		|||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": "turbine-start-date",
 | 
			
		||||
          "render": {
 | 
			
		||||
            "en": "This wind turbine went into operation on/in {start_date}.",
 | 
			
		||||
            "fr": "L’éolienne est active depuis {start_date}."
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -166,11 +166,13 @@
 | 
			
		|||
      },
 | 
			
		||||
      "tagRenderings": [
 | 
			
		||||
        {
 | 
			
		||||
          "id": "walk-length",
 | 
			
		||||
          "render": {
 | 
			
		||||
            "nl": "Deze wandeling is <b>{_length:km}km</b> lang"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id":"walk-type",
 | 
			
		||||
          "mappings": [
 | 
			
		||||
            {
 | 
			
		||||
              "if": "route=iwn",
 | 
			
		||||
| 
						 | 
				
			
			@ -199,6 +201,7 @@
 | 
			
		|||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": "walk-description",
 | 
			
		||||
          "render": {
 | 
			
		||||
            "nl": "<h3>Korte beschrijving:</h3>{description}"
 | 
			
		||||
          },
 | 
			
		||||
| 
						 | 
				
			
			@ -209,6 +212,7 @@
 | 
			
		|||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": "walk-operator",
 | 
			
		||||
          "question": {
 | 
			
		||||
            "nl": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?"
 | 
			
		||||
          },
 | 
			
		||||
| 
						 | 
				
			
			@ -218,6 +222,7 @@
 | 
			
		|||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "id": "walk-operator-email",
 | 
			
		||||
          "question": {
 | 
			
		||||
            "nl": "Naar wie kan men emailen bij problemen rond signalisatie?"
 | 
			
		||||
          },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,283 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
  "id": "speelplekken_temp",
 | 
			
		||||
  "title": {
 | 
			
		||||
    "nl": "Speelplekken in de Antwerpse Zuidrand"
 | 
			
		||||
  },
 | 
			
		||||
  "shortDescription": {
 | 
			
		||||
    "nl": "Speelplekken in de Antwerpse Zuidrand"
 | 
			
		||||
  },
 | 
			
		||||
  "description": {
 | 
			
		||||
    "nl": "Speelplekken in de Antwerpse Zuidrand. Een project van Provincie Antwerpen, in samenwerking met Createlli, Sportpret en OpenStreetMap België"
 | 
			
		||||
  },
 | 
			
		||||
  "language": [
 | 
			
		||||
    "nl"
 | 
			
		||||
  ],
 | 
			
		||||
  "maintainer": "MapComplete",
 | 
			
		||||
  "icon": "./assets/themes/speelplekken/logo.svg",
 | 
			
		||||
  "hideFromOverview": true,
 | 
			
		||||
  "lockLocation": true,
 | 
			
		||||
  "version": "0",
 | 
			
		||||
  "startLat": 51.17174,
 | 
			
		||||
  "startLon": 4.449462,
 | 
			
		||||
  "startZoom": 12,
 | 
			
		||||
  "widenFactor": 0.05,
 | 
			
		||||
  "socialImage": "",
 | 
			
		||||
  "defaultBackgroundId": "CartoDB.Positron",
 | 
			
		||||
  "layers": [
 | 
			
		||||
    {
 | 
			
		||||
      "builtin": "play_forest",
 | 
			
		||||
      "override": {
 | 
			
		||||
        "source": {
 | 
			
		||||
          "geoJson": "https://pietervdvn.github.io/speelplekken_cache/speelplekken_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJsonZoomLevel": 14,
 | 
			
		||||
          "isOsmCache": true
 | 
			
		||||
        },
 | 
			
		||||
        "icon": "./assets/themes/speelplekken/speelbos.svg",
 | 
			
		||||
        "minzoom": 12
 | 
			
		||||
      },
 | 
			
		||||
      "calculatedTags": [
 | 
			
		||||
        "_is_shadowed=feat.overlapWith('shadow').length > 0 ? 'yes': ''"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "builtin": "playground",
 | 
			
		||||
      "override": {
 | 
			
		||||
        "icon": "./assets/themes/speelplekken/speeltuin.svg",
 | 
			
		||||
        "minzoom": 14,
 | 
			
		||||
        "source": {
 | 
			
		||||
          "geoJsonLocal": "http://127.0.0.1:8080/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJson": "https://pietervdvn.github.io/speelplekken_cache/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJsonZoomLevel": 14,
 | 
			
		||||
          "isOsmCache": true
 | 
			
		||||
        },
 | 
			
		||||
        "calculatedTags": [
 | 
			
		||||
          "_is_shadowed=feat.overlapWith('shadow').length > 0 ? 'yes': ''"
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "builtin": "village_green",
 | 
			
		||||
      "override": {
 | 
			
		||||
        "icon": "./assets/themes/speelplekken/speelweide.svg",
 | 
			
		||||
        "minzoom": 14,
 | 
			
		||||
        "source": {
 | 
			
		||||
          "geoJsonLocal": "http://127.0.0.1:8080/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJson": "https://pietervdvn.github.io/speelplekken_cache/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJsonZoomLevel": 14,
 | 
			
		||||
          "isOsmCache": true
 | 
			
		||||
        },
 | 
			
		||||
        "calculatedTags": [
 | 
			
		||||
          "_is_shadowed=feat.overlapWith('shadow').length > 0 ? 'yes': ''"
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "builtin": "grass_in_parks",
 | 
			
		||||
      "override": {
 | 
			
		||||
        "icon": "./assets/themes/speelplekken/speelweide.svg",
 | 
			
		||||
        "minzoom": 14,
 | 
			
		||||
        "source": {
 | 
			
		||||
          "geoJsonLocal": "http://127.0.0.1:8080/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJson": "https://pietervdvn.github.io/speelplekken_cache/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJsonZoomLevel": 14,
 | 
			
		||||
          "isOsmCache": true
 | 
			
		||||
        },
 | 
			
		||||
        "calculatedTags": [
 | 
			
		||||
          "_is_shadowed=feat.overlapWith('shadow').length > 0 ? 'yes': ''"
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "builtin": "sport_pitch",
 | 
			
		||||
      "override": {
 | 
			
		||||
        "minzoom": 15,
 | 
			
		||||
        "source": {
 | 
			
		||||
          "geoJsonLocal": "http://127.0.0.1:8080/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJson": "https://pietervdvn.github.io/speelplekken_cache/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJsonZoomLevel": 14,
 | 
			
		||||
          "isOsmCache": true
 | 
			
		||||
        },
 | 
			
		||||
        "calculatedTags": [
 | 
			
		||||
          "_is_shadowed=feat.overlapWith('shadow').length > 0 ? 'yes': ''"
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "builtin": "slow_roads",
 | 
			
		||||
      "override": {
 | 
			
		||||
        "+tagRenderings": [
 | 
			
		||||
          {
 | 
			
		||||
            "question": "Is dit een publiek toegankelijk pad?",
 | 
			
		||||
            "mappings": [
 | 
			
		||||
              {
 | 
			
		||||
                "if": "access=private",
 | 
			
		||||
                "then": "Dit is een privaat pad"
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "if": "access=no",
 | 
			
		||||
                "then": "Dit is een privaat pad",
 | 
			
		||||
                "hideInAnswer": true
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "if": "access=permissive",
 | 
			
		||||
                "then": "Dit pad is duidelijk in private eigendom, maar er hangen geen verbodsborden dus mag men erover"
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "calculatedTags": [
 | 
			
		||||
          "_part_of_walking_routes=Array.from(new Set(feat.memberships().map(r => \"<a href='#relation/\"+r.relation.id+\"'>\" + r.relation.tags.name + \"</a>\"))).join(', ')",
 | 
			
		||||
          "_is_shadowed=feat.overlapWith('shadow').length > 0 ? 'yes': ''"
 | 
			
		||||
        ],
 | 
			
		||||
        "minzoom": 18,
 | 
			
		||||
        "source": {
 | 
			
		||||
          "geoJsonLocal": "http://127.0.0.1:8080/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJson": "https://pietervdvn.github.io/speelplekken_cache/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
          "geoJsonZoomLevel": 14,
 | 
			
		||||
          "isOsmCache": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "walking_routes",
 | 
			
		||||
      "name": {
 | 
			
		||||
        "nl": "Wandelroutes van provincie Antwerpen"
 | 
			
		||||
      },
 | 
			
		||||
      "description": "Walking routes by 'provincie Antwerpen'",
 | 
			
		||||
      "source": {
 | 
			
		||||
        "osmTags": {
 | 
			
		||||
          "and": [
 | 
			
		||||
            "type=route",
 | 
			
		||||
            "route=foot",
 | 
			
		||||
            "operator~[pP]rovincie Antwerpen"
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        "geoJson": "https://pietervdvn.github.io/speelplekken_cache/speelplekken_{layer}_{z}_{x}_{y}.geojson",
 | 
			
		||||
        "geoJsonZoomLevel": 14,
 | 
			
		||||
        "isOsmCache": true
 | 
			
		||||
      },
 | 
			
		||||
      "title": {
 | 
			
		||||
        "render": "Wandeling <i>{name}</i>",
 | 
			
		||||
        "mappings": [
 | 
			
		||||
          {
 | 
			
		||||
            "if": "name~.*wandeling.*",
 | 
			
		||||
            "then": "{name}"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "tagRenderings": [
 | 
			
		||||
        {
 | 
			
		||||
          "render": {
 | 
			
		||||
            "nl": "Deze wandeling is <b>{_length:km}km</b> lang"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "mappings": [
 | 
			
		||||
            {
 | 
			
		||||
              "if": "route=iwn",
 | 
			
		||||
              "then": {
 | 
			
		||||
                "nl": "Dit is een internationale wandelroute"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "if": "route=nwn",
 | 
			
		||||
              "then": {
 | 
			
		||||
                "nl": "Dit is een nationale wandelroute"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "if": "route=rwn",
 | 
			
		||||
              "then": {
 | 
			
		||||
                "nl": "Dit is een regionale wandelroute"
 | 
			
		||||
              }
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
              "if": "route=lwn",
 | 
			
		||||
              "then": {
 | 
			
		||||
                "nl": "Dit is een lokale wandelroute"
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "render": {
 | 
			
		||||
            "nl": "<h3>Korte beschrijving:</h3>{description}"
 | 
			
		||||
          },
 | 
			
		||||
          "question": "Geef een korte beschrijving van de wandeling (max 255 tekens)",
 | 
			
		||||
          "freeform": {
 | 
			
		||||
            "key": "description",
 | 
			
		||||
            "type": "text"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "question": {
 | 
			
		||||
            "nl": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?"
 | 
			
		||||
          },
 | 
			
		||||
          "render": "Signalisatie geplaatst door {operator}",
 | 
			
		||||
          "freeform": {
 | 
			
		||||
            "key": "operator"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "question": {
 | 
			
		||||
            "nl": "Naar wie kan men emailen bij problemen rond signalisatie?"
 | 
			
		||||
          },
 | 
			
		||||
          "render": {
 | 
			
		||||
            "nl": "Bij problemen met signalisatie kan men emailen naar <a href='mailto:{operator:email}'>{operator:email}</a>"
 | 
			
		||||
          },
 | 
			
		||||
          "freeform": {
 | 
			
		||||
            "key": "operator:email",
 | 
			
		||||
            "type": "email"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "questions",
 | 
			
		||||
        "reviews"
 | 
			
		||||
      ],
 | 
			
		||||
      "color": {
 | 
			
		||||
        "render": "#6d6",
 | 
			
		||||
        "mappings": [
 | 
			
		||||
          {
 | 
			
		||||
            "if": "color~*",
 | 
			
		||||
            "then": "{color}"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "if": "colour~*",
 | 
			
		||||
            "then": "{colour}"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "width": {
 | 
			
		||||
        "render": "9"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "clustering": {
 | 
			
		||||
    "maxZoom": 16,
 | 
			
		||||
    "minNeededElements": 100
 | 
			
		||||
  },
 | 
			
		||||
  "roamingRenderings": [
 | 
			
		||||
    {
 | 
			
		||||
      "render": "Maakt deel uit van {_part_of_walking_routes}",
 | 
			
		||||
      "condition": "_part_of_walking_routes~*"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "render": "<a href='{video}' target='blank'>Een kinder-reportage vinden jullie hier<a/>",
 | 
			
		||||
      "freeform": {
 | 
			
		||||
        "key": "video",
 | 
			
		||||
        "type": "url"
 | 
			
		||||
      },
 | 
			
		||||
      "question": "Wat is de link naar de video-reportage?"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "overrideAll": {
 | 
			
		||||
    "isShown": {
 | 
			
		||||
      "render": "yes",
 | 
			
		||||
      "mappings": [
 | 
			
		||||
        {
 | 
			
		||||
          "if": "_is_shadowed=yes",
 | 
			
		||||
          "then": "no"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue