diff --git a/data/core.yaml b/data/core.yaml index 2d4dfded0..8db65b9c4 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -1294,12 +1294,21 @@ en: other_features: single: "1 issue with other features" multiple: "{count} issues with other features" + other_features_elsewhere: + single: "1 issue with other features elsewhere" + multiple: "{count} issues with other features elsewhere" disabled_rules: - single: "1 issue from disabled rules" - multiple: "{count} issues from disabled rules" + single: "1 issue with disabled rules" + multiple: "{count} issues with disabled rules" + disabled_rules_elsewhere: + single: "1 issue with disabled rules elsewhere" + multiple: "{count} issues with disabled rules elsewhere" ignored_issues: single: "1 ignored issue" multiple: "{count} ignored issues" + ignored_issues_elsewhere: + single: "1 ignored issue elsewhere" + multiple: "{count} ignored issues elsewhere" options: what: title: "Check:" diff --git a/dist/locales/en.json b/dist/locales/en.json index deb53ed44..4b4035e0a 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -1587,13 +1587,25 @@ "single": "1 issue with other features", "multiple": "{count} issues with other features" }, + "other_features_elsewhere": { + "single": "1 issue with other features elsewhere", + "multiple": "{count} issues with other features elsewhere" + }, "disabled_rules": { - "single": "1 issue from disabled rules", - "multiple": "{count} issues from disabled rules" + "single": "1 issue with disabled rules", + "multiple": "{count} issues with disabled rules" + }, + "disabled_rules_elsewhere": { + "single": "1 issue with disabled rules elsewhere", + "multiple": "{count} issues with disabled rules elsewhere" }, "ignored_issues": { "single": "1 ignored issue", "multiple": "{count} ignored issues" + }, + "ignored_issues_elsewhere": { + "single": "1 ignored issue elsewhere", + "multiple": "{count} ignored issues elsewhere" } } }, diff --git a/modules/core/validator.js b/modules/core/validator.js index 87e4291ad..2c32486a8 100644 --- a/modules/core/validator.js +++ b/modules/core/validator.js @@ -67,15 +67,20 @@ export function coreValidator(context) { // what: 'all', // 'all' or 'edited' // where: 'all', // 'all' or 'visible' // includeIgnored: false // true, false, or 'only' + // includeDisabledRules: false // true, false, or 'only' // }; validator.getIssues = function(options) { - var opts = Object.assign({ what: 'all', where: 'all', includeIgnored: false }, options); + var opts = Object.assign({ what: 'all', where: 'all', includeIgnored: false, includeDisabledRules: false }, options); var issues = Object.values(_issuesByIssueID); var changes = context.history().difference().changes(); var view = context.map().extent(); return issues.filter(function(issue) { - if (_disabledRules[issue.type]) return false; + if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) return false; + if (!opts.includeDisabledRules && _disabledRules[issue.type]) return false; + + if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) return false; + if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) return false; // Sanity check: This issue may be for an entity that not longer exists. // If we detect this, uncache and return false so it is not incluced.. @@ -89,10 +94,6 @@ 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') { var isEdited = entityIds.some(function(entityId) { return changes[entityId]; }); if (entityIds.length && !isEdited) return false; diff --git a/modules/ui/issues.js b/modules/ui/issues.js index 2a3d5e177..7806ceb14 100644 --- a/modules/ui/issues.js +++ b/modules/ui/issues.js @@ -289,14 +289,14 @@ export function uiIssues(context) { noIssuesMessage .append('strong') - .text(t('issues.no_issues.message.everything')); + .attr('class', 'message'); noIssuesMessage .append('br'); noIssuesMessage .append('span') - .text(t('issues.no_issues.hidden_issues.none')); + .attr('class', 'details'); } function renderIgnoredIssuesReset(selection) { @@ -395,6 +395,78 @@ export function uiIssues(context) { context.validator().toggleRule(d); } + function setNoIssuesText() { + + function checkForHiddenIssues(cases) { + for (var type in cases) { + var opts = cases[type]; + var hiddenIssues = context.validator().getIssues(opts); + if (hiddenIssues.length) { + var quantity = hiddenIssues.length === 1 ? 'single' : 'multiple'; + _pane.select('.issues-none .details') + .text(t( + 'issues.no_issues.hidden_issues.' + type + '.' + quantity, + { count: hiddenIssues.length.toString() } + )); + return; + } + } + _pane.select('.issues-none .details') + .text(t('issues.no_issues.hidden_issues.none')); + } + + var messageType; + + if (_options.what === 'edited' && _options.where === 'visible') { + + messageType = 'edits_in_view'; + + checkForHiddenIssues({ + elsewhere: { what: 'edited', where: 'all' }, + other_features: { what: 'all', where: 'visible' }, + disabled_rules: { what: 'edited', where: 'visible', includeDisabledRules: 'only' }, + other_features_elsewhere: { what: 'all', where: 'all' }, + disabled_rules_elsewhere: { what: 'edited', where: 'all', includeDisabledRules: 'only' }, + ignored_issues: { what: 'edited', where: 'visible', includeIgnored: 'only' }, + ignored_issues_elsewhere: { what: 'edited', where: 'all', includeIgnored: 'only' } + }); + + } else if (_options.what === 'edited' && _options.where === 'all') { + + messageType = 'edits'; + + checkForHiddenIssues({ + other_features: { what: 'all', where: 'all' }, + disabled_rules: { what: 'edited', where: 'all', includeDisabledRules: 'only' }, + ignored_issues: { what: 'edited', where: 'all', includeIgnored: 'only' } + }); + + } else if (_options.what === 'all' && _options.where === 'visible') { + + messageType = 'everything_in_view'; + + checkForHiddenIssues({ + elsewhere: { what: 'all', where: 'all' }, + disabled_rules: { what: 'all', where: 'visible', includeDisabledRules: 'only' }, + disabled_rules_elsewhere: { what: 'all', where: 'all', includeDisabledRules: 'only' }, + ignored_issues: { what: 'all', where: 'visible', includeIgnored: 'only' }, + ignored_issues_elsewhere: { what: 'all', where: 'all', includeIgnored: 'only' } + }); + } else if (_options.what === 'all' && _options.where === 'all') { + + messageType = 'everything'; + + checkForHiddenIssues({ + disabled_rules: { what: 'all', where: 'all', includeDisabledRules: 'only' }, + ignored_issues: { what: 'all', where: 'all', includeIgnored: 'only' } + }); + } + + _pane.select('.issues-none .message') + .text(t('issues.no_issues.message.' + messageType)); + + } + function update() { var issuesBySeverity = context.validator().getIssuesBySeverity(_options); @@ -448,6 +520,7 @@ export function uiIssues(context) { issuesNone.classed('hide', hasIssues); if (!hasIssues) { renderIgnoredIssuesReset(issuesNone); + setNoIssuesText(); } if (!_pane.select('.disclosure-wrap-issues_rules').classed('hide')) {