forked from MapComplete/MapComplete
		
	Studio: further documenting the format
This commit is contained in:
		
							parent
							
								
									f18a2b9184
								
							
						
					
					
						commit
						e8c84a70b1
					
				
					 14 changed files with 314 additions and 144 deletions
				
			
		|  | @ -51,23 +51,23 @@ | ||||||
|           "type": "object", |           "type": "object", | ||||||
|           "properties": { |           "properties": { | ||||||
|             "geoJson": { |             "geoJson": { | ||||||
|               "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |               "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|               "type": "string" |               "type": "string" | ||||||
|             }, |             }, | ||||||
|             "geoJsonZoomLevel": { |             "geoJsonZoomLevel": { | ||||||
|               "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |               "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|               "type": "number" |               "type": "number" | ||||||
|             }, |             }, | ||||||
|             "isOsmCache": { |             "isOsmCache": { | ||||||
|               "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |               "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|               "type": "boolean" |               "type": "boolean" | ||||||
|             }, |             }, | ||||||
|             "mercatorCrs": { |             "mercatorCrs": { | ||||||
|               "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |               "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|               "type": "boolean" |               "type": "boolean" | ||||||
|             }, |             }, | ||||||
|             "idKey": { |             "idKey": { | ||||||
|               "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |               "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|               "type": "string" |               "type": "string" | ||||||
|             } |             } | ||||||
|           }, |           }, | ||||||
|  | @ -206,7 +206,7 @@ | ||||||
|         "type": "object", |         "type": "object", | ||||||
|         "properties": { |         "properties": { | ||||||
|           "title": { |           "title": { | ||||||
|             "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add {value} here", |             "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add <b>{value}</b> here", | ||||||
|             "anyOf": [ |             "anyOf": [ | ||||||
|               { |               { | ||||||
|                 "$ref": "#/definitions/Record<string,string>" |                 "$ref": "#/definitions/Record<string,string>" | ||||||
|  | @ -1685,11 +1685,11 @@ | ||||||
|       "type": "object", |       "type": "object", | ||||||
|       "properties": { |       "properties": { | ||||||
|         "enableImproveAccuracy": { |         "enableImproveAccuracy": { | ||||||
|           "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |           "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|           "type": "boolean" |           "type": "boolean" | ||||||
|         }, |         }, | ||||||
|         "enableRelocation": { |         "enableRelocation": { | ||||||
|           "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |           "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|           "type": "boolean" |           "type": "boolean" | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|  |  | ||||||
|  | @ -51,23 +51,23 @@ export default { | ||||||
|           "type": "object", |           "type": "object", | ||||||
|           "properties": { |           "properties": { | ||||||
|             "geoJson": { |             "geoJson": { | ||||||
|               "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |               "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|               "type": "string" |               "type": "string" | ||||||
|             }, |             }, | ||||||
|             "geoJsonZoomLevel": { |             "geoJsonZoomLevel": { | ||||||
|               "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |               "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|               "type": "number" |               "type": "number" | ||||||
|             }, |             }, | ||||||
|             "isOsmCache": { |             "isOsmCache": { | ||||||
|               "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |               "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|               "type": "boolean" |               "type": "boolean" | ||||||
|             }, |             }, | ||||||
|             "mercatorCrs": { |             "mercatorCrs": { | ||||||
|               "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |               "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|               "type": "boolean" |               "type": "boolean" | ||||||
|             }, |             }, | ||||||
|             "idKey": { |             "idKey": { | ||||||
|               "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |               "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|               "type": "string" |               "type": "string" | ||||||
|             } |             } | ||||||
|           }, |           }, | ||||||
|  | @ -206,7 +206,7 @@ export default { | ||||||
|         "type": "object", |         "type": "object", | ||||||
|         "properties": { |         "properties": { | ||||||
|           "title": { |           "title": { | ||||||
|             "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add {value} here", |             "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add <b>{value}</b> here", | ||||||
|             "anyOf": [ |             "anyOf": [ | ||||||
|               { |               { | ||||||
|                 "$ref": "#/definitions/Record<string,string>" |                 "$ref": "#/definitions/Record<string,string>" | ||||||
|  | @ -1668,11 +1668,11 @@ export default { | ||||||
|       "type": "object", |       "type": "object", | ||||||
|       "properties": { |       "properties": { | ||||||
|         "enableImproveAccuracy": { |         "enableImproveAccuracy": { | ||||||
|           "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |           "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|           "type": "boolean" |           "type": "boolean" | ||||||
|         }, |         }, | ||||||
|         "enableRelocation": { |         "enableRelocation": { | ||||||
|           "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |           "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|           "type": "boolean" |           "type": "boolean" | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  | @ -1585,11 +1585,11 @@ | ||||||
|       "type": "object", |       "type": "object", | ||||||
|       "properties": { |       "properties": { | ||||||
|         "enableImproveAccuracy": { |         "enableImproveAccuracy": { | ||||||
|           "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |           "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|           "type": "boolean" |           "type": "boolean" | ||||||
|         }, |         }, | ||||||
|         "enableRelocation": { |         "enableRelocation": { | ||||||
|           "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |           "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|           "type": "boolean" |           "type": "boolean" | ||||||
|         } |         } | ||||||
|       }, |       }, | ||||||
|  | @ -1748,23 +1748,23 @@ | ||||||
|               "type": "object", |               "type": "object", | ||||||
|               "properties": { |               "properties": { | ||||||
|                 "geoJson": { |                 "geoJson": { | ||||||
|                   "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |                   "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|                   "type": "string" |                   "type": "string" | ||||||
|                 }, |                 }, | ||||||
|                 "geoJsonZoomLevel": { |                 "geoJsonZoomLevel": { | ||||||
|                   "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |                   "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|                   "type": "number" |                   "type": "number" | ||||||
|                 }, |                 }, | ||||||
|                 "isOsmCache": { |                 "isOsmCache": { | ||||||
|                   "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |                   "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|                   "type": "boolean" |                   "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
|                 "mercatorCrs": { |                 "mercatorCrs": { | ||||||
|                   "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |                   "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|                   "type": "boolean" |                   "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
|                 "idKey": { |                 "idKey": { | ||||||
|                   "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |                   "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|                   "type": "string" |                   "type": "string" | ||||||
|                 } |                 } | ||||||
|               }, |               }, | ||||||
|  | @ -1903,7 +1903,7 @@ | ||||||
|             "type": "object", |             "type": "object", | ||||||
|             "properties": { |             "properties": { | ||||||
|               "title": { |               "title": { | ||||||
|                 "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add {value} here", |                 "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add <b>{value}</b> here", | ||||||
|                 "anyOf": [ |                 "anyOf": [ | ||||||
|                   { |                   { | ||||||
|                     "$ref": "#/definitions/Record<string,string>" |                     "$ref": "#/definitions/Record<string,string>" | ||||||
|  | @ -2155,23 +2155,23 @@ | ||||||
|               "type": "object", |               "type": "object", | ||||||
|               "properties": { |               "properties": { | ||||||
|                 "geoJson": { |                 "geoJson": { | ||||||
|                   "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |                   "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|                   "type": "string" |                   "type": "string" | ||||||
|                 }, |                 }, | ||||||
|                 "geoJsonZoomLevel": { |                 "geoJsonZoomLevel": { | ||||||
|                   "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |                   "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|                   "type": "number" |                   "type": "number" | ||||||
|                 }, |                 }, | ||||||
|                 "isOsmCache": { |                 "isOsmCache": { | ||||||
|                   "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |                   "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|                   "type": "boolean" |                   "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
|                 "mercatorCrs": { |                 "mercatorCrs": { | ||||||
|                   "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |                   "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|                   "type": "boolean" |                   "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
|                 "idKey": { |                 "idKey": { | ||||||
|                   "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |                   "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|                   "type": "string" |                   "type": "string" | ||||||
|                 } |                 } | ||||||
|               }, |               }, | ||||||
|  | @ -2310,7 +2310,7 @@ | ||||||
|             "type": "object", |             "type": "object", | ||||||
|             "properties": { |             "properties": { | ||||||
|               "title": { |               "title": { | ||||||
|                 "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add {value} here", |                 "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add <b>{value}</b> here", | ||||||
|                 "anyOf": [ |                 "anyOf": [ | ||||||
|                   { |                   { | ||||||
|                     "$ref": "#/definitions/Record<string,string>" |                     "$ref": "#/definitions/Record<string,string>" | ||||||
|  |  | ||||||
|  | @ -1568,11 +1568,11 @@ export default { | ||||||
|       "type": "object", |       "type": "object", | ||||||
|       "properties": { |       "properties": { | ||||||
|         "enableImproveAccuracy": { |         "enableImproveAccuracy": { | ||||||
|           "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |           "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|           "type": "boolean" |           "type": "boolean" | ||||||
|         }, |         }, | ||||||
|         "enableRelocation": { |         "enableRelocation": { | ||||||
|           "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |           "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|           "type": "boolean" |           "type": "boolean" | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  | @ -1727,23 +1727,23 @@ export default { | ||||||
|               "type": "object", |               "type": "object", | ||||||
|               "properties": { |               "properties": { | ||||||
|                 "geoJson": { |                 "geoJson": { | ||||||
|                   "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |                   "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|                   "type": "string" |                   "type": "string" | ||||||
|                 }, |                 }, | ||||||
|                 "geoJsonZoomLevel": { |                 "geoJsonZoomLevel": { | ||||||
|                   "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |                   "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|                   "type": "number" |                   "type": "number" | ||||||
|                 }, |                 }, | ||||||
|                 "isOsmCache": { |                 "isOsmCache": { | ||||||
|                   "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |                   "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|                   "type": "boolean" |                   "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
|                 "mercatorCrs": { |                 "mercatorCrs": { | ||||||
|                   "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |                   "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|                   "type": "boolean" |                   "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
|                 "idKey": { |                 "idKey": { | ||||||
|                   "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |                   "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|                   "type": "string" |                   "type": "string" | ||||||
|                 } |                 } | ||||||
|               }, |               }, | ||||||
|  | @ -1882,7 +1882,7 @@ export default { | ||||||
|             "type": "object", |             "type": "object", | ||||||
|             "properties": { |             "properties": { | ||||||
|               "title": { |               "title": { | ||||||
|                 "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add {value} here", |                 "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add <b>{value}</b> here", | ||||||
|                 "anyOf": [ |                 "anyOf": [ | ||||||
|                   { |                   { | ||||||
|                     "$ref": "#/definitions/Record<string,string>" |                     "$ref": "#/definitions/Record<string,string>" | ||||||
|  | @ -2133,23 +2133,23 @@ export default { | ||||||
|               "type": "object", |               "type": "object", | ||||||
|               "properties": { |               "properties": { | ||||||
|                 "geoJson": { |                 "geoJson": { | ||||||
|                   "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |                   "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|                   "type": "string" |                   "type": "string" | ||||||
|                 }, |                 }, | ||||||
|                 "geoJsonZoomLevel": { |                 "geoJsonZoomLevel": { | ||||||
|                   "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |                   "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|                   "type": "number" |                   "type": "number" | ||||||
|                 }, |                 }, | ||||||
|                 "isOsmCache": { |                 "isOsmCache": { | ||||||
|                   "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |                   "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|                   "type": "boolean" |                   "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
|                 "mercatorCrs": { |                 "mercatorCrs": { | ||||||
|                   "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |                   "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|                   "type": "boolean" |                   "type": "boolean" | ||||||
|                 }, |                 }, | ||||||
|                 "idKey": { |                 "idKey": { | ||||||
|                   "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |                   "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|                   "type": "string" |                   "type": "string" | ||||||
|                 } |                 } | ||||||
|               }, |               }, | ||||||
|  | @ -2288,7 +2288,7 @@ export default { | ||||||
|             "type": "object", |             "type": "object", | ||||||
|             "properties": { |             "properties": { | ||||||
|               "title": { |               "title": { | ||||||
|                 "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add {value} here", |                 "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add <b>{value}</b> here", | ||||||
|                 "anyOf": [ |                 "anyOf": [ | ||||||
|                   { |                   { | ||||||
|                     "$ref": "#/definitions/Record<string,string>" |                     "$ref": "#/definitions/Record<string,string>" | ||||||
|  |  | ||||||
|  | @ -2,11 +2,11 @@ | ||||||
|   "type": "object", |   "type": "object", | ||||||
|   "properties": { |   "properties": { | ||||||
|     "enableImproveAccuracy": { |     "enableImproveAccuracy": { | ||||||
|       "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |       "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|       "type": "boolean" |       "type": "boolean" | ||||||
|     }, |     }, | ||||||
|     "enableRelocation": { |     "enableRelocation": { | ||||||
|       "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |       "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|       "type": "boolean" |       "type": "boolean" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|  | @ -2,11 +2,11 @@ export default { | ||||||
|   "type": "object", |   "type": "object", | ||||||
|   "properties": { |   "properties": { | ||||||
|     "enableImproveAccuracy": { |     "enableImproveAccuracy": { | ||||||
|       "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |       "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|       "type": "boolean" |       "type": "boolean" | ||||||
|     }, |     }, | ||||||
|     "enableRelocation": { |     "enableRelocation": { | ||||||
|       "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |       "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|       "type": "boolean" |       "type": "boolean" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  |  | ||||||
|  | @ -89,24 +89,43 @@ export interface LayerConfigJson { | ||||||
|                *  to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer |                *  to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer | ||||||
|                * |                * | ||||||
|                * Some API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max} |                * Some API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max} | ||||||
|  |                * | ||||||
|  |                * question: What is the URL of the geojson? | ||||||
|  |                * type: url | ||||||
|                */ |                */ | ||||||
|               geoJson: string |               geoJson: string | ||||||
|               /** |               /** | ||||||
|                * To load a tiled geojson layer, set the zoomlevel of the tiles |                * To load a tiled geojson layer, set the zoomlevel of the tiles | ||||||
|  |                * | ||||||
|  |                * question: If using a tiled geojson, what is the zoomlevel of the tiles? | ||||||
|  |                * ifunset: This is not a tiled geojson | ||||||
|                */ |                */ | ||||||
|               geoJsonZoomLevel?: number |               geoJsonZoomLevel?: number | ||||||
|               /** |               /** | ||||||
|                * Indicates that the upstream geojson data is OSM-derived. |                * Indicates that the upstream geojson data is OSM-derived. | ||||||
|                * Useful for e.g. merging or for scripts generating this cache |                * Useful for e.g. merging or for scripts generating this cache. | ||||||
|  |                * This also indicates that making changes on this data is possible | ||||||
|  |                * | ||||||
|  |                * question: Is this geojson a cache of OpenStreetMap data? | ||||||
|  |                * ifunset: This is not an OpenStreetMap cache | ||||||
|  |                * iftrue: this is based on OpenStreetMap and can thus be edited | ||||||
|                */ |                */ | ||||||
|               isOsmCache?: boolean |               isOsmCache?: boolean | ||||||
|               /** |               /** | ||||||
|                * Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this |                * Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this | ||||||
|  |                * | ||||||
|  |                * question: Does this geojson use  EPSG:900913 instead of WGS84 as projection? | ||||||
|  |                * iftrue: This geojson uses EPSG:900913 instead of WGS84 | ||||||
|  |                * ifunset: This geojson uses WGS84 just like most geojson (default) | ||||||
|                */ |                */ | ||||||
|               mercatorCrs?: boolean |               mercatorCrs?: boolean | ||||||
|               /** |               /** | ||||||
|                * Some API's have an id-field, but give it a different name. |                * Some API's have an id-field, but give it a different name. | ||||||
|                * Setting this key will rename this field into 'id' |                * Setting this key will rename this field into 'id' | ||||||
|  |                * | ||||||
|  |                * ifunset: An id with key `id` will be assigned automatically if no attribute `id` is set | ||||||
|  |                * inline: This geojson uses <b>{value}</b> as attribute to set the id | ||||||
|  |                * question: What is the name of the attribute containing the ID of the object? | ||||||
|                */ |                */ | ||||||
|               idKey?: string |               idKey?: string | ||||||
|           } |           } | ||||||
|  | @ -292,7 +311,7 @@ export interface LayerConfigJson { | ||||||
|          * Do _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped! |          * Do _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped! | ||||||
|          * |          * | ||||||
|          * question: What is the word to describe this object? |          * question: What is the word to describe this object? | ||||||
|          * inline: Add {value} here |          * inline: Add <b>{value}</b> here | ||||||
|          */ |          */ | ||||||
|         title: string | Record<string, string> |         title: string | Record<string, string> | ||||||
|         /** |         /** | ||||||
|  | @ -335,7 +354,12 @@ export interface LayerConfigJson { | ||||||
|         snapToLayer?: string[] |         snapToLayer?: string[] | ||||||
| 
 | 
 | ||||||
|         /** |         /** | ||||||
|  |          * question: What is the maximum distance in the location-input that a point can be moved to be snapped to a way? | ||||||
|  |          * | ||||||
|  |          * inline: a point is snapped if the location input is at most <b>{value}m</b> away from an object | ||||||
|  |          * | ||||||
|          * If specified, a new point will only be snapped if it is within this range. |          * If specified, a new point will only be snapped if it is within this range. | ||||||
|  |          * If further away, it'll be placed in the center of the location input | ||||||
|          * Distance in meter |          * Distance in meter | ||||||
|          * |          * | ||||||
|          * Default: 10 |          * Default: 10 | ||||||
|  |  | ||||||
|  | @ -1,12 +1,21 @@ | ||||||
| export default interface MoveConfigJson { | export default interface MoveConfigJson { | ||||||
|     /** |     /** | ||||||
|      * One default reason to move a point is to improve accuracy. |      * | ||||||
|      * Set to false to disable this reason |      * question: Should moving this type of point to improve the accuracy be allowed? | ||||||
|  |      * iftrue: This point can be moved to improve the accuracy | ||||||
|  |      * ifunset: (default) This point can be moved to improve the accuracy | ||||||
|  |      * iffalse: This point cannot be moved to improve the accuracy | ||||||
|      */ |      */ | ||||||
|     enableImproveAccuracy?: true | boolean |     enableImproveAccuracy?: true | boolean | ||||||
|     /** |     /** | ||||||
|      * One default reason to move a point is because it has relocated |      * | ||||||
|      * Set to false to disable this reason |      * question: Should moving this type of point due to a relocation be allowed? | ||||||
|  |      * | ||||||
|  |      * This will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode` | ||||||
|  |      * | ||||||
|  |      * iftrue: This type of point can be moved due to a relocation (and will remove address information when this is done) | ||||||
|  |      * ifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done) | ||||||
|  |      * iffalse: This type of point cannot be moved due to a relocation | ||||||
|      */ |      */ | ||||||
|     enableRelocation?: true | boolean |     enableRelocation?: true | boolean | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
|     /** |     /** | ||||||
|      * Blacklist for the general area tab |      * Blacklist for the general area tab | ||||||
|      */ |      */ | ||||||
|     const regionBlacklist = ["hidden",undefined,"infobox", "tagrenderings","maprendering"] |     const regionBlacklist = ["hidden",undefined,"infobox", "tagrenderings","maprendering", "editing"] | ||||||
|     const allNames =  Utils.Dedup(layerSchema.map(meta => meta.hints.group)) |     const allNames =  Utils.Dedup(layerSchema.map(meta => meta.hints.group)) | ||||||
| 
 | 
 | ||||||
|     const perRegion: Record<string, ConfigMeta[]> = {} |     const perRegion: Record<string, ConfigMeta[]> = {} | ||||||
|  | @ -24,26 +24,27 @@ | ||||||
|         perRegion[region] = layerSchema.filter(meta => meta.hints.group === region) |         perRegion[region] = layerSchema.filter(meta => meta.hints.group === region) | ||||||
|     } |     } | ||||||
|      |      | ||||||
|     const baselayerRegions: string[] = ["Basic", "presets", "editing","filters","advanced","expert"] |     const baselayerRegions: string[] = ["Basic", "presets","filters","advanced","expert"] | ||||||
|     for (const baselayerRegion of baselayerRegions) { |     for (const baselayerRegion of baselayerRegions) { | ||||||
|         if(perRegion[baselayerRegion] === undefined){ |         if(perRegion[baselayerRegion] === undefined){ | ||||||
|             console.error("BaseLayerRegions in editLayer: no items have group '"+baselayerRegion+'"') |             console.error("BaseLayerRegions in editLayer: no items have group '"+baselayerRegion+'"') | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     const generalTabRegions : string[] = allNames.filter(r => regionBlacklist.indexOf(r) <0) |     const leftoverRegions : string[] = allNames.filter(r => regionBlacklist.indexOf(r) <0 && baselayerRegions.indexOf(r) <0 ) | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <h3>Edit layer</h3> | <h3>Edit layer</h3> | ||||||
| 
 | 
 | ||||||
| <div class="m4"> | <div class="m4"> | ||||||
|     {allNames} |     {allNames} | ||||||
| <TabbedGroup tab={new UIEventSource(0)}> | <TabbedGroup tab={new UIEventSource(1)}> | ||||||
|     <div slot="title0">General properties</div> |     <div slot="title0">General properties</div> | ||||||
|     <div class="flex flex-col" slot="content0"> |     <div class="flex flex-col" slot="content0"> | ||||||
|         {#each baselayerRegions as region} |         {#each baselayerRegions as region} | ||||||
|             <Region {state} configs={perRegion[region]} title={region}/> |             <Region {state} configs={perRegion[region]} title={region}/> | ||||||
|         {/each} |         {/each} | ||||||
|         {#each generalTabRegions as region} |          | ||||||
|  |         {#each leftoverRegions as region} | ||||||
|             <Region {state} configs={perRegion[region]} title={region}/> |             <Region {state} configs={perRegion[region]} title={region}/> | ||||||
|         {/each} |         {/each} | ||||||
|     </div> |     </div> | ||||||
|  | @ -52,6 +53,7 @@ | ||||||
|     <div slot="content1"> |     <div slot="content1"> | ||||||
|         <Region {state} configs={perRegion["infobox"]} title="Infobox"/> |         <Region {state} configs={perRegion["infobox"]} title="Infobox"/> | ||||||
|         <Region {state} configs={perRegion["tagrenderings"]} title="Infobox"/> |         <Region {state} configs={perRegion["tagrenderings"]} title="Infobox"/> | ||||||
|  |         <Region {state} configs={perRegion["editing"]} title="Other editing elements"/> | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     <div slot="title2">Rendering on the map</div> |     <div slot="title2">Rendering on the map</div> | ||||||
|  |  | ||||||
|  | @ -51,9 +51,9 @@ export default class EditLayerState { | ||||||
|         value: Store<any>, |         value: Store<any>, | ||||||
|         noInitialSync: boolean = false |         noInitialSync: boolean = false | ||||||
|     ): () => void { |     ): () => void { | ||||||
|         const unsync = value.addCallback((v) => this.update(path, v)) |         const unsync = value.addCallback((v) => this.setValueAt(path, v)) | ||||||
|         if (!noInitialSync) { |         if (!noInitialSync) { | ||||||
|             this.update(path, value.data) |             this.setValueAt(path, value.data) | ||||||
|         } |         } | ||||||
|         return unsync |         return unsync | ||||||
|     } |     } | ||||||
|  | @ -73,7 +73,7 @@ export default class EditLayerState { | ||||||
|         ) |         ) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private update(path: ReadonlyArray<string | number>, v: any) { |     public setValueAt(path: ReadonlyArray<string | number>, v: any) { | ||||||
|         { |         { | ||||||
|             let entry = this.configuration.data |             let entry = this.configuration.data | ||||||
|             for (let i = 0; i < path.length - 1; i++) { |             for (let i = 0; i < path.length - 1; i++) { | ||||||
|  |  | ||||||
|  | @ -1,17 +1,19 @@ | ||||||
| <script lang="ts"> | <script lang="ts"> | ||||||
| 
 | 
 | ||||||
|     import EditLayerState from "./EditLayerState"; |     import EditLayerState from "./EditLayerState"; | ||||||
|     import type {ConfigMeta} from "./configMeta"; |     import type { ConfigMeta } from "./configMeta"; | ||||||
|     import {UIEventSource} from "../../Logic/UIEventSource"; |     import { UIEventSource } from "../../Logic/UIEventSource"; | ||||||
|     import type { |     import type { | ||||||
|         QuestionableTagRenderingConfigJson |         QuestionableTagRenderingConfigJson | ||||||
|     } from "../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"; |     } from "../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"; | ||||||
|     import TagRenderingEditable from "../Popup/TagRendering/TagRenderingEditable.svelte"; |     import TagRenderingEditable from "../Popup/TagRendering/TagRenderingEditable.svelte"; | ||||||
|     import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"; |     import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"; | ||||||
|     import {onDestroy} from "svelte"; |     import { onDestroy } from "svelte"; | ||||||
|     import SchemaBasedInput from "./SchemaBasedInput.svelte"; |     import SchemaBasedInput from "./SchemaBasedInput.svelte"; | ||||||
|     import type {JsonSchemaType} from "./jsonSchema"; |     import type { JsonSchemaType } from "./jsonSchema"; | ||||||
|     import nmd from "nano-markdown" |     // @ts-ignore | ||||||
|  |     import nmd from "nano-markdown"; | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * If 'types' is defined: allow the user to pick one of the types to input. |      * If 'types' is defined: allow the user to pick one of the types to input. | ||||||
|      */ |      */ | ||||||
|  | @ -102,7 +104,13 @@ | ||||||
|     let chosenOption: number = defaultOption |     let chosenOption: number = defaultOption | ||||||
|     let subSchemas: ConfigMeta[] = [] |     let subSchemas: ConfigMeta[] = [] | ||||||
|     onDestroy(tags.addCallbackAndRun(tags => { |     onDestroy(tags.addCallbackAndRun(tags => { | ||||||
|  |         const oldOption = chosenOption | ||||||
|         chosenOption = tags["value"] ? Number(tags["value"]) : defaultOption |         chosenOption = tags["value"] ? Number(tags["value"]) : defaultOption | ||||||
|  |         if(chosenOption !== oldOption){ | ||||||
|  |             // Reset the values beneath | ||||||
|  |             subSchemas = [] | ||||||
|  |             state.setValueAt(path, undefined) | ||||||
|  |         } | ||||||
|         const type = schema.type[chosenOption] |         const type = schema.type[chosenOption] | ||||||
|         if (!type) { |         if (!type) { | ||||||
|             return |             return | ||||||
|  |  | ||||||
|  | @ -89,23 +89,23 @@ | ||||||
|         "type": "object", |         "type": "object", | ||||||
|         "properties": { |         "properties": { | ||||||
|           "geoJson": { |           "geoJson": { | ||||||
|             "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |             "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|             "type": "string" |             "type": "string" | ||||||
|           }, |           }, | ||||||
|           "geoJsonZoomLevel": { |           "geoJsonZoomLevel": { | ||||||
|             "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |             "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|             "type": "number" |             "type": "number" | ||||||
|           }, |           }, | ||||||
|           "isOsmCache": { |           "isOsmCache": { | ||||||
|             "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |             "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           }, |           }, | ||||||
|           "mercatorCrs": { |           "mercatorCrs": { | ||||||
|             "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |             "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           }, |           }, | ||||||
|           "idKey": { |           "idKey": { | ||||||
|             "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |             "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|             "type": "string" |             "type": "string" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|  | @ -176,9 +176,12 @@ | ||||||
|       "geoJson" |       "geoJson" | ||||||
|     ], |     ], | ||||||
|     "required": true, |     "required": true, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "typehint": "url", | ||||||
|  |       "question": "What is the URL of the geojson?" | ||||||
|  |     }, | ||||||
|     "type": "string", |     "type": "string", | ||||||
|     "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}" |     "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -186,9 +189,12 @@ | ||||||
|       "geoJsonZoomLevel" |       "geoJsonZoomLevel" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "If using a tiled geojson, what is the zoomlevel of the tiles?", | ||||||
|  |       "ifunset": "This is not a tiled geojson" | ||||||
|  |     }, | ||||||
|     "type": "number", |     "type": "number", | ||||||
|     "description": "To load a tiled geojson layer, set the zoomlevel of the tiles" |     "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -196,9 +202,13 @@ | ||||||
|       "isOsmCache" |       "isOsmCache" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Is this geojson a cache of OpenStreetMap data?", | ||||||
|  |       "iftrue": "this is based on OpenStreetMap and can thus be edited", | ||||||
|  |       "ifunset": "This is not an OpenStreetMap cache" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache" |     "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -206,9 +216,13 @@ | ||||||
|       "mercatorCrs" |       "mercatorCrs" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Does this geojson use  EPSG:900913 instead of WGS84 as projection?", | ||||||
|  |       "iftrue": "This geojson uses EPSG:900913 instead of WGS84", | ||||||
|  |       "ifunset": "This geojson uses WGS84 just like most geojson (default)" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this" |     "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -216,9 +230,13 @@ | ||||||
|       "idKey" |       "idKey" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "What is the name of the attribute containing the ID of the object?", | ||||||
|  |       "ifunset": "An id with key `id` will be assigned automatically if no attribute `id` is set", | ||||||
|  |       "inline": "This geojson uses <b>{value}</b> as attribute to set the id" | ||||||
|  |     }, | ||||||
|     "type": "string", |     "type": "string", | ||||||
|     "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'" |     "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -27767,7 +27785,7 @@ | ||||||
|     "required": true, |     "required": true, | ||||||
|     "hints": { |     "hints": { | ||||||
|       "question": "What is the word to describe this object?", |       "question": "What is the word to describe this object?", | ||||||
|       "inline": "Add {value} here" |       "inline": "Add <b>{value}</b> here" | ||||||
|     }, |     }, | ||||||
|     "type": [ |     "type": [ | ||||||
|       { |       { | ||||||
|  | @ -32540,11 +32558,11 @@ | ||||||
|         "type": "object", |         "type": "object", | ||||||
|         "properties": { |         "properties": { | ||||||
|           "enableImproveAccuracy": { |           "enableImproveAccuracy": { | ||||||
|             "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |             "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           }, |           }, | ||||||
|           "enableRelocation": { |           "enableRelocation": { | ||||||
|             "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |             "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|  | @ -32562,9 +32580,14 @@ | ||||||
|       "enableImproveAccuracy" |       "enableImproveAccuracy" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Should moving this type of point to improve the accuracy be allowed?", | ||||||
|  |       "iftrue": "This point can be moved to improve the accuracy", | ||||||
|  |       "iffalse": "This point cannot be moved to improve the accuracy", | ||||||
|  |       "ifunset": "(default) This point can be moved to improve the accuracy" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason" |     "description": "" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -32572,9 +32595,14 @@ | ||||||
|       "enableRelocation" |       "enableRelocation" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Should moving this type of point due to a relocation be allowed?", | ||||||
|  |       "iftrue": "This type of point can be moved due to a relocation (and will remove address information when this is done)", | ||||||
|  |       "iffalse": "This type of point cannot be moved due to a relocation", | ||||||
|  |       "ifunset": "(default) This type of point can be moved due to a relocation (and will remove address information when this is done)" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason" |     "description": "\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  |  | ||||||
|  | @ -252,23 +252,23 @@ | ||||||
|                 "type": "object", |                 "type": "object", | ||||||
|                 "properties": { |                 "properties": { | ||||||
|                   "geoJson": { |                   "geoJson": { | ||||||
|                     "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |                     "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|                     "type": "string" |                     "type": "string" | ||||||
|                   }, |                   }, | ||||||
|                   "geoJsonZoomLevel": { |                   "geoJsonZoomLevel": { | ||||||
|                     "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |                     "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|                     "type": "number" |                     "type": "number" | ||||||
|                   }, |                   }, | ||||||
|                   "isOsmCache": { |                   "isOsmCache": { | ||||||
|                     "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |                     "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|                     "type": "boolean" |                     "type": "boolean" | ||||||
|                   }, |                   }, | ||||||
|                   "mercatorCrs": { |                   "mercatorCrs": { | ||||||
|                     "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |                     "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|                     "type": "boolean" |                     "type": "boolean" | ||||||
|                   }, |                   }, | ||||||
|                   "idKey": { |                   "idKey": { | ||||||
|                     "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |                     "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|                     "type": "string" |                     "type": "string" | ||||||
|                   } |                   } | ||||||
|                 }, |                 }, | ||||||
|  | @ -407,7 +407,7 @@ | ||||||
|               "type": "object", |               "type": "object", | ||||||
|               "properties": { |               "properties": { | ||||||
|                 "title": { |                 "title": { | ||||||
|                   "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add {value} here", |                   "description": "The title - shown on the 'add-new'-button.\n\nThis should include the article of the noun, e.g. 'a hydrant', 'a bicycle pump'.\nThis text will be inserted into `Add {category} here`, becoming `Add a hydrant here`.\n\nDo _not_ indicate 'new': 'add a new shop here' is incorrect, as the shop might have existed forever, it could just be unmapped!\n\nquestion: What is the word to describe this object?\ninline: Add <b>{value}</b> here", | ||||||
|                   "anyOf": [ |                   "anyOf": [ | ||||||
|                     { |                     { | ||||||
|                       "$ref": "#/definitions/Record<string,string>" |                       "$ref": "#/definitions/Record<string,string>" | ||||||
|  | @ -809,11 +809,11 @@ | ||||||
|                 "type": "object", |                 "type": "object", | ||||||
|                 "properties": { |                 "properties": { | ||||||
|                   "enableImproveAccuracy": { |                   "enableImproveAccuracy": { | ||||||
|                     "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |                     "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|                     "type": "boolean" |                     "type": "boolean" | ||||||
|                   }, |                   }, | ||||||
|                   "enableRelocation": { |                   "enableRelocation": { | ||||||
|                     "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |                     "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|                     "type": "boolean" |                     "type": "boolean" | ||||||
|                   } |                   } | ||||||
|                 }, |                 }, | ||||||
|  | @ -994,23 +994,23 @@ | ||||||
|         "type": "object", |         "type": "object", | ||||||
|         "properties": { |         "properties": { | ||||||
|           "geoJson": { |           "geoJson": { | ||||||
|             "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |             "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|             "type": "string" |             "type": "string" | ||||||
|           }, |           }, | ||||||
|           "geoJsonZoomLevel": { |           "geoJsonZoomLevel": { | ||||||
|             "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |             "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|             "type": "number" |             "type": "number" | ||||||
|           }, |           }, | ||||||
|           "isOsmCache": { |           "isOsmCache": { | ||||||
|             "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |             "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           }, |           }, | ||||||
|           "mercatorCrs": { |           "mercatorCrs": { | ||||||
|             "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |             "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           }, |           }, | ||||||
|           "idKey": { |           "idKey": { | ||||||
|             "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |             "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|             "type": "string" |             "type": "string" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|  | @ -1084,9 +1084,12 @@ | ||||||
|       "geoJson" |       "geoJson" | ||||||
|     ], |     ], | ||||||
|     "required": true, |     "required": true, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "typehint": "url", | ||||||
|  |       "question": "What is the URL of the geojson?" | ||||||
|  |     }, | ||||||
|     "type": "string", |     "type": "string", | ||||||
|     "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}" |     "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -1095,9 +1098,12 @@ | ||||||
|       "geoJsonZoomLevel" |       "geoJsonZoomLevel" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "If using a tiled geojson, what is the zoomlevel of the tiles?", | ||||||
|  |       "ifunset": "This is not a tiled geojson" | ||||||
|  |     }, | ||||||
|     "type": "number", |     "type": "number", | ||||||
|     "description": "To load a tiled geojson layer, set the zoomlevel of the tiles" |     "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -1106,9 +1112,13 @@ | ||||||
|       "isOsmCache" |       "isOsmCache" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Is this geojson a cache of OpenStreetMap data?", | ||||||
|  |       "iftrue": "this is based on OpenStreetMap and can thus be edited", | ||||||
|  |       "ifunset": "This is not an OpenStreetMap cache" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache" |     "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -1117,9 +1127,13 @@ | ||||||
|       "mercatorCrs" |       "mercatorCrs" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Does this geojson use  EPSG:900913 instead of WGS84 as projection?", | ||||||
|  |       "iftrue": "This geojson uses EPSG:900913 instead of WGS84", | ||||||
|  |       "ifunset": "This geojson uses WGS84 just like most geojson (default)" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this" |     "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -1128,9 +1142,13 @@ | ||||||
|       "idKey" |       "idKey" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "What is the name of the attribute containing the ID of the object?", | ||||||
|  |       "ifunset": "An id with key `id` will be assigned automatically if no attribute `id` is set", | ||||||
|  |       "inline": "This geojson uses <b>{value}</b> as attribute to set the id" | ||||||
|  |     }, | ||||||
|     "type": "string", |     "type": "string", | ||||||
|     "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'" |     "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -29885,7 +29903,7 @@ | ||||||
|     "required": true, |     "required": true, | ||||||
|     "hints": { |     "hints": { | ||||||
|       "question": "What is the word to describe this object?", |       "question": "What is the word to describe this object?", | ||||||
|       "inline": "Add {value} here" |       "inline": "Add <b>{value}</b> here" | ||||||
|     }, |     }, | ||||||
|     "type": [ |     "type": [ | ||||||
|       { |       { | ||||||
|  | @ -34840,11 +34858,11 @@ | ||||||
|         "type": "object", |         "type": "object", | ||||||
|         "properties": { |         "properties": { | ||||||
|           "enableImproveAccuracy": { |           "enableImproveAccuracy": { | ||||||
|             "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |             "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           }, |           }, | ||||||
|           "enableRelocation": { |           "enableRelocation": { | ||||||
|             "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |             "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|  | @ -34863,9 +34881,14 @@ | ||||||
|       "enableImproveAccuracy" |       "enableImproveAccuracy" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Should moving this type of point to improve the accuracy be allowed?", | ||||||
|  |       "iftrue": "This point can be moved to improve the accuracy", | ||||||
|  |       "iffalse": "This point cannot be moved to improve the accuracy", | ||||||
|  |       "ifunset": "(default) This point can be moved to improve the accuracy" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason" |     "description": "" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -34874,9 +34897,14 @@ | ||||||
|       "enableRelocation" |       "enableRelocation" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Should moving this type of point due to a relocation be allowed?", | ||||||
|  |       "iftrue": "This type of point can be moved due to a relocation (and will remove address information when this is done)", | ||||||
|  |       "iffalse": "This type of point cannot be moved due to a relocation", | ||||||
|  |       "ifunset": "(default) This type of point can be moved due to a relocation (and will remove address information when this is done)" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason" |     "description": "\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -35204,23 +35232,23 @@ | ||||||
|         "type": "object", |         "type": "object", | ||||||
|         "properties": { |         "properties": { | ||||||
|           "geoJson": { |           "geoJson": { | ||||||
|             "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}", |             "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n\nquestion: What is the URL of the geojson?\ntype: url", | ||||||
|             "type": "string" |             "type": "string" | ||||||
|           }, |           }, | ||||||
|           "geoJsonZoomLevel": { |           "geoJsonZoomLevel": { | ||||||
|             "description": "To load a tiled geojson layer, set the zoomlevel of the tiles", |             "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n\nquestion: If using a tiled geojson, what is the zoomlevel of the tiles?\nifunset: This is not a tiled geojson", | ||||||
|             "type": "number" |             "type": "number" | ||||||
|           }, |           }, | ||||||
|           "isOsmCache": { |           "isOsmCache": { | ||||||
|             "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache", |             "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n\nquestion: Is this geojson a cache of OpenStreetMap data?\nifunset: This is not an OpenStreetMap cache\niftrue: this is based on OpenStreetMap and can thus be edited", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           }, |           }, | ||||||
|           "mercatorCrs": { |           "mercatorCrs": { | ||||||
|             "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this", |             "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n\nquestion: Does this geojson use  EPSG:900913 instead of WGS84 as projection?\niftrue: This geojson uses EPSG:900913 instead of WGS84\nifunset: This geojson uses WGS84 just like most geojson (default)", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           }, |           }, | ||||||
|           "idKey": { |           "idKey": { | ||||||
|             "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'", |             "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n\nifunset: An id with key `id` will be assigned automatically if no attribute `id` is set\ninline: This geojson uses <b>{value}</b> as attribute to set the id\nquestion: What is the name of the attribute containing the ID of the object?", | ||||||
|             "type": "string" |             "type": "string" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|  | @ -35297,9 +35325,12 @@ | ||||||
|       "geoJson" |       "geoJson" | ||||||
|     ], |     ], | ||||||
|     "required": true, |     "required": true, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "typehint": "url", | ||||||
|  |       "question": "What is the URL of the geojson?" | ||||||
|  |     }, | ||||||
|     "type": "string", |     "type": "string", | ||||||
|     "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}" |     "description": "The actual source of the data to load, if loaded via geojson.\n\n# A single geojson-file\nsource: {geoJson: \"https://my.source.net/some-geo-data.geojson\"}\n fetches a geojson from a third party source\n\n# A tiled geojson source\nsource: {geoJson: \"https://my.source.net/some-tile-geojson-{layer}-{z}-{x}-{y}.geojson\", geoJsonZoomLevel: 14}\n to use a tiled geojson source. The web server must offer multiple geojsons. {z}, {x} and {y} are substituted by the location; {layer} is substituted with the id of the loaded layer\n\nSome API's use a BBOX instead of a tile, this can be used by specifying {y_min}, {y_max}, {x_min} and {x_max}\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -35309,9 +35340,12 @@ | ||||||
|       "geoJsonZoomLevel" |       "geoJsonZoomLevel" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "If using a tiled geojson, what is the zoomlevel of the tiles?", | ||||||
|  |       "ifunset": "This is not a tiled geojson" | ||||||
|  |     }, | ||||||
|     "type": "number", |     "type": "number", | ||||||
|     "description": "To load a tiled geojson layer, set the zoomlevel of the tiles" |     "description": "To load a tiled geojson layer, set the zoomlevel of the tiles\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -35321,9 +35355,13 @@ | ||||||
|       "isOsmCache" |       "isOsmCache" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Is this geojson a cache of OpenStreetMap data?", | ||||||
|  |       "iftrue": "this is based on OpenStreetMap and can thus be edited", | ||||||
|  |       "ifunset": "This is not an OpenStreetMap cache" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache" |     "description": "Indicates that the upstream geojson data is OSM-derived.\nUseful for e.g. merging or for scripts generating this cache.\nThis also indicates that making changes on this data is possible\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -35333,9 +35371,13 @@ | ||||||
|       "mercatorCrs" |       "mercatorCrs" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Does this geojson use  EPSG:900913 instead of WGS84 as projection?", | ||||||
|  |       "iftrue": "This geojson uses EPSG:900913 instead of WGS84", | ||||||
|  |       "ifunset": "This geojson uses WGS84 just like most geojson (default)" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this" |     "description": "Some API's use a mercator-projection (EPSG:900913) instead of WGS84. Set the flag `mercatorCrs: true`  in the source for this\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -35345,9 +35387,13 @@ | ||||||
|       "idKey" |       "idKey" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "What is the name of the attribute containing the ID of the object?", | ||||||
|  |       "ifunset": "An id with key `id` will be assigned automatically if no attribute `id` is set", | ||||||
|  |       "inline": "This geojson uses <b>{value}</b> as attribute to set the id" | ||||||
|  |     }, | ||||||
|     "type": "string", |     "type": "string", | ||||||
|     "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'" |     "description": "Some API's have an id-field, but give it a different name.\nSetting this key will rename this field into 'id'\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -65308,7 +65354,7 @@ | ||||||
|     "required": true, |     "required": true, | ||||||
|     "hints": { |     "hints": { | ||||||
|       "question": "What is the word to describe this object?", |       "question": "What is the word to describe this object?", | ||||||
|       "inline": "Add {value} here" |       "inline": "Add <b>{value}</b> here" | ||||||
|     }, |     }, | ||||||
|     "type": [ |     "type": [ | ||||||
|       { |       { | ||||||
|  | @ -70445,11 +70491,11 @@ | ||||||
|         "type": "object", |         "type": "object", | ||||||
|         "properties": { |         "properties": { | ||||||
|           "enableImproveAccuracy": { |           "enableImproveAccuracy": { | ||||||
|             "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason", |             "description": "question: Should moving this type of point to improve the accuracy be allowed?\niftrue: This point can be moved to improve the accuracy\nifunset: (default) This point can be moved to improve the accuracy\niffalse: This point cannot be moved to improve the accuracy", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           }, |           }, | ||||||
|           "enableRelocation": { |           "enableRelocation": { | ||||||
|             "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason", |             "description": "question: Should moving this type of point due to a relocation be allowed?\n\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n\niftrue: This type of point can be moved due to a relocation (and will remove address information when this is done)\nifunset: (default) This type of point can be moved due to a relocation (and will remove address information when this is done)\niffalse: This type of point cannot be moved due to a relocation", | ||||||
|             "type": "boolean" |             "type": "boolean" | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|  | @ -70469,9 +70515,14 @@ | ||||||
|       "enableImproveAccuracy" |       "enableImproveAccuracy" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Should moving this type of point to improve the accuracy be allowed?", | ||||||
|  |       "iftrue": "This point can be moved to improve the accuracy", | ||||||
|  |       "iffalse": "This point cannot be moved to improve the accuracy", | ||||||
|  |       "ifunset": "(default) This point can be moved to improve the accuracy" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "One default reason to move a point is to improve accuracy.\nSet to false to disable this reason" |     "description": "" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  | @ -70481,9 +70532,14 @@ | ||||||
|       "enableRelocation" |       "enableRelocation" | ||||||
|     ], |     ], | ||||||
|     "required": false, |     "required": false, | ||||||
|     "hints": {}, |     "hints": { | ||||||
|  |       "question": "Should moving this type of point due to a relocation be allowed?", | ||||||
|  |       "iftrue": "This type of point can be moved due to a relocation (and will remove address information when this is done)", | ||||||
|  |       "iffalse": "This type of point cannot be moved due to a relocation", | ||||||
|  |       "ifunset": "(default) This type of point can be moved due to a relocation (and will remove address information when this is done)" | ||||||
|  |     }, | ||||||
|     "type": "boolean", |     "type": "boolean", | ||||||
|     "description": "One default reason to move a point is because it has relocated\nSet to false to disable this reason" |     "description": "\nThis will erase the attributes `addr:street`, `addr:housenumber`, `addr:city` and `addr:postcode`\n" | ||||||
|   }, |   }, | ||||||
|   { |   { | ||||||
|     "path": [ |     "path": [ | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ import { JsonSchema } from "../UI/Studio/jsonSchema" | ||||||
| import { AllSharedLayers } from "../Customizations/AllSharedLayers" | import { AllSharedLayers } from "../Customizations/AllSharedLayers" | ||||||
| import { AllKnownLayouts } from "../Customizations/AllKnownLayouts" | import { AllKnownLayouts } from "../Customizations/AllKnownLayouts" | ||||||
| import { ConfigMeta } from "../UI/Studio/configMeta" | import { ConfigMeta } from "../UI/Studio/configMeta" | ||||||
| import { Or } from "../Logic/Tags/Or" | import { Utils } from "../Utils" | ||||||
| 
 | 
 | ||||||
| const metainfo = { | const metainfo = { | ||||||
|     type: "One of the inputValidator types", |     type: "One of the inputValidator types", | ||||||
|  | @ -20,6 +20,7 @@ const metainfo = { | ||||||
|     inline: "A text, containing `{value}`. This will be used as freeform rendering and will be included into the rendering", |     inline: "A text, containing `{value}`. This will be used as freeform rendering and will be included into the rendering", | ||||||
|     suggestions: "a javascript expression generating mappings", |     suggestions: "a javascript expression generating mappings", | ||||||
| } | } | ||||||
|  | 
 | ||||||
| function WalkScheme<T>( | function WalkScheme<T>( | ||||||
|     onEach: (schemePart: JsonSchema, path: string[]) => T, |     onEach: (schemePart: JsonSchema, path: string[]) => T, | ||||||
|     scheme: JsonSchema, |     scheme: JsonSchema, | ||||||
|  | @ -217,7 +218,41 @@ function substituteReferences( | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function extractMeta(typename: string, path: string, allDefinitions: Record<string, JsonSchema>) { | function validateMeta(path: ConfigMeta): string | undefined { | ||||||
|  |     if (path.path.length == 0) { | ||||||
|  |         return | ||||||
|  |     } | ||||||
|  |     const ctx = "Definition for field in " + path.path.join(".") | ||||||
|  |     if (path.hints.group === undefined && path.path.length == 1) { | ||||||
|  |         return ( | ||||||
|  |             ctx + | ||||||
|  |             " does not have a group set (but it is a top-level element which should have a group) " | ||||||
|  |         ) | ||||||
|  |     } | ||||||
|  |     if (path.hints.group === "hidden") { | ||||||
|  |         return undefined | ||||||
|  |     } | ||||||
|  |     if (path.hints.typehint === "tag") { | ||||||
|  |         return undefined | ||||||
|  |     } | ||||||
|  |     if (path.path[0] == "mapRendering" || path.path[0] == "tagRenderings") { | ||||||
|  |         return undefined | ||||||
|  |     } | ||||||
|  |     if (path.hints.question === undefined && !Array.isArray(path.type)) { | ||||||
|  |         return ( | ||||||
|  |             ctx + | ||||||
|  |             " does not have a question set. As such, MapComplete-studio users will not be able to set this property" | ||||||
|  |         ) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return undefined | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function extractMeta( | ||||||
|  |     typename: string, | ||||||
|  |     path: string, | ||||||
|  |     allDefinitions: Record<string, JsonSchema> | ||||||
|  | ): string[] { | ||||||
|     let themeSchema: JsonSchema = JSON.parse( |     let themeSchema: JsonSchema = JSON.parse( | ||||||
|         readFileSync("./Docs/Schemas/" + typename + ".schema.json", { encoding: "utf8" }) |         readFileSync("./Docs/Schemas/" + typename + ".schema.json", { encoding: "utf8" }) | ||||||
|     ) |     ) | ||||||
|  | @ -230,6 +265,7 @@ function extractMeta(typename: string, path: string, allDefinitions: Record<stri | ||||||
| 
 | 
 | ||||||
|     writeFileSync("./assets/" + path + ".json", JSON.stringify(paths, null, "  ")) |     writeFileSync("./assets/" + path + ".json", JSON.stringify(paths, null, "  ")) | ||||||
|     console.log("Written meta to ./assets/" + path) |     console.log("Written meta to ./assets/" + path) | ||||||
|  |     return Utils.NoNull(paths.map((p) => validateMeta(p))) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function main() { | function main() { | ||||||
|  | @ -257,7 +293,7 @@ function main() { | ||||||
|             encoding: "utf8", |             encoding: "utf8", | ||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
|     extractMeta("LayerConfigJson", "layerconfigmeta", allDefinitions) |     const errs = extractMeta("LayerConfigJson", "layerconfigmeta", allDefinitions) | ||||||
|     extractMeta("LayoutConfigJson", "layoutconfigmeta", allDefinitions) |     extractMeta("LayoutConfigJson", "layoutconfigmeta", allDefinitions) | ||||||
|     extractMeta("TagRenderingConfigJson", "tagrenderingconfigmeta", allDefinitions) |     extractMeta("TagRenderingConfigJson", "tagrenderingconfigmeta", allDefinitions) | ||||||
|     extractMeta( |     extractMeta( | ||||||
|  | @ -265,6 +301,13 @@ function main() { | ||||||
|         "questionabletagrenderingconfigmeta", |         "questionabletagrenderingconfigmeta", | ||||||
|         allDefinitions |         allDefinitions | ||||||
|     ) |     ) | ||||||
|  | 
 | ||||||
|  |     if (errs.length > 0) { | ||||||
|  |         for (const err of errs) { | ||||||
|  |             console.error(err) | ||||||
|  |         } | ||||||
|  |         console.log((errs.length < 25 ? "Only " : "") + errs.length + " errors to solve") | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| main() | main() | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue