From 90fd8b6e51f292fd364fa1667e787ec53e2ca74d Mon Sep 17 00:00:00 2001 From: tyr Date: Sun, 9 Feb 2014 18:41:31 +0100 Subject: [PATCH] disable merge operation if at least one relation is incomplete Incomplete multipolygons were harmed in the merge operation (which relies on completely loaded relations to determine inner/outer status for example). This disables the operation and adds an appropriate tooltip. --- data/core.yaml | 1 + dist/locales/en.json | 3 ++- js/id/actions/merge_polygon.js | 4 ++++ js/id/operations/merge.js | 3 +++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/data/core.yaml b/data/core.yaml index a61b9f380..f1450b43e 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -106,6 +106,7 @@ en: not_eligible: These features can't be merged. not_adjacent: These lines can't be merged because they aren't connected. restriction: These lines can't be merged because at least one is a member of a "{relation}" relation. + incomplete_relation: These features can't be merged because at least one hasn't been fully downloaded. move: title: Move description: Move this to a different location. diff --git a/dist/locales/en.json b/dist/locales/en.json index 74d51d01f..82b54c44e 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -134,7 +134,8 @@ "annotation": "Merged {n} lines.", "not_eligible": "These features can't be merged.", "not_adjacent": "These lines can't be merged because they aren't connected.", - "restriction": "These lines can't be merged because at least one is a member of a \"{relation}\" relation." + "restriction": "These lines can't be merged because at least one is a member of a \"{relation}\" relation.", + "incomplete_relation": "These features can't be merged because at least one hasn't been fully downloaded." }, "move": { "title": "Move", diff --git a/js/id/actions/merge_polygon.js b/js/id/actions/merge_polygon.js index 6dda35581..32ff2b0c6 100644 --- a/js/id/actions/merge_polygon.js +++ b/js/id/actions/merge_polygon.js @@ -108,6 +108,10 @@ iD.actions.MergePolygon = function(ids, newRelationId) { if (entities.other.length > 0 || entities.closedWay.length + entities.multipolygon.length < 2) return 'not_eligible'; + if (!entities.multipolygon.every(function(r) { + return r.isComplete(graph); + })) + return 'incomplete_relation'; }; return action; diff --git a/js/id/operations/merge.js b/js/id/operations/merge.js index 0377c60d5..c8bc60b11 100644 --- a/js/id/operations/merge.js +++ b/js/id/operations/merge.js @@ -38,6 +38,9 @@ iD.operations.Merge = function(selectedIDs, context) { if (j === 'restriction' && m && p) return t('operations.merge.restriction', {relation: context.presets().item('type/restriction').name()}); + if (p === 'incomplete_relation' && j && m) + return t('operations.merge.incomplete_relation'); + if (j && m && p) return t('operations.merge.' + j);