From 96c8bcb1526c136b2dfc6e2fb1ae2d51575a87bf Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Wed, 13 Nov 2019 14:52:57 -0500 Subject: [PATCH] Add tooltip to delete feature fix explaining if it's disabled (close #6588) --- modules/core/validation/models.js | 11 ++++++----- modules/ui/entity_issues.js | 6 ++++++ modules/validations/missing_tag.js | 4 +++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/modules/core/validation/models.js b/modules/core/validation/models.js index c8551422a..f99577e6e 100644 --- a/modules/core/validation/models.js +++ b/modules/core/validation/models.js @@ -81,11 +81,12 @@ export function validationIssue(attrs) { export function validationIssueFix(attrs) { - this.title = attrs.title; // Required - this.onClick = attrs.onClick; // Optional - the function to run to apply the fix - this.icon = attrs.icon; // Optional - shows 'iD-icon-wrench' if not set - this.entityIds = attrs.entityIds || []; // Optional - used for hover-higlighting. - this.autoArgs = attrs.autoArgs; // Optional - pass [actions, annotation] arglist if this fix can automatically run + this.title = attrs.title; // Required + this.onClick = attrs.onClick; // Optional - the function to run to apply the fix + this.disabledReason = attrs.disabledReason; // Optional - a string explaining why the fix is unavailable, if any + this.icon = attrs.icon; // Optional - shows 'iD-icon-wrench' if not set + this.entityIds = attrs.entityIds || []; // Optional - used for hover-higlighting. + this.autoArgs = attrs.autoArgs; // Optional - pass [actions, annotation] arglist if this fix can automatically run this.issue = null; // Generated link - added by validationIssue } diff --git a/modules/ui/entity_issues.js b/modules/ui/entity_issues.js index 2fd0a5c3d..5dece486c 100644 --- a/modules/ui/entity_issues.js +++ b/modules/ui/entity_issues.js @@ -255,6 +255,12 @@ export function uiEntityIssues(context) { fixesEnter.merge(fixes) .classed('actionable', function(d) { return d.onClick; + }) + .attr('title', function(d) { + if (d.disabledReason) { + return d.disabledReason; + } + return null; }); } diff --git a/modules/validations/missing_tag.js b/modules/validations/missing_tag.js index 0d9b5ee7c..e9d848a63 100644 --- a/modules/validations/missing_tag.js +++ b/modules/validations/missing_tag.js @@ -99,7 +99,8 @@ export function validationMissingTag() { var id = this.entityIds[0]; var operation = operationDelete([id], context); - if (!operation.disabled()) { + var disabledReasonID = operation.disabled(); + if (!disabledReasonID) { deleteOnClick = function(context) { var id = this.issue.entityIds[0]; var operation = operationDelete([id], context); @@ -113,6 +114,7 @@ export function validationMissingTag() { new validationIssueFix({ icon: 'iD-operation-delete', title: t('issues.fix.delete_feature.title'), + disabledReason: disabledReasonID ? t('operations.delete.' + disabledReasonID + '.single') : undefined, onClick: deleteOnClick }) );