From aa21e4b30182c4118fad8225f20a341251453c99 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Mon, 28 Jan 2013 15:56:37 -0500 Subject: [PATCH] Undo cancels drags --- js/id/behavior/drag.js | 19 ++++++++++++++++++- js/id/behavior/drag_node.js | 3 ++- js/id/behavior/drag_way.js | 3 ++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/js/id/behavior/drag.js b/js/id/behavior/drag.js index 29f033c1c..9a7ed4fdc 100644 --- a/js/id/behavior/drag.js +++ b/js/id/behavior/drag.js @@ -23,7 +23,8 @@ iD.behavior.drag = function () { var event = d3.dispatch("start", "move", "end"), origin = null, selector = '', - filter = null; + filter = null, + keybinding = d3.keybinding('drag'); event.of = function(thiz, argumentz) { return function(e1) { @@ -135,6 +136,9 @@ iD.behavior.drag = function () { drag.off = function(selection) { selection.on("mousedown.drag" + selector, null) .on("touchstart.drag" + selector, null); + keybinding + .on('⌘+Z', null) + .on('⌃+Z', null); }; drag.delegate = function(_) { @@ -155,5 +159,18 @@ iD.behavior.drag = function () { return drag; }; + drag.cancel = function() { + d3.select(window) + .on("mousemove.drag", null) + .on("mouseup.drag", null); + return drag; + }; + + keybinding + .on('⌘+Z', drag.cancel) + .on('⌃+Z', drag.cancel); + + d3.select(document).call(keybinding); + return d3.rebind(drag, event, "on"); }; diff --git a/js/id/behavior/drag_node.js b/js/id/behavior/drag_node.js index e104c795f..084c81895 100644 --- a/js/id/behavior/drag_node.js +++ b/js/id/behavior/drag_node.js @@ -14,7 +14,8 @@ iD.behavior.DragNode = function(mode) { .on('move', function(entity) { d3.event.sourceEvent.stopPropagation(); history.replace( - iD.actions.MoveNode(entity.id, projection.invert(d3.event.point))); + iD.actions.MoveNode(entity.id, projection.invert(d3.event.point)), + 'moved a node'); }) .on('end', function() { history.replace( diff --git a/js/id/behavior/drag_way.js b/js/id/behavior/drag_way.js index 47045f5ac..6de8ca252 100644 --- a/js/id/behavior/drag_way.js +++ b/js/id/behavior/drag_way.js @@ -17,7 +17,8 @@ iD.behavior.DragWay = function(mode) { .on('move', function(entity) { d3.event.sourceEvent.stopPropagation(); history.replace( - iD.actions.MoveWay(entity.id, d3.event.delta, projection)); + iD.actions.MoveWay(entity.id, d3.event.delta, projection), + 'moved a way'); }) .on('end', function() { history.replace(