From 2bf5eaf6e7233e3082477d31ca1f59e278da609c Mon Sep 17 00:00:00 2001 From: Max Grossman Date: Tue, 31 Jul 2018 14:22:34 -0400 Subject: [PATCH] initial plumbing for iD validation errors ref #remote-presets --- modules/core/context.js | 37 ++++++++++++-------- modules/core/history.js | 10 +++++- modules/ui/entity_editor.js | 1 - modules/util/index.js | 1 + modules/util/mapcss_rule.js | 1 + modules/validations/index.js | 2 +- modules/validations/mapcss_checks.js | 20 +++++++++++ modules/validations/validation_collection.js | 16 --------- 8 files changed, 55 insertions(+), 33 deletions(-) create mode 100644 modules/util/mapcss_rule.js create mode 100644 modules/validations/mapcss_checks.js delete mode 100644 modules/validations/validation_collection.js diff --git a/modules/core/context.js b/modules/core/context.js index 58ed89731..6c6d5ac81 100644 --- a/modules/core/context.js +++ b/modules/core/context.js @@ -7,9 +7,16 @@ import _isObject from 'lodash-es/isObject'; import _isString from 'lodash-es/isString'; import { dispatch as d3_dispatch } from 'd3-dispatch'; -import { json as d3_json } from 'd3-request'; + +import { + json as d3_json, + text as d3_text +} from 'd3-request'; + import { select as d3_select } from 'd3-selection'; +import mapcssParse from 'mapcss-parse/source/index'; + import { t, currentLocale, @@ -24,6 +31,7 @@ import { dataEn } from '../../data'; + import { geoRawMercator } from '../geo/raw_mercator'; import { modeSelect } from '../modes/select'; import { presetIndex } from '../presets'; @@ -40,13 +48,13 @@ import { utilDetect } from '../util/detect'; import { utilCallWhenIdle, - utilRebind, utilExternalPresets, - utilExternalValidationRules + utilExternalValidationRules, + utilMapCSSRule, + utilRebind, + utilStringQs } from '../util'; -import { validationCollection } from '../validations'; - export var areaKeys = {}; export function setAreaKeys(value) { @@ -448,6 +456,15 @@ export function coreContext() { locale = locale.split('-')[0]; } + if (utilExternalValidationRules()) { + var validationsUrl = utilStringQs(window.location.hash)['validations']; + d3_text(validationsUrl, function (err, mapcss) { + if (err) return; + var validations = _map(mapcssParse(mapcss), function(mapcssConfig) { return utilMapCSSRule(mapcsS) }); + context.validationRules = function() { return validations; }; + }); + } + history = coreHistory(context); context.graph = history.graph; context.changes = history.changes; @@ -497,20 +514,12 @@ export function coreContext() { background.init(); features.init(); - // get external data if directed by query parameters if (utilExternalPresets()) { presets.fromExternal(); } else { presets.init(); } - - if (utilExternalValidationRules()) { - var validations = validationCollection(); - validations.init(function(rules) { - context.validationRules = function() { return rules; }; - }); - } - + areaKeys = presets.areaKeys(); diff --git a/modules/core/history.js b/modules/core/history.js index 57e3a2260..e8d47a02d 100644 --- a/modules/core/history.js +++ b/modules/core/history.js @@ -282,7 +282,15 @@ export function coreHistory(context) { validate: function(changes) { return _flatten( - _map(Validations, function(fn) { return fn()(changes, _stack[_index].graph); }) + _map(Validations, function(fn) { + var warnings; + if (fn === Validations.validationMapCSSChecks) { + warnings = fn()(changes, _stack[_index].graph, context.validationRules()); + } else { + warnings = fn()(changes, _stack[_index].graph); + } + return warnings; + }) ); }, diff --git a/modules/ui/entity_editor.js b/modules/ui/entity_editor.js index 465892a28..2cf181067 100644 --- a/modules/ui/entity_editor.js +++ b/modules/ui/entity_editor.js @@ -42,7 +42,6 @@ export function uiEntityEditor(context) { var entity = context.entity(_entityID); var tags = _clone(entity.tags); - console.log(context.validationRules()); // Header var header = selection.selectAll('.header') .data([0]); diff --git a/modules/util/index.js b/modules/util/index.js index efd132175..fb05fe83c 100644 --- a/modules/util/index.js +++ b/modules/util/index.js @@ -15,6 +15,7 @@ export { utilGetAllNodes } from './util'; export { utilGetPrototypeOf } from './util'; export { utilGetSetValue } from './get_set_value'; export { utilIdleWorker} from './idle_worker'; +export { utilMapCSSRule } from './mapcss_rule'; export { utilNoAuto } from './util'; export { utilPrefixCSSProperty } from './util'; export { utilPrefixDOMProperty } from './util'; diff --git a/modules/util/mapcss_rule.js b/modules/util/mapcss_rule.js new file mode 100644 index 000000000..712c75474 --- /dev/null +++ b/modules/util/mapcss_rule.js @@ -0,0 +1 @@ +export function mapcssRule() {} \ No newline at end of file diff --git a/modules/validations/index.js b/modules/validations/index.js index 402bbffe0..112b38e6c 100644 --- a/modules/validations/index.js +++ b/modules/validations/index.js @@ -1,7 +1,7 @@ -export { validationCollection } from './validation_collection'; export { validationDeprecatedTag } from './deprecated_tag'; export { validationDisconnectedHighway } from './disconnected_highway'; export { validationManyDeletions } from './many_deletions'; +export { validationMapCSSChecks } from './mapcss_checks'; export { validationMissingTag } from './missing_tag'; export { validationOldMultipolygon } from './old_multipolygon'; export { validationTagSuggestsArea } from './tag_suggests_area'; diff --git a/modules/validations/mapcss_checks.js b/modules/validations/mapcss_checks.js new file mode 100644 index 000000000..21d57ba1d --- /dev/null +++ b/modules/validations/mapcss_checks.js @@ -0,0 +1,20 @@ +// import { t } from '../util/locale'; + +export function validationMapCSSChecks() { + var validation = function(changes, graph, rules) { + var warnings = []; + var createdModified = ['created', 'modified']; + for (var i = 0; i < createdModified.length; i++) { + var entities = changes[createdModified[i]]; + for (var j = 0; j < entities.length; j++) { + var entity = entities[i]; + for (var k = 0; k < rules.length; k++) { + var rule = rules[k]; + rules.findWarnings(entity, rules); + } + } + } + return warnings; + }; + return validation; +} diff --git a/modules/validations/validation_collection.js b/modules/validations/validation_collection.js deleted file mode 100644 index f7dadab31..000000000 --- a/modules/validations/validation_collection.js +++ /dev/null @@ -1,16 +0,0 @@ -import { utilStringQs } from '../util'; -import { text as d3_text } from 'd3-request'; -import mapcssParse from 'mapcss-parse/source/index'; - -export function validationCollection() { - var validations = {}; - validations.init = function (callback) { - var validationsUrl = utilStringQs(window.location.hash)['validations']; - d3_text(validationsUrl, function(err, mapcss) { - if (err) return; - callback(mapcssParse(mapcss)); - }); - }; - - return validations; -} \ No newline at end of file