mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-26 15:33:50 +00:00
@@ -1,7 +1,7 @@
|
|||||||
import deepEqual from 'fast-deep-equal';
|
import deepEqual from 'fast-deep-equal';
|
||||||
|
|
||||||
import { geoVecEqual } from '../geo';
|
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) {
|
_diff.complete = function complete(extent) {
|
||||||
var result = {};
|
var result = {};
|
||||||
var id, change;
|
var id, change;
|
||||||
@@ -183,6 +185,7 @@ export function coreDifference(base, head) {
|
|||||||
var h = change.head;
|
var h = change.head;
|
||||||
var b = change.base;
|
var b = change.base;
|
||||||
var entity = h || b;
|
var entity = h || b;
|
||||||
|
var i;
|
||||||
|
|
||||||
if (extent &&
|
if (extent &&
|
||||||
(!h || !h.intersects(extent, head)) &&
|
(!h || !h.intersects(extent, head)) &&
|
||||||
@@ -194,7 +197,7 @@ export function coreDifference(base, head) {
|
|||||||
if (entity.type === 'way') {
|
if (entity.type === 'way') {
|
||||||
var nh = h ? h.nodes : [];
|
var nh = h ? h.nodes : [];
|
||||||
var nb = b ? b.nodes : [];
|
var nb = b ? b.nodes : [];
|
||||||
var diff, i;
|
var diff;
|
||||||
|
|
||||||
diff = utilArrayDifference(nh, nb);
|
diff = utilArrayDifference(nh, nb);
|
||||||
for (i = 0; i < diff.length; i++) {
|
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.parentWays(entity), result);
|
||||||
addParents(head.parentRelations(entity), result);
|
addParents(head.parentRelations(entity), result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -382,6 +382,22 @@ describe('iD.coreDifference', function () {
|
|||||||
expect(diff.complete().n2).to.equal(n2);
|
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 () {
|
it('includes parent ways of modified nodes', function () {
|
||||||
var n1 = iD.osmNode({id: 'n'});
|
var n1 = iD.osmNode({id: 'n'});
|
||||||
var n2 = n1.move([1, 2]);
|
var n2 = n1.move([1, 2]);
|
||||||
|
|||||||
Reference in New Issue
Block a user