]> git.openstreetmap.org Git - rails.git/commitdiff
Update to iD v1.4.0
authorJohn Firebaugh <john.firebaugh@gmail.com>
Thu, 29 May 2014 23:13:08 +0000 (16:13 -0700)
committerTom Hughes <tom@compton.nu>
Wed, 4 Jun 2014 09:48:14 +0000 (10:48 +0100)
47 files changed:
vendor/assets/iD/iD.css.erb
vendor/assets/iD/iD.js
vendor/assets/iD/iD/img/relation-presets.png
vendor/assets/iD/iD/img/sprite.svg
vendor/assets/iD/iD/locales/af.json
vendor/assets/iD/iD/locales/ar.json
vendor/assets/iD/iD/locales/ast.json
vendor/assets/iD/iD/locales/bg-BG.json
vendor/assets/iD/iD/locales/bs.json
vendor/assets/iD/iD/locales/ca.json
vendor/assets/iD/iD/locales/cs.json
vendor/assets/iD/iD/locales/da.json
vendor/assets/iD/iD/locales/de.json
vendor/assets/iD/iD/locales/el.json
vendor/assets/iD/iD/locales/en-GB.json
vendor/assets/iD/iD/locales/en.json
vendor/assets/iD/iD/locales/es.json
vendor/assets/iD/iD/locales/et.json
vendor/assets/iD/iD/locales/fa.json
vendor/assets/iD/iD/locales/fi.json
vendor/assets/iD/iD/locales/fr.json
vendor/assets/iD/iD/locales/gl.json
vendor/assets/iD/iD/locales/hr.json
vendor/assets/iD/iD/locales/hu.json
vendor/assets/iD/iD/locales/is.json
vendor/assets/iD/iD/locales/it.json
vendor/assets/iD/iD/locales/ja.json
vendor/assets/iD/iD/locales/ko.json
vendor/assets/iD/iD/locales/lt.json
vendor/assets/iD/iD/locales/nl.json
vendor/assets/iD/iD/locales/no.json
vendor/assets/iD/iD/locales/pl.json
vendor/assets/iD/iD/locales/pt-BR.json
vendor/assets/iD/iD/locales/pt.json
vendor/assets/iD/iD/locales/ru.json
vendor/assets/iD/iD/locales/sk.json
vendor/assets/iD/iD/locales/sl.json
vendor/assets/iD/iD/locales/sr.json
vendor/assets/iD/iD/locales/sv.json
vendor/assets/iD/iD/locales/ta.json
vendor/assets/iD/iD/locales/uk.json
vendor/assets/iD/iD/locales/vi.json
vendor/assets/iD/iD/locales/yue.json
vendor/assets/iD/iD/locales/zh-CN.json
vendor/assets/iD/iD/locales/zh-HK.json
vendor/assets/iD/iD/locales/zh-TW.json
vendor/assets/iD/iD/locales/zh.json

index 585276f1ea7253b80c8ec450719c443c87b1f91c..70b63377cd082a12cf57b4f01baf05ed4a7d5c0c 100644 (file)
@@ -1108,65 +1108,54 @@ text.point {
   font-size: 10px;
 }
 
+/* Turns */
+
+g.turn rect,
+g.turn circle {
+    fill: none;
+    pointer-events: all;
+}
+
+.form-field-restrictions .vertex {
+    pointer-events: none;
+    cursor: auto !important;
+}
+
 /* Cursors */
 
 #map {
     cursor: auto; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-grab.png") %>) 9 9, auto; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-grab.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-grab2x.png") %>) 2x
-        ) 9 9, auto;
 }
 
 .mode-browse .point,
 .mode-select .point {
     cursor: pointer; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-select-point.png") %>), pointer; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-select-point.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-select-point2x.png") %>) 2x
-        ), pointer;
 }
 
 .mode-select .vertex,
 .mode-browse .vertex {
     cursor: pointer; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-select-vertex.png") %>), pointer; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-select-vertex.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-select-vertex2x.png") %>) 2x
-        ), pointer;
 }
 
 .mode-browse .line,
 .mode-select .line {
     cursor: pointer; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-select-line.png") %>), pointer; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-select-line.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-select-line2x.png") %>) 2x
-        ), pointer;
 }
 
 .mode-select .area,
 .mode-browse .area {
     cursor: pointer; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-select-area.png") %>), pointer; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-select-area.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-select-area2x.png") %>) 2x
-        ), pointer;
 }
 
 .mode-select .midpoint,
 .mode-browse .midpoint {
     cursor: pointer; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-select-split.png") %>), pointer; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-select-split.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-select-split2x.png") %>) 2x
-        ), pointer;
 }
 
 .mode-select .behavior-multiselect .point,
@@ -1175,19 +1164,11 @@ text.point {
 .mode-select .behavior-multiselect .area {
     cursor: pointer; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-select-add.png") %>), pointer; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-select-add.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-select-add2x.png") %>) 2x
-        ), pointer;
 }
 
 .mode-select .behavior-multiselect .selected {
     cursor: pointer; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-select-remove.png") %>), pointer; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-select-remove.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-select-remove2x.png") %>) 2x
-        ), pointer;
 }
 
 #map .point:active,
@@ -1198,10 +1179,6 @@ text.point {
 #map .mode-select .selected {
     cursor: pointer; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-select-acting.png") %>), pointer; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-select-acting.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-select-acting2x.png") %>) 2x
-        ), pointer;
 }
 
 .mode-draw-line #map,
@@ -1211,10 +1188,6 @@ text.point {
 .mode-drag-node #map {
     cursor: crosshair; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-draw.png") %>) 9 9, crosshair; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-draw.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-draw2x.png") %>) 2x
-        ) 9 9, crosshair;
 }
 
 .mode-draw-line .way.hover,
@@ -1224,10 +1197,6 @@ text.point {
 .mode-drag-node .way.hover {
     cursor: crosshair; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-draw-connect-line.png") %>) 9 9, crosshair; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-draw-connect-line.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-draw-connect-line2x.png") %>) 2x
-        ) 9 9, crosshair;
 }
 
 .mode-draw-line .vertex.hover,
@@ -1237,10 +1206,6 @@ text.point {
 .mode-drag-node .vertex.hover {
     cursor: crosshair; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-draw-connect-vertex.png") %>) 9 9, crosshair; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-draw-connect-vertex.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-draw-connect-vertex2x.png") %>) 2x
-        ) 9 9, crosshair;
 }
 
 .mode-add-point #map,
@@ -1249,10 +1214,12 @@ text.point {
 .lasso .vertex {
     cursor: crosshair; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-draw.png") %>) 9 9, crosshair; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-draw.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-draw2x.png") %>) 2x
-        ) 9 9, crosshair;
+}
+
+.turn rect,
+.turn circle {
+    cursor: pointer; /* Opera */
+    cursor: url(<%= asset_path("iD/img/cursor-pointer.png") %>) 6 1, pointer; /* FF */
 }
 
 .lasso #map {
@@ -1336,6 +1303,13 @@ body {
     height: 100%;
 }
 
+#defs {
+    /* Can't be display: none or the clippaths are ignored. */
+    position: absolute;
+    width: 0;
+    height: 0;
+}
+
 .spacer {
     height: 40px;
     margin-right: 10px;
@@ -1379,10 +1353,6 @@ button,
 .radial-menu-item {
     cursor: pointer; /* Opera */
     cursor: url(<%= asset_path("iD/img/cursor-pointer.png") %>) 6 1, pointer; /* FF */
-    cursor: -webkit-image-set(
-        url(<%= asset_path("iD/img/cursor-pointer.png") %>) 1x,
-        url(<%= asset_path("iD/img/cursor-pointer2x.png") %>) 2x
-        ) 6 1, pointer;
 }
 
 h2 {
@@ -2824,6 +2794,31 @@ input[type=number] {
     border-bottom: 0;
     border-radius: 0 0 4px 0;
 }
+
+/* Restrictions editor */
+
+.form-field-restrictions .preset-input-wrap {
+    position: relative;
+    height: 300px;
+}
+
+.form-field-restrictions svg {
+    width: 100%;
+    height: 100%;
+}
+
+.form-field-restrictions .restriction-help {
+    z-index: 1;
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    padding: 2px 6px;
+    background-color: rgba(255, 255, 255, .8);
+    color: #999;
+    text-align: center;
+}
+
 /* combobox dropdown */
 
 div.combobox {
@@ -4046,10 +4041,6 @@ img.wiki-image {
     fill: rgba(255,255,255,.5);
 }
 
-.radial-menu .icon {
-    pointer-events: none;
-}
-
 .lasso-box {
     fill-opacity:0.1;
     stroke: #fff;
@@ -4368,3 +4359,10 @@ img.wiki-image {
 .preset-icon-relation.feature-route-power{background-position:-800px -25px;}
 .preset-icon-relation.feature-route-pipeline{background-position:-860px -25px;}
 .preset-icon-relation.feature-route-master{background-position:-920px -25px;}
+.preset-icon-relation.feature-restriction-no-straight-on{background-position:-980px -25px;}
+.preset-icon-relation.feature-restriction-no-u-turn{background-position:-1040px -25px;}
+.preset-icon-relation.feature-restriction-no-left-turn{background-position:-1100px -25px;}
+.preset-icon-relation.feature-restriction-no-right-turn{background-position:-1160px -25px;}
+.preset-icon-relation.feature-restriction-only-straight-on{background-position:-1220px -25px;}
+.preset-icon-relation.feature-restriction-only-left-turn{background-position:-1280px -25px;}
+.preset-icon-relation.feature-restriction-only-right-turn{background-position:-1340px -25px;}
index e71d245835b0625f19eade0aaf4aaf9c7db91698..2ecfaf5255d49a26f4206910d7b50f3f84eeea81 100644 (file)
@@ -7050,7 +7050,7 @@ var JXON = new (function () {
 /**
  * @license
  * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>
- * Build: `lodash include="any,assign,bind,clone,compact,contains,debounce,difference,each,every,extend,filter,find,first,forEach,groupBy,indexOf,intersection,isEmpty,isEqual,isFunction,keys,last,map,omit,pairs,pluck,reject,some,throttle,union,uniq,unique,values,without,flatten,value,chain,cloneDeep,merge" exports="global,node"`
+ * Build: `lodash --debug --output js/lib/lodash.js include="any,assign,bind,clone,compact,contains,debounce,difference,each,every,extend,filter,find,first,forEach,groupBy,indexOf,intersection,isEmpty,isEqual,isFunction,keys,last,map,omit,pairs,pluck,reject,some,throttle,union,uniq,unique,values,without,flatten,value,chain,cloneDeep,merge,pick" exports="global,node"`
  * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
  * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
  * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
@@ -9353,6 +9353,57 @@ var JXON = new (function () {
     return result;
   }
 
+  /**
+   * Creates a shallow clone of `object` composed of the specified properties.
+   * Property names may be specified as individual arguments or as arrays of
+   * property names. If a callback is provided it will be executed for each
+   * property of `object` picking the properties the callback returns truey
+   * for. The callback is bound to `thisArg` and invoked with three arguments;
+   * (value, key, object).
+   *
+   * @static
+   * @memberOf _
+   * @category Objects
+   * @param {Object} object The source object.
+   * @param {Function|...string|string[]} [callback] The function called per
+   *  iteration or property names to pick, specified as individual property
+   *  names or arrays of property names.
+   * @param {*} [thisArg] The `this` binding of `callback`.
+   * @returns {Object} Returns an object composed of the picked properties.
+   * @example
+   *
+   * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
+   * // => { 'name': 'fred' }
+   *
+   * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
+   *   return key.charAt(0) != '_';
+   * });
+   * // => { 'name': 'fred' }
+   */
+  function pick(object, callback, thisArg) {
+    var result = {};
+    if (typeof callback != 'function') {
+      var index = -1,
+          props = baseFlatten(arguments, true, false, 1),
+          length = isObject(object) ? props.length : 0;
+
+      while (++index < length) {
+        var key = props[index];
+        if (key in object) {
+          result[key] = object[key];
+        }
+      }
+    } else {
+      callback = lodash.createCallback(callback, thisArg, 3);
+      forIn(object, function(value, key, object) {
+        if (callback(value, key, object)) {
+          result[key] = value;
+        }
+      });
+    }
+    return result;
+  }
+
   /**
    * Creates an array composed of the own enumerable property values of `object`.
    *
@@ -10879,6 +10930,7 @@ var JXON = new (function () {
   lodash.merge = merge;
   lodash.omit = omit;
   lodash.pairs = pairs;
+  lodash.pick = pick;
   lodash.pluck = pluck;
   lodash.reject = reject;
   lodash.throttle = throttle;
@@ -16158,52 +16210,7 @@ window.iD = function () {
     };
 
     /* Projection */
-    function rawMercator() {
-        var project = d3.geo.mercator.raw,
-            k = 512 / Math.PI, // scale
-            x = 0, y = 0, // translate
-            clipExtent = [[0, 0], [0, 0]];
-
-        function projection(point) {
-            point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
-            return [point[0] * k + x, y - point[1] * k];
-        }
-
-        projection.invert = function(point) {
-            point = project.invert((point[0] - x) / k, (y - point[1]) / k);
-            return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
-        };
-
-        projection.scale = function(_) {
-            if (!arguments.length) return k;
-            k = +_;
-            return projection;
-        };
-
-        projection.translate = function(_) {
-            if (!arguments.length) return [x, y];
-            x = +_[0];
-            y = +_[1];
-            return projection;
-        };
-
-        projection.clipExtent = function(_) {
-            if (!arguments.length) return clipExtent;
-            clipExtent = _;
-            return projection;
-        };
-
-        projection.stream = d3.geo.transform({
-            point: function(x, y) {
-                x = projection([x, y]);
-                this.stream.point(x[0], x[1]);
-            }
-        }).stream;
-
-        return projection;
-    }
-
-    context.projection = rawMercator();
+    context.projection = iD.geo.RawMercator();
 
     /* Background */
     var background = iD.Background(context);
@@ -16271,7 +16278,7 @@ window.iD = function () {
     return d3.rebind(context, dispatch, 'on');
 };
 
-iD.version = '1.3.10';
+iD.version = '1.4.0';
 
 (function() {
     var detected = {};
@@ -16766,6 +16773,14 @@ iD.geo.edgeEqual = function(a, b) {
         (a[0] === b[1] && a[1] === b[0]);
 };
 
+// Return the counterclockwise angle in the range (-pi, pi)
+// between the positive X axis and the line intersecting a and b.
+iD.geo.angle = function(a, b, projection) {
+    a = projection(a.loc);
+    b = projection(b.loc);
+    return Math.atan2(b[1] - a[1], b[0] - a[0]);
+};
+
 // Choose the edge with the minimal distance from `point` to its orthogonal
 // projection onto that edge, if such a projection exists, or the distance to
 // the closest vertex on that edge. Returns an object with the `index` of the
@@ -16931,6 +16946,146 @@ _.extend(iD.geo.Extent.prototype, {
         return [this[0][0], this[0][1], this[1][0], this[1][1]].join(',');
     }
 });
+iD.geo.Turn = function(turn) {
+    if (!(this instanceof iD.geo.Turn))
+        return new iD.geo.Turn(turn);
+    _.extend(this, turn);
+};
+
+iD.geo.Intersection = function(graph, vertexId) {
+    var vertex = graph.entity(vertexId),
+        highways = [];
+
+    // Pre-split ways that would need to be split in
+    // order to add a restriction. The real split will
+    // happen when the restriction is added.
+    graph.parentWays(vertex).forEach(function(way) {
+        if (!way.tags.highway || way.isArea() || way.isDegenerate())
+            return;
+
+        if (way.affix(vertexId)) {
+            highways.push(way);
+        } else {
+            var idx = _.indexOf(way.nodes, vertex.id, 1),
+                wayA = iD.Way({id: way.id + '-a', tags: way.tags, nodes: way.nodes.slice(0, idx + 1)}),
+                wayB = iD.Way({id: way.id + '-b', tags: way.tags, nodes: way.nodes.slice(idx)});
+
+            graph = graph.replace(wayA);
+            graph = graph.replace(wayB);
+
+            highways.push(wayA);
+            highways.push(wayB);
+        }
+    });
+
+    var intersection = {
+        highways: highways,
+        graph: graph
+    };
+
+    intersection.turns = function(fromNodeID) {
+        if (!fromNodeID)
+            return [];
+
+        var way = _.find(highways, function(way) { return way.contains(fromNodeID); });
+        if (way.first() === vertex.id && way.tags.oneway === 'yes')
+            return [];
+        if (way.last() === vertex.id && way.tags.oneway === '-1')
+            return [];
+
+        function withRestriction(turn) {
+            graph.parentRelations(graph.entity(turn.from.way)).forEach(function(relation) {
+                if (relation.tags.type !== 'restriction')
+                    return;
+
+                var f = relation.memberByRole('from'),
+                    t = relation.memberByRole('to'),
+                    v = relation.memberByRole('via');
+
+                if (f && f.id === turn.from.way &&
+                    v && v.id === turn.via.node &&
+                    t && t.id === turn.to.way) {
+                    turn.restriction = relation.id;
+                } else if (/^only_/.test(relation.tags.restriction) &&
+                    f && f.id === turn.from.way &&
+                    v && v.id === turn.via.node &&
+                    t && t.id !== turn.to.way) {
+                    turn.restriction = relation.id;
+                    turn.indirect_restriction = true;
+                }
+            });
+
+            return iD.geo.Turn(turn);
+        }
+
+        var from = {
+                node: way.nodes[way.first() === vertex.id ? 1 : way.nodes.length - 2],
+                way: way.id.split(/-(a|b)/)[0]
+            },
+            via = {node: vertex.id},
+            turns = [];
+
+        highways.forEach(function(parent) {
+            if (parent === way)
+                return;
+
+            var index = parent.nodes.indexOf(vertex.id);
+
+            // backward
+            if (parent.first() !== vertex.id && parent.tags.oneway !== 'yes') {
+                turns.push(withRestriction({
+                    from: from,
+                    via: via,
+                    to: {node: parent.nodes[index - 1], way: parent.id.split(/-(a|b)/)[0]}
+                }));
+            }
+
+            // forward
+            if (parent.last() !== vertex.id && parent.tags.oneway !== '-1') {
+                turns.push(withRestriction({
+                    from: from,
+                    via: via,
+                    to: {node: parent.nodes[index + 1], way: parent.id.split(/-(a|b)/)[0]}
+                }));
+            }
+        });
+
+        // U-turn
+        if (way.tags.oneway !== 'yes' && way.tags.oneway !== '-1') {
+            turns.push(withRestriction({
+                from: from,
+                via: via,
+                to: from,
+                u: true
+            }));
+        }
+
+        return turns;
+    };
+
+    return intersection;
+};
+
+iD.geo.inferRestriction = function(from, via, to, projection) {
+    var angle = iD.geo.angle(via, from, projection) -
+                iD.geo.angle(via, to, projection);
+
+    angle = angle * 180 / Math.PI;
+
+    while (angle < 0)
+        angle += 360;
+
+    if (angle < 23)
+        return 'no_u_turn';
+    if (angle < 158)
+        return 'no_right_turn';
+    if (angle < 202)
+        return 'no_straight_on';
+    if (angle < 336)
+        return 'no_left_turn';
+
+    return 'no_u_turn';
+};
 // For fixing up rendering of multipolygons with tags on the outer member.
 // https://github.com/openstreetmap/iD/issues/613
 iD.geo.isSimpleMultipolygonOuterMember = function(entity, graph) {
@@ -17066,67 +17221,55 @@ iD.geo.joinWays = function(array, graph) {
 
     return joined;
 };
-iD.geo.turns = function(graph, entityID) {
-    var way = graph.entity(entityID);
-    if (way.type !== 'way' || !way.tags.highway || way.isArea())
-        return [];
-
-    function withRestriction(turn) {
-        graph.parentRelations(turn.from).forEach(function(relation) {
-            if (relation.tags.type !== 'restriction')
-                return;
-
-            var f = relation.memberByRole('from'),
-                t = relation.memberByRole('to'),
-                v = relation.memberByRole('via');
-
-            if (f && f.id === turn.from.id &&
-                t && t.id === turn.to.id &&
-                v && v.id === turn.via.id) {
-                turn.restriction = relation;
-            }
-        });
+/*
+    Bypasses features of D3's default projection stream pipeline that are unnecessary:
+    * Antimeridian clipping
+    * Spherical rotation
+    * Resampling
+*/
+iD.geo.RawMercator = function () {
+    var project = d3.geo.mercator.raw,
+        k = 512 / Math.PI, // scale
+        x = 0, y = 0, // translate
+        clipExtent = [[0, 0], [0, 0]];
 
-        return turn;
+    function projection(point) {
+        point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
+        return [point[0] * k + x, y - point[1] * k];
     }
 
-    var turns = [];
+    projection.invert = function(point) {
+        point = project.invert((point[0] - x) / k, (y - point[1]) / k);
+        return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
+    };
 
-    [way.first(), way.last()].forEach(function(nodeID) {
-        var node = graph.entity(nodeID);
-        graph.parentWays(node).forEach(function(parent) {
-            if (parent === way || parent.isDegenerate() || !parent.tags.highway)
-                return;
-            if (way.first() === node.id && way.tags.oneway === 'yes')
-                return;
-            if (way.last() === node.id && way.tags.oneway === '-1')
-                return;
+    projection.scale = function(_) {
+        if (!arguments.length) return k;
+        k = +_;
+        return projection;
+    };
 
-            var index = parent.nodes.indexOf(node.id);
+    projection.translate = function(_) {
+        if (!arguments.length) return [x, y];
+        x = +_[0];
+        y = +_[1];
+        return projection;
+    };
 
-            // backward
-            if (parent.first() !== node.id && parent.tags.oneway !== 'yes') {
-                turns.push(withRestriction({
-                    from: way,
-                    to: parent,
-                    via: node,
-                    toward: graph.entity(parent.nodes[index - 1])
-                }));
-            }
+    projection.clipExtent = function(_) {
+        if (!arguments.length) return clipExtent;
+        clipExtent = _;
+        return projection;
+    };
 
-            // forward
-            if (parent.last() !== node.id && parent.tags.oneway !== '-1') {
-                turns.push(withRestriction({
-                    from: way,
-                    to: parent,
-                    via: node,
-                    toward: graph.entity(parent.nodes[index + 1])
-                }));
-            }
-       });
-    });
+    projection.stream = d3.geo.transform({
+        point: function(x, y) {
+            x = projection([x, y]);
+            this.stream.point(x[0], x[1]);
+        }
+    }).stream;
 
-    return turns;
+    return projection;
 };
 iD.actions = {};
 iD.actions.AddEntity = function(way) {
@@ -18172,6 +18315,95 @@ iD.actions.Orthogonalize = function(wayId, projection) {
 
     return action;
 };
+// Create a restriction relation for `turn`, which must have the following structure:
+//
+//     {
+//         from: { node: <node ID>, way: <way ID> },
+//         via:  { node: <node ID> },
+//         to:   { node: <node ID>, way: <way ID> },
+//         restriction: <'no_right_turn', 'no_left_turn', etc.>
+//     }
+//
+// This specifies a restriction of type `restriction` when traveling from
+// `from.node` in `from.way` toward `to.node` in `to.way` via `via.node`.
+// (The action does not check that these entities form a valid intersection.)
+//
+// If `restriction` is not provided, it is automatically determined by the
+// angle of the turn:
+//
+//    0-23  degrees: no_u_turn
+//   23-158 degrees: no_right_turn
+//  158-202 degrees: no_straight_on
+//  202-326 degrees: no_left_turn
+//  336-360 degrees: no_u_turn
+//
+// If necessary, the `from` and `to` ways are split. In these cases, `from.node`
+// and `to.node` are used to determine which portion of the split ways become
+// members of the restriction.
+//
+// For testing convenience, accepts an ID to assign to the new relation.
+// Normally, this will be undefined and the relation will automatically
+// be assigned a new ID.
+//
+iD.actions.RestrictTurn = function(turn, projection, restrictionId) {
+    return function(graph) {
+        var from = graph.entity(turn.from.way),
+            via  = graph.entity(turn.via.node),
+            to   = graph.entity(turn.to.way);
+
+        function split(toOrFrom) {
+            var newID = toOrFrom.newID || iD.Way().id;
+            graph = iD.actions.Split(via.id, [newID])
+                .limitWays([toOrFrom.way])(graph);
+
+            var a = graph.entity(newID),
+                b = graph.entity(toOrFrom.way);
+
+            if (a.nodes.indexOf(toOrFrom.node) !== -1) {
+                return [a, b];
+            } else {
+                return [b, a];
+            }
+        }
+
+        if (!from.affix(via.id)) {
+            if (turn.from.node === turn.to.node) {
+                // U-turn
+                from = to = split(turn.from)[0];
+            } else if (turn.from.way === turn.to.way) {
+                // Straight-on
+                var s = split(turn.from);
+                from = s[0];
+                to   = s[1];
+            } else {
+                // Other
+                from = split(turn.from)[0];
+            }
+        }
+
+        if (!to.affix(via.id)) {
+            to = split(turn.to)[0];
+        }
+
+        return graph.replace(iD.Relation({
+            id: restrictionId,
+            tags: {
+                type: 'restriction',
+                restriction: turn.restriction ||
+                    iD.geo.inferRestriction(
+                        graph.entity(turn.from.node),
+                        via,
+                        graph.entity(turn.to.node),
+                        projection)
+            },
+            members: [
+                {id: from.id, type: 'way',  role: 'from'},
+                {id: via.id,  type: 'node', role: 'via'},
+                {id: to.id,   type: 'way',  role: 'to'}
+            ]
+        }));
+    };
+};
 /*
   Order the nodes of a way in reverse order and reverse any direction dependent tags
   other than `oneway`. (We assume that correcting a backwards oneway is the primary
@@ -18546,6 +18778,29 @@ iD.actions.Straighten = function(wayId, projection) {
 
     return action;
 };
+// Remove the effects of `turn.restriction` on `turn`, which must have the
+// following structure:
+//
+//     {
+//         from: { node: <node ID>, way: <way ID> },
+//         via:  { node: <node ID> },
+//         to:   { node: <node ID>, way: <way ID> },
+//         restriction: <relation ID>
+//     }
+//
+// In the simple case, `restriction` is a reference to a `no_*` restriction
+// on the turn itself. In this case, it is simply deleted.
+//
+// The more complex case is where `restriction` references an `only_*`
+// restriction on a different turn in the same intersection. In that case,
+// that restriction is also deleted, but at the same time restrictions on
+// the turns other than the first two are created.
+//
+iD.actions.UnrestrictTurn = function(turn) {
+    return function(graph) {
+        return iD.actions.DeleteRelation(turn.restriction)(graph);
+    };
+};
 iD.behavior = {};
 iD.behavior.AddWay = function(context) {
     var event = d3.dispatch('start', 'startFromWay', 'startFromNode'),
@@ -19349,8 +19604,6 @@ iD.behavior.Lasso = function(context) {
                     .on('mouseup.lasso', mouseup);
 
                 d3.event.stopPropagation();
-                d3.event.preventDefault();
-
             }
         }
 
@@ -20692,15 +20945,15 @@ iD.operations.Delete = function(selectedIDs, context) {
             }
         }
 
-        context.perform(
-            action,
-            annotation);
-
         if (nextSelectedID && context.hasEntity(nextSelectedID)) {
             context.enter(iD.modes.Select(context, [nextSelectedID]));
         } else {
             context.enter(iD.modes.Browse(context));
         }
+
+        context.perform(
+            action,
+            annotation);
     };
 
     operation.available = function() {
@@ -21339,7 +21592,7 @@ iD.areaKeys = {
 
     connection.changesetTags = function(comment, imageryUsed) {
         var tags = {
-            imagery_used: imageryUsed.join(';'),
+            imagery_used: imageryUsed.join(';').substr(0, 255),
             created_by: 'iD ' + iD.version
         };
 
@@ -21821,6 +22074,10 @@ iD.Entity.prototype = {
         });
     },
 
+    isHighwayIntersection: function() {
+        return false;
+    },
+
     deprecatedTags: function() {
         var tags = _.pairs(this.tags);
         var deprecated = {};
@@ -22469,6 +22726,14 @@ _.extend(iD.Node.prototype, {
         });
     },
 
+    isHighwayIntersection: function(resolver) {
+        return resolver.transient(this, 'isHighwayIntersection', function() {
+            return resolver.parentWays(this).filter(function(parent) {
+                return parent.tags.highway && parent.geometry(resolver) === 'line';
+            }).length > 1;
+        });
+    },
+
     asJXON: function(changeset_id) {
         var r = {
             node: {
@@ -22492,6 +22757,38 @@ _.extend(iD.Node.prototype, {
         };
     }
 });
+iD.oneWayTags = {
+    'aerialway': {
+        'chair_lift': true,
+        'mixed_lift': true,
+        't-bar': true,
+        'j-bar': true,
+        'platter': true,
+        'rope_tow': true,
+        'magic_carpet': true,
+        'yes': true
+    },
+    'highway': {
+        'motorway': true,
+        'motorway_link': true
+    },
+    'junction': {
+        'roundabout': true
+    },
+    'man_made': {
+        'piste:halfpipe': true,
+        'pipeline': true
+    },
+    'piste:type': {
+        'downhill': true,
+        'sled': true,
+        'yes': true
+    },
+    'waterway': {
+        'river': true,
+        'stream': true
+    }
+};
 iD.Relation = iD.Entity.relation = function iD_Relation() {
     if (!(this instanceof iD_Relation)) {
         return (new iD_Relation()).initialize(arguments);
@@ -22886,11 +23183,11 @@ _.extend(iD.Way.prototype, {
         if (['no', '0'].indexOf(this.tags.oneway) !== -1) { return false; }
 
         // implied oneway tag..
-        return this.tags.waterway === 'river' ||
-            this.tags.waterway === 'stream' ||
-            this.tags.highway === 'motorway' ||
-            this.tags.highway === 'motorway_link' ||
-            this.tags.junction === 'roundabout';
+        for (var key in this.tags) {
+            if (key in iD.oneWayTags && (this.tags[key] in iD.oneWayTags[key]))
+                return true;
+        }
+        return false;
     },
 
     isClosed: function() {
@@ -23641,30 +23938,7 @@ iD.Map = function(context) {
         if (difference) {
             var complete = difference.complete(map.extent());
             all = _.compact(_.values(complete));
-            filter = function(d) {
-                if (d.type === 'midpoint') {
-
-                    var a = d.edge[0],
-                        b = d.edge[1];
-
-                    // redraw a midpoint if it needs to be
-                    // - moved (either edge node moved)
-                    // - deleted (edge nodes not consecutive in any parent way)
-                    if (a in complete || b in complete) return true;
-
-                    var parentsWays = graph.parentWays({ id: a });
-                    for (var i = 0; i < parentsWays.length; i++) {
-                        var nodes = parentsWays[i].nodes;
-                        for (var n = 0; n < nodes.length; n++) {
-                            if (nodes[n] === a && (nodes[n - 1] === b || nodes[n + 1] === b)) return false;
-                        }
-                    }
-                    return true;
-
-                } else {
-                    return d.id in complete;
-                }
-            };
+            filter = function(d) { return d.id in complete; };
 
         } else if (extent) {
             all = context.intersects(map.extent().intersection(extent));
@@ -24337,6 +24611,135 @@ iD.svg.Areas = function(projection) {
             .attr('d', path);
     };
 };
+/*
+    A standalone SVG element that contains only a `defs` sub-element. To be
+    used once globally, since defs IDs must be unique within a document.
+*/
+iD.svg.Defs = function(context) {
+    function autosize(image) {
+        var img = document.createElement('img');
+        img.src = image.attr('xlink:href');
+        img.onload = function() {
+            image.attr({
+                width: img.width,
+                height: img.height
+            });
+        };
+    }
+
+    function SpriteDefinition(id, href, data) {
+        return function(defs) {
+            defs.append('image')
+                .attr('id', id)
+                .attr('xlink:href', href)
+                .call(autosize);
+
+            defs.selectAll()
+                .data(data)
+                .enter().append('use')
+                .attr('id', function(d) { return d.key; })
+                .attr('transform', function(d) { return 'translate(-' + d.value[0] + ',-' + d.value[1] + ')'; })
+                .attr('xlink:href', '#' + id);
+        };
+    }
+
+    return function (selection) {
+        var defs = selection.append('defs');
+
+        defs.append('marker')
+            .attr({
+                id: 'oneway-marker',
+                viewBox: '0 0 10 10',
+                refY: 2.5,
+                refX: 5,
+                markerWidth: 2,
+                markerHeight: 2,
+                orient: 'auto'
+            })
+            .append('path')
+            .attr('d', 'M 5 3 L 0 3 L 0 2 L 5 2 L 5 0 L 10 2.5 L 5 5 z');
+
+        var patterns = defs.selectAll('pattern')
+            .data([
+                // pattern name, pattern image name
+                ['wetland', 'wetland'],
+                ['construction', 'construction'],
+                ['cemetery', 'cemetery'],
+                ['orchard', 'orchard'],
+                ['farmland', 'farmland'],
+                ['beach', 'dots'],
+                ['scrub', 'dots'],
+                ['meadow', 'dots']
+            ])
+            .enter()
+            .append('pattern')
+            .attr({
+                id: function (d) {
+                    return 'pattern-' + d[0];
+                },
+                width: 32,
+                height: 32,
+                patternUnits: 'userSpaceOnUse'
+            });
+
+        patterns.append('rect')
+            .attr({
+                x: 0,
+                y: 0,
+                width: 32,
+                height: 32,
+                'class': function (d) {
+                    return 'pattern-color-' + d[0];
+                }
+            });
+
+        patterns.append('image')
+            .attr({
+                x: 0,
+                y: 0,
+                width: 32,
+                height: 32
+            })
+            .attr('xlink:href', function (d) {
+                return context.imagePath('pattern/' + d[1] + '.png');
+            });
+
+        defs.selectAll()
+            .data([12, 18, 20, 32, 45])
+            .enter().append('clipPath')
+            .attr('id', function (d) {
+                return 'clip-square-' + d;
+            })
+            .append('rect')
+            .attr('x', 0)
+            .attr('y', 0)
+            .attr('width', function (d) {
+                return d;
+            })
+            .attr('height', function (d) {
+                return d;
+            });
+
+        var maki = [];
+        _.forEach(iD.data.featureIcons, function (dimensions, name) {
+            if (dimensions['12'] && dimensions['18'] && dimensions['24']) {
+                maki.push({key: 'maki-' + name + '-12', value: dimensions['12']});
+                maki.push({key: 'maki-' + name + '-18', value: dimensions['18']});
+                maki.push({key: 'maki-' + name + '-24', value: dimensions['24']});
+            }
+        });
+
+        defs.call(SpriteDefinition(
+            'sprite',
+            context.imagePath('sprite.svg'),
+            d3.entries(iD.data.operations)));
+
+        defs.call(SpriteDefinition(
+            'maki-sprite',
+            context.imagePath('maki-sprite.png'),
+            maki));
+    };
+};
 iD.svg.Labels = function(projection, context) {
     var path = d3.geo.path().projection(projection);
 
@@ -24891,39 +25294,50 @@ iD.svg.Midpoints = function(projection, context) {
         for (var i = 0; i < entities.length; i++) {
             var entity = entities[i];
 
-            if (entity.type !== 'way') continue;
-            if (context.selectedIDs().indexOf(entity.id) < 0) continue;
+            if (entity.type !== 'way')
+                continue;
+            if (!filter(entity))
+                continue;
+            if (context.selectedIDs().indexOf(entity.id) < 0)
+                continue;
 
             var nodes = graph.childNodes(entity);
-
-            // skip the last node because it is always repeated
             for (var j = 0; j < nodes.length - 1; j++) {
 
                 var a = nodes[j],
                     b = nodes[j + 1],
                     id = [a.id, b.id].sort().join('-');
 
-                // Redraw midpoints in two cases:
-                //   1. One of the two endpoint nodes changed (e.g. was moved).
-                //   2. A node was deleted. The midpoint between the two new
-                //      endpoints needs to be redrawn. In this case only the
-                //      way will be in the diff.
-                if (!midpoints[id] && (filter(a) || filter(b) || filter(entity))) {
+                if (midpoints[id]) {
+                    midpoints[id].parents.push(entity);
+                } else {
                     var loc = iD.geo.interp(a.loc, b.loc, 0.5);
                     if (extent.intersects(loc) && iD.geo.euclideanDistance(projection(a.loc), projection(b.loc)) > 40) {
                         midpoints[id] = {
                             type: 'midpoint',
                             id: id,
                             loc: loc,
-                            edge: [a.id, b.id]
+                            edge: [a.id, b.id],
+                            parents: [entity]
                         };
                     }
                 }
             }
         }
 
+        function midpointFilter(d) {
+            if (midpoints[d.id])
+                return true;
+
+            for (var i = 0; i < d.parents.length; i++)
+                if (filter(d.parents[i]))
+                    return true;
+
+            return false;
+        }
+
         var groups = surface.select('.layer-hit').selectAll('g.midpoint')
-            .filter(filter)
+            .filter(midpointFilter)
             .data(_.values(midpoints), function(d) { return d.id; });
 
         var group = groups.enter()
@@ -25017,192 +25431,8 @@ iD.svg.Points = function(projection, context) {
 
     return drawPoints;
 };
-iD.svg.Restrictions = function(context) {
-    var projection = context.projection;
-
-    function drawRestrictions(surface) {
-        var turns = drawRestrictions.turns(context.graph(), context.selectedIDs());
-
-        var groups = surface.select('.layer-hit').selectAll('g.restriction')
-            .data(turns, iD.Entity.key);
-
-        var enter = groups.enter().append('g')
-            .attr('class', 'restriction');
-
-        enter.append('circle')
-            .attr('class', 'restriction')
-            .attr('r', 4);
-
-        groups
-            .attr('transform', function(restriction) {
-                var via = context.entity(restriction.memberByRole('via').id);
-                return iD.svg.PointTransform(projection)(via);
-            });
-
-        groups.exit()
-            .remove();
-
-        return this;
-    }
-
-    drawRestrictions.turns = function (graph, selectedIDs) {
-        if (selectedIDs.length !== 1)
-            return [];
-
-        var from = graph.entity(selectedIDs[0]);
-        if (from.type !== 'way')
-            return [];
-
-        return graph.parentRelations(from).filter(function(relation) {
-            var f = relation.memberById(from.id),
-                t = relation.memberByRole('to'),
-                v = relation.memberByRole('via');
-
-            return relation.tags.type === 'restriction' && f.role === 'from' &&
-                t && t.type === 'way' && graph.hasEntity(t.id) &&
-                v && v.type === 'node' && graph.hasEntity(v.id) &&
-                !graph.entity(t.id).isDegenerate() &&
-                !graph.entity(f.id).isDegenerate() &&
-                graph.entity(t.id).affix(v.id) &&
-                graph.entity(f.id).affix(v.id);
-        });
-    };
-
-    drawRestrictions.datum = function(graph, from, restriction, projection) {
-        var to = graph.entity(restriction.memberByRole('to').id),
-            a = graph.entity(restriction.memberByRole('via').id),
-            b;
-
-        if (to.first() === a.id) {
-            b = graph.entity(to.nodes[1]);
-        } else {
-            b = graph.entity(to.nodes[to.nodes.length - 2]);
-        }
-
-        a = projection(a.loc);
-        b = projection(b.loc);
-
-        return {
-            from: from,
-            to: to,
-            restriction: restriction,
-            angle: Math.atan2(b[1] - a[1], b[0] - a[0])
-        };
-    };
-
-    return drawRestrictions;
-};
-iD.svg.Surface = function(context) {
-    function autosize(image) {
-        var img = document.createElement('img');
-        img.src = image.attr('xlink:href');
-        img.onload = function() {
-            image.attr({
-                width: img.width,
-                height: img.height
-            });
-        };
-    }
-
-    function SpriteDefinition(id, href, data) {
-        return function(defs) {
-            defs.append('image')
-                .attr('id', id)
-                .attr('xlink:href', href)
-                .call(autosize);
-
-            defs.selectAll()
-                .data(data)
-                .enter().append('use')
-                .attr('id', function(d) { return d.key; })
-                .attr('transform', function(d) { return 'translate(-' + d.value[0] + ',-' + d.value[1] + ')'; })
-                .attr('xlink:href', '#' + id);
-        };
-    }
-
-    return function drawSurface(selection) {
-        var defs = selection.append('defs');
-
-        defs.append('marker')
-            .attr({
-                id: 'oneway-marker',
-                viewBox: '0 0 10 10',
-                refY: 2.5,
-                refX: 5,
-                markerWidth: 2,
-                markerHeight: 2,
-                orient: 'auto'
-            })
-            .append('path')
-            .attr('d', 'M 5 3 L 0 3 L 0 2 L 5 2 L 5 0 L 10 2.5 L 5 5 z');
-
-        var patterns = defs.selectAll('pattern')
-            .data([
-                // pattern name, pattern image name
-                ['wetland', 'wetland'],
-                ['construction', 'construction'],
-                ['cemetery', 'cemetery'],
-                ['orchard', 'orchard'],
-                ['farmland', 'farmland'],
-                ['beach', 'dots'],
-                ['scrub', 'dots'],
-                ['meadow', 'dots']])
-            .enter()
-            .append('pattern')
-                .attr({
-                    id: function(d) { return 'pattern-' + d[0]; },
-                    width: 32,
-                    height: 32,
-                    patternUnits: 'userSpaceOnUse'
-                });
-
-        patterns.append('rect')
-            .attr({
-                x: 0,
-                y: 0,
-                width: 32,
-                height: 32,
-                'class': function(d) { return 'pattern-color-' + d[0]; }
-            });
-
-        patterns.append('image')
-            .attr({
-                x: 0,
-                y: 0,
-                width: 32,
-                height: 32
-            })
-            .attr('xlink:href', function(d) { return context.imagePath('pattern/' + d[1] + '.png'); });
-
-        defs.selectAll()
-            .data([12, 18, 20])
-            .enter().append('clipPath')
-            .attr('id', function(d) { return 'clip-square-' + d; })
-            .append('rect')
-            .attr('x', 0)
-            .attr('y', 0)
-            .attr('width', function(d) { return d; })
-            .attr('height', function(d) { return d; });
-
-        var maki = [];
-        _.forEach(iD.data.featureIcons, function(dimensions, name) {
-            if (dimensions['12'] && dimensions['18'] && dimensions['24']) {
-                maki.push({key: 'maki-' + name + '-12', value: dimensions['12']});
-                maki.push({key: 'maki-' + name + '-18', value: dimensions['18']});
-                maki.push({key: 'maki-' + name + '-24', value: dimensions['24']});
-            }
-        });
-
-        defs.call(SpriteDefinition(
-            'sprite',
-            context.imagePath('sprite.svg'),
-            d3.entries(iD.data.operations)));
-
-        defs.call(SpriteDefinition(
-            'maki-sprite',
-            context.imagePath('maki-sprite.png'),
-            maki));
-
+iD.svg.Surface = function() {
+    return function (selection) {
         var layers = selection.selectAll('.layer')
             .data(['fill', 'shadow', 'casing', 'stroke', 'oneway', 'hit', 'halo', 'label']);
 
@@ -25265,6 +25495,77 @@ iD.svg.TagClasses = function() {
 
     return tagClasses;
 };
+iD.svg.Turns = function(projection) {
+    return function(surface, graph, turns) {
+        function key(turn) {
+            return [turn.from.node + turn.via.node + turn.to.node].join('-');
+        }
+
+        function icon(turn) {
+            var u = turn.u ? '-u' : '';
+            if (!turn.restriction)
+                return '#icon-restriction-yes' + u;
+            var restriction = graph.entity(turn.restriction).tags.restriction;
+            return '#icon-restriction-' +
+                (!turn.indirect_restriction && /^only_/.test(restriction) ? 'only' : 'no') + u;
+        }
+
+        var groups = surface.select('.layer-hit').selectAll('g.turn')
+            .data(turns, key);
+
+        // Enter
+
+        var enter = groups.enter().append('g')
+            .attr('class', 'turn');
+
+        var nEnter = enter.filter(function (turn) { return !turn.u; });
+
+        nEnter.append('rect')
+            .attr('transform', 'translate(-12, -12)')
+            .attr('width', '45')
+            .attr('height', '25');
+
+        nEnter.append('use')
+            .attr('transform', 'translate(-12, -12)')
+            .attr('clip-path', 'url(#clip-square-45)');
+
+        var uEnter = enter.filter(function (turn) { return turn.u; });
+
+        uEnter.append('circle')
+            .attr('r', '16');
+
+        uEnter.append('use')
+            .attr('transform', 'translate(-16, -16)')
+            .attr('clip-path', 'url(#clip-square-32)');
+
+        // Update
+
+        groups
+            .attr('transform', function (turn) {
+                var v = graph.entity(turn.via.node),
+                    t = graph.entity(turn.to.node),
+                    a = iD.geo.angle(v, t, projection),
+                    p = projection(v.loc),
+                    r = turn.u ? 0 : 60;
+
+                return 'translate(' + (r * Math.cos(a) + p[0]) + ',' + (r * Math.sin(a) + p[1]) + ')' +
+                    'rotate(' + a * 180 / Math.PI + ')';
+            });
+
+        groups.select('use')
+            .attr('xlink:href', icon);
+
+        groups.select('rect');
+        groups.select('circle');
+
+        // Exit
+
+        groups.exit()
+            .remove();
+
+        return this;
+    };
+};
 iD.svg.Vertices = function(projection, context) {
     var radiuses = {
         //       z16-, z17, z18+, tagged
@@ -25429,6 +25730,10 @@ iD.ui = function(context) {
             map.centerZoom([-77.02271, 38.90085], 20);
         }
 
+        container.append('svg')
+            .attr('id', 'defs')
+            .call(iD.svg.Defs(context));
+
         container.append('div')
             .attr('id', 'sidebar')
             .attr('class', 'col4')
@@ -26491,6 +26796,8 @@ iD.ui.EntityEditor = function(context) {
         preset,
         reference;
 
+    var presetEditor = iD.ui.preset(context)
+        .on('change', changeTags);
     var rawTagEditor = iD.ui.RawTagEditor(context)
         .on('change', changeTags);
 
@@ -26577,12 +26884,11 @@ iD.ui.EntityEditor = function(context) {
             .text(preset.name());
 
         $body.select('.inspector-preset')
-            .call(iD.ui.preset(context)
+            .call(presetEditor
                 .preset(preset)
                 .entityID(id)
                 .tags(tags)
-                .state(state)
-                .on('change', changeTags));
+                .state(state));
 
         $body.select('.raw-tag-editor')
             .call(rawTagEditor
@@ -26619,11 +26925,13 @@ iD.ui.EntityEditor = function(context) {
 
     function clean(o) {
         var out = {}, k, v;
+        /*jshint -W083 */
         for (k in o) {
             if (k && (v = o[k]) !== undefined) {
-                out[k] = v.trim();
+                out[k] = v.split(';').map(function(s) { return s.trim(); }).join(';');
             }
         }
+        /*jshint +W083 */
         return out;
     }
 
@@ -27141,7 +27449,12 @@ iD.ui.Inspector = function(context) {
         var $presetPane = $wrap.select('.preset-list-pane');
         var $editorPane = $wrap.select('.entity-editor-pane');
 
-        var showEditor = state === 'hover' || context.entity(entityID).isUsed(context.graph());
+        var graph = context.graph(),
+            entity = context.entity(entityID),
+            showEditor = state === 'hover' ||
+                entity.isUsed(graph) ||
+                entity.isHighwayIntersection(graph);
+
         if (showEditor) {
             $wrap.style('right', '0%');
             $editorPane.call(entityEditor);
@@ -27669,6 +27982,10 @@ iD.ui.preset = function(context) {
                 }
             });
 
+            if (entity.isHighwayIntersection(context.graph())) {
+                fields.push(UIField(context.presets().field('restrictions'), entity, true));
+            }
+
             context.presets().universal().forEach(function(field) {
                 if (preset.fields.indexOf(field) < 0) {
                     fields.push(UIField(field, entity));
@@ -27774,7 +28091,7 @@ iD.ui.preset = function(context) {
 
         function show(field) {
             field.show = true;
-            presets(selection);
+            context.presets()(selection);
             field.input.focus();
         }
 
@@ -27793,6 +28110,7 @@ iD.ui.preset = function(context) {
 
     presets.preset = function(_) {
         if (!arguments.length) return preset;
+        if (preset && preset.id === _.id) return presets;
         preset = _;
         fields = null;
         return presets;
@@ -27813,6 +28131,7 @@ iD.ui.preset = function(context) {
 
     presets.entityID = function(_) {
         if (!arguments.length) return id;
+        if (id === _) return presets;
         id = _;
         fields = null;
         return presets;
@@ -29054,6 +29373,7 @@ iD.ui.Sidebar = function(context) {
 
         sidebar.hide = function() {
             featureListWrap.classed('inspector-hidden', false);
+            inspectorWrap.classed('inspector-hidden', true);
             if (current) current.remove();
             current = null;
         };
@@ -29883,10 +30203,6 @@ iD.ui.preset.address = function(field, context) {
         city = wrap.select('.addr-city');
         postcode = wrap.select('.addr-postcode');
 
-        wrap.selectAll('input')
-            .on('blur', change)
-            .on('change', change);
-
         street
             .call(d3.combobox()
                 .fetcher(function(value, callback) {
@@ -29904,6 +30220,10 @@ iD.ui.preset.address = function(field, context) {
                 .fetcher(function(value, callback) {
                     callback(getPostCodes());
                 }));
+
+        wrap.selectAll('input')
+            .on('blur', change)
+            .on('change', change);
     }
 
     function change() {
@@ -29937,15 +30257,38 @@ iD.ui.preset.address = function(field, context) {
 iD.ui.preset.check =
 iD.ui.preset.defaultcheck = function(field) {
     var event = d3.dispatch('change'),
-        values = field.type === 'check' ?
-            [undefined, 'yes', 'no'] :
-            [undefined, 'yes'],
-        value,
-        box,
-        text,
-        label;
+        options = field.strings && field.strings.options,
+        values = [],
+        texts = [],
+        entity, value, box, text, label;
+
+    if (options) {
+        for (var k in options) {
+            values.push(k === 'undefined' ? undefined : k);
+            texts.push(field.t('check.' + k, { 'default': options[k] }));
+        }
+    } else {
+        values = [undefined, 'yes'];
+        texts = [t('inspector.unknown'), t('inspector.check.yes')];
+        if (field.type === 'check') {
+            values.push('no');
+            texts.push(t('inspector.check.no'));
+        }
+    }
 
     var check = function(selection) {
+        // hack: pretend oneway field is a oneway_yes field
+        // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841
+        if (field.id === 'oneway') {
+            for (var key in entity.tags) {
+                if (key in iD.oneWayTags && (entity.tags[key] in iD.oneWayTags[key])) {
+                    texts.shift();
+                    texts.unshift(t('presets.fields.oneway_yes.check.undefined', { 'default': 'Assumed to be Yes' }));
+                    break;
+                }
+            }
+        }
+
         selection.classed('checkselect', 'true');
 
         label = selection.selectAll('.preset-input-wrap')
@@ -29960,7 +30303,7 @@ iD.ui.preset.defaultcheck = function(field) {
             .attr('id', 'preset-input-' + field.id);
 
         enter.append('span')
-            .text(t('inspector.unknown'))
+            .text(texts[0])
             .attr('class', 'value');
 
         box = label.select('input')
@@ -29974,12 +30317,17 @@ iD.ui.preset.defaultcheck = function(field) {
         text = label.select('span.value');
     };
 
+    check.entity = function(_) {
+        if (!arguments.length) return entity;
+        entity = _;
+        return check;
+    };
+
     check.tags = function(tags) {
         value = tags[field.key];
         box.property('indeterminate', field.type === 'check' && !value);
         box.property('checked', value === 'yes');
-        text.text(value ? t('inspector.check.' + value, {default: value}) :
-            field.type === 'check' ? t('inspector.unknown') : t('inspector.check.no'));
+        text.text(texts[values.indexOf(value)]);
         label.classed('set', !!value);
     };
 
@@ -30005,6 +30353,7 @@ iD.ui.preset.typeCombo = function(field) {
             .attr('id', 'preset-input-' + field.id);
 
         input
+            .call(combobox)
             .on('change', change)
             .on('blur', change)
             .each(function() {
@@ -30017,13 +30366,12 @@ iD.ui.preset.typeCombo = function(field) {
                         if (!err) options(_.pluck(data, 'value'));
                     });
                 }
-            })
-            .call(combobox);
+            });
 
         function options(opts) {
             combobox.data(opts.map(function(d) {
                 var o = {};
-                o.title = o.value = d.replace('_', ' ');
+                o.title = o.value = d.replace(/_+/g, ' ');
                 return o;
             }));
 
@@ -30035,7 +30383,12 @@ iD.ui.preset.typeCombo = function(field) {
     }
 
     function change() {
-        var value = input.value().replace(' ', '_');
+        var value = input.value()
+            .split(';')
+            .map(function(s) { return s.trim(); })
+            .join(';')
+            .replace(/\s+/g, '_');
+
         if (field.type === 'typeCombo' && !value) value = 'yes';
 
         var t = {};
@@ -30137,10 +30490,6 @@ iD.ui.preset.localized = function(field, context) {
             .attr('class', 'localized-main')
             .attr('placeholder', field.placeholder());
 
-        input
-            .on('blur', change)
-            .on('change', change);
-
         if (field.id === 'name') {
             var preset = context.presets().match(entity, context.graph());
             input.call(d3.combobox().fetcher(
@@ -30148,6 +30497,10 @@ iD.ui.preset.localized = function(field, context) {
             ));
         }
 
+        input
+            .on('blur', change)
+            .on('change', change);
+
         var translateButton = selection.selectAll('.localized-add')
             .data([0]);
 
@@ -30377,9 +30730,9 @@ iD.ui.preset.maxspeed = function(field, context) {
             .attr('placeholder', field.placeholder());
 
         input
+            .call(combobox)
             .on('change', change)
-            .on('blur', change)
-            .call(combobox);
+            .on('blur', change);
 
         var childNodes = context.graph().childNodes(context.entity(entity.id)),
             loc = childNodes[~~(childNodes.length/2)].loc;
@@ -30539,6 +30892,145 @@ iD.ui.preset.radio = function(field) {
 
     return d3.rebind(radio, event, 'on');
 };
+iD.ui.preset.restrictions = function(field, context) {
+    var event = d3.dispatch('change'),
+        vertexID,
+        fromNodeID;
+
+    function restrictions(selection) {
+        var wrap = selection.selectAll('.preset-input-wrap')
+            .data([0]);
+
+        var enter = wrap.enter().append('div')
+            .attr('class', 'preset-input-wrap');
+
+        enter.append('div')
+            .attr('class', 'restriction-help');
+
+        enter.append('svg')
+            .call(iD.svg.Surface(context))
+            .call(iD.behavior.Hover(context));
+
+        var intersection = iD.geo.Intersection(context.graph(), vertexID),
+            graph = intersection.graph,
+            vertex = graph.entity(vertexID),
+            surface = wrap.selectAll('svg'),
+            filter = function () { return true; },
+            extent = iD.geo.Extent(),
+            projection = iD.geo.RawMercator(),
+            lines = iD.svg.Lines(projection, context),
+            vertices = iD.svg.Vertices(projection, context),
+            turns = iD.svg.Turns(projection, context);
+
+        var d = wrap.dimensions(),
+            c = [d[0] / 2, d[1] / 2],
+            z = 21;
+
+        projection
+            .scale(256 * Math.pow(2, z) / (2 * Math.PI));
+
+        var s = projection(vertex.loc);
+
+        projection
+            .translate([c[0] - s[0], c[1] - s[1]])
+            .clipExtent([[0, 0], d]);
+
+        surface
+            .call(vertices, graph, [vertex], filter, extent, z)
+            .call(lines, graph, intersection.highways, filter)
+            .call(turns, graph, intersection.turns(fromNodeID));
+
+        surface
+            .on('click.restrictions', click)
+            .on('mouseover.restrictions', mouseover)
+            .on('mouseout.restrictions', mouseout);
+
+        surface
+            .selectAll('.selected')
+            .classed('selected', false);
+
+        if (fromNodeID) {
+            surface
+                .selectAll('.' + _.find(intersection.highways, function(way) { return way.contains(fromNodeID); }).id)
+                .classed('selected', true);
+        }
+
+        mouseout();
+
+        context.history()
+            .on('change.restrictions', render);
+
+        d3.select(window)
+            .on('resize.restrictions', render);
+
+        function click() {
+            var datum = d3.event.target.__data__;
+            if (datum instanceof iD.Entity) {
+                fromNodeID = datum.nodes[(datum.first() === vertexID) ? 1 : datum.nodes.length - 2];
+                render();
+            } else if (datum instanceof iD.geo.Turn) {
+                if (datum.restriction) {
+                    context.perform(
+                        iD.actions.UnrestrictTurn(datum, projection),
+                        t('operations.restriction.annotation.delete'));
+                } else {
+                    context.perform(
+                        iD.actions.RestrictTurn(datum, projection),
+                        t('operations.restriction.annotation.create'));
+                }
+            }
+        }
+
+        function mouseover() {
+            var datum = d3.event.target.__data__;
+            if (datum instanceof iD.geo.Turn) {
+                var graph = context.graph(),
+                    presets = context.presets(),
+                    preset;
+
+                if (datum.restriction) {
+                    preset = presets.match(graph.entity(datum.restriction), graph);
+                } else {
+                    preset = presets.item('type/restriction/' +
+                        iD.geo.inferRestriction(
+                            graph.entity(datum.from.node),
+                            graph.entity(datum.via.node),
+                            graph.entity(datum.to.node),
+                            projection));
+                }
+
+                wrap.selectAll('.restriction-help')
+                    .text(t('operations.restriction.help.' +
+                        (datum.restriction ? 'toggle_off' : 'toggle_on'),
+                        {restriction: preset.name()}));
+            }
+        }
+
+        function mouseout() {
+            wrap.selectAll('.restriction-help')
+                .text(t('operations.restriction.help.' +
+                    (fromNodeID ? 'toggle' : 'select')));
+        }
+
+        function render() {
+            if (context.hasEntity(vertexID)) {
+                restrictions(selection);
+            }
+        }
+    }
+
+    restrictions.entity = function(_) {
+        if (!vertexID || vertexID !== _.id) {
+            fromNodeID = null;
+            vertexID = _.id;
+        }
+    };
+
+    restrictions.tags = function() {};
+    restrictions.focus = function() {};
+
+    return d3.rebind(restrictions, event, 'on');
+};
 iD.ui.preset.textarea = function(field) {
 
     var event = d3.dispatch('change'),
@@ -30617,9 +31109,9 @@ iD.ui.preset.wikipedia = function(field, context) {
             .value('English');
 
         lang
+            .call(langcombo)
             .on('blur', changeLang)
-            .on('change', changeLang)
-            .call(langcombo);
+            .on('change', changeLang);
 
         title = selection.selectAll('input.wiki-title')
             .data([0]);
@@ -30630,9 +31122,9 @@ iD.ui.preset.wikipedia = function(field, context) {
             .attr('id', 'preset-input-' + field.id);
 
         title
+            .call(titlecombo)
             .on('blur', change)
-            .on('change', change)
-            .call(titlecombo);
+            .on('change', change);
 
         link = selection.selectAll('a.wiki-link')
             .data([0]);
@@ -31483,7 +31975,7 @@ iD.presets.Field = function(id, field) {
     field.id = id;
 
     field.matchGeometry = function(geometry) {
-        return !field.geometry || field.geometry.indexOf(geometry) >= 0;
+        return !field.geometry || field.geometry === geometry;
     };
 
     field.t = function(scope, options) {
@@ -63760,6 +64252,26 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "opening_hours"
                 ]
             },
+            "amenity/dojo": {
+                "icon": "pitch",
+                "geometry": [
+                    "point",
+                    "area"
+                ],
+                "terms": [
+                    "martial arts",
+                    "dojo",
+                    "dojang"
+                ],
+                "tags": {
+                    "amenity": "dojo"
+                },
+                "fields": [
+                    "address",
+                    "sport"
+                ],
+                "name": "Dojo / Martial Arts Academy"
+            },
             "amenity/drinking_water": {
                 "icon": "water",
                 "geometry": [
@@ -66504,7 +67016,9 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "fields": [
                     "crossing",
                     "access",
-                    "surface"
+                    "surface",
+                    "sloped_curb",
+                    "tactile_paving"
                 ],
                 "geometry": [
                     "line"
@@ -66513,11 +67027,30 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "highway": "footway",
                     "footway": "crossing"
                 },
+                "terms": [],
+                "name": "Crossing"
+            },
+            "footway/crosswalk": {
+                "fields": [
+                    "crossing",
+                    "access",
+                    "surface",
+                    "sloped_curb",
+                    "tactile_paving"
+                ],
+                "geometry": [
+                    "line"
+                ],
+                "tags": {
+                    "highway": "footway",
+                    "footway": "crossing",
+                    "crossing": "zebra"
+                },
                 "terms": [
                     "crosswalk",
                     "zebra crossing"
                 ],
-                "name": "Crossing"
+                "name": "Crosswalk"
             },
             "footway/sidewalk": {
                 "fields": [
@@ -66718,11 +67251,27 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "tags": {
                     "highway": "crossing"
                 },
+                "terms": [],
+                "name": "Crossing"
+            },
+            "highway/crosswalk": {
+                "fields": [
+                    "crossing",
+                    "sloped_curb",
+                    "tactile_paving"
+                ],
+                "geometry": [
+                    "vertex"
+                ],
+                "tags": {
+                    "highway": "crossing",
+                    "crossing": "zebra"
+                },
                 "terms": [
                     "crosswalk",
                     "zebra crossing"
                 ],
-                "name": "Crossing"
+                "name": "Crosswalk"
             },
             "highway/cycleway": {
                 "icon": "highway-cycleway",
@@ -66819,7 +67368,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
             "highway/motorway": {
                 "icon": "highway-motorway",
                 "fields": [
-                    "oneway",
+                    "oneway_yes",
                     "maxspeed",
                     "structure",
                     "access",
@@ -66846,7 +67395,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "fields": [
                     "ref"
                 ],
-                "name": "Motorway Junction"
+                "name": "Motorway Junction / Exit"
             },
             "highway/motorway_link": {
                 "icon": "highway-motorway-link",
@@ -68042,6 +68591,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "name": "Slipway"
             },
             "leisure/sports_center": {
+                "icon": "pitch",
                 "geometry": [
                     "point",
                     "area"
@@ -68052,10 +68602,13 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "terms": [
                     "gym"
                 ],
-                "icon": "sports",
-                "name": "Sports Center"
+                "fields": [
+                    "sport"
+                ],
+                "name": "Sports Center / Gym"
             },
             "leisure/stadium": {
+                "icon": "pitch",
                 "geometry": [
                     "point",
                     "area"
@@ -70984,9 +71537,108 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "name": "Restriction",
                 "icon": "restriction",
                 "fields": [
-                    "restriction"
+                    "restriction",
+                    "except"
                 ]
             },
+            "type/restriction/no_left_turn": {
+                "name": "No Left Turn",
+                "geometry": [
+                    "relation"
+                ],
+                "tags": {
+                    "type": "restriction",
+                    "restriction": "no_left_turn"
+                },
+                "fields": [
+                    "except"
+                ],
+                "icon": "restriction-no-left-turn"
+            },
+            "type/restriction/no_right_turn": {
+                "name": "No Right Turn",
+                "geometry": [
+                    "relation"
+                ],
+                "tags": {
+                    "type": "restriction",
+                    "restriction": "no_right_turn"
+                },
+                "fields": [
+                    "except"
+                ],
+                "icon": "restriction-no-right-turn"
+            },
+            "type/restriction/no_straight_on": {
+                "name": "No Straight On",
+                "geometry": [
+                    "relation"
+                ],
+                "tags": {
+                    "type": "restriction",
+                    "restriction": "no_straight_on"
+                },
+                "fields": [
+                    "except"
+                ],
+                "icon": "restriction-no-straight-on"
+            },
+            "type/restriction/no_u_turn": {
+                "name": "No U-turn",
+                "geometry": [
+                    "relation"
+                ],
+                "tags": {
+                    "type": "restriction",
+                    "restriction": "no_u_turn"
+                },
+                "fields": [
+                    "except"
+                ],
+                "icon": "restriction-no-u-turn"
+            },
+            "type/restriction/only_left_turn": {
+                "name": "Left Turn Only",
+                "geometry": [
+                    "relation"
+                ],
+                "tags": {
+                    "type": "restriction",
+                    "restriction": "only_left_turn"
+                },
+                "fields": [
+                    "except"
+                ],
+                "icon": "restriction-only-left-turn"
+            },
+            "type/restriction/only_right_turn": {
+                "name": "Right Turn Only",
+                "geometry": [
+                    "relation"
+                ],
+                "tags": {
+                    "type": "restriction",
+                    "restriction": "only_right_turn"
+                },
+                "fields": [
+                    "except"
+                ],
+                "icon": "restriction-only-right-turn"
+            },
+            "type/restriction/only_straight_on": {
+                "name": "No Turns",
+                "geometry": [
+                    "relation"
+                ],
+                "tags": {
+                    "type": "restriction",
+                    "restriction": "only_straight_on"
+                },
+                "fields": [
+                    "except"
+                ],
+                "icon": "restriction-only-straight-on"
+            },
             "type/route": {
                 "geometry": [
                     "relation"
@@ -71597,25 +72249,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Sainsbury's": {
-                "tags": {
-                    "name": "Sainsbury's",
-                    "amenity": "fuel"
-                },
-                "name": "Sainsbury's",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/OMV": {
                 "tags": {
                     "name": "OMV",
@@ -71654,25 +72287,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Tesco": {
-                "tags": {
-                    "name": "Tesco",
-                    "amenity": "fuel"
-                },
-                "name": "Tesco",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/JET": {
                 "tags": {
                     "name": "JET",
@@ -71692,25 +72306,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Morrisons": {
-                "tags": {
-                    "name": "Morrisons",
-                    "amenity": "fuel"
-                },
-                "name": "Morrisons",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/United": {
                 "tags": {
                     "name": "United",
@@ -71730,25 +72325,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Canadian Tire": {
-                "tags": {
-                    "name": "Canadian Tire",
-                    "amenity": "fuel"
-                },
-                "name": "Canadian Tire",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Mobil": {
                 "tags": {
                     "name": "Mobil",
@@ -71825,25 +72401,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/ABC": {
-                "tags": {
-                    "name": "ABC",
-                    "amenity": "fuel"
-                },
-                "name": "ABC",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/ARAL": {
                 "tags": {
                     "name": "ARAL",
@@ -71920,25 +72477,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Intermarché": {
-                "tags": {
-                    "name": "Intermarché",
-                    "amenity": "fuel"
-                },
-                "name": "Intermarché",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Total Access": {
                 "tags": {
                     "name": "Total Access",
@@ -71958,44 +72496,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Super U": {
-                "tags": {
-                    "name": "Super U",
-                    "amenity": "fuel"
-                },
-                "name": "Super U",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
-            "amenity/fuel/Auchan": {
-                "tags": {
-                    "name": "Auchan",
-                    "amenity": "fuel"
-                },
-                "name": "Auchan",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Elf": {
                 "tags": {
                     "name": "Elf",
@@ -72015,25 +72515,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Carrefour": {
-                "tags": {
-                    "name": "Carrefour",
-                    "amenity": "fuel"
-                },
-                "name": "Carrefour",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Station Service E. Leclerc": {
                 "tags": {
                     "name": "Station Service E. Leclerc",
@@ -72376,25 +72857,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Raiffeisenbank": {
-                "tags": {
-                    "name": "Raiffeisenbank",
-                    "amenity": "fuel"
-                },
-                "name": "Raiffeisenbank",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Tamoil": {
                 "tags": {
                     "name": "Tamoil",
@@ -72490,25 +72952,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Coop": {
-                "tags": {
-                    "name": "Coop",
-                    "amenity": "fuel"
-                },
-                "name": "Coop",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Orlen": {
                 "tags": {
                     "name": "Orlen",
@@ -72718,25 +73161,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/7-Eleven": {
-                "tags": {
-                    "name": "7-Eleven",
-                    "amenity": "fuel"
-                },
-                "name": "7-Eleven",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Agrola": {
                 "tags": {
                     "name": "Agrola",
@@ -73858,25 +74282,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Wawa": {
-                "tags": {
-                    "name": "Wawa",
-                    "amenity": "fuel"
-                },
-                "name": "Wawa",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Pertamina": {
                 "tags": {
                     "name": "Pertamina",
@@ -74372,25 +74777,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Circle K": {
-                "tags": {
-                    "name": "Circle K",
-                    "amenity": "fuel"
-                },
-                "name": "Circle K",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Posto Ipiranga": {
                 "tags": {
                     "name": "Posto Ipiranga",
@@ -74543,25 +74929,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/Stewart's": {
-                "tags": {
-                    "name": "Stewart's",
-                    "amenity": "fuel"
-                },
-                "name": "Stewart's",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Posto BR": {
                 "tags": {
                     "name": "Posto BR",
@@ -74733,25 +75100,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/fuel/H-E-B": {
-                "tags": {
-                    "name": "H-E-B",
-                    "amenity": "fuel"
-                },
-                "name": "H-E-B",
-                "icon": "fuel",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "address",
-                    "building_area"
-                ],
-                "suggestion": true
-            },
             "amenity/fuel/Укрнафта": {
                 "tags": {
                     "name": "Укрнафта",
@@ -75828,6 +76176,28 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "amenity/fast_food/Subway": {
+                "tags": {
+                    "name": "Subway",
+                    "cuisine": "sandwich",
+                    "amenity": "fast_food"
+                },
+                "name": "Subway",
+                "icon": "fast-food",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "cuisine",
+                    "building_area",
+                    "address",
+                    "opening_hours",
+                    "smoking"
+                ],
+                "suggestion": true
+            },
             "amenity/fast_food/Burger King": {
                 "tags": {
                     "name": "Burger King",
@@ -80535,6 +80905,26 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "amenity/bank/Raiffeisenbank": {
+                "tags": {
+                    "name": "Raiffeisenbank",
+                    "amenity": "bank"
+                },
+                "name": "Raiffeisenbank",
+                "icon": "bank",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "atm",
+                    "building_area",
+                    "address",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "amenity/bank/Yorkshire Bank": {
                 "tags": {
                     "name": "Yorkshire Bank",
@@ -86254,26 +86644,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "amenity/pharmacy/Радуга": {
-                "tags": {
-                    "name": "Радуга",
-                    "amenity": "pharmacy"
-                },
-                "name": "Радуга",
-                "icon": "pharmacy",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address",
-                    "opening_hours"
-                ],
-                "suggestion": true
-            },
             "amenity/pharmacy/サンドラッグ": {
                 "tags": {
                     "name": "サンドラッグ",
@@ -87434,6 +87804,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/supermarket/Morrisons": {
+                "tags": {
+                    "name": "Morrisons",
+                    "shop": "supermarket"
+                },
+                "name": "Morrisons",
+                "icon": "grocery",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "operator",
+                    "building_area",
+                    "address"
+                ],
+                "suggestion": true
+            },
             "shop/supermarket/Interspar": {
                 "tags": {
                     "name": "Interspar",
@@ -87472,6 +87861,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/supermarket/Sainsbury's": {
+                "tags": {
+                    "name": "Sainsbury's",
+                    "shop": "supermarket"
+                },
+                "name": "Sainsbury's",
+                "icon": "grocery",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "operator",
+                    "building_area",
+                    "address"
+                ],
+                "suggestion": true
+            },
             "shop/supermarket/Lidl": {
                 "tags": {
                     "name": "Lidl",
@@ -87548,6 +87956,44 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/supermarket/Coop": {
+                "tags": {
+                    "name": "Coop",
+                    "shop": "supermarket"
+                },
+                "name": "Coop",
+                "icon": "grocery",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "operator",
+                    "building_area",
+                    "address"
+                ],
+                "suggestion": true
+            },
+            "shop/supermarket/Tesco": {
+                "tags": {
+                    "name": "Tesco",
+                    "shop": "supermarket"
+                },
+                "name": "Tesco",
+                "icon": "grocery",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "operator",
+                    "building_area",
+                    "address"
+                ],
+                "suggestion": true
+            },
             "shop/supermarket/Woolworths": {
                 "tags": {
                     "name": "Woolworths",
@@ -87890,25 +88336,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Tesco Express": {
-                "tags": {
-                    "name": "Tesco Express",
-                    "shop": "supermarket"
-                },
-                "name": "Tesco Express",
-                "icon": "grocery",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address"
-                ],
-                "suggestion": true
-            },
             "shop/supermarket/King Soopers": {
                 "tags": {
                     "name": "King Soopers",
@@ -88023,6 +88450,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/supermarket/Carrefour": {
+                "tags": {
+                    "name": "Carrefour",
+                    "shop": "supermarket"
+                },
+                "name": "Carrefour",
+                "icon": "grocery",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "operator",
+                    "building_area",
+                    "address"
+                ],
+                "suggestion": true
+            },
             "shop/supermarket/Waitrose": {
                 "tags": {
                     "name": "Waitrose",
@@ -88422,6 +88868,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/supermarket/Super U": {
+                "tags": {
+                    "name": "Super U",
+                    "shop": "supermarket"
+                },
+                "name": "Super U",
+                "icon": "grocery",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "operator",
+                    "building_area",
+                    "address"
+                ],
+                "suggestion": true
+            },
             "shop/supermarket/Metro": {
                 "tags": {
                     "name": "Metro",
@@ -88650,25 +89115,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/COOP Jednota": {
-                "tags": {
-                    "name": "COOP Jednota",
-                    "shop": "supermarket"
-                },
-                "name": "COOP Jednota",
-                "icon": "grocery",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address"
-                ],
-                "suggestion": true
-            },
             "shop/supermarket/Rema 1000": {
                 "tags": {
                     "name": "Rema 1000",
@@ -89296,6 +89742,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/supermarket/Auchan": {
+                "tags": {
+                    "name": "Auchan",
+                    "shop": "supermarket"
+                },
+                "name": "Auchan",
+                "icon": "grocery",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "operator",
+                    "building_area",
+                    "address"
+                ],
+                "suggestion": true
+            },
             "shop/supermarket/Mercadona": {
                 "tags": {
                     "name": "Mercadona",
@@ -89448,25 +89913,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Costcutter": {
-                "tags": {
-                    "name": "Costcutter",
-                    "shop": "supermarket"
-                },
-                "name": "Costcutter",
-                "icon": "grocery",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address"
-                ],
-                "suggestion": true
-            },
             "shop/supermarket/Maxi": {
                 "tags": {
                     "name": "Maxi",
@@ -89524,6 +89970,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/supermarket/Intermarché": {
+                "tags": {
+                    "name": "Intermarché",
+                    "shop": "supermarket"
+                },
+                "name": "Intermarché",
+                "icon": "grocery",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "operator",
+                    "building_area",
+                    "address"
+                ],
+                "suggestion": true
+            },
             "shop/supermarket/Delhaize": {
                 "tags": {
                     "name": "Delhaize",
@@ -89695,25 +90160,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/dm": {
-                "tags": {
-                    "name": "dm",
-                    "shop": "supermarket"
-                },
-                "name": "dm",
-                "icon": "grocery",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address"
-                ],
-                "suggestion": true
-            },
             "shop/supermarket/Kvickly": {
                 "tags": {
                     "name": "Kvickly",
@@ -89961,25 +90407,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Petit Casino": {
-                "tags": {
-                    "name": "Petit Casino",
-                    "shop": "supermarket"
-                },
-                "name": "Petit Casino",
-                "icon": "grocery",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address"
-                ],
-                "suggestion": true
-            },
             "shop/supermarket/Wasgau": {
                 "tags": {
                     "name": "Wasgau",
@@ -90569,25 +90996,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Fressnapf": {
-                "tags": {
-                    "name": "Fressnapf",
-                    "shop": "supermarket"
-                },
-                "name": "Fressnapf",
-                "icon": "grocery",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address"
-                ],
-                "suggestion": true
-            },
             "shop/supermarket/Coop Konsum": {
                 "tags": {
                     "name": "Coop Konsum",
@@ -90835,25 +91243,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Centra": {
-                "tags": {
-                    "name": "Centra",
-                    "shop": "supermarket"
-                },
-                "name": "Centra",
-                "icon": "grocery",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address"
-                ],
-                "suggestion": true
-            },
             "shop/supermarket/Квартал": {
                 "tags": {
                     "name": "Квартал",
@@ -91443,12 +91832,12 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Атак": {
+            "shop/supermarket/H-E-B": {
                 "tags": {
-                    "name": "Атак",
+                    "name": "H-E-B",
                     "shop": "supermarket"
                 },
-                "name": "Атак",
+                "name": "H-E-B",
                 "icon": "grocery",
                 "geometry": [
                     "point",
@@ -91462,12 +91851,12 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Ð\9fолÑ\83Ñ\88ка": {
+            "shop/supermarket/Ð\90Ñ\82ак": {
                 "tags": {
-                    "name": "Ð\9fолÑ\83Ñ\88ка",
+                    "name": "Ð\90Ñ\82ак",
                     "shop": "supermarket"
                 },
-                "name": "Ð\9fолÑ\83Ñ\88ка",
+                "name": "Ð\90Ñ\82ак",
                 "icon": "grocery",
                 "geometry": [
                     "point",
@@ -91481,12 +91870,12 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Extra": {
+            "shop/supermarket/Полушка": {
                 "tags": {
-                    "name": "Extra",
+                    "name": "Полушка",
                     "shop": "supermarket"
                 },
-                "name": "Extra",
+                "name": "Полушка",
                 "icon": "grocery",
                 "geometry": [
                     "point",
@@ -91500,12 +91889,12 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Lewiatan": {
+            "shop/supermarket/Extra": {
                 "tags": {
-                    "name": "Lewiatan",
+                    "name": "Extra",
                     "shop": "supermarket"
                 },
-                "name": "Lewiatan",
+                "name": "Extra",
                 "icon": "grocery",
                 "geometry": [
                     "point",
@@ -91557,25 +91946,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Społem": {
-                "tags": {
-                    "name": "Społem",
-                    "shop": "supermarket"
-                },
-                "name": "Społem",
-                "icon": "grocery",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address"
-                ],
-                "suggestion": true
-            },
             "shop/supermarket/Bodega Aurrera": {
                 "tags": {
                     "name": "Bodega Aurrera",
@@ -91652,25 +92022,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/supermarket/Магазин": {
-                "tags": {
-                    "name": "Магазин",
-                    "shop": "supermarket"
-                },
-                "name": "Магазин",
-                "icon": "grocery",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "operator",
-                    "building_area",
-                    "address"
-                ],
-                "suggestion": true
-            },
             "shop/supermarket/Монетка": {
                 "tags": {
                     "name": "Монетка",
@@ -92108,6 +92459,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Tesco Express": {
+                "tags": {
+                    "name": "Tesco Express",
+                    "shop": "convenience"
+                },
+                "name": "Tesco Express",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/One Stop": {
                 "tags": {
                     "name": "One Stop",
@@ -92146,6 +92516,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/7-Eleven": {
+                "tags": {
+                    "name": "7-Eleven",
+                    "shop": "convenience"
+                },
+                "name": "7-Eleven",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/Sale": {
                 "tags": {
                     "name": "Sale",
@@ -92184,6 +92573,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/COOP Jednota": {
+                "tags": {
+                    "name": "COOP Jednota",
+                    "shop": "convenience"
+                },
+                "name": "COOP Jednota",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/Mac's": {
                 "tags": {
                     "name": "Mac's",
@@ -92260,6 +92668,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Costcutter": {
+                "tags": {
+                    "name": "Costcutter",
+                    "shop": "convenience"
+                },
+                "name": "Costcutter",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/Valintatalo": {
                 "tags": {
                     "name": "Valintatalo",
@@ -92279,6 +92706,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Circle K": {
+                "tags": {
+                    "name": "Circle K",
+                    "shop": "convenience"
+                },
+                "name": "Circle K",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/セブンイレブン": {
                 "tags": {
                     "name": "セブンイレブン",
@@ -92319,6 +92765,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Petit Casino": {
+                "tags": {
+                    "name": "Petit Casino",
+                    "shop": "convenience"
+                },
+                "name": "Petit Casino",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/Mace": {
                 "tags": {
                     "name": "Mace",
@@ -92528,6 +92993,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/ABC": {
+                "tags": {
+                    "name": "ABC",
+                    "shop": "convenience"
+                },
+                "name": "ABC",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/ミニストップ": {
                 "tags": {
                     "name": "ミニストップ",
@@ -92759,6 +93243,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Магазин": {
+                "tags": {
+                    "name": "Магазин",
+                    "shop": "convenience"
+                },
+                "name": "Магазин",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/Гастроном": {
                 "tags": {
                     "name": "Гастроном",
@@ -92797,6 +93300,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Centra": {
+                "tags": {
+                    "name": "Centra",
+                    "shop": "convenience"
+                },
+                "name": "Centra",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/サークルK": {
                 "tags": {
                     "name": "サークルK",
@@ -92817,6 +93339,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Wawa": {
+                "tags": {
+                    "name": "Wawa",
+                    "shop": "convenience"
+                },
+                "name": "Wawa",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/Proxi": {
                 "tags": {
                     "name": "Proxi",
@@ -92988,6 +93529,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Społem": {
+                "tags": {
+                    "name": "Społem",
+                    "shop": "convenience"
+                },
+                "name": "Społem",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/Cumberland Farms": {
                 "tags": {
                     "name": "Cumberland Farms",
@@ -93026,6 +93586,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Kiosk": {
+                "tags": {
+                    "name": "Kiosk",
+                    "shop": "convenience"
+                },
+                "name": "Kiosk",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/24 часа": {
                 "tags": {
                     "name": "24 часа",
@@ -93121,6 +93700,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Stewart's": {
+                "tags": {
+                    "name": "Stewart's",
+                    "shop": "convenience"
+                },
+                "name": "Stewart's",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/Продукти": {
                 "tags": {
                     "name": "Продукти",
@@ -93159,6 +93757,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Радуга": {
+                "tags": {
+                    "name": "Радуга",
+                    "shop": "convenience"
+                },
+                "name": "Радуга",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/ローソンストア100": {
                 "tags": {
                     "name": "ローソンストア100",
@@ -93539,6 +94156,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Lewiatan": {
+                "tags": {
+                    "name": "Lewiatan",
+                    "shop": "convenience"
+                },
+                "name": "Lewiatan",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/Продуктовый магазин": {
                 "tags": {
                     "name": "Продуктовый магазин",
@@ -93767,6 +94403,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/convenience/Boutique": {
+                "tags": {
+                    "name": "Boutique",
+                    "shop": "convenience"
+                },
+                "name": "Boutique",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/convenience/მარკეტი (Market)": {
                 "tags": {
                     "name": "მარკეტი (Market)",
@@ -93805,6 +94460,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/chemist/dm": {
+                "tags": {
+                    "name": "dm",
+                    "shop": "chemist"
+                },
+                "name": "dm",
+                "icon": "chemist",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/chemist/Müller": {
                 "tags": {
                     "name": "Müller",
@@ -93976,25 +94650,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/car_repair/Peugeot": {
-                "tags": {
-                    "name": "Peugeot",
-                    "shop": "car_repair"
-                },
-                "name": "Peugeot",
-                "icon": "car",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "address",
-                    "building_area",
-                    "opening_hours"
-                ],
-                "suggestion": true
-            },
             "shop/car_repair/Kwik Fit": {
                 "tags": {
                     "name": "Kwik Fit",
@@ -94128,44 +94783,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/car_repair/Автозапчасти": {
-                "tags": {
-                    "name": "Автозапчасти",
-                    "shop": "car_repair"
-                },
-                "name": "Автозапчасти",
-                "icon": "car",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "address",
-                    "building_area",
-                    "opening_hours"
-                ],
-                "suggestion": true
-            },
-            "shop/car_repair/Renault": {
-                "tags": {
-                    "name": "Renault",
-                    "shop": "car_repair"
-                },
-                "name": "Renault",
-                "icon": "car",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "address",
-                    "building_area",
-                    "opening_hours"
-                ],
-                "suggestion": true
-            },
             "shop/car_repair/Pit Stop": {
                 "tags": {
                     "name": "Pit Stop",
@@ -94299,25 +94916,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/car_repair/Citroen": {
-                "tags": {
-                    "name": "Citroen",
-                    "shop": "car_repair"
-                },
-                "name": "Citroen",
-                "icon": "car",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "address",
-                    "building_area",
-                    "opening_hours"
-                ],
-                "suggestion": true
-            },
             "shop/car_repair/Euromaster": {
                 "tags": {
                     "name": "Euromaster",
@@ -94926,6 +95524,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/doityourself/Canadian Tire": {
+                "tags": {
+                    "name": "Canadian Tire",
+                    "shop": "doityourself"
+                },
+                "name": "Canadian Tire",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/doityourself/Leroy Merlin": {
                 "tags": {
                     "name": "Leroy Merlin",
@@ -95154,25 +95771,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/doityourself/Хозтовары": {
-                "tags": {
-                    "name": "Хозтовары",
-                    "shop": "doityourself"
-                },
-                "name": "Хозтовары",
-                "icon": "shop",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "address",
-                    "building_area",
-                    "opening_hours"
-                ],
-                "suggestion": true
-            },
             "shop/doityourself/Стройматериалы": {
                 "tags": {
                     "name": "Стройматериалы",
@@ -95342,6 +95940,42 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/car/Citroen": {
+                "tags": {
+                    "name": "Citroen",
+                    "shop": "car"
+                },
+                "name": "Citroen",
+                "icon": "car",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
+            "shop/car/Renault": {
+                "tags": {
+                    "name": "Renault",
+                    "shop": "car"
+                },
+                "name": "Renault",
+                "icon": "car",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/car/Mercedes-Benz": {
                 "tags": {
                     "name": "Mercedes-Benz",
@@ -95378,6 +96012,24 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/car/Ford": {
+                "tags": {
+                    "name": "Ford",
+                    "shop": "car"
+                },
+                "name": "Ford",
+                "icon": "car",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/car/Volkswagen": {
                 "tags": {
                     "name": "Volkswagen",
@@ -95450,6 +96102,24 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/car/Автозапчасти": {
+                "tags": {
+                    "name": "Автозапчасти",
+                    "shop": "car"
+                },
+                "name": "Автозапчасти",
+                "icon": "car",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/car/Opel": {
                 "tags": {
                     "name": "Opel",
@@ -95558,6 +96228,24 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/car/Peugeot": {
+                "tags": {
+                    "name": "Peugeot",
+                    "shop": "car"
+                },
+                "name": "Peugeot",
+                "icon": "car",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/car/Hyundai": {
                 "tags": {
                     "name": "Hyundai",
@@ -96105,25 +96793,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
-            "shop/clothes/Deichmann": {
-                "tags": {
-                    "name": "Deichmann",
-                    "shop": "clothes"
-                },
-                "name": "Deichmann",
-                "icon": "clothing-store",
-                "geometry": [
-                    "point",
-                    "vertex",
-                    "area"
-                ],
-                "fields": [
-                    "address",
-                    "building_area",
-                    "opening_hours"
-                ],
-                "suggestion": true
-            },
             "shop/clothes/Lindex": {
                 "tags": {
                     "name": "Lindex",
@@ -98404,6 +99073,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/pet/Fressnapf": {
+                "tags": {
+                    "name": "Fressnapf",
+                    "shop": "pet"
+                },
+                "name": "Fressnapf",
+                "icon": "dog-park",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/pet/PetSmart": {
                 "tags": {
                     "name": "PetSmart",
@@ -98499,6 +99187,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/shoes/Deichmann": {
+                "tags": {
+                    "name": "Deichmann",
+                    "shop": "shoes"
+                },
+                "name": "Deichmann",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/shoes/Reno": {
                 "tags": {
                     "name": "Reno",
@@ -99810,6 +100517,25 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "suggestion": true
             },
+            "shop/hardware/Хозтовары": {
+                "tags": {
+                    "name": "Хозтовары",
+                    "shop": "hardware"
+                },
+                "name": "Хозтовары",
+                "icon": "shop",
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "suggestion": true
+            },
             "shop/motorcycle/Yamaha": {
                 "tags": {
                     "name": "Yamaha",
@@ -99862,7 +100588,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "point"
             ],
             "vertex": [
-                "highway/crossing",
+                "highway/crosswalk",
                 "railway/level_crossing",
                 "highway/traffic_signals",
                 "highway/turning_circle",
@@ -99872,8 +100598,8 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
             ],
             "relation": [
                 "category-route",
+                "category-restriction",
                 "type/boundary",
-                "type/restriction",
                 "type/multipolygon",
                 "relation"
             ]
@@ -99948,6 +100674,21 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "railway/abandoned"
                 ]
             },
+            "category-restriction": {
+                "geometry": "relation",
+                "name": "Restriction",
+                "icon": "restriction",
+                "members": [
+                    "type/restriction/no_left_turn",
+                    "type/restriction/no_right_turn",
+                    "type/restriction/no_straight_on",
+                    "type/restriction/no_u_turn",
+                    "type/restriction/only_left_turn",
+                    "type/restriction/only_right_turn",
+                    "type/restriction/only_straight_on",
+                    "type/restriction"
+                ]
+            },
             "category-road": {
                 "geometry": "line",
                 "name": "Road",
@@ -100336,6 +101077,11 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "type": "typeCombo",
                 "label": "Type"
             },
+            "except": {
+                "key": "except",
+                "type": "combo",
+                "label": "Exceptions"
+            },
             "fax": {
                 "key": "fax",
                 "type": "tel",
@@ -100586,13 +101332,27 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
             "oneway": {
                 "key": "oneway",
                 "type": "check",
-                "label": "One Way"
+                "label": "One Way",
+                "strings": {
+                    "options": {
+                        "undefined": "Assumed to be No",
+                        "yes": "Yes",
+                        "no": "No"
+                    }
+                }
             },
             "oneway_yes": {
                 "key": "oneway",
                 "type": "check",
                 "default": "yes",
-                "label": "One Way"
+                "label": "One Way",
+                "strings": {
+                    "options": {
+                        "undefined": "Assumed to be Yes",
+                        "yes": "Yes",
+                        "no": "No"
+                    }
+                }
             },
             "opening_hours": {
                 "key": "opening_hours",
@@ -100732,6 +101492,15 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "type": "combo",
                 "label": "Type"
             },
+            "restrictions": {
+                "type": "restrictions",
+                "geometry": "vertex",
+                "icon": "restrictions",
+                "reference": {
+                    "rtype": "restriction"
+                },
+                "label": "Turn Restrictions"
+            },
             "route": {
                 "key": "route",
                 "type": "combo",
@@ -112794,6 +113563,48 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 920,
                 25
             ]
+        },
+        "restriction-no-straight-on": {
+            "relation": [
+                980,
+                25
+            ]
+        },
+        "restriction-no-u-turn": {
+            "relation": [
+                1040,
+                25
+            ]
+        },
+        "restriction-no-left-turn": {
+            "relation": [
+                1100,
+                25
+            ]
+        },
+        "restriction-no-right-turn": {
+            "relation": [
+                1160,
+                25
+            ]
+        },
+        "restriction-only-straight-on": {
+            "relation": [
+                1220,
+                25
+            ]
+        },
+        "restriction-only-left-turn": {
+            "relation": [
+                1280,
+                25
+            ]
+        },
+        "restriction-only-right-turn": {
+            "relation": [
+                1340,
+                25
+            ]
         }
     },
     "operations": {
@@ -112892,6 +113703,30 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
         "icon-operation-disabled-continue": [
             220,
             160
+        ],
+        "icon-restriction-yes": [
+            50,
+            80
+        ],
+        "icon-restriction-no": [
+            95,
+            80
+        ],
+        "icon-restriction-only": [
+            140,
+            80
+        ],
+        "icon-restriction-yes-u": [
+            185,
+            80
+        ],
+        "icon-restriction-no-u": [
+            230,
+            80
+        ],
+        "icon-restriction-only-u": [
+            275,
+            80
         ]
     },
     "locales": [
@@ -113140,6 +113975,18 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 },
                 "not_eligible": "Lines can't be split at their beginning or end.",
                 "multiple_ways": "There are too many lines here to split."
+            },
+            "restriction": {
+                "help": {
+                    "select": "Click to select a road segment.",
+                    "toggle": "Click to toggle turn restrictions.",
+                    "toggle_on": "Click to add a \"{restriction}\" restriction.",
+                    "toggle_off": "Click to remove the \"{restriction}\" restriction."
+                },
+                "annotation": {
+                    "create": "Added a turn restriction",
+                    "delete": "Deleted a turn restriction"
+                }
             }
         },
         "undo": {
@@ -113374,6 +114221,9 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "category-rail": {
                     "name": "Rail"
                 },
+                "category-restriction": {
+                    "name": "Restriction"
+                },
                 "category-road": {
                     "name": "Road"
                 },
@@ -113556,6 +114406,9 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "entrance": {
                     "label": "Type"
                 },
+                "except": {
+                    "label": "Exceptions"
+                },
                 "fax": {
                     "label": "Fax",
                     "placeholder": "+31 42 123 4567"
@@ -113701,10 +114554,20 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "label": "Type"
                 },
                 "oneway": {
-                    "label": "One Way"
+                    "label": "One Way",
+                    "options": {
+                        "undefined": "Assumed to be No",
+                        "yes": "Yes",
+                        "no": "No"
+                    }
                 },
                 "oneway_yes": {
-                    "label": "One Way"
+                    "label": "One Way",
+                    "options": {
+                        "undefined": "Assumed to be Yes",
+                        "yes": "Yes",
+                        "no": "No"
+                    }
                 },
                 "opening_hours": {
                     "label": "Hours"
@@ -113780,6 +114643,9 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "restriction": {
                     "label": "Type"
                 },
+                "restrictions": {
+                    "label": "Turn Restrictions"
+                },
                 "route": {
                     "label": "Type"
                 },
@@ -114076,6 +114942,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "name": "Doctor",
                     "terms": "doctor,doctor's office"
                 },
+                "amenity/dojo": {
+                    "name": "Dojo / Martial Arts Academy",
+                    "terms": "martial arts,dojo,dojang"
+                },
                 "amenity/drinking_water": {
                     "name": "Drinking Water",
                     "terms": "water fountain,potable water"
@@ -114662,6 +115532,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 },
                 "footway/crossing": {
                     "name": "Crossing",
+                    "terms": ""
+                },
+                "footway/crosswalk": {
+                    "name": "Crosswalk",
                     "terms": "crosswalk,zebra crossing"
                 },
                 "footway/sidewalk": {
@@ -114718,6 +115592,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 },
                 "highway/crossing": {
                     "name": "Crossing",
+                    "terms": ""
+                },
+                "highway/crosswalk": {
+                    "name": "Crosswalk",
                     "terms": "crosswalk,zebra crossing"
                 },
                 "highway/cycleway": {
@@ -114741,7 +115619,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "terms": ""
                 },
                 "highway/motorway_junction": {
-                    "name": "Motorway Junction",
+                    "name": "Motorway Junction / Exit",
                     "terms": ""
                 },
                 "highway/motorway_link": {
@@ -115053,7 +115931,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "terms": ""
                 },
                 "leisure/sports_center": {
-                    "name": "Sports Center",
+                    "name": "Sports Center / Gym",
                     "terms": "gym"
                 },
                 "leisure/stadium": {
@@ -115792,6 +116670,34 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "name": "Restriction",
                     "terms": ""
                 },
+                "type/restriction/no_left_turn": {
+                    "name": "No Left Turn",
+                    "terms": ""
+                },
+                "type/restriction/no_right_turn": {
+                    "name": "No Right Turn",
+                    "terms": ""
+                },
+                "type/restriction/no_straight_on": {
+                    "name": "No Straight On",
+                    "terms": ""
+                },
+                "type/restriction/no_u_turn": {
+                    "name": "No U-turn",
+                    "terms": ""
+                },
+                "type/restriction/only_left_turn": {
+                    "name": "Left Turn Only",
+                    "terms": ""
+                },
+                "type/restriction/only_right_turn": {
+                    "name": "Right Turn Only",
+                    "terms": ""
+                },
+                "type/restriction/only_straight_on": {
+                    "name": "No Turns",
+                    "terms": ""
+                },
                 "type/route": {
                     "name": "Route",
                     "terms": ""
index 00c922b757c8c414452ff2eeb09af1bdd5d0f42e..47f1d6e30c30e7dad2567653c9334cfcc2284a2d 100644 (file)
Binary files a/vendor/assets/iD/iD/img/relation-presets.png and b/vendor/assets/iD/iD/img/relation-presets.png differ
index f9394841434046d44207e6571dbc1af9a328806d..e6c15a29beb15d6853531db76bcc90ad15b7fcf6 100644 (file)
      inkscape:window-width="1440"
      inkscape:window-height="856"
      id="namedview392"
-     showgrid="false"
-     inkscape:zoom="11.313708"
-     inkscape:cx="19.712517"
-     inkscape:cy="454.54715"
-     inkscape:window-x="298"
-     inkscape:window-y="6"
+     showgrid="true"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="186.53252"
+     inkscape:cy="447.46176"
+     inkscape:window-x="276"
+     inkscape:window-y="71"
      inkscape:window-maximized="0"
      inkscape:current-layer="svg12393"
-     showguides="false"
+     showguides="true"
      inkscape:guide-bbox="true"
      inkscape:snap-global="true"
      inkscape:snap-bbox="true"
      inkscape:snap-bbox-midpoints="true"
-     inkscape:snap-nodes="false">
+     inkscape:snap-nodes="true">
     <inkscape:grid
        type="xygrid"
        id="grid6326"
        visible="true"
        enabled="true"
        snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       position="0,0"
+       orientation="0,800"
+       id="guide4211" />
+    <sodipodi:guide
+       position="800,0"
+       orientation="-560,0"
+       id="guide4213" />
+    <sodipodi:guide
+       position="800,560"
+       orientation="0,-800"
+       id="guide4215" />
+    <sodipodi:guide
+       position="0,560"
+       orientation="560,0"
+       id="guide4217" />
   </sodipodi:namedview>
   <defs
      id="defs12395">
      transform="matrix(0,1,-1,0,0,0)"
      rx="0.5"
      ry="0.5" />
+  <g
+     id="g3360"
+     transform="matrix(0,1,-1,0,45,203)">
+    <path
+       sodipodi:nodetypes="ssccccccsscccccss"
+       inkscape:connector-curvature="0"
+       id="path12182"
+       d="m -111,-49 c -2,0 -3.2899,1.14974 -4,2 l -7.03125,8.41907 c -1.27939,1.51205 -1.17862,4.00251 0.21875,5.40625 l 1,1 c 0.73414,0.74243 1.76843,1.17913 2.8125,1.1875 l 0,4.375 c -2.98748,2.1875 -4.99995,5.67161 -5,9.625 6e-5,6.58002 5.41995,11.98722 12,11.98718 6.58003,10e-6 12,-5.40714 12,-11.98718 -1e-5,-3.96861 -1.99295,-7.47078 -5,-9.65625 l 0,-4.34375 c 1.05451,-1.8e-4 2.10227,-0.43771 2.84375,-1.1875 l 1,-1 c 1.39737,-1.40374 1.49814,-3.8942 0.21875,-5.40625 L -107,-47 c -0.77221,-0.92054 -2,-2 -4,-2 z"
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    <path
+       sodipodi:nodetypes="ccccccssccccc"
+       inkscape:connector-curvature="0"
+       id="path12188"
+       d="m -111,-45 -8,9.01282 1,1 4,0 0,10.59375 c -2.92023,1.19221 -4.99998,4.05725 -5,7.40625 4e-5,4.41829 3.58172,7.98721 8,7.98718 4.41827,10e-6 8,-3.5689 8,-7.98718 2e-5,-3.36351 -2.05966,-6.25472 -5,-7.4375 l 0,-10.5625 4,0 1,-1 z"
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#8cd05f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000000000000000;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path12196"
+       d="m -110.98512,-19.99704 c 1.65685,0 3,1.34313 2.99999,3.00001 -1e-5,1.65687 -1.34312,3 -2.99999,3.00002 -1.65687,-3e-5 -2.99999,-1.34314 -2.99999,-3.00001 -10e-6,-1.6569 1.34312,-3 2.99999,-3.00002 z"
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+  </g>
+  <g
+     id="g4219">
+    <path
+       sodipodi:nodetypes="ssccccccsscccccss"
+       inkscape:connector-curvature="0"
+       id="path12182-9"
+       d="m 139,92 c 0,-2 -1.14974,-3.2899 -2,-4 l -8.41907,-7.03125 c -1.51205,-1.27939 -4.00251,-1.17862 -5.40625,0.21875 l -1,1 c -0.74243,0.73414 -1.17913,1.76843 -1.1875,2.8125 l -4.375,0 c -2.1875,-2.98748 -5.67161,-4.99995 -9.625,-5 -6.58002,6e-5 -11.98722,5.41995 -11.98718,12 -1e-5,6.58003 5.40714,12 11.98718,12 3.96861,-1e-5 7.47078,-1.99295 9.65625,-5 l 4.34375,0 c 1.8e-4,1.05451 0.43771,2.10227 1.1875,2.84375 l 1,1 c 1.40374,1.39737 3.8942,1.49814 5.40625,0.21875 L 137,96 c 0.92054,-0.77221 2,-2 2,-4 z"
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    <path
+       sodipodi:nodetypes="ccccccssccccc"
+       inkscape:connector-curvature="0"
+       id="path12188-3"
+       d="m 135,92 -9.01282,-8 -1,1 0,4 -10.59375,0 c -1.19221,-2.92023 -4.05725,-4.99998 -7.40625,-5 -4.41829,4e-5 -7.98721,3.58172 -7.98718,8 -1e-5,4.41827 3.5689,8 7.98718,8 3.36351,2e-5 6.25472,-2.05966 7.4375,-5 l 10.5625,0 0,4 1,1 z"
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#e06d5f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000000000000000;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    <path
+       sodipodi:nodetypes="ccccccccc"
+       inkscape:connector-curvature="0"
+       id="rect10944"
+       d="m 109,88 0,8 -1,1 -2,0 -1,-1 0,-8 1,-1 2,0 z"
+       style="opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  </g>
+  <g
+     id="g4190"
+     transform="matrix(0,1,1,0,116.9905,-80.00893)">
+    <path
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+       d="m 156,80 c -8.78916,1e-5 -16,7.21083 -16,16 1e-5,8.78916 7.21083,16 16,16 8.78916,-1e-5 16,-7.21083 16,-16 -1e-5,-8.78916 -7.21083,-16 -16,-16 z"
+       id="path4163"
+       transform="matrix(0,1,1,0,80.00893,-71.9905)"
+       inkscape:connector-curvature="0" />
+    <path
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#8cd05f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+       d="m 176.00893,72.0095 c -6.62739,0 -11.99999,5.37261 -12,12 0,6.62739 5.37261,11.99999 12,12 6.62739,0 11.99999,-5.37261 12,-12 0,-6.62739 -5.37261,-11.99999 -12,-12 z"
+       id="path11970"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cccccccccccccccccccccc"
+       d="m 184.00894,85.00953 -2.99999,-4e-5 -3e-5,-2.99998 -0.99997,-2.00006 -1.00001,-0.99998 -2.00002,-0.99997 -3.00003,3e-5 -1.99994,0.99998 -1.00004,0.99999 -0.99998,2.00003 -1e-5,4.99996 1.00004,1.00001 0.99996,1e-5 1,-1 2e-5,-4.99996 0.99999,-1.00004 2.99997,0 1.00003,0.99999 -1e-5,3 -3.00003,-3e-5 4.50003,5.00003 z"
+       id="path2997-6-6"
+       style="opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     id="g4206"
+     transform="matrix(0,1,1,0,167,-115)">
+    <path
+       sodipodi:nodetypes="sssss"
+       inkscape:connector-curvature="0"
+       id="path13862"
+       d="m 211,63 c -8.78917,0 -16.00001,7.21082 -16,16 0,8.78917 7.21082,16.00001 16,16 8.78917,0 16.00001,-7.21082 16,-16 0,-8.78917 -7.21082,-16.00001 -16,-16 z"
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path12055"
+       d="m 211,67 c -6.62739,0 -12.00001,5.37261 -12,12 0,6.62739 5.37261,12.00001 12,12 6.62739,0 12.00001,-5.37261 12,-12 0,-6.62739 -5.37261,-12.00001 -12,-12 z"
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#e06d5f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path12057"
+       d="m 215.5,72.13782 -5,5 -2,2 -4,4 0,1 1,1 1,0 4,-4 2,-2 5,-5 0,-1 -1,-1 -1,0 z m -6.5,0.875 -2,1 -1,1 -1,2 0,4.1875 2.78125,-2.78125 0.21875,-0.21875 0,-1.1875 1,-1 1.1875,0 2.59375,-2.59375 L 212,73.01282 l -3,0 z m 7,4.03125 -2.78125,2.78125 -0.21875,0.1875 -1.5625,1.59375 3.0625,3.40625 4.5,-5 -3,0 0,-2.96875 z"
+       style="opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+  </g>
+  <g
+     transform="matrix(0,1,-1,0,135,203)"
+     id="g3350">
+    <path
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+       d="m -111,-49 c -2,0 -3.2899,1.14974 -4,2 l -7.03125,8.41907 c -1.27939,1.51205 -1.17862,4.00251 0.21875,5.40625 l 1,1 c 0.73414,0.74243 1.76843,1.17913 2.8125,1.1875 l 0,4.375 c -2.98748,2.1875 -4.99995,5.67161 -5,9.625 6e-5,6.58002 5.41995,11.98722 12,11.98718 6.58003,10e-6 12,-5.40714 12,-11.98718 -1e-5,-3.96861 -1.99295,-7.47078 -5,-9.65625 l 0,-4.34375 c 1.05451,-1.8e-4 2.10227,-0.43771 2.84375,-1.1875 l 1,-1 c 1.39737,-1.40374 1.49814,-3.8942 0.21875,-5.40625 L -107,-47 c -0.77221,-0.92054 -2,-2 -4,-2 z"
+       id="path3352"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ssccccccsscccccss" />
+    <path
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+       d="m -111,-45 -8,9.01282 1,1 4,0 0,10.59375 c -2.92023,1.19221 -4.99998,4.05725 -5,7.40625 4e-5,4.41829 3.58172,7.98721 8,7.98718 4.41827,10e-6 8,-3.5689 8,-7.98718 2e-5,-3.36351 -2.05966,-6.25472 -5,-7.4375 l 0,-10.5625 4,0 1,-1 z"
+       id="path3354"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccssccccc" />
+    <path
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+       d="m -110.98512,-19.99704 c 1.65685,0 3,1.34313 2.99999,3.00001 -1e-5,1.65687 -1.34312,3 -2.99999,3.00002 -1.65687,-3e-5 -2.99999,-1.34314 -2.99999,-3.00001 -10e-6,-1.6569 1.34312,-3 2.99999,-3.00002 z"
+       id="path3356"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:10px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-indent:0;text-align:center;text-decoration:none;line-height:150%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:middle;baseline-shift:baseline;opacity:0.50000000000000000;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Open Sans;-inkscape-font-specification:Open Sans Bold"
+     x="254.91199"
+     y="126.18999"
+     id="text3358"
+     sodipodi:linespacing="150%"><tspan
+       sodipodi:role="line"
+       id="tspan3360"
+       x="254.91199"
+       y="126.18999">ONLY</tspan></text>
+  <g
+     id="g4190-7"
+     transform="matrix(0,1,1,0,206.9905,-80.00893)">
+    <path
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+       d="m 156,80 c -8.78916,1e-5 -16,7.21083 -16,16 1e-5,8.78916 7.21083,16 16,16 8.78916,-1e-5 16,-7.21083 16,-16 -1e-5,-8.78916 -7.21083,-16 -16,-16 z"
+       id="path4163-9"
+       transform="matrix(0,1,1,0,80.00893,-71.9905)"
+       inkscape:connector-curvature="0" />
+    <path
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#7092ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25000000000000000;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+       d="m 176.00893,72.0095 c -6.62739,0 -11.99999,5.37261 -12,12 0,6.62739 5.37261,11.99999 12,12 6.62739,0 11.99999,-5.37261 12,-12 0,-6.62739 -5.37261,-11.99999 -12,-12 z"
+       id="path11970-3"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="cccccccccccccccccccccc"
+       d="m 184.00894,85.00953 -2.99999,-4e-5 -3e-5,-2.99998 -0.99997,-2.00006 -1.00001,-0.99998 -2.00002,-0.99997 -3.00003,3e-5 -1.99994,0.99998 -1.00004,0.99999 -0.99998,2.00003 -1e-5,4.99996 1.00004,1.00001 0.99996,1e-5 1,-1 2e-5,-4.99996 0.99999,-1.00004 2.99997,0 1.00003,0.99999 -1e-5,3 -3.00003,-3e-5 4.50003,5.00003 z"
+       id="path2997-6-6-8"
+       style="opacity:0.5;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       inkscape:connector-curvature="0" />
+  </g>
 </svg>
index bc998f146ade35b0bc55d9e33a641f485d0ee65f..30b0a651c87f8b1a6da9ea58cd6234a7a020be98 100644 (file)
             "highway/motorway": {
                 "name": "Snelweg"
             },
-            "highway/motorway_junction": {
-                "name": "Snelwegkruising"
-            },
             "highway/motorway_link": {
                 "name": "Snelwegaansluiting"
             },
index d033b5045bc5d3d239c46dabaa07c193b8e75436..3822b146df3df5479bf2ac8a83c9a26499b3dfa0 100644 (file)
                 "name": "طريق سريع",
                 "terms": "طريق سريع"
             },
-            "highway/motorway_junction": {
-                "name": "مفرق طريق سريع",
-                "terms": "مفرق طريق سريع"
-            },
             "highway/motorway_link": {
                 "name": "رابط لطريق سريع",
                 "terms": "رابط لطريق سريع"
                 "name": "مزلقة سفن",
                 "terms": "مزلقة سفن"
             },
-            "leisure/sports_center": {
-                "name": "مركز رياضة",
-                "terms": "مركز رياضي، مركز للتسلية والترفيه"
-            },
             "leisure/stadium": {
                 "name": "مدرج رياضي",
                 "terms": "مدرج, مدرج للألعاب الرياضية, أستاذ رياضي"
index 95d79368c79883b3ba0759c6a32e6ee67708ad36..0eb143cb734c53aa0fb0e209c82595ce1c1affb1 100644 (file)
             "highway/motorway": {
                 "name": "Autopista"
             },
-            "highway/motorway_junction": {
-                "name": "Xunión d'autopista"
-            },
             "highway/motorway_link": {
                 "name": "Enllaz d'autopista",
                 "terms": "Salida, accesu, enllaz, autopista"
             "leisure/slipway": {
                 "name": "Rampla de botadura"
             },
-            "leisure/sports_center": {
-                "name": "Centru deportivu",
-                "terms": "Polideportivu, Pabellón deportivu"
-            },
             "leisure/stadium": {
                 "name": "Estadiu"
             },
index 1a443427d494e01bbff40e31613eafa2a5f97c5a..ee31e69a0118983df534114c49ff3da7a1f68493 100644 (file)
             "highway/motorway": {
                 "name": "Автомагистрала"
             },
-            "highway/motorway_junction": {
-                "name": "Автомагистрален пътен възел"
-            },
             "highway/motorway_link": {
                 "name": "Автомагистрална връзка"
             },
index f8938d9e47294e9c1360f506e70737665e49b8ec..f3947e3dd18fa521a85e2f095c55462a5cab54cd 100644 (file)
                 "name": "Autoput",
                 "terms": "autoput,autocesta"
             },
-            "highway/motorway_junction": {
-                "name": "Čvorište autoputa",
-                "terms": "čvorište autoceste,čvorište autoputa"
-            },
             "highway/motorway_link": {
                 "name": "Poveznica na autoput",
                 "terms": "poveznica na autoput,poveznica na autocestu"
                 "name": "Navoz",
                 "terms": "navoz,navoz na šine"
             },
-            "leisure/sports_center": {
-                "name": "Sportski centar",
-                "terms": "sportski centar,centar za sport, centar za sportske aktivnosti"
-            },
             "leisure/stadium": {
                 "name": "Stadion",
                 "terms": "stadion,sportsko borilište"
index 5d279934dd01f0063d0e0df29030f7104a43b9ce..f91bc3b6f8930b3e22adf6867fa5b85eeedd91d7 100644 (file)
@@ -2,28 +2,28 @@
     "modes": {
         "add_area": {
             "title": "Àrea",
-            "description": "Afegeix parcs, edificis, llacs o altres tipus d'àrees sobre el mapa.",
-            "tail": "Feu clic sobre el mapa per començar a un tipus d'àrea com per exemple un parc, un llac o un edifici."
+            "description": "Afegiu parcs, edificis, llacs o altres tipus d'àrees sobre el mapa.",
+            "tail": "Féu clic sobre el mapa per començar a un tipus d'àrea com per exemple un parc, un llac o un edifici."
         },
         "add_line": {
             "title": "Línia",
-            "description": "Afegeix autopistes, carrers, camins per a vianants o d'altres tipus de línies sobre el mapa.",
-            "tail": "Feu clic sobre el mapa per a començar a dibuixar una carretera, un camí o una ruta."
+            "description": "Afegiu autopistes, carrers, camins per a vianants o d'altres tipus de línies sobre el mapa.",
+            "tail": "Féu clic sobre el mapa per a començar a dibuixar una carretera, un camí o una ruta."
         },
         "add_point": {
             "title": "Punt",
-            "description": "Afegeix restaurants, monuments, bústies de correus o altres punts al mapa.",
+            "description": "Afegiu restaurants, monuments, bústies de correus o altres punts al mapa.",
             "tail": "Cliqueu al mapa per afegir un punt."
         },
         "browse": {
             "title": "Navega",
-            "description": "Allunya o amplia el mapa"
+            "description": "Allunyeu o amplieu el mapa"
         },
         "draw_area": {
-            "tail": "Feu clic per afegir nodes a la vostra àrea. Feu clic al primer node per finalitzar l'àrea."
+            "tail": "Féu clic per afegir nodes a la vostra àrea. Féu clic al primer node per finalitzar l'àrea."
         },
         "draw_line": {
-            "tail": "Feu clic per afegir més nodes a la línia. Feu clic a altres línies per connectar amb elles, i feu doble clic per acabar la línia."
+            "tail": "Féu clic per afegir més nodes a la línia. Féu clic a altres línies per connectar amb elles, i feu doble clic per acabar la línia."
         }
     },
     "operations": {
@@ -61,7 +61,7 @@
             "annotation": "Heu canviat etiquetes."
         },
         "circularize": {
-            "title": "Fes-ho circular",
+            "title": "Féu-ho circular",
             "description": {
                 "line": "Fes aquesta línia circular",
                 "area": "Fes aquesta àrea circular"
@@ -96,8 +96,8 @@
             "too_bendy": "Això no es pot quadrar perquè és massa sinuós."
         },
         "delete": {
-            "title": "Suprimeix",
-            "description": "Elimina això del mapa.",
+            "title": "Eliminar",
+            "description": "Elimineu això del mapa.",
             "annotation": {
                 "point": "Heu eliminat un punt.",
                 "vertex": "Heu eliminat un node d'una via.",
             }
         },
         "disconnect": {
-            "title": "Desconnecta",
-            "description": "Desconnecta aquestes línies/àrees entre elles.",
+            "title": "Desconnectar",
+            "description": "Desconnecteu aquestes línies/àrees entre elles.",
             "key": "D",
             "annotation": "Heu desconnectat línies/àrees.",
             "not_connected": "Aquí no hi han suficients línies/àrees a desconnectar."
         },
         "merge": {
-            "title": "Fusiona",
-            "description": "Fusiona aquestes línies.",
+            "title": "Fusionar",
+            "description": "Fusioneu aquestes línies.",
             "key": "C",
             "annotation": "Heu fusionat {n} línies.",
             "not_eligible": "Aquestes característiques no poden ser fusionades.",
             "incomplete_relation": "Aquestes característiques no poden ser fusionades perquè com a mínim una no s'ha descarregat del tot."
         },
         "move": {
-            "title": "Mou",
-            "description": "Mou això a una ubicació diferent.",
+            "title": "Moure",
+            "description": "Moveu això a una ubicació diferent.",
             "key": "M",
             "annotation": {
                 "point": "Heu mogut un punt.",
         },
         "rotate": {
             "title": "Girar-ho",
-            "description": "Girar aquest objecte al voltant del seu centre",
+            "description": "Gireu aquest objecte al voltant del seu centre",
             "key": "R",
             "annotation": {
                 "line": "Heu girat una línia.",
             }
         },
         "reverse": {
-            "title": "Reverteix",
-            "description": "Fes que aquesta línia vagi en direcció contrària.",
+            "title": "Revertir",
+            "description": "Féu que aquesta línia vagi en direcció contrària.",
             "key": "V",
             "annotation": "Heu revertit una línia."
         },
         "split": {
-            "title": "Divideix",
+            "title": "Dividir",
             "description": {
                 "line": "Dividiu aquesta línia en dos en aquest node.",
                 "area": "Divideix el límit d'aquesta àrea en dues parts.",
             },
             "not_eligible": "Les línies no es poden dividir al seu inici o al seu final.",
             "multiple_ways": "Aquí hi ha masses línies a dividir."
+        },
+        "restriction": {
+            "help": {
+                "select": "Cliqueu per seleccionar un segment de carretera",
+                "toggle": "Féu clic per canviar les restriccions de gir",
+                "toggle_on": "Féu clic per afegir una restricció de \"{restriction}\"",
+                "toggle_off": "Féu clic per eliminar una restricció de \"{restriction}\""
+            },
+            "annotation": {
+                "create": "Heu afegit una restricció de gir",
+                "delete": "Heu eliminat una restricció de gir"
+            }
         }
     },
     "undo": {
         "nothing": "Res a refer."
     },
     "tooltip_keyhint": "Drecera:",
-    "browser_notice": "Aquest editor és compatible amb Firefox, Chrome, Safari, Opera i Internet Explorer 9 o superior.\nSiusplau actualitza el teu navegador o bé fes servir Potlach 2 per editar el mapa.",
+    "browser_notice": "Aquest editor és compatible amb Firefox, Chrome, Safari, Opera i Internet Explorer 9 o superior.\nSi us plau actualitzeu el vostre navegador o bé féu servir Potlach 2 per editar el mapa.",
     "translate": {
         "translate": "Traduïu",
         "localized_translation_label": "Nom multilingüe",
         "localized_translation_language": "Escull l'idioma",
         "localized_translation_name": "Nom"
     },
-    "zoom_in_edit": "Apropa't més per editar",
-    "logout": "Tanca la sessió",
+    "zoom_in_edit": "Apropeu-vos més per editar",
+    "logout": "Tancar la sessió",
     "loading_auth": "Connectant a OpenStreetMap...",
-    "report_a_bug": "Reporta un error",
+    "report_a_bug": "Reportar un error",
     "status": {
         "error": "No es pot connectar amb l'API.",
         "offline": "l'API està fora de línia. Siusplau proveu d'editar més tard.",
         "readonly": "L'API es troba en mode només lectura. Us haureu d'esperar per desar els vostres canvis."
     },
     "commit": {
-        "title": "Desa els canvis",
-        "description_placeholder": "Breu descripció de les teves contribucions",
-        "message_label": "Afegeix un comentari",
-        "upload_explanation": "Els canvis que desis seran visibles a tots els maps que utilitzin dades d'OpenStreetMap.",
+        "title": "Desar els canvis",
+        "description_placeholder": "Breu descripció de les vostres contribucions",
+        "message_label": "Afegiu un comentari",
+        "upload_explanation": "Els canvis que deseu seran visibles a tots els mapes que utilitzin dades d'OpenStreetMap.",
         "upload_explanation_with_user": "Els canvis que desis com a {user} seran visibles en tots els mapes que utilitzin dades d'OpenStreetMap.",
-        "save": "Desa",
-        "cancel": "Cancel·la",
+        "save": "Desar",
+        "cancel": "Cancel·lar",
         "warnings": "Avisos",
         "modified": "Modificat",
-        "deleted": "Suprimit",
+        "deleted": "Eliminat",
         "created": "Creat"
     },
     "contributors": {
         "no_results_worldwide": "No s'han trobat resultats"
     },
     "geolocate": {
-        "title": "Mostra la meva ubicació"
+        "title": "Mostrar la meva ubicació"
     },
     "inspector": {
         "no_documentation_combination": "No hi ha documentació per a aquesta combinació d'etiquetes",
         "no_documentation_key": "No hi ha documentació per a aquesta clau",
-        "show_more": "Mostra'n més",
-        "view_on_osm": "Mostra-ho a openstreetmap.org",
+        "show_more": "Mostrar-ne més",
+        "view_on_osm": "Mostrar-ho a openstreetmap.org",
         "all_tags": "Totes les etiquetes",
         "all_members": "Tots els membres",
         "all_relations": "Totes les relacions",
         "role": "Rol",
         "choose": "Seleccioneu un tipus de característica",
         "results": "{n} resultats per {search}",
-        "reference": "Mostra-ho al wiki de l'OpenStreetMap",
-        "back_tooltip": "Canvia la característica",
+        "reference": "Mostrar-ho al wiki de l'OpenStreetMap",
+        "back_tooltip": "Canviar la característica",
         "remove": "Elimina",
         "search": "Cerca",
         "multiselect": "Els ítems seleccionats",
         "custom_button": "Editar el fons personalitzat",
         "custom_prompt": "Introduïu una plantilla d'URL de casella. Els paràmetres vàlids són {z}, {x}, {y} per a l'esquema Z/X/Y i  {u} per a l'esquema quadtile.",
         "fix_misalignment": "Corregir la alineació",
-        "reset": "reinicia"
+        "reset": "reiniciar"
     },
     "restore": {
-        "heading": "Tens canvis sense desar",
-        "description": "Vols restaurar els canvis no desats de la sessió anterior?",
-        "restore": "Restaura",
-        "reset": "Reinicia"
+        "heading": "Teniu canvis sense desar",
+        "description": "Voleu restaurar els canvis no desats de la sessió anterior?",
+        "restore": "Restaurar",
+        "reset": "Reiniciar"
     },
     "save": {
-        "title": "Desa",
-        "help": "Desa els canvis a OpenStreetMap, fent-los visibles per als altres usuaris.",
+        "title": "Desar",
+        "help": "Deseu els canvis a OpenStreetMap, fent-los visibles per als altres usuaris.",
         "no_changes": "No hi ha canvis a desar.",
-        "error": "Ha hagut un error en intentar desar",
+        "error": "Hi ha hagut un error en intentar desar",
         "uploading": "Pujant els canvis a l'OpenStreetMap.",
-        "unsaved_changes": "Tens canvis sense desar."
+        "unsaved_changes": "Teniu canvis sense desar."
     },
     "success": {
         "edited_osm": "Heu editat l'OSM!",
     "splash": {
         "welcome": "Benvinguts a l'editor iD per a l'OpenStreetMap",
         "text": "L'editor iD és una eina fàcil i potent per contribuir al millor mapa lliure del món. Aquesta és la versió {version}. Per obtenir més informació visiteu {website} i si voleu comunicar l'existència d'algun error feu-ho a {github}.",
-        "walkthrough": "Comença la visita guiada",
-        "start": "Edita'l ara"
+        "walkthrough": "Comenceu la visita guiada",
+        "start": "Editeu-lo ara"
     },
     "source_switch": {
         "live": "directe",
         "used_with": "utilitzat amb {type}"
     },
     "validations": {
-        "untagged_point": "Punt sense etiquetat",
+        "untagged_point": "Punt sense etiquetar",
         "untagged_line": "Línia sense etiquetar",
         "untagged_area": "Àrea sense etiquetar",
-        "many_deletions": "Esteu eliminant {n} objectes. Esteu segurs que voleu fer-ho? Això els eliminarà dels mapa que tothom veu a openstreetmap.org",
+        "many_deletions": "Esteu eliminant {n} objectes. Esteu segurs que voleu fer-ho? Això els eliminarà dels mapes que tothom veu a openstreetmap.org",
         "tag_suggests_area": "L'etiqueta {tag} suggereix que la línia hauria de ser una àrea, però no és una àrea",
         "untagged_tooltip": "Seleccioneu un tipus de característica que descrigui el que és aquesta {geometry}.",
         "deprecated_tags": "Etiquetes obsoletes : {tags}"
     },
     "zoom": {
-        "in": "Apropa't",
-        "out": "Allunya't"
+        "in": "Apropar-se",
+        "out": "Allunyar-se"
     },
     "cannot_zoom": "No es pot allunyar més la vista al mode actual.",
     "gpx": {
     "help": {
         "title": "Ajuda",
         "help": "# Ajuda\n\nAixò és un editor per al [OpenStreetMap](http://www.openstreetmap.org/), el mapa lliure i editable del món. Podeu utilitzar-lo per afegir i actualitzar\nles dades a la vostra àrea, contibuint així a fer un mapa de codi obert i amb dades lliures del món\nmillor per a tothom.\n\nLes edicions que feu en aquest mapa seran visibles per tothom que faci servir OpenStreetMap. per tal de començar a editar, necessitareu un\n[compte gratuït d'OpenStreetMap](https://www.openstreetmap.org/user/new).\n\n L'[Editor iD](http://ideditor.com/) iés un projecte cooperatiu que té el [codi font\ndisponible a GitHub](https://github.com/openstreetmap/iD).\n",
-        "editing_saving": "# Edició i desat\n\nAquest editor està dissenyat per treballar principalment en línia, i hi has accedit mitjançant una pàgina web.\n\n### Selecció de característiques\n\nPer selecionar una característica del mapa, com ara una carretera o un punt d'interès, clica-hi a sobre. Això ressaltarà la característica, obrirà un panell amb els detalls sobre aquesta, i un menú amb les coses que hi pots fer .\n\nPots seleccionar múltiples característiques, prement la tecla 'Shift' i clicant-les per separat, o bé clicant i arrossegant el cursor. Això seleccionarà totes les característiques que englobi el requadre que es dibuixarà i permetrà modificar totes les característiques seleccionades en un sol cop.\n\n### Desant les edicions\n\nQuan facis canvis com ara editar carreteres, edificis, o llocs, aquests canvis es guarden localment fins que els desis al servidor. No et preocupis si comets algun error- pots desfer els canvis clicant el botó de desfer, i pots refer els canvis clicant el botó de refer.\n\nClica 'Desa' per acabar un grup d'edicions - per exemple, si has acabat de delimitar l'àrea d'una ciutat i vols començar a fer-ne una altra. Tindràs la oportunitat de revisar la feina feta,\ni l'editor proporcionarà suggeriments que et podràn ajudar\ni també mostrarà alertes si alguna cosa no està del tot bé als teus canvis.\n\nSi tot sembla correcte, pots escriure un breu comentari explicant el canvis\nque has fet, i clicar desa un altre cop per publicar els canvis\na [OpenStreetMap.org](http://www.openstreetmap.org/), on seràn visibles\nper a tots els altres usuaris i disponibles per a altres editors per refer-los o bé millorar-los.\n\nSi no pots acabar les teves edicions en una sessió, pots sortir de la finestra d'edició i tornar més tard (al mateix navegador i ordinador), i l'aplicació d'edició\npreguntarà si vols restaurar els canvis anteriors.\n",
-        "roads": "# Carreteres\n\nPots crear, ajustar i eliminar carreteres amb aquest editor. Les carreteres poden ser\nde molts tipus: pistes, autovies, camins, carrils bici, i molts més - tots els segments\nmés comuns han de ser cartografiables.\n\n### Selecció\n\nClica a la carretera per seleccionar-la. Al fer això els seus contorns es faran visibles, \ncom també un petit menú d'eines i una barra lateral que mostrarà més informació\nsobre la carretera.\n\n### Modificació\n\nDe vegades veuràs carreteres que no estan alineades amb la imatge del darrere \no amb una traça de GPS. Podeu ajustar aquestes carreteres per tal que estiguin al lloc\ncorrecte.\n\nPrimer clica a la carretera que vols canviar. Això la ressaltarà i mostrarà els punts de control\nque pots arrossegar a les ubicacions desitjades. Si el que\nvols és afegir nous punts per obtenir un grau de detall més alt, fes doble clic en una part de la carretera sense cap punt, i se'n afegirà un.\n\nSi la carretera es connecta amb una altra, però no ho reflecteix al mapa, \npots arrossegar un dels punts de control cap a l'altre carretera \nper tal d'unir-les. Fer que les carreteres es connectin és molt important \nper al mapa i essencial per proveir direccions per a la conducció.\n\nTambé pots clicar l'eina «Moure» o prémer la tecla «M» per moure la carretera sencera, tota de cop, i llavors clicar altra vegada per guardar aquest moviment.\n\n### Eliminació\n\nSi una carretera està totalment malament -pots apreciar que no existeix a la imatge per satèl·lit\ni a més a més, els veïns ens han confirmat que no existeix - la pots eliminar, cosa que la treurà del mapa. Vés amb molt de compte a l'hora d'eliminar característiques -\ncom ara altres edicions; els resultats podran ser vistos per tothom i moltes vegades la imatgeria per satèl·lit no està actualitzada, per tant la carretera es pot haver estat construida recentment.\n\nPots eliminar una carretera clicant-la, i llavors clicant la icona de la paperera o bé prement la tecla «Suprimir».\n\n### Creació\n\nHas trobat que en algun lloc hi hauria d'haver una carretera però no hi és? Clica la icona «Línia»\nal marge superior esquerre de la zona del mapa o bé prem la tecla «2» per començar a dibuixar\nuna línia.\n\nClica a l'inici de la carretera al mapa per començar a dibuixar. Si la carretera comença amb una bifurcació en una carretera existent, cliqueu al lloc a on connecten.\n\nA continuació clica a diferents punts al llarg de la carretera per tal que segueixi el traçat correcte, d'acord  amb la imatge del satèl·lit o la traça del GPS. Si la carretera que estàs dibuixant s'encreua amb una altra carretera, connecta-les clicant al punt d'intersecció. Quan acabis el dibuix, fes doble clic o prem «Retorn» del teclat.\n",
-        "gps": "# GPS\n\nLes dades de GPS són la font més fiable de dades per a l'OpenStreetMap. Aquest editor és compatible amb les taces locals - fitxers`.gpx`al teu ordinador local. Pots recollir \naquest tipus de traça GPS amb algunes aplicacions per a smartphones com també \ndispositius personals de GPS.\n\nPer a més informació sobre com recollir dades amb GPS, llegeix\n[Recollir dades amb GPS](http://learnosm.org/en/beginner/using-gps/).\n\nper fer servir una traça GPX per editar el mapa, arrossega i deixa el fitxer GPX a l'editor. \nSi es detecta, s'afegirà el mapa com una línia verda llampant. \nClica a 'Paràmetres de configuració del fons'  al cantó esquerre per activar,\ndesactivar, o per ajustar la vista a aquesta capa GPX.\n\nLa traça GPX no és pujada directament a OpenStreetMap - la millor manera de \nfer-la servir és dibuixar tu el mapa, fent-la servir com a guia per a les noves característiques que afegiràs. també les pots [pujar a l'OpenStreetMap] \n(http://www.openstreetmap.org/trace/create)\nperquè d'altres persones les utilitzin.\n",
+        "editing_saving": "# Edició i desat\n\nAquest editor està dissenyat per treballar principalment en línia, i hi heu accedit mitjançant una pàgina web.\n\n### Selecció de característiques\n\nPer selecionar una característica del mapa, com ara una carretera o un punt d'interès, cliqueu-hi a sobre. Això ressaltarà la característica, obrirà un panell amb els detalls sobre aquesta, i un menú amb les coses que hi podeu fer .\n\nPodeu seleccionar múltiples característiques, prement la tecla 'Shift' i clicant-les per separat, o bé clicant i arrossegant el cursor. Això seleccionarà totes les característiques que englobi el requadre que es dibuixarà i permetrà modificar totes les característiques seleccionades en un sol cop.\n\n### Desant les edicions\n\nQuan féu canvis com ara editar carreteres, edificis, o llocs, aquests canvis es desen localment fins que els deseu al servidor. No us preocupeu si cometeu algun error- podeu desfer els canvis clicant el botó de desfer, i podeu refer els canvis clicant el botó de refer.\n\nCliqueu 'Desa' per acabar un grup d'edicions - per exemple, si heu acabat de delimitar l'àrea d'una ciutat i voleu començar a fer-ne una altra. Tindreu la oportunitat de revisar la feina feta,\ni l'editor proporcionarà suggeriments que us podran ajudar\ni també mostrarà alertes si alguna cosa no està del tot bé als vostres canvis.\n\nSi tot sembla correcte, podeu escriure un breu comentari explicant el canvis\nque heu fet, i clicar desa un altre cop per publicar els canvis\na [OpenStreetMap.org](http://www.openstreetmap.org/), on seran visibles\nper a tots els altres usuaris i disponibles per a altres editors per refer-los o bé millorar-los.\n\nSi no podeu acabar les vostres edicions en una sessió, podeu sortir de la finestra d'edició i tornar més tard (al mateix navegador i ordinador), i l'aplicació d'edició\npreguntarà si voleu restaurar els canvis anteriors.\n",
+        "roads": "# Carreteres\n\nPodeu crear, ajustar i eliminar carreteres amb aquest editor. Les carreteres poden ser\nde molts tipus: pistes, autovies, camins, carrils bici, i molts més - tots els segments\nmés comuns han de ser cartografiables.\n\n### Selecció\n\nCliqueu a la carretera per seleccionar-la. Al fer això els seus contorns es faran visibles, \ncom també un petit menú d'eines i una barra lateral que mostrarà més informació\nsobre la carretera.\n\n### Modificació\n\nDe vegades veureu carreteres que no estan alineades amb la imatge del darrere \no amb una traça de GPS. Podeu ajustar aquestes carreteres per tal que estiguin al lloc\ncorrecte.\n\nPrimer cliqueu a la carretera que voleu canviar. Això la ressaltarà i mostrarà els punts de control\nque podeu arrossegar a les ubicacions desitjades. Si el que\nvoleu és afegir nous punts per obtenir un grau de detall més alt, féu doble clic en una part de la carretera sense cap punt, i se'n afegirà un.\n\nSi la carretera es connecta amb una altra, però no es reflecteix al mapa, \npodeu arrossegar un dels punts de control cap a l'altre carretera \nper tal d'unir-les. Fer que les carreteres es connectin és molt important \nper al mapa i essencial per proveir direccions per a la conducció.\n\nTambé podeu clicar l'eina «Moure» o prémer la tecla «M» per moure la carretera sencera, tota de cop, i llavors clicar altra vegada per guardar aquest moviment.\n\n### Eliminació\n\nSi una carretera està totalment malament -podeu apreciar que no existeix a la imatge per satèl·lit\ni a més a més, els veïns ens han confirmat que no existeix - la podeu eliminar, cosa que la treurà del mapa. Aneu amb molt de compte a l'hora d'eliminar característiques -\ncom ara altres edicions; els resultats podran ser vistos per tothom i moltes vegades la imatgeria per satèl·lit no està actualitzada, per tant la carretera es pot haver estat construida recentment.\n\nPodeu eliminar una carretera clicant-la, i llavors clicant la icona de la paperera o bé prement la tecla «Suprimir».\n\n### Creació\n\nHeu trobat que en algun lloc hi hauria d'haver una carretera però no hi és? Cliqueu la icona «Línia»\nal marge superior esquerre de la zona del mapa o bé prem la tecla «2» per començar a dibuixar\nuna línia.\n\nCliqueu a l'inici de la carretera al mapa per començar a dibuixar. Si la carretera comença amb una bifurcació en una carretera existent, cliqueu al lloc a on connecten.\n\nA continuació cliqueu a diferents punts al llarg de la carretera per tal que segueixi el traçat correcte, d'acord  amb la imatge del satèl·lit o la traça del GPS. Si la carretera que esteu dibuixant s'encreua amb una altra carretera, connecteu-les clicant al punt d'intersecció. Quan acabis el dibuix, féu doble clic o premeu «Retorn» del teclat.\n",
+        "gps": "# GPS\n\nLes dades de GPS són la font més fiable de dades per a l'OpenStreetMap. Aquest editor és compatible amb les taces locals - fitxers`.gpx`al vostre ordinador local. Podeu recollir \naquest tipus de traça GPS amb algunes aplicacions per a smartphones com també \ndispositius personals de GPS.\n\nPer a més informació sobre com recollir dades amb GPS, llegiu\n[Recollir dades amb GPS](http://learnosm.org/en/beginner/using-gps/).\n\nper fer servir una traça GPX per editar el mapa, arrossegueu i deixeu el fitxer GPX a l'editor. \nSi es detecta, s'afegirà el mapa com una línia verda llampant. \nCliqueu a 'Paràmetres de configuració del fons'  al cantó esquerre per activar,\ndesactivar, o per ajustar la vista a aquesta capa GPX.\n\nLa traça GPX no és pujada directament a OpenStreetMap - la millor manera de \nfer-la servir és dibuixar vosaltres el mapa, fent-la servir com a guia per a les noves característiques que afegireu. També les podeu [pujar a l'OpenStreetMap] \n(http://www.openstreetmap.org/trace/create)\nperquè d'altres persones les utilitzin.\n",
         "imagery": "# Imatgeria\n\nLa imatgeria aèria és un recurs important per a l'edició de mapes. Una combinació de\nvols d'aeronaus, fotografies de satèl·lit, i d'altres fonts compilades gratuïtament \nestan disponibles a l'editor dins del menú de l'esquerra 'Paràmetres de configuració del fons'.\n\nPer defecte, l'editor mostra la capa de satèl·lit de [Bing Maps](http://www.bing.com/maps/), però a mesura que et mous i ajustes la vista del mapa a noves àrees geogràfiques, noves fonts estaran disponibles. En alguns països, com ara els Estats Units, França, i Dinamarca tenen\n una imatgeria d'alta qualitat disponible per a determinades àrees.\n\nLa imatgeria a vegades no es correspon amb les dades del mapa, això és degut a un error\nper part del proveïdor de la imatge. Si veus moltes carreteres mogudes del seu lloc a la imatge,\nno les moguis per tal que encaixin amb aquesta. Ja que pots ajustar la imatgeria per tal de que quadri amb les dades existents clicant a 'Corregeix la desalineació' al capdevall de la pestanya dels\n'Paràmetres de configuració del fons'.\n",
         "addresses": "# Adreçes\n\nLes adreçes són una de les informacions més útils per al mapa.\n\nTot i que les adreces sovint es representen com a part del carrer, a l'OpenStreetMap\nes desen com a atributs dels edificis i llocs al llarg dels carrers\n\nPodeu afegir la informació de l'adreça a llocs cartografiats com a edificis com també\na aquells llocs cartografiats com a simples punts. La forma òptima d'obtenir dades \nde les adreces és a partir d'un estudi al carrer o bé el coneixement propi - com a qualsevol altra característica, la còpia de fonts comercials com ara el Google Maps és estrictament prohibida.\n",
         "inspector": "# Utilitzant l'inspector\n\nL'Inspector és l'element de l'interfície d'usuari que es troba al cantó dret de la pàgina i que+\napareix quan una característica és seleccionada i permet editar-ne els detalls.\n\n### Selecció del tipus de característica\n\nDesprés d'afegir un punt, línia, o àrea, pots escollir quin tipus de característica és,\nTant si és una autopista com un carrer residencial, un supermercat o un cafè.\nL'inspector mostrarà botons per els tipus de característica més comuns, i en pots trobar d'altres escrivint el que estàs buscant al quadre de cerca.\n\nClica la 'i' al cantó inferior dret del botó  del tipus de característica per saber-ne més. Clica el botó per seleccionar-la.\n\n### Utilització dels camps i les etiquetes d'edició\n\nDesprés d'escollir la característica, o quan selecciones una característica que ja té\nun tipus assignat, l'inspector mostrarà uns camps amb detalls de la característica \ncom ara el seu nom o la seva adreça .\n\nA sota dels camps que veus, pots clicar algunes icones per afegir altres detalls,\ncom ara infrmació de la [Viquipèdia](http://www.wikipedia.org/), l'accés per a cadires de rodes,\ni alguna cosa més.\n\nAl capdavall de l'inspector, clica 'Etiquetes adicionals' per afegir altres etiquetes arbitràries a l'element. [Taginfo](http://taginfo.openstreetmap.org/) és una gran eina per aprendre'n més sobre les combinacions d'etiquetes més populars.\n\nEls canvis que facis a l'inspector s'aplicaran automàticament al mapa.\nEls pots desfer en qualsevol moment clicant al botó de 'Desfer' .\n\n",
             "category-rail": {
                 "name": "Rail"
             },
+            "category-restriction": {
+                "name": "Restricció"
+            },
             "category-road": {
                 "name": "Carretera"
             },
             "entrance": {
                 "label": "Tipus"
             },
+            "except": {
+                "label": "Excepcions"
+            },
             "fax": {
                 "label": "Fax",
                 "placeholder": "+31 42 123 4567"
                 "label": "Tipus"
             },
             "oneway": {
-                "label": "Sentit únic"
+                "label": "Sentit únic",
+                "options": {
+                    "undefined": "Sobreentès que és no"
+                }
             },
             "oneway_yes": {
-                "label": "Sentit únic"
+                "label": "Sentit únic",
+                "options": {
+                    "undefined": "Sobreentès que és sí"
+                }
             },
             "opening_hours": {
                 "label": "Horari"
             "restriction": {
                 "label": "Tipus"
             },
+            "restrictions": {
+                "label": "Restriccions de gir"
+            },
             "route": {
                 "label": "Tipus"
             },
             "amenity/doctor": {
                 "name": "Doctor"
             },
+            "amenity/dojo": {
+                "name": "Dojo / Acadèmia d'arts marcials"
+            },
             "amenity/drinking_water": {
                 "name": "Aigua apte per al consum",
                 "terms": "Aigua potable, Aigua apte per al consum humà, Aigua per beure"
                 "terms": "Hospital, centre hospitalari, policlínica, clínica. "
             },
             "amenity/kindergarten": {
-                "name": "Terrenys de Jardí d'infància"
+                "name": "Terrenys de Jardí d'infància",
+                "terms": "Parc infantil"
             },
             "amenity/library": {
                 "name": "Biblioteca",
                 "terms": "Porta giratòria, Porta sense retorn, Accés giratori, Porta de no retorn"
             },
             "barrier/lift_gate": {
-                "name": "Barrera per a vehicles"
+                "name": "Barrera per a vehicles",
+                "terms": "Porta d'ascensor"
             },
             "barrier/retaining_wall": {
                 "name": "Mur de contenció",
                 "terms": "Mur de contenció, Paret de contenció"
             },
             "barrier/stile": {
-                "name": "esgraons"
+                "name": "esgraons",
+                "terms": "Escala de tanca"
             },
             "barrier/toll_booth": {
                 "name": "Peatge",
                 "name": "Església"
             },
             "building/commercial": {
-                "name": "Edifici comercial"
+                "name": "Edifici comercial",
+                "terms": "Edifici comercial"
             },
             "building/construction": {
                 "name": "Edifici en construcció"
                 "name": "Edifici d'habitacions"
             },
             "building/entrance": {
-                "name": "Entrada/Sortida"
+                "name": "Entrada/Sortida",
+                "terms": "Entrada/Sortida"
             },
             "building/garage": {
-                "name": "garatge "
+                "name": "garatge ",
+                "terms": "Garatge"
             },
             "building/garages": {
                 "name": "Garatges"
                 "name": "Edifici hoteler"
             },
             "building/house": {
-                "name": "Casa"
+                "name": "Casa",
+                "terms": "Casa"
             },
             "building/hut": {
-                "name": "Cabana"
+                "name": "Cabana",
+                "terms": "Barraca"
             },
             "building/industrial": {
-                "name": "Edifici industrial"
+                "name": "Edifici industrial",
+                "terms": "Edifici industrial"
             },
             "building/public": {
                 "name": "Edifici públic"
             },
             "building/residential": {
-                "name": "Edifici residencial"
+                "name": "Edifici residencial",
+                "terms": "Edifici residencial"
             },
             "building/retail": {
                 "name": "Edifici de grans magatzems"
                 "terms": "Telèfon d'emergències, SOS, S.O.S"
             },
             "entrance": {
-                "name": "Entrada/Sortida"
+                "name": "Entrada/Sortida",
+                "terms": "Entrada/Sortida"
             },
             "footway/crossing": {
                 "name": "Pas de vianants",
                 "terms": "Travessera, Cruïlla, Pas de Vianants, Pas Zebra, Pas de peatons, pas de transeünts"
             },
+            "footway/crosswalk": {
+                "name": "Pas de vianants",
+                "terms": "Pas de peations, pas, de, peatons, vianants, persones, zebra"
+            },
             "footway/sidewalk": {
                 "name": "Vorera"
             },
                 "name": "Obstacle d'aigua"
             },
             "highway": {
-                "name": "Via"
+                "name": "Via",
+                "terms": "Via, Carretera"
             },
             "highway/bridleway": {
                 "name": "Camí de ferradura",
                 "name": "Pas de vianants",
                 "terms": "Travessera, Cruïlla, Pas de Vianants, Pas Zebra, Pas de peatons, pas de transeünts"
             },
+            "highway/crosswalk": {
+                "name": "Pas de vianants",
+                "terms": "Pas de peations, pas, de, peatons, vianants, persones, zebra"
+            },
             "highway/cycleway": {
-                "name": "Carril bici"
+                "name": "Carril bici",
+                "terms": "Carril bici, Via verda,Via ciclista"
             },
             "highway/footway": {
                 "name": "Camí per a vianants",
                 "terms": "Camí per a vianants, carrer peatonal, camí per a peatons, a peu, camí per caminar, vianant, vianants, peató, peatons, transeünt, transeünts, peatonal"
             },
             "highway/living_street": {
-                "name": "Carrer residencial"
+                "name": "Carrer residencial",
+                "terms": "Carrer residencial"
             },
             "highway/mini_roundabout": {
                 "name": "Mini-Rotonda",
                 "terms": "Minirotonda, Mini-rotonda, Rotonda petita"
             },
             "highway/motorway": {
-                "name": "Autopista"
+                "name": "Autopista",
+                "terms": "Autopista,Autovia"
             },
             "highway/motorway_junction": {
-                "name": "sortida d'autopista"
+                "name": "Intersecció d'autopista / Sortida"
             },
             "highway/motorway_link": {
                 "name": "Enllaç d'autopista",
                 "terms": "Rampa, entrada, incorporació, baixada, addició, autopista, autovia, eix"
             },
             "highway/path": {
-                "name": "Camí"
+                "name": "Camí",
+                "terms": "Sender,Corriol"
             },
             "highway/pedestrian": {
                 "name": "Via Peatonal",
                 "terms": "Carrer Peatonal, Àrea per a peatons, Trànsit tallat, Carrer tancat al trànsit, Carrer per a vianants, Àrea per a vianants, Carrer per a transeünts, Peatons, Peatonal, Carrer per a Transeünts, Àrea peatonal"
             },
             "highway/primary": {
-                "name": "Carretera primària"
+                "name": "Carretera primària",
+                "terms": "Carretera primària,Carretera de 1r ordre"
             },
             "highway/primary_link": {
-                "name": "Enllaç de carretera primària"
+                "name": "Enllaç de carretera primària",
+                "terms": "Enllaç amb primària"
             },
             "highway/residential": {
-                "name": "Carrer"
+                "name": "Carrer",
+                "terms": "Carrer"
             },
             "highway/rest_area": {
                 "name": "Àrea de descans"
             },
             "highway/road": {
-                "name": "Carretera sense classificació"
+                "name": "Carretera sense classificació",
+                "terms": "via desconeguda, via per arreglar,"
             },
             "highway/secondary": {
-                "name": "Carretera secundària"
+                "name": "Carretera secundària",
+                "terms": "Carretera secundària,Carretera de 2n ordre"
             },
             "highway/secondary_link": {
-                "name": "Enllaç de carretera secundària"
+                "name": "Enllaç de carretera secundària",
+                "terms": "Enllaç amb secundària"
             },
             "highway/service": {
-                "name": "Via de servei"
+                "name": "Via de servei",
+                "terms": "Via de servei, Lateral"
             },
             "highway/service/alley": {
-                "name": "Carreró"
+                "name": "Carreró",
+                "terms": "Carreró,Cul de sac"
             },
             "highway/service/drive-through": {
-                "name": "Via dins una propietat"
+                "name": "Via dins una propietat",
+                "terms": "Pas de vehicles"
             },
             "highway/service/driveway": {
-                "name": "Via d'accés a una propietat"
+                "name": "Via d'accés a una propietat",
+                "terms": "Entrada de vehicles"
             },
             "highway/service/emergency_access": {
                 "name": "Accés per a emergències",
                 "name": "Senyal de stop"
             },
             "highway/tertiary": {
-                "name": "Carretera terciària"
+                "name": "Carretera terciària",
+                "terms": "Carretera terciària,Carretera de 3r ordre,local"
             },
             "highway/tertiary_link": {
-                "name": "Enllaç de carretera terciària"
+                "name": "Enllaç de carretera terciària",
+                "terms": "Enllaç amb terciària"
             },
             "highway/track": {
                 "name": "Pista",
                 "terms": "Senyals de trànsit, Senyals de tràfic"
             },
             "highway/trunk": {
-                "name": "Carretera principal"
+                "name": "Carretera principal",
+                "terms": "Via ràpida,Variant"
             },
             "highway/trunk_link": {
-                "name": "Enllaç de via principal"
+                "name": "Enllaç de via principal",
+                "terms": "Enllaç amb via ràpida"
             },
             "highway/turning_circle": {
-                "name": "Cul de sac"
+                "name": "Cul de sac",
+                "terms": "Girar 180 graus, Canviar de sentit"
             },
             "highway/unclassified": {
-                "name": "Altres carreteres"
+                "name": "Altres carreteres",
+                "terms": "Carretera municipal"
             },
             "historic": {
                 "name": "Lloc històric",
                 "terms": "Lloc arqueològic"
             },
             "historic/boundary_stone": {
-                "name": "Fita de terme"
+                "name": "Fita de terme",
+                "terms": "Fita de frontera"
             },
             "historic/castle": {
                 "name": "Castell",
                 "terms": "Ruines"
             },
             "historic/wayside_cross": {
-                "name": "Creu Cristiana"
+                "name": "Creu Cristiana",
+                "terms": "Calvari,Encreuament del camí"
             },
             "historic/wayside_shrine": {
-                "name": "Capella"
+                "name": "Capella",
+                "terms": "Ermita"
             },
             "landuse": {
-                "name": "Aprofitament del terreny"
+                "name": "Aprofitament del terreny",
+                "terms": "Ús del terra, Ús del sòl"
             },
             "landuse/allotments": {
-                "name": "Horts"
+                "name": "Horts",
+                "terms": "Assignació"
             },
             "landuse/basin": {
-                "name": "Bassa"
+                "name": "Bassa",
+                "terms": "Conca"
             },
             "landuse/cemetery": {
                 "name": "Cementiri",
                 "name": "Terrenys d'església"
             },
             "landuse/commercial": {
-                "name": "Zona comercial"
+                "name": "Zona comercial",
+                "terms": "Comercial,Botiga"
             },
             "landuse/construction": {
-                "name": "Zona en construcció"
+                "name": "Zona en construcció",
+                "terms": "En construcció"
             },
             "landuse/farm": {
                 "name": "Terrenys de granja",
                 "name": "Terrenys de Granja"
             },
             "landuse/farmyard": {
-                "name": "Granja"
+                "name": "Granja",
+                "terms": "Pati,Jardí"
             },
             "landuse/forest": {
-                "name": "Bosc"
+                "name": "Bosc",
+                "terms": "Massa forestal,Bosc,Arbreda"
             },
             "landuse/grass": {
-                "name": "Herba"
+                "name": "Herba",
+                "terms": "Herba,Gespa"
             },
             "landuse/industrial": {
-                "name": "Zona Industrial"
+                "name": "Zona Industrial",
+                "terms": "Indústria, Industrial,Fàbrica"
             },
             "landuse/landfill": {
                 "name": "Abocador"
             },
             "landuse/meadow": {
-                "name": "Prat"
+                "name": "Prat",
+                "terms": "Prat,Prada,Natural"
             },
             "landuse/military": {
                 "name": "Militar"
             },
             "landuse/orchard": {
-                "name": "Verger"
+                "name": "Verger",
+                "terms": "Horta,Hort,Plantació"
             },
             "landuse/quarry": {
-                "name": "Mina a cel obert"
+                "name": "Mina a cel obert",
+                "terms": "Pedrera"
             },
             "landuse/residential": {
-                "name": "Zona residencial"
+                "name": "Zona residencial",
+                "terms": "Residencial,Cases"
             },
             "landuse/retail": {
-                "name": "Comerç minorista"
+                "name": "Comerç minorista",
+                "terms": "Venda al detall,Botiga,Minoristes"
             },
             "landuse/vineyard": {
                 "name": "Vinya",
                 "terms": "Vinyar, Vinyal, Vinyet, Vinya"
             },
             "leisure": {
-                "name": "Esbarjo"
+                "name": "Esbarjo",
+                "terms": "Lleure,Temps lliure"
             },
             "leisure/common": {
                 "name": "Àrea comuna"
             },
             "leisure/dog_park": {
-                "name": "Parc Caní"
+                "name": "Parc Caní",
+                "terms": "Pipi-can,Parc per gossos"
             },
             "leisure/firepit": {
                 "name": "Lloc per a fogueres"
             },
             "leisure/garden": {
-                "name": "Jardí"
+                "name": "Jardí",
+                "terms": "Jardí,Parc,Zona ajardinada"
             },
             "leisure/golf_course": {
-                "name": "Camp de golf"
+                "name": "Camp de golf",
+                "terms": "Camp de Golf"
             },
             "leisure/ice_rink": {
                 "name": "Pista de gel"
                 "name": "Taula de picnic"
             },
             "leisure/pitch": {
-                "name": "Camp d'esports"
+                "name": "Camp d'esports",
+                "terms": "Camp d'esports, Pista poliesportiva"
             },
             "leisure/pitch/american_football": {
-                "name": "Camp de futbol americà"
+                "name": "Camp de futbol americà",
+                "terms": "Estadi de futbol americà,Camp de futbol americà"
             },
             "leisure/pitch/baseball": {
-                "name": "Camp de beisbol"
+                "name": "Camp de beisbol",
+                "terms": "Camp de beisbol,Pista de beisbol"
             },
             "leisure/pitch/basketball": {
-                "name": "Pista de bàsquet"
+                "name": "Pista de bàsquet",
+                "terms": "Pista de bàsquet, Pavelló de bàsquet"
             },
             "leisure/pitch/skateboard": {
                 "name": "Parc per a skates"
             },
             "leisure/pitch/soccer": {
-                "name": "Camp de futbol"
+                "name": "Camp de futbol",
+                "terms": "Camp de futbol,Pista de futbol"
             },
             "leisure/pitch/tennis": {
-                "name": "Pista de tennis"
+                "name": "Pista de tennis",
+                "terms": "Camp de Tennis, Pista de tennis"
             },
             "leisure/pitch/volleyball": {
-                "name": "Camp de vòleibol"
+                "name": "Camp de vòleibol",
+                "terms": "Pista de voleibol,Camp de voleibol"
             },
             "leisure/playground": {
                 "name": "Zona de jocs infantils",
                 "terms": "Parc Infantil"
             },
             "leisure/slipway": {
-                "name": "Pendent per a embarcacions"
+                "name": "Pendent per a embarcacions",
+                "terms": "Varador"
             },
             "leisure/sports_center": {
-                "name": "Centre d'esports"
+                "name": "Centre d'esports / Gimnàs"
             },
             "leisure/stadium": {
-                "name": "Estadi"
+                "name": "Estadi",
+                "terms": "Estadi,Camp"
             },
             "leisure/swimming_pool": {
-                "name": "Piscina"
+                "name": "Piscina",
+                "terms": "Piscina"
             },
             "leisure/track": {
                 "name": "Circuit de carreres"
             },
             "line": {
-                "name": "Línia"
+                "name": "Línia",
+                "terms": "Línia"
             },
             "man_made": {
-                "name": "Fet per l'home"
+                "name": "Fet per l'home",
+                "terms": "Fet per la mà de l'home"
             },
             "man_made/breakwater": {
-                "name": "trencaonades"
+                "name": "trencaonades",
+                "terms": "Escullera,Espigó,Espatller"
             },
             "man_made/cutline": {
-                "name": "Línia de tall"
+                "name": "Línia de tall",
+                "terms": "Línia de tall"
             },
             "man_made/embankment": {
                 "name": "Terraplè "
                 "name": "Màstil"
             },
             "man_made/lighthouse": {
-                "name": "Far"
+                "name": "Far",
+                "terms": "Far"
             },
             "man_made/observation": {
                 "name": "Torre de vigilància"
             },
             "man_made/pier": {
-                "name": "Moll de pilons"
+                "name": "Moll de pilons",
+                "terms": "Moll,Dàrsena"
             },
             "man_made/pipeline": {
-                "name": "Canonada"
+                "name": "Canonada",
+                "terms": "Gàseoducte,Oleoducte,Canonades"
             },
             "man_made/survey_point": {
-                "name": "Punt referencial"
+                "name": "Punt referencial",
+                "terms": "Punt de salvació,Punt de salvament,Punt d'evacuació"
             },
             "man_made/tower": {
                 "name": "Torre",
                 "terms": "Torre, Torres"
             },
             "man_made/wastewater_plant": {
-                "name": "Depuradora d'aigües residuals"
+                "name": "Depuradora d'aigües residuals",
+                "terms": "Depuradora"
             },
             "man_made/water_tower": {
                 "name": "Torre d'aigua",
                 "terms": "Botiga d'electrònica, Botiga de components electrònics"
             },
             "shop/farm": {
-                "name": "Estand productiu"
+                "name": "Estand productiu",
+                "terms": "Grades"
             },
             "shop/fishmonger": {
                 "name": "Peixateria"
                 "name": "Restricció",
                 "terms": "Restricció"
             },
+            "type/restriction/no_left_turn": {
+                "name": "Prohibició del gir a l'esquerra"
+            },
+            "type/restriction/no_right_turn": {
+                "name": "Prohibició del gir a la dreta"
+            },
+            "type/restriction/no_straight_on": {
+                "name": "Prohibició de seguir recte"
+            },
+            "type/restriction/no_u_turn": {
+                "name": "Prohibició del gir total"
+            },
+            "type/restriction/only_left_turn": {
+                "name": "Només gir a l'esquerra"
+            },
+            "type/restriction/only_right_turn": {
+                "name": "Només gir a la dreta"
+            },
+            "type/restriction/only_straight_on": {
+                "name": "Prohibició de tots els girs",
+                "terms": "Prohibit girar, no girs, cap gir, no girar, seguir recte"
+            },
             "type/route": {
                 "name": "Ruta",
                 "terms": "Ruta"
index 1e43feaf3957d55eb9e4e11a377d173de8c8fea1..c3b22567618f1c4d288f863eb14bf085a9de124f 100644 (file)
                 "name": "Dálnice",
                 "terms": "dálnice"
             },
-            "highway/motorway_junction": {
-                "name": "Dálniční sjezd",
-                "terms": "dálniční nájezd, dálniční výjezd, dálniční exit"
-            },
             "highway/motorway_link": {
                 "name": "Dálnice - nájezd",
                 "terms": "nájezd,sjezd,výjezd,příjezd,rampa,exit"
                 "name": "Vodní skluz",
                 "terms": "spouštění lodi,dok,loděnice,skluz v loděnici,skluzavka"
             },
-            "leisure/sports_center": {
-                "name": "Sportovní areál",
-                "terms": "sportovní areál,sportovní centrum"
-            },
             "leisure/stadium": {
                 "name": "Stadion",
                 "terms": "stadion,fotbal,fotbalový stadión,hřiště"
index 9f852a6cb45389986f8a874d92885b0bc44fb193..4de128c4381687c7f129043463e4121b6046843a 100644 (file)
             },
             "not_eligible": "Linje kan ikke deles op ved deres begyndelse eller ende.",
             "multiple_ways": "Der er for mange linjer her til at dele op."
+        },
+        "restriction": {
+            "help": {
+                "select": "Vælg et vejsegment.",
+                "toggle": "Klik for at slå dreje restriktioner til.",
+                "toggle_on": "Klik for tilføje \"{restriction}\" restriktion.",
+                "toggle_off": "Klik for at fjerne  \"{restriction}\" restriktionen."
+            },
+            "annotation": {
+                "create": "Tilføjede en dreje restriktion",
+                "delete": "Slettede en dreje restriktion"
+            }
         }
     },
     "undo": {
             "category-rail": {
                 "name": "Jernbane"
             },
+            "category-restriction": {
+                "name": "Restriktion"
+            },
             "category-road": {
                 "name": "Vej"
             },
             "entrance": {
                 "label": "Type"
             },
+            "except": {
+                "label": "Undtagelser"
+            },
             "fax": {
                 "label": "Fax",
                 "placeholder": "+31 42 123 4567"
                 "label": "Type"
             },
             "oneway": {
-                "label": "Ensrettet"
+                "label": "Ensrettet",
+                "options": {
+                    "undefined": "Forventet at være Nej"
+                }
             },
             "oneway_yes": {
-                "label": "Ensrettet"
+                "label": "Ensrettet",
+                "options": {
+                    "undefined": "Forventet at være Ja"
+                }
             },
             "opening_hours": {
                 "label": "Åbningstider"
             "restriction": {
                 "label": "Type"
             },
+            "restrictions": {
+                "label": "Sving restriktioner"
+            },
             "route": {
                 "label": "Type"
             },
                 "name": "Læge",
                 "terms": "Læge, Doktor"
             },
+            "amenity/dojo": {
+                "name": "Dojo/Kampsports akdemi",
+                "terms": "Dojo/Kampsports akdemi"
+            },
             "amenity/drinking_water": {
                 "name": "Drikkevand",
                 "terms": "<oversæt med synonymer eller beslægtet termer for 'Drikkevand', adskilt med kommaer>"
                 "name": "Kryds",
                 "terms": "Kryds"
             },
+            "footway/crosswalk": {
+                "name": "Fodgængerovergang",
+                "terms": "Fodgængerovergang"
+            },
             "footway/sidewalk": {
                 "name": "Fortov",
                 "terms": "Fortov"
                 "name": "Kryds",
                 "terms": "Kryds"
             },
+            "highway/crosswalk": {
+                "name": "Fodgængerovergang",
+                "terms": "Fodgængerovergang"
+            },
             "highway/cycleway": {
                 "name": "Cykelsti",
                 "terms": "Cykelsti"
                 "terms": "Motorvej"
             },
             "highway/motorway_junction": {
-                "name": "Motorvejskryds",
-                "terms": "Motorvejskryds"
+                "name": "Motorvejsafkørsel/ Udkørsel",
+                "terms": "Motorvejsafkørsel/ Udkørsel"
             },
             "highway/motorway_link": {
                 "name": "Motorvejsafkørsel",
                 "terms": "Bådrampe, Skibsrampe"
             },
             "leisure/sports_center": {
-                "name": "Sportscenter",
-                "terms": "Sportscenter"
+                "name": "Sportscenter/Gymnastik",
+                "terms": "Sportscenter/Gymnastik"
             },
             "leisure/stadium": {
                 "name": "Stadion",
                 "name": "Restriktion",
                 "terms": "Restriktion"
             },
+            "type/restriction/no_left_turn": {
+                "name": "Ingen venstresving",
+                "terms": "Ingen venstresving"
+            },
+            "type/restriction/no_right_turn": {
+                "name": "Ingen højresving",
+                "terms": "Ingen højresving"
+            },
+            "type/restriction/no_straight_on": {
+                "name": "Ingen lige ud kørsel",
+                "terms": "Ingen lige ud kørsel"
+            },
+            "type/restriction/no_u_turn": {
+                "name": "Ingen U-vending",
+                "terms": "Ingen U-vending"
+            },
+            "type/restriction/only_left_turn": {
+                "name": "Kun venstresving tilladt",
+                "terms": "Kun venstresving tilladt"
+            },
+            "type/restriction/only_right_turn": {
+                "name": "Kun højresving tilladt",
+                "terms": "Kun højresving tilladt"
+            },
+            "type/restriction/only_straight_on": {
+                "name": "Ingen sving tilladt",
+                "terms": "Ingen sving tilladt"
+            },
             "type/route": {
                 "name": "Rute",
                 "terms": "Rute"
index bfc75032c5259abbdb4c8756c37be41e8cad19d7..e009dc8e60ef1bd42719e5955a57f49b0f76a859 100644 (file)
             },
             "not_eligible": "Linien können nicht am Anfang oder Ende geteilt werden.",
             "multiple_ways": "Es gibt hier zu viele Linien, um diese teilen zu können."
+        },
+        "restriction": {
+            "help": {
+                "select": "Klicke um ein Straßensegment zu selektieren.",
+                "toggle": "Klicke um das Abbiegeverbot umzudrehen.",
+                "toggle_on": "Klicke um ein \"{restriction}\" Verbot anzulegen.",
+                "toggle_off": "Klicke um das \"{restriction}\" Verbot zu löschen."
+            },
+            "annotation": {
+                "create": "Füge ein Abbiegeverbot ein",
+                "delete": "Lösche ein Abbiegeverbot"
+            }
         }
     },
     "undo": {
             "category-rail": {
                 "name": "Schiene"
             },
+            "category-restriction": {
+                "name": "Abbiegevorschrift"
+            },
             "category-road": {
                 "name": "Straße"
             },
             "entrance": {
                 "label": "Typ"
             },
+            "except": {
+                "label": "Ausnahmen"
+            },
             "fax": {
                 "label": "Fax",
                 "placeholder": "+31 42 123 4567"
                 "label": "Typ"
             },
             "oneway": {
-                "label": "Einbahnstraße"
+                "label": "Einbahnstraße",
+                "options": {
+                    "undefined": "Vermutlich Nein"
+                }
             },
             "oneway_yes": {
-                "label": "Einbahnstraße"
+                "label": "Einbahnstraße",
+                "options": {
+                    "undefined": "Vermutlich Ja"
+                }
             },
             "opening_hours": {
                 "label": "Öffnungszeiten"
             "restriction": {
                 "label": "Typ"
             },
+            "restrictions": {
+                "label": "Abbiegevorschriften"
+            },
             "route": {
                 "label": "Typ"
             },
                 "name": "Arzt",
                 "terms": "Arzt, Mediziner"
             },
+            "amenity/dojo": {
+                "name": "Kampfsportstudio",
+                "terms": "Kampfsportstudio, Kampfsportzentrum, Karatestudio"
+            },
             "amenity/drinking_water": {
                 "name": "Trinkwasserstelle",
                 "terms": "Brunnen,Trinkwasser,Trinkwasserbrunnen,Wasserhahn,Trinkbrunnen"
                 "name": "Fussgängerüberweg",
                 "terms": "Zebrastreifen"
             },
+            "footway/crosswalk": {
+                "name": "Zebrastreifen",
+                "terms": "Zebrastreifen, Fußgängerübergang, Fußgängerstreifen"
+            },
             "footway/sidewalk": {
                 "name": "Bürgersteig",
                 "terms": "Gehsteig, Fußgängerweg, Gehweg, Fußweg, Gangsteig, Trottoir"
                 "name": "Fußgängerüberweg",
                 "terms": "Zebrastreifen"
             },
+            "highway/crosswalk": {
+                "name": "Zebrastreifen",
+                "terms": "Zebrastreifen, Fußgängerübergang, Fußgängerstreifen"
+            },
             "highway/cycleway": {
                 "name": "Radweg",
                 "terms": "Radweg"
                 "terms": "Autobahn"
             },
             "highway/motorway_junction": {
-                "name": "Autobahnausfahrt",
-                "terms": "Autobahn-Anschlussstelle, Autobahn-Abfahrt"
+                "name": "Autobahnkreuz / Autobahnanschluss",
+                "terms": "Autobahnkreuz, Autobahnanschluss, Autobahndreieck, Autobahnknoten, Autobahnzubringer"
             },
             "highway/motorway_link": {
                 "name": "Autobahnanschluss",
                 "terms": "Gleitbahn, Rampe"
             },
             "leisure/sports_center": {
-                "name": "Sportzentrum",
-                "terms": "Fitnesscenter"
+                "name": "Fitnessstudio",
+                "terms": "Fitnessstudio, Sportstudio, Trainingszentrum"
             },
             "leisure/stadium": {
                 "name": "Stadion",
                 "terms": "Multipolygon"
             },
             "type/restriction": {
-                "name": "Beschränkung",
-                "terms": "Beschränkung, Einschränkung"
+                "name": "Sonstige Abbiegevorschrift",
+                "terms": "Abbiegebeschränkung, Beschränkung, Einschränkung"
+            },
+            "type/restriction/no_left_turn": {
+                "name": "Linksabbiegeverbot",
+                "terms": "Linksabbiegeverbot, Linksabbiegen verboten, kein Linksabbiegen, kein Abbiegen nach links"
+            },
+            "type/restriction/no_right_turn": {
+                "name": "Rechtsabbiegeverbot",
+                "terms": "Rechtsabbiegeverbot, Rechtsabbiegen verboten, kein Rechtsabbiegen, kein Abbiegen nach rechts"
+            },
+            "type/restriction/no_straight_on": {
+                "name": "Geradeausfahrverbot",
+                "terms": "Geradeausfahrverbot, Geradeausfahren verboten, geradeaus fahren nicht erlaubt"
+            },
+            "type/restriction/no_u_turn": {
+                "name": "Kehrtwendeverbot",
+                "terms": "Kehrtwendeverbot, Kehrtwende verboten, Umdrehen verboten"
+            },
+            "type/restriction/only_left_turn": {
+                "name": "Linksabbiegegebot",
+                "terms": "Linksabbiegegebot, Links abbiegen geboten, nur links abbiegen erlaubt"
+            },
+            "type/restriction/only_right_turn": {
+                "name": "Rechtsabbiegegebot",
+                "terms": "Rechtsabbiegegebot, Rechts abbiegen geboten, nur rechts abbiegen erlaubt"
+            },
+            "type/restriction/only_straight_on": {
+                "name": "Kehrtwendeverbot",
+                "terms": "Kehrwendeverbot, keine Kehrtwende erlaubt, Umdrehverbot, Umdrehen verboten"
             },
             "type/route": {
                 "name": "Route",
index 541b40832eac11a8795ef04b23db0b621d224ac5..1ef09526c0833f7896204a5dd7ad55664b564129 100644 (file)
                 "name": "Αυτοκινητόδρομος",
                 "terms": "Αυτοκινητόδρομος"
             },
-            "highway/motorway_junction": {
-                "name": "Διασταύρωση Αυτοκινητόδρομου",
-                "terms": "Διασταύρωση αυτοκινητόδρομου"
-            },
             "highway/motorway_link": {
                 "name": "Σύνδεση Αυτοκινητόδρομου",
                 "terms": "Σύνδεσμος Αυτοκινητόδρομου "
                 "name": "Γλύστρα",
                 "terms": "Γλίστρα"
             },
-            "leisure/sports_center": {
-                "name": "Αθλητικό Κέντρο"
-            },
             "leisure/stadium": {
                 "name": "Στάδιο",
                 "terms": "Στάδιο"
index bab6c5df9a821d186356bf472099e41cd23502f5..771cb75f9ebb61814004cd55600fc76d701baff1 100644 (file)
@@ -84,9 +84,6 @@
             "building/terrace": {
                 "name": "Terraced houses"
             },
-            "leisure/sports_center": {
-                "name": "Sports Centre"
-            },
             "shop/garden_centre": {
                 "name": "Garden Centre"
             },
index 04b1b3571f11ed89213dfc413e7934faa87a21ed..61fe5ce3a174d4738001303de96d19c58fea83f4 100644 (file)
             },
             "not_eligible": "Lines can't be split at their beginning or end.",
             "multiple_ways": "There are too many lines here to split."
+        },
+        "restriction": {
+            "help": {
+                "select": "Click to select a road segment.",
+                "toggle": "Click to toggle turn restrictions.",
+                "toggle_on": "Click to add a \"{restriction}\" restriction.",
+                "toggle_off": "Click to remove the \"{restriction}\" restriction."
+            },
+            "annotation": {
+                "create": "Added a turn restriction",
+                "delete": "Deleted a turn restriction"
+            }
         }
     },
     "undo": {
             "category-rail": {
                 "name": "Rail"
             },
+            "category-restriction": {
+                "name": "Restriction"
+            },
             "category-road": {
                 "name": "Road"
             },
             "entrance": {
                 "label": "Type"
             },
+            "except": {
+                "label": "Exceptions"
+            },
             "fax": {
                 "label": "Fax",
                 "placeholder": "+31 42 123 4567"
                 "label": "Type"
             },
             "oneway": {
-                "label": "One Way"
+                "label": "One Way",
+                "options": {
+                    "undefined": "Assumed to be No",
+                    "yes": "Yes",
+                    "no": "No"
+                }
             },
             "oneway_yes": {
-                "label": "One Way"
+                "label": "One Way",
+                "options": {
+                    "undefined": "Assumed to be Yes",
+                    "yes": "Yes",
+                    "no": "No"
+                }
             },
             "opening_hours": {
                 "label": "Hours"
             "restriction": {
                 "label": "Type"
             },
+            "restrictions": {
+                "label": "Turn Restrictions"
+            },
             "route": {
                 "label": "Type"
             },
                 "name": "Doctor",
                 "terms": "doctor,doctor's office"
             },
+            "amenity/dojo": {
+                "name": "Dojo / Martial Arts Academy",
+                "terms": "martial arts,dojo,dojang"
+            },
             "amenity/drinking_water": {
                 "name": "Drinking Water",
                 "terms": "water fountain,potable water"
             },
             "footway/crossing": {
                 "name": "Crossing",
+                "terms": ""
+            },
+            "footway/crosswalk": {
+                "name": "Crosswalk",
                 "terms": "crosswalk,zebra crossing"
             },
             "footway/sidewalk": {
             },
             "highway/crossing": {
                 "name": "Crossing",
+                "terms": ""
+            },
+            "highway/crosswalk": {
+                "name": "Crosswalk",
                 "terms": "crosswalk,zebra crossing"
             },
             "highway/cycleway": {
                 "terms": ""
             },
             "highway/motorway_junction": {
-                "name": "Motorway Junction",
+                "name": "Motorway Junction / Exit",
                 "terms": ""
             },
             "highway/motorway_link": {
                 "terms": ""
             },
             "leisure/sports_center": {
-                "name": "Sports Center",
+                "name": "Sports Center / Gym",
                 "terms": "gym"
             },
             "leisure/stadium": {
                 "name": "Restriction",
                 "terms": ""
             },
+            "type/restriction/no_left_turn": {
+                "name": "No Left Turn",
+                "terms": ""
+            },
+            "type/restriction/no_right_turn": {
+                "name": "No Right Turn",
+                "terms": ""
+            },
+            "type/restriction/no_straight_on": {
+                "name": "No Straight On",
+                "terms": ""
+            },
+            "type/restriction/no_u_turn": {
+                "name": "No U-turn",
+                "terms": ""
+            },
+            "type/restriction/only_left_turn": {
+                "name": "Left Turn Only",
+                "terms": ""
+            },
+            "type/restriction/only_right_turn": {
+                "name": "Right Turn Only",
+                "terms": ""
+            },
+            "type/restriction/only_straight_on": {
+                "name": "No Turns",
+                "terms": ""
+            },
             "type/route": {
                 "name": "Route",
                 "terms": ""
index 6519a586b1dbb55422fdc407d203b56e727b5c2b..5687bc15f9c2a5f4140b42a4f8264b86ed8bfb1e 100644 (file)
             "category-rail": {
                 "name": "Ferrocarril"
             },
+            "category-restriction": {
+                "name": "Restricción"
+            },
             "category-road": {
                 "name": "Carretera"
             },
             "entrance": {
                 "label": "Tipo"
             },
+            "except": {
+                "label": "Excepciones"
+            },
             "fax": {
                 "label": "Fax",
                 "placeholder": "+31 42 123 4567"
                 "name": "Aparcamiento de automóviles",
                 "terms": "aparcamiento, parking, aparcadero, estacionamiento, garaje"
             },
+            "amenity/parking_entrance": {
+                "name": "Entrada/Salida del Estacionamiento"
+            },
             "amenity/pharmacy": {
                 "name": "Farmacia",
                 "terms": "farmacia,botica, laboratorio, apoteca, herbolario"
             "building/dormitory": {
                 "name": "Dormitorio"
             },
+            "building/entrance": {
+                "name": "Entrada/Salida",
+                "terms": "puerta, portal, vestíbulo, umbral, soportal, pórtico, abertura, acceso, boca, embocadura, agujero, hueco"
+            },
             "building/garage": {
                 "name": "Garaje",
                 "terms": "garaje,cochera"
                 "name": "Teléfono de emergencias",
                 "terms": "Teléfono de emergencia, SOS"
             },
+            "entrance": {
+                "name": "Entrada/Salida"
+            },
             "footway/crossing": {
                 "name": "Cruce peatonal",
                 "terms": "cruce, travesía, paso, cruzamiento, pasaje, vado, paseo, traviesa, paso de peatones, paso de cebra"
             },
+            "footway/crosswalk": {
+                "name": "Cruce peatonal",
+                "terms": "cruce, travesía, paso, cruzamiento, pasaje, vado, paseo, traviesa, paso de peatones"
+            },
             "footway/sidewalk": {
                 "name": "Acera",
                 "terms": "acera, paso, bordillo, anden, borde, peatonal, peatón"
                 "name": "Cruce peatonal",
                 "terms": "cruce peatonal, paso peatonal, paso de cebra, paso de peatones, paso semafórico"
             },
+            "highway/crosswalk": {
+                "name": "Cruce peatonal",
+                "terms": "cruce, travesía, paso, cruzamiento, pasaje, vado, paseo, traviesa, paso de peatones"
+            },
             "highway/cycleway": {
                 "name": "Sendero ciclista",
                 "terms": "Camino para bicicletas, senda ciclable, sendero ciclista, carril bici"
                 "terms": "autopista, autovía, vía rápida"
             },
             "highway/motorway_junction": {
-                "name": "Cruce de autopista",
+                "name": "Cruce / salida de autopista",
                 "terms": "enlace, acceso, autopista, autovía, salida"
             },
             "highway/motorway_link": {
                 "terms": "Grada"
             },
             "leisure/sports_center": {
-                "name": "Centro deportivo",
-                "terms": "Complejo deportivo"
+                "name": "Centro deportivo / Gimnasio",
+                "terms": "centro deportivo, club deportivo, club atlético, gimnasio"
             },
             "leisure/stadium": {
                 "name": "Estadio",
                 "name": "Restricción",
                 "terms": "restricción, limitación, prohibición"
             },
+            "type/restriction/no_left_turn": {
+                "name": "No girar a la izquierda",
+                "terms": "no girar a la izquierda, prohibido girar a la izquierda"
+            },
+            "type/restriction/no_right_turn": {
+                "name": "No girar a la derecha",
+                "terms": "no girar a la derecha, prohibido girar a la derecha"
+            },
+            "type/restriction/only_left_turn": {
+                "name": "Sólo girar a la izquierda"
+            },
+            "type/restriction/only_right_turn": {
+                "name": "Sólo girar a la derecha"
+            },
+            "type/restriction/only_straight_on": {
+                "name": "No girar",
+                "terms": "no girar, prohibido girar"
+            },
             "type/route": {
                 "name": "Ruta",
                 "terms": "ruta,recorrido,línea"
index e8ee8abfe2cf4573a5a21433bd554a06a93a91c1..052adee258903b2ad7c3ea0907b37e7eec7e3887 100644 (file)
             "highway/motorway": {
                 "name": "Kiirtee"
             },
-            "highway/motorway_junction": {
-                "name": "Kiirtee liiklussõlm"
-            },
             "highway/path": {
                 "name": "Rada"
             },
index 061a937ef088330cc4e8f3ecd560fc6a484a3c60..aea9e29eb4d384338667f16afea5bc70632081c2 100644 (file)
                 "name": "مسیر موتور سواری",
                 "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'راه وسایل موتوری'، با کاما جدا میشوند>"
             },
-            "highway/motorway_junction": {
-                "name": "محل اتصال جاده موتور سیکلت",
-                "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'Motorway Junction'، با کاما جدا میشوند>"
-            },
             "highway/motorway_link": {
                 "name": "اتصال جاده موتور سیکلت",
                 "terms": "<ترجمه با مترادف یا اصطلاحات مشابه برای 'پیوستن جاده موتور'، با کاما جدا میشوند>"
             "leisure/slipway": {
                 "name": "قایق ساکن"
             },
-            "leisure/sports_center": {
-                "name": "مرکز ورزشی"
-            },
             "leisure/stadium": {
                 "name": "ورزشگاه"
             },
index 6aba7e270f8192e6ee2128a158bffcfae08ee54b..2591f4275e15e8195ffd75d368eac6690599d0b3 100644 (file)
             },
             "not_eligible": "Viivoja ei voi jakaa alusta tai lopusta.",
             "multiple_ways": "Viivoja on liian monta jotta niitä voitaisiin jakaa osiin."
+        },
+        "restriction": {
+            "help": {
+                "select": "Valitse tienpätkä napsauttamalla.",
+                "toggle": "Muuta kääntymiskieltoja napsauttamalla.",
+                "toggle_on": "Lisää kääntymisrajoitus \"{restriction}\" napsauttamalla.",
+                "toggle_off": "Poista kääntymisrajoitus \"{restriction}\" napsauttamalla."
+            },
+            "annotation": {
+                "create": "Kääntymisrajoitus lisätty.",
+                "delete": "Kääntymisrajoitus poistettu."
+            }
         }
     },
     "undo": {
             "category-rail": {
                 "name": "Rautatie"
             },
+            "category-restriction": {
+                "name": "Rajoitus"
+            },
             "category-road": {
                 "name": "Tie"
             },
             },
             "capacity": {
                 "label": "Paikkamäärä",
-                "placeholder": "50, 100, 200..."
+                "placeholder": "5, 10, 20, 100..."
      &nb