mirror of
https://github.com/FoggedLens/iD.git
synced 2026-04-21 19:26:41 +02:00
Merge pull request #3165 from openstreetmap/3118-validations
refactor validations into ES6 modules for #3118
This commit is contained in:
@@ -43,11 +43,15 @@ $(BUILDJS_TARGETS): $(BUILDJS_SOURCES) build.js
|
||||
|
||||
|
||||
MODULE_TARGETS = \
|
||||
js/lib/id/actions.js
|
||||
js/lib/id/actions.js \
|
||||
js/lib/id/validations.js
|
||||
|
||||
js/lib/id/actions.js: modules/
|
||||
node_modules/.bin/rollup -f umd -n iD.actions modules/actions/index.js --no-strict > $@
|
||||
|
||||
js/lib/id/validations.js: modules/
|
||||
node_modules/.bin/rollup -f umd -n iD.validations modules/validations/index.js --no-strict > $@
|
||||
|
||||
dist/iD.js: \
|
||||
js/lib/bootstrap-tooltip.js \
|
||||
js/lib/d3.v3.js \
|
||||
@@ -226,11 +230,6 @@ dist/iD.js: \
|
||||
js/id/presets/collection.js \
|
||||
js/id/presets/field.js \
|
||||
js/id/presets/preset.js \
|
||||
js/id/validations.js \
|
||||
js/id/validations/deprecated_tag.js \
|
||||
js/id/validations/many_deletions.js \
|
||||
js/id/validations/missing_tag.js \
|
||||
js/id/validations/tag_suggests_area.js \
|
||||
js/id/end.js \
|
||||
js/lib/locale.js \
|
||||
data/introGraph.js
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
iD.validations = {};
|
||||
+16
-16
@@ -8,7 +8,7 @@
|
||||
return function(graph) {
|
||||
return graph.replace(way);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function AddMember(relationId, member, memberIndex) {
|
||||
return function(graph) {
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
return graph.replace(relation.addMember(member, memberIndex));
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function AddMidpoint(midpoint, node) {
|
||||
return function(graph) {
|
||||
@@ -62,20 +62,20 @@
|
||||
|
||||
return graph;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
|
||||
function AddVertex(wayId, nodeId, index) {
|
||||
return function(graph) {
|
||||
return graph.replace(graph.entity(wayId).addNode(nodeId, index));
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function ChangeMember(relationId, member, memberIndex) {
|
||||
return function(graph) {
|
||||
return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function ChangePreset(entityId, oldPreset, newPreset) {
|
||||
return function(graph) {
|
||||
@@ -88,14 +88,14 @@
|
||||
|
||||
return graph.replace(entity.update({tags: tags}));
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function ChangeTags(entityId, tags) {
|
||||
return function(graph) {
|
||||
var entity = graph.entity(entityId);
|
||||
return graph.replace(entity.update({tags: tags}));
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function Circularize(wayId, projection, maxAngle) {
|
||||
maxAngle = (maxAngle || 20) * Math.PI / 180;
|
||||
@@ -279,7 +279,7 @@
|
||||
};
|
||||
|
||||
return action;
|
||||
};
|
||||
}
|
||||
|
||||
function DeleteMultiple(ids) {
|
||||
var actions = {
|
||||
@@ -307,7 +307,7 @@
|
||||
};
|
||||
|
||||
return action;
|
||||
};
|
||||
}
|
||||
|
||||
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as
|
||||
function DeleteRelation(relationId) {
|
||||
@@ -398,7 +398,7 @@
|
||||
};
|
||||
|
||||
return action;
|
||||
};
|
||||
}
|
||||
|
||||
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as
|
||||
function DeleteNode(nodeId) {
|
||||
@@ -433,7 +433,7 @@
|
||||
};
|
||||
|
||||
return action;
|
||||
};
|
||||
}
|
||||
|
||||
// Connect the ways at the given nodes.
|
||||
//
|
||||
@@ -476,7 +476,7 @@
|
||||
|
||||
return graph;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function CopyEntities(ids, fromGraph) {
|
||||
var copies = {};
|
||||
@@ -498,7 +498,7 @@
|
||||
};
|
||||
|
||||
return action;
|
||||
};
|
||||
}
|
||||
|
||||
function DeleteMember(relationId, memberIndex) {
|
||||
return function(graph) {
|
||||
@@ -512,7 +512,7 @@
|
||||
|
||||
return graph;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function DeprecateTags(entityId) {
|
||||
return function(graph) {
|
||||
@@ -1168,7 +1168,7 @@
|
||||
};
|
||||
|
||||
return action;
|
||||
};
|
||||
}
|
||||
|
||||
// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
|
||||
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
|
||||
@@ -1448,7 +1448,7 @@
|
||||
};
|
||||
|
||||
return action;
|
||||
};
|
||||
}
|
||||
|
||||
// https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
|
||||
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||
(factory((global.iD = global.iD || {}, global.iD.validations = global.iD.validations || {})));
|
||||
}(this, function (exports) { 'use strict';
|
||||
|
||||
function DeprecatedTag() {
|
||||
|
||||
var validation = function(changes) {
|
||||
var warnings = [];
|
||||
for (var i = 0; i < changes.created.length; i++) {
|
||||
var change = changes.created[i],
|
||||
deprecatedTags = change.deprecatedTags();
|
||||
|
||||
if (!_.isEmpty(deprecatedTags)) {
|
||||
var tags = iD.util.tagText({ tags: deprecatedTags });
|
||||
warnings.push({
|
||||
id: 'deprecated_tags',
|
||||
message: t('validations.deprecated_tags', { tags: tags }),
|
||||
entity: change
|
||||
});
|
||||
}
|
||||
}
|
||||
return warnings;
|
||||
};
|
||||
|
||||
return validation;
|
||||
}
|
||||
|
||||
function ManyDeletions() {
|
||||
var threshold = 100;
|
||||
|
||||
var validation = function(changes) {
|
||||
var warnings = [];
|
||||
if (changes.deleted.length > threshold) {
|
||||
warnings.push({
|
||||
id: 'many_deletions',
|
||||
message: t('validations.many_deletions', { n: changes.deleted.length })
|
||||
});
|
||||
}
|
||||
return warnings;
|
||||
};
|
||||
|
||||
return validation;
|
||||
}
|
||||
|
||||
function MissingTag() {
|
||||
|
||||
// Slightly stricter check than Entity#isUsed (#3091)
|
||||
function hasTags(entity, graph) {
|
||||
return _.without(Object.keys(entity.tags), 'area', 'name').length > 0 ||
|
||||
graph.parentRelations(entity).length > 0;
|
||||
}
|
||||
|
||||
var validation = function(changes, graph) {
|
||||
var warnings = [];
|
||||
for (var i = 0; i < changes.created.length; i++) {
|
||||
var change = changes.created[i],
|
||||
geometry = change.geometry(graph);
|
||||
|
||||
if ((geometry === 'point' || geometry === 'line' || geometry === 'area') && !hasTags(change, graph)) {
|
||||
warnings.push({
|
||||
id: 'missing_tag',
|
||||
message: t('validations.untagged_' + geometry),
|
||||
tooltip: t('validations.untagged_' + geometry + '_tooltip'),
|
||||
entity: change
|
||||
});
|
||||
}
|
||||
}
|
||||
return warnings;
|
||||
};
|
||||
|
||||
return validation;
|
||||
}
|
||||
|
||||
function TagSuggestsArea() {
|
||||
|
||||
// https://github.com/openstreetmap/josm/blob/mirror/src/org/
|
||||
// openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80
|
||||
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) {
|
||||
return presence[i] + '=' + tags[presence[i]];
|
||||
}
|
||||
}
|
||||
|
||||
if (tags.building && tags.building === 'yes') return 'building=yes';
|
||||
}
|
||||
|
||||
var validation = function(changes, graph) {
|
||||
var warnings = [];
|
||||
for (var i = 0; i < changes.created.length; i++) {
|
||||
var change = changes.created[i],
|
||||
geometry = change.geometry(graph),
|
||||
suggestion = (geometry === 'line' ? tagSuggestsArea(change.tags) : undefined);
|
||||
|
||||
if (suggestion) {
|
||||
warnings.push({
|
||||
id: 'tag_suggests_area',
|
||||
message: t('validations.tag_suggests_area', { tag: suggestion }),
|
||||
entity: change
|
||||
});
|
||||
}
|
||||
}
|
||||
return warnings;
|
||||
};
|
||||
|
||||
return validation;
|
||||
}
|
||||
|
||||
exports.DeprecatedTag = DeprecatedTag;
|
||||
exports.ManyDeletions = ManyDeletions;
|
||||
exports.MissingTag = MissingTag;
|
||||
exports.TagSuggestsArea = TagSuggestsArea;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
}));
|
||||
@@ -1,4 +1,4 @@
|
||||
iD.validations.DeprecatedTag = function() {
|
||||
export function DeprecatedTag() {
|
||||
|
||||
var validation = function(changes) {
|
||||
var warnings = [];
|
||||
@@ -19,4 +19,4 @@ iD.validations.DeprecatedTag = function() {
|
||||
};
|
||||
|
||||
return validation;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
export { DeprecatedTag } from './deprecated_tag';
|
||||
export { ManyDeletions } from './many_deletions';
|
||||
export { MissingTag } from './missing_tag';
|
||||
export { TagSuggestsArea } from './tag_suggests_area';
|
||||
@@ -1,4 +1,4 @@
|
||||
iD.validations.ManyDeletions = function() {
|
||||
export function ManyDeletions() {
|
||||
var threshold = 100;
|
||||
|
||||
var validation = function(changes) {
|
||||
@@ -13,4 +13,4 @@ iD.validations.ManyDeletions = function() {
|
||||
};
|
||||
|
||||
return validation;
|
||||
};
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
iD.validations.MissingTag = function() {
|
||||
export function MissingTag() {
|
||||
|
||||
// Slightly stricter check than Entity#isUsed (#3091)
|
||||
function hasTags(entity, graph) {
|
||||
@@ -25,4 +25,4 @@ iD.validations.MissingTag = function() {
|
||||
};
|
||||
|
||||
return validation;
|
||||
};
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
iD.validations.TagSuggestsArea = function() {
|
||||
export function TagSuggestsArea() {
|
||||
|
||||
// https://github.com/openstreetmap/josm/blob/mirror/src/org/
|
||||
// openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80
|
||||
@@ -34,4 +34,4 @@ iD.validations.TagSuggestsArea = function() {
|
||||
};
|
||||
|
||||
return validation;
|
||||
};
|
||||
}
|
||||
+1
-6
@@ -42,6 +42,7 @@
|
||||
|
||||
<script src='../js/id/id.js'></script>
|
||||
<script src='../js/lib/id/actions.js'></script>
|
||||
<script src='../js/lib/id/validations.js'></script>
|
||||
|
||||
<script src='../js/id/util.js'></script>
|
||||
|
||||
@@ -193,12 +194,6 @@
|
||||
<script src='../js/id/util/session_mutex.js'></script>
|
||||
<script src='../js/id/util/suggest_names.js'></script>
|
||||
|
||||
<script src='../js/id/validations.js'></script>
|
||||
<script src='../js/id/validations/deprecated_tag.js'></script>
|
||||
<script src='../js/id/validations/many_deletions.js'></script>
|
||||
<script src='../js/id/validations/missing_tag.js'></script>
|
||||
<script src='../js/id/validations/tag_suggests_area.js'></script>
|
||||
|
||||
<script src='../js/lib/locale.js'></script>
|
||||
|
||||
<script src="spec/spec_helpers.js"></script>
|
||||
|
||||
Reference in New Issue
Block a user