mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-15 13:38:26 +02:00
WIP: menu with sub-layer buttons; TODO: bug fixes, ui updates, wiring buttons
This commit is contained in:
committed by
Bryan Housel
parent
18278371aa
commit
3e7146c63f
+191
-2
@@ -25,10 +25,14 @@
|
||||
.layer-keepRight .kr_error .kr_error-shadow {
|
||||
color: #000;
|
||||
}
|
||||
.note-header-icon .note-fill,
|
||||
.layer-notes .note .note-fill,
|
||||
|
||||
.kr_error-header-icon .kr_error-fill,
|
||||
.layer-keepRight .kr_error .kr_error-fill {
|
||||
stroke: #333;
|
||||
}
|
||||
|
||||
.note-header-icon .note-fill,
|
||||
.layer-notes .note .note-fill {
|
||||
color: #ff3300;
|
||||
stroke: #333;
|
||||
stroke-width: 40px;
|
||||
@@ -172,3 +176,188 @@
|
||||
border-radius: 5px 0 0 5px;
|
||||
}
|
||||
|
||||
/* KeepRight */
|
||||
|
||||
.kr_error_type_30 {
|
||||
color: #ddb87d;
|
||||
}
|
||||
|
||||
.kr_error_type_40,
|
||||
.kr_error_type_41,
|
||||
.kr_error_type_42,
|
||||
.kr_error_type_43 {
|
||||
color: #894668;
|
||||
}
|
||||
|
||||
.kr_error_type_50 {
|
||||
color: #c827fe;
|
||||
}
|
||||
|
||||
.kr_error_type_70,
|
||||
.kr_error_type_71,
|
||||
.kr_error_type_72 {
|
||||
color: #74aeaf;
|
||||
}
|
||||
|
||||
.kr_error_type_90 {
|
||||
color: #3124af;
|
||||
}
|
||||
|
||||
.kr_error_type_100 {
|
||||
color: #9e8e91;
|
||||
}
|
||||
|
||||
.kr_error_type_110 {
|
||||
color: #44650b;
|
||||
}
|
||||
|
||||
.kr_error_type_120 {
|
||||
color: #99274d;
|
||||
}
|
||||
|
||||
.kr_error_type_130 {
|
||||
color: #eb7310;
|
||||
}
|
||||
|
||||
.kr_error_type_150 {
|
||||
color: #7218c1;
|
||||
}
|
||||
|
||||
.kr_error_type_160 {
|
||||
color: #c903ae;
|
||||
}
|
||||
|
||||
.kr_error_type_170 {
|
||||
color: #07d40b;
|
||||
}
|
||||
|
||||
.kr_error_type_180 {
|
||||
color: #09ef12;
|
||||
}
|
||||
|
||||
.kr_error_type_190,
|
||||
.kr_error_type_191,
|
||||
.kr_error_type_192,
|
||||
.kr_error_type_193,
|
||||
.kr_error_type_194,
|
||||
.kr_error_type_195,
|
||||
.kr_error_type_196,
|
||||
.kr_error_type_197,
|
||||
.kr_error_type_198 {
|
||||
color: #e6fcb0;
|
||||
}
|
||||
|
||||
.kr_error_type_200,
|
||||
.kr_error_type_201,
|
||||
.kr_error_type_202,
|
||||
.kr_error_type_203,
|
||||
.kr_error_type_204,
|
||||
.kr_error_type_205,
|
||||
.kr_error_type_206,
|
||||
.kr_error_type_207,
|
||||
.kr_error_type_208 {
|
||||
color: #71f264;
|
||||
}
|
||||
|
||||
.kr_error_type_210,
|
||||
.kr_error_type_211,
|
||||
.kr_error_type_212 {
|
||||
color: #4a7601;
|
||||
}
|
||||
|
||||
.kr_error_type_220,
|
||||
.kr_error_type_221 {
|
||||
color: #ef7cf2;
|
||||
}
|
||||
|
||||
.kr_error_type_230,
|
||||
.kr_error_type_231,
|
||||
.kr_error_type_232 {
|
||||
color: #5f775c;
|
||||
}
|
||||
|
||||
.kr_error_type_270 {
|
||||
color: #2aaf92;
|
||||
}
|
||||
|
||||
.kr_error_type_280,
|
||||
.kr_error_type_281,
|
||||
.kr_error_type_282,
|
||||
.kr_error_type_283,
|
||||
.kr_error_type_284,
|
||||
.kr_error_type_285 {
|
||||
color: #5f47a0;
|
||||
}
|
||||
|
||||
.kr_error_type_290,
|
||||
.kr_error_type_291,
|
||||
.kr_error_type_292,
|
||||
.kr_error_type_293,
|
||||
.kr_error_type_294,
|
||||
.kr_error_type_295,
|
||||
.kr_error_type_296,
|
||||
.kr_error_type_297,
|
||||
.kr_error_type_298 {
|
||||
color: #9bb2cd;
|
||||
}
|
||||
|
||||
.kr_error_type_310,
|
||||
.kr_error_type_311,
|
||||
.kr_error_type_312,
|
||||
.kr_error_type_313 {
|
||||
color: #0550e8;
|
||||
}
|
||||
|
||||
.kr_error_type_320 {
|
||||
color: #28d9bb;
|
||||
}
|
||||
|
||||
.kr_error_type_350 {
|
||||
color: #4d719c;
|
||||
}
|
||||
|
||||
.kr_error_type_370 {
|
||||
color: #ff8fdf;
|
||||
}
|
||||
|
||||
.kr_error_type_380 {
|
||||
color: #b3b465;
|
||||
}
|
||||
|
||||
.kr_error_type_400,
|
||||
.kr_error_type_401,
|
||||
.kr_error_type_402 {
|
||||
color: #b20e36;
|
||||
}
|
||||
|
||||
.kr_error_type_410,
|
||||
.kr_error_type_411,
|
||||
.kr_error_type_412,
|
||||
.kr_error_type_413 {
|
||||
color: #b07f7e;
|
||||
}
|
||||
|
||||
.kr_error-details-description {
|
||||
text-align: left;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.kr_error-details-description {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.QA-buttons {
|
||||
display: flex;
|
||||
flex-flow: row nowrap;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.QA-toggle-off,
|
||||
.QA-toggle-on {
|
||||
width: 35%;
|
||||
margin: 10px 0px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
+219
-217
@@ -486,6 +486,7 @@ en:
|
||||
zoom: Zoom to data
|
||||
fill_area: Fill Areas
|
||||
map_features: Map Features
|
||||
QA: QA
|
||||
autohidden: "These features have been automatically hidden because too many would be shown on the screen. You can zoom in to edit them."
|
||||
osmhidden: "These features have been automatically hidden because the OpenStreetMap layer is hidden."
|
||||
feature:
|
||||
@@ -648,264 +649,265 @@ en:
|
||||
keepRight: Error -
|
||||
tooltip: Q/A data from keepright.at
|
||||
title: Edit Error
|
||||
detail_title: Error
|
||||
detail_description: Description
|
||||
inputPlaceholder: Enter a comment to share with other users.
|
||||
newComment: New Comment
|
||||
upload_explanation: Your comments will be publicly visible to all keepRight.at users.
|
||||
upload_explanation_with_user: "Your comments as {user} will be publicly visible to all OpenStreetMap users."
|
||||
close_comment: Close and Comment
|
||||
open_comment: Reopen and Comment
|
||||
close: Close Note
|
||||
open: Reopen Note
|
||||
upload_explanation_with_user: "Your comments as {user} will be publicly visible to all keepRight.at users."
|
||||
resolve_comment: Comment and Resolve
|
||||
ignore_comment: Comment and Ignore
|
||||
resolve: Resolve
|
||||
ignore: Ignore
|
||||
toggle-on: All on
|
||||
toggle-off: All off
|
||||
entities:
|
||||
node: node
|
||||
way: way
|
||||
relation: relation
|
||||
highway: highway
|
||||
cycleway: cycleway
|
||||
waterway: waterway
|
||||
types:
|
||||
errorTypes:
|
||||
errors:
|
||||
_30:
|
||||
title: 'non-closed_areas'
|
||||
description: 'This way is tagged with {var1}={var2} and should be closed-loop'
|
||||
description: 'non-closed_areas'
|
||||
tooltip: 'This way is tagged with {var1}={var2} and should be closed-loop'
|
||||
_40:
|
||||
title: 'dead-ended one-ways'
|
||||
description: 'The first node (id {var1}) of this one-way is not connected to any other way'
|
||||
_41:
|
||||
title: ''
|
||||
description: 'The last node (id {var1}) of this one-way is not connected to any other way'
|
||||
_42:
|
||||
title: ''
|
||||
description: 'This node cannot be reached because one-ways only lead away from here'
|
||||
_43:
|
||||
title: ''
|
||||
description: 'You cannot escape from this node because one-ways only lead to here'
|
||||
description: 'dead-ended one-ways'
|
||||
tooltip: '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'
|
||||
_42:
|
||||
description: ''
|
||||
tooltip: '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'
|
||||
_50:
|
||||
title: 'almost-junctions'
|
||||
description: 'This node is very close but not connected to way #{var1}'
|
||||
description: 'almost-junctions'
|
||||
tooltip: 'This node is very close but not connected to way #{var1}'
|
||||
_70:
|
||||
title: 'missing tags'
|
||||
description: 'This {var1} has an empty tag: {var2}'
|
||||
_71:
|
||||
title: ''
|
||||
description: 'This way has no tags'
|
||||
_72:
|
||||
title: ''
|
||||
description: 'This node is not member of any way and doesn''t have any tags'
|
||||
description: 'missing tags'
|
||||
tooltip: 'This {var1} has an empty tag: {var2}'
|
||||
_71:
|
||||
description: ''
|
||||
tooltip: 'This way has no tags'
|
||||
_72:
|
||||
description: ''
|
||||
tooltip: 'This node is not member of any way and doesn''t have any tags'
|
||||
_90:
|
||||
title: 'motorways without ref'
|
||||
description: 'This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag'
|
||||
description: 'motorways without ref'
|
||||
tooltip: 'This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag'
|
||||
_100:
|
||||
title: 'places of worship without religion'
|
||||
description: 'This {var1} is tagged as place of worship and therefore needs a religion tag'
|
||||
description: 'places of worship without religion'
|
||||
tooltip: 'This {var1} is tagged as place of worship and therefore needs a religion tag'
|
||||
_110:
|
||||
title: 'point of interest without name'
|
||||
description: 'This node is tagged as {var1} and therefore needs a name tag'
|
||||
description: 'point of interest without name'
|
||||
tooltip: 'This node is tagged as {var1} and therefore needs a name tag'
|
||||
_120:
|
||||
title: 'ways without nodes'
|
||||
description: 'This way has just one single node'
|
||||
description: 'ways without nodes'
|
||||
tooltip: 'This way has just one single node'
|
||||
_130:
|
||||
title: 'floating islands'
|
||||
description: 'This way is not connected to the rest of the map'
|
||||
description: 'floating islands'
|
||||
tooltip: 'This way is not connected to the rest of the map'
|
||||
_150:
|
||||
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'
|
||||
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'
|
||||
_160:
|
||||
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'
|
||||
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'
|
||||
_170:
|
||||
title: 'FIXME tagged items'
|
||||
description: '{var1}'
|
||||
description: 'FIXME tagged items'
|
||||
tooltip: '{var1}'
|
||||
_180:
|
||||
title: 'relations without type'
|
||||
description: 'This relation has no type tag which is mandatory for relations'
|
||||
description: 'relations without type'
|
||||
tooltip: 'This relation has no type tag which is mandatory for relations'
|
||||
_190:
|
||||
title: 'intersections without junctions'
|
||||
description: 'Finds way crossings on same layer without common node as a junction'
|
||||
_191:
|
||||
title: 'highway-highway'
|
||||
description: 'This {var1} intersects the {var2} #{var3} but there is no junction node'
|
||||
_192:
|
||||
title: 'highway-waterway'
|
||||
description: 'This {var1} intersects the {var2} #{var3}'
|
||||
_193:
|
||||
title: 'highway-riverbank'
|
||||
description: 'This {var1} intersects the {var2} #{var3}'
|
||||
_194:
|
||||
title: 'waterway-waterway'
|
||||
description: 'This {var1} intersects the {var2} #{var3} but there is no junction node'
|
||||
_195:
|
||||
title: 'cycleway-cycleway'
|
||||
description: 'This {var1} intersects the {var2} #{var3} but there is no junction node'
|
||||
_196:
|
||||
title: 'highway-cycleway'
|
||||
description: 'This {var1} intersects the {var2} #{var3} but there is no junction node'
|
||||
_197:
|
||||
title: 'cycleway-waterway'
|
||||
description: 'This {var1} intersects the {var2} #{var3}'
|
||||
_198:
|
||||
title: 'cycleway-riverbank'
|
||||
description: 'This {var1} intersects the {var2} #{var3}'
|
||||
description: 'intersections without junctions'
|
||||
tooltip: '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'
|
||||
_192:
|
||||
description: 'highway-waterway'
|
||||
tooltip: 'This {var1} intersects the {var2} #{var3}'
|
||||
_193:
|
||||
description: 'highway-riverbank'
|
||||
tooltip: 'This {var1} intersects the {var2} #{var3}'
|
||||
_194:
|
||||
description: 'waterway-waterway'
|
||||
tooltip: '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'
|
||||
_196:
|
||||
description: 'highway-cycleway'
|
||||
tooltip: 'This {var1} intersects the {var2} #{var3} but there is no junction node'
|
||||
_197:
|
||||
description: 'cycleway-waterway'
|
||||
tooltip: 'This {var1} intersects the {var2} #{var3}'
|
||||
_198:
|
||||
description: 'cycleway-riverbank'
|
||||
tooltip: 'This {var1} intersects the {var2} #{var3}'
|
||||
_200:
|
||||
title: 'overlapping ways'
|
||||
description: 'Finds overlapping ways on same layer'
|
||||
_201:
|
||||
title: 'highway-highway'
|
||||
description: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_202:
|
||||
title: 'highway-waterway'
|
||||
description: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_203:
|
||||
title: 'highway-riverbank'
|
||||
description: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_204:
|
||||
title: 'waterway-waterway'
|
||||
description: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_205:
|
||||
title: 'cycleway-cycleway'
|
||||
description: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_206:
|
||||
title: 'highway-cycleway'
|
||||
description: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_207:
|
||||
title: 'cycleway-waterway'
|
||||
description: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_208:
|
||||
title: 'cycleway-riverbank'
|
||||
description: 'This {var1} overlaps the {var2} #{var3}'
|
||||
description: 'overlapping ways'
|
||||
tooltip: 'Finds overlapping ways on same layer'
|
||||
_201:
|
||||
description: 'highway-highway'
|
||||
tooltip: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_202:
|
||||
description: 'highway-waterway'
|
||||
tooltip: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_203:
|
||||
description: 'highway-riverbank'
|
||||
tooltip: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_204:
|
||||
description: 'waterway-waterway'
|
||||
tooltip: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_205:
|
||||
description: 'cycleway-cycleway'
|
||||
tooltip: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_206:
|
||||
description: 'highway-cycleway'
|
||||
tooltip: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_207:
|
||||
description: 'cycleway-waterway'
|
||||
tooltip: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_208:
|
||||
description: 'cycleway-riverbank'
|
||||
tooltip: 'This {var1} overlaps the {var2} #{var3}'
|
||||
_210:
|
||||
title: 'loopings'
|
||||
description: 'These errors contain self intersecting ways'
|
||||
_211:
|
||||
title: ''
|
||||
description: 'This way contains more than one node at least twice. Nodes are {var1}. This may or may not be an error'
|
||||
_212:
|
||||
title: ''
|
||||
description: 'This way has only two different nodes and contains one of them more than once'
|
||||
description: 'loopings'
|
||||
tooltip: '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'
|
||||
_212:
|
||||
description: ''
|
||||
tooltip: 'This way has only two different nodes and contains one of them more than once'
|
||||
_220:
|
||||
title: 'misspelled tags'
|
||||
description: 'This {var1} is tagged {var2}={var3} where {var4} looks like {var5}'
|
||||
_221:
|
||||
title: ''
|
||||
description: 'The key of this {var1} tag is key {var2}'
|
||||
_230:
|
||||
title: 'layer conflicts'
|
||||
description: ''
|
||||
_231:
|
||||
title: 'mixed layers intersection'
|
||||
description: 'This node is a junction of ways on different layers: {var1}'
|
||||
_232:
|
||||
title: 'strange layers'
|
||||
description: 'This {var1} is tagged with layer {var2}. This need not be an error but it looks strange'
|
||||
description: 'misspelled tags'
|
||||
tooltip: 'This {var1} is tagged {var2}={var3} where {var4} looks like {var5}'
|
||||
_221:
|
||||
description: ''
|
||||
tooltip: 'The key of this {var1} tag is key {var2}'
|
||||
_230:
|
||||
description: 'layer conflicts'
|
||||
tooltip: ''
|
||||
_231:
|
||||
description: 'mixed layers intersection'
|
||||
tooltip: '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'
|
||||
_270:
|
||||
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.'
|
||||
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.'
|
||||
_280:
|
||||
title: 'boundaries'
|
||||
description: ''
|
||||
_281:
|
||||
title: 'missing name'
|
||||
description: 'This boundary has no name'
|
||||
_282:
|
||||
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:
|
||||
title: 'no closed loop'
|
||||
description: 'The boundary of {var1} is not closed-loop'
|
||||
_284:
|
||||
title: 'splitting boundary'
|
||||
description: 'The boundary of {var1} splits here'
|
||||
_285:
|
||||
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'
|
||||
description: 'boundaries'
|
||||
tooltip: ''
|
||||
_281:
|
||||
description: 'missing name'
|
||||
tooltip: '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'
|
||||
_283:
|
||||
description: 'no closed loop'
|
||||
tooltip: 'The boundary of {var1} is not closed-loop'
|
||||
_284:
|
||||
description: 'splitting boundary'
|
||||
tooltip: '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'
|
||||
_290:
|
||||
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:
|
||||
title: 'missing type'
|
||||
description: 'This turn-restriction has no known restriction type'
|
||||
_292:
|
||||
title: 'missing from way'
|
||||
description: 'A turn-restriction needs exactly one {var1} member. This one has {var2}'
|
||||
_293:
|
||||
title: 'missing to way'
|
||||
description: 'A turn-restriction needs exactly one {var1} member. This one has {var2}'
|
||||
_294:
|
||||
title: 'from or to not a way'
|
||||
description: 'From- and To-members of turn restrictions need to be ways. {var1}'
|
||||
_295:
|
||||
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:
|
||||
title: 'wrong restriction angle'
|
||||
description: 'restriction type is {var1} but angle is {var2} degrees. Maybe the restriction type is not appropriate?'
|
||||
_297:
|
||||
title: 'wrong direction of to member'
|
||||
description: 'wrong direction of to way {var1}'
|
||||
_298:
|
||||
title: 'already restricted by oneway'
|
||||
description: 'entry already prohibited by oneway tag on {var1}'
|
||||
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'
|
||||
_291:
|
||||
description: 'missing type'
|
||||
tooltip: '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}'
|
||||
_293:
|
||||
description: 'missing to way'
|
||||
tooltip: '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}'
|
||||
_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})'
|
||||
_296:
|
||||
description: 'wrong restriction angle'
|
||||
tooltip: '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}'
|
||||
_298:
|
||||
description: 'already restricted by oneway'
|
||||
tooltip: 'entry already prohibited by oneway tag on {var1}'
|
||||
_310:
|
||||
title: 'roundabouts'
|
||||
description: 'Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1'
|
||||
_311:
|
||||
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:
|
||||
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:
|
||||
title: 'faintly connected'
|
||||
description: 'This roundabout has only {var1} other roads connected. Roundabouts typically have three'
|
||||
description: 'roundabouts'
|
||||
tooltip: '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)'
|
||||
_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'
|
||||
_313:
|
||||
description: 'faintly connected'
|
||||
tooltip: 'This roundabout has only {var1} other roads connected. Roundabouts typically have three'
|
||||
_320:
|
||||
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'
|
||||
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'
|
||||
_350:
|
||||
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}'
|
||||
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}'
|
||||
_370:
|
||||
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'
|
||||
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'
|
||||
_380:
|
||||
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'
|
||||
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'
|
||||
_400:
|
||||
title: 'geometry glitches'
|
||||
description: ''
|
||||
_401:
|
||||
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:
|
||||
title: 'impossible angles'
|
||||
description: 'this way bends in a very sharp angle here'
|
||||
description: 'geometry glitches'
|
||||
tooltip: ''
|
||||
_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}'
|
||||
_402:
|
||||
description: 'impossible angles'
|
||||
tooltip: 'this way bends in a very sharp angle here'
|
||||
_410:
|
||||
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:
|
||||
title: 'http error'
|
||||
description: 'The URL (<a target="_blank" href="{var1}">{var1}</a>) cannot be opened (HTTP status code {var2})'
|
||||
_412:
|
||||
title: 'domain hijacking'
|
||||
description: 'Possible domain squatting: <a target=\"_blank\" href="{var1}">{var1}</a>. Suspicious text is: "{var2}"'
|
||||
_413:
|
||||
title: 'non-match'
|
||||
description: 'Content of the URL (<a target=\"_blank\" href="{var1}">{var1}</a>) did not contain these keywords: ({var2})'
|
||||
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=*'
|
||||
_411:
|
||||
description: 'http error'
|
||||
tooltip: 'The URL (<a target="_blank" href="{var1}">{var1}</a>) cannot be opened (HTTP status code {var2})'
|
||||
_412:
|
||||
description: 'domain hijacking'
|
||||
tooltip: 'Possible domain squatting: <a target=\"_blank\" href="{var1}">{var1}</a>. Suspicious text is: "{var2}"'
|
||||
_413:
|
||||
description: 'non-match'
|
||||
tooltip: 'Content of the URL (<a target=\"_blank\" href="{var1}">{var1}</a>) did not contain these keywords: ({var2})'
|
||||
warnings:
|
||||
_20:
|
||||
title: 'multiple nodes on the same spot'
|
||||
description: 'There is more than one node in this spot. Offending node IDs: {var1}'
|
||||
description: 'multiple nodes on the same spot'
|
||||
tooltip: 'There is more than one node in this spot. Offending node IDs: {var1}'
|
||||
_60:
|
||||
title: 'depreciated tags'
|
||||
description: 'This {var1} uses deprecated tag {var2}={var3}. Please use {var4} instead!'
|
||||
description: 'depreciated tags'
|
||||
tooltip: 'This {var1} uses deprecated tag {var2}={var3}. Please use {var4} instead!'
|
||||
_300:
|
||||
title: 'missing maxspeed'
|
||||
description: 'missing maxspeed tag'
|
||||
description: 'missing maxspeed'
|
||||
tooltip: 'missing maxspeed tag'
|
||||
_360:
|
||||
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}'
|
||||
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}'
|
||||
_390:
|
||||
title: 'missing tracktype'
|
||||
description: This track doesn't have a tracktype
|
||||
description: 'missing tracktype'
|
||||
tooltip: This track doesn't have a tracktype
|
||||
streetside:
|
||||
tooltip: "Streetside photos from Microsoft"
|
||||
title: "Photo Overlay (Bing Streetside)"
|
||||
|
||||
Vendored
+268
-266
@@ -591,6 +591,7 @@
|
||||
},
|
||||
"fill_area": "Fill Areas",
|
||||
"map_features": "Map Features",
|
||||
"QA": "QA",
|
||||
"autohidden": "These features have been automatically hidden because too many would be shown on the screen. You can zoom in to edit them.",
|
||||
"osmhidden": "These features have been automatically hidden because the OpenStreetMap layer is hidden."
|
||||
},
|
||||
@@ -787,345 +788,346 @@
|
||||
"keepRight": "Error -",
|
||||
"tooltip": "Q/A data from keepright.at",
|
||||
"title": "Edit Error",
|
||||
"detail_title": "Error",
|
||||
"detail_description": "Description",
|
||||
"inputPlaceholder": "Enter a comment to share with other users.",
|
||||
"newComment": "New Comment",
|
||||
"upload_explanation": "Your comments will be publicly visible to all keepRight.at users.",
|
||||
"upload_explanation_with_user": "Your comments as {user} will be publicly visible to all OpenStreetMap users.",
|
||||
"close_comment": "Close and Comment",
|
||||
"open_comment": "Reopen and Comment",
|
||||
"close": "Close Note",
|
||||
"open": "Reopen Note",
|
||||
"upload_explanation_with_user": "Your comments as {user} will be publicly visible to all keepRight.at users.",
|
||||
"resolve_comment": "Comment and Resolve",
|
||||
"ignore_comment": "Comment and Ignore",
|
||||
"resolve": "Resolve",
|
||||
"ignore": "Ignore",
|
||||
"toggle-on": "All on",
|
||||
"toggle-off": "All off",
|
||||
"entities": {
|
||||
"node": "node",
|
||||
"way": "way",
|
||||
"relation": "relation",
|
||||
"highway": "highway",
|
||||
"cycleway": "cycleway",
|
||||
"waterway": "waterway"
|
||||
"relation": "relation"
|
||||
},
|
||||
"types": {
|
||||
"errorTypes": {
|
||||
"errors": {
|
||||
"_30": {
|
||||
"title": "non-closed_areas",
|
||||
"description": "This way is tagged with {var1}={var2} and should be closed-loop"
|
||||
"description": "non-closed_areas",
|
||||
"tooltip": "This way is tagged with {var1}={var2} and should be closed-loop"
|
||||
},
|
||||
"_40": {
|
||||
"title": "dead-ended one-ways",
|
||||
"description": "The first node (id {var1}) of this one-way is not connected to any other way",
|
||||
"_41": {
|
||||
"title": "",
|
||||
"description": "The last node (id {var1}) of this one-way is not connected to any other way"
|
||||
},
|
||||
"_42": {
|
||||
"title": "",
|
||||
"description": "This node cannot be reached because one-ways only lead away from here"
|
||||
},
|
||||
"_43": {
|
||||
"title": "",
|
||||
"description": "You cannot escape from this node because one-ways only lead to here"
|
||||
}
|
||||
"description": "dead-ended one-ways",
|
||||
"tooltip": "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"
|
||||
},
|
||||
"_42": {
|
||||
"description": "",
|
||||
"tooltip": "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"
|
||||
},
|
||||
"_50": {
|
||||
"title": "almost-junctions",
|
||||
"description": "This node is very close but not connected to way #{var1}"
|
||||
"description": "almost-junctions",
|
||||
"tooltip": "This node is very close but not connected to way #{var1}"
|
||||
},
|
||||
"_70": {
|
||||
"title": "missing tags",
|
||||
"description": "This {var1} has an empty tag: {var2}",
|
||||
"_71": {
|
||||
"title": "",
|
||||
"description": "This way has no tags"
|
||||
},
|
||||
"_72": {
|
||||
"title": "",
|
||||
"description": "This node is not member of any way and doesn't have any tags"
|
||||
}
|
||||
"description": "missing tags",
|
||||
"tooltip": "This {var1} has an empty tag: {var2}"
|
||||
},
|
||||
"_71": {
|
||||
"description": "",
|
||||
"tooltip": "This way has no tags"
|
||||
},
|
||||
"_72": {
|
||||
"description": "",
|
||||
"tooltip": "This node is not member of any way and doesn't have any tags"
|
||||
},
|
||||
"_90": {
|
||||
"title": "motorways without ref",
|
||||
"description": "This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag"
|
||||
"description": "motorways without ref",
|
||||
"tooltip": "This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag"
|
||||
},
|
||||
"_100": {
|
||||
"title": "places of worship without religion",
|
||||
"description": "This {var1} is tagged as place of worship and therefore needs a religion tag"
|
||||
"description": "places of worship without religion",
|
||||
"tooltip": "This {var1} is tagged as place of worship and therefore needs a religion tag"
|
||||
},
|
||||
"_110": {
|
||||
"title": "point of interest without name",
|
||||
"description": "This node is tagged as {var1} and therefore needs a name tag"
|
||||
"description": "point of interest without name",
|
||||
"tooltip": "This node is tagged as {var1} and therefore needs a name tag"
|
||||
},
|
||||
"_120": {
|
||||
"title": "ways without nodes",
|
||||
"description": "This way has just one single node"
|
||||
"description": "ways without nodes",
|
||||
"tooltip": "This way has just one single node"
|
||||
},
|
||||
"_130": {
|
||||
"title": "floating islands",
|
||||
"description": "This way is not connected to the rest of the map"
|
||||
"description": "floating islands",
|
||||
"tooltip": "This way is not connected to the rest of the map"
|
||||
},
|
||||
"_150": {
|
||||
"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"
|
||||
"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"
|
||||
},
|
||||
"_160": {
|
||||
"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"
|
||||
"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"
|
||||
},
|
||||
"_170": {
|
||||
"title": "FIXME tagged items",
|
||||
"description": "{var1}"
|
||||
"description": "FIXME tagged items",
|
||||
"tooltip": "{var1}"
|
||||
},
|
||||
"_180": {
|
||||
"title": "relations without type",
|
||||
"description": "This relation has no type tag which is mandatory for relations"
|
||||
"description": "relations without type",
|
||||
"tooltip": "This relation has no type tag which is mandatory for relations"
|
||||
},
|
||||
"_190": {
|
||||
"title": "intersections without junctions",
|
||||
"description": "Finds way crossings on same layer without common node as a junction",
|
||||
"_191": {
|
||||
"title": "highway-highway",
|
||||
"description": "This {var1} intersects the {var2} #{var3} but there is no junction node"
|
||||
},
|
||||
"_192": {
|
||||
"title": "highway-waterway",
|
||||
"description": "This {var1} intersects the {var2} #{var3}"
|
||||
},
|
||||
"_193": {
|
||||
"title": "highway-riverbank",
|
||||
"description": "This {var1} intersects the {var2} #{var3}"
|
||||
},
|
||||
"_194": {
|
||||
"title": "waterway-waterway",
|
||||
"description": "This {var1} intersects the {var2} #{var3} but there is no junction node"
|
||||
},
|
||||
"_195": {
|
||||
"title": "cycleway-cycleway",
|
||||
"description": "This {var1} intersects the {var2} #{var3} but there is no junction node"
|
||||
},
|
||||
"_196": {
|
||||
"title": "highway-cycleway",
|
||||
"description": "This {var1} intersects the {var2} #{var3} but there is no junction node"
|
||||
},
|
||||
"_197": {
|
||||
"title": "cycleway-waterway",
|
||||
"description": "This {var1} intersects the {var2} #{var3}"
|
||||
},
|
||||
"_198": {
|
||||
"title": "cycleway-riverbank",
|
||||
"description": "This {var1} intersects the {var2} #{var3}"
|
||||
}
|
||||
"description": "intersections without junctions",
|
||||
"tooltip": "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"
|
||||
},
|
||||
"_192": {
|
||||
"description": "highway-waterway",
|
||||
"tooltip": "This {var1} intersects the {var2} #{var3}"
|
||||
},
|
||||
"_193": {
|
||||
"description": "highway-riverbank",
|
||||
"tooltip": "This {var1} intersects the {var2} #{var3}"
|
||||
},
|
||||
"_194": {
|
||||
"description": "waterway-waterway",
|
||||
"tooltip": "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"
|
||||
},
|
||||
"_196": {
|
||||
"description": "highway-cycleway",
|
||||
"tooltip": "This {var1} intersects the {var2} #{var3} but there is no junction node"
|
||||
},
|
||||
"_197": {
|
||||
"description": "cycleway-waterway",
|
||||
"tooltip": "This {var1} intersects the {var2} #{var3}"
|
||||
},
|
||||
"_198": {
|
||||
"description": "cycleway-riverbank",
|
||||
"tooltip": "This {var1} intersects the {var2} #{var3}"
|
||||
},
|
||||
"_200": {
|
||||
"title": "overlapping ways",
|
||||
"description": "Finds overlapping ways on same layer",
|
||||
"_201": {
|
||||
"title": "highway-highway",
|
||||
"description": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_202": {
|
||||
"title": "highway-waterway",
|
||||
"description": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_203": {
|
||||
"title": "highway-riverbank",
|
||||
"description": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_204": {
|
||||
"title": "waterway-waterway",
|
||||
"description": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_205": {
|
||||
"title": "cycleway-cycleway",
|
||||
"description": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_206": {
|
||||
"title": "highway-cycleway",
|
||||
"description": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_207": {
|
||||
"title": "cycleway-waterway",
|
||||
"description": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_208": {
|
||||
"title": "cycleway-riverbank",
|
||||
"description": "This {var1} overlaps the {var2} #{var3}"
|
||||
}
|
||||
"description": "overlapping ways",
|
||||
"tooltip": "Finds overlapping ways on same layer"
|
||||
},
|
||||
"_201": {
|
||||
"description": "highway-highway",
|
||||
"tooltip": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_202": {
|
||||
"description": "highway-waterway",
|
||||
"tooltip": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_203": {
|
||||
"description": "highway-riverbank",
|
||||
"tooltip": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_204": {
|
||||
"description": "waterway-waterway",
|
||||
"tooltip": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_205": {
|
||||
"description": "cycleway-cycleway",
|
||||
"tooltip": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_206": {
|
||||
"description": "highway-cycleway",
|
||||
"tooltip": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_207": {
|
||||
"description": "cycleway-waterway",
|
||||
"tooltip": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_208": {
|
||||
"description": "cycleway-riverbank",
|
||||
"tooltip": "This {var1} overlaps the {var2} #{var3}"
|
||||
},
|
||||
"_210": {
|
||||
"title": "loopings",
|
||||
"description": "These errors contain self intersecting ways",
|
||||
"_211": {
|
||||
"title": "",
|
||||
"description": "This way contains more than one node at least twice. Nodes are {var1}. This may or may not be an error"
|
||||
},
|
||||
"_212": {
|
||||
"title": "",
|
||||
"description": "This way has only two different nodes and contains one of them more than once"
|
||||
}
|
||||
"description": "loopings",
|
||||
"tooltip": "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"
|
||||
},
|
||||
"_212": {
|
||||
"description": "",
|
||||
"tooltip": "This way has only two different nodes and contains one of them more than once"
|
||||
},
|
||||
"_220": {
|
||||
"title": "misspelled tags",
|
||||
"description": "This {var1} is tagged {var2}={var3} where {var4} looks like {var5}",
|
||||
"_221": {
|
||||
"title": "",
|
||||
"description": "The key of this {var1} tag is key {var2}"
|
||||
},
|
||||
"_230": {
|
||||
"title": "layer conflicts",
|
||||
"description": ""
|
||||
},
|
||||
"_231": {
|
||||
"title": "mixed layers intersection",
|
||||
"description": "This node is a junction of ways on different layers: {var1}"
|
||||
},
|
||||
"_232": {
|
||||
"title": "strange layers",
|
||||
"description": "This {var1} is tagged with layer {var2}. This need not be an error but it looks strange"
|
||||
}
|
||||
"description": "misspelled tags",
|
||||
"tooltip": "This {var1} is tagged {var2}={var3} where {var4} looks like {var5}"
|
||||
},
|
||||
"_221": {
|
||||
"description": "",
|
||||
"tooltip": "The key of this {var1} tag is key {var2}"
|
||||
},
|
||||
"_230": {
|
||||
"description": "layer conflicts",
|
||||
"tooltip": ""
|
||||
},
|
||||
"_231": {
|
||||
"description": "mixed layers intersection",
|
||||
"tooltip": "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"
|
||||
},
|
||||
"_270": {
|
||||
"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."
|
||||
"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."
|
||||
},
|
||||
"_280": {
|
||||
"title": "boundaries",
|
||||
"description": "",
|
||||
"_281": {
|
||||
"title": "missing name",
|
||||
"description": "This boundary has no name"
|
||||
},
|
||||
"_282": {
|
||||
"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": {
|
||||
"title": "no closed loop",
|
||||
"description": "The boundary of {var1} is not closed-loop"
|
||||
},
|
||||
"_284": {
|
||||
"title": "splitting boundary",
|
||||
"description": "The boundary of {var1} splits here"
|
||||
},
|
||||
"_285": {
|
||||
"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"
|
||||
}
|
||||
"description": "boundaries",
|
||||
"tooltip": ""
|
||||
},
|
||||
"_281": {
|
||||
"description": "missing name",
|
||||
"tooltip": "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"
|
||||
},
|
||||
"_283": {
|
||||
"description": "no closed loop",
|
||||
"tooltip": "The boundary of {var1} is not closed-loop"
|
||||
},
|
||||
"_284": {
|
||||
"description": "splitting boundary",
|
||||
"tooltip": "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"
|
||||
},
|
||||
"_290": {
|
||||
"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": {
|
||||
"title": "missing type",
|
||||
"description": "This turn-restriction has no known restriction type"
|
||||
},
|
||||
"_292": {
|
||||
"title": "missing from way",
|
||||
"description": "A turn-restriction needs exactly one {var1} member. This one has {var2}"
|
||||
},
|
||||
"_293": {
|
||||
"title": "missing to way",
|
||||
"description": "A turn-restriction needs exactly one {var1} member. This one has {var2}"
|
||||
},
|
||||
"_294": {
|
||||
"title": "from or to not a way",
|
||||
"description": "From- and To-members of turn restrictions need to be ways. {var1}"
|
||||
},
|
||||
"_295": {
|
||||
"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": {
|
||||
"title": "wrong restriction angle",
|
||||
"description": "restriction type is {var1} but angle is {var2} degrees. Maybe the restriction type is not appropriate?"
|
||||
},
|
||||
"_297": {
|
||||
"title": "wrong direction of to member",
|
||||
"description": "wrong direction of to way {var1}"
|
||||
},
|
||||
"_298": {
|
||||
"title": "already restricted by oneway",
|
||||
"description": "entry already prohibited by oneway tag on {var1}"
|
||||
}
|
||||
"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"
|
||||
},
|
||||
"_291": {
|
||||
"description": "missing type",
|
||||
"tooltip": "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}"
|
||||
},
|
||||
"_293": {
|
||||
"description": "missing to way",
|
||||
"tooltip": "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}"
|
||||
},
|
||||
"_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})"
|
||||
},
|
||||
"_296": {
|
||||
"description": "wrong restriction angle",
|
||||
"tooltip": "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}"
|
||||
},
|
||||
"_298": {
|
||||
"description": "already restricted by oneway",
|
||||
"tooltip": "entry already prohibited by oneway tag on {var1}"
|
||||
},
|
||||
"_310": {
|
||||
"title": "roundabouts",
|
||||
"description": "Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1",
|
||||
"_311": {
|
||||
"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": {
|
||||
"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": {
|
||||
"title": "faintly connected",
|
||||
"description": "This roundabout has only {var1} other roads connected. Roundabouts typically have three"
|
||||
}
|
||||
"description": "roundabouts",
|
||||
"tooltip": "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)"
|
||||
},
|
||||
"_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"
|
||||
},
|
||||
"_313": {
|
||||
"description": "faintly connected",
|
||||
"tooltip": "This roundabout has only {var1} other roads connected. Roundabouts typically have three"
|
||||
},
|
||||
"_320": {
|
||||
"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"
|
||||
"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"
|
||||
},
|
||||
"_350": {
|
||||
"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}"
|
||||
"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}"
|
||||
},
|
||||
"_370": {
|
||||
"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"
|
||||
"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"
|
||||
},
|
||||
"_380": {
|
||||
"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"
|
||||
"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"
|
||||
},
|
||||
"_400": {
|
||||
"title": "geometry glitches",
|
||||
"description": "",
|
||||
"_401": {
|
||||
"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": {
|
||||
"title": "impossible angles",
|
||||
"description": "this way bends in a very sharp angle here"
|
||||
}
|
||||
"description": "geometry glitches",
|
||||
"tooltip": ""
|
||||
},
|
||||
"_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}"
|
||||
},
|
||||
"_402": {
|
||||
"description": "impossible angles",
|
||||
"tooltip": "this way bends in a very sharp angle here"
|
||||
},
|
||||
"_410": {
|
||||
"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": {
|
||||
"title": "http error",
|
||||
"description": "The URL (<a target=\"_blank\" href=\"{var1}\">{var1}</a>) cannot be opened (HTTP status code {var2})"
|
||||
},
|
||||
"_412": {
|
||||
"title": "domain hijacking",
|
||||
"description": "Possible domain squatting: <a target=\\\"_blank\\\" href=\"{var1}\">{var1}</a>. Suspicious text is: \"{var2}\""
|
||||
},
|
||||
"_413": {
|
||||
"title": "non-match",
|
||||
"description": "Content of the URL (<a target=\\\"_blank\\\" href=\"{var1}\">{var1}</a>) did not contain these keywords: ({var2})"
|
||||
}
|
||||
"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=*"
|
||||
},
|
||||
"_411": {
|
||||
"description": "http error",
|
||||
"tooltip": "The URL (<a target=\"_blank\" href=\"{var1}\">{var1}</a>) cannot be opened (HTTP status code {var2})"
|
||||
},
|
||||
"_412": {
|
||||
"description": "domain hijacking",
|
||||
"tooltip": "Possible domain squatting: <a target=\\\"_blank\\\" href=\"{var1}\">{var1}</a>. Suspicious text is: \"{var2}\""
|
||||
},
|
||||
"_413": {
|
||||
"description": "non-match",
|
||||
"tooltip": "Content of the URL (<a target=\\\"_blank\\\" href=\"{var1}\">{var1}</a>) did not contain these keywords: ({var2})"
|
||||
}
|
||||
},
|
||||
"warnings": {
|
||||
"_20": {
|
||||
"title": "multiple nodes on the same spot",
|
||||
"description": "There is more than one node in this spot. Offending node IDs: {var1}"
|
||||
"description": "multiple nodes on the same spot",
|
||||
"tooltip": "There is more than one node in this spot. Offending node IDs: {var1}"
|
||||
},
|
||||
"_60": {
|
||||
"title": "depreciated tags",
|
||||
"description": "This {var1} uses deprecated tag {var2}={var3}. Please use {var4} instead!"
|
||||
"description": "depreciated tags",
|
||||
"tooltip": "This {var1} uses deprecated tag {var2}={var3}. Please use {var4} instead!"
|
||||
},
|
||||
"_300": {
|
||||
"title": "missing maxspeed",
|
||||
"description": "missing maxspeed tag"
|
||||
"description": "missing maxspeed",
|
||||
"tooltip": "missing maxspeed tag"
|
||||
},
|
||||
"_360": {
|
||||
"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}"
|
||||
"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}"
|
||||
},
|
||||
"_390": {
|
||||
"title": "missing tracktype",
|
||||
"description": "This track doesn't have a tracktype"
|
||||
"description": "missing tracktype",
|
||||
"tooltip": "This track doesn't have a tracktype"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ export default {
|
||||
},
|
||||
|
||||
|
||||
// get all cached notes covering the viewport
|
||||
// get all cached errors covering the viewport
|
||||
keepRight: function(projection) {
|
||||
var viewport = projection.clipExtent();
|
||||
var min = [viewport[0][0], viewport[1][1]];
|
||||
@@ -202,20 +202,20 @@ export default {
|
||||
return _keepRightCache.keepRight[id];
|
||||
},
|
||||
|
||||
// replace a single note in the cache
|
||||
// replace a single error in the cache
|
||||
replaceError: function(error) {
|
||||
if (!(error instanceof krError) || !error.id) return;
|
||||
|
||||
_keepRightCache.note[error.id] = error;
|
||||
_keepRightCache.keepRight[error.id] = error;
|
||||
updateRtree(encodeErrorRtree(error), true); // true = replace
|
||||
return error;
|
||||
},
|
||||
|
||||
// remove a single note from the cache
|
||||
// remove a single error from the cache
|
||||
removeError: function(error) {
|
||||
if (!(error instanceof krError) || !error.id) return;
|
||||
|
||||
delete _keepRightCache.note[error.id];
|
||||
delete _keepRightCache.keepRight[error.id];
|
||||
updateRtree(encodeErrorRtree(error), false); // false = remove
|
||||
},
|
||||
};
|
||||
@@ -1,4 +1,3 @@
|
||||
import _some from 'lodash-es/some';
|
||||
import _throttle from 'lodash-es/throttle';
|
||||
import { select as d3_select } from 'd3-selection';
|
||||
import { svgPointTransform } from './index';
|
||||
@@ -16,6 +15,7 @@ export function svgKeepRight(projection, context, dispatch) {
|
||||
if (svgKeepRight.initialized) return; // run once
|
||||
svgKeepRight.enabled = false;
|
||||
svgKeepRight.initialized = true;
|
||||
svgKeepRight.visibleErrors = [30];
|
||||
}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ export function svgKeepRight(projection, context, dispatch) {
|
||||
|
||||
|
||||
function editOff() {
|
||||
layer.selectAll('.icon-sign').remove();
|
||||
layer.selectAll('.kr_error').remove();
|
||||
layer.style('display', 'none');
|
||||
}
|
||||
|
||||
@@ -83,9 +83,10 @@ export function svgKeepRight(projection, context, dispatch) {
|
||||
var service = getService();
|
||||
var selectedID = context.selectedNoteID(); // TODO: update with selectedErrorID
|
||||
var data = (service ? service.keepRight(projection) : []);
|
||||
var visibleData = data; // getVisible(data); // TODO: only show sub-layers that are toggled on
|
||||
var transform = svgPointTransform(projection);
|
||||
var kr_errors = layer.selectAll('.kr_error')
|
||||
.data(data, function(d) { return d.id; });
|
||||
.data(visibleData, function(d) { return d.id; });
|
||||
|
||||
// exit
|
||||
kr_errors.exit()
|
||||
@@ -94,7 +95,8 @@ export function svgKeepRight(projection, context, dispatch) {
|
||||
// enter
|
||||
var kr_errorsEnter = kr_errors.enter()
|
||||
.append('g')
|
||||
.attr('class', function(d) { return 'kr_error kr_error-' + d.id; })
|
||||
.attr('class', function(d) {
|
||||
return 'kr_error kr_error-' + d.id + ' kr_error_type_' + d.error_type; })
|
||||
.classed('new', function(d) { return d.id < 0; });
|
||||
|
||||
kr_errorsEnter
|
||||
@@ -114,9 +116,9 @@ export function svgKeepRight(projection, context, dispatch) {
|
||||
.attr('class', 'kr_error-fill')
|
||||
.attr('width', '20px')
|
||||
.attr('height', '20px')
|
||||
.attr('x', '-8px')
|
||||
.attr('y', '-22px')
|
||||
.attr('xlink:href', '#iD-icon-note'); // TODO: update icon
|
||||
.attr('x', '-4px')
|
||||
.attr('y', '-24px')
|
||||
.attr('xlink:href', '#iD-icon-bolt');
|
||||
|
||||
// update
|
||||
kr_errors
|
||||
@@ -179,8 +181,16 @@ export function svgKeepRight(projection, context, dispatch) {
|
||||
};
|
||||
|
||||
|
||||
drawKeepRight.supported = function() {
|
||||
return !!getService();
|
||||
drawKeepRight.visibleErrors = function(_) {
|
||||
if (!arguments.length) return svgKeepRight.visibleErrors;
|
||||
svgKeepRight.visibleErrors.push(_);
|
||||
if (svgKeepRight.visibleErrors) {
|
||||
showLayer();
|
||||
} else {
|
||||
hideLayer();
|
||||
}
|
||||
dispatch.call('change');
|
||||
return this;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +1,46 @@
|
||||
import { t } from '../util/locale';
|
||||
import { utilGetErrorDetails } from '../util';
|
||||
import { parseErrorDescriptions, errorTypes } from '../util';
|
||||
|
||||
|
||||
export function uiKeepRightDetails() {
|
||||
var _error;
|
||||
var _template;
|
||||
var _templateErrorType;
|
||||
var _category;
|
||||
var _categoryElements;
|
||||
var _parent_error_type = '';
|
||||
var _titleBase;
|
||||
|
||||
|
||||
function initDetails() {
|
||||
if (errorTypes.errors['_' + _error.error_type]) {
|
||||
_templateErrorType = '_' + _error.error_type;
|
||||
_template = errorTypes.errors[_templateErrorType];
|
||||
_category = 'errors';
|
||||
} else if (errorTypes.warnings[_templateErrorType]) {
|
||||
_template = errorTypes.errors[_templateErrorType];
|
||||
_category = 'warnings';
|
||||
} else { return; }
|
||||
|
||||
// if there is a parent, save it's error type
|
||||
_categoryElements = errorTypes[_category];
|
||||
var base_error_type = (Math.round(_error.error_type / 10) * 10).toString();
|
||||
if ((_categoryElements['_' + base_error_type]) && (base_error_type !== _error.error_type) ) {
|
||||
_parent_error_type = '_' + base_error_type;
|
||||
}
|
||||
|
||||
_titleBase = 'keepRight.errorTypes.' + _category + '.';
|
||||
|
||||
}
|
||||
|
||||
|
||||
function keepRightDetails(selection) {
|
||||
if (!_error || !_error.error_type) return;
|
||||
|
||||
initDetails();
|
||||
if (!_template) return;
|
||||
|
||||
|
||||
var details = selection.selectAll('.kr_error-details')
|
||||
.data(
|
||||
(_error ? [_error] : []),
|
||||
@@ -18,14 +52,46 @@ export function uiKeepRightDetails() {
|
||||
|
||||
var detailsEnter = details.enter()
|
||||
.append('div')
|
||||
.attr('class', 'kr_error-details');
|
||||
.attr('class', 'kr_error-details kr_error-details-container');
|
||||
|
||||
detailsEnter
|
||||
// title
|
||||
var title = detailsEnter
|
||||
.append('div')
|
||||
.attr('class', 'kr_error-details-title');
|
||||
|
||||
title.append('h4')
|
||||
.text(function() { return t('keepRight.detail_title'); });
|
||||
|
||||
title.append('div')
|
||||
.text(function() {
|
||||
var title = '';
|
||||
|
||||
// if this is a subtype, append it's parent title
|
||||
if (_parent_error_type) {
|
||||
title = t(_titleBase + _parent_error_type + '.description' + ':\n');
|
||||
}
|
||||
|
||||
// append title
|
||||
if (_error.error_type) {
|
||||
title += t(_titleBase + _templateErrorType + '.description');
|
||||
}
|
||||
|
||||
return title;
|
||||
});
|
||||
|
||||
// description
|
||||
var description = detailsEnter
|
||||
.append('div')
|
||||
.attr('class', 'kr_error-details-description');
|
||||
|
||||
description
|
||||
.append('h4')
|
||||
.text(function() { return t('keepRight.detail_description'); });
|
||||
|
||||
description
|
||||
.append('div')
|
||||
.attr('class', 'kr_error-details-label')
|
||||
.text(function(d) {
|
||||
var error = utilGetErrorDetails(d);
|
||||
return t('keepRight.keepRight'); // TODO: add details here
|
||||
return t(_titleBase + _templateErrorType + '.tooltip', parseErrorDescriptions(d));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ export function uiKeepRightEditor(context) {
|
||||
var dispatch = d3_dispatch('change');
|
||||
var keepRightComment = uiKeepRightComment();
|
||||
var keepRightDetails = uiKeepRightDetails();
|
||||
var keepRightHeader = uiKeepRightHeader();
|
||||
var keepRightHeader = uiKeepRightHeader(context);
|
||||
|
||||
var _error;
|
||||
|
||||
@@ -249,7 +249,11 @@ export function uiKeepRightEditor(context) {
|
||||
|
||||
buttonEnter
|
||||
.append('button')
|
||||
.attr('class', 'button status-button action');
|
||||
.attr('class', 'button resolve-button action');
|
||||
|
||||
buttonEnter
|
||||
.append('button')
|
||||
.attr('class', 'button ignore-button action');
|
||||
|
||||
buttonEnter
|
||||
.append('button')
|
||||
@@ -287,12 +291,28 @@ export function uiKeepRightEditor(context) {
|
||||
}
|
||||
});
|
||||
|
||||
buttonSection.select('.status-button') // select and propagate data
|
||||
buttonSection.select('.resolve-button') // select and propagate data
|
||||
.attr('disabled', (hasAuth ? null : true))
|
||||
.text(function(d) {
|
||||
var action = (d.status === 'open' ? 'close' : 'open'); // TODO: possibly remove reopen since I don't think it's an option
|
||||
var andComment = (d.newComment ? '_comment' : '');
|
||||
return t('keepRight.' + action + andComment);
|
||||
return t('keepRight.resolve' + andComment);
|
||||
})
|
||||
.on('click.status', function(d) {
|
||||
this.blur(); // avoid keeping focus on the button - #4641
|
||||
var keepRight = services.keepRight;
|
||||
if (keepRight) {
|
||||
// TODO: handle posting updates
|
||||
// keepRight.postKeepRightUpdate(d, function(err, error) {
|
||||
// dispatch.call('change', error);
|
||||
// });
|
||||
}
|
||||
});
|
||||
|
||||
buttonSection.select('.ignore-button') // select and propagate data
|
||||
.attr('disabled', (hasAuth ? null : true))
|
||||
.text(function(d) {
|
||||
var andComment = (d.newComment ? '_comment' : '');
|
||||
return t('keepRight.ignore' + andComment);
|
||||
})
|
||||
.on('click.status', function(d) {
|
||||
this.blur(); // avoid keeping focus on the button - #4641
|
||||
@@ -307,7 +327,7 @@ export function uiKeepRightEditor(context) {
|
||||
|
||||
buttonSection.select('.comment-button') // select and propagate data
|
||||
.attr('disabled', function(d) {
|
||||
return (hasAuth && d.status === 'open' && d.newComment) ? null : true;
|
||||
return (hasAuth && d.newComment) ? null : true;
|
||||
})
|
||||
.on('click.comment', function(d) {
|
||||
this.blur(); // avoid keeping focus on the button - #4641
|
||||
|
||||
@@ -2,15 +2,21 @@ import { t } from '../util/locale';
|
||||
import { svgIcon } from '../svg';
|
||||
|
||||
|
||||
export function uiKeepRightHeader() {
|
||||
export function uiKeepRightHeader(context) {
|
||||
var _error;
|
||||
|
||||
|
||||
function getEntityLink() {
|
||||
|
||||
var url = context.connection().entityURL(context.entity(_error.object_id));
|
||||
}
|
||||
|
||||
|
||||
function keepRightHeader(selection) {
|
||||
var header = selection.selectAll('.kr_error-header')
|
||||
.data(
|
||||
(_error ? [_error] : []),
|
||||
function(d) { return d.status + d.id; }
|
||||
function(d) { return d.id; }
|
||||
);
|
||||
|
||||
header.exit()
|
||||
@@ -22,20 +28,26 @@ export function uiKeepRightHeader() {
|
||||
|
||||
var iconEnter = headerEnter
|
||||
.append('div')
|
||||
.attr('class', function(d) { return 'kr_error-header-icon ' + d.status; })
|
||||
.attr('class', function(d) { return 'kr_error-header-icon '; })
|
||||
.classed('new', function(d) { return d.id < 0; });
|
||||
|
||||
iconEnter
|
||||
.append('div')
|
||||
.attr('class', 'preset-icon-28')
|
||||
.call(svgIcon('#iD-icon-note', 'note-fill')); // TODO: change classes
|
||||
.attr('class', function(d) {
|
||||
return 'preset-icon-28 kr_error kr_error-' + d.id + ' kr_error_type_' + d.error_type;
|
||||
})
|
||||
|
||||
.call(svgIcon('#iD-icon-bolt', 'kr_error-fill'));
|
||||
|
||||
headerEnter
|
||||
.append('div')
|
||||
.attr('class', 'kr_error-header-label')
|
||||
.text(function(d) {
|
||||
return t('keepRight.keepRight') + ' ' + d.object_type + ' ' + ' ' + d.error_id;
|
||||
});
|
||||
return t('keepRight.entities.' + d.object_type);
|
||||
})
|
||||
.append('div')
|
||||
// .attr('href', getEntityLink()) // TODO: add / remove link if entity is/isn't in the graph
|
||||
.text(function(d) { return d.object_id; });
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
import {
|
||||
event as d3_event,
|
||||
select as d3_select
|
||||
} from 'd3-selection';
|
||||
|
||||
import { svgIcon } from '../svg';
|
||||
import { errorTypes } from '../util';
|
||||
import { t, textDirection } from '../util/locale';
|
||||
import { tooltip } from '../util/tooltip';
|
||||
import { geoExtent } from '../geo';
|
||||
@@ -16,8 +18,11 @@ import { uiTooltipHtml } from './tooltipHtml';
|
||||
|
||||
|
||||
export function uiMapData(context) {
|
||||
var dispatch = d3_dispatch('change');
|
||||
|
||||
var key = t('map_data.key');
|
||||
var features = context.features().keys();
|
||||
var errors = Object.keys(errorTypes.errors); // TODO: add warnings
|
||||
var layers = context.layers();
|
||||
var fills = ['wireframe', 'partial', 'full'];
|
||||
|
||||
@@ -29,6 +34,7 @@ export function uiMapData(context) {
|
||||
var _dataLayerContainer = d3_select(null);
|
||||
var _fillList = d3_select(null);
|
||||
var _featureList = d3_select(null);
|
||||
var _QAList = d3_select(null);
|
||||
|
||||
|
||||
function showsFeature(d) {
|
||||
@@ -47,6 +53,17 @@ export function uiMapData(context) {
|
||||
}
|
||||
|
||||
|
||||
function showsError(d) {
|
||||
// return context.errors().enabled(d);
|
||||
}
|
||||
|
||||
|
||||
function clickError(d) {
|
||||
// context.errors().toggle(d);
|
||||
// update();
|
||||
}
|
||||
|
||||
|
||||
function showsFill(d) {
|
||||
return _fillSelected === d;
|
||||
}
|
||||
@@ -411,6 +428,43 @@ export function uiMapData(context) {
|
||||
}
|
||||
|
||||
|
||||
function drawQAButtons(selection) {
|
||||
var QAButtons = d3_select('.layer-QA').selectAll('li').select('label').select('input');
|
||||
var buttonSection = selection.selectAll('.QA-buttons')
|
||||
.data([0]);
|
||||
|
||||
// exit
|
||||
buttonSection.exit()
|
||||
.remove();
|
||||
|
||||
// enter
|
||||
var buttonEnter = buttonSection.enter()
|
||||
.append('div')
|
||||
.attr('class', 'QA-buttons');
|
||||
|
||||
buttonEnter
|
||||
.append('button')
|
||||
.attr('class', 'button QA-toggle-on action')
|
||||
.text(t('keepRight.toggle-on'))
|
||||
.on('click', function() {
|
||||
QAButtons.property('checked', true);
|
||||
dispatch.call('change');
|
||||
});
|
||||
|
||||
buttonEnter
|
||||
.append('button')
|
||||
.attr('class', 'button QA-toggle-off action')
|
||||
.text(t('keepRight.toggle-off'))
|
||||
.on('click', function() {
|
||||
QAButtons.property('checked', false);
|
||||
dispatch.call('change');
|
||||
});
|
||||
|
||||
buttonSection = buttonSection
|
||||
.merge(buttonEnter);
|
||||
}
|
||||
|
||||
|
||||
function drawListItems(selection, data, type, name, change, active) {
|
||||
var items = selection.selectAll('li')
|
||||
.data(data);
|
||||
@@ -498,6 +552,17 @@ export function uiMapData(context) {
|
||||
}
|
||||
|
||||
|
||||
function renderQA(selection) {
|
||||
var container = selection.selectAll('layer-QA')
|
||||
.data([0]);
|
||||
|
||||
_QAList = container.enter()
|
||||
.append('ul')
|
||||
.attr('class', 'layer-list layer-QA')
|
||||
.merge(container);
|
||||
}
|
||||
|
||||
|
||||
function update() {
|
||||
_dataLayerContainer
|
||||
.call(drawOsmItems)
|
||||
@@ -510,6 +575,11 @@ export function uiMapData(context) {
|
||||
|
||||
_featureList
|
||||
.call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature);
|
||||
|
||||
_QAList
|
||||
.call(drawListItems, errors, 'checkbox', 'keepRight.errorTypes.errors', clickError, showsError);
|
||||
d3_select('.disclosure-wrap-QA')
|
||||
.call(drawQAButtons);
|
||||
}
|
||||
|
||||
|
||||
@@ -636,11 +706,23 @@ export function uiMapData(context) {
|
||||
.content(renderFeatureList)
|
||||
);
|
||||
|
||||
// Q/A tools
|
||||
content
|
||||
.append('div')
|
||||
.attr('class', 'map-data-QA')
|
||||
.call(uiDisclosure(context, 'QA', false)
|
||||
.title(t('map_data.QA'))
|
||||
.content(renderQA)
|
||||
);
|
||||
|
||||
|
||||
// add listeners
|
||||
context.features()
|
||||
.on('change.map_data-update', update);
|
||||
|
||||
// context.errors()
|
||||
// .on('change.map_data-update', update); // TODO: add errors list to context?
|
||||
|
||||
update();
|
||||
setFill(_fillSelected);
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ export { utilExternalValidationRules } from './util';
|
||||
export { utilFastMouse } from './util';
|
||||
export { utilFunctor } from './util';
|
||||
export { utilGetAllNodes } from './util';
|
||||
export { utilGetErrorDetails } from './keepRight';
|
||||
export { errorTypes, parseErrorDescriptions } from './keepRight';
|
||||
export { utilGetPrototypeOf } from './util';
|
||||
export { utilGetSetValue } from './get_set_value';
|
||||
export { utilHashcode } from './util';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
{
|
||||
"types": {
|
||||
"errorTypes": {
|
||||
"errors": {
|
||||
"_30": {
|
||||
"title": "non-closed_areas",
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
export { utilGetErrorDetails } from './keepRight_error';
|
||||
export { types } from './errorSchema.json';
|
||||
export { parseErrorDescriptions } from './keepRight_error';
|
||||
export { errorTypes } from './errorSchema.json';
|
||||
@@ -1,7 +1,9 @@
|
||||
import { t } from '../locale';
|
||||
import { krError } from '../../osm';
|
||||
import { types } from './errorSchema.json';
|
||||
|
||||
import { errorTypes } from './errorSchema.json';
|
||||
|
||||
// TODO: remove these objects, here for reference
|
||||
var keepRightSchema = {
|
||||
'schema': '',
|
||||
'id': 0,
|
||||
@@ -46,50 +48,57 @@ var keepRightSchemaFromWeb = {
|
||||
'title': 'intersections without junctions, highway-waterway'
|
||||
};
|
||||
|
||||
export function utilGetErrorDetails(entity) {
|
||||
// TODO: clean up description parsing some: remove or ignore spurious characters
|
||||
export function parseErrorDescriptions(entity) {
|
||||
if (!(entity instanceof krError)) return;
|
||||
|
||||
// find the matching template from the error schema
|
||||
var errorType = '_' + entity.error_type;
|
||||
var matchingTemplate = types.errors[errorType] || types.warnings[errorType];
|
||||
var matchingTemplate = errorTypes.errors[errorType] || errorTypes.warnings[errorType];
|
||||
if (!matchingTemplate) return;
|
||||
|
||||
// tokenize descriptions
|
||||
var errorDescriptions = entity.description.split(' ');
|
||||
var schemaDescriptions = matchingTemplate.description.split(' ');
|
||||
var templateDescriptions = matchingTemplate.description.split(' ');
|
||||
|
||||
var parsedDescriptions = [];
|
||||
var re = new RegExp(/{\$[0-9]}/);
|
||||
|
||||
function iterator() {
|
||||
var commonEntities = ['node', 'way', 'relation']; // TODO: expand this list, or implement a different translation function
|
||||
|
||||
var parsedDescription = [];
|
||||
var re = new RegExp(/{\$[0-9]}/);
|
||||
templateDescriptions.forEach(function(word, index) {
|
||||
if (!re.test(word)) return;
|
||||
|
||||
schemaDescriptions.forEach(function(word, index) { // TODO: figure out how to get the word and the index in a foreach
|
||||
if (!re.test(word)) return;
|
||||
// get the word at this index, and at the next index value
|
||||
var nextWord = templateDescriptions[index + 1] ? templateDescriptions[index + 1] : null;
|
||||
|
||||
// get the word at this index, and at the next index value
|
||||
var nextWord = schemaDescriptions[index + 1] ? schemaDescriptions[index + 1] : null;
|
||||
var parsedPhrase = '';
|
||||
|
||||
// also get the word at the same index from the errorDescription
|
||||
// parse error description words
|
||||
for (var i = index; i <= errorDescriptions.length - 1; i++) {
|
||||
if (errorDescriptions[i] !== nextWord) {
|
||||
var currWord = errorDescriptions[i];
|
||||
|
||||
var parsedPhrase = '';
|
||||
|
||||
|
||||
// while error terms do not equal the next schema term
|
||||
for (var i = index; i <= errorDescriptions.length - 1; i++) {
|
||||
if (errorDescriptions[i] !== nextWord) {
|
||||
parsedPhrase += errorDescriptions[i];
|
||||
// if any variables contain common words, like node, way, relation, translate those
|
||||
if (commonEntities.includes(currWord)) {
|
||||
currWord = t('keepRight.entities.' + currWord);
|
||||
}
|
||||
parsedDescription.push(parsedPhrase);
|
||||
break;
|
||||
|
||||
parsedPhrase += currWord;
|
||||
}
|
||||
});
|
||||
}
|
||||
// add phrase (or single word) to variable list
|
||||
parsedDescriptions.push(parsedPhrase);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function getCommonWords() { // TODO: implement, see if a variable is a common word like 'node', so that we can translate it before sending it off
|
||||
}
|
||||
|
||||
|
||||
iterator();
|
||||
}
|
||||
return {
|
||||
var1: parsedDescriptions[0] || '',
|
||||
var2: parsedDescriptions[1] || '',
|
||||
var3: parsedDescriptions[2] || '',
|
||||
var4: parsedDescriptions[3] || '',
|
||||
var5: parsedDescriptions[4] || '',
|
||||
var6: parsedDescriptions[4] || '',
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="20" height="20" viewBox="0 0 20 20">
|
||||
<path d="M11.6,6.2H7.1l1.4-5.1C8.6,0.6,8.1,0,7.5,0H2.2C1.7,0,1.3,0.3,1.3,0.8L0,10.2c-0.1,0.6,0.4,1.1,0.9,1.1h4.6l-1.8,7.6
|
||||
C3.6,19.4,4.1,20,4.7,20c0.3,0,0.6-0.2,0.8-0.5l6.9-11.9C12.7,7,12.3,6.2,11.6,6.2z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 529 B |
@@ -1,10 +0,0 @@
|
||||
<!-- <?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg aria-hidden="true" data-prefix="fas" data-icon="level-down-alt" class="svg-inline--fa fa-level-down-alt fa-w-10" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">
|
||||
<path fill="currentColor" d="M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z"></path>
|
||||
</svg> -->
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="20" height="20" viewBox="0 0 20 20">
|
||||
<path d="M16.5,1 L17.5,2 L17.5,16 L16.5,17 L16.5,2 L5,2 L4.5,3 L15.5,3 L15.5,18 L14.5,19 L3,19 L3,3 L4,1 L16.5,1 z M10.4,13.844 L8.202,13.844 L8.202,16 L10.4,16 L10.4,13.844 z M9.35,5.766 Q8.58,5.766 7.957,6.025 Q7.334,6.284 6.893,6.746 Q6.452,7.208 6.207,7.838 Q5.962,8.468 5.948,9.224 L8.006,9.224 Q8.006,8.846 8.09,8.517 Q8.174,8.188 8.349,7.943 Q8.524,7.698 8.797,7.551 Q9.07,7.404 9.448,7.404 Q10.008,7.404 10.323,7.712 Q10.638,8.02 10.638,8.664 Q10.652,9.042 10.505,9.294 Q10.358,9.546 10.12,9.756 Q9.882,9.966 9.602,10.176 Q9.322,10.386 9.07,10.673 Q8.818,10.96 8.629,11.366 Q8.44,11.772 8.398,12.374 L8.398,13.004 L10.288,13.004 L10.288,12.472 Q10.344,12.052 10.561,11.772 Q10.778,11.492 11.058,11.275 Q11.338,11.058 11.653,10.841 Q11.968,10.624 12.227,10.316 Q12.486,10.008 12.661,9.574 Q12.836,9.14 12.836,8.468 Q12.836,8.062 12.661,7.593 Q12.486,7.124 12.08,6.718 Q11.674,6.312 11.009,6.039 Q10.344,5.766 9.35,5.766 z" fill="currentColor"/>
|
||||
</svg>
|
||||
Reference in New Issue
Block a user