mapcomplete/Docs/theme-template.json

185 lines
6.8 KiB
JSON
Raw Normal View History

2022-03-12 14:42:57 +01:00
{
"#": "This JSON file is a small template to get you started developing a theme",
"#": "All lines starting with '#' are comments and can be removed in the theme if you don't need the explanation anymore",
"#": "Make sure to join our chat channel at https://app.element.io/#/room/#MapComplete:matrix.org for questions, sharing your theme, ...",
"#": "To actually load your theme: on linux: run a local webserver (e.g. `webfsd`) and go to https://mapcomplete.osm.be/theme?userlayout=http://127.0.0.1:8080/path-to-your-theme.json",
"#": "If you don't know how to run a webserver: go to https://www.base64encode.org/ , copy paste this entire document in the 'encode' field and encode it;",
"#": "Then, go to https://mapcomplete.osm.be/theme?userlayout=true#your-base64-encoded-file",
"id": "template",
"maintainer": "Write your name here",
"version": "2022-03-12",
"title": {
"en": "Title of your theme",
"#": "You can add extra languages here (and in all translation blocks), but make sure 'en' is everywhere"
},
"description": {
"en": "The welcome message goes here"
},
"icon": "/path/to/icon.svg OR path to an online svg, such as https://upload.wikimedia.org/wikipedia/commons/9/9f/Missing_Maps_Icon.svg",
"startZoom": 0,
"startLat": 0,
"startLon": 0,
"#": "For more options and configuration, see the documentation in LayoutConfig.json",
"#layers": "The list of layers is where most of the content will be. Either reuse an already existing layer by simply calling it's ID or define a whole new layer. An overview of builtin layers is at https://github.com/pietervdvn/MapComplete/blob/develop/Docs/BuiltinLayers.md#normal-layers",
"layers": [
"bench",
{
"id": "a singular nound describing the feature, in english",
"source": {
"osmTags": {
"#": "For a description on which tags are possible, see https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md",
2022-03-12 16:24:53 +01:00
"and": [
"key0=value0",
"key1=value1",
2022-03-12 14:42:57 +01:00
{
2022-03-12 16:24:53 +01:00
"or": [
"key2!=value3",
"key3=",
"key4~*",
"key5~some.[regex]*"
]
2022-03-12 14:42:57 +01:00
}
]
}
},
"#": "Minzoom: only download and show if zoom >= minzoom",
"minzoom": 12,
"name": {
"en": "Name of the layer, as shown in the layer selection"
},
"title": {
"render": {
"en": "Title in a popup when a feature is clicked"
},
"mappings": [
{
"if": "name~*",
"then": {
2022-03-12 16:24:53 +01:00
"#": "If name is given, use name instead as popup title. Note that the translation here uses '*' instead of 'en', which'll be shown in every language",
2022-03-12 14:42:57 +01:00
"*": "{name}"
}
}
],
"#": "Note that this is a tagRendering, but doesn't have a question field"
},
"allowMove": true,
"deletion": {
2022-03-12 16:24:53 +01:00
"softDeletionTags": [
2022-03-12 14:42:57 +01:00
"disused:key:={key}"
2022-03-12 16:24:53 +01:00
]
2022-03-12 14:42:57 +01:00
},
"#": "The maprenderings describe how a feature is shown on the map",
2022-03-12 16:24:53 +01:00
"mapRendering": [
2022-03-12 14:42:57 +01:00
{
2022-03-12 16:24:53 +01:00
"#": "Rendering block of a mapping which is shown for points AND at the center point of a line/area",
"location": [
"point",
"centroid"
],
2022-03-12 14:42:57 +01:00
"icon": "circle:white;URL or path to icon.svg",
"iconSize": "30,30,center"
"#": "Note: all these values can be tagrenderings too, e.g.:",
"label": {
"render": {
"en": "Item"
},
"mappings": [
{
"if": "name~*",
"then": {
"*": "{name}"
}
}
]
}
2022-03-12 16:24:53 +01:00
},
{
"#": "Rendering of a line",
2022-03-12 14:42:57 +01:00
"color": "#ff0",
"width": 5
}
],
"#": "Presets describe which new items can be added on click. Delete this block if adding a new point is not relevant",
"presets": [
{
2022-03-12 16:24:53 +01:00
"title": {
"en": "lowercase item"
},
"tags": [
"somekey=somevalue",
"otherkey=othervalue"
],
2022-03-12 14:42:57 +01:00
"description": "A thorough definition of what the item is, usefull if people add stuff wrongly. This is optional",
2022-03-12 16:24:53 +01:00
"exampleImages": [
"optionally add images here",
"an image.jpg",
"another example image of the feature.jpg"
]
2022-03-12 14:42:57 +01:00
}
],
"#": "The tagrenderings are everything that must be shown and/or asked. Use a full tag-rendering section OR a single string to call a builtin tagrendering (see https://github.com/pietervdvn/MapComplete/blob/develop/Docs/BuiltinQuestions.md)",
"tagRenderings": [
{
"render": {
"en": "This is a simple tagrendering without a question. It will always show this text as is"
}
},
"images",
"website",
"phone",
"opening_hours",
"email",
"reviews",
{
"render": {
"en": "This is a simple tagrendering without a question. It will always show this text as is"
}
},
{
"render": {
2022-03-12 16:24:53 +01:00
"en": "The value of some_osm_key is {some_osm_key} in this advanced tagrendering"
},
"question": {
"en": "What is XYZ?"
2022-03-12 14:42:57 +01:00
},
"freeform": {
"key": "some_osm_key",
"#": "Types can be found at https://github.com/pietervdvn/MapComplete/blob/develop/Docs/SpecialInputElements.md",
"type": "nat"
},
"mappings": [
{
"if": "somekey=some_value",
"then": {
"en": "Text on radio button which also is shown if somekey=some_value is present on the object"
},
"#": "If this option is picked as answer, these tags will be added additionally. However, if 'somekey=some_value' is present, the above rendering will be shown",
2022-03-12 16:24:53 +01:00
"addExtraTags": [
"extrakey=extravalue"
]
2022-03-12 14:42:57 +01:00
}
]
},
{
"mappings": [
{
"if": "somekey=some_value",
"then": {
"en": "Text on radio button which also is shown if somekey=some_value is present on the object"
},
"icon": {
"path": "/path/to/extra-icon.svg OR url",
"class": "medium",
"#": "An extra icon supporting this option"
},
"#": "If this option is picked as answer, these tags will be added additionally. However, if 'somekey=some_value' is present, the above rendering will be shown",
2022-03-12 16:24:53 +01:00
"addExtraTags": [
"extrakey=extravalue"
]
2022-03-12 14:42:57 +01:00
}
]
}
]
}
]
}