Detect delete/backspace key in blueprint-composer

Project: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/commit/68ed4d93
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/tree/68ed4d93
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/diff/68ed4d93

Branch: refs/heads/master
Commit: 68ed4d93e32b24f1e79640dab6931bec579221fe
Parents: 44eccff
Author: Paul Campbell <paul.campb...@cloudsoft.io>
Authored: Mon Aug 27 13:04:18 2018 +0100
Committer: Paul Campbell <paul.campb...@cloudsoft.io>
Committed: Mon Aug 27 15:31:25 2018 +0100

----------------------------------------------------------------------
 .../app/components/util/d3-blueprint.js         | 31 ++++++++++++++++++++
 1 file changed, 31 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/68ed4d93/ui-modules/blueprint-composer/app/components/util/d3-blueprint.js
----------------------------------------------------------------------
diff --git a/ui-modules/blueprint-composer/app/components/util/d3-blueprint.js 
b/ui-modules/blueprint-composer/app/components/util/d3-blueprint.js
index da3e090..4d5ff2d 100755
--- a/ui-modules/blueprint-composer/app/components/util/d3-blueprint.js
+++ b/ui-modules/blueprint-composer/app/components/util/d3-blueprint.js
@@ -314,6 +314,34 @@ export function D3Blueprint(container) {
     }
 
     /**
+     * Triggered when a key is release on the page.
+     *
+     * * Ignores where key press did not originate from the page body (i.e. 
ignores input to text fields)
+     * * Fires a custom event "delete-entity" when the delete key is pressed.
+     */
+    function onKeyUp() {
+        d3.event.stopPropagation();
+        if (d3.event.target.nodeName == 'BODY') {
+            if (d3.event.key === "Delete" || d3.event.key === "Backspace") {
+                console.log('-- DELETE/BACKSPACE key outside of text field 
--');
+                // the selected entity:
+                var selected = _svg.selectAll('.entity.selected');
+                var nItemsSelected = selected._groups[0].length;
+                if (nItemsSelected > 0) {
+                    console.log('Dispatch event to remove node(s)');
+                    // entity = ...
+                    // let event = new CustomEvent("delete-entity", {
+                    //      detail: {
+                    //          entity: entity,
+                    //      }
+                    //  });
+                    //  container.dispatchEvent(event);
+                }
+            }
+        }
+    }
+
+    /**
      * Handles the start of a drag operation. Note that this callback is to be 
used with the internal D3 drag feature.
      *
      * @param node The node for the dragged entity
@@ -1011,6 +1039,9 @@ export function D3Blueprint(container) {
         _dropZoneGroup.selectAll('.dropzone').classed('hidden', false);
     }
 
+    // register global key events
+    d3.select('body').on('keyup.body', onKeyUp);
+
     return {
         draw: draw,
         update: update,

Reply via email to