From 9f623836cdcd05957f0afb2b03ba4f599b2db65f Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Wed, 25 Apr 2018 23:32:57 -0400 Subject: [PATCH] Handle tooltip disabled reasons --- data/core.yaml | 3 ++- dist/locales/en.json | 3 ++- modules/actions/merge_nodes.js | 10 ++++++++- modules/operations/merge.js | 37 +++++++++++++++++++--------------- 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/data/core.yaml b/data/core.yaml index 292f6e658..5b0f78a36 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -132,7 +132,8 @@ en: annotation: "Merged {n} features." not_eligible: These features can't be merged. not_adjacent: These features can't be merged because their endpoints aren't connected. - restriction: "These features can't be merged because at least one is a member of a \"{relation}\" relation." + restriction: "These features can't be merged because it would damage a \"{relation}\" relation." + relation: These features can't be merged because they have conflicting relation roles. incomplete_relation: These features can't be merged because at least one hasn't been fully downloaded. conflicting_tags: These features can't be merged because some of their tags have conflicting values. move: diff --git a/dist/locales/en.json b/dist/locales/en.json index 999981d47..63ab351d0 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -170,7 +170,8 @@ "annotation": "Merged {n} features.", "not_eligible": "These features can't be merged.", "not_adjacent": "These features can't be merged because their endpoints aren't connected.", - "restriction": "These features can't be merged because at least one is a member of a \"{relation}\" relation.", + "restriction": "These features can't be merged because it would damage a \"{relation}\" relation.", + "relation": "These features can't be merged because they have conflicting relation roles.", "incomplete_relation": "These features can't be merged because at least one hasn't been fully downloaded.", "conflicting_tags": "These features can't be merged because some of their tags have conflicting values." }, diff --git a/modules/actions/merge_nodes.js b/modules/actions/merge_nodes.js index 8ed4fbbaa..123d3b641 100644 --- a/modules/actions/merge_nodes.js +++ b/modules/actions/merge_nodes.js @@ -30,6 +30,7 @@ export function actionMergeNodes(nodeIDs) { var action = function(graph) { + if (nodeIDs.length < 2) return graph; var toLoc = chooseLoc(graph); for (var i = 0; i < nodeIDs.length; i++) { @@ -41,7 +42,14 @@ export function actionMergeNodes(nodeIDs) { }; - action.disabled = function (graph) { + action.disabled = function(graph) { + if (nodeIDs.length < 2) return 'not_eligible'; + + for (var i = 0; i < nodeIDs.length; i++) { + var entity = graph.entity(nodeIDs[i]); + if (entity.type !== 'node') return 'not_eligible'; + } + return actionConnect(nodeIDs).disabled(graph); }; diff --git a/modules/operations/merge.js b/modules/operations/merge.js index 7625a30db..20728b75f 100644 --- a/modules/operations/merge.js +++ b/modules/operations/merge.js @@ -78,25 +78,30 @@ export function operationMerge(selectedIDs, context) { operation.tooltip = function() { - var j = join.disabled(context.graph()); - var m = merge.disabled(context.graph()); - var p = mergePolygon.disabled(context.graph()); - var n = mergeNodes.disabled(context.graph()); - - if (j === 'restriction' && m && p && n) { - return t('operations.merge.restriction', - { relation: context.presets().item('type/restriction').name() }); - } - - if (p === 'incomplete_relation' && j && m && n) { - return t('operations.merge.incomplete_relation'); - } + var j = join.disabled(context.graph()); // 'not_eligible', 'not_adjacent', 'restriction', 'conflicting_tags' + var m = merge.disabled(context.graph()); // 'not_eligible' + var p = mergePolygon.disabled(context.graph()); // 'not_eligible', 'incomplete_relation' + var n = mergeNodes.disabled(context.graph()); // 'not_eligible', 'relation', 'restriction' + // disabled for one of various reasons if (j && m && p && n) { - return t('operations.merge.' + j); - } + if (j === 'restriction' || n === 'restriction') { + return t('operations.merge.restriction', + { relation: context.presets().item('type/restriction').name() }); - return t('operations.merge.description'); + } else if (p === 'incomplete_relation') { + return t('operations.merge.incomplete_relation'); + + } else if (n === 'relation') { + return t('operations.merge.relation'); + + } else { + return t('operations.merge.' + j); + } + + } else { + return t('operations.merge.description'); + } };