From bd2490a965dba6445912d055b927382e4e213a03 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Mon, 29 Apr 2019 21:13:18 -0400 Subject: [PATCH] Reverse internal left/right/forward/backward keyparts (closes #6235) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously only trailing keyparts would reverse: `cycleway:left` ⟺ `cycleway:right` Now it can do internal keyparts too: `cycleway:left:surface` ⟺ `cycleway:right:surface` --- modules/actions/reverse.js | 6 +++++- test/spec/actions/reverse.js | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/actions/reverse.js b/modules/actions/reverse.js index fc0d6faa3..a560abbc0 100644 --- a/modules/actions/reverse.js +++ b/modules/actions/reverse.js @@ -25,7 +25,11 @@ export function actionReverse(wayID, options) { [/:right$/, ':left'], [/:left$/, ':right'], [/:forward$/, ':backward'], - [/:backward$/, ':forward'] + [/:backward$/, ':forward'], + [/:right:/, ':left:'], + [/:left:/, ':right:'], + [/:forward:/, ':backward:'], + [/:backward:/, ':forward:'] ]; var valueReplacements = { left: 'right', diff --git a/test/spec/actions/reverse.js b/test/spec/actions/reverse.js index df1fd5ea9..6ed6ca10c 100644 --- a/test/spec/actions/reverse.js +++ b/test/spec/actions/reverse.js @@ -103,6 +103,17 @@ describe('iD.actionReverse', function () { expect(graph.entity(way.id).tags).to.eql({'cycleway:right': 'lane'}); }); + it('transforms *:right:*=* ⟺ *:left:*=*', function () { + var way = iD.osmWay({tags: {'cycleway:right:surface': 'paved'}}); + var graph = iD.coreGraph([way]); + + graph = iD.actionReverse(way.id)(graph); + expect(graph.entity(way.id).tags).to.eql({'cycleway:left:surface': 'paved'}); + + graph = iD.actionReverse(way.id)(graph); + expect(graph.entity(way.id).tags).to.eql({'cycleway:right:surface': 'paved'}); + }); + it('transforms *:forward=* ⟺ *:backward=*', function () { var way = iD.osmWay({tags: {'maxspeed:forward': '25'}}); var graph = iD.coreGraph([way]);