{
  "#1": "This JSON file is a small template to get you started developing a theme",
  "#2": "All lines starting with '#' are comments and can be removed in the theme if you don't need the explanation anymore",
  "#3": "Make sure to join our chat channel at https://app.element.io/#/room/#MapComplete:matrix.org for questions, sharing your theme, ...",
  "#4": "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",
  "#5": "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;",
  "#6": "Then, go to https://mapcomplete.osm.be/theme?userlayout=true#your-base64-encoded-file",
  "id": "template",
  "credits": "Write your name here (or remove everything)",
  "title": {
    "en": "Title of your theme",
    "#1": "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,
  "#7": "For more options and configuration, see the documentation in LayoutConfig.json",
  "#8": "`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": [
    {
      "id": "a singular noun describing the feature, in english",
      "source": {
        "osmTags": {
          "#1": "For a description on which tags are possible, see https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md",
          "and": [
            "key0=value0",
            "key1=value1",
            {
              "or": [
                "key2!=value3",
                "key3=",
                "key4~*",
                "key5~some.[regex]*"
              ]
            }
          ]
        }
      },
      "#4": "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": {
              "#1": "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",
              "*": "{name}"
            }
          }
        ],
        "#1": "Note that this is a tagRendering, but doesn't have a question field"
      },
      "allowMove": true,
      "deletion": {
        "softDeletionTags": {
          "and": [
            "razed:tourism=artwork",
            "tourism="
          ]
        },
        "neededChangesets": 5
      },
      "#2": "The maprenderings describe how a feature is shown on the map",
      "mapRendering": [
        {
          "#1": "Rendering block of a mapping which is shown for points AND at the center point of a line/area",
          "location": [
            "point",
            "centroid"
          ],
          "icon": "circle:white;URL or path to icon.svg",
          "iconSize": "30,30,center",
          "#2": "Note: all these values can be tagrenderings too, e.g.:",
          "label": {
            "render": {
              "en": "Item"
            },
            "mappings": [
              {
                "if": "name~*",
                "then": {
                  "*": "{name}"
                }
              }
            ]
          }
        },
        {
          "#1": "Rendering of a line",
          "color": "#ff0",
          "width": 5
        }
      ],
      "#3": "Presets describe which new items can be added on click. Delete this block if adding a new point is not relevant",
      "presets": [
        {
          "title": {
            "en": "lowercase item"
          },
          "tags": [
            "somekey=somevalue",
            "otherkey=othervalue"
          ],
          "description": "A thorough definition of what the item is, usefull if people add stuff wrongly. This is optional",
          "exampleImages": [
            "optionally add images here",
            "an image.jpg",
            "another example image of the feature.jpg"
          ]
        }
      ],
      "#1": "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": {
            "en": "The value of some_osm_key is {some_osm_key} in this advanced tagrendering"
          },
          "question": {
            "en": "What is XYZ?"
          },
          "freeform": {
            "key": "some_osm_key",
            "#1": "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"
              },
              "#1": "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",
              "addExtraTags": [
                "extrakey=extravalue"
              ]
            }
          ]
        },
        {
          "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",
                "#1": "An extra icon supporting this option"
              },
              "#1": "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",
              "addExtraTags": [
                "extrakey=extravalue"
              ]
            }
          ]
        }
      ]
    }
  ]
}