From f89c18e65d5945c4d56cf1f261fc79b73e7222b6 Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Tue, 29 Jan 2019 10:40:08 -0500 Subject: [PATCH] Added quick fix for tag_suggest_area validation to remove the suggesting tags --- data/core.yaml | 3 ++ dist/locales/en.json | 4 +++ modules/validations/tag_suggests_area.js | 46 +++++++++++++++++++----- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/data/core.yaml b/data/core.yaml index 840c2cc82..c32e4641d 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -1212,6 +1212,9 @@ en: remove_name: title: Remove the name undo_redo: Removed a generic name. + remove_tags: + title: Remove the tags + undo_redo: Removed tags. move_tags: title: Move the tags undo_redo: Moved tags. diff --git a/dist/locales/en.json b/dist/locales/en.json index 4f02f3af2..ec725af96 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -1482,6 +1482,10 @@ "title": "Remove the name", "undo_redo": "Removed a generic name." }, + "remove_tags": { + "title": "Remove the tags", + "undo_redo": "Removed tags." + }, "move_tags": { "title": "Move the tags", "undo_redo": "Moved tags." diff --git a/modules/validations/tag_suggests_area.js b/modules/validations/tag_suggests_area.js index 0c83795db..c12923ac0 100644 --- a/modules/validations/tag_suggests_area.js +++ b/modules/validations/tag_suggests_area.js @@ -1,10 +1,18 @@ import _isEmpty from 'lodash-es/isEmpty'; +import _clone from 'lodash-es/clone'; import { t } from '../util/locale'; +import { + utilTagText +} from '../util'; import { ValidationIssueType, ValidationIssueSeverity, validationIssue, + validationIssueFix } from './validation_issue'; +import { + actionChangeTags +} from '../actions'; // https://github.com/openstreetmap/josm/blob/mirror/src/org/ @@ -14,18 +22,21 @@ export function validationTagSuggestsArea(context) { function tagSuggestsArea(tags) { if (_isEmpty(tags)) return false; - var presence = ['landuse', 'amenities', 'tourism', 'shop']; - for (var i = 0; i < presence.length; i++) { - if (tags[presence[i]] !== undefined) { - if (presence[i] === 'tourism' && tags[presence[i]] === 'artwork') { + var areaKeys = ['area', 'building', 'landuse', 'shop', 'tourism']; + for (var i = 0; i < areaKeys.length; i++) { + var key = areaKeys[i]; + if (tags[key] !== undefined && tags[key] !== 'no') { + if (key === 'tourism' && tags[key] === 'artwork') { continue; // exception for tourism=artwork - #5206 } else { - return presence[i] + '=' + tags[presence[i]]; + var returnTags = {}; + returnTags[key] = tags[key]; + return returnTags; } } } - if (tags.building && tags.building === 'yes') return 'building=yes'; + return false; } @@ -34,15 +45,32 @@ export function validationTagSuggestsArea(context) { for (var i = 0; i < entitiesToCheck.length; i++) { var entity = entitiesToCheck[i]; var geometry = entity.geometry(graph); - var suggestion = (geometry === 'line' ? tagSuggestsArea(entity.tags) : undefined); + var suggestingTags = (geometry === 'line' ? tagSuggestsArea(entity.tags) : undefined); - if (suggestion) { + if (suggestingTags) { + var tagText = utilTagText({ tags: suggestingTags }); issues.push(new validationIssue({ type: ValidationIssueType.tag_suggests_area, severity: ValidationIssueSeverity.warning, - message: t('issues.tag_suggests_area.message', { tag: suggestion }), + message: t('issues.tag_suggests_area.message', { tag: tagText }), tooltip: t('issues.tag_suggests_area.tip'), entities: [entity], + fixes: [ + new validationIssueFix({ + title: t('issues.fix.remove_tags.title'), + action: function() { + var entity = this.issue.entities[0]; + var tags = _clone(entity.tags); + for (var key in suggestingTags) { + delete tags[key]; + } + context.perform( + actionChangeTags(entity.id, tags), + t('issues.fix.remove_tags.undo_redo') + ); + } + }) + ] })); } }