don't change direction of red_turn when way is reversed

Fixes #10736
This commit is contained in:
burrscurr
2025-02-05 12:00:12 +01:00
parent f1d67e70e0
commit 841991055c
2 changed files with 24 additions and 0 deletions

View File

@@ -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)) {

View File

@@ -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');
});
});
});