Add button to reset ignored issues

Don't cache issue extent
This commit is contained in:
Quincy Morgan
2019-04-30 16:32:36 -07:00
parent a4ebbaf7f5
commit 52d92f125c
6 changed files with 122 additions and 23 deletions
+9 -3
View File
@@ -3306,6 +3306,10 @@ button.autofix.action.active {
padding: 0 10px;
}
.layer-list.issues-list {
margin-bottom: 5px;
}
.layer-list.issues-list li.issue {
border-color: inherit; /* override .layer-list styles */
color: inherit;
@@ -3325,15 +3329,17 @@ button.autofix.action.active {
padding: 5px;
}
.issues-none {
margin-top: 5px;
margin-bottom: 5px;
}
.issues-none .box {
border-radius: 4px;
border: 1px solid #72d979;
background: #c6ffca;
padding: 5px !important;
display: flex;
margin-top: 5px;
margin-bottom: 15px;
margin-bottom: 5px;
}
.issues-none .icon {
color: #05ac10;
+20 -2
View File
@@ -1281,8 +1281,25 @@ en:
rules:
title: Rules
no_issues:
message: Everything looks fine
info: Any issues will show up here as you edit
message:
everything: Everything looks fine
everything_in_view: Everything in view looks fine
edits: Your edits look fine
edits_in_view: Your edits in view look fine
hidden_issues:
none: Detected issues will appear here
elsewhere:
single: "1 issue elsewhere"
multiple: "{count} issues elsewhere"
other_features:
single: "1 issue with other features"
multiple: "{count} issues with other features"
disabled_rules:
single: "1 issue from disabled rules"
multiple: "{count} issues from disabled rules"
ignored_issues:
single: "1 ignored issue"
multiple: "{count} ignored issues"
options:
what:
title: "Check:"
@@ -1295,6 +1312,7 @@ en:
suggested: "Suggested updates:"
enable_all: Enable All
disable_all: Disable All
reset_ignored: Reset ignored ({count})
fix_one:
title: fix
fix_all:
+26 -2
View File
@@ -1571,8 +1571,31 @@
"title": "Rules"
},
"no_issues": {
"message": "Everything looks fine",
"info": "Any issues will show up here as you edit"
"message": {
"everything": "Everything looks fine",
"everything_in_view": "Everything in view looks fine",
"edits": "Your edits look fine",
"edits_in_view": "Your edits in view look fine"
},
"hidden_issues": {
"none": "Detected issues will appear here",
"elsewhere": {
"single": "1 issue elsewhere",
"multiple": "{count} issues elsewhere"
},
"other_features": {
"single": "1 issue with other features",
"multiple": "{count} issues with other features"
},
"disabled_rules": {
"single": "1 issue from disabled rules",
"multiple": "{count} issues from disabled rules"
},
"ignored_issues": {
"single": "1 ignored issue",
"multiple": "{count} ignored issues"
}
}
},
"options": {
"what": {
@@ -1589,6 +1612,7 @@
"suggested": "Suggested updates:",
"enable_all": "Enable All",
"disable_all": "Disable All",
"reset_ignored": "Reset ignored ({count})",
"fix_one": {
"title": "fix"
},
+2 -6
View File
@@ -1,5 +1,4 @@
import { geoExtent } from '../../geo';
import { osmEntity } from '../../osm/entity';
export function validationIssue(attrs) {
this.type = attrs.type; // required - name of rule that created the issue (e.g. 'missing_tag')
@@ -39,15 +38,12 @@ export function validationIssue(attrs) {
return parts.join(':');
}
var _extent;
this.extent = function(resolver) {
if (_extent) return _extent;
if (this.loc) {
return _extent = geoExtent(this.loc);
return geoExtent(this.loc);
}
if (this.entityIds && this.entityIds.length) {
return _extent = this.entityIds.reduce(function(extent, entityId) {
return this.entityIds.reduce(function(extent, entityId) {
return extent.extend(resolver.entity(entityId).extent(resolver));
}, geoExtent());
}
+16 -4
View File
@@ -45,6 +45,7 @@ export function coreValidator(context) {
//
validator.reset = function() {
// clear caches
_ignoredIssueIDs = {};
_issuesByIssueID = {};
_issuesByEntityID = {};
_validatedGraph = null;
@@ -56,11 +57,16 @@ export function coreValidator(context) {
}
};
validator.resetIgnoredIssues = function() {
_ignoredIssueIDs = {};
// reload UI
dispatch.call('validated');
};
// options = {
// what: 'edited', // 'all' or 'edited'
// where: 'visible', // 'all' or 'visible'
// includeIgnored: false // true or false
// what: 'all', // 'all' or 'edited'
// where: 'all', // 'all' or 'visible'
// includeIgnored: false // true, false, or 'only'
// };
validator.getIssues = function(options) {
var opts = Object.assign({ what: 'all', where: 'all', includeIgnored: false }, options);
@@ -83,6 +89,8 @@ export function coreValidator(context) {
}
}
if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) return false;
if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) return false;
if (opts.what === 'edited') {
@@ -120,7 +128,11 @@ export function coreValidator(context) {
validator.getRuleKeys = function() {
return Object.keys(_rules)
.filter(function(key) { return key !== 'maprules'; });
.filter(function(key) { return key !== 'maprules'; })
.sort(function(key1, key2) {
// alphabetize by localized title
return t('issues.' + key1 + '.title') < t('issues.' + key2 + '.title') ? -1 : 1;
});
};
+49 -6
View File
@@ -191,6 +191,10 @@ export function uiIssues(context) {
.attr('class', 'autofix-all-link-icon')
.call(svgIcon('#iD-icon-wrench'));
if (which === 'warnings') {
renderIgnoredIssuesReset(selection);
}
// update
autoFixAll = autoFixAll
.merge(autoFixAllEnter);
@@ -272,23 +276,57 @@ export function uiIssues(context) {
function renderNoIssuesBox(selection) {
selection
var box = selection.append('div')
.attr('class', 'box');
box
.append('div')
.call(svgIcon('#iD-icon-apply', 'pre-text'));
var noIssuesMessage = selection
var noIssuesMessage = box
.append('span');
noIssuesMessage
.append('strong')
.text(t('issues.no_issues.message'));
.text(t('issues.no_issues.message.everything'));
noIssuesMessage
.append('br');
noIssuesMessage
.append('span')
.text(t('issues.no_issues.info'));
.text(t('issues.no_issues.hidden_issues.none'));
}
function renderIgnoredIssuesReset(selection) {
var ignoredIssues = context.validator()
.getIssues(Object.assign({ includeIgnored: 'only' }, _options));
var resetIgnored = selection.selectAll('.reset-ignored')
.data(ignoredIssues.length ? [0] : []);
// exit
resetIgnored.exit()
.remove();
// enter
var resetIgnoredEnter = resetIgnored.enter()
.append('a')
.attr('class', 'reset-ignored')
.attr('href', '#');
// update
resetIgnored = resetIgnored
.merge(resetIgnoredEnter);
resetIgnored
.text(t('issues.reset_ignored', { count: ignoredIssues.length.toString() }));
resetIgnored.on('click', function() {
context.validator().resetIgnoredIssues();
});
}
@@ -401,8 +439,13 @@ export function uiIssues(context) {
}
}
_pane.select('.issues-none')
.classed('hide', _warnings.length > 0 || _errors.length > 0);
var hasIssues = _warnings.length > 0 || _errors.length > 0;
var issuesNone = _pane.select('.issues-none');
issuesNone.classed('hide', hasIssues);
if (!hasIssues) {
renderIgnoredIssuesReset(issuesNone);
}
if (!_pane.select('.disclosure-wrap-issues_rules').classed('hide')) {
updateRulesList();