mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 09:12:52 +00:00
@@ -1,7 +1,7 @@
|
||||
import deepEqual from 'fast-deep-equal';
|
||||
|
||||
import { geoVecEqual } from '../geo';
|
||||
import { utilArrayDifference } from '../util';
|
||||
import { utilArrayDifference, utilArrayUnion } from '../util';
|
||||
|
||||
|
||||
/*
|
||||
@@ -173,6 +173,8 @@ export function coreDifference(base, head) {
|
||||
};
|
||||
|
||||
|
||||
// returns complete set of entities that require a redraw
|
||||
// (optionally within given `extent`)
|
||||
_diff.complete = function complete(extent) {
|
||||
var result = {};
|
||||
var id, change;
|
||||
@@ -183,6 +185,7 @@ export function coreDifference(base, head) {
|
||||
var h = change.head;
|
||||
var b = change.base;
|
||||
var entity = h || b;
|
||||
var i;
|
||||
|
||||
if (extent &&
|
||||
(!h || !h.intersects(extent, head)) &&
|
||||
@@ -194,7 +197,7 @@ export function coreDifference(base, head) {
|
||||
if (entity.type === 'way') {
|
||||
var nh = h ? h.nodes : [];
|
||||
var nb = b ? b.nodes : [];
|
||||
var diff, i;
|
||||
var diff;
|
||||
|
||||
diff = utilArrayDifference(nh, nb);
|
||||
for (i = 0; i < diff.length; i++) {
|
||||
@@ -207,6 +210,15 @@ export function coreDifference(base, head) {
|
||||
}
|
||||
}
|
||||
|
||||
if (entity.type === 'relation' && entity.isMultipolygon()) {
|
||||
var mh = h ? h.members.map(function(m) { return m.id; }) : [];
|
||||
var mb = b ? b.members.map(function(m) { return m.id; }) : [];
|
||||
var ids = utilArrayUnion(mh, mb);
|
||||
for (i = 0; i < ids.length; i++) {
|
||||
result[ids[i]] = head.hasEntity(ids[i]);
|
||||
}
|
||||
}
|
||||
|
||||
addParents(head.parentWays(entity), result);
|
||||
addParents(head.parentRelations(entity), result);
|
||||
}
|
||||
|
||||
@@ -382,6 +382,22 @@ describe('iD.coreDifference', function () {
|
||||
expect(diff.complete().n2).to.equal(n2);
|
||||
});
|
||||
|
||||
it('includes multipolygon members', function () {
|
||||
var w1 = iD.osmWay({id: 'w1'});
|
||||
var w2 = iD.osmWay({id: 'w2'});
|
||||
var r1 = iD.osmRelation({
|
||||
id: 'r',
|
||||
tags: { type: 'multipolygon' },
|
||||
members: [{role: 'outer', id: 'w1', type: 'way'}, {role: '', id: 'w2', type: 'way'}]
|
||||
});
|
||||
var r2 = r1.updateMember({role: 'inner', id: 'w2', type: 'way'}, 1);
|
||||
var base = iD.coreGraph([w1, w2, r1]);
|
||||
var head = base.replace(r2);
|
||||
var diff = iD.coreDifference(base, head);
|
||||
|
||||
expect(diff.complete().w2).to.equal(w2);
|
||||
});
|
||||
|
||||
it('includes parent ways of modified nodes', function () {
|
||||
var n1 = iD.osmNode({id: 'n'});
|
||||
var n2 = n1.move([1, 2]);
|
||||
|
||||
Reference in New Issue
Block a user