mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-12 16:52:50 +00:00
@@ -22,6 +22,10 @@ export function actionReverse(entityID, options) {
|
||||
var numeric = /^([+\-]?)(?=[\d.])/;
|
||||
var directionKey = /direction$/;
|
||||
var turn_lanes = /^turn:lanes:?/;
|
||||
const keysToKeepUnchanged = [
|
||||
// https://github.com/openstreetmap/iD/issues/10736
|
||||
/^red_turn:(right|left)/
|
||||
];
|
||||
var keyReplacements = [
|
||||
[/:right$/, ':left'],
|
||||
[/:left$/, ':right'],
|
||||
@@ -82,6 +86,9 @@ export function actionReverse(entityID, options) {
|
||||
|
||||
|
||||
function reverseKey(key) {
|
||||
if (keysToKeepUnchanged.some(keyRegex => keyRegex.test(key))) {
|
||||
return key;
|
||||
}
|
||||
for (var i = 0; i < keyReplacements.length; ++i) {
|
||||
var replacement = keyReplacements[i];
|
||||
if (replacement[0].test(key)) {
|
||||
|
||||
@@ -646,5 +646,22 @@ describe('iD.actionReverse', function () {
|
||||
expect(target.tags.direction).to.eql('backward');
|
||||
expect(target.tags.side).to.eql('right');
|
||||
});
|
||||
|
||||
it('preserves the direction of a red turn at a traffic signal', function () {
|
||||
var node1 = iD.osmNode();
|
||||
var node2 = iD.osmNode({tags: {
|
||||
'highway': 'traffic_signals',
|
||||
'traffic_signals:direction': 'forward',
|
||||
'red_turn:right': 'no',
|
||||
'red_turn:right:bicycle': 'yes'
|
||||
}});
|
||||
var node3 = iD.osmNode();
|
||||
var way = iD.osmWay({nodes: [node1.id, node2.id, node3.id]});
|
||||
var graph = iD.actionReverse(way.id)(iD.coreGraph([node1, node2, node3, way]));
|
||||
var target = graph.entity(node2.id);
|
||||
expect(target.tags['traffic_signals:direction']).to.eql('backward');
|
||||
expect(target.tags['red_turn:right']).to.eql('no');
|
||||
expect(target.tags['red_turn:right:bicycle']).to.eql('yes');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user