diff --git a/css/80_app.css b/css/80_app.css
index 1d601bf0d..81f46f468 100644
--- a/css/80_app.css
+++ b/css/80_app.css
@@ -2539,7 +2539,8 @@ input.key-trap {
.note-save,
.keepRight-save,
-.kr_error-details {
+.kr_error-details,
+.kr_error-comment-container {
padding: 10px;
}
diff --git a/data/core.yaml b/data/core.yaml
index 1f680ff42..b92b61509 100644
--- a/data/core.yaml
+++ b/data/core.yaml
@@ -955,246 +955,246 @@ en:
errorTypes:
errors:
_30:
- description: 'non-closed_areas'
- tooltip: 'This way is tagged with {var1}={var2} and should be closed-loop.'
+ title: 'non-closed_areas'
+ description: 'This way is tagged with {var1}={var2} and should be closed-loop.'
_40:
- description: 'dead-ended one-ways'
- tooltip: 'The first node (id {var1}) of this one-way is not connected to any other way.'
+ title: 'dead-ended one-ways'
+ description: 'The first node (id {var1}) of this one-way is not connected to any other way.'
_41:
- description: ''
- tooltip: 'The last node (id {var1}) of this one-way is not connected to any other way.'
+ title: ''
+ description: 'The last node (id {var1}) of this one-way is not connected to any other way.'
_42:
- description: ''
- tooltip: 'This node cannot be reached because one-ways only lead away from here.'
+ title: ''
+ description: 'This node cannot be reached because one-ways only lead away from here.'
_43:
- description: ''
- tooltip: 'You cannot escape from this node because one-ways only lead to here.'
+ title: ''
+ description: 'You cannot escape from this node because one-ways only lead to here.'
_50:
- description: 'almost-junctions'
- tooltip: 'This node is very close but not connected to way #{var1}.'
+ title: 'almost-junctions'
+ description: 'This node is very close but not connected to way #{var1}.'
_70:
- description: 'missing tags'
- tooltip: 'This {var1} has an empty tag: {var2}.'
+ title: 'missing tags'
+ description: 'This {var1} has an empty tag: {var2}.'
_71:
- description: 'way without tags'
- tooltip: 'This way has no tags.'
+ title: 'way without tags'
+ description: 'This way has no tags.'
_72:
- description: 'node without tags'
- tooltip: 'This node is not member of any way and doesn''t have any tags.'
+ title: 'node without tags'
+ description: 'This node is not member of any way and doesn''t have any tags.'
_90:
- description: 'motorways without ref'
- tooltip: 'This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag.'
+ title: 'motorways without ref'
+ description: 'This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag.'
_100:
- description: 'places of worship without religion'
- tooltip: 'This {var1} is tagged as place of worship and therefore needs a religion tag.'
+ title: 'places of worship without religion'
+ description: 'This {var1} is tagged as place of worship and therefore needs a religion tag.'
_110:
- description: 'point of interest without name'
- tooltip: 'This node is tagged as {var1} and therefore needs a name tag.'
+ title: 'point of interest without name'
+ description: 'This node is tagged as {var1} and therefore needs a name tag.'
_120:
- description: 'ways without nodes'
- tooltip: 'This way has just one single node.'
+ title: 'ways without nodes'
+ description: 'This way has just one single node.'
_130:
- description: 'floating islands'
- tooltip: 'This way is not connected to the rest of the map.'
+ title: 'floating islands'
+ description: 'This way is not connected to the rest of the map.'
_150:
- description: 'railway crossing without tag'
- tooltip: 'This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing.'
+ title: 'railway crossing without tag'
+ description: 'This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing.'
_160:
- description: 'wrongly used railway tag'
- tooltip: 'There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing.'
+ title: 'wrongly used railway tag'
+ description: 'There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing.'
_170:
- description: 'FIXME tagged items'
- tooltip: '{var1}'
+ title: 'FIXME tagged items'
+ description: '{var1}'
_180:
- description: 'relations without type'
- tooltip: 'This relation has no type tag which is mandatory for relations.'
+ title: 'relations without type'
+ description: 'This relation has no type tag which is mandatory for relations.'
_190:
- description: 'intersections without junctions'
- tooltip: 'Finds way crossings on same layer without common node as a junction.'
+ title: 'intersections without junctions'
+ description: 'Finds way crossings on same layer without common node as a junction.'
_191:
- description: 'highway-highway'
- tooltip: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
+ title: 'highway-highway'
+ description: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
_192:
- description: 'highway-waterway'
- tooltip: 'This {var1} intersects the {var2} #{var3}.'
+ title: 'highway-waterway'
+ description: 'This {var1} intersects the {var2} #{var3}.'
_193:
- description: 'highway-riverbank'
- tooltip: 'This {var1} intersects the {var2} #{var3}.'
+ title: 'highway-riverbank'
+ description: 'This {var1} intersects the {var2} #{var3}.'
_194:
- description: 'waterway-waterway'
- tooltip: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
+ title: 'waterway-waterway'
+ description: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
_195:
- description: 'cycleway-cycleway'
- tooltip: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
+ title: 'cycleway-cycleway'
+ description: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
_196:
- description: 'highway-cycleway'
- tooltip: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
+ title: 'highway-cycleway'
+ description: 'This {var1} intersects the {var2} #{var3} but there is no junction node.'
_197:
- description: 'cycleway-waterway'
- tooltip: 'This {var1} intersects the {var2} #{var3}.'
+ title: 'cycleway-waterway'
+ description: 'This {var1} intersects the {var2} #{var3}.'
_198:
- description: 'cycleway-riverbank'
- tooltip: 'This {var1} intersects the {var2} #{var3}.'
+ title: 'cycleway-riverbank'
+ description: 'This {var1} intersects the {var2} #{var3}.'
_200:
- description: 'overlapping ways'
- tooltip: 'Finds overlapping ways on same layer.'
+ title: 'overlapping ways'
+ description: 'Finds overlapping ways on same layer.'
_201:
- description: 'highway-highway'
- tooltip: 'This {var1} overlaps the {var2} #{var3}.'
+ title: 'highway-highway'
+ description: 'This {var1} overlaps the {var2} #{var3}.'
_202:
- description: 'highway-waterway'
- tooltip: 'This {var1} overlaps the {var2} #{var3}.'
+ title: 'highway-waterway'
+ description: 'This {var1} overlaps the {var2} #{var3}.'
_203:
- description: 'highway-riverbank'
- tooltip: 'This {var1} overlaps the {var2} #{var3}.'
+ title: 'highway-riverbank'
+ description: 'This {var1} overlaps the {var2} #{var3}.'
_204:
- description: 'waterway-waterway'
- tooltip: 'This {var1} overlaps the {var2} #{var3}.'
+ title: 'waterway-waterway'
+ description: 'This {var1} overlaps the {var2} #{var3}.'
_205:
- description: 'cycleway-cycleway'
- tooltip: 'This {var1} overlaps the {var2} #{var3}.'
+ title: 'cycleway-cycleway'
+ description: 'This {var1} overlaps the {var2} #{var3}.'
_206:
- description: 'highway-cycleway'
- tooltip: 'This {var1} overlaps the {var2} #{var3}.'
+ title: 'highway-cycleway'
+ description: 'This {var1} overlaps the {var2} #{var3}.'
_207:
- description: 'cycleway-waterway'
- tooltip: 'This {var1} overlaps the {var2} #{var3}.'
+ title: 'cycleway-waterway'
+ description: 'This {var1} overlaps the {var2} #{var3}.'
_208:
- description: 'cycleway-riverbank'
- tooltip: 'This {var1} overlaps the {var2} #{var3}.'
+ title: 'cycleway-riverbank'
+ description: 'This {var1} overlaps the {var2} #{var3}.'
_210:
- description: 'loopings'
- tooltip: 'These errors contain self intersecting ways.'
+ title: 'loopings'
+ description: 'These errors contain self intersecting ways.'
_211:
- description: ''
- tooltip: 'This way contains more than one node at least twice. Nodes are {var1}. This may or may not be an error.'
+ title: ''
+ description: 'This way contains more than one node at least twice. Nodes are {var1}. This may or may not be an error.'
_212:
- description: ''
- tooltip: 'This way has only two different nodes and contains one of them more than once.'
+ title: ''
+ description: 'This way has only two different nodes and contains one of them more than once.'
_220:
- description: 'misspelled tags'
- tooltip: 'This {var1} is tagged {var2}={var3} where {var4} looks like {var5}.'
+ title: 'misspelled tags'
+ description: 'This {var1} is tagged {var2}={var3} where {var4} looks like {var5}.'
_221:
- description: ''
- tooltip: 'The key of this {var1} tag is key {var2}.'
+ title: ''
+ description: 'The key of this {var1} tag is key {var2}.'
_230:
- description: 'layer conflicts'
- tooltip: ''
+ title: 'layer conflicts'
+ description: ''
_231:
- description: 'mixed layers intersection'
- tooltip: 'This node is a junction of ways on different layers: {var1}.'
+ title: 'mixed layers intersection'
+ description: 'This node is a junction of ways on different layers: {var1}.'
_232:
- description: 'strange layers'
- tooltip: 'This {var1} is tagged with layer {var2}. This need not be an error but it looks strange.'
+ title: 'strange layers'
+ description: 'This {var1} is tagged with layer {var2}. This need not be an error but it looks strange.'
_270:
- description: 'motorways connected directly'
- tooltip: 'This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle.'
+ title: 'motorways connected directly'
+ description: 'This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle.'
_280:
- description: 'boundaries'
- tooltip: ''
+ title: 'boundaries'
+ description: ''
_281:
- description: 'missing name'
- tooltip: 'This boundary has no name.'
+ title: 'missing name'
+ description: 'This boundary has no name.'
_282:
- description: 'missing admin level'
- tooltip: 'The boundary of {var1} has no valid numeric admin_level. Please do not use admin levels like for example 6;7. Always tag the lowest admin_level of all boundaries.'
+ title: 'missing admin level'
+ description: 'The boundary of {var1} has no valid numeric admin_level. Please do not use admin levels like for example 6;7. Always tag the lowest admin_level of all boundaries.'
_283:
- description: 'no closed loop'
- tooltip: 'The boundary of {var1} is not closed-loop.'
+ title: 'no closed loop'
+ description: 'The boundary of {var1} is not closed-loop.'
_284:
- description: 'splitting boundary'
- tooltip: 'The boundary of {var1} splits here.'
+ title: 'splitting boundary'
+ description: 'The boundary of {var1} splits here.'
_285:
- description: 'admin_level too high'
- tooltip: 'This boundary-way has admin_level {var1} but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations.'
+ title: 'admin_level too high'
+ description: 'This boundary-way has admin_level {var1} but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations.'
_290:
- description: 'restrictions'
- tooltip: 'Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat.'
+ title: 'restrictions'
+ description: 'Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat.'
_291:
- description: 'missing type'
- tooltip: 'This turn-restriction has no known restriction type.'
+ title: 'missing type'
+ description: 'This turn-restriction has no known restriction type.'
_292:
- description: 'missing from way'
- tooltip: 'A turn-restriction needs exactly one {var1} member. This one has {var2}.'
+ title: 'missing from way'
+ description: 'A turn-restriction needs exactly one {var1} member. This one has {var2}.'
_293:
- description: 'missing to way'
- tooltip: 'A turn-restriction needs exactly one {var1} member. This one has {var2}.'
+ title: 'missing to way'
+ description: 'A turn-restriction needs exactly one {var1} member. This one has {var2}.'
_294:
- description: 'from or to not a way'
- tooltip: 'From- and To-members of turn restrictions need to be ways. {var1}.'
+ title: 'from or to not a way'
+ description: 'From- and To-members of turn restrictions need to be ways. {var1}.'
_295:
- description: 'via is not on the way ends'
- tooltip: 'via (node #{var1}) is not the first or the last member of from (way #{var2}).'
+ title: 'via is not on the way ends'
+ description: 'via (node #{var1}) is not the first or the last member of from (way #{var2}).'
_296:
- description: 'wrong restriction angle'
- tooltip: 'restriction type is {var1} but angle is {var2} degrees. Maybe the restriction type is not appropriate?.'
+ title: 'wrong restriction angle'
+ description: 'restriction type is {var1} but angle is {var2} degrees. Maybe the restriction type is not appropriate?'
_297:
- description: 'wrong direction of to member'
- tooltip: 'wrong direction of to way {var1}.'
+ title: 'wrong direction of to member'
+ description: 'wrong direction of to way {var1}.'
_298:
- description: 'already restricted by oneway'
- tooltip: 'entry already prohibited by oneway tag on {var1}.'
+ title: 'already restricted by oneway'
+ description: 'entry already prohibited by oneway tag on {var1}.'
_310:
- description: 'roundabouts'
- tooltip: 'Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1.'
+ title: 'roundabouts'
+ description: 'Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1.'
_311:
- description: 'not closed loop'
- tooltip: 'This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout).'
+ title: 'not closed loop'
+ description: 'This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout).'
_312:
- description: 'wrong direction'
- tooltip: 'If this roundabout is in a country with right-hand traffic then its orientation goes the wrong way around | If this roundabout is in a country with left-hand traffic then its orientation goes the wrong way around | If this mini_roundabout is in a country with right-hand traffic then its orientation goes the wrong way around | If this mini_roundabout is in a country with left-hand traffic then its orientation goes the wrong way around.'
+ title: 'wrong direction'
+ description: 'If this roundabout is in a country with right-hand traffic then its orientation goes the wrong way around | If this roundabout is in a country with left-hand traffic then its orientation goes the wrong way around | If this mini_roundabout is in a country with right-hand traffic then its orientation goes the wrong way around | If this mini_roundabout is in a country with left-hand traffic then its orientation goes the wrong way around.'
_313:
- description: 'faintly connected'
- tooltip: 'This roundabout has only {var1} other roads connected. Roundabouts typically have three.'
+ title: 'faintly connected'
+ description: 'This roundabout has only {var1} other roads connected. Roundabouts typically have three.'
_320:
- description: '*_link connections'
- tooltip: 'This way is tagged as highway={var1}_link but doesn''t have a connection to any other {var1} or {var1}_link.'
+ title: '*_link connections'
+ description: 'This way is tagged as highway={var1}_link but doesn''t have a connection to any other {var1} or {var1}_link.'
_350:
- description: 'bridge-tags'
- tooltip: 'This bridge doesn''t have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var1}.'
+ title: 'bridge-tags'
+ description: 'This bridge doesn''t have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var1}.'
_370:
- description: 'doubled places'
- tooltip: 'This node has tags in common with the surrounding way #{var1} and seems to be redundand | This node has tags in common with the surrounding way #{var1} (including the name {var2}) and seems to be redundand.'
+ title: 'doubled places'
+ description: 'This node has tags in common with the surrounding way #{var1} and seems to be redundand | This node has tags in common with the surrounding way #{var1} (including the name {var2}) and seems to be redundand.'
_380:
- description: 'non-physical use of sport-tag'
- tooltip: 'This way is tagged {var1} but has no physical tag like e.g. leisure, building, amenity or highway.'
+ title: 'non-physical use of sport-tag'
+ description: 'This way is tagged {var1} but has no physical tag like e.g. leisure, building, amenity or highway.'
_400:
- description: 'geometry glitches'
- tooltip: ''
+ title: 'geometry glitches'
+ description: ''
_401:
- description: 'missing turn restriction'
- tooltip: 'ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning from way {var1} to {var2}.'
+ title: 'missing turn restriction'
+ description: 'ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning from way {var1} to {var2}.'
_402:
- description: 'impossible angles'
- tooltip: 'this way bends in a very sharp angle here.'
+ title: 'impossible angles'
+ description: 'this way bends in a very sharp angle here.'
_410:
- description: 'website'
- tooltip: 'Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*.'
+ title: 'website'
+ description: 'Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*.'
_411:
- description: 'http error'
- tooltip: 'The URL ({var1}) cannot be opened (HTTP status code {var2}).'
+ title: 'http error'
+ description: 'The URL cannot be opened (HTTP status code {var2}).'
_412:
- description: 'domain hijacking'
- tooltip: 'Possible domain squatting: {var1}. Suspicious text is: "{var2}".'
+ title: 'domain hijacking'
+ description: 'Possible domain squatting: The URL has Suspicious text: "{var2}".'
_413:
- description: 'non-match'
- tooltip: 'Content of the URL ({var1}) did not contain these keywords: ({var2}).'
+ title: 'non-match'
+ description: 'Content of the URL did not contain these keywords: ({var2}).'
warnings:
_20:
- description: 'multiple nodes on the same spot'
- tooltip: 'There is more than one node in this spot. Offending node IDs: {var1}.'
+ title: 'multiple nodes on the same spot'
+ description: 'There is more than one node in this spot. Offending node IDs: {var1}.'
_60:
- description: 'depreciated tags'
- tooltip: 'This {var1} uses deprecated tag {var2}={var3}. Please use {var4} instead!'
+ title: 'depreciated tags'
+ description: 'This {var1} uses deprecated tag {var2}={var3}. Please use {var4} instead!'
_300:
- description: 'missing maxspeed'
- tooltip: 'missing maxspeed tag.'
+ title: 'missing maxspeed'
+ description: 'missing maxspeed tag.'
_360:
- description: 'language unknown'
- tooltip: 'It would be nice if this {var1} had an additional tag name:XX={var2} where XX shows the language of its name {var2}.'
+ title: 'language unknown'
+ description: 'It would be nice if this {var1} had an additional tag name:XX={var2} where XX shows the language of its name {var2}.'
_390:
- description: 'missing tracktype'
- tooltip: This track doesn't have a tracktype.
+ title: 'missing tracktype'
+ description: This track doesn't have a tracktype.
streetside:
tooltip: "Streetside photos from Microsoft"
title: "Photo Overlay (Bing Streetside)"
diff --git a/dist/locales/en.json b/dist/locales/en.json
index 1a861d74b..7476b3471 100644
--- a/dist/locales/en.json
+++ b/dist/locales/en.json
@@ -1163,326 +1163,326 @@
"errorTypes": {
"errors": {
"_30": {
- "description": "non-closed_areas",
- "tooltip": "This way is tagged with {var1}={var2} and should be closed-loop."
+ "title": "non-closed_areas",
+ "description": "This way is tagged with {var1}={var2} and should be closed-loop."
},
"_40": {
- "description": "dead-ended one-ways",
- "tooltip": "The first node (id {var1}) of this one-way is not connected to any other way."
+ "title": "dead-ended one-ways",
+ "description": "The first node (id {var1}) of this one-way is not connected to any other way."
},
"_41": {
- "description": "",
- "tooltip": "The last node (id {var1}) of this one-way is not connected to any other way."
+ "title": "",
+ "description": "The last node (id {var1}) of this one-way is not connected to any other way."
},
"_42": {
- "description": "",
- "tooltip": "This node cannot be reached because one-ways only lead away from here."
+ "title": "",
+ "description": "This node cannot be reached because one-ways only lead away from here."
},
"_43": {
- "description": "",
- "tooltip": "You cannot escape from this node because one-ways only lead to here."
+ "title": "",
+ "description": "You cannot escape from this node because one-ways only lead to here."
},
"_50": {
- "description": "almost-junctions",
- "tooltip": "This node is very close but not connected to way #{var1}."
+ "title": "almost-junctions",
+ "description": "This node is very close but not connected to way #{var1}."
},
"_70": {
- "description": "missing tags",
- "tooltip": "This {var1} has an empty tag: {var2}."
+ "title": "missing tags",
+ "description": "This {var1} has an empty tag: {var2}."
},
"_71": {
- "description": "way without tags",
- "tooltip": "This way has no tags."
+ "title": "way without tags",
+ "description": "This way has no tags."
},
"_72": {
- "description": "node without tags",
- "tooltip": "This node is not member of any way and doesn't have any tags."
+ "title": "node without tags",
+ "description": "This node is not member of any way and doesn't have any tags."
},
"_90": {
- "description": "motorways without ref",
- "tooltip": "This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag."
+ "title": "motorways without ref",
+ "description": "This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag."
},
"_100": {
- "description": "places of worship without religion",
- "tooltip": "This {var1} is tagged as place of worship and therefore needs a religion tag."
+ "title": "places of worship without religion",
+ "description": "This {var1} is tagged as place of worship and therefore needs a religion tag."
},
"_110": {
- "description": "point of interest without name",
- "tooltip": "This node is tagged as {var1} and therefore needs a name tag."
+ "title": "point of interest without name",
+ "description": "This node is tagged as {var1} and therefore needs a name tag."
},
"_120": {
- "description": "ways without nodes",
- "tooltip": "This way has just one single node."
+ "title": "ways without nodes",
+ "description": "This way has just one single node."
},
"_130": {
- "description": "floating islands",
- "tooltip": "This way is not connected to the rest of the map."
+ "title": "floating islands",
+ "description": "This way is not connected to the rest of the map."
},
"_150": {
- "description": "railway crossing without tag",
- "tooltip": "This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing."
+ "title": "railway crossing without tag",
+ "description": "This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing."
},
"_160": {
- "description": "wrongly used railway tag",
- "tooltip": "There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing."
+ "title": "wrongly used railway tag",
+ "description": "There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing."
},
"_170": {
- "description": "FIXME tagged items",
- "tooltip": "{var1}"
+ "title": "FIXME tagged items",
+ "description": "{var1}"
},
"_180": {
- "description": "relations without type",
- "tooltip": "This relation has no type tag which is mandatory for relations."
+ "title": "relations without type",
+ "description": "This relation has no type tag which is mandatory for relations."
},
"_190": {
- "description": "intersections without junctions",
- "tooltip": "Finds way crossings on same layer without common node as a junction."
+ "title": "intersections without junctions",
+ "description": "Finds way crossings on same layer without common node as a junction."
},
"_191": {
- "description": "highway-highway",
- "tooltip": "This {var1} intersects the {var2} #{var3} but there is no junction node."
+ "title": "highway-highway",
+ "description": "This {var1} intersects the {var2} #{var3} but there is no junction node."
},
"_192": {
- "description": "highway-waterway",
- "tooltip": "This {var1} intersects the {var2} #{var3}."
+ "title": "highway-waterway",
+ "description": "This {var1} intersects the {var2} #{var3}."
},
"_193": {
- "description": "highway-riverbank",
- "tooltip": "This {var1} intersects the {var2} #{var3}."
+ "title": "highway-riverbank",
+ "description": "This {var1} intersects the {var2} #{var3}."
},
"_194": {
- "description": "waterway-waterway",
- "tooltip": "This {var1} intersects the {var2} #{var3} but there is no junction node."
+ "title": "waterway-waterway",
+ "description": "This {var1} intersects the {var2} #{var3} but there is no junction node."
},
"_195": {
- "description": "cycleway-cycleway",
- "tooltip": "This {var1} intersects the {var2} #{var3} but there is no junction node."
+ "title": "cycleway-cycleway",
+ "description": "This {var1} intersects the {var2} #{var3} but there is no junction node."
},
"_196": {
- "description": "highway-cycleway",
- "tooltip": "This {var1} intersects the {var2} #{var3} but there is no junction node."
+ "title": "highway-cycleway",
+ "description": "This {var1} intersects the {var2} #{var3} but there is no junction node."
},
"_197": {
- "description": "cycleway-waterway",
- "tooltip": "This {var1} intersects the {var2} #{var3}."
+ "title": "cycleway-waterway",
+ "description": "This {var1} intersects the {var2} #{var3}."
},
"_198": {
- "description": "cycleway-riverbank",
- "tooltip": "This {var1} intersects the {var2} #{var3}."
+ "title": "cycleway-riverbank",
+ "description": "This {var1} intersects the {var2} #{var3}."
},
"_200": {
- "description": "overlapping ways",
- "tooltip": "Finds overlapping ways on same layer."
+ "title": "overlapping ways",
+ "description": "Finds overlapping ways on same layer."
},
"_201": {
- "description": "highway-highway",
- "tooltip": "This {var1} overlaps the {var2} #{var3}."
+ "title": "highway-highway",
+ "description": "This {var1} overlaps the {var2} #{var3}."
},
"_202": {
- "description": "highway-waterway",
- "tooltip": "This {var1} overlaps the {var2} #{var3}."
+ "title": "highway-waterway",
+ "description": "This {var1} overlaps the {var2} #{var3}."
},
"_203": {
- "description": "highway-riverbank",
- "tooltip": "This {var1} overlaps the {var2} #{var3}."
+ "title": "highway-riverbank",
+ "description": "This {var1} overlaps the {var2} #{var3}."
},
"_204": {
- "description": "waterway-waterway",
- "tooltip": "This {var1} overlaps the {var2} #{var3}."
+ "title": "waterway-waterway",
+ "description": "This {var1} overlaps the {var2} #{var3}."
},
"_205": {
- "description": "cycleway-cycleway",
- "tooltip": "This {var1} overlaps the {var2} #{var3}."
+ "title": "cycleway-cycleway",
+ "description": "This {var1} overlaps the {var2} #{var3}."
},
"_206": {
- "description": "highway-cycleway",
- "tooltip": "This {var1} overlaps the {var2} #{var3}."
+ "title": "highway-cycleway",
+ "description": "This {var1} overlaps the {var2} #{var3}."
},
"_207": {
- "description": "cycleway-waterway",
- "tooltip": "This {var1} overlaps the {var2} #{var3}."
+ "title": "cycleway-waterway",
+ "description": "This {var1} overlaps the {var2} #{var3}."
},
"_208": {
- "description": "cycleway-riverbank",
- "tooltip": "This {var1} overlaps the {var2} #{var3}."
+ "title": "cycleway-riverbank",
+ "description": "This {var1} overlaps the {var2} #{var3}."
},
"_210": {
- "description": "loopings",
- "tooltip": "These errors contain self intersecting ways."
+ "title": "loopings",
+ "description": "These errors contain self intersecting ways."
},
"_211": {
- "description": "",
- "tooltip": "This way contains more than one node at least twice. Nodes are {var1}. This may or may not be an error."
+ "title": "",
+ "description": "This way contains more than one node at least twice. Nodes are {var1}. This may or may not be an error."
},
"_212": {
- "description": "",
- "tooltip": "This way has only two different nodes and contains one of them more than once."
+ "title": "",
+ "description": "This way has only two different nodes and contains one of them more than once."
},
"_220": {
- "description": "misspelled tags",
- "tooltip": "This {var1} is tagged {var2}={var3} where {var4} looks like {var5}."
+ "title": "misspelled tags",
+ "description": "This {var1} is tagged {var2}={var3} where {var4} looks like {var5}."
},
"_221": {
- "description": "",
- "tooltip": "The key of this {var1} tag is key {var2}."
+ "title": "",
+ "description": "The key of this {var1} tag is key {var2}."
},
"_230": {
- "description": "layer conflicts",
- "tooltip": ""
+ "title": "layer conflicts",
+ "description": ""
},
"_231": {
- "description": "mixed layers intersection",
- "tooltip": "This node is a junction of ways on different layers: {var1}."
+ "title": "mixed layers intersection",
+ "description": "This node is a junction of ways on different layers: {var1}."
},
"_232": {
- "description": "strange layers",
- "tooltip": "This {var1} is tagged with layer {var2}. This need not be an error but it looks strange."
+ "title": "strange layers",
+ "description": "This {var1} is tagged with layer {var2}. This need not be an error but it looks strange."
},
"_270": {
- "description": "motorways connected directly",
- "tooltip": "This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle."
+ "title": "motorways connected directly",
+ "description": "This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle."
},
"_280": {
- "description": "boundaries",
- "tooltip": ""
+ "title": "boundaries",
+ "description": ""
},
"_281": {
- "description": "missing name",
- "tooltip": "This boundary has no name."
+ "title": "missing name",
+ "description": "This boundary has no name."
},
"_282": {
- "description": "missing admin level",
- "tooltip": "The boundary of {var1} has no valid numeric admin_level. Please do not use admin levels like for example 6;7. Always tag the lowest admin_level of all boundaries."
+ "title": "missing admin level",
+ "description": "The boundary of {var1} has no valid numeric admin_level. Please do not use admin levels like for example 6;7. Always tag the lowest admin_level of all boundaries."
},
"_283": {
- "description": "no closed loop",
- "tooltip": "The boundary of {var1} is not closed-loop."
+ "title": "no closed loop",
+ "description": "The boundary of {var1} is not closed-loop."
},
"_284": {
- "description": "splitting boundary",
- "tooltip": "The boundary of {var1} splits here."
+ "title": "splitting boundary",
+ "description": "The boundary of {var1} splits here."
},
"_285": {
- "description": "admin_level too high",
- "tooltip": "This boundary-way has admin_level {var1} but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations."
+ "title": "admin_level too high",
+ "description": "This boundary-way has admin_level {var1} but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations."
},
"_290": {
- "description": "restrictions",
- "tooltip": "Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat."
+ "title": "restrictions",
+ "description": "Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat."
},
"_291": {
- "description": "missing type",
- "tooltip": "This turn-restriction has no known restriction type."
+ "title": "missing type",
+ "description": "This turn-restriction has no known restriction type."
},
"_292": {
- "description": "missing from way",
- "tooltip": "A turn-restriction needs exactly one {var1} member. This one has {var2}."
+ "title": "missing from way",
+ "description": "A turn-restriction needs exactly one {var1} member. This one has {var2}."
},
"_293": {
- "description": "missing to way",
- "tooltip": "A turn-restriction needs exactly one {var1} member. This one has {var2}."
+ "title": "missing to way",
+ "description": "A turn-restriction needs exactly one {var1} member. This one has {var2}."
},
"_294": {
- "description": "from or to not a way",
- "tooltip": "From- and To-members of turn restrictions need to be ways. {var1}."
+ "title": "from or to not a way",
+ "description": "From- and To-members of turn restrictions need to be ways. {var1}."
},
"_295": {
- "description": "via is not on the way ends",
- "tooltip": "via (node #{var1}) is not the first or the last member of from (way #{var2})."
+ "title": "via is not on the way ends",
+ "description": "via (node #{var1}) is not the first or the last member of from (way #{var2})."
},
"_296": {
- "description": "wrong restriction angle",
- "tooltip": "restriction type is {var1} but angle is {var2} degrees. Maybe the restriction type is not appropriate?."
+ "title": "wrong restriction angle",
+ "description": "restriction type is {var1} but angle is {var2} degrees. Maybe the restriction type is not appropriate?"
},
"_297": {
- "description": "wrong direction of to member",
- "tooltip": "wrong direction of to way {var1}."
+ "title": "wrong direction of to member",
+ "description": "wrong direction of to way {var1}."
},
"_298": {
- "description": "already restricted by oneway",
- "tooltip": "entry already prohibited by oneway tag on {var1}."
+ "title": "already restricted by oneway",
+ "description": "entry already prohibited by oneway tag on {var1}."
},
"_310": {
- "description": "roundabouts",
- "tooltip": "Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1."
+ "title": "roundabouts",
+ "description": "Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1."
},
"_311": {
- "description": "not closed loop",
- "tooltip": "This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)."
+ "title": "not closed loop",
+ "description": "This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)."
},
"_312": {
- "description": "wrong direction",
- "tooltip": "If this roundabout is in a country with right-hand traffic then its orientation goes the wrong way around | If this roundabout is in a country with left-hand traffic then its orientation goes the wrong way around | If this mini_roundabout is in a country with right-hand traffic then its orientation goes the wrong way around | If this mini_roundabout is in a country with left-hand traffic then its orientation goes the wrong way around."
+ "title": "wrong direction",
+ "description": "If this roundabout is in a country with right-hand traffic then its orientation goes the wrong way around | If this roundabout is in a country with left-hand traffic then its orientation goes the wrong way around | If this mini_roundabout is in a country with right-hand traffic then its orientation goes the wrong way around | If this mini_roundabout is in a country with left-hand traffic then its orientation goes the wrong way around."
},
"_313": {
- "description": "faintly connected",
- "tooltip": "This roundabout has only {var1} other roads connected. Roundabouts typically have three."
+ "title": "faintly connected",
+ "description": "This roundabout has only {var1} other roads connected. Roundabouts typically have three."
},
"_320": {
- "description": "*_link connections",
- "tooltip": "This way is tagged as highway={var1}_link but doesn't have a connection to any other {var1} or {var1}_link."
+ "title": "*_link connections",
+ "description": "This way is tagged as highway={var1}_link but doesn't have a connection to any other {var1} or {var1}_link."
},
"_350": {
- "description": "bridge-tags",
- "tooltip": "This bridge doesn't have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var1}."
+ "title": "bridge-tags",
+ "description": "This bridge doesn't have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var1}."
},
"_370": {
- "description": "doubled places",
- "tooltip": "This node has tags in common with the surrounding way #{var1} and seems to be redundand | This node has tags in common with the surrounding way #{var1} (including the name {var2}) and seems to be redundand."
+ "title": "doubled places",
+ "description": "This node has tags in common with the surrounding way #{var1} and seems to be redundand | This node has tags in common with the surrounding way #{var1} (including the name {var2}) and seems to be redundand."
},
"_380": {
- "description": "non-physical use of sport-tag",
- "tooltip": "This way is tagged {var1} but has no physical tag like e.g. leisure, building, amenity or highway."
+ "title": "non-physical use of sport-tag",
+ "description": "This way is tagged {var1} but has no physical tag like e.g. leisure, building, amenity or highway."
},
"_400": {
- "description": "geometry glitches",
- "tooltip": ""
+ "title": "geometry glitches",
+ "description": ""
},
"_401": {
- "description": "missing turn restriction",
- "tooltip": "ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning from way {var1} to {var2}."
+ "title": "missing turn restriction",
+ "description": "ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning from way {var1} to {var2}."
},
"_402": {
- "description": "impossible angles",
- "tooltip": "this way bends in a very sharp angle here."
+ "title": "impossible angles",
+ "description": "this way bends in a very sharp angle here."
},
"_410": {
- "description": "website",
- "tooltip": "Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*."
+ "title": "website",
+ "description": "Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*."
},
"_411": {
- "description": "http error",
- "tooltip": "The URL ({var1}) cannot be opened (HTTP status code {var2})."
+ "title": "http error",
+ "description": "The URL cannot be opened (HTTP status code {var2})."
},
"_412": {
- "description": "domain hijacking",
- "tooltip": "Possible domain squatting: {var1}. Suspicious text is: \"{var2}\"."
+ "title": "domain hijacking",
+ "description": "Possible domain squatting: The URL has Suspicious text: \"{var2}\"."
},
"_413": {
- "description": "non-match",
- "tooltip": "Content of the URL ({var1}) did not contain these keywords: ({var2})."
+ "title": "non-match",
+ "description": "Content of the URL did not contain these keywords: ({var2})."
}
},
"warnings": {
"_20": {
- "description": "multiple nodes on the same spot",
- "tooltip": "There is more than one node in this spot. Offending node IDs: {var1}."
+ "title": "multiple nodes on the same spot",
+ "description": "There is more than one node in this spot. Offending node IDs: {var1}."
},
"_60": {
- "description": "depreciated tags",
- "tooltip": "This {var1} uses deprecated tag {var2}={var3}. Please use {var4} instead!"
+ "title": "depreciated tags",
+ "description": "This {var1} uses deprecated tag {var2}={var3}. Please use {var4} instead!"
},
"_300": {
- "description": "missing maxspeed",
- "tooltip": "missing maxspeed tag."
+ "title": "missing maxspeed",
+ "description": "missing maxspeed tag."
},
"_360": {
- "description": "language unknown",
- "tooltip": "It would be nice if this {var1} had an additional tag name:XX={var2} where XX shows the language of its name {var2}."
+ "title": "language unknown",
+ "description": "It would be nice if this {var1} had an additional tag name:XX={var2} where XX shows the language of its name {var2}."
},
"_390": {
- "description": "missing tracktype",
- "tooltip": "This track doesn't have a tracktype."
+ "title": "missing tracktype",
+ "description": "This track doesn't have a tracktype."
}
}
}
diff --git a/modules/ui/keepRight_details.js b/modules/ui/keepRight_details.js
index f6d7c9967..2a330b688 100644
--- a/modules/ui/keepRight_details.js
+++ b/modules/ui/keepRight_details.js
@@ -73,12 +73,12 @@ export function uiKeepRightDetails(context) {
// if this is a subtype, append it's parent title
if (_parent_error_type) {
- title = t(_titleBase + _parent_error_type + '.description') + ': \n';
+ title = t(_titleBase + _parent_error_type + '.title') + ': \n';
}
// append title
if (_error.error_type) {
- title += t(_titleBase + _templateErrorType + '.description');
+ title += t(_titleBase + _templateErrorType + '.title');
}
return title;
@@ -98,7 +98,7 @@ export function uiKeepRightDetails(context) {
.append('div')
.attr('class', 'kr_error-details-description-text')
.html(function(d) {
- return t(_titleBase + _templateErrorType + '.tooltip', parseErrorDescriptions(d));
+ return t(_titleBase + _templateErrorType + '.description', parseErrorDescriptions(d));
});
description.selectAll('.kr_error_description-id')
diff --git a/modules/util/keepRight/errorSchema.json b/modules/util/keepRight/errorSchema.json
index 3bfd75b72..7df64e904 100644
--- a/modules/util/keepRight/errorSchema.json
+++ b/modules/util/keepRight/errorSchema.json
@@ -160,7 +160,7 @@
},
"_220": {
"title": "misspelled tags",
- "description": "This {$1} is tagged ''{$2}={$3}''where {$4} looks like {$5}"
+ "description": "This {$1} is tagged '{$2}={$3}' where {$4} looks like {$5}"
},
"_221": {
"title": "",
diff --git a/modules/util/keepRight/keepRight_error.js b/modules/util/keepRight/keepRight_error.js
index 8986b3bd5..56c82805c 100644
--- a/modules/util/keepRight/keepRight_error.js
+++ b/modules/util/keepRight/keepRight_error.js
@@ -53,11 +53,25 @@ var keepRightSchemaFromWeb = {
export function parseErrorDescriptions(entity) {
if (!(entity instanceof krError)) return;
+ var _220 = false;
+ var _splitVar2;
+ var _splitVar3;
+ var _401 = false;
+
// find the matching template from the error schema
var errorType = '_' + entity.error_type;
var matchingTemplate = errorTypes.errors[errorType] || errorTypes.warnings[errorType];
if (!matchingTemplate) return;
+ // handle special cases
+ // error _170
+ if (errorType === '_170') { return { var1: entity.description }; }
+
+ // error _220
+ if (errorType === '_220') { _220 = true; }
+
+ if (errorType === '_401') { _401 = true; }
+
// tokenize descriptions
var errorDescription = entity.description.split(' ');
var templateDescription = matchingTemplate.description.split(' ');
@@ -66,14 +80,22 @@ export function parseErrorDescriptions(entity) {
var variable_re = new RegExp(/{\$[0-9]}/);
var html_re = new RegExp(/<\/[a-z][\s\S]*>/);
var span_re = new RegExp(/<\/span>/);
+ var digit_re = new RegExp(/^\d+$/);
- var commonEntities = ['node', 'way', 'relation', 'highway', 'cycleway', 'waterway', 'riverbank']; // TODO: expand this list, or implement a different translation function
+ var commonEntities = [
+ 'node',
+ 'way',
+ 'relation',
+ 'highway',
+ 'cycleway',
+ 'waterway',
+ 'riverbank'
+ ]; // TODO: expand this list, or implement a different translation function
- function fillPlaceholder(d) {
- return '' + d + '';
- }
+ function fillPlaceholder(d) { return '' + d + ''; }
function getEntityBase(lastWord) {
+
var result;
commonEntities.forEach(function(entity) {
if (entity.includes(lastWord)) { result = entity; }
@@ -81,11 +103,34 @@ export function parseErrorDescriptions(entity) {
});
if (result) {
- result = result.includes('node') ? 'n' : result.includes('way') ? 'w' : result.includes('relation') ? 'r' : null;
+ return result.includes('node') ? 'n' :
+ result.includes('way') ? 'w' :
+ result.includes('relation') ? 'r' : null;
+
}
+ // special handling for error _401
+ else if (_401 && parsedDescriptions[0]) { return 'w'; } // hacky check to see if var1 id is entered
return result;
}
+ function isID(word, i) {
+ // select just numeric part of id
+ if (word.charAt(0) === '#' || errorDescription[i-1] === '(id') { // NOTE: hacky way of selecting the token before
+ return word.replace(/\D/g,'');
+ }
+ // if it's just an id (e.g., error _401)
+ else if (digit_re.test(word) && _401) { return word; }
+ return false;
+ }
+
+ function getIDType(i) {
+ var lastWord = errorDescription[i-1];
+ var secondLastWord = errorDescription[i-2];
+ if (lastWord) { return getEntityBase(lastWord) || getEntityBase(lastWord.slice(0, -1)) || getEntityBase(secondLastWord); }
+
+ return getEntityBase(parsedDescriptions.slice(-1)[0].split(' ').slice(-1)[0]);
+ }
+
templateDescription.forEach(function(word, index) {
if (!variable_re.test(word)) return;
@@ -99,19 +144,10 @@ export function parseErrorDescriptions(entity) {
if (errorDescription[i] !== nextWord) {
var currWord = errorDescription[i];
- // select just numeric part of id
- if (currWord.charAt(0) === '#' || errorDescription[i-1] === '(id') { // NOTE: hacky way of selecting the token before
- currWord = currWord.replace(/\D/g,'');
-
+ // if the word is an id, clean and link it
+ if (isID(currWord, i)) {
// get the entity type of the id
- var lastWord = errorDescription[i-1];
- var secondLastWord = errorDescription[i-2];
- var base;
- if (lastWord) { base = getEntityBase(lastWord) || getEntityBase(secondLastWord); }
- if (!base) {
- base = getEntityBase(parsedDescriptions.slice(-1)[0].split(' ').slice(-1)[0]);
- }
-
+ var base = getIDType(i);
// wrap id with linking span
currWord = fillPlaceholder(base + currWord);
}
@@ -121,6 +157,15 @@ export function parseErrorDescriptions(entity) {
currWord = t('QA.keepRight.entities.' + currWord);
}
+ // special handling for error _220
+ if (_220 && index === 4) {
+ _splitVar2 = currWord.split('=')[0];
+ _splitVar3 = currWord.split('=')[1];
+ parsedDescriptions.push(_splitVar2);
+ parsedDescriptions.push(_splitVar3);
+ break;
+ }
+
// add phrase (or single word) to variable list
parsedPhrase += currWord;
}
diff --git a/modules/util/locale.js b/modules/util/locale.js
index 7396b7549..1ed2c2b7e 100644
--- a/modules/util/locale.js
+++ b/modules/util/locale.js
@@ -42,7 +42,9 @@ export function t(s, o, loc) {
if (rep !== undefined) {
if (o) {
for (var k in o) {
- rep = rep.replace('{' + k + '}', o[k]);
+ var variable = '{' + k + '}';
+ var re = new RegExp(variable, 'g'); // check globally for variables
+ rep = rep.replace(re, o[k]);
}
}
return rep;