mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 01:02:58 +00:00
Extract MoveWay action
This commit is contained in:
@@ -54,6 +54,7 @@
|
||||
<script src="js/id/actions/delete_node.js"></script>
|
||||
<script src="js/id/actions/delete_way.js"></script>
|
||||
<script src='js/id/actions/move_node.js'></script>
|
||||
<script src='js/id/actions/move_way.js'></script>
|
||||
<script src='js/id/actions/noop.js'></script>
|
||||
<script src='js/id/actions/remove_relation_member.js'></script>
|
||||
<script src='js/id/actions/remove_way_node.js'></script>
|
||||
|
||||
14
js/id/actions/move_way.js
Normal file
14
js/id/actions/move_way.js
Normal file
@@ -0,0 +1,14 @@
|
||||
iD.actions.MoveWay = function(wayId, dxdy, projection) {
|
||||
return function(graph) {
|
||||
var way = graph.entity(wayId);
|
||||
|
||||
_.uniq(way.nodes).forEach(function(id) {
|
||||
var node = graph.entity(id),
|
||||
start = projection(node.loc),
|
||||
end = projection.invert([start[0] + dxdy[0], start[1] + dxdy[1]]);
|
||||
graph = iD.actions.MoveNode(id, end)(graph);
|
||||
});
|
||||
|
||||
return graph;
|
||||
};
|
||||
};
|
||||
@@ -22,15 +22,7 @@ iD.modes.Select = function (entity) {
|
||||
mode.history.perform(iD.actions.Noop());
|
||||
}
|
||||
|
||||
_.uniq(_.pluck(entity.nodes, 'id'))
|
||||
.forEach(function(id) {
|
||||
var node = mode.history.graph().entity(id),
|
||||
start = mode.map.projection(node.loc),
|
||||
end = mode.map.projection.invert([
|
||||
start[0] + d3.event.dx,
|
||||
start[1] + d3.event.dy]);
|
||||
mode.history.replace(iD.actions.Move(id, end));
|
||||
});
|
||||
mode.history.replace(iD.actions.MoveWay(entity.id, [d3.event.dx, d3.event.dy], mode.map.projection));
|
||||
})
|
||||
.on('dragend', function () {
|
||||
if (!dragging) return;
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
<script src="../js/id/actions/delete_node.js"></script>
|
||||
<script src="../js/id/actions/delete_way.js"></script>
|
||||
<script src='../js/id/actions/move_node.js'></script>
|
||||
<script src='../js/id/actions/move_way.js'></script>
|
||||
<script src='../js/id/actions/noop.js'></script>
|
||||
<script src='../js/id/actions/remove_relation_member.js'></script>
|
||||
<script src='../js/id/actions/remove_way_node.js'></script>
|
||||
@@ -95,6 +96,7 @@
|
||||
<script src="spec/actions/delete_node.js"></script>
|
||||
<script src="spec/actions/delete_way.js"></script>
|
||||
<script src="spec/actions/move_node.js"></script>
|
||||
<script src="spec/actions/move_way.js"></script>
|
||||
<script src="spec/actions/noop.js"></script>
|
||||
<script src="spec/actions/remove_way_node.js"></script>
|
||||
<script src="spec/actions/remove_relation_member.js"></script>
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
<script src="spec/actions/delete_node.js"></script>
|
||||
<script src="spec/actions/delete_way.js"></script>
|
||||
<script src="spec/actions/move_node.js"></script>
|
||||
<script src="spec/actions/move_way.js"></script>
|
||||
<script src="spec/actions/noop.js"></script>
|
||||
<script src="spec/actions/remove_way_node.js"></script>
|
||||
<script src="spec/actions/remove_relation_member.js"></script>
|
||||
|
||||
21
test/spec/actions/move_way.js
Normal file
21
test/spec/actions/move_way.js
Normal file
@@ -0,0 +1,21 @@
|
||||
describe("iD.actions.MoveWay", function () {
|
||||
it("moves all nodes in a way by the given amount", function () {
|
||||
var node1 = iD.Node({loc: [0, 0]}),
|
||||
node2 = iD.Node({loc: [5, 10]}),
|
||||
way = iD.Way({nodes: [node1.id, node2.id]}),
|
||||
dxdy = [2, 3],
|
||||
projection = d3.geo.mercator(),
|
||||
graph = iD.actions.MoveWay(way.id, dxdy, projection)(iD.Graph([node1, node2, way]));
|
||||
expect(graph.entity(node1.id).loc).to.eql([1.4400000000000002, -2.1594885414215783]);
|
||||
expect(graph.entity(node2.id).loc).to.eql([6.440000000000008, 7.866329874099955]);
|
||||
});
|
||||
|
||||
it("moves repeated nodes only once", function () {
|
||||
var node = iD.Node({loc: [0, 0]}),
|
||||
way = iD.Way({nodes: [node.id, node.id]}),
|
||||
dxdy = [2, 3],
|
||||
projection = d3.geo.mercator(),
|
||||
graph = iD.actions.MoveWay(way.id, dxdy, projection)(iD.Graph([node, way]));
|
||||
expect(graph.entity(node.id).loc).to.eql([1.4400000000000002, -2.1594885414215783]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user