Refactoring: split icons into proper layered icons, fix and rerun shops-thief

This commit is contained in:
Pieter Vander Vennet 2023-10-06 23:56:50 +02:00
parent d6cd0516bb
commit 19a760178b
307 changed files with 26845 additions and 116541 deletions

View file

@ -1,39 +0,0 @@
{
"$ref": "#/definitions/AndOrTagConfigJson",
"definitions": {
"AndOrTagConfigJson": {
"type": "object",
"properties": {
"and": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/AndOrTagConfigJson"
},
{
"type": "string"
}
]
}
},
"or": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/AndOrTagConfigJson"
},
{
"type": "string"
}
]
}
}
},
"additionalProperties": false
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}

View file

@ -1,37 +0,0 @@
export default {
"$ref": "#/definitions/AndOrTagConfigJson",
"definitions": {
"AndOrTagConfigJson": {
"type": "object",
"properties": {
"and": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/AndOrTagConfigJson"
},
{
"type": "string"
}
]
}
},
"or": {
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/AndOrTagConfigJson"
},
{
"type": "string"
}
]
}
}
}
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}

View file

@ -1,66 +0,0 @@
{
"$ref": "#/definitions/AndTagConfigJson",
"description": "Chain many tags, to match, a single of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"definitions": {
"TagConfigJson": {
"description": "The main representation of Tags.\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for more documentation",
"anyOf": [
{
"$ref": "#/definitions/AndTagConfigJson"
},
{
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
]
},
{
"type": "string"
}
]
},
"AndTagConfigJson": {
"description": "Chain many tags, to match, a single of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"and": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"and"
],
"additionalProperties": false
},
"OrTagConfigJson": {
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
],
"additionalProperties": false
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}

View file

@ -1,63 +0,0 @@
export default {
"$ref": "#/definitions/AndTagConfigJson",
"description": "Chain many tags, to match, a single of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"definitions": {
"TagConfigJson": {
"description": "The main representation of Tags.\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for more documentation",
"anyOf": [
{
"$ref": "#/definitions/AndTagConfigJson"
},
{
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
]
},
{
"type": "string"
}
]
},
"AndTagConfigJson": {
"description": "Chain many tags, to match, a single of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"and": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"and"
]
},
"OrTagConfigJson": {
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}

View file

@ -29,7 +29,7 @@
]
},
"source": {
"description": "Question: Where should the data be fetched from?\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"description": "Question: Where should the data be fetched from?\ntitle: Data Source\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"anyOf": [
{
"type": "object",
@ -166,21 +166,18 @@
}
]
},
"mapRendering": {
"description": "Visualisation of the items on the map\nSet 'null' explicitly if you do not want a maprendering\ngroup: maprendering\ntypes: PointRendering ; LineRendering ;",
"pointRendering": {
"description": "Creates points to render on the map.\nThis can render points for point-objects, lineobjects or areaobjects; use 'location' to indicate where it should be rendered\ngroup: pointrendering",
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"$ref": "#/definitions/default<default|default|default[]|default[]>"
}
]
"$ref": "#/definitions/default_4"
}
},
"lineRendering": {
"description": "Creates lines and areas to render on the map\ngroup: linerendering",
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
"passAllFeatures": {
@ -397,6 +394,7 @@
},
"required": [
"id",
"pointRendering",
"source"
],
"definitions": {
@ -703,6 +701,38 @@
},
"additionalProperties": false
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
},
"additionalProperties": false
},
"Record<string,string[]>": {
"type": "object",
"additionalProperties": false
@ -825,22 +855,43 @@
"type": "object",
"properties": {
"location": {
"description": "All the locations that this point should be rendered at.\nPossible values are:\n- `point`: only renders points at their location\n- `centroid`: show a symbol at the centerpoint of a (multi)Linestring and (multi)polygon. Points will _not_ be rendered with this\n- `projected_centerpoint`: Only on (multi)linestrings: calculate the centerpoint and snap it to the way\n- `start` and `end`: only on linestrings: add a point to the first/last coordinate of the LineString",
"description": "question: At what location should this icon be shown?\nmultianswer: true\nsuggestions: return [{if: \"value=point\",then: \"Show an icon for point (node) objects\"},{if: \"value=centroid\",then: \"Show an icon for line or polygon (way) objects at their centroid location\"}, {if: \"value=start\",then: \"Show an icon for line (way) objects at the start\"},{if: \"value=end\",then: \"Show an icon for line (way) object at the end\"},{if: \"value=projected_centerpoint\",then: \"Show an icon for line (way) object near the centroid location, but moved onto the line\"}]",
"type": "array",
"items": {
"type": "string"
}
},
"icon": {
"description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"marker": {
"description": "question: What marker should be used to\nThe icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one c an use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"type": "array",
"items": {
"type": "object",
"properties": {
"icon": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
},
"color": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
}
},
{
"type": "string"
}
]
"required": [
"icon"
]
}
},
"iconBadges": {
"description": "A list of extra badges to show next to the icon as small badge\nThey will be added as a 25% height icon at the bottom right of the icon, with all the badges in a flex layout.\n\nNote: strings are interpreted as icons, so layering and substituting is supported. You can use `circle:white;./my_icon.svg` to add a background circle",
@ -882,7 +933,7 @@
]
},
"anchor": {
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\nFor example, a feature attached to the ground can use 'bottom' as zooming in will give the appearance of being anchored to a fixed location.",
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\n\nifunset: Use MapComplete-default (<b>center</b>)\nsuggestions: return [{if: \"value=center\", then: \"Place the <b>center</b> of the icon on the geographical location\"},{if: \"value=top\", then: \"Place the <b>top</b> of the icon on the geographical location\"},{if: \"value=bottom\", then: \"Place the <b>bottom</b> of the icon on the geographical location\"},{if: \"value=left\", then: \"Place the <b>left</b> of the icon on the geographical location\"},{if: \"value=right\", then: \"Place the <b>right</b> of the icon on the geographical location\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -904,7 +955,7 @@
]
},
"label": {
"description": "A HTML-fragment that is shown below the icon, for example:\n<div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\nNote that, if the wayhandling hides the icon then no label is shown as well.",
"description": "question: What label should be shown beneath the marker?\nFor example: <div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\ntypes: Dynamic value | string\ninline: Always show label <b>{value}</b> beneath the marker",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -915,7 +966,7 @@
]
},
"css": {
"description": "A snippet of css code which is applied onto the container of the entire marker",
"description": "question: What CSS should be applied to the entire marker?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\nThis will be applied to the _container_ containing both the marker and the label\ninline: Apply CSS-style <b>{value}</b> to the _entire marker_\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -926,7 +977,7 @@
]
},
"cssClasses": {
"description": "A snippet of css-classes which are applied onto the container of the entire marker. They can be space-separated",
"description": "question: Which CSS-classes should be applied to the entire marker?\nThis will be applied to the _container_ containing both the marker and the label\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the entire container\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -937,7 +988,7 @@
]
},
"labelCss": {
"description": "Css that is applied onto the label",
"description": "question: What CSS should be applied to the label?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\ninline: Apply CSS-style <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -948,7 +999,7 @@
]
},
"labelCssClasses": {
"description": "Css classes that are applied onto the label; can be space-separated",
"description": "question: Which CSS-classes should be applied to the label?\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -974,7 +1025,7 @@
]
},
"rotationAlignment": {
"description": "If the map is rotated, the icon will still point to the north if no rotation was applied",
"description": "question: Should the icon be rotated or tilted if the map is rotated or tilted?\nifunset: Do not rotate or tilt icons. Always keep the icons straight\nsuggestions: return [{if: \"value=canvas\", then: \"If the map is tilted, tilt the icon as well. This gives the impression of an icon that is glued to the ground.\"}, {if: \"value=map\", then: \"If the map is rotated, rotate the icon as well. This gives the impression of an icon that floats perpendicular above the ground.\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -999,10 +1050,10 @@
"type": "object",
"properties": {
"color": {
"description": "The color for way-elements and SVG-elements.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead",
"description": "question: What color should lines be drawn in?\n\nFor an area, this will be the colour of the outside line.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead\n\ntypes: dynamic value ; string\ntitle: Line Colour\ninline: The line colour always is <b>{value}</b>\nifunset: Round ending\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -1010,10 +1061,10 @@
]
},
"width": {
"description": "The stroke-width for way-elements",
"description": "question: How wide should the line be?\nThe stroke-width for way-elements\n\ntypes: dynamic value ; string\ntitle: Line width\ninline: The line width is <b>{value} pixels</b>\ntype: pnat\nifunset: Use the default-linewidth of 7 pixels",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": [
@ -1024,21 +1075,14 @@
]
},
"dashArray": {
"description": "A dasharray, e.g. \"5 6\"\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap',\nDefault value: \"\" (empty string == full line)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
"description": "question: Should a dasharray be used to render the lines?\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap, ...'. For example, `5 6` will be 5 pixels of line followed by a 6 pixel gap.\nCannot be a dynamic property due to a mapbox limitation\nifunset: Ways are rendered with a full line",
"type": "string"
},
"lineCap": {
"description": "The form at the end of a line",
"description": "question: What form should the line-ending have?\nsuggestions: return [{if:\"value=round\",then:\"Round endings\"}, {if: \"value=square\", then: \"square endings\"}, {if: \"value=butt\", then: \"no ending (square ending at the end, without padding)\"}]\ntypes: dynamic value ; string\ntitle: Line Cap\nifunset: Use the default value (round ending)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -1046,10 +1090,10 @@
]
},
"fillColor": {
"description": "The color to fill a polygon with.\nIf undefined, this will be slightly more opaque version of the stroke line.\nUse '#00000000' to make the fill invisible",
"description": "question: What colour should be used as fill colour for polygons?\nifunset: The polygon fill colour will be a more transparent version of the stroke colour\nsuggestions: return [{if: \"value=#00000000\", then: \"Use a transparent fill (only render the outline)\"}]\ninline: The fill colour is <b>{value}</b>\ntypes: dynamic value ; string\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -1057,10 +1101,10 @@
]
},
"offset": {
"description": "The number of pixels this line should be moved.\nUse a positive numbe to move to the right, a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details",
"description": "question: Should the lines be moved (offsetted) with a number of pixels against the geographical lines?\nThe number of pixels this line should be moved.\nUse a positive number to move to the right in the drawing direction or a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details\nifunset: don't offset lines on the map\ninline: Pixel offset by <b>{value}</b> pixels\ntypes: dynamic value ; number\ntype: int",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "number"
@ -1070,61 +1114,6 @@
},
"additionalProperties": false
},
"default<default|default|default[]|default[]>": {
"description": "Rewrites and multiplies the given renderings of type T.\n\nThis can be used for introducing many similar questions automatically,\nwhich also makes translations easier.\n\n(Note that the key does _not_ need to be wrapped in {}.\nHowever, we recommend to use them if the key is used in a translation, as missing keys will be picked up and warned for by the translation scripts)\n\nFor example:\n\n```\n{\n rewrite: {\n sourceString: [\"key\", \"a|b|c\"],\n into: [\n [\"X\", 0]\n [\"Y\", 1],\n [\"Z\", 2]\n ],\n renderings: [{\n \"key\":\"a|b|c\"\n }]\n }\n}\n```\nwill result in _three_ copies (as the values to rewrite into have three values, namely:\n\n[\n {\n # The first pair: key --> X, a|b|c --> 0\n \"X\": 0\n },\n {\n \"Y\": 1\n },\n {\n \"Z\": 2\n }\n\n]",
"type": "object",
"properties": {
"rewrite": {
"type": "object",
"properties": {
"sourceString": {
"type": "array",
"items": {
"type": "string"
}
},
"into": {
"type": "array",
"items": {
"type": "array",
"items": {}
}
}
},
"required": [
"into",
"sourceString"
]
},
"renderings": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
{
"type": "array",
"items": {
"$ref": "#/definitions/default_4"
}
}
]
}
},
"required": [
"renderings",
"rewrite"
],
"additionalProperties": false
},
"QuestionableTagRenderingConfigJson": {
"description": "A QuestionableTagRenderingConfigJson is a single piece of code which converts one ore more tags into a HTML-snippet.\nIf the desired tags are missing and a question is defined, a question will be shown instead.",
"type": "object",

View file

@ -29,7 +29,7 @@ export default {
]
},
"source": {
"description": "Question: Where should the data be fetched from?\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"description": "Question: Where should the data be fetched from?\ntitle: Data Source\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"anyOf": [
{
"type": "object",
@ -166,21 +166,18 @@ export default {
}
]
},
"mapRendering": {
"description": "Visualisation of the items on the map\nSet 'null' explicitly if you do not want a maprendering\ngroup: maprendering\ntypes: PointRendering ; LineRendering ;",
"pointRendering": {
"description": "Creates points to render on the map.\nThis can render points for point-objects, lineobjects or areaobjects; use 'location' to indicate where it should be rendered\ngroup: pointrendering",
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"$ref": "#/definitions/default<default|default|default[]|default[]>"
}
]
"$ref": "#/definitions/default_4"
}
},
"lineRendering": {
"description": "Creates lines and areas to render on the map\ngroup: linerendering",
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
"passAllFeatures": {
@ -397,6 +394,7 @@ export default {
},
"required": [
"id",
"pointRendering",
"source"
],
"definitions": {
@ -697,6 +695,37 @@ export default {
}
}
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
}
},
"Record<string,string[]>": {
"type": "object"
},
@ -816,22 +845,43 @@ export default {
"type": "object",
"properties": {
"location": {
"description": "All the locations that this point should be rendered at.\nPossible values are:\n- `point`: only renders points at their location\n- `centroid`: show a symbol at the centerpoint of a (multi)Linestring and (multi)polygon. Points will _not_ be rendered with this\n- `projected_centerpoint`: Only on (multi)linestrings: calculate the centerpoint and snap it to the way\n- `start` and `end`: only on linestrings: add a point to the first/last coordinate of the LineString",
"description": "question: At what location should this icon be shown?\nmultianswer: true\nsuggestions: return [{if: \"value=point\",then: \"Show an icon for point (node) objects\"},{if: \"value=centroid\",then: \"Show an icon for line or polygon (way) objects at their centroid location\"}, {if: \"value=start\",then: \"Show an icon for line (way) objects at the start\"},{if: \"value=end\",then: \"Show an icon for line (way) object at the end\"},{if: \"value=projected_centerpoint\",then: \"Show an icon for line (way) object near the centroid location, but moved onto the line\"}]",
"type": "array",
"items": {
"type": "string"
}
},
"icon": {
"description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"marker": {
"description": "question: What marker should be used to\nThe icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one c an use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"type": "array",
"items": {
"type": "object",
"properties": {
"icon": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
},
"color": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
}
},
{
"type": "string"
}
]
"required": [
"icon"
]
}
},
"iconBadges": {
"description": "A list of extra badges to show next to the icon as small badge\nThey will be added as a 25% height icon at the bottom right of the icon, with all the badges in a flex layout.\n\nNote: strings are interpreted as icons, so layering and substituting is supported. You can use `circle:white;./my_icon.svg` to add a background circle",
@ -873,7 +923,7 @@ export default {
]
},
"anchor": {
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\nFor example, a feature attached to the ground can use 'bottom' as zooming in will give the appearance of being anchored to a fixed location.",
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\n\nifunset: Use MapComplete-default (<b>center</b>)\nsuggestions: return [{if: \"value=center\", then: \"Place the <b>center</b> of the icon on the geographical location\"},{if: \"value=top\", then: \"Place the <b>top</b> of the icon on the geographical location\"},{if: \"value=bottom\", then: \"Place the <b>bottom</b> of the icon on the geographical location\"},{if: \"value=left\", then: \"Place the <b>left</b> of the icon on the geographical location\"},{if: \"value=right\", then: \"Place the <b>right</b> of the icon on the geographical location\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -895,7 +945,7 @@ export default {
]
},
"label": {
"description": "A HTML-fragment that is shown below the icon, for example:\n<div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\nNote that, if the wayhandling hides the icon then no label is shown as well.",
"description": "question: What label should be shown beneath the marker?\nFor example: <div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\ntypes: Dynamic value | string\ninline: Always show label <b>{value}</b> beneath the marker",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -906,7 +956,7 @@ export default {
]
},
"css": {
"description": "A snippet of css code which is applied onto the container of the entire marker",
"description": "question: What CSS should be applied to the entire marker?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\nThis will be applied to the _container_ containing both the marker and the label\ninline: Apply CSS-style <b>{value}</b> to the _entire marker_\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -917,7 +967,7 @@ export default {
]
},
"cssClasses": {
"description": "A snippet of css-classes which are applied onto the container of the entire marker. They can be space-separated",
"description": "question: Which CSS-classes should be applied to the entire marker?\nThis will be applied to the _container_ containing both the marker and the label\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the entire container\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -928,7 +978,7 @@ export default {
]
},
"labelCss": {
"description": "Css that is applied onto the label",
"description": "question: What CSS should be applied to the label?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\ninline: Apply CSS-style <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -939,7 +989,7 @@ export default {
]
},
"labelCssClasses": {
"description": "Css classes that are applied onto the label; can be space-separated",
"description": "question: Which CSS-classes should be applied to the label?\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -965,7 +1015,7 @@ export default {
]
},
"rotationAlignment": {
"description": "If the map is rotated, the icon will still point to the north if no rotation was applied",
"description": "question: Should the icon be rotated or tilted if the map is rotated or tilted?\nifunset: Do not rotate or tilt icons. Always keep the icons straight\nsuggestions: return [{if: \"value=canvas\", then: \"If the map is tilted, tilt the icon as well. This gives the impression of an icon that is glued to the ground.\"}, {if: \"value=map\", then: \"If the map is rotated, rotate the icon as well. This gives the impression of an icon that floats perpendicular above the ground.\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -989,10 +1039,10 @@ export default {
"type": "object",
"properties": {
"color": {
"description": "The color for way-elements and SVG-elements.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead",
"description": "question: What color should lines be drawn in?\n\nFor an area, this will be the colour of the outside line.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead\n\ntypes: dynamic value ; string\ntitle: Line Colour\ninline: The line colour always is <b>{value}</b>\nifunset: Round ending\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -1000,10 +1050,10 @@ export default {
]
},
"width": {
"description": "The stroke-width for way-elements",
"description": "question: How wide should the line be?\nThe stroke-width for way-elements\n\ntypes: dynamic value ; string\ntitle: Line width\ninline: The line width is <b>{value} pixels</b>\ntype: pnat\nifunset: Use the default-linewidth of 7 pixels",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": [
@ -1014,21 +1064,14 @@ export default {
]
},
"dashArray": {
"description": "A dasharray, e.g. \"5 6\"\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap',\nDefault value: \"\" (empty string == full line)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
"description": "question: Should a dasharray be used to render the lines?\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap, ...'. For example, `5 6` will be 5 pixels of line followed by a 6 pixel gap.\nCannot be a dynamic property due to a mapbox limitation\nifunset: Ways are rendered with a full line",
"type": "string"
},
"lineCap": {
"description": "The form at the end of a line",
"description": "question: What form should the line-ending have?\nsuggestions: return [{if:\"value=round\",then:\"Round endings\"}, {if: \"value=square\", then: \"square endings\"}, {if: \"value=butt\", then: \"no ending (square ending at the end, without padding)\"}]\ntypes: dynamic value ; string\ntitle: Line Cap\nifunset: Use the default value (round ending)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -1036,10 +1079,10 @@ export default {
]
},
"fillColor": {
"description": "The color to fill a polygon with.\nIf undefined, this will be slightly more opaque version of the stroke line.\nUse '#00000000' to make the fill invisible",
"description": "question: What colour should be used as fill colour for polygons?\nifunset: The polygon fill colour will be a more transparent version of the stroke colour\nsuggestions: return [{if: \"value=#00000000\", then: \"Use a transparent fill (only render the outline)\"}]\ninline: The fill colour is <b>{value}</b>\ntypes: dynamic value ; string\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -1047,10 +1090,10 @@ export default {
]
},
"offset": {
"description": "The number of pixels this line should be moved.\nUse a positive numbe to move to the right, a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details",
"description": "question: Should the lines be moved (offsetted) with a number of pixels against the geographical lines?\nThe number of pixels this line should be moved.\nUse a positive number to move to the right in the drawing direction or a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details\nifunset: don't offset lines on the map\ninline: Pixel offset by <b>{value}</b> pixels\ntypes: dynamic value ; number\ntype: int",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "number"
@ -1059,60 +1102,6 @@ export default {
}
}
},
"default<default|default|default[]|default[]>": {
"description": "Rewrites and multiplies the given renderings of type T.\n\nThis can be used for introducing many similar questions automatically,\nwhich also makes translations easier.\n\n(Note that the key does _not_ need to be wrapped in {}.\nHowever, we recommend to use them if the key is used in a translation, as missing keys will be picked up and warned for by the translation scripts)\n\nFor example:\n\n```\n{\n rewrite: {\n sourceString: [\"key\", \"a|b|c\"],\n into: [\n [\"X\", 0]\n [\"Y\", 1],\n [\"Z\", 2]\n ],\n renderings: [{\n \"key\":\"a|b|c\"\n }]\n }\n}\n```\nwill result in _three_ copies (as the values to rewrite into have three values, namely:\n\n[\n {\n # The first pair: key --> X, a|b|c --> 0\n \"X\": 0\n },\n {\n \"Y\": 1\n },\n {\n \"Z\": 2\n }\n\n]",
"type": "object",
"properties": {
"rewrite": {
"type": "object",
"properties": {
"sourceString": {
"type": "array",
"items": {
"type": "string"
}
},
"into": {
"type": "array",
"items": {
"type": "array",
"items": {}
}
}
},
"required": [
"into",
"sourceString"
]
},
"renderings": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
{
"type": "array",
"items": {
"$ref": "#/definitions/default_4"
}
}
]
}
},
"required": [
"renderings",
"rewrite"
]
},
"QuestionableTagRenderingConfigJson": {
"description": "A QuestionableTagRenderingConfigJson is a single piece of code which converts one ore more tags into a HTML-snippet.\nIf the desired tags are missing and a question is defined, a question will be shown instead.",
"type": "object",

View file

@ -608,6 +608,38 @@
},
"additionalProperties": false
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
},
"additionalProperties": false
},
"Record<string,string[]>": {
"type": "object",
"additionalProperties": false
@ -730,22 +762,43 @@
"type": "object",
"properties": {
"location": {
"description": "All the locations that this point should be rendered at.\nPossible values are:\n- `point`: only renders points at their location\n- `centroid`: show a symbol at the centerpoint of a (multi)Linestring and (multi)polygon. Points will _not_ be rendered with this\n- `projected_centerpoint`: Only on (multi)linestrings: calculate the centerpoint and snap it to the way\n- `start` and `end`: only on linestrings: add a point to the first/last coordinate of the LineString",
"description": "question: At what location should this icon be shown?\nmultianswer: true\nsuggestions: return [{if: \"value=point\",then: \"Show an icon for point (node) objects\"},{if: \"value=centroid\",then: \"Show an icon for line or polygon (way) objects at their centroid location\"}, {if: \"value=start\",then: \"Show an icon for line (way) objects at the start\"},{if: \"value=end\",then: \"Show an icon for line (way) object at the end\"},{if: \"value=projected_centerpoint\",then: \"Show an icon for line (way) object near the centroid location, but moved onto the line\"}]",
"type": "array",
"items": {
"type": "string"
}
},
"icon": {
"description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"marker": {
"description": "question: What marker should be used to\nThe icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one c an use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"type": "array",
"items": {
"type": "object",
"properties": {
"icon": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
},
"color": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
}
},
{
"type": "string"
}
]
"required": [
"icon"
]
}
},
"iconBadges": {
"description": "A list of extra badges to show next to the icon as small badge\nThey will be added as a 25% height icon at the bottom right of the icon, with all the badges in a flex layout.\n\nNote: strings are interpreted as icons, so layering and substituting is supported. You can use `circle:white;./my_icon.svg` to add a background circle",
@ -787,7 +840,7 @@
]
},
"anchor": {
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\nFor example, a feature attached to the ground can use 'bottom' as zooming in will give the appearance of being anchored to a fixed location.",
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\n\nifunset: Use MapComplete-default (<b>center</b>)\nsuggestions: return [{if: \"value=center\", then: \"Place the <b>center</b> of the icon on the geographical location\"},{if: \"value=top\", then: \"Place the <b>top</b> of the icon on the geographical location\"},{if: \"value=bottom\", then: \"Place the <b>bottom</b> of the icon on the geographical location\"},{if: \"value=left\", then: \"Place the <b>left</b> of the icon on the geographical location\"},{if: \"value=right\", then: \"Place the <b>right</b> of the icon on the geographical location\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -809,7 +862,7 @@
]
},
"label": {
"description": "A HTML-fragment that is shown below the icon, for example:\n<div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\nNote that, if the wayhandling hides the icon then no label is shown as well.",
"description": "question: What label should be shown beneath the marker?\nFor example: <div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\ntypes: Dynamic value | string\ninline: Always show label <b>{value}</b> beneath the marker",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -820,7 +873,7 @@
]
},
"css": {
"description": "A snippet of css code which is applied onto the container of the entire marker",
"description": "question: What CSS should be applied to the entire marker?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\nThis will be applied to the _container_ containing both the marker and the label\ninline: Apply CSS-style <b>{value}</b> to the _entire marker_\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -831,7 +884,7 @@
]
},
"cssClasses": {
"description": "A snippet of css-classes which are applied onto the container of the entire marker. They can be space-separated",
"description": "question: Which CSS-classes should be applied to the entire marker?\nThis will be applied to the _container_ containing both the marker and the label\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the entire container\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -842,7 +895,7 @@
]
},
"labelCss": {
"description": "Css that is applied onto the label",
"description": "question: What CSS should be applied to the label?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\ninline: Apply CSS-style <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -853,7 +906,7 @@
]
},
"labelCssClasses": {
"description": "Css classes that are applied onto the label; can be space-separated",
"description": "question: Which CSS-classes should be applied to the label?\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -879,7 +932,7 @@
]
},
"rotationAlignment": {
"description": "If the map is rotated, the icon will still point to the north if no rotation was applied",
"description": "question: Should the icon be rotated or tilted if the map is rotated or tilted?\nifunset: Do not rotate or tilt icons. Always keep the icons straight\nsuggestions: return [{if: \"value=canvas\", then: \"If the map is tilted, tilt the icon as well. This gives the impression of an icon that is glued to the ground.\"}, {if: \"value=map\", then: \"If the map is rotated, rotate the icon as well. This gives the impression of an icon that floats perpendicular above the ground.\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -904,10 +957,10 @@
"type": "object",
"properties": {
"color": {
"description": "The color for way-elements and SVG-elements.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead",
"description": "question: What color should lines be drawn in?\n\nFor an area, this will be the colour of the outside line.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead\n\ntypes: dynamic value ; string\ntitle: Line Colour\ninline: The line colour always is <b>{value}</b>\nifunset: Round ending\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -915,10 +968,10 @@
]
},
"width": {
"description": "The stroke-width for way-elements",
"description": "question: How wide should the line be?\nThe stroke-width for way-elements\n\ntypes: dynamic value ; string\ntitle: Line width\ninline: The line width is <b>{value} pixels</b>\ntype: pnat\nifunset: Use the default-linewidth of 7 pixels",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": [
@ -929,21 +982,14 @@
]
},
"dashArray": {
"description": "A dasharray, e.g. \"5 6\"\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap',\nDefault value: \"\" (empty string == full line)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
"description": "question: Should a dasharray be used to render the lines?\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap, ...'. For example, `5 6` will be 5 pixels of line followed by a 6 pixel gap.\nCannot be a dynamic property due to a mapbox limitation\nifunset: Ways are rendered with a full line",
"type": "string"
},
"lineCap": {
"description": "The form at the end of a line",
"description": "question: What form should the line-ending have?\nsuggestions: return [{if:\"value=round\",then:\"Round endings\"}, {if: \"value=square\", then: \"square endings\"}, {if: \"value=butt\", then: \"no ending (square ending at the end, without padding)\"}]\ntypes: dynamic value ; string\ntitle: Line Cap\nifunset: Use the default value (round ending)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -951,10 +997,10 @@
]
},
"fillColor": {
"description": "The color to fill a polygon with.\nIf undefined, this will be slightly more opaque version of the stroke line.\nUse '#00000000' to make the fill invisible",
"description": "question: What colour should be used as fill colour for polygons?\nifunset: The polygon fill colour will be a more transparent version of the stroke colour\nsuggestions: return [{if: \"value=#00000000\", then: \"Use a transparent fill (only render the outline)\"}]\ninline: The fill colour is <b>{value}</b>\ntypes: dynamic value ; string\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -962,10 +1008,10 @@
]
},
"offset": {
"description": "The number of pixels this line should be moved.\nUse a positive numbe to move to the right, a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details",
"description": "question: Should the lines be moved (offsetted) with a number of pixels against the geographical lines?\nThe number of pixels this line should be moved.\nUse a positive number to move to the right in the drawing direction or a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details\nifunset: don't offset lines on the map\ninline: Pixel offset by <b>{value}</b> pixels\ntypes: dynamic value ; number\ntype: int",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "number"
@ -975,61 +1021,6 @@
},
"additionalProperties": false
},
"default<default|default|default[]|default[]>": {
"description": "Rewrites and multiplies the given renderings of type T.\n\nThis can be used for introducing many similar questions automatically,\nwhich also makes translations easier.\n\n(Note that the key does _not_ need to be wrapped in {}.\nHowever, we recommend to use them if the key is used in a translation, as missing keys will be picked up and warned for by the translation scripts)\n\nFor example:\n\n```\n{\n rewrite: {\n sourceString: [\"key\", \"a|b|c\"],\n into: [\n [\"X\", 0]\n [\"Y\", 1],\n [\"Z\", 2]\n ],\n renderings: [{\n \"key\":\"a|b|c\"\n }]\n }\n}\n```\nwill result in _three_ copies (as the values to rewrite into have three values, namely:\n\n[\n {\n # The first pair: key --> X, a|b|c --> 0\n \"X\": 0\n },\n {\n \"Y\": 1\n },\n {\n \"Z\": 2\n }\n\n]",
"type": "object",
"properties": {
"rewrite": {
"type": "object",
"properties": {
"sourceString": {
"type": "array",
"items": {
"type": "string"
}
},
"into": {
"type": "array",
"items": {
"type": "array",
"items": {}
}
}
},
"required": [
"into",
"sourceString"
]
},
"renderings": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
{
"type": "array",
"items": {
"$ref": "#/definitions/default_4"
}
}
]
}
},
"required": [
"renderings",
"rewrite"
],
"additionalProperties": false
},
"QuestionableTagRenderingConfigJson": {
"description": "A QuestionableTagRenderingConfigJson is a single piece of code which converts one ore more tags into a HTML-snippet.\nIf the desired tags are missing and a question is defined, a question will be shown instead.",
"type": "object",
@ -1760,7 +1751,7 @@
]
},
"source": {
"description": "Question: Where should the data be fetched from?\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"description": "Question: Where should the data be fetched from?\ntitle: Data Source\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"anyOf": [
{
"type": "object",
@ -1897,21 +1888,18 @@
}
]
},
"mapRendering": {
"description": "Visualisation of the items on the map\nSet 'null' explicitly if you do not want a maprendering\ngroup: maprendering\ntypes: PointRendering ; LineRendering ;",
"pointRendering": {
"description": "Creates points to render on the map.\nThis can render points for point-objects, lineobjects or areaobjects; use 'location' to indicate where it should be rendered\ngroup: pointrendering",
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"$ref": "#/definitions/default<default|default|default[]|default[]>"
}
]
"$ref": "#/definitions/default_4"
}
},
"lineRendering": {
"description": "Creates lines and areas to render on the map\ngroup: linerendering",
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
"passAllFeatures": {
@ -2128,6 +2116,7 @@
},
"required": [
"id",
"pointRendering",
"source"
],
"additionalProperties": false
@ -2162,7 +2151,7 @@
]
},
"source": {
"description": "Question: Where should the data be fetched from?\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"description": "Question: Where should the data be fetched from?\ntitle: Data Source\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"anyOf": [
{
"type": "object",
@ -2299,21 +2288,18 @@
}
]
},
"mapRendering": {
"description": "Visualisation of the items on the map\nSet 'null' explicitly if you do not want a maprendering\ngroup: maprendering\ntypes: PointRendering ; LineRendering ;",
"pointRendering": {
"description": "Creates points to render on the map.\nThis can render points for point-objects, lineobjects or areaobjects; use 'location' to indicate where it should be rendered\ngroup: pointrendering",
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"$ref": "#/definitions/default<default|default|default[]|default[]>"
}
]
"$ref": "#/definitions/default_4"
}
},
"lineRendering": {
"description": "Creates lines and areas to render on the map\ngroup: linerendering",
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
"passAllFeatures": {

View file

@ -602,6 +602,37 @@ export default {
}
}
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
}
},
"Record<string,string[]>": {
"type": "object"
},
@ -721,22 +752,43 @@ export default {
"type": "object",
"properties": {
"location": {
"description": "All the locations that this point should be rendered at.\nPossible values are:\n- `point`: only renders points at their location\n- `centroid`: show a symbol at the centerpoint of a (multi)Linestring and (multi)polygon. Points will _not_ be rendered with this\n- `projected_centerpoint`: Only on (multi)linestrings: calculate the centerpoint and snap it to the way\n- `start` and `end`: only on linestrings: add a point to the first/last coordinate of the LineString",
"description": "question: At what location should this icon be shown?\nmultianswer: true\nsuggestions: return [{if: \"value=point\",then: \"Show an icon for point (node) objects\"},{if: \"value=centroid\",then: \"Show an icon for line or polygon (way) objects at their centroid location\"}, {if: \"value=start\",then: \"Show an icon for line (way) objects at the start\"},{if: \"value=end\",then: \"Show an icon for line (way) object at the end\"},{if: \"value=projected_centerpoint\",then: \"Show an icon for line (way) object near the centroid location, but moved onto the line\"}]",
"type": "array",
"items": {
"type": "string"
}
},
"icon": {
"description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"marker": {
"description": "question: What marker should be used to\nThe icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one c an use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"type": "array",
"items": {
"type": "object",
"properties": {
"icon": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
},
"color": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
}
},
{
"type": "string"
}
]
"required": [
"icon"
]
}
},
"iconBadges": {
"description": "A list of extra badges to show next to the icon as small badge\nThey will be added as a 25% height icon at the bottom right of the icon, with all the badges in a flex layout.\n\nNote: strings are interpreted as icons, so layering and substituting is supported. You can use `circle:white;./my_icon.svg` to add a background circle",
@ -778,7 +830,7 @@ export default {
]
},
"anchor": {
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\nFor example, a feature attached to the ground can use 'bottom' as zooming in will give the appearance of being anchored to a fixed location.",
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\n\nifunset: Use MapComplete-default (<b>center</b>)\nsuggestions: return [{if: \"value=center\", then: \"Place the <b>center</b> of the icon on the geographical location\"},{if: \"value=top\", then: \"Place the <b>top</b> of the icon on the geographical location\"},{if: \"value=bottom\", then: \"Place the <b>bottom</b> of the icon on the geographical location\"},{if: \"value=left\", then: \"Place the <b>left</b> of the icon on the geographical location\"},{if: \"value=right\", then: \"Place the <b>right</b> of the icon on the geographical location\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -800,7 +852,7 @@ export default {
]
},
"label": {
"description": "A HTML-fragment that is shown below the icon, for example:\n<div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\nNote that, if the wayhandling hides the icon then no label is shown as well.",
"description": "question: What label should be shown beneath the marker?\nFor example: <div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\ntypes: Dynamic value | string\ninline: Always show label <b>{value}</b> beneath the marker",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -811,7 +863,7 @@ export default {
]
},
"css": {
"description": "A snippet of css code which is applied onto the container of the entire marker",
"description": "question: What CSS should be applied to the entire marker?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\nThis will be applied to the _container_ containing both the marker and the label\ninline: Apply CSS-style <b>{value}</b> to the _entire marker_\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -822,7 +874,7 @@ export default {
]
},
"cssClasses": {
"description": "A snippet of css-classes which are applied onto the container of the entire marker. They can be space-separated",
"description": "question: Which CSS-classes should be applied to the entire marker?\nThis will be applied to the _container_ containing both the marker and the label\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the entire container\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -833,7 +885,7 @@ export default {
]
},
"labelCss": {
"description": "Css that is applied onto the label",
"description": "question: What CSS should be applied to the label?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\ninline: Apply CSS-style <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -844,7 +896,7 @@ export default {
]
},
"labelCssClasses": {
"description": "Css classes that are applied onto the label; can be space-separated",
"description": "question: Which CSS-classes should be applied to the label?\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -870,7 +922,7 @@ export default {
]
},
"rotationAlignment": {
"description": "If the map is rotated, the icon will still point to the north if no rotation was applied",
"description": "question: Should the icon be rotated or tilted if the map is rotated or tilted?\nifunset: Do not rotate or tilt icons. Always keep the icons straight\nsuggestions: return [{if: \"value=canvas\", then: \"If the map is tilted, tilt the icon as well. This gives the impression of an icon that is glued to the ground.\"}, {if: \"value=map\", then: \"If the map is rotated, rotate the icon as well. This gives the impression of an icon that floats perpendicular above the ground.\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -894,10 +946,10 @@ export default {
"type": "object",
"properties": {
"color": {
"description": "The color for way-elements and SVG-elements.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead",
"description": "question: What color should lines be drawn in?\n\nFor an area, this will be the colour of the outside line.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead\n\ntypes: dynamic value ; string\ntitle: Line Colour\ninline: The line colour always is <b>{value}</b>\nifunset: Round ending\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -905,10 +957,10 @@ export default {
]
},
"width": {
"description": "The stroke-width for way-elements",
"description": "question: How wide should the line be?\nThe stroke-width for way-elements\n\ntypes: dynamic value ; string\ntitle: Line width\ninline: The line width is <b>{value} pixels</b>\ntype: pnat\nifunset: Use the default-linewidth of 7 pixels",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": [
@ -919,21 +971,14 @@ export default {
]
},
"dashArray": {
"description": "A dasharray, e.g. \"5 6\"\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap',\nDefault value: \"\" (empty string == full line)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
"description": "question: Should a dasharray be used to render the lines?\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap, ...'. For example, `5 6` will be 5 pixels of line followed by a 6 pixel gap.\nCannot be a dynamic property due to a mapbox limitation\nifunset: Ways are rendered with a full line",
"type": "string"
},
"lineCap": {
"description": "The form at the end of a line",
"description": "question: What form should the line-ending have?\nsuggestions: return [{if:\"value=round\",then:\"Round endings\"}, {if: \"value=square\", then: \"square endings\"}, {if: \"value=butt\", then: \"no ending (square ending at the end, without padding)\"}]\ntypes: dynamic value ; string\ntitle: Line Cap\nifunset: Use the default value (round ending)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -941,10 +986,10 @@ export default {
]
},
"fillColor": {
"description": "The color to fill a polygon with.\nIf undefined, this will be slightly more opaque version of the stroke line.\nUse '#00000000' to make the fill invisible",
"description": "question: What colour should be used as fill colour for polygons?\nifunset: The polygon fill colour will be a more transparent version of the stroke colour\nsuggestions: return [{if: \"value=#00000000\", then: \"Use a transparent fill (only render the outline)\"}]\ninline: The fill colour is <b>{value}</b>\ntypes: dynamic value ; string\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -952,10 +997,10 @@ export default {
]
},
"offset": {
"description": "The number of pixels this line should be moved.\nUse a positive numbe to move to the right, a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details",
"description": "question: Should the lines be moved (offsetted) with a number of pixels against the geographical lines?\nThe number of pixels this line should be moved.\nUse a positive number to move to the right in the drawing direction or a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details\nifunset: don't offset lines on the map\ninline: Pixel offset by <b>{value}</b> pixels\ntypes: dynamic value ; number\ntype: int",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "number"
@ -964,60 +1009,6 @@ export default {
}
}
},
"default<default|default|default[]|default[]>": {
"description": "Rewrites and multiplies the given renderings of type T.\n\nThis can be used for introducing many similar questions automatically,\nwhich also makes translations easier.\n\n(Note that the key does _not_ need to be wrapped in {}.\nHowever, we recommend to use them if the key is used in a translation, as missing keys will be picked up and warned for by the translation scripts)\n\nFor example:\n\n```\n{\n rewrite: {\n sourceString: [\"key\", \"a|b|c\"],\n into: [\n [\"X\", 0]\n [\"Y\", 1],\n [\"Z\", 2]\n ],\n renderings: [{\n \"key\":\"a|b|c\"\n }]\n }\n}\n```\nwill result in _three_ copies (as the values to rewrite into have three values, namely:\n\n[\n {\n # The first pair: key --> X, a|b|c --> 0\n \"X\": 0\n },\n {\n \"Y\": 1\n },\n {\n \"Z\": 2\n }\n\n]",
"type": "object",
"properties": {
"rewrite": {
"type": "object",
"properties": {
"sourceString": {
"type": "array",
"items": {
"type": "string"
}
},
"into": {
"type": "array",
"items": {
"type": "array",
"items": {}
}
}
},
"required": [
"into",
"sourceString"
]
},
"renderings": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
{
"type": "array",
"items": {
"$ref": "#/definitions/default_4"
}
}
]
}
},
"required": [
"renderings",
"rewrite"
]
},
"QuestionableTagRenderingConfigJson": {
"description": "A QuestionableTagRenderingConfigJson is a single piece of code which converts one ore more tags into a HTML-snippet.\nIf the desired tags are missing and a question is defined, a question will be shown instead.",
"type": "object",
@ -1739,7 +1730,7 @@ export default {
]
},
"source": {
"description": "Question: Where should the data be fetched from?\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"description": "Question: Where should the data be fetched from?\ntitle: Data Source\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"anyOf": [
{
"type": "object",
@ -1876,21 +1867,18 @@ export default {
}
]
},
"mapRendering": {
"description": "Visualisation of the items on the map\nSet 'null' explicitly if you do not want a maprendering\ngroup: maprendering\ntypes: PointRendering ; LineRendering ;",
"pointRendering": {
"description": "Creates points to render on the map.\nThis can render points for point-objects, lineobjects or areaobjects; use 'location' to indicate where it should be rendered\ngroup: pointrendering",
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"$ref": "#/definitions/default<default|default|default[]|default[]>"
}
]
"$ref": "#/definitions/default_4"
}
},
"lineRendering": {
"description": "Creates lines and areas to render on the map\ngroup: linerendering",
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
"passAllFeatures": {
@ -2107,6 +2095,7 @@ export default {
},
"required": [
"id",
"pointRendering",
"source"
]
},
@ -2140,7 +2129,7 @@ export default {
]
},
"source": {
"description": "Question: Where should the data be fetched from?\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"description": "Question: Where should the data be fetched from?\ntitle: Data Source\n\nThis determines where the data for the layer is fetched: from OSM or from an external geojson dataset.\n\nIf no 'geojson' is defined, data will be fetched from overpass and the OSM-API.\n\nEvery source _must_ define which tags _must_ be present in order to be picked up.\n\nNote: a source must always be defined. 'special' is only allowed if this is a builtin-layer\n\ntypes: Load data with specific tags from OpenStreetMap ; Load data from an external geojson source ;\ntypesdefault: 0\ngroup: Basic",
"anyOf": [
{
"type": "object",
@ -2277,21 +2266,18 @@ export default {
}
]
},
"mapRendering": {
"description": "Visualisation of the items on the map\nSet 'null' explicitly if you do not want a maprendering\ngroup: maprendering\ntypes: PointRendering ; LineRendering ;",
"pointRendering": {
"description": "Creates points to render on the map.\nThis can render points for point-objects, lineobjects or areaobjects; use 'location' to indicate where it should be rendered\ngroup: pointrendering",
"type": "array",
"items": {
"anyOf": [
{
"$ref": "#/definitions/default_4"
},
{
"$ref": "#/definitions/default_5"
},
{
"$ref": "#/definitions/default<default|default|default[]|default[]>"
}
]
"$ref": "#/definitions/default_4"
}
},
"lineRendering": {
"description": "Creates lines and areas to render on the map\ngroup: linerendering",
"type": "array",
"items": {
"$ref": "#/definitions/default_5"
}
},
"passAllFeatures": {

View file

@ -3,10 +3,10 @@
"type": "object",
"properties": {
"color": {
"description": "The color for way-elements and SVG-elements.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead",
"description": "question: What color should lines be drawn in?\n\nFor an area, this will be the colour of the outside line.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead\n\ntypes: dynamic value ; string\ntitle: Line Colour\ninline: The line colour always is <b>{value}</b>\nifunset: Round ending\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -14,10 +14,10 @@
]
},
"width": {
"description": "The stroke-width for way-elements",
"description": "question: How wide should the line be?\nThe stroke-width for way-elements\n\ntypes: dynamic value ; string\ntitle: Line width\ninline: The line width is <b>{value} pixels</b>\ntype: pnat\nifunset: Use the default-linewidth of 7 pixels",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": [
@ -28,21 +28,14 @@
]
},
"dashArray": {
"description": "A dasharray, e.g. \"5 6\"\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap',\nDefault value: \"\" (empty string == full line)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
"description": "question: Should a dasharray be used to render the lines?\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap, ...'. For example, `5 6` will be 5 pixels of line followed by a 6 pixel gap.\nCannot be a dynamic property due to a mapbox limitation\nifunset: Ways are rendered with a full line",
"type": "string"
},
"lineCap": {
"description": "The form at the end of a line",
"description": "question: What form should the line-ending have?\nsuggestions: return [{if:\"value=round\",then:\"Round endings\"}, {if: \"value=square\", then: \"square endings\"}, {if: \"value=butt\", then: \"no ending (square ending at the end, without padding)\"}]\ntypes: dynamic value ; string\ntitle: Line Cap\nifunset: Use the default value (round ending)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -50,10 +43,10 @@
]
},
"fillColor": {
"description": "The color to fill a polygon with.\nIf undefined, this will be slightly more opaque version of the stroke line.\nUse '#00000000' to make the fill invisible",
"description": "question: What colour should be used as fill colour for polygons?\nifunset: The polygon fill colour will be a more transparent version of the stroke colour\nsuggestions: return [{if: \"value=#00000000\", then: \"Use a transparent fill (only render the outline)\"}]\ninline: The fill colour is <b>{value}</b>\ntypes: dynamic value ; string\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -61,10 +54,10 @@
]
},
"offset": {
"description": "The number of pixels this line should be moved.\nUse a positive numbe to move to the right, a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details",
"description": "question: Should the lines be moved (offsetted) with a number of pixels against the geographical lines?\nThe number of pixels this line should be moved.\nUse a positive number to move to the right in the drawing direction or a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details\nifunset: don't offset lines on the map\ninline: Pixel offset by <b>{value}</b> pixels\ntypes: dynamic value ; number\ntype: int",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "number"
@ -375,6 +368,38 @@
}
},
"additionalProperties": false
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
},
"additionalProperties": false
}
},
"$schema": "http://json-schema.org/draft-07/schema#",

View file

@ -3,10 +3,10 @@ export default {
"type": "object",
"properties": {
"color": {
"description": "The color for way-elements and SVG-elements.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead",
"description": "question: What color should lines be drawn in?\n\nFor an area, this will be the colour of the outside line.\nIf the value starts with \"--\", the style of the body element will be queried for the corresponding variable instead\n\ntypes: dynamic value ; string\ntitle: Line Colour\ninline: The line colour always is <b>{value}</b>\nifunset: Round ending\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -14,10 +14,10 @@ export default {
]
},
"width": {
"description": "The stroke-width for way-elements",
"description": "question: How wide should the line be?\nThe stroke-width for way-elements\n\ntypes: dynamic value ; string\ntitle: Line width\ninline: The line width is <b>{value} pixels</b>\ntype: pnat\nifunset: Use the default-linewidth of 7 pixels",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": [
@ -28,21 +28,14 @@ export default {
]
},
"dashArray": {
"description": "A dasharray, e.g. \"5 6\"\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap',\nDefault value: \"\" (empty string == full line)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
"description": "question: Should a dasharray be used to render the lines?\nThe dasharray defines 'pixels of line, pixels of gap, pixels of line, pixels of gap, ...'. For example, `5 6` will be 5 pixels of line followed by a 6 pixel gap.\nCannot be a dynamic property due to a mapbox limitation\nifunset: Ways are rendered with a full line",
"type": "string"
},
"lineCap": {
"description": "The form at the end of a line",
"description": "question: What form should the line-ending have?\nsuggestions: return [{if:\"value=round\",then:\"Round endings\"}, {if: \"value=square\", then: \"square endings\"}, {if: \"value=butt\", then: \"no ending (square ending at the end, without padding)\"}]\ntypes: dynamic value ; string\ntitle: Line Cap\nifunset: Use the default value (round ending)",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -50,10 +43,10 @@ export default {
]
},
"fillColor": {
"description": "The color to fill a polygon with.\nIf undefined, this will be slightly more opaque version of the stroke line.\nUse '#00000000' to make the fill invisible",
"description": "question: What colour should be used as fill colour for polygons?\nifunset: The polygon fill colour will be a more transparent version of the stroke colour\nsuggestions: return [{if: \"value=#00000000\", then: \"Use a transparent fill (only render the outline)\"}]\ninline: The fill colour is <b>{value}</b>\ntypes: dynamic value ; string\ntype: color",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "string"
@ -61,10 +54,10 @@ export default {
]
},
"offset": {
"description": "The number of pixels this line should be moved.\nUse a positive numbe to move to the right, a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details",
"description": "question: Should the lines be moved (offsetted) with a number of pixels against the geographical lines?\nThe number of pixels this line should be moved.\nUse a positive number to move to the right in the drawing direction or a negative to move to the left (left/right as defined by the drawing direction of the line).\n\nIMPORTANT: MapComplete will already normalize 'key:both:property' and 'key:both' into the corresponding 'key:left' and 'key:right' tagging (same for 'sidewalk=left/right/both' which is rewritten to 'sidewalk:left' and 'sidewalk:right')\nThis simplifies programming. Refer to the CalculatedTags.md-documentation for more details\nifunset: don't offset lines on the map\ninline: Pixel offset by <b>{value}</b> pixels\ntypes: dynamic value ; number\ntype: int",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"$ref": "#/definitions/MinimalTagRenderingConfigJson"
},
{
"type": "number"
@ -369,6 +362,37 @@ export default {
"type": "string"
}
}
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
}
}
},
"$schema": "http://json-schema.org/draft-07/schema#"

View file

@ -409,6 +409,38 @@
},
"additionalProperties": false
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
},
"additionalProperties": false
},
"Record<string,string[]>": {
"type": "object",
"additionalProperties": false

View file

@ -403,6 +403,37 @@ export default {
}
}
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
}
},
"Record<string,string[]>": {
"type": "object"
}

View file

@ -0,0 +1,90 @@
{
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
},
"definitions": {
"TagConfigJson": {
"description": "The main representation of Tags.\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for more documentation\n\ntype: tag",
"anyOf": [
{
"$ref": "#/definitions/{and:TagConfigJson[];}"
},
{
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
]
},
{
"type": "string"
}
]
},
"{and:TagConfigJson[];}": {
"type": "object",
"properties": {
"and": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"and"
],
"additionalProperties": false
},
"{or:TagConfigJson[];}": {
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
],
"additionalProperties": false
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}

View file

@ -0,0 +1,87 @@
export default {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
},
"definitions": {
"TagConfigJson": {
"description": "The main representation of Tags.\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for more documentation\n\ntype: tag",
"anyOf": [
{
"$ref": "#/definitions/{and:TagConfigJson[];}"
},
{
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
]
},
{
"type": "string"
}
]
},
"{and:TagConfigJson[];}": {
"type": "object",
"properties": {
"and": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"and"
]
},
"{or:TagConfigJson[];}": {
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}

View file

@ -1,66 +0,0 @@
{
"$ref": "#/definitions/OrTagConfigJson",
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"definitions": {
"TagConfigJson": {
"description": "The main representation of Tags.\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for more documentation",
"anyOf": [
{
"$ref": "#/definitions/AndTagConfigJson"
},
{
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
]
},
{
"type": "string"
}
]
},
"AndTagConfigJson": {
"description": "Chain many tags, to match, a single of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"and": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"and"
],
"additionalProperties": false
},
"OrTagConfigJson": {
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
],
"additionalProperties": false
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}

View file

@ -1,63 +0,0 @@
export default {
"$ref": "#/definitions/OrTagConfigJson",
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"definitions": {
"TagConfigJson": {
"description": "The main representation of Tags.\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for more documentation",
"anyOf": [
{
"$ref": "#/definitions/AndTagConfigJson"
},
{
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
]
},
{
"type": "string"
}
]
},
"AndTagConfigJson": {
"description": "Chain many tags, to match, a single of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"and": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"and"
]
},
"OrTagConfigJson": {
"description": "Chain many tags, to match, all of these should be true\nSee https://github.com/pietervdvn/MapComplete/blob/develop/Docs/Tags_format.md for documentation",
"type": "object",
"properties": {
"or": {
"type": "array",
"items": {
"$ref": "#/definitions/TagConfigJson"
}
}
},
"required": [
"or"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}

View file

@ -3,22 +3,43 @@
"type": "object",
"properties": {
"location": {
"description": "All the locations that this point should be rendered at.\nPossible values are:\n- `point`: only renders points at their location\n- `centroid`: show a symbol at the centerpoint of a (multi)Linestring and (multi)polygon. Points will _not_ be rendered with this\n- `projected_centerpoint`: Only on (multi)linestrings: calculate the centerpoint and snap it to the way\n- `start` and `end`: only on linestrings: add a point to the first/last coordinate of the LineString",
"description": "question: At what location should this icon be shown?\nmultianswer: true\nsuggestions: return [{if: \"value=point\",then: \"Show an icon for point (node) objects\"},{if: \"value=centroid\",then: \"Show an icon for line or polygon (way) objects at their centroid location\"}, {if: \"value=start\",then: \"Show an icon for line (way) objects at the start\"},{if: \"value=end\",then: \"Show an icon for line (way) object at the end\"},{if: \"value=projected_centerpoint\",then: \"Show an icon for line (way) object near the centroid location, but moved onto the line\"}]",
"type": "array",
"items": {
"type": "string"
}
},
"icon": {
"description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"marker": {
"description": "question: What marker should be used to\nThe icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one c an use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"type": "array",
"items": {
"type": "object",
"properties": {
"icon": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
},
"color": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
}
},
{
"type": "string"
}
]
"required": [
"icon"
]
}
},
"iconBadges": {
"description": "A list of extra badges to show next to the icon as small badge\nThey will be added as a 25% height icon at the bottom right of the icon, with all the badges in a flex layout.\n\nNote: strings are interpreted as icons, so layering and substituting is supported. You can use `circle:white;./my_icon.svg` to add a background circle",
@ -60,7 +81,7 @@
]
},
"anchor": {
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\nFor example, a feature attached to the ground can use 'bottom' as zooming in will give the appearance of being anchored to a fixed location.",
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\n\nifunset: Use MapComplete-default (<b>center</b>)\nsuggestions: return [{if: \"value=center\", then: \"Place the <b>center</b> of the icon on the geographical location\"},{if: \"value=top\", then: \"Place the <b>top</b> of the icon on the geographical location\"},{if: \"value=bottom\", then: \"Place the <b>bottom</b> of the icon on the geographical location\"},{if: \"value=left\", then: \"Place the <b>left</b> of the icon on the geographical location\"},{if: \"value=right\", then: \"Place the <b>right</b> of the icon on the geographical location\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -82,7 +103,7 @@
]
},
"label": {
"description": "A HTML-fragment that is shown below the icon, for example:\n<div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\nNote that, if the wayhandling hides the icon then no label is shown as well.",
"description": "question: What label should be shown beneath the marker?\nFor example: <div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\ntypes: Dynamic value | string\ninline: Always show label <b>{value}</b> beneath the marker",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -93,7 +114,7 @@
]
},
"css": {
"description": "A snippet of css code which is applied onto the container of the entire marker",
"description": "question: What CSS should be applied to the entire marker?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\nThis will be applied to the _container_ containing both the marker and the label\ninline: Apply CSS-style <b>{value}</b> to the _entire marker_\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -104,7 +125,7 @@
]
},
"cssClasses": {
"description": "A snippet of css-classes which are applied onto the container of the entire marker. They can be space-separated",
"description": "question: Which CSS-classes should be applied to the entire marker?\nThis will be applied to the _container_ containing both the marker and the label\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the entire container\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -115,7 +136,7 @@
]
},
"labelCss": {
"description": "Css that is applied onto the label",
"description": "question: What CSS should be applied to the label?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\ninline: Apply CSS-style <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -126,7 +147,7 @@
]
},
"labelCssClasses": {
"description": "Css classes that are applied onto the label; can be space-separated",
"description": "question: Which CSS-classes should be applied to the label?\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -152,7 +173,7 @@
]
},
"rotationAlignment": {
"description": "If the map is rotated, the icon will still point to the north if no rotation was applied",
"description": "question: Should the icon be rotated or tilted if the map is rotated or tilted?\nifunset: Do not rotate or tilt icons. Always keep the icons straight\nsuggestions: return [{if: \"value=canvas\", then: \"If the map is tilted, tilt the icon as well. This gives the impression of an icon that is glued to the ground.\"}, {if: \"value=map\", then: \"If the map is rotated, rotate the icon as well. This gives the impression of an icon that floats perpendicular above the ground.\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"

View file

@ -3,22 +3,43 @@ export default {
"type": "object",
"properties": {
"location": {
"description": "All the locations that this point should be rendered at.\nPossible values are:\n- `point`: only renders points at their location\n- `centroid`: show a symbol at the centerpoint of a (multi)Linestring and (multi)polygon. Points will _not_ be rendered with this\n- `projected_centerpoint`: Only on (multi)linestrings: calculate the centerpoint and snap it to the way\n- `start` and `end`: only on linestrings: add a point to the first/last coordinate of the LineString",
"description": "question: At what location should this icon be shown?\nmultianswer: true\nsuggestions: return [{if: \"value=point\",then: \"Show an icon for point (node) objects\"},{if: \"value=centroid\",then: \"Show an icon for line or polygon (way) objects at their centroid location\"}, {if: \"value=start\",then: \"Show an icon for line (way) objects at the start\"},{if: \"value=end\",then: \"Show an icon for line (way) object at the end\"},{if: \"value=projected_centerpoint\",then: \"Show an icon for line (way) object near the centroid location, but moved onto the line\"}]",
"type": "array",
"items": {
"type": "string"
}
},
"icon": {
"description": "The icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one can use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
"marker": {
"description": "question: What marker should be used to\nThe icon for an element.\nNote that this also doubles as the icon for this layer (rendered with the overpass-tags) ánd the icon in the presets.\n\nThe result of the icon is rendered as follows:\nthe resulting string is interpreted as a _list_ of items, separated by \";\". The bottommost layer is the first layer.\nAs a result, on could use a generic pin, then overlay it with a specific icon.\nTo make things even more practical, one c an use all SVG's from the folder \"assets/svg\" and _substitute the color_ in it.\nE.g. to draw a red pin, use \"pin:#f00\", to have a green circle with your icon on top, use `circle:#0f0;<path to my icon.svg>`\n\nType: icon",
"type": "array",
"items": {
"type": "object",
"properties": {
"icon": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
},
"color": {
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
},
{
"type": "string"
}
]
}
},
{
"type": "string"
}
]
"required": [
"icon"
]
}
},
"iconBadges": {
"description": "A list of extra badges to show next to the icon as small badge\nThey will be added as a 25% height icon at the bottom right of the icon, with all the badges in a flex layout.\n\nNote: strings are interpreted as icons, so layering and substituting is supported. You can use `circle:white;./my_icon.svg` to add a background circle",
@ -60,7 +81,7 @@ export default {
]
},
"anchor": {
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\nFor example, a feature attached to the ground can use 'bottom' as zooming in will give the appearance of being anchored to a fixed location.",
"description": "question: What is the anchorpoint of the icon?\n\nThis matches the geographical point with a location on the icon.\n\nifunset: Use MapComplete-default (<b>center</b>)\nsuggestions: return [{if: \"value=center\", then: \"Place the <b>center</b> of the icon on the geographical location\"},{if: \"value=top\", then: \"Place the <b>top</b> of the icon on the geographical location\"},{if: \"value=bottom\", then: \"Place the <b>bottom</b> of the icon on the geographical location\"},{if: \"value=left\", then: \"Place the <b>left</b> of the icon on the geographical location\"},{if: \"value=right\", then: \"Place the <b>right</b> of the icon on the geographical location\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -82,7 +103,7 @@ export default {
]
},
"label": {
"description": "A HTML-fragment that is shown below the icon, for example:\n<div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\nNote that, if the wayhandling hides the icon then no label is shown as well.",
"description": "question: What label should be shown beneath the marker?\nFor example: <div style=\"background: white\">{name}</div>\n\nIf the icon is undefined, then the label is shown in the center of the feature.\ntypes: Dynamic value | string\ninline: Always show label <b>{value}</b> beneath the marker",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -93,7 +114,7 @@ export default {
]
},
"css": {
"description": "A snippet of css code which is applied onto the container of the entire marker",
"description": "question: What CSS should be applied to the entire marker?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\nThis will be applied to the _container_ containing both the marker and the label\ninline: Apply CSS-style <b>{value}</b> to the _entire marker_\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -104,7 +125,7 @@ export default {
]
},
"cssClasses": {
"description": "A snippet of css-classes which are applied onto the container of the entire marker. They can be space-separated",
"description": "question: Which CSS-classes should be applied to the entire marker?\nThis will be applied to the _container_ containing both the marker and the label\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the entire container\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -115,7 +136,7 @@ export default {
]
},
"labelCss": {
"description": "Css that is applied onto the label",
"description": "question: What CSS should be applied to the label?\nYou can set the css-properties here, e.g. `background: red; font-size: 12px; `\ninline: Apply CSS-style <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -126,7 +147,7 @@ export default {
]
},
"labelCssClasses": {
"description": "Css classes that are applied onto the label; can be space-separated",
"description": "question: Which CSS-classes should be applied to the label?\n\nThe classes should be separated by a space (` `)\nYou can use most Tailwind-css classes, see https://tailwindcss.com/ for more information\nFor example: `center bg-gray-500 mx-2 my-1 rounded-full`\ninline: Apply CSS-classes <b>{value}</b> to the label\ntypes: Dynamic value ; string",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"
@ -152,7 +173,7 @@ export default {
]
},
"rotationAlignment": {
"description": "If the map is rotated, the icon will still point to the north if no rotation was applied",
"description": "question: Should the icon be rotated or tilted if the map is rotated or tilted?\nifunset: Do not rotate or tilt icons. Always keep the icons straight\nsuggestions: return [{if: \"value=canvas\", then: \"If the map is tilted, tilt the icon as well. This gives the impression of an icon that is glued to the ground.\"}, {if: \"value=map\", then: \"If the map is rotated, rotate the icon as well. This gives the impression of an icon that floats perpendicular above the ground.\"}]",
"anyOf": [
{
"$ref": "#/definitions/TagRenderingConfigJson"

View file

@ -497,6 +497,38 @@
},
"additionalProperties": false
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
},
"additionalProperties": false
},
"Record<string,string[]>": {
"type": "object",
"additionalProperties": false

View file

@ -491,6 +491,37 @@ export default {
}
}
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
}
},
"Record<string,string[]>": {
"type": "object"
},

View file

@ -336,6 +336,38 @@
},
"additionalProperties": false
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
},
"additionalProperties": false
},
"Record<string,string[]>": {
"type": "object",
"additionalProperties": false

View file

@ -330,6 +330,37 @@ export default {
}
}
},
"MinimalTagRenderingConfigJson": {
"description": "Mostly used for lineRendering and pointRendering",
"type": "object",
"properties": {
"render": {
"description": "question: What value should be rendered?\n\nThis piece of text will be shown in the infobox.\nNote that \"&LBRACEkey&RBRACE\"-parts are substituted by the corresponding values of the element.\n\nThis value will be used if there is no mapping which matches (or there are no matches)\nNote that this is a HTML-interpreted value, so you can add links as e.g. '&lt;a href='{website}'>{website}&lt;/a>' or include images such as `This is of type A &lt;br>&lt;img src='typeA-icon.svg' />`",
"type": "string"
},
"mappings": {
"description": "Allows fixed-tag inputs, shown either as radiobuttons or as checkboxes",
"type": "array",
"items": {
"type": "object",
"properties": {
"if": {
"$ref": "#/definitions/TagConfigJson",
"description": "question: When should this single mapping match?\n\nIf this condition is met, then the text under `then` will be shown.\nIf no value matches, and the user selects this mapping as an option, then these tags will be uploaded to OSM.\n\nFor example: {'if': 'diet:vegetarion=yes', 'then':'A vegetarian option is offered here'}\n\nThis can be an substituting-tag as well, e.g. {'if': 'addr:street:={_calculated_nearby_streetname}', 'then': '{_calculated_nearby_streetname}'}"
},
"then": {
"description": "question: What text should be shown?\n\nIf the condition `if` is met, the text `then` will be rendered.\nIf not known yet, the user will be presented with `then` as an option",
"type": "string"
}
},
"required": [
"if",
"then"
]
}
}
}
},
"Record<string,string[]>": {
"type": "object"
},

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -270,25 +270,29 @@
"condition": "addr:housenumber~*"
},
"iconSize": "50,50",
"icon": {
"render": "./assets/layers/address/housenumber_blank.svg",
"mappings": [
{
"if": {
"or": [
{
"and": [
"addr:housenumber=",
"nohousenumber!=yes"
"marker": [
{
"icon": {
"render": "./assets/layers/address/housenumber_blank.svg",
"mappings": [
{
"if": {
"or": [
{
"and": [
"addr:housenumber=",
"nohousenumber!=yes"
]
},
"addr:street="
]
},
"addr:street="
]
},
"then": "./assets/themes/uk_addresses/housenumber_unknown.svg"
"then": "./assets/themes/uk_addresses/housenumber_unknown.svg"
}
]
}
]
},
}
],
"location": [
"point",
"centroid"

View file

@ -1278,104 +1278,91 @@
"point",
"centroid"
],
"icon": {
"render": "./assets/themes/advertising/sign.svg",
"mappings": [
{
"if": {
"or": [
"advertising=billboard"
]
},
"then": "./assets/themes/advertising/billboard.svg"
},
{
"if": "advertising=board",
"then": "./assets/themes/advertising/board.svg"
},
{
"if": "advertising=column",
"then": "./assets/themes/advertising/column.svg"
},
{
"if": "advertising=flag",
"then": "./assets/themes/advertising/flag.svg"
},
{
"if": {
"and": [
"advertising=poster_box",
"_referencing_ways=[\"way/-1\"]"
]
},
"then": "brick_wall_square;./assets/themes/advertising/poster_box_no_support.svg"
},
{
"if": {
"and": [
"advertising=poster_box",
"_referencing_ways~*"
]
},
"then": "./assets/themes/advertising/poster_box_no_support.svg"
},
{
"if": "advertising=poster_box",
"then": "./assets/themes/advertising/poster_box.svg"
},
{
"if": {
"and": [
"advertising=screen",
"_referencing_ways=[\"way/-1\"]"
]
},
"then": "brick_wall_square;./assets/themes/advertising/screen_no_support.svg"
},
{
"if": {
"and": [
"advertising=screen",
"_referencing_ways~*"
]
},
"then": "./assets/themes/advertising/screen_no_support.svg"
},
{
"if": "advertising=screen",
"then": "./assets/themes/advertising/screen.svg"
},
{
"if": "advertising=sculpture",
"then": "./assets/themes/advertising/sculpture.svg"
},
{
"if": {
"and": [
"advertising=sign",
"_referencing_ways=[\"way/-1\"]"
]
},
"then": "brick_wall_square;./assets/themes/advertising/sign.svg"
},
{
"if": "advertising=sign",
"then": "./assets/themes/advertising/sign.svg"
},
{
"if": "advertising=tarp",
"then": "./assets/themes/advertising/tarp.svg"
},
{
"if": "advertising=totem",
"then": "./assets/themes/advertising/totem.svg"
},
{
"if": "advertising=wall_painting",
"then": "./assets/themes/advertising/wall_painting.svg"
"marker": [
{
"icon": {
"mappings": [
{
"if": "_referencing_ways=[\"way/-1\"]",
"then": "brick_wall_square"
}
]
}
]
},
},
{
"icon": {
"render": "./assets/themes/advertising/sign.svg",
"mappings": [
{
"if": {
"or": [
"advertising=billboard"
]
},
"then": "./assets/themes/advertising/billboard.svg"
},
{
"if": "advertising=board",
"then": "./assets/themes/advertising/board.svg"
},
{
"if": "advertising=column",
"then": "./assets/themes/advertising/column.svg"
},
{
"if": "advertising=flag",
"then": "./assets/themes/advertising/flag.svg"
},
{
"if": {
"and": [
"advertising=poster_box",
"_referencing_ways~*"
]
},
"then": "./assets/themes/advertising/poster_box_no_support.svg"
},
{
"if": "advertising=poster_box",
"then": "./assets/themes/advertising/poster_box.svg"
},
{
"if": {
"and": [
"advertising=screen",
"_referencing_ways~*"
]
},
"then": "./assets/themes/advertising/screen_no_support.svg"
},
{
"if": "advertising=screen",
"then": "./assets/themes/advertising/screen.svg"
},
{
"if": "advertising=sculpture",
"then": "./assets/themes/advertising/sculpture.svg"
},
{
"if": "advertising=sign",
"then": "./assets/themes/advertising/sign.svg"
},
{
"if": "advertising=tarp",
"then": "./assets/themes/advertising/tarp.svg"
},
{
"if": "advertising=totem",
"then": "./assets/themes/advertising/totem.svg"
},
{
"if": "advertising=wall_painting",
"then": "./assets/themes/advertising/wall_painting.svg"
}
]
}
}
],
"iconSize": {
"render": "40,40",
"mappings": [

View file

@ -378,13 +378,17 @@
],
"pointRendering": [
{
"icon": "./assets/themes/hailhydrant/Twemoji_1f691.svg",
"iconSize": "35,35",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/themes/hailhydrant/Twemoji_1f691.svg"
}
]
}
],
"lineRendering": [

View file

@ -800,7 +800,15 @@
],
"pointRendering": [
{
"icon": "circle:white;./assets/themes/artwork/artwork.svg",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/themes/artwork/artwork.svg"
}
],
"location": [
"point",
"centroid"
@ -812,15 +820,5 @@
"color": "#0000ff",
"width": "10"
}
],
"pl": {
"title": {
"mappings": {
"0": {
"then": "{name}"
}
},
"render": "turbina wiatrowa"
}
}
]
}

View file

@ -476,6 +476,23 @@
]
}
},
"pointRendering": [
{
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/atm/atm.svg"
}
],
"location": [
"point",
"centroid"
]
}
],
"filter": [
"open_now",
{
@ -495,14 +512,5 @@
]
}
],
"pointRendering": [
{
"icon": "circle:white;./assets/layers/atm/atm.svg",
"location": [
"point",
"centroid"
]
}
],
"lineRendering": []
}

View file

@ -107,7 +107,15 @@
],
"pointRendering": [
{
"icon": "circle:white;./assets/layers/bank/bank.svg",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/bank/bank.svg"
}
],
"location": [
"point",
"centroid"

View file

@ -604,7 +604,11 @@
},
"pointRendering": [
{
"icon": "./assets/layers/barrier/barrier.svg",
"marker": [
{
"icon": "./assets/layers/barrier/barrier.svg"
}
],
"location": [
"point"
]

View file

@ -1125,7 +1125,6 @@
],
"pointRendering": [
{
"icon": "circle:#99bd54;./assets/layers/bench/bench.svg",
"iconSize": "35,35",
"iconBadges": [
{
@ -1137,7 +1136,16 @@
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "#99bd54"
},
{
"icon": "./assets/layers/bench/bench.svg"
}
]
}
],
"lineRendering": []

View file

@ -259,12 +259,20 @@
},
"pointRendering": [
{
"icon": "circle:white;./assets/themes/benches/bench_public_transport.svg",
"iconSize": "35,35",
"location": [
"point"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/themes/benches/bench_public_transport.svg"
}
]
}
],
"lineRendering": [

View file

@ -328,7 +328,6 @@
"deletion": true,
"pointRendering": [
{
"icon": "pin:#22ff55;./assets/layers/bicycle_library/bicycle_library.svg",
"iconBadges": [
{
"if": "opening_hours~*",
@ -344,7 +343,16 @@
"point",
"centroid"
],
"anchor": "bottom"
"anchor": "bottom",
"marker": [
{
"icon": "pin",
"color": "#22ff55"
},
{
"icon": "./assets/layers/bicycle_library/bicycle_library.svg"
}
]
}
],
"lineRendering": [

View file

@ -586,13 +586,17 @@
},
"pointRendering": [
{
"icon": "./assets/themes/bicycle_rental/logo.svg",
"iconSize": "40,40",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/themes/bicycle_rental/logo.svg"
}
]
}
],
"lineRendering": [

View file

@ -316,7 +316,6 @@
},
"pointRendering": [
{
"icon": "pin:#ffffff;./assets/layers/bicycle_tube_vending_machine/pinIcon.svg",
"iconBadges": [
{
"if": {
@ -333,7 +332,16 @@
"point",
"centroid"
],
"anchor": "bottom"
"anchor": "bottom",
"marker": [
{
"icon": "pin",
"color": "#ffffff"
},
{
"icon": "./assets/layers/bicycle_tube_vending_machine/pinIcon.svg"
}
]
}
],
"lineRendering": [

View file

@ -351,12 +351,20 @@
},
"pointRendering": [
{
"icon": "pin:#684c2b;./assets/layers/bike_cafe/bike_cafe.svg",
"iconSize": "50,50",
"anchor": "bottom",
"location": [
"point",
"centroid"
],
"marker": [
{
"icon": "pin",
"color": "#684c2b"
},
{
"icon": "./assets/layers/bike_cafe/bike_cafe.svg"
}
]
}
],

View file

@ -249,7 +249,6 @@
},
"pointRendering": [
{
"icon": "./assets/layers/bike_cleaning/bike_cleaning.svg",
"iconBadges": [
{
"if": {
@ -270,7 +269,12 @@
"point",
"centroid"
],
"anchor": "bottom"
"anchor": "bottom",
"marker": [
{
"icon": "./assets/layers/bike_cleaning/bike_cleaning.svg"
}
]
}
],
"lineRendering": []

View file

@ -716,13 +716,21 @@
},
"pointRendering": [
{
"icon": "pin:#5473de;./assets/layers/bike_parking/parking.svg",
"iconSize": "40,40",
"location": [
"point",
"centroid"
],
"anchor": "bottom"
"anchor": "bottom",
"marker": [
{
"icon": "pin",
"color": "#5473de"
},
{
"icon": "./assets/layers/bike_parking/parking.svg"
}
]
}
],
"lineRendering": [

View file

@ -999,53 +999,107 @@
},
"pointRendering": [
{
"icon": {
"render": "pin:#88d32c;./assets/layers/bike_repair_station/repair_station.svg",
"mappings": [
{
"if": {
"and": [
"service:bicycle:pump=yes",
"service:bicycle:tools=yes",
"service:bicycle:pump:operational_status=broken"
]
},
"then": "pin:#88d32c;./assets/layers/bike_repair_station/repair_station_broken_pump.svg"
},
{
"if": {
"and": [
"service:bicycle:pump=yes",
"service:bicycle:tools=yes"
]
},
"then": "pin:#30abf0;./assets/layers/bike_repair_station/repair_station_pump.svg"
},
{
"if": {
"and": [
"service:bicycle:pump:operational_status=broken",
"service:bicycle:tools=no"
]
},
"then": "pin:black;./assets/layers/bike_repair_station/broken_pump.svg"
},
{
"if": {
"and": [
"service:bicycle:pump=yes",
{
"or": [
"service:bicycle:tools=no",
"service:bicycle:tools="
"marker": [
{
"icon": "pin",
"color": {
"render": "#88d32c",
"mappings": [
{
"if": {
"and": [
"service:bicycle:pump=yes",
"service:bicycle:tools=yes",
"service:bicycle:pump:operational_status=broken"
]
}
]
},
"then": "pin:#e1783a;./assets/layers/bike_repair_station/pump.svg"
},
"then": "#88d32c"
},
{
"if": {
"and": [
"service:bicycle:pump=yes",
"service:bicycle:tools=yes"
]
},
"then": "#30abf0"
},
{
"if": {
"and": [
"service:bicycle:pump:operational_status=broken",
"service:bicycle:tools=no"
]
},
"then": "black"
},
{
"if": {
"and": [
"service:bicycle:pump=yes",
{
"or": [
"service:bicycle:tools=no",
"service:bicycle:tools="
]
}
]
},
"then": "#e1783a"
}
]
}
]
},
},
{
"icon": {
"render": "./assets/layers/bike_repair_station/repair_station.svg",
"mappings": [
{
"if": {
"and": [
"service:bicycle:pump=yes",
"service:bicycle:tools=yes",
"service:bicycle:pump:operational_status=broken"
]
},
"then": "./assets/layers/bike_repair_station/repair_station_broken_pump.svg"
},
{
"if": {
"and": [
"service:bicycle:pump=yes",
"service:bicycle:tools=yes"
]
},
"then": "./assets/layers/bike_repair_station/repair_station_pump.svg"
},
{
"if": {
"and": [
"service:bicycle:pump:operational_status=broken",
"service:bicycle:tools=no"
]
},
"then": "./assets/layers/bike_repair_station/broken_pump.svg"
},
{
"if": {
"and": [
"service:bicycle:pump=yes",
{
"or": [
"service:bicycle:tools=no",
"service:bicycle:tools="
]
}
]
},
"then": "./assets/layers/bike_repair_station/pump.svg"
}
]
}
}
],
"iconBadges": [
{
"if": "operator=De Fietsambassade Gent",

View file

@ -867,19 +867,47 @@
"deletion": true,
"pointRendering": [
{
"icon": {
"render": "pin:#f04c4c;./assets/layers/bike_shop/repair_shop.svg",
"mappings": [
{
"if": "operator=De Fietsambassade Gent",
"then": "./assets/themes/cyclofix/fietsambassade_gent_logo_small.svg"
"marker": [
{
"icon": {
"render": "pin",
"mappings": [
{
"if": "operator=De Fietsambassade Gent",
"then": null
}
]
},
{
"if": "service:bicycle:retail=yes",
"then": "pin:#353d57;./assets/layers/bike_shop/shop.svg"
"color": {
"render": "#f04c4c",
"mappings": [
{
"if": "operator=De Fietsambassade Gent",
"then": null
},
{
"if": "service:bicycle:retail=yes",
"then": "#353d57"
}
]
}
]
},
},
{
"icon": {
"render": "./assets/layers/bike_shop/repair_shop.svg",
"mappings": [
{
"if": "operator=De Fietsambassade Gent",
"then": "./assets/themes/cyclofix/fietsambassade_gent_logo_small.svg"
},
{
"if": "service:bicycle:retail=yes",
"then": "./assets/layers/bike_shop/shop.svg"
}
]
}
}
],
"iconBadges": [
{
"if": "opening_hours~*",

View file

@ -84,13 +84,17 @@
},
"pointRendering": [
{
"icon": "./assets/layers/bike_themed_object/other_services.svg",
"iconSize": "50,50",
"location": [
"point",
"centroid"
],
"anchor": "bottom"
"anchor": "bottom",
"marker": [
{
"icon": "./assets/layers/bike_themed_object/other_services.svg"
}
]
}
],
"lineRendering": [

View file

@ -167,12 +167,20 @@
},
"pointRendering": [
{
"icon": "circle:white;./assets/layers/binocular/telescope.svg",
"iconSize": "40,40",
"location": [
"point"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/binocular/telescope.svg"
}
]
}
],
"lineRendering": [

View file

@ -408,21 +408,25 @@
},
"pointRendering": [
{
"icon": {
"render": "./assets/layers/birdhide/birdhide.svg",
"mappings": [
{
"if": {
"or": [
"building=yes",
"shelter=yes",
"amenity=shelter"
]
},
"then": "./assets/layers/birdhide/birdshelter.svg"
"marker": [
{
"icon": {
"render": "./assets/layers/birdhide/birdhide.svg",
"mappings": [
{
"if": {
"or": [
"building=yes",
"shelter=yes",
"amenity=shelter"
]
},
"then": "./assets/layers/birdhide/birdshelter.svg"
}
]
}
]
},
}
],
"location": [
"point",
"centroid"

View file

@ -333,19 +333,6 @@
},
"pointRendering": [
{
"icon": {
"render": "circle:white;./assets/layers/cafe_pub/pub.svg",
"mappings": [
{
"if": "amenity=cafe",
"then": "circle:white;./assets/layers/cafe_pub/cafe.svg"
},
{
"if": "amenity=nightclub",
"then": "circle:white;./assets/layers/cafe_pub/nightclub.svg"
}
]
},
"iconBadges": [
{
"if": "opening_hours~*",
@ -363,6 +350,23 @@
"location": [
"point",
"centroid"
],
"marker": [
{
"icon": {
"render": "circle:white;./assets/layers/cafe_pub/pub.svg",
"mappings": [
{
"if": "amenity=cafe",
"then": "circle:white;./assets/layers/cafe_pub/cafe.svg"
},
{
"if": "amenity=nightclub",
"then": "circle:white;./assets/layers/cafe_pub/nightclub.svg"
}
]
}
}
]
}
],

View file

@ -118,12 +118,20 @@
],
"pointRendering": [
{
"icon": "circle:white;./assets/layers/car_rental/car_rental.svg",
"location": [
"point",
"centroid"
],
"label": "<div class='bg-white block p-1 rounded'>{name}</div>"
"label": "<div class='bg-white block p-1 rounded'>{name}</div>",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/car_rental/car_rental.svg"
}
]
}
],
"lineRendering": [

View file

@ -5238,60 +5238,32 @@
"point",
"centroid"
],
"icon": {
"render": "pin:#fff;./assets/themes/charging_stations/plug.svg",
"mappings": [
{
"if": "bicycle=yes",
"then": "pin:#fff;./assets/themes/charging_stations/bicycle.svg"
},
{
"if": {
"or": [
"car=yes",
"motorcar=yes"
]
},
"then": "pin:#fff;./assets/themes/charging_stations/car.svg"
}
]
},
"iconBadges": [
"marker": [
{
"if": {
"or": [
"disused:amenity=charging_station",
"operational_status=broken"
]
},
"then": "close:#c22;"
"icon": "pin",
"color": "#fff"
},
{
"if": {
"or": [
"proposed:amenity=charging_station",
"planned:amenity=charging_station"
]
},
"then": "./assets/layers/charging_station/under_construction.svg"
},
{
"if": {
"and": [
"bicycle=yes",
"icon": {
"render": "./assets/themes/charging_stations/plug.svg",
"mappings": [
{
"or": [
"motorcar=yes",
"car=yes"
]
"if": "bicycle=yes",
"then": "./assets/themes/charging_stations/bicycle.svg"
},
{
"if": {
"or": [
"car=yes",
"motorcar=yes"
]
},
"then": "./assets/themes/charging_stations/car.svg"
}
]
},
"then": "circle:#fff;./assets/themes/charging_stations/car.svg"
}
}
],
"anchor": "bottom",
"iconSize": "50,50"
]
}
],
"lineRendering": []

View file

@ -728,30 +728,37 @@
}
}
],
"mapRendering": [
"lineRendering": [],
"pointRendering": [
{
"location": [
"point",
"centroid"
],
"icon": {
"render": "pin:#fff;./assets/themes/charging_stations/plug.svg",
"mappings": [
{
"if": "bicycle=yes",
"then": "pin:#fff;./assets/themes/charging_stations/bicycle.svg"
},
{
"if": {
"or": [
"car=yes",
"motorcar=yes"
]
"marker": [{
"icon": "pin",
"color": "#fff"
},{
"icon": {
"render":"./assets/themes/charging_stations/plug.svg",
"mappings": [
{
"if": "bicycle=yes",
"then": "./assets/themes/charging_stations/bicycle.svg"
},
"then": "pin:#fff;./assets/themes/charging_stations/car.svg"
}
]
},
{
"if": {
"or": [
"car=yes",
"motorcar=yes"
]
},
"then": "./assets/themes/charging_stations/car.svg"
}
]
}
}],
"iconBadges": [
{
"if": {

View file

@ -307,13 +307,17 @@
],
"pointRendering": [
{
"icon": "./assets/themes/climbing/climbing_no_rope.svg",
"iconSize": "40,40",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/themes/climbing/climbing_no_rope.svg"
}
]
}
],
"lineRendering": [

View file

@ -165,7 +165,6 @@
],
"pointRendering": [
{
"icon": "./assets/themes/climbing/club.svg",
"iconBadges": [
{
"if": "opening_hours~*",
@ -185,7 +184,12 @@
}
]
},
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/themes/climbing/club.svg"
}
]
}
],
"lineRendering": []

View file

@ -481,7 +481,6 @@
],
"pointRendering": [
{
"icon": "./assets/themes/climbing/climbing_gym.svg",
"iconBadges": [
{
"if": "opening_hours~*",
@ -501,7 +500,12 @@
}
]
},
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/themes/climbing/climbing_gym.svg"
}
]
}
],
"lineRendering": []

View file

@ -122,7 +122,11 @@
],
"pointRendering": [
{
"icon": "./assets/themes/climbing/climbing_unknown.svg",
"marker": [
{
"icon": "./assets/themes/climbing/climbing_unknown.svg"
}
],
"location": [
"point",
"centroid"

View file

@ -228,7 +228,6 @@
],
"pointRendering": [
{
"icon": "circle:white;./assets/themes/climbing/climbing_route.svg",
"iconSize": "28,28",
"location": [
"point",
@ -251,7 +250,16 @@
}
]
},
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/themes/climbing/climbing_route.svg"
}
]
}
],
"lineRendering": [

View file

@ -494,15 +494,19 @@
"point",
"centroid"
],
"icon": {
"render": "./assets/layers/clock/clock.svg",
"mappings": [
{
"if": "display=digital",
"then": "./assets/layers/clock/clock_digital.svg"
"marker": [
{
"icon": {
"render": "./assets/layers/clock/clock.svg",
"mappings": [
{
"if": "display=digital",
"then": "./assets/layers/clock/clock_digital.svg"
}
]
}
]
},
}
],
"iconSize": {
"render": "40,40,center",
"mappings": [

View file

@ -7,48 +7,108 @@
"title": "Conflation",
"pointRendering": [
{
"location": "point",
"icon": {
"render": "addSmall:#000",
"mappings": [
{
"if": "detach=yes",
"then": "circle:white;close:#c33"
}
]
},
"iconSize": "10,10",
"anchor": "center"
},
{
"location": "end",
"icon": {
"render": "circle:#0f0",
"mappings": [
{
"if": "reprojection=yes",
"then": "none:#f00"
"location": [
"point"
],
"marker": [
{
"color": {
"render": "#000",
"mappings": [
{
"if": "detach=yes",
"then": "white"
}
]
},
{
"if": "move=no",
"then": "ring:#0f0"
"icon": {
"render": "addSmall:#000",
"mappings": [
{
"if": "detach=yes",
"then": "white"
}
]
}
]
},
},
{
"icon": {
"mappings": [
{
"if": "detach=yes",
"then": "close"
}
]
},
"color": "#C33"
}
],
"iconSize": "10,10",
"anchor": "center"
},
{
"location": "start",
"icon": {
"render": "square:#f00",
"mappings": [
{
"if": "reprojection=yes",
"then": "reload:#f00"
"location": [
"end"
],
"marker": [
{
"icon": {
"render": "circle",
"mappings": [
{
"if": "reprojection=yes",
"then": "none"
},
{
"if": "move=no",
"then": "ring"
}
]
},
"color": {
"render": "#0f0",
"mappings": [
{
"if": "reprojection=yes",
"then": "#f00"
},
{
"if": "move=no",
"then": "#0f0"
}
]
}
]
},
}
],
"iconSize": "10,10",
"anchor": "center"
},
{
"location": [
"start"
],
"marker": [
{
"icon": {
"render": "square",
"mappings": [
{
"if": "reprojection=yes",
"then": "reload"
}
]
},
"color": {
"render": "#f00",
"mappings": [
{
"if": "reprojection=yes",
"then": "#f00"
}
]
}
}
],
"iconSize": {
"render": "10,10,center",
"mappings": [
@ -71,16 +131,7 @@
}
]
},
"color": "#00f",
"dasharray": {
"render": "",
"mappings": [
{
"if": "resulting-geometry=yes",
"then": "6 6"
}
]
}
"color": "#00f"
}
]
}

View file

@ -27,9 +27,13 @@
"centroid"
],
"iconSize": "50,50",
"icon": "./assets/layers/crab_address/housenumber_blank.svg",
"label": "<div style='margin-top: -42px; color: white' class='rounded-full p-1 font-bold relative'>{_HNRLABEL}</div>",
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/layers/crab_address/housenumber_blank.svg"
}
]
}
],
"lineRendering": []

View file

@ -647,20 +647,24 @@
],
"pointRendering": [
{
"icon": {
"render": "./assets/layers/crossings/pedestrian_crossing.svg",
"mappings": [
{
"if": {
"or": [
"highway=traffic_signals",
"crossing=traffic_signals"
]
},
"then": "./assets/layers/crossings/traffic_lights.svg"
"marker": [
{
"icon": {
"render": "./assets/layers/crossings/pedestrian_crossing.svg",
"mappings": [
{
"if": {
"or": [
"highway=traffic_signals",
"crossing=traffic_signals"
]
},
"then": "./assets/layers/crossings/traffic_lights.svg"
}
]
}
]
},
}
],
"location": [
"point"
]

View file

@ -1695,10 +1695,14 @@
},
"pointRendering": [
{
"icon": "./assets/themes/cycle_infra/bicycleway.svg",
"iconSize": "40,40",
"location": [
"point"
],
"marker": [
{
"icon": "./assets/themes/cycle_infra/bicycleway.svg"
}
]
}
],

View file

@ -683,7 +683,7 @@
},
"allowMove": {
"enableRelocation": false,
"enableImproveAccuraccy": true
"enableImproveAccuracy": true
},
"filter": [
"has_image",
@ -691,15 +691,23 @@
],
"pointRendering": [
{
"icon": {
"render": "square:#008754;./assets/layers/defibrillator/defibrillator.svg",
"mappings": [
{
"if": "_recently_surveyed=true",
"then": "square:#28ba3d;./assets/layers/defibrillator/defibrillator.svg"
"marker": [
{
"icon": "square",
"color": {
"render": "#008754",
"mappings": [
{
"if": "_recently_surveyed=true",
"then": "#28ba3d"
}
]
}
]
},
},
{
"icon": "./assets/layers/defibrillator/defibrillator.svg"
}
],
"location": [
"point"
]

View file

@ -76,13 +76,21 @@
"allowMove": true,
"pointRendering": [
{
"icon": "circle:white;./assets/layers/dentist/dentist.svg",
"iconSize": "40,40",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/dentist/dentist.svg"
}
]
}
],
"lineRendering": []

View file

@ -35,14 +35,19 @@
"presets": [],
"pointRendering": [
{
"icon": "direction_gradient:var(--catch-detail-color)",
"iconSize": "200,200",
"location": [
"point",
"centroid"
],
"rotation": "{_direction:numerical}deg",
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "direction_gradient",
"color": "var(--catch-detail-color)"
}
]
}
],
"lineRendering": [

View file

@ -147,13 +147,21 @@
"allowMove": true,
"pointRendering": [
{
"icon": "circle:white;./assets/layers/doctors/doctors.svg",
"iconSize": "40,40",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/doctors/doctors.svg"
}
]
}
],
"lineRendering": []

View file

@ -177,7 +177,6 @@
"point",
"centroid"
],
"icon": "./assets/layers/dogpark/dog-park.svg",
"iconSize": "40,40",
"label": {
"mappings": [
@ -187,7 +186,12 @@
}
]
},
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/layers/dogpark/dog-park.svg"
}
]
}
],
"lineRendering": [

View file

@ -256,7 +256,6 @@
},
"pointRendering": [
{
"icon": "pin:#6BC4F7;./assets/layers/drinking_water/drips.svg",
"iconBadges": [
{
"if": {
@ -273,7 +272,16 @@
"point",
"centroid"
],
"anchor": "bottom"
"anchor": "bottom",
"marker": [
{
"icon": "pin",
"color": "#6BC4F7"
},
{
"icon": "./assets/layers/drinking_water/drips.svg"
}
]
}
],
"lineRendering": []

View file

@ -331,7 +331,6 @@
],
"pointRendering": [
{
"icon": "circle:white;./assets/layers/elevator/elevator_wheelchair.svg",
"iconSize": "40,40",
"location": [
"point",
@ -348,7 +347,16 @@
"then": "close:#c33"
}
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/elevator/elevator_wheelchair.svg"
}
]
}
],
"lineRendering": []

View file

@ -389,7 +389,6 @@
],
"pointRendering": [
{
"icon": "circle:#FFFFFF00;./assets/themes/elongated_coin/penny.svg",
"location": [
"point",
"centroid"
@ -399,6 +398,15 @@
"if": "opening_hours~*",
"then": "icons.isOpen"
}
],
"marker": [
{
"icon": "circle",
"color": "#FFFFFF00"
},
{
"icon": "./assets/themes/elongated_coin/penny.svg"
}
]
}
],

View file

@ -550,15 +550,23 @@
"point",
"centroid"
],
"icon": {
"render": "circle:white;./assets/layers/entrance/entrance.svg",
"mappings": [
{
"if": "entrance=emergency",
"then": "circle:white;./assets/layers/entrance/emergency_door.svg"
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": {
"render": "./assets/layers/entrance/entrance.svg",
"mappings": [
{
"if": "entrance=emergency",
"then": "./assets/layers/entrance/emergency_door.svg"
}
]
}
]
}
}
]
}
],
"lineRendering": []

View file

@ -267,25 +267,29 @@
],
"pointRendering": [
{
"icon": {
"render": "pin:#05d7fcaa",
"mappings": [
{
"if": {
"and": [
"name:etymology=",
"name:etymology:wikidata="
]
},
"then": "pin:#fcca05aa"
}
]
},
"iconSize": "40,40",
"location": [
"point"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": {
"render": "pin:#05d7fcaa",
"mappings": [
{
"if": {
"and": [
"name:etymology=",
"name:etymology:wikidata="
]
},
"then": "pin:#fcca05aa"
}
]
}
}
]
}
],
"lineRendering": [

View file

@ -164,13 +164,17 @@
],
"pointRendering": [
{
"icon": "./assets/themes/hailhydrant/Twemoji12_1f9ef.svg",
"iconSize": "20,20",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/themes/hailhydrant/Twemoji12_1f9ef.svg"
}
]
}
],
"lineRendering": []

View file

@ -297,13 +297,17 @@
],
"pointRendering": [
{
"icon": "./assets/themes/hailhydrant/Twemoji12_1f692.svg",
"iconSize": "35,35",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/themes/hailhydrant/Twemoji12_1f692.svg"
}
]
}
],
"lineRendering": [

View file

@ -99,7 +99,6 @@
"point",
"centroid"
],
"icon": "circle:white;./assets/layers/fitness_centre/gym.svg",
"iconSize": "40,40",
"label": "<div style='background: white; padding: 0.25em; border-radius:0.5em'>{name}</div>",
"iconBadges": [
@ -108,7 +107,16 @@
"then": "icons.isOpen"
}
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/fitness_centre/gym.svg"
}
]
}
],
"lineRendering": []

View file

@ -425,7 +425,6 @@
"point",
"centroid"
],
"icon": "circle:white;./assets/layers/fitness_station/fitness.svg",
"iconSize": "40,40",
"iconBadges": [
{
@ -438,7 +437,16 @@
"then": "icons.isOpen"
}
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/fitness_station/fitness.svg"
}
]
}
],
"lineRendering": []

View file

@ -78,8 +78,12 @@
"centroid",
"point"
],
"icon": "./assets/svg/bug.svg",
"label": "<div class='bg-white rounded p-2'>{fixme}</div>"
"label": "<div class='bg-white rounded p-2'>{fixme}</div>",
"marker": [
{
"icon": "./assets/svg/bug.svg"
}
]
}
],
"lineRendering": [

View file

@ -1165,24 +1165,6 @@
},
"pointRendering": [
{
"icon": {
"render": "circle:white;./assets/layers/food/restaurant.svg",
"mappings": [
{
"if": {
"and": [
"amenity=fast_food",
"cuisine=friture"
]
},
"then": "circle:white;./assets/layers/food/fries.svg"
},
{
"if": "amenity=fast_food",
"then": "circle:white;./assets/layers/food/fastfood.svg"
}
]
},
"iconBadges": [
{
"if": "opening_hours~*",
@ -1222,6 +1204,28 @@
"location": [
"point",
"centroid"
],
"marker": [
{
"icon": {
"render": "circle:white;./assets/layers/food/restaurant.svg",
"mappings": [
{
"if": {
"and": [
"amenity=fast_food",
"cuisine=friture"
]
},
"then": "circle:white;./assets/layers/food/fries.svg"
},
{
"if": "amenity=fast_food",
"then": "circle:white;./assets/layers/food/fastfood.svg"
}
]
}
}
]
}
],

View file

@ -282,13 +282,17 @@
},
"pointRendering": [
{
"icon": "./assets/layers/ghost_bike/ghost_bike.svg",
"iconSize": "40,40",
"location": [
"point",
"centroid"
],
"anchor": "bottom"
"anchor": "bottom",
"marker": [
{
"icon": "./assets/layers/ghost_bike/ghost_bike.svg"
}
]
}
],
"lineRendering": []

View file

@ -68,13 +68,21 @@
],
"pointRendering": [
{
"icon": "circle:white;./assets/layers/governments/government.svg",
"iconSize": "40,40",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/governments/government.svg"
}
]
}
],
"lineRendering": []

View file

@ -5,15 +5,20 @@
"source": "special",
"pointRendering": [
{
"icon": {
"render": "crosshair:var(--catch-detail-color)",
"mappings": [
{
"if": "speed>2",
"then": "gps_arrow"
"marker": [
{
"color": "--catch-detail-color",
"icon": {
"render": "crosshair",
"mappings": [
{
"if": "speed>2",
"then": "gps_arrow"
}
]
}
]
},
}
],
"iconSize": "40,40",
"pitchAlignment": "map",
"rotation": {

View file

@ -11,9 +11,14 @@
"point",
"centroid"
],
"icon": "square:red",
"iconSize": "5,5",
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "square",
"color": "red"
}
]
}
],
"lineRendering": []

View file

@ -347,19 +347,23 @@
"deletion": true,
"pointRendering": [
{
"icon": {
"render": "./assets/themes/hackerspaces/glider.svg",
"mappings": [
{
"if": {
"and": [
"hackerspace=makerspace"
]
},
"then": "./assets/themes/hackerspaces/led.png"
"marker": [
{
"icon": {
"render": "./assets/themes/hackerspaces/glider.svg",
"mappings": [
{
"if": {
"and": [
"hackerspace=makerspace"
]
},
"then": "./assets/themes/hackerspaces/led.png"
}
]
}
]
},
}
],
"iconSize": "40,40",
"location": [
"point",

View file

@ -5,11 +5,19 @@
"source": "special",
"pointRendering": [
{
"icon": "circle:white;./assets/svg/home.svg",
"iconSize": "20,20",
"location": [
"point",
"centroid"
],
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/svg/home.svg"
}
]
}
],

View file

@ -117,13 +117,21 @@
],
"pointRendering": [
{
"icon": "circle:white;./assets/layers/hospital/hospital.svg",
"iconSize": "40,40",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/hospital/hospital.svg"
}
]
}
],
"lineRendering": [

View file

@ -107,9 +107,17 @@
"point",
"centroid"
],
"icon": "circle:white;./assets/layers/hotel/hotel.svg",
"iconSize": "40,40",
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "circle",
"color": "white"
},
{
"icon": "./assets/layers/hotel/hotel.svg"
}
]
}
],
"lineRendering": []

View file

@ -527,13 +527,17 @@
],
"pointRendering": [
{
"icon": "./assets/themes/hailhydrant/hydrant.svg",
"iconSize": "20,20",
"location": [
"point",
"centroid"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/themes/hailhydrant/hydrant.svg"
}
]
}
],
"lineRendering": [

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M176 56c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24zm24 48h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H200c-13.3 0-24-10.7-24-24s10.7-24 24-24zM56 176H72c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24s10.7-24 24-24zM0 283.4C0 268.3 12.3 256 27.4 256H484.6c15.1 0 27.4 12.3 27.4 27.4c0 70.5-44.4 130.7-106.7 154.1L403.5 452c-2 16-15.6 28-31.8 28H140.2c-16.1 0-29.8-12-31.8-28l-1.8-14.4C44.4 414.1 0 353.9 0 283.4zM224 200c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H248c-13.3 0-24-10.7-24-24zm-96 0c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H152c-13.3 0-24-10.7-24-24zm-24-96h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H104c-13.3 0-24-10.7-24-24s10.7-24 24-24zm216 96c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H344c-13.3 0-24-10.7-24-24zm-24-96h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H296c-13.3 0-24-10.7-24-24s10.7-24 24-24zm120 96c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H440c-13.3 0-24-10.7-24-24zm-24-96h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H392c-13.3 0-24-10.7-24-24s10.7-24 24-24zM296 32h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H296c-13.3 0-24-10.7-24-24s10.7-24 24-24z"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Font-Awesome icon set
SPDX-License-Identifier: CC-BY 4.0

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M32 32C32 14.3 46.3 0 64 0H256c17.7 0 32 14.3 32 32s-14.3 32-32 32H64C46.3 64 32 49.7 32 32zM0 160c0-35.3 28.7-64 64-64H256c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V160zm96 64c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32H224c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H96z"/></svg>

After

Width:  |  Height:  |  Size: 596 B

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Font-Awesome icon set
SPDX-License-Identifier: CC-BY 4.0

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M176 32c44.2 0 80 35.8 80 80v16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80V48c0-8.8 7.2-16 16-16zM56 64h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24s10.7-24 24-24zM24 136H136c13.3 0 24 10.7 24 24s-10.7 24-24 24H24c-13.3 0-24-10.7-24-24s10.7-24 24-24zm8 96c0-13.3 10.7-24 24-24h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H56c-13.3 0-24-10.7-24-24zM272 48c0-8.8 7.2-16 16-16c44.2 0 80 35.8 80 80v16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80V48zM400 32c44.2 0 80 35.8 80 80v16c0 8.8-7.2 16-16 16c-44.2 0-80-35.8-80-80V48c0-8.8 7.2-16 16-16zm80 160v16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16V256c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM352 176c8.8 0 16 7.2 16 16v16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16V256c0-44.2 35.8-80 80-80zm-96 16v16c0 44.2-35.8 80-80 80c-8.8 0-16-7.2-16-16V256c0-44.2 35.8-80 80-80c8.8 0 16 7.2 16 16zM3.5 347.6C1.6 332.9 13 320 27.8 320H484.2c14.8 0 26.2 12.9 24.4 27.6C502.3 397.8 464.2 437 416 446v2c0 17.7-14.3 32-32 32H128c-17.7 0-32-14.3-32-32v-2c-48.2-9-86.3-48.2-92.5-98.4z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Font-Awesome icon set
SPDX-License-Identifier: CC-BY 4.0

File diff suppressed because it is too large Load diff

View file

@ -49,6 +49,16 @@
"https://github.com/FortAwesome/Font-Awesome"
]
},
{
"path": "fas-bowl-rice.svg",
"license": "CC-BY 4.0",
"authors": [
"Font-Awesome icon set"
],
"sources": [
"https://github.com/FortAwesome/Font-Awesome"
]
},
{
"path": "fas-camera-retro.svg",
"license": "CC-BY-4.0",
@ -209,6 +219,16 @@
"https://github.com/FortAwesome/Font-Awesome"
]
},
{
"path": "fas-jar.svg",
"license": "CC-BY 4.0",
"authors": [
"Font-Awesome icon set"
],
"sources": [
"https://github.com/FortAwesome/Font-Awesome"
]
},
{
"path": "fas-key.svg",
"license": "CC-BY-4.0",
@ -299,6 +319,16 @@
"https://github.com/FortAwesome/Font-Awesome"
]
},
{
"path": "fas-plate-wheat.svg",
"license": "CC-BY 4.0",
"authors": [
"Font-Awesome icon set"
],
"sources": [
"https://github.com/FortAwesome/Font-Awesome"
]
},
{
"path": "fas-plug.svg",
"license": "CC-BY-4.0",

View file

@ -15,9 +15,14 @@
"point",
"centroid"
],
"icon": "square:red;",
"iconSize": "15,15",
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "square",
"color": "red"
}
]
}
],
"lineRendering": []

View file

@ -435,43 +435,47 @@
"point",
"centroid"
],
"icon": {
"mappings": [
{
"if": {
"or": [
"room=administration",
"room=auditorium",
"room=bedroom",
"room=chapel",
"room=class",
"room=computer",
"room=conference",
"room=crypt",
"room=kitchen",
"room=laboratory",
"room=library",
"room=locker",
"room=nursery",
"room=office",
"room=prison_cell",
"room=restaurant",
"room=security_check",
"room=sport",
"room=storage",
"room=technical",
"room=toilets",
"room=waiting"
]
},
"then": "./assets/layers/indoors/room_{room}.svg"
},
{
"if": "room=toilet",
"then": "./assets/layers/indoors/room_toilets.svg"
"marker": [
{
"icon": {
"mappings": [
{
"if": {
"or": [
"room=administration",
"room=auditorium",
"room=bedroom",
"room=chapel",
"room=class",
"room=computer",
"room=conference",
"room=crypt",
"room=kitchen",
"room=laboratory",
"room=library",
"room=locker",
"room=nursery",
"room=office",
"room=prison_cell",
"room=restaurant",
"room=security_check",
"room=sport",
"room=storage",
"room=technical",
"room=toilets",
"room=waiting"
]
},
"then": "./assets/layers/indoors/room_{room}.svg"
},
{
"if": "room=toilet",
"then": "./assets/layers/indoors/room_toilets.svg"
}
]
}
]
},
}
],
"iconSize": "15,15",
"anchor": "bottom"
}

View file

@ -79,12 +79,16 @@
},
"pointRendering": [
{
"icon": "./assets/layers/information_board/board.svg",
"iconSize": "40,40",
"location": [
"point"
],
"anchor": "center"
"anchor": "center",
"marker": [
{
"icon": "./assets/layers/information_board/board.svg"
}
]
}
],
"lineRendering": [

View file

@ -396,27 +396,31 @@
"location": [
"point"
],
"icon": {
"render": "./assets/layers/kerbs/KerbIcon.svg",
"mappings": [
{
"if": "kerb=raised",
"then": "./assets/layers/kerbs/raised.svg"
},
{
"if": "kerb=lowered",
"then": "./assets/layers/kerbs/lowered.svg"
},
{
"if": "kerb=flush",
"then": "./assets/layers/kerbs/flush.svg"
},
{
"if": "kerb=no",
"then": "./assets/layers/kerbs/no.svg"
"marker": [
{
"icon": {
"render": "./assets/layers/kerbs/KerbIcon.svg",
"mappings": [
{
"if": "kerb=raised",
"then": "./assets/layers/kerbs/raised.svg"
},
{
"if": "kerb=lowered",
"then": "./assets/layers/kerbs/lowered.svg"
},
{
"if": "kerb=flush",
"then": "./assets/layers/kerbs/flush.svg"
},
{
"if": "kerb=no",
"then": "./assets/layers/kerbs/no.svg"
}
]
}
]
}
}
]
}
],
"lineRendering": [

View file

@ -186,18 +186,22 @@
}
]
},
"icon": {
"mappings": [
{
"if": "amenity=kindergarten",
"then": "circle:white;./assets/layers/kindergarten_childcare/kindergarten.svg"
},
{
"if": "amenity=childcare",
"then": "circle:white;./assets/layers/kindergarten_childcare/childcare.svg"
"marker": [
{
"icon": {
"mappings": [
{
"if": "amenity=kindergarten",
"then": "circle:white;./assets/layers/kindergarten_childcare/kindergarten.svg"
},
{
"if": "amenity=childcare",
"then": "circle:white;./assets/layers/kindergarten_childcare/childcare.svg"
}
]
}
]
}
}
]
}
],
"lineRendering": [

View file

@ -88,24 +88,28 @@
],
"pointRendering": [
{
"icon": {
"mappings": [
{
"if": {
"and": [
"has_note_layer=yes",
"has_presets=no"
]
},
"then": "./assets/svg/note.svg"
},
{
"if": "number_of_presets=1",
"then": "{first_preset}"
"marker": [
{
"icon": {
"mappings": [
{
"if": {
"and": [
"has_note_layer=yes",
"has_presets=no"
]
},
"then": "./assets/svg/note.svg"
},
{
"if": "number_of_presets=1",
"then": "{first_preset}"
}
],
"render": "<div class='relative'> <img src='./assets/svg/add_pin.svg' class='absolute' style='height: 50px'> <div class='absolute top-0 left-0 rounded-full overflow-hidden noselect' style='width: 40px; height: 40px'><div class='flex slide min-w-min' style='animation: slide linear {number_of_presets}s infinite; width: calc( (1 + {number_of_presets}) * 40px ); height: 40px'>{renderings}{first_preset}</div></div></div>"
}
],
"render": "<div class='relative'> <img src='./assets/svg/add_pin.svg' class='absolute' style='height: 50px'> <div class='absolute top-0 left-0 rounded-full overflow-hidden noselect' style='width: 40px; height: 40px'><div class='flex slide min-w-min' style='animation: slide linear {number_of_presets}s infinite; width: calc( (1 + {number_of_presets}) * 40px ); height: 40px'>{renderings}{first_preset}</div></div></div>"
},
}
],
"labelCssClasses": "text-sm min-w-min px-2 rounded-full text-white opacity-65 whitespace-nowrap block-ruby",
"labelCss": "background: #00000088",
"label": {

View file

@ -350,37 +350,41 @@
},
"pointRendering": [
{
"icon": {
"render": "./assets/layers/map/map.svg",
"mappings": [
{
"if": {
"and": [
"map_source=OpenStreetMap",
"map_source:attribution=sticker"
]
},
"then": "./assets/layers/map/map-stickered.svg"
},
{
"if": {
"and": [
"map_source=OpenStreetMap",
"map_source:attribution=yes"
]
},
"then": "./assets/layers/map/osm-logo-white-bg.svg"
},
{
"if": {
"and": [
"map_source=OpenStreetMap"
]
},
"then": "./assets/layers/map/osm-logo-buggy-attr.svg"
"marker": [
{
"icon": {
"render": "./assets/layers/map/map.svg",
"mappings": [
{
"if": {
"and": [
"map_source=OpenStreetMap",
"map_source:attribution=sticker"
]
},
"then": "./assets/layers/map/map-stickered.svg"
},
{
"if": {
"and": [
"map_source=OpenStreetMap",
"map_source:attribution=yes"
]
},
"then": "./assets/layers/map/osm-logo-white-bg.svg"
},
{
"if": {
"and": [
"map_source=OpenStreetMap"
]
},
"then": "./assets/layers/map/osm-logo-buggy-attr.svg"
}
]
}
]
},
}
],
"iconSize": "50,50",
"location": [
"point",

View file

@ -309,43 +309,48 @@
"point",
"centroid"
],
"icon": {
"render": "./assets/layers/maproulette/logomark.svg",
"mappings": [
{
"if": "status=0",
"then": "pin:#959DFF"
},
{
"if": "status=1",
"then": "pin:#65D2DA"
},
{
"if": "status=2",
"then": "pin:#F7BB59"
},
{
"if": "status=3",
"then": "pin:#F7BB59"
},
{
"if": "status=4",
"then": "pin:#737373"
},
{
"if": "status=5",
"then": "pin:#CCB186"
},
{
"if": "status=6",
"then": "pin:#FF5E63"
},
{
"if": "status=9",
"then": "pin:#FF349C"
"marker": [
{
"icon": "pin",
"color": {
"render": "#00",
"mappings": [
{
"if": "status=0",
"then": "#959DFF"
},
{
"if": "status=1",
"then": "#65D2DA"
},
{
"if": "status=2",
"then": "#F7BB59"
},
{
"if": "status=3",
"then": "#F7BB59"
},
{
"if": "status=4",
"then": "#737373"
},
{
"if": "status=5",
"then": "#CCB186"
},
{
"if": "status=6",
"then": "#FF5E63"
},
{
"if": "status=9",
"then": "#FF349C"
}
]
}
]
},
}
],
"iconSize": "40,40",
"anchor": "bottom"
}

View file

@ -204,43 +204,67 @@
"point",
"centroid"
],
"icon": {
"render": "./assets/layers/maproulette/logomark.svg",
"mappings": [
{
"if": "mr_taskStatus=Created",
"then": "pin:#959DFF"
"marker": [
{
"color": {
"mappings": [
{
"if": "mr_taskStatus=Created",
"then": "#959DFF"
},
{
"if": "mr_taskStatus=Fixed",
"then": "#65D2DA"
},
{
"if": "mr_taskStatus=False positive",
"then": "#F7BB59"
},
{
"if": "mr_taskStatus=Skipped",
"then": "#F7BB59"
},
{
"if": "mr_taskStatus=Deleted",
"then": "#737373"
},
{
"if": "mr_taskStatus=Already fixed",
"then": "#CCB186"
},
{
"if": "mr_taskStatus=Too hard",
"then": "#FF5E63"
},
{
"if": "mr_taskStatus=Disabled",
"then": "#FF349C"
}
]
},
{
"if": "mr_taskStatus=Fixed",
"then": "pin:#65D2DA"
},
{
"if": "mr_taskStatus=False positive",
"then": "pin:#F7BB59"
},
{
"if": "mr_taskStatus=Skipped",
"then": "pin:#F7BB59"
},
{
"if": "mr_taskStatus=Deleted",
"then": "pin:#737373"
},
{
"if": "mr_taskStatus=Already fixed",
"then": "pin:#CCB186"
},
{
"if": "mr_taskStatus=Too hard",
"then": "pin:#FF5E63"
},
{
"if": "mr_taskStatus=Disabled",
"then": "pin:#FF349C"
"icon": {
"render": "./assets/layers/maproulette/logomark.svg",
"mappings": [
{
"if": {
"or": [
"mr_taskStatus=Created",
"mr_taskStatus=Fixed",
"mr_taskStatus=False positive",
"mr_taskStatus=Skipped",
"mr_taskStatus=Deleted",
"mr_taskStatus=Already fixed",
"mr_taskStatus=Already fixed",
"mr_taskStatus=Disabled",
"mr_taskStatus=Too hard"
]
},
"then": "pin"
}
]
}
]
},
}
],
"iconSize": "40,40",
"anchor": "bottom"
}

Some files were not shown because too many files have changed in this diff Show more