mirror of
https://github.com/FoggedLens/iD.git
synced 2026-03-06 19:31:41 +00:00
Reverse cardinal directions for relation member roles
This commit is contained in:
committed by
John Firebaugh
parent
6c3a3190fd
commit
c43d915625
@@ -14,6 +14,8 @@
|
||||
|
||||
Relation members:
|
||||
role=forward ⟺ role=backward
|
||||
role=north ⟺ role=south
|
||||
role=east ⟺ role=west
|
||||
|
||||
In addition, numeric-valued `incline` tags are negated.
|
||||
|
||||
@@ -29,9 +31,18 @@
|
||||
*/
|
||||
iD.actions.Reverse = function(wayId) {
|
||||
var replacements = [
|
||||
[/:right$/, ':left'], [/:left$/, ':right'],
|
||||
[/:forward$/, ':backward'], [/:backward$/, ':forward']
|
||||
], numeric = /^([+\-]?)(?=[\d.])/;
|
||||
[/:right$/, ':left'], [/:left$/, ':right'],
|
||||
[/:forward$/, ':backward'], [/:backward$/, ':forward']
|
||||
],
|
||||
numeric = /^([+\-]?)(?=[\d.])/,
|
||||
roleReversals = {
|
||||
forward: 'backward',
|
||||
backward: 'forward',
|
||||
north: 'south',
|
||||
south: 'north',
|
||||
east: 'west',
|
||||
west: 'east'
|
||||
};
|
||||
|
||||
function reverseKey(key) {
|
||||
for (var i = 0; i < replacements.length; ++i) {
|
||||
@@ -64,7 +75,7 @@ iD.actions.Reverse = function(wayId) {
|
||||
|
||||
graph.parentRelations(way).forEach(function(relation) {
|
||||
relation.members.forEach(function(member, index) {
|
||||
if (member.id === way.id && (role = {forward: 'backward', backward: 'forward'}[member.role])) {
|
||||
if (member.id === way.id && (role = roleReversals[member.role])) {
|
||||
relation = relation.updateMember({role: role}, index);
|
||||
graph = graph.replace(relation);
|
||||
}
|
||||
|
||||
@@ -114,4 +114,28 @@ describe("iD.actions.Reverse", function () {
|
||||
graph = iD.actions.Reverse(way.id)(graph);
|
||||
expect(graph.entity(relation.id).members[0].role).to.eql('forward');
|
||||
});
|
||||
|
||||
it("transforms role=north ⟺ role=south in member relations", function () {
|
||||
var way = iD.Way({tags: {highway: 'residential'}}),
|
||||
relation = iD.Relation({members: [{type: 'way', id: way.id, role: 'north'}]}),
|
||||
graph = iD.Graph([way, relation]);
|
||||
|
||||
graph = iD.actions.Reverse(way.id)(graph);
|
||||
expect(graph.entity(relation.id).members[0].role).to.eql('south');
|
||||
|
||||
graph = iD.actions.Reverse(way.id)(graph);
|
||||
expect(graph.entity(relation.id).members[0].role).to.eql('north');
|
||||
});
|
||||
|
||||
it("transforms role=east ⟺ role=west in member relations", function () {
|
||||
var way = iD.Way({tags: {highway: 'residential'}}),
|
||||
relation = iD.Relation({members: [{type: 'way', id: way.id, role: 'east'}]}),
|
||||
graph = iD.Graph([way, relation]);
|
||||
|
||||
graph = iD.actions.Reverse(way.id)(graph);
|
||||
expect(graph.entity(relation.id).members[0].role).to.eql('west');
|
||||
|
||||
graph = iD.actions.Reverse(way.id)(graph);
|
||||
expect(graph.entity(relation.id).members[0].role).to.eql('east');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user