From fbe3c94b011d63090ab9749978c786bce93bd866 Mon Sep 17 00:00:00 2001 From: Thomas Hervey Date: Thu, 30 Aug 2018 19:25:35 -0600 Subject: [PATCH] updated: punctuation, some specialized QA error parsing --- css/80_app.css | 3 +- data/core.yaml | 320 +++++++++++----------- dist/locales/en.json | 320 +++++++++++----------- modules/ui/keepRight_details.js | 6 +- modules/util/keepRight/errorSchema.json | 2 +- modules/util/keepRight/keepRight_error.js | 79 ++++-- modules/util/locale.js | 4 +- 7 files changed, 391 insertions(+), 343 deletions(-) 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;