From 2dde72469458c764f0c8aa70d6d6697c7d3aa596 Mon Sep 17 00:00:00 2001 From: Anton Lavrenov Date: Tue, 30 Aug 2016 09:07:32 +0300 Subject: [PATCH] fix "removing parent element of a dragging node will throw an error". close #166 --- src/DragAndDrop.js | 5 ++++- test/unit/DragAndDrop-test.js | 32 +++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/DragAndDrop.js b/src/DragAndDrop.js index cc243948..a6363d44 100644 --- a/src/DragAndDrop.js +++ b/src/DragAndDrop.js @@ -76,7 +76,10 @@ delete dd.node; - (layer || node).draw(); + if (node.getLayer() || layer) { + (layer || node).draw(); + } + } }, _endDragAfter: function(evt) { diff --git a/test/unit/DragAndDrop-test.js b/test/unit/DragAndDrop-test.js index 8c82501c..0cba2ec3 100644 --- a/test/unit/DragAndDrop-test.js +++ b/test/unit/DragAndDrop-test.js @@ -286,4 +286,34 @@ suite('DragAndDrop', function() { }); }); -}); \ No newline at end of file + + // ====================================================== + test('removing parent of draggable node should not throw error', function() { + var stage = addStage(); + var layer = new Konva.Layer(); + stage.add(layer); + var circle = new Konva.Circle({ + x: 380, + y: stage.getHeight() / 2, + radius: 70, + strokeWidth: 4, + fill: 'red', + stroke: 'black', + draggable: true + }); + + layer.add(circle); + stage.simulateMouseMove({ + x: stage.width() / 2 + 5, + y: stage.height() / 2 + }); + + circle.startDrag(); + try { + layer.destroy(); + assert.equal(true, true, 'no error, that is very good'); + } catch (e) { + assert.equal(true, false, 'error happened'); + } + }); +});