mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 01:02:58 +00:00
only drop restrictions from FROM towards VIA when adding new only
partially adresses bugs in #4968: * doesn't crash anymore in complex situations (short FROM ways where both ends connect to a TO way) * adding a only-restriction at one end of a short FROM doesn't delete restrictions on the other end of the same FROM anymore
This commit is contained in:
@@ -408,22 +408,20 @@ export function osmIntersection(graph, startVertexId, maxDistance) {
|
||||
var isAlongOnlyPath = false;
|
||||
|
||||
if (t.id === way.id) { // match VIA, TO
|
||||
if (v.length === 1 && v[0].type === 'node' && v[0].id === entity.id) {
|
||||
matchesViaTo = true; // match VIA node
|
||||
|
||||
} else { // match all VIA ways
|
||||
if (v.length === 1 && v[0].type === 'node') { // match VIA node
|
||||
matchesViaTo = v[0].id === entity.id;
|
||||
} else { // match all VIA ways
|
||||
var pathVias = [];
|
||||
for (k = 1; k < currPath.length; k++) { // k = 1 skips FROM way
|
||||
if (currPath[k][0] === 'w') pathVias.push(currPath[k]);
|
||||
for (k = 2; k < currPath.length; k+=2) { // k = 1 skips FROM way
|
||||
pathVias.push(currPath[k]);
|
||||
}
|
||||
var restrictionVias = [];
|
||||
for (k = 0; k < v.length; k++) {
|
||||
if (v[k].type === 'way') restrictionVias.push(v[k].id);
|
||||
restrictionVias.push(v[k].id);
|
||||
}
|
||||
var diff = _difference(pathVias, restrictionVias);
|
||||
matchesViaTo = !diff.length;
|
||||
}
|
||||
|
||||
} else if (isOnly) {
|
||||
for (k = 0; k < v.length; k++) {
|
||||
// way doesn't match TO, but is one of the via ways along the path of an "only"
|
||||
|
||||
@@ -359,13 +359,13 @@ export function uiFieldRestrictions(field, context) {
|
||||
datumOnly.only = true;
|
||||
restrictionType = restrictionType.replace(/^no/, 'only');
|
||||
|
||||
// Adding an ONLY restriction should destroy all other direct restrictions from the FROM.
|
||||
// Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA.
|
||||
// We will remember them in _oldTurns, and restore them if the user clicks again.
|
||||
turns = _intersection.turns(_fromWayID, 2);
|
||||
extraActions = [];
|
||||
_oldTurns = [];
|
||||
for (i = 0; i < turns.length; i++) {
|
||||
if (turns[i].direct) {
|
||||
if (turns[i].direct && turns[i].path[1] === datum.path[1]) {
|
||||
turns[i].restrictionType = osmInferRestriction(vgraph, turns[i], projection);
|
||||
_oldTurns.push(turns[i]);
|
||||
extraActions.push(actionUnrestrictTurn(turns[i]));
|
||||
|
||||
Reference in New Issue
Block a user