Rewrite drag behaviors in terms of iD.behavior.drag

This commit is contained in:
John Firebaugh
2012-12-21 08:48:48 -08:00
parent 2c40de62be
commit 511dcfa6ac
2 changed files with 60 additions and 60 deletions
+39 -34
View File
@@ -1,45 +1,50 @@
iD.modes._dragFeatures = function(mode) {
var dragging;
var history = mode.history,
projection = mode.map.projection;
var dragbehavior = d3.behavior.drag()
var dragNode = iD.behavior.drag()
.delegate(".handle, .marker")
.origin(function(entity) {
var p = mode.map.projection(entity.loc);
// d3.event.sourceEvent.stopPropagation();
return { x: p[0], y: p[1] };
return projection(entity.loc);
})
.on('drag', function(entity) {
.on('start', function() {
history.perform(
iD.actions.Noop());
})
.on('move', function(entity) {
d3.event.sourceEvent.stopPropagation();
var loc = mode.map.projection.invert([d3.event.x, d3.event.y]);
if (!dragging) {
if (entity.accuracy) {
dragging = iD.Node({loc: loc});
mode.history.perform(
iD.actions.AddNode(dragging),
iD.actions.AddWayNode(entity.way, dragging.id, entity.index));
} else {
dragging = entity;
mode.history.perform(
iD.actions.MoveNode(dragging.id, loc));
}
}
mode.history.replace(iD.actions.MoveNode(dragging.id, loc));
history.replace(
iD.actions.MoveNode(entity.id, projection.invert(d3.event.loc)));
})
.on('dragend', function (entity) {
if (!dragging) return;
dragging = undefined;
mode.history.replace(
.on('end', function() {
history.replace(
iD.actions.Noop(),
entity.accuracy ? 'added a node to a way' : 'moved a node');
'moved a node');
});
var dragAccuracy = iD.behavior.drag()
.delegate(".accuracy-handle")
.origin(function(d) {
return projection(d.loc);
})
.on('start', function(d) {
d.node = iD.Node({loc: d.loc});
history.perform(
iD.actions.AddNode(d.node),
iD.actions.AddWayNode(d.way, d.node.id, d.index));
})
.on('move', function(d) {
d3.event.sourceEvent.stopPropagation();
history.replace(
iD.actions.MoveNode(d.node.id, projection.invert(d3.event.loc)));
})
.on('end', function() {
history.replace(
iD.actions.Noop(),
'added a node to a way');
});
mode.map.surface
.call(dragbehavior)
.call(d3.latedrag()
.filter(function(d) {
return (d.type === 'node' || d.accuracy);
}));
.call(dragNode)
.call(dragAccuracy);
};
+21 -26
View File
@@ -6,31 +6,7 @@ iD.modes.Select = function (entity) {
};
var inspector = iD.Inspector(),
dragging, target;
var dragWay = d3.behavior.drag()
.origin(function(entity) {
var p = mode.map.projection(entity.nodes[0].loc);
return { x: p[0], y: p[1] };
})
.on('drag', function(entity) {
d3.event.sourceEvent.stopPropagation();
if (!dragging) {
dragging = true;
mode.history.perform(iD.actions.Noop());
}
mode.history.replace(iD.actions.MoveWay(entity.id, [d3.event.dx, d3.event.dy], mode.map.projection));
})
.on('dragend', function () {
if (!dragging) return;
dragging = undefined;
mode.history.replace(
iD.actions.Noop(),
'moved a way');
});
target;
function remove() {
if (entity.type === 'way') {
@@ -85,7 +61,26 @@ iD.modes.Select = function (entity) {
});
if (entity.type === 'way') {
target.call(dragWay);
var history = mode.history,
projection = mode.map.projection;
target.call(iD.behavior.drag()
.origin(function(entity) {
return projection(entity.nodes[0].loc);
})
.on('start', function() {
history.perform(iD.actions.Noop());
})
.on('move', function(entity) {
d3.event.sourceEvent.stopPropagation();
history.replace(
iD.actions.MoveWay(entity.id, d3.event.dxdy, projection));
})
.on('end', function() {
history.replace(
iD.actions.Noop(),
'moved a way');
}));
}
mode.map.surface.on('click.browse', function () {