From ced652806b9d357a83c356c5d6b3934c39502dd9 Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Mon, 25 Feb 2019 08:54:30 -0500 Subject: [PATCH] Fix an issue where some tagged nodes or existing vertices could not be snapped to (close #5942) --- modules/behavior/draw.js | 2 +- modules/behavior/draw_way.js | 2 +- modules/behavior/hover.js | 6 +++++- modules/modes/drag_node.js | 2 +- modules/presets/index.js | 27 ++++++++------------------- 5 files changed, 16 insertions(+), 23 deletions(-) diff --git a/modules/behavior/draw.js b/modules/behavior/draw.js index 81461c4e7..14a00341a 100644 --- a/modules/behavior/draw.js +++ b/modules/behavior/draw.js @@ -118,7 +118,7 @@ export function behaviorDraw(context) { } function allowsVertex(d) { - return _isEmpty(d.tags) || context.presets().allowsVertex(d, context.graph()); + return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph()); } // related code diff --git a/modules/behavior/draw_way.js b/modules/behavior/draw_way.js index 0f3d2435d..74d2cd964 100644 --- a/modules/behavior/draw_way.js +++ b/modules/behavior/draw_way.js @@ -65,7 +65,7 @@ export function behaviorDrawWay(context, wayID, index, mode, startGraph, baselin function allowsVertex(d) { - return context.presets().allowsVertex(d, context.graph()); + return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph()); } diff --git a/modules/behavior/hover.js b/modules/behavior/hover.js index 20f759a22..48a3fbd0a 100644 --- a/modules/behavior/hover.js +++ b/modules/behavior/hover.js @@ -103,6 +103,10 @@ export function behaviorHover(context) { .on('mouseup.hover', null, true); } + function allowsVertex(d) { + return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph()); + } + function enter(datum) { if (datum === _target) return; _target = datum; @@ -150,7 +154,7 @@ export function behaviorHover(context) { } var suppressed = (_altDisables && d3_event && d3_event.altKey) || - (entity.type === 'node' && _ignoreVertex && !context.presets().allowsVertex(entity, context.graph())); + (entity.type === 'node' && _ignoreVertex && !allowsVertex(entity)); _selection.selectAll(selector) .classed(suppressed ? 'hover-suppressed' : 'hover', true); diff --git a/modules/modes/drag_node.js b/modules/modes/drag_node.js index d83be0bc5..440421a9d 100644 --- a/modules/modes/drag_node.js +++ b/modules/modes/drag_node.js @@ -98,7 +98,7 @@ export function modeDragNode(context) { function shouldSnapToNode(target) { return _activeEntity.geometry(context.graph()) !== 'vertex' || - context.presets().allowsVertex(target, context.graph()); + (target.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(target, context.graph())); } diff --git a/modules/presets/index.js b/modules/presets/index.js index 873cb6579..a66e35b91 100644 --- a/modules/presets/index.js +++ b/modules/presets/index.js @@ -68,7 +68,7 @@ export function presetIndex() { match = keyMatches[i]; } } - + } if (address && (!match || match.isFallback())) { @@ -83,34 +83,23 @@ export function presetIndex() { if (_isEmpty(entity.tags)) return true; return resolver.transient(entity, 'vertexMatch', function() { var vertexPresets = _index.vertex; - var match; - if (entity.isOnAddressLine(resolver)) { - match = true; + return true; } else { + var didFindMatches = false; for (var k in entity.tags) { var keyMatches = vertexPresets[k]; if (!keyMatches) continue; + didFindMatches = true; for (var i = 0; i < keyMatches.length; i++) { - var preset = keyMatches[i]; - if (preset.searchable !== false) { - if (preset.matchScore(entity) > -1) { - match = preset; - break; - } + var preset = keyMatches[i]; + if (preset.searchable !== false && preset.matchScore(entity) > -1) { + return preset; } } - - if (!match && /^addr:/.test(k) && vertexPresets['addr:*']) { - match = true; - } - - if (match) break; - } + return !didFindMatches; } - - return match; }); };