Merge branch 'develop' into waste-theme

This commit is contained in:
pietervdvn 2022-02-20 00:47:21 +01:00
commit 9b7a47136c
89 changed files with 2775 additions and 1151 deletions

View file

@ -426,6 +426,16 @@
"items": {
"$ref": "#/definitions/default_2"
}
},
"syncSelection": {
"description": "If set, synchronizes wether or not this layer is selected.\n\nno: Do not sync at all, always revert to default\nlocal: keep selection on local storage\ntheme-only: sync via OSM, but this layer will only be toggled in this theme\nglobal: all layers with this ID will be synced accross all themes",
"enum": [
"global",
"local",
"no",
"theme-only"
],
"type": "string"
}
},
"required": [
@ -602,11 +612,32 @@
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -426,6 +426,16 @@ export default {
"items": {
"$ref": "#/definitions/default_2"
}
},
"syncSelection": {
"description": "If set, synchronizes wether or not this layer is selected.\n\nno: Do not sync at all, always revert to default\nlocal: keep selection on local storage\ntheme-only: sync via OSM, but this layer will only be toggled in this theme\nglobal: all layers with this ID will be synced accross all themes",
"enum": [
"global",
"local",
"no",
"theme-only"
],
"type": "string"
}
},
"required": [
@ -600,11 +610,32 @@ export default {
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -456,11 +456,32 @@
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",
@ -1314,6 +1335,16 @@
"items": {
"$ref": "#/definitions/default_2"
}
},
"syncSelection": {
"description": "If set, synchronizes wether or not this layer is selected.\n\nno: Do not sync at all, always revert to default\nlocal: keep selection on local storage\ntheme-only: sync via OSM, but this layer will only be toggled in this theme\nglobal: all layers with this ID will be synced accross all themes",
"enum": [
"global",
"local",
"no",
"theme-only"
],
"type": "string"
}
},
"required": [

View file

@ -454,11 +454,32 @@ export default {
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",
@ -1304,6 +1325,16 @@ export default {
"items": {
"$ref": "#/definitions/default_2"
}
},
"syncSelection": {
"description": "If set, synchronizes wether or not this layer is selected.\n\nno: Do not sync at all, always revert to default\nlocal: keep selection on local storage\ntheme-only: sync via OSM, but this layer will only be toggled in this theme\nglobal: all layers with this ID will be synced accross all themes",
"enum": [
"global",
"local",
"no",
"theme-only"
],
"type": "string"
}
},
"required": [

View file

@ -256,11 +256,32 @@
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -254,11 +254,32 @@ export default {
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -260,11 +260,32 @@
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -258,11 +258,32 @@ export default {
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -96,11 +96,32 @@
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -96,11 +96,32 @@ export default {
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -204,11 +204,32 @@
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -202,11 +202,32 @@ export default {
]
},
"then": {
"description": "If 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\ntype: rendered"
"description": "If 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\nType: rendered"
},
"icon": {
"description": "An icon supporting this mapping; typically shown pretty small\nType: icon",
"type": "string"
"anyOf": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
"hideInAnswer": {
"description": "In some cases, multiple taggings exist (e.g. a default assumption, or a commonly mapped abbreviation and a fully written variation).\n\nIn the latter case, a correct text should be shown, but only a single, canonical tagging should be selectable by the user.\nIn this case, one of the mappings can be hiden by setting this flag.\n\nTo demonstrate an example making a default assumption:\n\nmappings: [\n {\n if: \"access=\", -- no access tag present, we assume accessible\n then: \"Accessible to the general public\",\n hideInAnswer: true\n },\n {\n if: \"access=yes\",\n then: \"Accessible to the general public\", -- the user selected this, we add that to OSM\n },\n {\n if: \"access=no\",\n then: \"Not accessible to the public\"\n }\n]\n\n\nFor example, for an operator, we have `operator=Agentschap Natuur en Bos`, which is often abbreviated to `operator=ANB`.\nThen, we would add two mappings:\n{\n if: \"operator=Agentschap Natuur en Bos\" -- the non-abbreviated version which should be uploaded\n then: \"Maintained by Agentschap Natuur en Bos\"\n},\n{\n if: \"operator=ANB\", -- we don't want to upload abbreviations\n then: \"Maintained by Agentschap Natuur en Bos\"\n hideInAnswer: true\n}\n\nHide in answer can also be a tagsfilter, e.g. to make sure an option is only shown when appropriate.\nKeep in mind that this is reverse logic: it will be hidden in the answer if the condition is true, it will thus only show in the case of a mismatch\n\ne.g., for toilets: if \"wheelchair=no\", we know there is no wheelchair dedicated room.\nFor the location of the changing table, the option \"in the wheelchair accessible toilet is weird\", so we write:\n\n{\n \"question\": \"Where is the changing table located?\"\n \"mappings\": [\n {\"if\":\"changing_table:location=female\",\"then\":\"In the female restroom\"},\n {\"if\":\"changing_table:location=male\",\"then\":\"In the male restroom\"},\n {\"if\":\"changing_table:location=wheelchair\",\"then\":\"In the wheelchair accessible restroom\", \"hideInAnswer\": \"wheelchair=no\"},\n \n ]\n}\n\nAlso have a look for the meta-tags\n{\n if: \"operator=Agentschap Natuur en Bos\",\n then: \"Maintained by Agentschap Natuur en Bos\",\n hideInAnswer: \"_country!=be\"\n}",

View file

@ -2,7 +2,7 @@ import {Utils} from "../Utils";
export default class Constants {
public static vNumber = "0.16.0";
public static vNumber = "0.16.1";
public static ImgurApiKey = '7070e7167f0a25a'
public static readonly mapillary_client_token_v4 = "MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85"

View file

@ -6,51 +6,70 @@ import * as tagrenderingmetapaths from "../../../assets/tagrenderingconfigmeta.j
export class ExtractImages extends Conversion<LayoutConfigJson, string[]> {
private _isOfficial: boolean;
constructor(isOfficial: boolean) {
private _sharedTagRenderings: Map<string, any>;
private static readonly layoutMetaPaths = (metapaths["default"] ?? metapaths).filter(mp => mp.typeHint !== undefined && (mp.typeHint === "image" || mp.typeHint === "icon"))
private static readonly tagRenderingMetaPaths = (tagrenderingmetapaths["default"] ?? tagrenderingmetapaths).filter(trpath => trpath.typeHint === "rendered")
constructor(isOfficial: boolean, sharedTagRenderings: Map<string, any>) {
super("Extract all images from a layoutConfig using the meta paths",[],"ExctractImages");
this._isOfficial = isOfficial;
this._sharedTagRenderings = sharedTagRenderings;
}
convert(json: LayoutConfigJson, context: string): { result: string[], errors: string[], warnings: string[] } {
const paths = metapaths["default"] ?? metapaths
const trpaths = tagrenderingmetapaths["default"] ?? tagrenderingmetapaths
const allFoundImages = []
const allFoundImages : string[] = []
const errors = []
const warnings = []
for (const metapath of paths) {
if (metapath.typeHint === undefined) {
continue
}
if (metapath.typeHint !== "image" && metapath.typeHint !== "icon") {
continue
}
for (const metapath of ExtractImages.layoutMetaPaths) {
const mightBeTr = Array.isArray(metapath.type) && metapath.type.some(t => t["$ref"] == "#/definitions/TagRenderingConfigJson")
const found = Utils.CollectPath(metapath.path, json)
if (mightBeTr) {
// We might have tagRenderingConfigs containing icons here
for (const foundImage of found) {
for (const el of found) {
const path = el.path
const foundImage = el.leaf;
if (typeof foundImage === "string") {
if(foundImage == ""){
warnings.push(context+"."+path.join(".")+" Found an empty image")
}
if(this._sharedTagRenderings?.has(foundImage)){
// This is not an image, but a shared tag rendering
continue
}
allFoundImages.push(foundImage)
} else{
// This is a tagRendering where every rendered value might be an icon!
for (const trpath of trpaths) {
if (trpath.typeHint !== "rendered") {
continue
}
for (const trpath of ExtractImages.tagRenderingMetaPaths) {
const fromPath = Utils.CollectPath(trpath.path, foundImage)
for (const img of fromPath) {
if (typeof img !== "string") {
(this._isOfficial ? errors: warnings).push(context+": found an image path that is not a path at " + context + "." + metapath.path.join(".") + ": " + JSON.stringify(img))
if (typeof img.leaf !== "string") {
(this._isOfficial ? errors: warnings).push(context+"."+img.path.join(".")+": found an image path that is not a string: " + JSON.stringify(img.leaf))
}
}
allFoundImages.push(...fromPath.map(i => i.leaf).filter(i => typeof i=== "string"))
for (const pathAndImg of fromPath) {
if(pathAndImg.leaf === "" || pathAndImg.leaf["path"] == ""){
warnings.push(context+[...path,...pathAndImg.path].join(".")+": Found an empty image at ")
}
}
allFoundImages.push(...fromPath.filter(i => typeof i === "string"))
}
}
}
} else {
allFoundImages.push(...found)
for (const foundElement of found) {
if(foundElement.leaf === ""){
warnings.push(context+"."+foundElement.path.join(".")+" Found an empty image")
continue
}
allFoundImages.push(foundElement.leaf)
}
}
}
@ -58,6 +77,7 @@ export class ExtractImages extends Conversion<LayoutConfigJson, string[]> {
.map(img => img["path"] ?? img)
.map(img => img.split(";")))
.map(img => img.split(":")[0])
.filter(img => img !== "")
return {result: Utils.Dedup(splitParts), errors, warnings};
}
@ -108,7 +128,7 @@ export class FixImages extends DesugaringStep<LayoutConfigJson> {
continue
}
const mightBeTr = Array.isArray(metapath.type) && metapath.type.some(t => t["$ref"] == "#/definitions/TagRenderingConfigJson")
Utils.WalkPath(metapath.path, json, leaf => {
Utils.WalkPath(metapath.path, json, (leaf, path) => {
if (typeof leaf === "string") {
return replaceString(leaf)
}

View file

@ -126,6 +126,11 @@ class UpdateLegacyTheme extends DesugaringStep<LayoutConfigJson> {
convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[]; warnings: string[] } {
const oldThemeConfig = {...json}
if(oldThemeConfig.socialImage === ""){
delete oldThemeConfig.socialImage
}
if (oldThemeConfig["roamingRenderings"] !== undefined) {
if (oldThemeConfig["roamingRenderings"].length == 0) {

View file

@ -75,14 +75,14 @@ class ExpandTagRendering extends Conversion<string | TagRenderingConfigJson | {
if (typeof tr === "string") {
const lookup = this.lookup(tr);
if (lookup !== undefined) {
return lookup
if (lookup === undefined) {
warnings.push(ctx + "A literal rendering was detected: " + tr)
return [{
render: tr,
id: tr.replace(/![a-zA-Z0-9]/g, "")
}]
}
warnings.push(ctx + "A literal rendering was detected: " + tr)
return [{
render: tr,
id: tr.replace(/![a-zA-Z0-9]/g, "")
}]
return lookup
}
if (tr["builtin"] !== undefined) {
@ -122,7 +122,7 @@ class ExpandTagRendering extends Conversion<string | TagRenderingConfigJson | {
const result = []
for (const tr of trs) {
if (tr["builtin"] !== undefined) {
if (typeof tr === "string" || tr["builtin"] !== undefined) {
const stable = this.convertUntilStable(tr, warnings, errors, ctx + "(RECURSIVE RESOLVE)")
result.push(...stable)
} else {

View file

@ -432,8 +432,12 @@ export class PrepareTheme extends Fuse<LayoutConfigJson> {
new PreparePersonalTheme(state),
new OnEveryConcat("layers", new SubstituteLayer(state)),
new SetDefault("socialImage", "assets/SocialImage.png", true),
// We expand all tagrenderings first...
new OnEvery("layers", new PrepareLayer(state)),
// Then we apply the override all
new ApplyOverrideAll(),
// And then we prepare all the layers _again_ in case that an override all contained unexpanded tagrenderings!
new OnEvery("layers", new PrepareLayer(state)),
new AddDefaultLayers(state),
new AddDependencyLayersToTheme(state),
new AddImportLayers(),

View file

@ -12,6 +12,7 @@ import {ExtractImages} from "./FixImages";
import ScriptUtils from "../../../scripts/ScriptUtils";
import {And} from "../../../Logic/Tags/And";
import Translations from "../../../UI/i18n/Translations";
import Svg from "../../../Svg";
class ValidateLanguageCompleteness extends DesugaringStep<any> {
@ -50,12 +51,14 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
private readonly _path?: string;
private readonly knownImagePaths: Set<string>;
private readonly _isBuiltin: boolean;
private _sharedTagRenderings: Map<string, any>;
constructor(knownImagePaths: Set<string>, path: string, isBuiltin: boolean) {
constructor(knownImagePaths: Set<string>, path: string, isBuiltin: boolean, sharedTagRenderings: Map<string, any>) {
super("Doesn't change anything, but emits warnings and errors", [], "ValidateTheme");
this.knownImagePaths = knownImagePaths;
this._path = path;
this._isBuiltin = isBuiltin;
this._sharedTagRenderings = sharedTagRenderings;
}
convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors: string[], warnings: string[], information: string[] } {
@ -78,7 +81,7 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
}
{
// Check images: are they local, are the licenses there, is the theme icon square, ...
const images = new ExtractImages(this._isBuiltin).convertStrict(json, "validation")
const images = new ExtractImages(this._isBuiltin, this._sharedTagRenderings).convertStrict(json, "validation")
const remoteImages = images.filter(img => img.indexOf("http") == 0)
for (const remoteImage of remoteImages) {
errors.push("Found a remote image: " + remoteImage + " in theme " + json.id + ", please download it.")
@ -93,8 +96,11 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
continue
}
if (image.match(/[a-z]*/)) {
// This is a builtin img, e.g. 'checkmark' or 'crosshair'
continue;
if(Svg.All[image + ".svg"] !== undefined){
// This is a builtin img, e.g. 'checkmark' or 'crosshair'
continue;
}
}
if (this.knownImagePaths !== undefined && !this.knownImagePaths.has(image)) {
@ -163,10 +169,10 @@ class ValidateTheme extends DesugaringStep<LayoutConfigJson> {
}
export class ValidateThemeAndLayers extends Fuse<LayoutConfigJson> {
constructor(knownImagePaths: Set<string>, path: string, isBuiltin: boolean) {
constructor(knownImagePaths: Set<string>, path: string, isBuiltin: boolean, sharedTagRenderings: Map<string, any>) {
super("Validates a theme and the contained layers",
new ValidateTheme(knownImagePaths, path, isBuiltin),
new OnEvery("layers", new ValidateLayer(knownImagePaths, undefined, false))
new ValidateTheme(knownImagePaths, path, isBuiltin, sharedTagRenderings),
new OnEvery("layers", new ValidateLayer(undefined, false))
);
}
}
@ -202,11 +208,29 @@ class OverrideShadowingCheck extends DesugaringStep<LayoutConfigJson> {
}
class MiscThemeChecks extends DesugaringStep<LayoutConfigJson>{
constructor() {
super("Miscelleanous checks on the theme", [],"MiscThemesChecks");
}
convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson; errors?: string[]; warnings?: string[]; information?: string[] } {
const warnings = []
if(json.socialImage === ""){
warnings.push("Social image for theme "+json.id+" is the emtpy string")
}
return {
result :json,
warnings
};
}
}
export class PrevalidateTheme extends Fuse<LayoutConfigJson> {
constructor() {
super("Various consistency checks on the raw JSON",
new OverrideShadowingCheck()
new OverrideShadowingCheck(),
new MiscThemeChecks()
);
}
@ -265,22 +289,33 @@ export class DetectMappingsWithImages extends DesugaringStep<TagRenderingConfigJ
super("Checks that 'then'clauses in mappings don't have images, but use 'icon' instead", [], "DetectMappingsWithImages");
}
convert(json: TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson; errors?: string[]; warnings?: string[] } {
convert(json: TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson; errors?: string[]; warnings?: string[], information?: string[] } {
const errors = []
const warnings = []
const information = []
if (json.mappings === undefined || json.mappings.length === 0) {
return {result: json}
}
const ignoreToken = "ignore-image-in-then"
for (let i = 0; i < json.mappings.length; i++) {
const mapping = json.mappings[i]
const ignore = mapping["#"]?.indexOf(ignoreToken) >=0
const images = Utils.Dedup(Translations.T(mapping.then).ExtractImages())
const ctx = `${context}.mappings[${i}]`
if (images.length > 0) {
warnings.push(context + ".mappings[" + i + "]: A mapping has an image in the 'then'-clause. Remove the image there and use `\"icon\": <your-image>` instead. The images found are "+images.join(", "))
if(!ignore){
errors.push(`${ctx}: A mapping has an image in the 'then'-clause. Remove the image there and use \`"icon": <your-image>\` instead. The images found are ${images.join(", ")}. (Ignore this warning by adding "#": "${ignoreToken}" to the mapping`)
}else{
information.push(`${ctx}: Ignored images in then`)
}
}else if (ignore){
warnings.push(`${ctx}: unused '${ignoreToken}' - please remove this`)
}
}
return {
warnings,
errors,warnings,information,
result: json
};
}
@ -302,12 +337,10 @@ export class ValidateLayer extends DesugaringStep<LayerConfigJson> {
* @private
*/
private readonly _path?: string;
private readonly knownImagePaths?: Set<string>;
private readonly _isBuiltin: boolean;
constructor(knownImagePaths: Set<string>, path: string, isBuiltin: boolean) {
constructor(path: string, isBuiltin: boolean) {
super("Doesn't change anything, but emits warnings and errors", [], "ValidateLayer");
this.knownImagePaths = knownImagePaths;
this._path = path;
this._isBuiltin = isBuiltin;
}

View file

@ -115,7 +115,7 @@ export interface TagRenderingConfigJson {
/**
* If the condition `if` is met, the text `then` will be rendered.
* If not known yet, the user will be presented with `then` as an option
* type: rendered
* Type: rendered
*/
then: string | any,
/**

View file

@ -71,7 +71,7 @@ export default class LayoutConfig {
this.credits = json.credits;
this.version = json.version;
this.language = json.mustHaveLanguage ?? Array.from(Object.keys(json.title));
this.usedImages = Array.from(new ExtractImages(official).convertStrict(json, "while extracting the images of " + json.id + " " + context ?? "")).sort()
this.usedImages = Array.from(new ExtractImages(official, undefined).convertStrict(json, "while extracting the images of " + json.id + " " + context ?? "")).sort()
{
if (typeof json.title === "string") {
throw `The title of a theme should always be a translation, as it sets the corresponding languages (${context}.title). The themenID is ${this.id}; the offending object is ${JSON.stringify(json.title)} which is a ${typeof json.title})`

View file

@ -45,6 +45,7 @@ import ImgurUploader from "../Logic/ImageProviders/ImgurUploader";
import FileSelectorButton from "./Input/FileSelectorButton";
import {LoginToggle} from "./Popup/LoginButton";
import {start} from "repl";
import {SubstitutedTranslation} from "./SubstitutedTranslation";
export interface SpecialVisualization {
funcName: string,
@ -865,13 +866,14 @@ export default class SpecialVisualizations {
args: [],
docs:"Shows the title of the popup. Useful for some cases, e.g. 'What is phone number of {title()}?'",
example:"`What is the phone number of {title()}`, which might automatically become `What is the phone number of XYZ`.",
constr: (state, tags, args, guistate) =>
new VariableUiElement(tags.map(tags => {
constr: (state, tagsSource, args, guistate) =>
new VariableUiElement(tagsSource.map(tags => {
const layer = state.layoutToUse.getMatchingLayer(tags)
console.log("Layer for tags", tags,"is", layer.id)
const title = layer?.title?.GetRenderValue(tags)
console.log("Title became: ", title)
return title
if(title === undefined){
return undefined
}
return new SubstitutedTranslation(title, tagsSource, state)
}))
}
]

View file

@ -304,7 +304,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
if (target === null) {
return source
}
for (const key in source) {
if (!source.hasOwnProperty(key)) {
continue
@ -358,16 +358,16 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
*
* The leaf objects are replaced by the function
*/
public static WalkPath(path: string[], object: any, replaceLeaf: ((leaf: any) => any)) {
public static WalkPath(path: string[], object: any, replaceLeaf: ((leaf: any, travelledPath: string[]) => any), travelledPath: string[] = []) {
const head = path[0]
if (path.length === 1) {
// We have reached the leaf
const leaf = object[head];
if (leaf !== undefined) {
if(Array.isArray(leaf)){
object[head] = leaf.map(replaceLeaf)
}else{
object[head] = replaceLeaf(leaf)
if (Array.isArray(leaf)) {
object[head] = leaf.map(o => replaceLeaf(o, travelledPath))
} else {
object[head] = replaceLeaf(leaf, travelledPath)
}
}
return
@ -381,10 +381,10 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
return;
}
if (Array.isArray(sub)) {
sub.forEach(el => Utils.WalkPath(path.slice(1), el, replaceLeaf))
sub.forEach((el, i) => Utils.WalkPath(path.slice(1), el, replaceLeaf, [...travelledPath, head, "" + i]))
return;
}
Utils.WalkPath(path.slice(1), sub, replaceLeaf)
Utils.WalkPath(path.slice(1), sub, replaceLeaf, [...travelledPath, head])
}
/**
@ -393,22 +393,26 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
*
* The leaf objects are collected in the list
*/
public static CollectPath(path: string[], object: any, collectedList = []): any[] {
public static CollectPath(path: string[], object: any, collectedList: { leaf: any, path: string[] }[] = [], travelledPath: string[] = []): { leaf: any, path: string[] }[] {
if (object === undefined || object === null) {
return collectedList;
}
const head = path[0]
travelledPath = [...travelledPath, head]
if (path.length === 1) {
// We have reached the leaf
const leaf = object[head];
if (leaf === undefined || leaf === null) {
return collectedList
}
if (Array.isArray(leaf)) {
collectedList.push(...leaf)
} else {
collectedList.push(leaf)
}
if (Array.isArray(leaf)) {
for (let i = 0; i < (<any[]>leaf).length; i++){
const l = (<any[]>leaf)[i];
collectedList.push({leaf: l, path: [...travelledPath, ""+i]})
}
} else {
collectedList.push({leaf, path: travelledPath})
}
return collectedList
}
const sub = object[head]
@ -417,13 +421,13 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
}
if (Array.isArray(sub)) {
sub.forEach(el => Utils.CollectPath(path.slice(1), el, collectedList))
sub.forEach((el, i) => Utils.CollectPath(path.slice(1), el, collectedList, [...travelledPath, "" + i]))
return collectedList;
}
if (typeof sub !== "object") {
return collectedList;
}
return Utils.CollectPath(path.slice(1), sub, collectedList)
return Utils.CollectPath(path.slice(1), sub, collectedList, travelledPath)
}
/**
@ -725,6 +729,28 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
return new Date(str)
}
public static levenshteinDistance(str1: string, str2: string) {
const track = Array(str2.length + 1).fill(null).map(() =>
Array(str1.length + 1).fill(null));
for (let i = 0; i <= str1.length; i += 1) {
track[0][i] = i;
}
for (let j = 0; j <= str2.length; j += 1) {
track[j][0] = j;
}
for (let j = 1; j <= str2.length; j += 1) {
for (let i = 1; i <= str1.length; i += 1) {
const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;
track[j][i] = Math.min(
track[j][i - 1] + 1, // deletion
track[j - 1][i] + 1, // insertion
track[j - 1][i - 1] + indicator, // substitution
);
}
}
return track[str2.length][str1.length];
}
private static colorDiff(c0: { r: number, g: number, b: number }, c1: { r: number, g: number, b: number }) {
return Math.abs(c0.r - c1.r) + Math.abs(c0.g - c1.g) + Math.abs(c0.b - c1.b);
}
@ -751,27 +777,5 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
b: parseInt(hex.substr(5, 2), 16),
}
}
public static levenshteinDistance (str1: string, str2: string) {
const track = Array(str2.length + 1).fill(null).map(() =>
Array(str1.length + 1).fill(null));
for (let i = 0; i <= str1.length; i += 1) {
track[0][i] = i;
}
for (let j = 0; j <= str2.length; j += 1) {
track[j][0] = j;
}
for (let j = 1; j <= str2.length; j += 1) {
for (let i = 1; i <= str1.length; i += 1) {
const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;
track[j][i] = Math.min(
track[j][i - 1] + 1, // deletion
track[j - 1][i] + 1, // insertion
track[j - 1][i - 1] + indicator, // substitution
);
}
}
return track[str2.length][str1.length];
}
}

View file

@ -246,41 +246,57 @@
{
"if": "cycle_barrier=single",
"then": {
"en": "Single, just two barriers with a space inbetween <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>",
"nl": "Enkelvoudig, slechts twee hekjes met ruimte ertussen <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>",
"de": "Einfach, nur zwei Barrieren mit einem Zwischenraum <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>",
"hu": "Egyszeres: csak két korlát, közöttük térköz <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>",
"fr": "Simple, deux barrières côte à côte <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>"
"en": "Single, just two barriers with a space inbetween",
"nl": "Enkelvoudig, slechts twee hekjes met ruimte ertussen",
"de": "Einfach, nur zwei Barrieren mit einem Zwischenraum",
"hu": "Egyszeres: csak két korlát, közöttük térköz",
"fr": "Simple, deux barrières côte à côte"
},
"icon": {
"path": "./assets/themes/cycle_infra/Cycle_barrier_single.png",
"class": "large"
}
},
{
"if": "cycle_barrier=double",
"then": {
"en": "Double, two barriers behind each other <img src='./assets/themes/cycle_infra/Cycle_barrier_double.svg' style='width:8em'>",
"nl": "Dubbel, twee hekjes achter elkaar <img src='./assets/themes/cycle_infra/Cycle_barrier_double.svg' style='width:8em'>",
"de": "Doppelt, zwei Barrieren hintereinander <img src='./assets/themes/cycle_infra/Cycle_barrier_double.svg' style='width:8em'>",
"hu": "Kétszeres: két, egymáshoz képest eltolt korlát egymás után <img src='./assets/themes/cycle_infra/Cycle_barrier_double.svg' style='width:8em'>",
"en": "Double, two barriers behind each other",
"nl": "Dubbel, twee hekjes achter elkaar",
"de": "Doppelt, zwei Barrieren hintereinander",
"hu": "Kétszeres: két, egymáshoz képest eltolt korlát egymás után",
"fr": "Double, deux barrières successives"
},
"icon": {
"path": "./assets/themes/cycle_infra/Cycle_barrier_double.svg",
"class": "large"
}
},
{
"if": "cycle_barrier=triple",
"then": {
"en": "Triple, three barriers behind each other <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>",
"nl": "Drievoudig, drie hekjes achter elkaar <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>",
"de": "Dreifach, drei Barrieren hintereinander <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>",
"hu": "Háromszoros: három, egymáshoz képest eltolt korlát egymás után <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>",
"fr": "Triple, trois barrières successives <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>"
"en": "Triple, three barriers behind each other",
"nl": "Drievoudig, drie hekjes achter elkaar",
"de": "Dreifach, drei Barrieren hintereinander",
"hu": "Háromszoros: három, egymáshoz képest eltolt korlát egymás után",
"fr": "Triple, trois barrières successives"
},
"icon": {
"path": "./assets/themes/cycle_infra/Cycle_barrier_triple.png",
"class": "large"
}
},
{
"if": "cycle_barrier=squeeze",
"then": {
"en": "Squeeze gate, gap is smaller at top, than at the bottom <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>",
"nl": "Knijppoort, ruimte is smaller aan de top, dan aan de bodem <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>",
"de": "Eine Durchfahrtsbeschränkung, Durchfahrtsbreite ist oben kleiner als unten <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>",
"hu": "Szűkítőkapu: a rés felül keskenyebb, mint alul <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>",
"fr": "Poire, lespace en hauteur est plus faible quau sol <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>"
"en": "Squeeze gate, gap is smaller at top, than at the bottom",
"nl": "Knijppoort, ruimte is smaller aan de top, dan aan de bodem",
"de": "Eine Durchfahrtsbeschränkung, Durchfahrtsbreite ist oben kleiner als unten",
"hu": "Szűkítőkapu: a rés felül keskenyebb, mint alul",
"fr": "Poire, lespace en hauteur est plus faible quau sol"
},
"icon": {
"path": "./assets/themes/cycle_infra/Cycle_barrier_squeeze.png",
"class": "large"
}
}
],

View file

@ -100,91 +100,119 @@
{
"if": "bicycle_parking=stands",
"then": {
"en": "Staple racks <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"nl": "Nietjes <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"fr": "Arceaux <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"gl": "De roda (Stands) <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"de": "Fahrradbügel <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"hu": "Korlát <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"it": "Archetti <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"zh_Hant": "單車架 <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
"en": "Staple racks",
"nl": "Nietjes",
"fr": "Arceaux",
"gl": "De roda (Stands)",
"de": "Fahrradbügel",
"hu": "Korlát",
"it": "Archetti",
"zh_Hant": "單車架"
},
"icon": {
"path": "./assets/layers/bike_parking/staple.svg",
"class": "large"
}
},
{
"if": "bicycle_parking=wall_loops",
"then": {
"en": "Wheel rack/loops <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"nl": "Wielrek/lussen <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"fr": "Pinces-roues <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"gl": "Aros <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"de": "Metallgestänge <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"hu": "Kerékbefogó hurok <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"it": "Scolapiatti <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
"zh_Hant": "車輪架/圓圈 <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"en": "Wheel rack/loops",
"nl": "Wielrek/lussen",
"fr": "Pinces-roues",
"gl": "Aros",
"de": "Metallgestänge",
"hu": "Kerékbefogó hurok",
"it": "Scolapiatti",
"zh_Hant": "車輪架/圓圈"
},
"icon": {
"path": "./assets/layers/bike_parking/wall_loops.svg",
"class": "large"
}
},
{
"if": "bicycle_parking=handlebar_holder",
"then": {
"en": "Handlebar holder <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"nl": "Stuurhouder <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"fr": "Support guidon <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"gl": "Cadeado para guiador <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"de": "Halter für Fahrradlenker <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"it": "Blocca manubrio <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
"zh_Hant": "車把架 <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
"en": "Handlebar holder",
"nl": "Stuurhouder",
"fr": "Support guidon",
"gl": "Cadeado para guiador",
"de": "Halter für Fahrradlenker",
"it": "Blocca manubrio",
"zh_Hant": "車把架"
},
"icon": {
"path": "./assets/layers/bike_parking/handlebar_holder.svg",
"class": "large"
}
},
{
"if": "bicycle_parking=rack",
"then": {
"en": "Rack <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"nl": "Rek <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"fr": "Râtelier <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"gl": "Cremalleira <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"de": "Gestell <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"zh_Hant": "車架<img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"it": "Rastrelliera <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
"ru": "Стойка <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"en": "Rack",
"nl": "Rek",
"fr": "Râtelier",
"gl": "Cremalleira",
"de": "Gestell",
"zh_Hant": "車架",
"it": "Rastrelliera",
"ru": "Стойка"
},
"icon": {
"path": "./assets/layers/bike_parking/rack.svg",
"class": "large"
}
},
{
"if": "bicycle_parking=two_tier",
"then": {
"en": "Two-tiered <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"nl": "Dubbel (twee verdiepingen) <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"fr": "Superposé <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"gl": "Dobre cremalleira <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"de": "Zweistufig <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"hu": "Kétszintű <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"zh_Hant": "兩層<img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"it": "A due piani <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
"ru": "Двухуровневая <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"en": "Two-tiered",
"nl": "Dubbel (twee verdiepingen)",
"fr": "Superposé",
"gl": "Dobre cremalleira",
"de": "Zweistufig",
"hu": "Kétszintű",
"zh_Hant": "兩層",
"it": "A due piani",
"ru": "Двухуровневая"
},
"icon": {
"path": "./assets/layers/bike_parking/two_tier.svg",
"class": "large"
}
},
{
"if": "bicycle_parking=shed",
"then": {
"en": "Shed <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"nl": "Schuur <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"fr": "Abri <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"gl": "Abeiro <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"de": "Schuppen <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"hu": "Fészer <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"zh_Hant": "車棚 <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"it": "Rimessa <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
"ru": "Навес <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"en": "Shed",
"nl": "Schuur",
"fr": "Abri",
"gl": "Abeiro",
"de": "Schuppen",
"hu": "Fészer",
"zh_Hant": "車棚",
"it": "Rimessa",
"ru": "Навес"
},
"icon": {
"path": "./assets/layers/bike_parking/shed.svg",
"class": "large"
}
},
{
"if": "bicycle_parking=bollard",
"then": {
"en": "Bollard <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
"nl": "Paal met ring <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
"fr": "Potelet <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
"it": "Colonnina <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
"de": "Poller <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
"zh_Hant": "柱子 <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
"en": "Bollard",
"nl": "Paal met ring",
"fr": "Potelet",
"it": "Colonnina",
"de": "Poller",
"zh_Hant": "柱子"
},
"icon": {
"path": "./assets/layers/bike_parking/bollard.svg",
"class": "large"
}
},
{

View file

@ -84,6 +84,20 @@
"https://osoc.be/editions/2020/cyclofix"
]
},
{
"path": "repair_station_broken_pump.svg",
"license": "CC-BY-SA",
"authors": [
"Pieter Fiers",
"Thibault Declercq",
"Pierre Barban",
"Joost Schouppe",
"Pieter Vander Vennet"
],
"sources": [
"https://osoc.be/editions/2020/cyclofix"
]
},
{
"path": "repair_station_example.jpg",
"license": "CC-BY-SA 4.0",

File diff suppressed because it is too large Load diff

View file

@ -764,7 +764,7 @@
"operational_status=broken"
]
},
"then": "cross:#c22;"
"then": "close:#c22;"
},
{
"if": {

View file

@ -72,13 +72,17 @@ function run(file, protojson) {
for (let i = 0; i < entries.length; i++) {
const e = entries[i];
const txt = {
en: `<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/${e.image}'/> <span>${e.description.get("en")}</span></div>`,
nl: `<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/${e.image}'/> <span>${e.description.get("nl")}</span></div>`
en: e.description.get("en"),
nl: e.description.get("nl")
}
const json = {
if: `${e.key}=1`,
ifnot: `${e.key}=`,
then: txt,
icon:{
path:"./assets/layers/charging_station/" + e.image,
class:"medium"
}
}
if (e.countryWhiteList.length > 0 && e.countryBlackList.length > 0) {
@ -125,7 +129,11 @@ function run(file, protojson) {
and:Utils.NoEmpty( [`${e.key}~*`, `${e.key}!=1`, ...e.extraVisualisationCondition.split(";")])
},
then: txt,
hideInAnswer: true
hideInAnswer: true,
icon:{
path: `./assets/layers/charging_station/${e.image}`,
class:"medium"
}
}
overview_question_answers.push(no_ask_json)
@ -170,8 +178,12 @@ function run(file, protojson) {
return {
if: `socket:${e.key}:voltage=${voltage} V`,
then: {
en: `${descrWithImage_en} outputs ${voltage} volt`,
nl: `${descrWithImage_nl} heeft een spanning van ${voltage} volt`
en: `${e.description.get("en")} outputs ${voltage} volt`,
nl: `${e.description.get("nl")} heeft een spanning van ${voltage} volt`
},
icon: {
path: `./assets/layers/charging_station/${e.image}`,
class:"medium"
}
}
}),
@ -200,8 +212,12 @@ function run(file, protojson) {
return {
if: `socket:${e.key}:current=${current} A`,
then: {
en: `${descrWithImage_en} outputs at most ${current} A`,
nl: `${descrWithImage_nl} levert een stroom van maximaal ${current} A`
en: `${e.description.get("en")} outputs at most ${current} A`,
nl: `${e.description.get("nl")} levert een stroom van maximaal ${current} A`
},
icon: {
path: `./assets/layers/charging_station/${e.image}`,
class:"medium"
}
}
}),
@ -230,8 +246,12 @@ function run(file, protojson) {
return {
if: `socket:${e.key}:output=${output}`,
then: {
en: `${descrWithImage_en} outputs at most ${output}`,
nl: `${descrWithImage_nl} levert een vermogen van maximaal ${output}`
en: `${e.description.get("en")} outputs at most ${output} A`,
nl: `${e.description.get("nl")} levert een vermogen van maximaal ${output} A`
},
icon: {
path: `./assets/layers/charging_station/${e.image}`,
class:"medium"
}
}
}),

View file

@ -306,11 +306,15 @@
{
"if": "red_turn:right:bicycle=yes",
"then": {
"en": "A cyclist can turn right if the light is red <img src='./assets/layers/crossings/Belgian_road_sign_B22.svg' style='width: 3em'>",
"nl": "Een fietser mag wel rechtsaf slaan als het licht rood is <img src='./assets/layers/crossings/Belgian_road_sign_B22.svg' style='width: 3em'>",
"de": "Ein Radfahrer kann bei roter Ampel rechts abbiegen <img src='./assets/layers/crossings/Belgian_road_sign_B22.svg' style='width: 3em'>"
"en": "A cyclist can turn right if the light is red",
"nl": "Een fietser mag wel rechtsaf slaan als het licht rood is",
"de": "Ein Radfahrer kann bei roter Ampel rechts abbiegen"
},
"hideInAnswer": "_country!=be"
"hideInAnswer": "_country!=be",
"icon": {
"path": "./assets/layers/crossings/Belgian_road_sign_B22.svg",
"class": "medium"
}
},
{
"if": "red_turn:right:bicycle=yes",
@ -343,11 +347,15 @@
{
"if": "red_turn:straight:bicycle=yes",
"then": {
"en": "A cyclist can go straight on if the light is red <img src='./assets/layers/crossings/Belgian_road_sign_B23.svg' style='width: 3em'>",
"nl": "Een fietser mag wel rechtdoor gaan als het licht rood is <img src='./assets/layers/crossings/Belgian_road_sign_B23.svg' style='width: 3em'>",
"de": "Ein Radfahrer kann bei roter Ampel geradeaus fahren <img src='./assets/layers/crossings/Belgian_road_sign_B23.svg' style='width: 3em'>"
"en": "A cyclist can go straight on if the light is red",
"nl": "Een fietser mag wel rechtdoor gaan als het licht rood is",
"de": "Ein Radfahrer kann bei roter Ampel geradeaus fahren"
},
"hideInAnswer": "_country!=be"
"hideInAnswer": "_country!=be",
"icon": {
"path": "./assets/layers/crossings/Belgian_road_sign_B23.svg",
"class": "medium"
}
},
{
"if": "red_turn:straight:bicycle=yes",

View file

@ -805,50 +805,66 @@
{
"if": "cycleway:traffic_sign=BE:D7",
"then": {
"en": "Compulsory cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>",
"nl": "Verplicht fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>",
"de": "Vorgeschriebener Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>",
"id": "Jalur sepeda wajib <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"en": "Compulsory cycleway",
"nl": "Verplicht fietspad",
"de": "Vorgeschriebener Radweg",
"id": "Jalur sepeda wajib"
},
"hideInAnswer": "_country!=be"
"hideInAnswer": "_country!=be",
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_road_sign_D07.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign~BE:D7;.*",
"then": {
"en": "Compulsory cycleway (with supplementary sign)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> ",
"nl": "Verplicht fietspad (met onderbord)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>",
"de": "Vorgeschriebener Radweg (mit Zusatzschild)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> ",
"id": "Jalur sepeda wajib (dengan tanda tambahan)<br><img src ='./aset/tema/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> "
"en": "Compulsory cycleway (with supplementary sign)<br>",
"nl": "Verplicht fietspad (met onderbord)<br>",
"de": "Vorgeschriebener Radweg (mit Zusatzschild)<br>",
"id": "Jalur sepeda wajib (dengan tanda tambahan)<br>"
},
"hideInAnswer": true
"hideInAnswer": true,
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_road_sign_D07.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign=BE:D9",
"then": {
"en": "Segregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>",
"nl": "Afgescheiden voet-/fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>",
"de": "Getrennter Fuß-/Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>",
"id": "Jalur pejalan kaki/sepeda terpisah <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>"
"en": "Segregated foot/cycleway",
"nl": "Afgescheiden voet-/fietspad",
"de": "Getrennter Fuß-/Radweg",
"id": "Jalur pejalan kaki/sepeda terpisah"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"cycleway:foot=designated",
"cycleway:segregated=yes"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_road_sign_D09.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign=BE:D10",
"then": {
"en": "Unsegregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>",
"nl": "Gedeeld voet-/fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>",
"de": "Gemeinsamer Fuß-/Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>",
"id": "Jalur pejalan kaki/sepeda tidak terpisah <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>"
"en": "Unsegregated foot/cycleway",
"nl": "Gedeeld voet-/fietspad",
"de": "Gemeinsamer Fuß-/Radweg",
"id": "Jalur pejalan kaki/sepeda tidak terpisah"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"cycleway:foot=designated",
"cycleway:segregated=no"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_road_sign_D10.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign=none",
@ -878,10 +894,10 @@
{
"if": "traffic_sign=BE:D7",
"then": {
"en": "Compulsory cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>",
"nl": "Verplicht fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>",
"de": "Vorgeschriebener Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>",
"id": "Jalur sepeda wajib <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"en": "Compulsory cycleway",
"nl": "Verplicht fietspad",
"de": "Vorgeschriebener Radweg",
"id": "Jalur sepeda wajib"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
@ -889,23 +905,31 @@
"mofa=designated",
"moped=yes",
"speed_pedelec=yes"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_road_sign_D07.svg",
"class": "medium"
}
},
{
"if": "traffic_sign~BE:D7;.*",
"then": {
"en": "Compulsory cycleway (with supplementary sign)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> ",
"nl": "Verplicht fietspad (met onderbord)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>",
"de": "Vorgeschriebener Radweg (mit Zusatzschild)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> "
"en": "Compulsory cycleway (with supplementary sign)<br>",
"nl": "Verplicht fietspad (met onderbord)<br>",
"de": "Vorgeschriebener Radweg (mit Zusatzschild)<br>"
},
"hideInAnswer": true
"hideInAnswer": true,
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_road_sign_D07.svg",
"class": "medium"
}
},
{
"if": "traffic_sign=BE:D9",
"then": {
"en": "Segregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>",
"nl": "Afgescheiden voet-/fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>",
"de": "Getrennter Fuß-/Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>"
"en": "Segregated foot/cycleway",
"nl": "Afgescheiden voet-/fietspad",
"de": "Getrennter Fuß-/Radweg"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
@ -915,14 +939,18 @@
"moped=no",
"speed_pedelec=no",
"segregated=yes"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_road_sign_D09.svg",
"class": "medium"
}
},
{
"if": "traffic_sign=BE:D10",
"then": {
"en": "Unsegregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>",
"nl": "Gedeeld voet-/fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>",
"de": "Gemeinsamer Fuß-/Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>"
"en": "Unsegregated foot/cycleway",
"nl": "Gedeeld voet-/fietspad",
"de": "Gemeinsamer Fuß-/Radweg"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
@ -932,7 +960,11 @@
"moped=no",
"speed_pedelec=no",
"segregated=no"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_road_sign_D10.svg",
"class": "medium"
}
},
{
"if": "traffic_sign=none",
@ -961,70 +993,94 @@
{
"if": "cycleway:traffic_sign=BE:D7;BE:M6",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='width: 3em'>"
"en": "Mopeds must use the cycleway",
"nl": "Bromfiets Klass B verplicht op het fietspad"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"cycleway:moped=designated"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign=BE:D7;BE:M13",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>"
"en": "Speedpedelecs must use the cycleway",
"nl": "Speedpedelec (Bromfiets klasse P) verplicht op het fietspad"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"cycleway:speed_pedelec=designated"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign=BE:D7;BE:M14",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='width: 3em'>"
"en": "Mopeds and speedpedelecs must use the cycleway",
"nl": "Bromfiets klasse B en speedpedelec (Klasse P) verplicht op het fietspad"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"cycleway:moped=designated",
"cycleway:speed_pedelec=designated"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign=BE:D7;BE:M7",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='width: 3em'>"
"en": "Mopeds are not allowed",
"nl": "Bromfiets klasse B <b>verboden</b>"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"cycleway:moped=no"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign=BE:D7;BE:M15",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='width: 3em'>"
"en": "Speedpedelecs are not allowed",
"nl": "Speedpedelec (bromfiets klasse P) <b>verboden</b>"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"cycleway:speed_pedelec=no"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign=BE:D7;BE:M16",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='width: 3em'>"
"en": "Mopeds and speedpedelecs are not allowed",
"nl": "Bromfiets klasse B en speedpedelec (klasse P) <b>verboden</b>"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"cycleway:moped=designated",
"cycleway:speed_pedelec=no"
]
],
"icon": {
"path": "./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg",
"class": "medium"
}
},
{
"if": "cycleway:traffic_sign:supplementary=none",
@ -1036,99 +1092,6 @@
}
]
},
{
"id": "cycleway-traffic-signs-D7-supplementary",
"question": {
"en": "Does the traffic sign D7 (<img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 1.5em'>) have a supplementary sign?",
"nl": "Heeft het verkeersbord D7 (<img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 1.5em'>) een onderbord?",
"de": "Hat das Verkehrszeichen D7 (<img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 1.5em'>) ein Zusatzzeichen?"
},
"condition": {
"or": [
"traffic_sign=BE:D7",
"traffic_sign~BE:D7;.*"
]
},
"mappings": [
{
"if": "traffic_sign=BE:D7;BE:M6",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='width: 3em'>"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"moped=designated"
]
},
{
"if": "traffic_sign=BE:D7;BE:M13",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>",
"de": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"speed_pedelec=designated"
]
},
{
"if": "traffic_sign=BE:D7;BE:M14",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='width: 3em'>"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"moped=designated",
"speed_pedelec=designated"
]
},
{
"if": "traffic_sign=BE:D7;BE:M7",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='width: 3em'>"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"moped=no"
]
},
{
"if": ":traffic_sign=BE:D7;BE:M15",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='width: 3em'>"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"speed_pedelec=no"
]
},
{
"if": "traffic_sign=BE:D7;BE:M16",
"then": {
"en": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='width: 3em'>",
"nl": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='width: 3em'>"
},
"hideInAnswer": "_country!=be",
"addExtraTags": [
"moped=designated",
"speed_pedelec=no"
]
},
{
"if": "traffic_sign:supplementary=none",
"then": {
"en": "No supplementary traffic sign present",
"nl": "Geen onderbord aanwezig",
"de": "Kein zusätzliches Verkehrszeichen vorhanden"
}
}
]
},
{
"render": {
"en": "The buffer besides this cycleway is {cycleway:buffer} m",

View file

@ -32,16 +32,7 @@
"presets": [],
"mapRendering": [
{
"icon": {
"render": "direction_gradient:var(--catch-detail-color)",
"#": "For some weird reason, showing the icon in the layer control panel breaks the svg-gradient (because the svg gradient has a global color or smthng) - so we use a different icon without gradient",
"mappings": [
{
"if": "id=node/-1",
"then": "direction:var(--catch-detail-color)"
}
]
},
"icon": "direction_gradient:var(--catch-detail-color)",
"iconSize": "200,200,center",
"location": [
"point",

View file

@ -157,11 +157,15 @@
]
},
"then": {
"en": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Pillar type.",
"ja": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> ピラー型。",
"fr": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Pilier.",
"de": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Säulenart.",
"it": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Soprasuolo."
"en": "Pillar type.",
"ja": "ピラー型。",
"fr": "Pilier.",
"de": "Säulenart.",
"it": "Soprasuolo."
},
"icon": {
"path": "./assets/themes/hailhydrant/hydrant_pillar.svg",
"class": "small"
}
},
{
@ -171,11 +175,15 @@
]
},
"then": {
"en": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Pipe type.",
"ja": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> パイプ型。",
"fr": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Tuyau.",
"de": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Rohrtyp.",
"it": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Tubo."
"en": "Pipe type.",
"ja": "パイプ型。",
"fr": "Tuyau.",
"de": "Rohrtyp.",
"it": "Tubo."
},
"icon": {
"path": "./assets/themes/hailhydrant/hydrant_unknown.svg",
"class": "small"
}
},
{
@ -185,13 +193,17 @@
]
},
"then": {
"en": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Wall type.",
"id": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Jenis dinding.",
"ru": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Тип стены.",
"ja": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> 壁型。",
"fr": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Mural.",
"de": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Wandtyp.",
"it": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> A muro."
"en": "Wall type.",
"id": "Jenis dinding.",
"ru": "Тип стены.",
"ja": "壁型。",
"fr": "Mural.",
"de": "Wandtyp.",
"it": "A muro."
},
"icon": {
"path": "./assets/themes/hailhydrant/hydrant_unknown.svg",
"class": "small"
}
},
{
@ -201,11 +213,15 @@
]
},
"then": {
"en": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Underground type.",
"ja": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" />地下式。",
"fr": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Enterré.",
"de": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Untergrundtyp.",
"it": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Sottosuolo."
"en": "Underground type.",
"ja": "地下式。",
"fr": "Enterré.",
"de": "Untergrundtyp.",
"it": "Sottosuolo."
},
"icon": {
"path": "./assets/themes/hailhydrant/hydrant_underground.svg",
"class": "small"
}
}
]

View file

@ -71,7 +71,11 @@
{
"if": "highway=living_street",
"then": {
"nl:": "<div class='flex'><img src='./assets/layers/slow_roads/woonerf.svg' style='width: 150px; height: auto; margin-right: 0.5em;' /> <div> Dit is een woonerf: <ul><li>Voetgangers mogen hier de volledige breedte van de straat gebruiken</li><li>Gemotoriseerd verkeer mag maximaal <b>20km/h</b> rijden</li></ul></div></div>"
"nl:": "<div> Dit is een woonerf: <ul><li>Voetgangers mogen hier de volledige breedte van de straat gebruiken</li><li>Gemotoriseerd verkeer mag maximaal <b>20km/h</b> rijden</li></ul></div>"
},
"icon": {
"path": "./assets/layers/slow_roads/woonerf.svg",
"class": "medium"
}
},
{

View file

@ -77,7 +77,11 @@
]
},
"then": {
"nl": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door Natuurpunt"
"nl": "Dit gebied wordt beheerd door Natuurpunt"
},
"icon": {
"path": "./assets/themes/buurtnatuur/Natuurpunt.jpg",
"class": "small"
}
},
{
@ -87,9 +91,13 @@
]
},
"then": {
"nl": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door {operator}"
"nl": "Dit gebied wordt beheerd door {operator}"
},
"hideInAnswer": true
"hideInAnswer": true,
"icon": {
"path": "./assets/themes/buurtnatuur/Natuurpunt.jpg",
"class": "small"
}
}
],
"id": "Operator tag"

View file

@ -146,7 +146,11 @@
]
},
"then": {
"nl": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door Natuurpunt"
"nl": "Dit gebied wordt beheerd door Natuurpunt"
},
"icon": {
"path": "./assets/themes/buurtnatuur/Natuurpunt.jpg",
"class": "small"
}
},
{
@ -156,9 +160,13 @@
]
},
"then": {
"nl": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door {operator}"
"nl": "Dit gebied wordt beheerd door {operator}"
},
"hideInAnswer": true
"hideInAnswer": true,
"icon": {
"path": "./assets/themes/buurtnatuur/Natuurpunt.jpg",
"class": "small"
}
}
],
"id": "Operator tag"

View file

@ -485,6 +485,48 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"isShown",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"isShown",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -753,6 +795,48 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"title",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"title",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -1014,6 +1098,48 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"titleIcons",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"titleIcons",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -1291,6 +1417,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"icon",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"icon",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -1585,6 +1755,52 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"iconBadges",
"then",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"iconBadges",
"then",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -1852,6 +2068,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"iconSize",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"iconSize",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -2116,6 +2376,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"rotation",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"rotation",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -2380,6 +2684,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"label",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"label",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -2651,6 +2999,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"color",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"color",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -2918,6 +3310,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"width",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"width",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -3182,6 +3618,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"dashArray",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"dashArray",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -3446,6 +3926,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"lineCap",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"lineCap",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -3714,6 +4238,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"fill",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"fill",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -3978,6 +4546,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"fillColor",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"fillColor",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -4242,6 +4854,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"mapRendering",
"offset",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"mapRendering",
"offset",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -4625,6 +5281,48 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"tagRenderings",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"tagRenderings",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -4871,6 +5569,50 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"layers",
"tagRenderings",
"renderings",
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"layers",
"tagRenderings",
"renderings",
"mappings",
"icon",
"class"
],
"type": "string"
},
{
@ -5160,6 +5902,13 @@
],
"type": "boolean"
},
{
"path": [
"layers",
"syncSelection"
],
"type": "string"
},
{
"path": [
"layers",

View file

@ -138,6 +138,44 @@
"icon"
],
"typeHint": "icon",
"type": [
{
"type": "object",
"properties": {
"path": {
"description": "The path to the icon\nType: icon",
"type": "string"
},
"class": {
"description": "A hint to mapcomplete on how to render this icon within the mapping.\nThis is translated to 'mapping-icon-<classtype>', so defining your own in combination with a custom CSS is possible (but discouraged)",
"type": "string"
}
},
"required": [
"class",
"path"
]
},
{
"type": "string"
}
]
},
{
"path": [
"mappings",
"icon",
"path"
],
"typeHint": "icon",
"type": "string"
},
{
"path": [
"mappings",
"icon",
"class"
],
"type": "string"
},
{

View file

@ -45,7 +45,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 1.5,
"socialImage": "",
"layers": [
"bench",
"bench_at_pt",

View file

@ -19,7 +19,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 0.05,
"socialImage": "",
"layers": [
"bicycle_rental"
]

View file

@ -33,7 +33,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 1.5,
"socialImage": "",
"layers": [
"binocular"
]

View file

@ -504,7 +504,8 @@
]
},
"then": {
"nl": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door Natuurpunt"
"nl": "Dit gebied wordt beheerd door Natuurpunt",
"icon": "./assets/themes/buurtnatuur/Natuurpunt.jpg"
}
},
{
@ -514,7 +515,8 @@
]
},
"then": {
"nl": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door {operator}"
"nl": "Dit gebied wordt beheerd door {operator}",
"icon": "./assets/themes/buurtnatuur/Natuurpunt.jpg"
},
"hideInAnswer": true
},
@ -525,7 +527,8 @@
]
},
"then": {
"nl": "<img src=\"./assets/themes/buurtnatuur/ANB.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door het Agentschap Natuur en Bos"
"nl": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos",
"icon": "./assets/themes/buurtnatuur/ANB.jpg"
}
},
{

View file

@ -22,7 +22,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 1.5,
"socialImage": "",
"layers": [
"cafe_pub"
]

View file

@ -42,7 +42,7 @@
"startLon": 3.14,
"startZoom": 14,
"widenFactor": 1.5,
"socialImage": "./assets/themes/campersite/Bar%C3%9Fel_Wohnmobilstellplatz.jpg",
"socialImage": "./assets/themes/campersite/social_image.jpg",
"layers": [
{
"id": "caravansites",

View file

@ -1,14 +1,4 @@
[
{
"path": "Barßel_Wohnmobilstellplatz.jpg",
"license": "CC-BY-SA 3.0",
"authors": [
"ES01"
],
"sources": [
"https://commons.wikimedia.org/wiki/File:Bar%C3%9Fel_Wohnmobilstellplatz.jpg"
]
},
{
"path": "caravan.svg",
"license": "CC0",
@ -41,5 +31,15 @@
"https://github.com/osmandapp/Osmand/blob/master/LICENSE",
"https://github.com/osmandapp/OsmAnd-resources/blob/16892d8b2fc00dd422abfb2fef967d5ccd05eeac/icons/svg/poi/sanitary_dump_station.svg"
]
},
{
"path": "social_image.jpg",
"license": "CC-BY-SA 3.0",
"authors": [
"ES01"
],
"sources": [
"https://commons.wikimedia.org/wiki/File:Bar%C3%9Fel_Wohnmobilstellplatz.jpg"
]
}
]

View file

Before

Width:  |  Height:  |  Size: 593 KiB

After

Width:  |  Height:  |  Size: 593 KiB

View file

@ -39,7 +39,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 1.5,
"socialImage": "",
"defaultBackgroundId": "CartoDB.Voyager",
"layers": [
"charging_station"

View file

@ -41,7 +41,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 1.5,
"socialImage": "",
"layers": [
{
"id": "climbing_club",

View file

@ -33,7 +33,7 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 2,
"socialImage": "assets/themes/cyclofix/logo.svg",
"socialImage": "./assets/themes/cyclofix/logo.svg",
"layers": [
"bike_cafe",
"bike_shop",

View file

@ -32,7 +32,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 2,
"socialImage": "",
"clustering": {
"maxZoom": 14,
"minNeededElements": 250

View file

@ -36,7 +36,6 @@
"startLon": 4.480705,
"startZoom": 15,
"widenFactor": 1.5,
"socialImage": "",
"layers": [
{
"id": "facadegardens",

View file

@ -20,7 +20,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 3,
"socialImage": "",
"layers": [
"food"
]

View file

@ -16,7 +16,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 3,
"socialImage": "",
"layers": [
{
"builtin": "food",

View file

@ -16,7 +16,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 2,
"socialImage": "",
"hideFromOverview": true,
"layers": [
{

View file

@ -11,14 +11,13 @@
"en": "This theme is an attempt to help automating the GRB import.",
"hu": "Ez a sablon a flandriai GRB épületimportálás automatizlását kívánja megkönnyíteni."
},
"maintainer": "",
"maintainer": "Pieter Vander Vennet",
"icon": "./assets/themes/grb_import/logo.svg",
"version": "0",
"startLat": 51.0249,
"startLon": 4.026489,
"startZoom": 9,
"widenFactor": 2,
"socialImage": "",
"clustering": {
"maxZoom": 15
},
@ -605,15 +604,14 @@
},
"iconSize": "50,50,center",
"icon": {
"render": "./assets/themes/grb_import/housenumber_blank.svg",
"mappings": [
{
"if": "_intersects_with_other_features~*",
"then": "./assets/themes/grb_import/warning.svg"
},
{
"if": "addr:housenumber=",
"then": ""
"if": "addr:housenumber~*",
"then": "./assets/themes/grb_import/housenumber_blank.svg"
}
]
},

View file

@ -16,7 +16,6 @@
"startLon": 3.231,
"startZoom": 14,
"widenFactor": 2,
"socialImage": "",
"clustering": {
"maxZoom": 15
},

View file

@ -16,7 +16,6 @@
"startLon": 4.026489,
"startZoom": 9,
"widenFactor": 2,
"socialImage": "",
"clustering": {
"maxZoom": 15
},

View file

@ -29,7 +29,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 5,
"socialImage": "",
"layers": [
{
"id": "hackerspaces",

View file

@ -37,7 +37,6 @@
"startLon": 121.6625,
"startZoom": 6,
"widenFactor": 3,
"socialImage": "",
"layers": [
"hydrant",
"extinguisher",

View file

@ -37,7 +37,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 5,
"socialImage": "",
"layers": [
"map"
]

View file

@ -19,7 +19,6 @@
"startLon": 3.22435,
"startZoom": 12,
"widenFactor": 2,
"socialImage": "",
"layers": [
"drinking_water",
"birdhide",

View file

@ -41,7 +41,6 @@
]
],
"widenFactor": 2,
"socialImage": "",
"defaultBackgroundId": "CartoDB.Positron",
"enablePdfDownload": true,
"enableDownload": false,

View file

@ -32,7 +32,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 5,
"socialImage": "",
"layers": [
"observation_tower"
]

View file

@ -17,7 +17,6 @@
"startZoom": 1,
"hideFromOverview": true,
"widenFactor": 3,
"socialImage": "",
"layers": [
"play_forest"
]

View file

@ -45,7 +45,6 @@
"startLon": 4.399,
"startZoom": 13,
"widenFactor": 5,
"socialImage": "",
"layers": [
"playground"
]

View file

@ -22,7 +22,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 0.05,
"socialImage": "",
"hideFromOverview": true,
"clustering": false,
"overpassTimeout": 180,

View file

@ -35,7 +35,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 3,
"socialImage": "",
"layers": [
"shops"
]

View file

@ -18,7 +18,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 0.05,
"socialImage": "",
"hideFromOverview": true,
"layers": [
{

View file

@ -39,7 +39,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 2,
"socialImage": "",
"layers": [
"sport_pitch"
]

View file

@ -39,7 +39,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 2,
"socialImage": "",
"defaultBackgroundId": "osm",
"layers": [
"direction",

View file

@ -24,7 +24,6 @@
"startLon": 51.52224,
"startZoom": 17,
"widenFactor": 1.01,
"socialImage": "",
"hideFromOverview": true,
"clustering": {
"minNeededFeatures": 25,
@ -240,6 +239,7 @@
},
"mappings": [
{
"#": "ignore-image-in-then",
"if": "addr:substreet~*",
"then": "<div>The envelope below shows the address that we have recorded. You can change this by answering any remaining questions above, or by clicking the pencil icons below. We do not need you to provide a recipient's name or any of the parts shown in <span style='color: #4e7ce8'>[blue]</span>.</div><div style='background: #f1d592; min-height: 270px; border-radius: 2px; padding: 1rem 1rem 2rem 7rem; margin: 1rem; box-shadow: 0 2px 5px 0px rgba(0,0,0,.6)' class='flex flex-col'><img src='./assets/themes/uk_addresses/stamp-outline.png' class='self-end w-16'/><div>{addr:unit} {addr:housename}</div><div>{addr:housenumber} {addr:substreet}</div><div>{addr:street}</div><div>{addr:parentstreet}</div><div style='color: #4e7ce8'>[Suburb]</div><div style='color: #4e7ce8'>[Town]</div><div style='color: #4e7ce8'>[Postal code]</div></div>"
}

View file

@ -32,7 +32,6 @@
"startLon": 0,
"startZoom": 1,
"widenFactor": 2,
"socialImage": "",
"layers": [
{
"builtin": "waste_basket",

View file

@ -183,16 +183,16 @@
"Cycle barrier type": {
"mappings": {
"0": {
"then": "Einfach, nur zwei Barrieren mit einem Zwischenraum <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>"
"then": "Einfach, nur zwei Barrieren mit einem Zwischenraum"
},
"1": {
"then": "Doppelt, zwei Barrieren hintereinander <img src='./assets/themes/cycle_infra/Cycle_barrier_double.svg' style='width:8em'>"
"then": "Doppelt, zwei Barrieren hintereinander"
},
"2": {
"then": "Dreifach, drei Barrieren hintereinander <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>"
"then": "Dreifach, drei Barrieren hintereinander"
},
"3": {
"then": "Eine Durchfahrtsbeschränkung, Durchfahrtsbreite ist oben kleiner als unten <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>"
"then": "Eine Durchfahrtsbeschränkung, Durchfahrtsbreite ist oben kleiner als unten"
}
},
"question": "Um welche Art Fahrradhindernis handelt es sich?"
@ -574,25 +574,25 @@
"Bicycle parking type": {
"mappings": {
"0": {
"then": "Fahrradbügel <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>"
"then": "Fahrradbügel"
},
"1": {
"then": "Metallgestänge <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"then": "Metallgestänge"
},
"2": {
"then": "Halter für Fahrradlenker <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
"then": "Halter für Fahrradlenker"
},
"3": {
"then": "Gestell <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"then": "Gestell"
},
"4": {
"then": "Zweistufig <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"then": "Zweistufig"
},
"5": {
"then": "Schuppen <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"then": "Schuppen"
},
"6": {
"then": "Poller <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
"then": "Poller"
},
"7": {
"then": "Ein Bereich auf dem Boden, der für das Abstellen von Fahrrädern gekennzeichnet ist"
@ -1242,7 +1242,7 @@
"crossing-continue-through-red": {
"mappings": {
"0": {
"then": "Ein Radfahrer kann bei roter Ampel geradeaus fahren <img src='./assets/layers/crossings/Belgian_road_sign_B23.svg' style='width: 3em'>"
"then": "Ein Radfahrer kann bei roter Ampel geradeaus fahren"
},
"1": {
"then": "Ein Radfahrer kann bei roter Ampel geradeaus fahren"
@ -1278,7 +1278,7 @@
"crossing-right-turn-through-red": {
"mappings": {
"0": {
"then": "Ein Radfahrer kann bei roter Ampel rechts abbiegen <img src='./assets/layers/crossings/Belgian_road_sign_B22.svg' style='width: 3em'>"
"then": "Ein Radfahrer kann bei roter Ampel rechts abbiegen"
},
"1": {
"then": "Ein Radfahrer kann bei roter Ampel rechts abbiegen"
@ -1559,16 +1559,16 @@
"cycleway-lane-track-traffic-signs": {
"mappings": {
"0": {
"then": "Vorgeschriebener Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Vorgeschriebener Radweg"
},
"1": {
"then": "Vorgeschriebener Radweg (mit Zusatzschild)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> "
"then": "Vorgeschriebener Radweg (mit Zusatzschild)<br>"
},
"2": {
"then": "Getrennter Fuß-/Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>"
"then": "Getrennter Fuß-/Radweg"
},
"3": {
"then": "Gemeinsamer Fuß-/Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>"
"then": "Gemeinsamer Fuß-/Radweg"
},
"4": {
"then": "Kein Verkehrsschild vorhanden"
@ -1596,16 +1596,16 @@
"cycleway-traffic-signs": {
"mappings": {
"0": {
"then": "Vorgeschriebener Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Vorgeschriebener Radweg"
},
"1": {
"then": "Vorgeschriebener Radweg (mit Zusatzschild)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> "
"then": "Vorgeschriebener Radweg (mit Zusatzschild)<br>"
},
"2": {
"then": "Getrennter Fuß-/Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>"
"then": "Getrennter Fuß-/Radweg"
},
"3": {
"then": "Gemeinsamer Fuß-/Radweg <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>"
"then": "Gemeinsamer Fuß-/Radweg"
},
"4": {
"then": "Kein Verkehrsschild vorhanden"
@ -1613,17 +1613,6 @@
},
"question": "Welches Verkehrszeichen hat dieser Radweg?"
},
"cycleway-traffic-signs-D7-supplementary": {
"mappings": {
"1": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>"
},
"6": {
"then": "Kein zusätzliches Verkehrszeichen vorhanden"
}
},
"question": "Hat das Verkehrszeichen D7 (<img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 1.5em'>) ein Zusatzzeichen?"
},
"cycleway-traffic-signs-supplementary": {
"mappings": {
"6": {
@ -2135,16 +2124,16 @@
"then": "Der Typ des Hydranten ist unbekannt."
},
"1": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Säulenart."
"then": "Säulenart."
},
"2": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Rohrtyp."
"then": "Rohrtyp."
},
"3": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Wandtyp."
"then": "Wandtyp."
},
"4": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Untergrundtyp."
"then": "Untergrundtyp."
}
},
"question": "Um welche Art von Hydrant handelt es sich?",

View file

@ -183,16 +183,16 @@
"Cycle barrier type": {
"mappings": {
"0": {
"then": "Single, just two barriers with a space inbetween <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>"
"then": "Single, just two barriers with a space inbetween"
},
"1": {
"then": "Double, two barriers behind each other <img src='./assets/themes/cycle_infra/Cycle_barrier_double.svg' style='width:8em'>"
"then": "Double, two barriers behind each other"
},
"2": {
"then": "Triple, three barriers behind each other <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>"
"then": "Triple, three barriers behind each other"
},
"3": {
"then": "Squeeze gate, gap is smaller at top, than at the bottom <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>"
"then": "Squeeze gate, gap is smaller at top, than at the bottom"
}
},
"question": "What kind of cycling barrier is this?"
@ -687,25 +687,25 @@
"Bicycle parking type": {
"mappings": {
"0": {
"then": "Staple racks <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
"then": "Staple racks"
},
"1": {
"then": "Wheel rack/loops <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"then": "Wheel rack/loops"
},
"2": {
"then": "Handlebar holder <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
"then": "Handlebar holder"
},
"3": {
"then": "Rack <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"then": "Rack"
},
"4": {
"then": "Two-tiered <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"then": "Two-tiered"
},
"5": {
"then": "Shed <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"then": "Shed"
},
"6": {
"then": "Bollard <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
"then": "Bollard"
},
"7": {
"then": "An area on the floor which is marked for bicycle parking"
@ -1351,7 +1351,7 @@
"name": "Charging stations",
"presets": {
"0": {
"title": "charging station with a normal european wall plug <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (meant to charge electrical bikes)"
"title": "charging station for electrical bikes with a normal european wall plug <img src='./assets/layers/charging_station/TypeE.svg' style='width: 2rem; height: 2rem; float: left; background: white; border-radius: 1rem; margin-right: 0.5rem'/> (meant to charge electrical bikes)"
},
"1": {
"title": "charging station for cars"
@ -1394,100 +1394,100 @@
"Available_charging_stations (generated)": {
"mappings": {
"0": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/CEE7_4F.svg'/> <span><b>Schuko wall plug</b> without ground pin (CEE7/4 type F)</span></div>"
"then": "<b>Schuko wall plug</b> without ground pin (CEE7/4 type F)"
},
"1": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/CEE7_4F.svg'/> <span><b>Schuko wall plug</b> without ground pin (CEE7/4 type F)</span></div>"
"then": "<b>Schuko wall plug</b> without ground pin (CEE7/4 type F)"
},
"2": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/TypeE.svg'/> <span><b>European wall plug</b> with ground pin (CEE7/4 type E)</span></div>"
"then": "<b>European wall plug</b> with ground pin (CEE7/4 type E)"
},
"3": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/TypeE.svg'/> <span><b>European wall plug</b> with ground pin (CEE7/4 type E)</span></div>"
"then": "<b>European wall plug</b> with ground pin (CEE7/4 type E)"
},
"4": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>"
"then": "<b>Chademo</b>"
},
"5": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>"
"then": "<b>Chademo</b>"
},
"6": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 with cable</b> (J1772)</span></div>"
"then": "<b>Type 1 with cable</b> (J1772)"
},
"7": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 with cable</b> (J1772)</span></div>"
"then": "<b>Type 1 with cable</b> (J1772)"
},
"8": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>without</i> cable</b> (J1772)</span></div>"
"then": "<b>Type 1 <i>without</i> cable</b> (J1772)"
},
"9": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>without</i> cable</b> (J1772)</span></div>"
"then": "<b>Type 1 <i>without</i> cable</b> (J1772)"
},
"10": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (aka Type 1 Combo)</span></div>"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo)"
},
"11": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (aka Type 1 Combo)</span></div>"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo)"
},
"12": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
"then": "<b>Tesla Supercharger</b>"
},
"13": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
"then": "<b>Tesla Supercharger</b>"
},
"14": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>"
"then": "<b>Type 2</b> (mennekes)"
},
"15": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>"
"then": "<b>Type 2</b> (mennekes)"
},
"16": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>"
"then": "<b>Type 2 CCS</b> (mennekes)"
},
"17": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>"
"then": "<b>Type 2 CCS</b> (mennekes)"
},
"18": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 with cable</b> (mennekes)</span></div>"
"then": "<b>Type 2 with cable</b> (mennekes)"
},
"19": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 with cable</b> (mennekes)</span></div>"
"then": "<b>Type 2 with cable</b> (mennekes)"
},
"20": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (a branded type2_css)</span></div>"
"then": "<b>Tesla Supercharger CCS</b> (a branded type2_css)"
},
"21": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (a branded type2_css)</span></div>"
"then": "<b>Tesla Supercharger CCS</b> (a branded type2_css)"
},
"22": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger (destination)</b></span></div>"
"then": "<b>Tesla Supercharger (destination)</b>"
},
"23": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger (destination)</b></span></div>"
"then": "<b>Tesla Supercharger (destination)</b>"
},
"24": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</span></div>"
"then": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)"
},
"25": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</span></div>"
"then": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)"
},
"26": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> to charge phones and small electronics</span></div>"
"then": "<b>USB</b> to charge phones and small electronics"
},
"27": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> to charge phones and small electronics</span></div>"
"then": "<b>USB</b> to charge phones and small electronics"
},
"28": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-3pin.svg'/> <span><b>Bosch Active Connect with 3 pins</b> and cable</span></div>"
"then": "<b>Bosch Active Connect with 3 pins</b> and cable"
},
"29": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-3pin.svg'/> <span><b>Bosch Active Connect with 3 pins</b> and cable</span></div>"
"then": "<b>Bosch Active Connect with 3 pins</b> and cable"
},
"30": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect with 5 pins</b> and cable</span></div>"
"then": "<b>Bosch Active Connect with 5 pins</b> and cable"
},
"31": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect with 5 pins</b> and cable</span></div>"
"then": "<b>Bosch Active Connect with 5 pins</b> and cable"
}
},
"question": "Which charging connections are available here?"
@ -1601,7 +1601,7 @@
"current-0": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Schuko wall plug</b> without ground pin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> outputs at most 16 A"
"then": "<b>Schuko wall plug</b> without ground pin (CEE7/4 type F) outputs at most 16 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Schuko wall plug</b> without ground pin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> offer?",
@ -1610,7 +1610,7 @@
"current-1": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>European wall plug</b> with ground pin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> outputs at most 16 A"
"then": "<b>European wall plug</b> with ground pin (CEE7/4 type E) outputs at most 16 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>European wall plug</b> with ground pin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> offer?",
@ -1619,10 +1619,10 @@
"current-10": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (a branded type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs at most 125 A"
"then": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs at most 125 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (a branded type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs at most 350 A"
"then": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs at most 350 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (a branded type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> offer?",
@ -1631,10 +1631,10 @@
"current-11": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 125 A"
"then": "<b>Tesla Supercharger (destination)</b> outputs at most 125 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 350 A"
"then": "<b>Tesla Supercharger (destination)</b> outputs at most 350 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> offer?",
@ -1643,10 +1643,10 @@
"current-12": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most 16 A"
"then": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs at most 16 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most 32 A"
"then": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs at most 32 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> offer?",
@ -1655,10 +1655,10 @@
"current-13": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>USB</b> to charge phones and small electronics</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> outputs at most 1 A"
"then": "<b>USB</b> to charge phones and small electronics outputs at most 1 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>USB</b> to charge phones and small electronics</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> outputs at most 2 A"
"then": "<b>USB</b> to charge phones and small electronics outputs at most 2 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>USB</b> to charge phones and small electronics</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> offer?",
@ -1675,7 +1675,7 @@
"current-2": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> outputs at most 120 A"
"then": "<b>Chademo</b> outputs at most 120 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> offer?",
@ -1684,7 +1684,7 @@
"current-3": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 with cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs at most 32 A"
"then": "<b>Type 1 with cable</b> (J1772) outputs at most 32 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Type 1 with cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> offer?",
@ -1693,7 +1693,7 @@
"current-4": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs at most 32 A"
"then": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 32 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> offer?",
@ -1702,10 +1702,10 @@
"current-5": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> outputs at most 50 A"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 50 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> outputs at most 125 A"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 125 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> offer?",
@ -1714,10 +1714,10 @@
"current-6": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 125 A"
"then": "<b>Tesla Supercharger</b> outputs at most 125 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 350 A"
"then": "<b>Tesla Supercharger</b> outputs at most 350 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> offer?",
@ -1726,10 +1726,10 @@
"current-7": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> outputs at most 16 A"
"then": "<b>Type 2</b> (mennekes) outputs at most 16 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> outputs at most 32 A"
"then": "<b>Type 2</b> (mennekes) outputs at most 32 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> offer?",
@ -1738,10 +1738,10 @@
"current-8": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs at most 125 A"
"then": "<b>Type 2 CCS</b> (mennekes) outputs at most 125 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs at most 350 A"
"then": "<b>Type 2 CCS</b> (mennekes) outputs at most 350 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> offer?",
@ -1750,10 +1750,10 @@
"current-9": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most 16 A"
"then": "<b>Type 2 with cable</b> (mennekes) outputs at most 16 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most 32 A"
"then": "<b>Type 2 with cable</b> (mennekes) outputs at most 32 A"
}
},
"question": "What current do the plugs with <div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> offer?",
@ -1863,7 +1863,7 @@
"power-output-0": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Schuko wall plug</b> without ground pin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> outputs at most 3.6 kw"
"then": "<b>Schuko wall plug</b> without ground pin (CEE7/4 type F) outputs at most 3.6 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Schuko wall plug</b> without ground pin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> offer?",
@ -1872,10 +1872,10 @@
"power-output-1": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>European wall plug</b> with ground pin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> outputs at most 3 kw"
"then": "<b>European wall plug</b> with ground pin (CEE7/4 type E) outputs at most 3 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>European wall plug</b> with ground pin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> outputs at most 22 kw"
"then": "<b>European wall plug</b> with ground pin (CEE7/4 type E) outputs at most 22 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>European wall plug</b> with ground pin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> offer?",
@ -1884,7 +1884,7 @@
"power-output-10": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (a branded type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs at most 50 kw"
"then": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs at most 50 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (a branded type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> offer?",
@ -1893,13 +1893,13 @@
"power-output-11": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 120 kw"
"then": "<b>Tesla Supercharger (destination)</b> outputs at most 120 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 150 kw"
"then": "<b>Tesla Supercharger (destination)</b> outputs at most 150 kw A"
},
"2": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 250 kw"
"then": "<b>Tesla Supercharger (destination)</b> outputs at most 250 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> offer?",
@ -1908,10 +1908,10 @@
"power-output-12": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most 11 kw"
"then": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs at most 11 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most 22 kw"
"then": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs at most 22 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> offer?",
@ -1920,10 +1920,10 @@
"power-output-13": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>USB</b> to charge phones and small electronics</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> outputs at most 5w"
"then": "<b>USB</b> to charge phones and small electronics outputs at most 5w A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>USB</b> to charge phones and small electronics</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> outputs at most 10w"
"then": "<b>USB</b> to charge phones and small electronics outputs at most 10w A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>USB</b> to charge phones and small electronics</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> offer?",
@ -1940,7 +1940,7 @@
"power-output-2": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> outputs at most 50 kw"
"then": "<b>Chademo</b> outputs at most 50 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> offer?",
@ -1949,10 +1949,10 @@
"power-output-3": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 with cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs at most 3.7 kw"
"then": "<b>Type 1 with cable</b> (J1772) outputs at most 3.7 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 with cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs at most 7 kw"
"then": "<b>Type 1 with cable</b> (J1772) outputs at most 7 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Type 1 with cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> offer?",
@ -1961,16 +1961,16 @@
"power-output-4": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs at most 3.7 kw"
"then": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 3.7 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs at most 6.6 kw"
"then": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 6.6 kw A"
},
"2": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs at most 7 kw"
"then": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 7 kw A"
},
"3": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs at most 7.2 kw"
"then": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs at most 7.2 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> offer?",
@ -1979,16 +1979,16 @@
"power-output-5": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> outputs at most 50 kw"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 50 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> outputs at most 62.5 kw"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 62.5 kw A"
},
"2": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> outputs at most 150 kw"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 150 kw A"
},
"3": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> outputs at most 350 kw"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs at most 350 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> offer?",
@ -1997,13 +1997,13 @@
"power-output-6": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 120 kw"
"then": "<b>Tesla Supercharger</b> outputs at most 120 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 150 kw"
"then": "<b>Tesla Supercharger</b> outputs at most 150 kw A"
},
"2": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs at most 250 kw"
"then": "<b>Tesla Supercharger</b> outputs at most 250 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> offer?",
@ -2012,10 +2012,10 @@
"power-output-7": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> outputs at most 11 kw"
"then": "<b>Type 2</b> (mennekes) outputs at most 11 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> outputs at most 22 kw"
"then": "<b>Type 2</b> (mennekes) outputs at most 22 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> offer?",
@ -2024,7 +2024,7 @@
"power-output-8": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs at most 50 kw"
"then": "<b>Type 2 CCS</b> (mennekes) outputs at most 50 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> offer?",
@ -2033,10 +2033,10 @@
"power-output-9": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most 11 kw"
"then": "<b>Type 2 with cable</b> (mennekes) outputs at most 11 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs at most 22 kw"
"then": "<b>Type 2 with cable</b> (mennekes) outputs at most 22 kw A"
}
},
"question": "What power output does a single plug of type <div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> offer?",
@ -2052,7 +2052,7 @@
"voltage-0": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Schuko wall plug</b> without ground pin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> outputs 230 volt"
"then": "<b>Schuko wall plug</b> without ground pin (CEE7/4 type F) outputs 230 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Schuko wall plug</b> without ground pin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> offer?",
@ -2061,7 +2061,7 @@
"voltage-1": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>European wall plug</b> with ground pin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> outputs 230 volt"
"then": "<b>European wall plug</b> with ground pin (CEE7/4 type E) outputs 230 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>European wall plug</b> with ground pin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> offer?",
@ -2070,10 +2070,10 @@
"voltage-10": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (a branded type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs 500 volt"
"then": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs 500 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (a branded type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs 920 volt"
"then": "<b>Tesla Supercharger CCS</b> (a branded type2_css) outputs 920 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (a branded type2_css)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> offer?",
@ -2082,7 +2082,7 @@
"voltage-11": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs 480 volt"
"then": "<b>Tesla Supercharger (destination)</b> outputs 480 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> offer?",
@ -2091,10 +2091,10 @@
"voltage-12": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs 230 volt"
"then": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs 230 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs 400 volt"
"then": "<b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla) outputs 400 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (A Type 2 with cable branded as tesla)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> offer?",
@ -2103,7 +2103,7 @@
"voltage-13": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>USB</b> to charge phones and small electronics</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> outputs 5 volt"
"then": "<b>USB</b> to charge phones and small electronics outputs 5 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>USB</b> to charge phones and small electronics</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> offer?",
@ -2120,7 +2120,7 @@
"voltage-2": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> outputs 500 volt"
"then": "<b>Chademo</b> outputs 500 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> offer?",
@ -2129,10 +2129,10 @@
"voltage-3": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 with cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs 200 volt"
"then": "<b>Type 1 with cable</b> (J1772) outputs 200 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 with cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs 240 volt"
"then": "<b>Type 1 with cable</b> (J1772) outputs 240 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Type 1 with cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> offer?",
@ -2141,10 +2141,10 @@
"voltage-4": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs 200 volt"
"then": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs 200 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> outputs 240 volt"
"then": "<b>Type 1 <i>without</i> cable</b> (J1772) outputs 240 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Type 1 <i>without</i> cable</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> offer?",
@ -2153,10 +2153,10 @@
"voltage-5": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> outputs 400 volt"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs 400 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> outputs 1000 volt"
"then": "<b>Type 1 CCS</b> (aka Type 1 Combo) outputs 1000 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Type 1 CCS</b> (aka Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> offer?",
@ -2165,7 +2165,7 @@
"voltage-6": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> outputs 480 volt"
"then": "<b>Tesla Supercharger</b> outputs 480 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> offer?",
@ -2174,10 +2174,10 @@
"voltage-7": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> outputs 230 volt"
"then": "<b>Type 2</b> (mennekes) outputs 230 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> outputs 400 volt"
"then": "<b>Type 2</b> (mennekes) outputs 400 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> offer?",
@ -2186,10 +2186,10 @@
"voltage-8": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs 500 volt"
"then": "<b>Type 2 CCS</b> (mennekes) outputs 500 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> outputs 920 volt"
"then": "<b>Type 2 CCS</b> (mennekes) outputs 920 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> offer?",
@ -2198,10 +2198,10 @@
"voltage-9": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs 230 volt"
"then": "<b>Type 2 with cable</b> (mennekes) outputs 230 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> outputs 400 volt"
"then": "<b>Type 2 with cable</b> (mennekes) outputs 400 volt"
}
},
"question": "What voltage do the plugs with <div style='display: inline-block'><b><b>Type 2 with cable</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> offer?",
@ -2215,7 +2215,7 @@
"title": {
"mappings": {
"0": {
"then": "Charging station for ebikes"
"then": "Charging station for electrical bicycles"
},
"1": {
"then": "Charging station for cars"
@ -2305,7 +2305,7 @@
"crossing-continue-through-red": {
"mappings": {
"0": {
"then": "A cyclist can go straight on if the light is red <img src='./assets/layers/crossings/Belgian_road_sign_B23.svg' style='width: 3em'>"
"then": "A cyclist can go straight on if the light is red"
},
"1": {
"then": "A cyclist can go straight on if the light is red"
@ -2341,7 +2341,7 @@
"crossing-right-turn-through-red": {
"mappings": {
"0": {
"then": "A cyclist can turn right if the light is red <img src='./assets/layers/crossings/Belgian_road_sign_B22.svg' style='width: 3em'>"
"then": "A cyclist can turn right if the light is red"
},
"1": {
"then": "A cyclist can turn right if the light is red"
@ -2626,16 +2626,16 @@
"cycleway-lane-track-traffic-signs": {
"mappings": {
"0": {
"then": "Compulsory cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Compulsory cycleway"
},
"1": {
"then": "Compulsory cycleway (with supplementary sign)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> "
"then": "Compulsory cycleway (with supplementary sign)<br>"
},
"2": {
"then": "Segregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>"
"then": "Segregated foot/cycleway"
},
"3": {
"then": "Unsegregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>"
"then": "Unsegregated foot/cycleway"
},
"4": {
"then": "No traffic sign present"
@ -2663,16 +2663,16 @@
"cycleway-traffic-signs": {
"mappings": {
"0": {
"then": "Compulsory cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Compulsory cycleway"
},
"1": {
"then": "Compulsory cycleway (with supplementary sign)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> "
"then": "Compulsory cycleway (with supplementary sign)<br>"
},
"2": {
"then": "Segregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>"
"then": "Segregated foot/cycleway"
},
"3": {
"then": "Unsegregated foot/cycleway <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>"
"then": "Unsegregated foot/cycleway"
},
"4": {
"then": "No traffic sign present"
@ -2680,51 +2680,25 @@
},
"question": "What traffic sign does this cycleway have?"
},
"cycleway-traffic-signs-D7-supplementary": {
"mappings": {
"0": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='width: 3em'>"
},
"1": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>"
},
"2": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='width: 3em'>"
},
"3": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='width: 3em'>"
},
"4": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='width: 3em'>"
},
"5": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='width: 3em'>"
},
"6": {
"then": "No supplementary traffic sign present"
}
},
"question": "Does the traffic sign D7 (<img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 1.5em'>) have a supplementary sign?"
},
"cycleway-traffic-signs-supplementary": {
"mappings": {
"0": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='width: 3em'>"
"then": "Mopeds must use the cycleway"
},
"1": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>"
"then": "Speedpedelecs must use the cycleway"
},
"2": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='width: 3em'>"
"then": "Mopeds and speedpedelecs must use the cycleway"
},
"3": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='width: 3em'>"
"then": "Mopeds are not allowed"
},
"4": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='width: 3em'>"
"then": "Speedpedelecs are not allowed"
},
"5": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='width: 3em'>"
"then": "Mopeds and speedpedelecs are not allowed"
},
"6": {
"then": "No supplementary traffic sign present"
@ -3512,16 +3486,16 @@
"then": "The hydrant type is unknown."
},
"1": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Pillar type."
"then": "Pillar type."
},
"2": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Pipe type."
"then": "Pipe type."
},
"3": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Wall type."
"then": "Wall type."
},
"4": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Underground type."
"then": "Underground type."
}
},
"question": "What type of hydrant is it?",

View file

@ -183,16 +183,16 @@
"Cycle barrier type": {
"mappings": {
"0": {
"then": "Simple, deux barrières côte à côte <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>"
"then": "Simple, deux barrières côte à côte"
},
"1": {
"then": "Double, deux barrières successives"
},
"2": {
"then": "Triple, trois barrières successives <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>"
"then": "Triple, trois barrières successives"
},
"3": {
"then": "Poire, lespace en hauteur est plus faible quau sol <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>"
"then": "Poire, lespace en hauteur est plus faible quau sol"
}
},
"question": "Quel est ce type de barrière cyclable?"
@ -539,25 +539,25 @@
"Bicycle parking type": {
"mappings": {
"0": {
"then": "Arceaux <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>"
"then": "Arceaux"
},
"1": {
"then": "Pinces-roues <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"then": "Pinces-roues"
},
"2": {
"then": "Support guidon <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
"then": "Support guidon"
},
"3": {
"then": "Râtelier <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"then": "Râtelier"
},
"4": {
"then": "Superposé <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"then": "Superposé"
},
"5": {
"then": "Abri <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"then": "Abri"
},
"6": {
"then": "Potelet <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
"then": "Potelet"
},
"7": {
"then": "Zone au sol qui est marquée pour le stationnement des vélos"
@ -1438,16 +1438,16 @@
"then": "La borne est de type inconnu."
},
"1": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Pilier."
"then": "Pilier."
},
"2": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Tuyau."
"then": "Tuyau."
},
"3": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Mural."
"then": "Mural."
},
"4": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Enterré."
"then": "Enterré."
}
},
"question": "De quel type de borne sagit-il ?",

View file

@ -89,22 +89,22 @@
"Bicycle parking type": {
"mappings": {
"0": {
"then": "De roda (Stands) <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>"
"then": "De roda (Stands)"
},
"1": {
"then": "Aros <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"then": "Aros"
},
"2": {
"then": "Cadeado para guiador <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
"then": "Cadeado para guiador"
},
"3": {
"then": "Cremalleira <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"then": "Cremalleira"
},
"4": {
"then": "Dobre cremalleira <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"then": "Dobre cremalleira"
},
"5": {
"then": "Abeiro <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"then": "Abeiro"
}
},
"question": "Que tipo de aparcadoiro de bicicletas é?",

View file

@ -183,16 +183,16 @@
"Cycle barrier type": {
"mappings": {
"0": {
"then": "Egyszeres: csak két korlát, közöttük térköz <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>"
"then": "Egyszeres: csak két korlát, közöttük térköz"
},
"1": {
"then": "Kétszeres: két, egymáshoz képest eltolt korlát egymás után <img src='./assets/themes/cycle_infra/Cycle_barrier_double.svg' style='width:8em'>"
"then": "Kétszeres: két, egymáshoz képest eltolt korlát egymás után"
},
"2": {
"then": "Háromszoros: három, egymáshoz képest eltolt korlát egymás után <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>"
"then": "Háromszoros: három, egymáshoz képest eltolt korlát egymás után"
},
"3": {
"then": "Szűkítőkapu: a rés felül keskenyebb, mint alul <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>"
"then": "Szűkítőkapu: a rés felül keskenyebb, mint alul"
}
},
"question": "Milyen fajta kerékpárakadály ez?"
@ -397,16 +397,16 @@
"Bicycle parking type": {
"mappings": {
"0": {
"then": "Korlát <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
"then": "Korlát"
},
"1": {
"then": "Kerékbefogó hurok <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"then": "Kerékbefogó hurok"
},
"4": {
"then": "Kétszintű <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"then": "Kétszintű"
},
"5": {
"then": "Fészer <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"then": "Fészer"
}
},
"question": "Milyen típusú ez a kerékpártároló?",

View file

@ -228,16 +228,16 @@
"cycleway-lane-track-traffic-signs": {
"mappings": {
"0": {
"then": "Jalur sepeda wajib <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Jalur sepeda wajib"
},
"1": {
"then": "Jalur sepeda wajib (dengan tanda tambahan)<br><img src ='./aset/tema/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'> "
"then": "Jalur sepeda wajib (dengan tanda tambahan)<br>"
},
"2": {
"then": "Jalur pejalan kaki/sepeda terpisah <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>"
"then": "Jalur pejalan kaki/sepeda terpisah"
},
"3": {
"then": "Jalur pejalan kaki/sepeda tidak terpisah <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>"
"then": "Jalur pejalan kaki/sepeda tidak terpisah"
},
"4": {
"then": "Tidak ada rambu lalu lintas"
@ -265,7 +265,7 @@
"cycleway-traffic-signs": {
"mappings": {
"0": {
"then": "Jalur sepeda wajib <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Jalur sepeda wajib"
}
}
}
@ -304,7 +304,7 @@
"hydrant-type": {
"mappings": {
"3": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Jenis dinding."
"then": "Jenis dinding."
}
}
}

View file

@ -419,25 +419,25 @@
"Bicycle parking type": {
"mappings": {
"0": {
"then": "Archetti <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
"then": "Archetti"
},
"1": {
"then": "Scolapiatti <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"then": "Scolapiatti"
},
"2": {
"then": "Blocca manubrio <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
"then": "Blocca manubrio"
},
"3": {
"then": "Rastrelliera <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"then": "Rastrelliera"
},
"4": {
"then": "A due piani <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"then": "A due piani"
},
"5": {
"then": "Rimessa <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"then": "Rimessa"
},
"6": {
"then": "Colonnina <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
"then": "Colonnina"
},
"7": {
"then": "Una zona del pavimento che è marcata per il parcheggio delle bici"
@ -1126,16 +1126,16 @@
"then": "Il tipo di idrante è sconosciuto."
},
"1": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> Soprasuolo."
"then": "Soprasuolo."
},
"2": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Tubo."
"then": "Tubo."
},
"3": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> A muro."
"then": "A muro."
},
"4": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" /> Sottosuolo."
"then": "Sottosuolo."
}
},
"question": "Di che tipo è questo idrante?",

View file

@ -276,16 +276,16 @@
"then": "消火栓の種類は不明です。"
},
"1": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_pillar.svg\" /> ピラー型。"
"then": "ピラー型。"
},
"2": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> パイプ型。"
"then": "パイプ型。"
},
"3": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> 壁型。"
"then": "壁型。"
},
"4": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_underground.svg\" />地下式。"
"then": "地下式。"
}
},
"question": "どんな消火栓なんですか?",

View file

@ -183,16 +183,16 @@
"Cycle barrier type": {
"mappings": {
"0": {
"then": "Enkelvoudig, slechts twee hekjes met ruimte ertussen <img src='./assets/themes/cycle_infra/Cycle_barrier_single.png' style='width:8em'>"
"then": "Enkelvoudig, slechts twee hekjes met ruimte ertussen"
},
"1": {
"then": "Dubbel, twee hekjes achter elkaar <img src='./assets/themes/cycle_infra/Cycle_barrier_double.svg' style='width:8em'>"
"then": "Dubbel, twee hekjes achter elkaar"
},
"2": {
"then": "Drievoudig, drie hekjes achter elkaar <img src='./assets/themes/cycle_infra/Cycle_barrier_triple.png' style='width:8em'>"
"then": "Drievoudig, drie hekjes achter elkaar"
},
"3": {
"then": "Knijppoort, ruimte is smaller aan de top, dan aan de bodem <img src='./assets/themes/cycle_infra/Cycle_barrier_squeeze.png' style='width:8em'>"
"then": "Knijppoort, ruimte is smaller aan de top, dan aan de bodem"
}
},
"question": "Wat voor fietshekjes zijn dit?"
@ -687,25 +687,25 @@
"Bicycle parking type": {
"mappings": {
"0": {
"then": "Nietjes <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>"
"then": "Nietjes"
},
"1": {
"then": "Wielrek/lussen <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"then": "Wielrek/lussen"
},
"2": {
"then": "Stuurhouder <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
"then": "Stuurhouder"
},
"3": {
"then": "Rek <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"then": "Rek"
},
"4": {
"then": "Dubbel (twee verdiepingen) <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"then": "Dubbel (twee verdiepingen)"
},
"5": {
"then": "Schuur <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"then": "Schuur"
},
"6": {
"then": "Paal met ring <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
"then": "Paal met ring"
},
"7": {
"then": "Een oppervlakte die gemarkeerd is om fietsen te parkeren"
@ -1343,7 +1343,7 @@
"question": "Heeft een <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>"
},
"13": {
"question": "Heeft een <div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
"question": "Heeft een <div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
},
"14": {
"question": "Heeft een <div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>"
@ -1360,7 +1360,7 @@
"name": "Oplaadpunten",
"presets": {
"0": {
"title": "laadpunt voor elektrische fietsen met gewone stekker(s)"
"title": "oplaadpunt voor elektrische fietsen"
},
"1": {
"title": "oplaadstation voor elektrische auto's"
@ -1403,103 +1403,103 @@
"Available_charging_stations (generated)": {
"mappings": {
"0": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/CEE7_4F.svg'/> <span><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</span></div>"
"then": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)"
},
"1": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/CEE7_4F.svg'/> <span><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</span></div>"
"then": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)"
},
"2": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/TypeE.svg'/> <span><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</span></div>"
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E)"
},
"3": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/TypeE.svg'/> <span><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</span></div>"
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E)"
},
"4": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>"
"then": "<b>Chademo</b>"
},
"5": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Chademo_type4.svg'/> <span><b>Chademo</b></span></div>"
"then": "<b>Chademo</b>"
},
"6": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>"
"then": "<b>Type 1 met kabel</b> (J1772)"
},
"7": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 met kabel</b> (J1772)</span></div>"
"then": "<b>Type 1 met kabel</b> (J1772)"
},
"8": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>"
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772)"
},
"9": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1_J1772.svg'/> <span><b>Type 1 <i>zonder</i> kabel</b> (J1772)</span></div>"
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772)"
},
"10": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo)"
},
"11": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type1-ccs.svg'/> <span><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</span></div>"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo)"
},
"12": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
"then": "<b>Tesla Supercharger</b>"
},
"13": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger</b></span></div>"
"then": "<b>Tesla Supercharger</b>"
},
"14": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>"
"then": "<b>Type 2</b> (mennekes)"
},
"15": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_socket.svg'/> <span><b>Type 2</b> (mennekes)</span></div>"
"then": "<b>Type 2</b> (mennekes)"
},
"16": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>"
"then": "<b>Type 2 CCS</b> (mennekes)"
},
"17": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Type 2 CCS</b> (mennekes)</span></div>"
"then": "<b>Type 2 CCS</b> (mennekes)"
},
"18": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>"
"then": "<b>Type 2 met kabel</b> (J1772)"
},
"19": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Type 2 met kabel</b> (J1772)</span></div>"
"then": "<b>Type 2 met kabel</b> (J1772)"
},
"20": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>"
"then": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)"
},
"21": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_CCS.svg'/> <span><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</span></div>"
"then": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)"
},
"22": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger (destination)</b></span></div>"
"then": "<b>Tesla Supercharger (destination)</b>"
},
"23": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/> <span><b>Tesla Supercharger (destination)</b></span></div>"
"then": "<b>Tesla Supercharger (destination)</b>"
},
"24": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</span></div>"
"then": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)"
},
"25": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/Type2_tethered.svg'/> <span><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</span></div>"
"then": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)"
},
"26": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>"
"then": "<b>USB</b> om GSMs en kleine electronica op te laden"
},
"27": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/usb_port.svg'/> <span><b>USB</b> om GSMs en kleine electronica op te laden</span></div>"
"then": "<b>USB</b> om GSMs en kleine electronica op te laden"
},
"28": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-3pin.svg'/> <span><b>Bosch Active Connect met 3 pinnen</b> aan een kabel</span></div>"
"then": "<b>Bosch Active Connect met 3 pinnen</b> aan een kabel"
},
"29": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-3pin.svg'/> <span><b>Bosch Active Connect met 3 pinnen</b> aan een kabel</span></div>"
"then": "<b>Bosch Active Connect met 3 pinnen</b> aan een kabel"
},
"30": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>"
"then": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel"
},
"31": {
"then": "<div class='flex'><img class='w-12 mx-4' src='./assets/layers/charging_station/bosch-5pin.svg'/> <span><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</span></div>"
"then": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel"
}
},
"question": "Welke aansluitingen zijn hier beschikbaar?"
"question": "Welke laadaansluitingen zijn hier beschikbaar?"
},
"Network": {
"mappings": {
@ -1610,7 +1610,7 @@
"current-0": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> levert een stroom van maximaal 16 A"
"then": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal 16 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div>?",
@ -1619,7 +1619,7 @@
"current-1": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> levert een stroom van maximaal 16 A"
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E) levert een stroom van maximaal 16 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div>?",
@ -1628,10 +1628,10 @@
"current-10": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> levert een stroom van maximaal 125 A"
"then": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) levert een stroom van maximaal 125 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> levert een stroom van maximaal 350 A"
"then": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) levert een stroom van maximaal 350 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>?",
@ -1640,10 +1640,10 @@
"current-11": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een stroom van maximaal 125 A"
"then": "<b>Tesla Supercharger (destination)</b> levert een stroom van maximaal 125 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een stroom van maximaal 350 A"
"then": "<b>Tesla Supercharger (destination)</b> levert een stroom van maximaal 350 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>?",
@ -1652,22 +1652,22 @@
"current-12": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een stroom van maximaal 16 A"
"then": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 16 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een stroom van maximaal 32 A"
"then": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een stroom van maximaal 32 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?",
"render": "<div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een stroom van maximaal {socket:tesla_destination:current}A"
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?",
"render": "<div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een stroom van maximaal {socket:tesla_destination:current}A"
},
"current-13": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> levert een stroom van maximaal 1 A"
"then": "<b>USB</b> om GSMs en kleine electronica op te laden levert een stroom van maximaal 1 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> levert een stroom van maximaal 2 A"
"then": "<b>USB</b> om GSMs en kleine electronica op te laden levert een stroom van maximaal 2 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>?",
@ -1684,7 +1684,7 @@
"current-2": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> levert een stroom van maximaal 120 A"
"then": "<b>Chademo</b> levert een stroom van maximaal 120 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div>?",
@ -1693,7 +1693,7 @@
"current-3": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> levert een stroom van maximaal 32 A"
"then": "<b>Type 1 met kabel</b> (J1772) levert een stroom van maximaal 32 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Type 1 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div>?",
@ -1702,7 +1702,7 @@
"current-4": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> levert een stroom van maximaal 32 A"
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een stroom van maximaal 32 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div>?",
@ -1711,10 +1711,10 @@
"current-5": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> levert een stroom van maximaal 50 A"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een stroom van maximaal 50 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> levert een stroom van maximaal 125 A"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een stroom van maximaal 125 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div>?",
@ -1723,10 +1723,10 @@
"current-6": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een stroom van maximaal 125 A"
"then": "<b>Tesla Supercharger</b> levert een stroom van maximaal 125 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een stroom van maximaal 350 A"
"then": "<b>Tesla Supercharger</b> levert een stroom van maximaal 350 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>?",
@ -1735,10 +1735,10 @@
"current-7": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> levert een stroom van maximaal 16 A"
"then": "<b>Type 2</b> (mennekes) levert een stroom van maximaal 16 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> levert een stroom van maximaal 32 A"
"then": "<b>Type 2</b> (mennekes) levert een stroom van maximaal 32 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div>?",
@ -1747,10 +1747,10 @@
"current-8": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> levert een stroom van maximaal 125 A"
"then": "<b>Type 2 CCS</b> (mennekes) levert een stroom van maximaal 125 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> levert een stroom van maximaal 350 A"
"then": "<b>Type 2 CCS</b> (mennekes) levert een stroom van maximaal 350 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>?",
@ -1759,10 +1759,10 @@
"current-9": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een stroom van maximaal 16 A"
"then": "<b>Type 2 met kabel</b> (J1772) levert een stroom van maximaal 16 A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een stroom van maximaal 32 A"
"then": "<b>Type 2 met kabel</b> (J1772) levert een stroom van maximaal 32 A"
}
},
"question": "Welke stroom levert de stekker van type <div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?",
@ -1822,7 +1822,7 @@
"render": "Hier zijn <b class='text-xl'>{socket:tesla_destination}</b> stekkers van het type <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>"
},
"plugs-12": {
"question": "Hoeveel stekkers van type <div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> heeft dit oplaadpunt?",
"question": "Hoeveel stekkers van type <div style='display: inline-block'><b><b>Tesla supercharger (destination)</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> heeft dit oplaadpunt?",
"render": "Hier zijn <b class='text-xl'>{socket:tesla_destination}</b> stekkers van het type <div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>"
},
"plugs-13": {
@ -1872,7 +1872,7 @@
"power-output-0": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> levert een vermogen van maximaal 3.6 kw"
"then": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal 3.6 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div>?",
@ -1881,10 +1881,10 @@
"power-output-1": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> levert een vermogen van maximaal 3 kw"
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 3 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> levert een vermogen van maximaal 22 kw"
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 22 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div>?",
@ -1893,7 +1893,7 @@
"power-output-10": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> levert een vermogen van maximaal 50 kw"
"then": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) levert een vermogen van maximaal 50 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>?",
@ -1902,13 +1902,13 @@
"power-output-11": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een vermogen van maximaal 120 kw"
"then": "<b>Tesla Supercharger (destination)</b> levert een vermogen van maximaal 120 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een vermogen van maximaal 150 kw"
"then": "<b>Tesla Supercharger (destination)</b> levert een vermogen van maximaal 150 kw A"
},
"2": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een vermogen van maximaal 250 kw"
"then": "<b>Tesla Supercharger (destination)</b> levert een vermogen van maximaal 250 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>?",
@ -1917,10 +1917,10 @@
"power-output-12": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een vermogen van maximaal 11 kw"
"then": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 11 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een vermogen van maximaal 22 kw"
"then": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) levert een vermogen van maximaal 22 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?",
@ -1929,10 +1929,10 @@
"power-output-13": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> levert een vermogen van maximaal 5w"
"then": "<b>USB</b> om GSMs en kleine electronica op te laden levert een vermogen van maximaal 5w A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> levert een vermogen van maximaal 10w"
"then": "<b>USB</b> om GSMs en kleine electronica op te laden levert een vermogen van maximaal 10w A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>?",
@ -1949,7 +1949,7 @@
"power-output-2": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> levert een vermogen van maximaal 50 kw"
"then": "<b>Chademo</b> levert een vermogen van maximaal 50 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div>?",
@ -1958,10 +1958,10 @@
"power-output-3": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> levert een vermogen van maximaal 3.7 kw"
"then": "<b>Type 1 met kabel</b> (J1772) levert een vermogen van maximaal 3.7 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> levert een vermogen van maximaal 7 kw"
"then": "<b>Type 1 met kabel</b> (J1772) levert een vermogen van maximaal 7 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Type 1 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div>?",
@ -1970,16 +1970,16 @@
"power-output-4": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> levert een vermogen van maximaal 3.7 kw"
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een vermogen van maximaal 3.7 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> levert een vermogen van maximaal 6.6 kw"
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een vermogen van maximaal 6.6 kw A"
},
"2": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> levert een vermogen van maximaal 7 kw"
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een vermogen van maximaal 7 kw A"
},
"3": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> levert een vermogen van maximaal 7.2 kw"
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) levert een vermogen van maximaal 7.2 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div>?",
@ -1988,16 +1988,16 @@
"power-output-5": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> levert een vermogen van maximaal 50 kw"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een vermogen van maximaal 50 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> levert een vermogen van maximaal 62.5 kw"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een vermogen van maximaal 62.5 kw A"
},
"2": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> levert een vermogen van maximaal 150 kw"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een vermogen van maximaal 150 kw A"
},
"3": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> levert een vermogen van maximaal 350 kw"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) levert een vermogen van maximaal 350 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div>?",
@ -2006,13 +2006,13 @@
"power-output-6": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een vermogen van maximaal 120 kw"
"then": "<b>Tesla Supercharger</b> levert een vermogen van maximaal 120 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een vermogen van maximaal 150 kw"
"then": "<b>Tesla Supercharger</b> levert een vermogen van maximaal 150 kw A"
},
"2": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> levert een vermogen van maximaal 250 kw"
"then": "<b>Tesla Supercharger</b> levert een vermogen van maximaal 250 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>?",
@ -2021,10 +2021,10 @@
"power-output-7": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> levert een vermogen van maximaal 11 kw"
"then": "<b>Type 2</b> (mennekes) levert een vermogen van maximaal 11 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> levert een vermogen van maximaal 22 kw"
"then": "<b>Type 2</b> (mennekes) levert een vermogen van maximaal 22 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div>?",
@ -2033,7 +2033,7 @@
"power-output-8": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> levert een vermogen van maximaal 50 kw"
"then": "<b>Type 2 CCS</b> (mennekes) levert een vermogen van maximaal 50 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>?",
@ -2042,10 +2042,10 @@
"power-output-9": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een vermogen van maximaal 11 kw"
"then": "<b>Type 2 met kabel</b> (J1772) levert een vermogen van maximaal 11 kw A"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> levert een vermogen van maximaal 22 kw"
"then": "<b>Type 2 met kabel</b> (J1772) levert een vermogen van maximaal 22 kw A"
}
},
"question": "Welk vermogen levert een enkele stekker van type <div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>?",
@ -2061,7 +2061,7 @@
"voltage-0": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div> heeft een spanning van 230 volt"
"then": "<b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F) heeft een spanning van 230 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Schuko stekker</b> zonder aardingspin (CEE7/4 type F)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/CEE7_4F.svg'/></div>",
@ -2070,7 +2070,7 @@
"voltage-1": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div> heeft een spanning van 230 volt"
"then": "<b>Europese stekker</b> met aardingspin (CEE7/4 type E) heeft een spanning van 230 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Europese stekker</b> met aardingspin (CEE7/4 type E)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/TypeE.svg'/></div>",
@ -2079,10 +2079,10 @@
"voltage-10": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> heeft een spanning van 500 volt"
"then": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) heeft een spanning van 500 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> heeft een spanning van 920 volt"
"then": "<b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo) heeft een spanning van 920 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger CCS</b> (een type2 CCS met Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>",
@ -2091,7 +2091,7 @@
"voltage-11": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> heeft een spanning van 480 volt"
"then": "<b>Tesla Supercharger (destination)</b> heeft een spanning van 480 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger (destination)</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>",
@ -2100,10 +2100,10 @@
"voltage-12": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> heeft een spanning van 230 volt"
"then": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 230 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> heeft een spanning van 400 volt"
"then": "<b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo) heeft een spanning van 400 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Tesla supercharger (destination</b> (Een Type 2 met kabel en Tesla-logo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>",
@ -2112,7 +2112,7 @@
"voltage-13": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div> heeft een spanning van 5 volt"
"then": "<b>USB</b> om GSMs en kleine electronica op te laden heeft een spanning van 5 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>USB</b> om GSMs en kleine electronica op te laden</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/usb_port.svg'/></div>",
@ -2129,7 +2129,7 @@
"voltage-2": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div> heeft een spanning van 500 volt"
"then": "<b>Chademo</b> heeft een spanning van 500 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Chademo</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Chademo_type4.svg'/></div>",
@ -2138,10 +2138,10 @@
"voltage-3": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> heeft een spanning van 200 volt"
"then": "<b>Type 1 met kabel</b> (J1772) heeft een spanning van 200 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> heeft een spanning van 240 volt"
"then": "<b>Type 1 met kabel</b> (J1772) heeft een spanning van 240 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Type 1 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div>",
@ -2150,10 +2150,10 @@
"voltage-4": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> heeft een spanning van 200 volt"
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) heeft een spanning van 200 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div> heeft een spanning van 240 volt"
"then": "<b>Type 1 <i>zonder</i> kabel</b> (J1772) heeft een spanning van 240 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Type 1 <i>zonder</i> kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1_J1772.svg'/></div>",
@ -2162,10 +2162,10 @@
"voltage-5": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> heeft een spanning van 400 volt"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) heeft een spanning van 400 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div> heeft een spanning van 1000 volt"
"then": "<b>Type 1 CCS</b> (ook gekend als Type 1 Combo) heeft een spanning van 1000 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Type 1 CCS</b> (ook gekend als Type 1 Combo)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type1-ccs.svg'/></div>",
@ -2174,7 +2174,7 @@
"voltage-6": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div> heeft een spanning van 480 volt"
"then": "<b>Tesla Supercharger</b> heeft een spanning van 480 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Tesla Supercharger</b></b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Tesla-hpwc-model-s.svg'/></div>",
@ -2183,10 +2183,10 @@
"voltage-7": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> heeft een spanning van 230 volt"
"then": "<b>Type 2</b> (mennekes) heeft een spanning van 230 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div> heeft een spanning van 400 volt"
"then": "<b>Type 2</b> (mennekes) heeft een spanning van 400 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Type 2</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_socket.svg'/></div>",
@ -2195,10 +2195,10 @@
"voltage-8": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> heeft een spanning van 500 volt"
"then": "<b>Type 2 CCS</b> (mennekes) heeft een spanning van 500 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div> heeft een spanning van 920 volt"
"then": "<b>Type 2 CCS</b> (mennekes) heeft een spanning van 920 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Type 2 CCS</b> (mennekes)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_CCS.svg'/></div>",
@ -2207,10 +2207,10 @@
"voltage-9": {
"mappings": {
"0": {
"then": "<div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> heeft een spanning van 230 volt"
"then": "<b>Type 2 met kabel</b> (J1772) heeft een spanning van 230 volt"
},
"1": {
"then": "<div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div> heeft een spanning van 400 volt"
"then": "<b>Type 2 met kabel</b> (J1772) heeft een spanning van 400 volt"
}
},
"question": "Welke spanning levert de stekker van type <div style='display: inline-block'><b><b>Type 2 met kabel</b> (J1772)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/Type2_tethered.svg'/></div>",
@ -2321,7 +2321,7 @@
"crossing-continue-through-red": {
"mappings": {
"0": {
"then": "Een fietser mag wel rechtdoor gaan als het licht rood is <img src='./assets/layers/crossings/Belgian_road_sign_B23.svg' style='width: 3em'>"
"then": "Een fietser mag wel rechtdoor gaan als het licht rood is"
},
"1": {
"then": "Een fietser mag wel rechtdoor gaan als het licht rood is"
@ -2357,7 +2357,7 @@
"crossing-right-turn-through-red": {
"mappings": {
"0": {
"then": "Een fietser mag wel rechtsaf slaan als het licht rood is <img src='./assets/layers/crossings/Belgian_road_sign_B22.svg' style='width: 3em'>"
"then": "Een fietser mag wel rechtsaf slaan als het licht rood is"
},
"1": {
"then": "Een fietser mag wel rechtsaf slaan als het licht rood is"
@ -2642,16 +2642,16 @@
"cycleway-lane-track-traffic-signs": {
"mappings": {
"0": {
"then": "Verplicht fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Verplicht fietspad"
},
"1": {
"then": "Verplicht fietspad (met onderbord)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Verplicht fietspad (met onderbord)<br>"
},
"2": {
"then": "Afgescheiden voet-/fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>"
"then": "Afgescheiden voet-/fietspad"
},
"3": {
"then": "Gedeeld voet-/fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>"
"then": "Gedeeld voet-/fietspad"
},
"4": {
"then": "Geen verkeersbord aanwezig"
@ -2679,16 +2679,16 @@
"cycleway-traffic-signs": {
"mappings": {
"0": {
"then": "Verplicht fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Verplicht fietspad"
},
"1": {
"then": "Verplicht fietspad (met onderbord)<br><img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 3em'>"
"then": "Verplicht fietspad (met onderbord)<br>"
},
"2": {
"then": "Afgescheiden voet-/fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D09.svg' style='width: 3em'>"
"then": "Afgescheiden voet-/fietspad"
},
"3": {
"then": "Gedeeld voet-/fietspad <img src='./assets/themes/cycle_infra/Belgian_road_sign_D10.svg' style='width: 3em'>"
"then": "Gedeeld voet-/fietspad"
},
"4": {
"then": "Geen verkeersbord aanwezig"
@ -2696,51 +2696,25 @@
},
"question": "Welk verkeersbord heeft dit fietspad?"
},
"cycleway-traffic-signs-D7-supplementary": {
"mappings": {
"0": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='width: 3em'>"
},
"1": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>"
},
"2": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='width: 3em'>"
},
"3": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='width: 3em'>"
},
"4": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='width: 3em'>"
},
"5": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='width: 3em'>"
},
"6": {
"then": "Geen onderbord aanwezig"
}
},
"question": "Heeft het verkeersbord D7 (<img src='./assets/themes/cycle_infra/Belgian_road_sign_D07.svg' style='width: 1.5em'>) een onderbord?"
},
"cycleway-traffic-signs-supplementary": {
"mappings": {
"0": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M6.svg' style='width: 3em'>"
"then": "Bromfiets Klass B verplicht op het fietspad"
},
"1": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M13.svg' style='width: 3em'>"
"then": "Speedpedelec (Bromfiets klasse P) verplicht op het fietspad"
},
"2": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M14.svg' style='width: 3em'>"
"then": "Bromfiets klasse B en speedpedelec (Klasse P) verplicht op het fietspad"
},
"3": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M7.svg' style='width: 3em'>"
"then": "Bromfiets klasse B <b>verboden</b>"
},
"4": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M15.svg' style='width: 3em'>"
"then": "Speedpedelec (bromfiets klasse P) <b>verboden</b>"
},
"5": {
"then": "<img src='./assets/themes/cycle_infra/Belgian_traffic_sign_M16.svg' style='width: 3em'>"
"then": "Bromfiets klasse B en speedpedelec (klasse P) <b>verboden</b>"
},
"6": {
"then": "Geen onderbord aanwezig"
@ -3908,7 +3882,7 @@
"then": "Dit boekenruilkastje heeft geen naam"
}
},
"question": "Wat is de naam van dit boekenuilkastje?",
"question": "Wat is de naam van dit boekenruilkastje?",
"render": "De naam van dit boekenruilkastje is {name}"
},
"public_bookcase-operator": {
@ -4835,10 +4809,10 @@
"Operator tag": {
"mappings": {
"0": {
"then": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door Natuurpunt"
"then": "Dit gebied wordt beheerd door Natuurpunt"
},
"1": {
"then": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door {operator}"
"then": "Dit gebied wordt beheerd door {operator}"
}
},
"question": "Wie beheert deze wandeltocht?",
@ -5098,10 +5072,10 @@
"then": "Deze vuilnisbak heeft een verdeler voor hondenpoepzakjes"
},
"1": {
"then": "Deze vuilnisbak heeft <i>geen</i>verdeler voor hondenpoepzakjes"
"then": "Deze vuilnisbak heeft <b>geen</b> verdeler voor hondenpoepzakjes"
},
"2": {
"then": "Deze vuilnisbaak heeft waarschijnlijk geen verdeler voor hondenpoepzakjes"
"then": "Deze vuilnisbak heeft <b>waarschijnlijk geen</b> verdeler voor hondenpoepzakjes"
}
},
"question": "Heeft deze vuilnisbak een verdeler voor hondenpoepzakjes?"
@ -5186,10 +5160,10 @@
"Operator tag": {
"mappings": {
"0": {
"then": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door Natuurpunt"
"then": "Dit gebied wordt beheerd door Natuurpunt"
},
"1": {
"then": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door {operator}"
"then": "Dit gebied wordt beheerd door {operator}"
}
},
"question": "Wie beheert dit pad?",
@ -5208,4 +5182,4 @@
"render": "Watermolens"
}
}
}
}

View file

@ -420,13 +420,13 @@
"Bicycle parking type": {
"mappings": {
"3": {
"then": "Стойка <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"then": "Стойка"
},
"4": {
"then": "Двухуровневая <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"then": "Двухуровневая"
},
"5": {
"then": "Навес <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"then": "Навес"
}
},
"question": "К какому типу относится эта велопарковка?",
@ -957,7 +957,7 @@
"then": "Тип гидранта не определён."
},
"3": {
"then": "<img style=\"width:15px\" src=\"./assets/themes/hailhydrant/hydrant_unknown.svg\" /> Тип стены."
"then": "Тип стены."
}
},
"question": "К какому типу относится этот гидрант?",

View file

@ -379,25 +379,25 @@
"Bicycle parking type": {
"mappings": {
"0": {
"then": "單車架 <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
"then": "單車架"
},
"1": {
"then": "車輪架/圓圈 <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
"then": "車輪架/圓圈"
},
"2": {
"then": "車把架 <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
"then": "車把架"
},
"3": {
"then": "車架<img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
"then": "車架"
},
"4": {
"then": "兩層<img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
"then": "兩層"
},
"5": {
"then": "車棚 <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
"then": "車棚"
},
"6": {
"then": "柱子 <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
"then": "柱子"
},
"7": {
"then": "樓層當中標示為單車停車場的區域"

21
langs/themes/icon.json Normal file
View file

@ -0,0 +1,21 @@
{
"buurtnatuur": {
"overrideAll": {
"tagRenderings+": {
"1": {
"mappings": {
"1": {
"then": "./assets/themes/buurtnatuur/Natuurpunt.jpg"
},
"2": {
"then": "./assets/themes/buurtnatuur/Natuurpunt.jpg"
},
"3": {
"then": "./assets/themes/buurtnatuur/ANB.jpg"
}
}
}
}
}
}
}

View file

@ -134,13 +134,13 @@
"1": {
"mappings": {
"1": {
"then": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door Natuurpunt"
"then": "Dit gebied wordt beheerd door Natuurpunt"
},
"2": {
"then": "<img src=\"./assets/themes/buurtnatuur/Natuurpunt.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door {operator}"
"then": "Dit gebied wordt beheerd door {operator}"
},
"3": {
"then": "<img src=\"./assets/themes/buurtnatuur/ANB.jpg\" style=\"width:1.5em\">Dit gebied wordt beheerd door het Agentschap Natuur en Bos"
"then": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos"
}
},
"question": "Wie beheert dit gebied?",

View file

@ -31,7 +31,7 @@ class ConvertImagesToIcon extends DesugaringStep<LayerConfigJson> {
}
information.push("Replaced image " + images[0])
const replaced = then.OnEveryLanguage((s) => {
return s.replace(/(<div [^>]*>)?<img [^>]*> ?/, "").replace(/<\/div>$/, "")
return s.replace(/(<div [^>]*>)?<img [^>]*> ?/, "").replace(/<\/div>$/, "").trim()
})
mapping.then = replaced.translations

View file

@ -169,7 +169,7 @@ class LayerOverviewUtils {
for (const sharedLayerJson of layerFiles) {
const context = "While building builtin layer " + sharedLayerJson.path
const fixed = prepLayer.convertStrict(sharedLayerJson.parsed, context)
const validator = new ValidateLayer(knownImagePaths, sharedLayerJson.path, true);
const validator = new ValidateLayer(sharedLayerJson.path, true);
validator.convertStrict(fixed, context)
if (sharedLayers.has(fixed.id)) {
@ -200,7 +200,10 @@ class LayerOverviewUtils {
new PrevalidateTheme().convertStrict(themeFile, themePath)
themeFile = new PrepareTheme(convertState).convertStrict(themeFile, themePath)
new ValidateThemeAndLayers(knownImagePaths, themePath, true)
if(knownImagePaths === undefined){
throw "Could not load known images/licenses"
}
new ValidateThemeAndLayers(knownImagePaths, themePath, true, convertState.tagRenderings)
.convertStrict(themeFile, themePath)
this.writeTheme(themeFile)

View file

@ -10,7 +10,7 @@ export default class ImageAttributionSpec extends T {
[
"Should find all the images",
() => {
const images = new Set(new ExtractImages(true).convertStrict(<any> cyclofix, "test"))
const images = new Set(new ExtractImages(true, new Map<string, any>()).convertStrict(<any> cyclofix, "test"))
const expectedValues = [
'./assets/layers/bike_repair_station/repair_station.svg',
'./assets/layers/bike_repair_station/repair_station_pump.svg',

View file

@ -5,7 +5,7 @@ import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingCon
import {AddMiniMap} from "../Models/ThemeConfig/Conversion/PrepareTheme";
import {DetectMappingsWithImages, DetectShadowedMappings} from "../Models/ThemeConfig/Conversion/Validation";
import * as Assert from "assert";
import {FixImages} from "../Models/ThemeConfig/Conversion/FixImages";
import {ExtractImages, FixImages} from "../Models/ThemeConfig/Conversion/FixImages";
export default class LegacyThemeLoaderSpec extends T {
@ -144,7 +144,7 @@ export default class LegacyThemeLoaderSpec extends T {
]
}
private static readonly verkeerde_borden ={
private static readonly verkeerde_borden = {
"id": "https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/VerkeerdeBordenDatabank.json",
"title": {
"nl": "VerkeerdeBordenDatabank",
@ -242,7 +242,7 @@ export default class LegacyThemeLoaderSpec extends T {
"icon": "./TS_bolt.svg",
iconBadges: [{
if: "id=yes",
then:{
then: {
mappings: [
{
if: "id=yes",
@ -351,7 +351,6 @@ export default class LegacyThemeLoaderSpec extends T {
}
constructor() {
super([
["Walking_node_theme", () => {
@ -423,9 +422,9 @@ export default class LegacyThemeLoaderSpec extends T {
}
]
}, "test");
T.isTrue(r.errors.length > 0, "Failing case 0 is not detected")
T.isTrue(r.errors.length > 0, "Failing case 0 is not detected")
const r0 = new DetectShadowedMappings().convert( {
const r0 = new DetectShadowedMappings().convert({
mappings: [
{
if: {or: ["key=value", "x=y"]},
@ -440,34 +439,72 @@ export default class LegacyThemeLoaderSpec extends T {
T.isTrue(r0.errors.length > 0, "Failing case 1 is not detected")
}
],
["Images are rewritten", () => {
const fixed = new FixImages(new Set<string>()).convertStrict(LegacyThemeLoaderSpec.verkeerde_borden, "test")
const fixedValue = fixed.layers[0]["mapRendering"][0].icon
Assert.equal("https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/TS_bolt.svg",
fixedValue)
["Images are rewritten", () => {
const fixed = new FixImages(new Set<string>()).convertStrict(LegacyThemeLoaderSpec.verkeerde_borden, "test")
const fixedValue = fixed.layers[0]["mapRendering"][0].icon
Assert.equal("https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/TS_bolt.svg",
fixedValue)
const fixedMapping = fixed.layers[0]["mapRendering"][0].iconBadges[0].then.mappings[0].then
Assert.equal("https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/Something.svg",
fixedMapping)
} ],
["Images in 'thens' are detected", () => {
const r = new DetectMappingsWithImages().convert({
const fixedMapping = fixed.layers[0]["mapRendering"][0].iconBadges[0].then.mappings[0].then
Assert.equal("https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/Something.svg",
fixedMapping)
}],
["Images in 'thens' are detected", () => {
const r = new DetectMappingsWithImages().convert({
"mappings": [
{
"if": "bicycle_parking=stands",
"then": {
"en": "Staple racks <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"nl": "Nietjes <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"fr": "Arceaux <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"gl": "De roda (Stands) <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"de": "Fahrradbügel <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"hu": "Korlát <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"it": "Archetti <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"zh_Hant": "單車架 <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
}
}]}, "test");
T.isTrue(r.warnings.length > 0, "No images found");
}]
{
"if": "bicycle_parking=stands",
"then": {
"en": "Staple racks <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"nl": "Nietjes <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"fr": "Arceaux <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"gl": "De roda (Stands) <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"de": "Fahrradbügel <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
"hu": "Korlát <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"it": "Archetti <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
"zh_Hant": "單車架 <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>"
}
}]
}, "test");
const errors = r.errors;
T.isTrue(errors.length > 0, "No images found");
T.isTrue(errors.some(msg => msg.indexOf("./assets/layers/bike_parking/staple.svg") >= 0), "staple.svg not mentioned");
}],
["Images in 'thens' icons are detected", () => {
const r = new ExtractImages(true, new Map<string, any>()).convert(<any>{
"layers": [
{
tagRenderings: [
{
"mappings": [
{
"if": "bicycle_parking=stands",
"then": {
"en": "Staple racks",
},
"icon": {
path: "./assets/layers/bike_parking/staple.svg",
class: "small"
}
},
{
"if": "bicycle_parking=stands",
"then": {
"en": "Bollard",
},
"icon": "./assets/layers/bike_parking/bollard.svg",
}
]
}
]
}
]
}, "test");
const images = r.result
T.isTrue(images.length > 0, "No images found");
T.isTrue(images.findIndex(img => img =="./assets/layers/bike_parking/staple.svg") >= 0, "staple.svg not mentioned");
T.isTrue(images.findIndex(img => img == "./assets/layers/bike_parking/bollard.svg") >= 0, "bollard.svg not mentioned");
}]
]
);
}

View file

@ -59,7 +59,7 @@ async function main() {
let args = [...process.argv]
args.splice(0, 2)
args = args.map(a => a.toLowerCase())
args = args.map(a => a.toLowerCase().replace(/"/g, ""))
const allFailures: { testsuite: string, name: string, msg: string } [] = []
let testsToRun = allTests
@ -72,6 +72,7 @@ async function main() {
}
})
testsToRun = allTests.filter(t => args.indexOf(t.name.toLowerCase()) >= 0)
console.log("Only running test "+testsToRun.join(", "))
}
if (testsToRun.length == 0) {