From c9111adf232ee0eda0af96a8b16020c098b13220 Mon Sep 17 00:00:00 2001 From: Wes Date: Sat, 19 Nov 2011 14:19:41 +0000 Subject: [PATCH] removed bug in dragndrop where nodes with html were pushing null/partial content --- example/jquery.jOrgChart.js | 36 ++++++++++++++++++++++++--------- jquery.jOrgChart.js | 40 +++++++++++++++++++++++++++---------- 2 files changed, 56 insertions(+), 20 deletions(-) diff --git a/example/jquery.jOrgChart.js b/example/jquery.jOrgChart.js index 470d9aa..ebb5873 100644 --- a/example/jquery.jOrgChart.js +++ b/example/jquery.jOrgChart.js @@ -32,7 +32,7 @@ // add drag and drop if enabled if(opts.dragAndDrop){ - $('.node').draggable({ + $('div.node').draggable({ cursor : 'move', distance : 40, helper : 'clone', @@ -46,7 +46,7 @@ stop : handleDragStop }); - $('.node').droppable({ + $('div.node').droppable({ accept : '.node', activeClass : 'drag-active', drop : handleDropEvent, @@ -72,15 +72,33 @@ } // Drop event handler for nodes - function handleDropEvent( event, ui ) { - console.log('handleDropEvent'); + function handleDropEvent( event, ui ) { var sourceNode = ui.draggable; var targetNode = $(this); - var targetLi = $('li:contains("' + targetNode.html() +'")').last(); + // finding nodes based on plaintext and html + // content is hard! + var targetLi = $('li').filter(function(){ + + li = $(this).clone() + .children("ul,li") + .remove() + .end(); + + return li.html() == targetNode.html(); + }); - var sourceliHtml = $('li:contains("' + sourceNode.html() +'")').last().clone(); - var sourceLi = $('li:contains("' + sourceNode.html() +'")').last(); + var sourceLi = $('li').filter(function(){ + + li = $(this).clone() + .children("ul,li") + .remove() + .end(); + + return li.html() == sourceNode.html(); + }); + + var sourceliClone = sourceLi.clone(); var sourceUl = sourceLi.parent('ul'); if(sourceUl.children('li').size() > 1){ @@ -90,9 +108,9 @@ } if(targetLi.children('ul').size() >0){ - targetLi.children('ul').append('
  • '+sourceliHtml.html()+'
  • '); + targetLi.children('ul').append('
  • '+sourceliClone.html()+'
  • '); }else{ - targetLi.append(''); + targetLi.append(''); } } // handleDropEvent diff --git a/jquery.jOrgChart.js b/jquery.jOrgChart.js index 496227f..ebb5873 100644 --- a/jquery.jOrgChart.js +++ b/jquery.jOrgChart.js @@ -32,7 +32,7 @@ // add drag and drop if enabled if(opts.dragAndDrop){ - $('.node').draggable({ + $('div.node').draggable({ cursor : 'move', distance : 40, helper : 'clone', @@ -46,7 +46,7 @@ stop : handleDragStop }); - $('.node').droppable({ + $('div.node').droppable({ accept : '.node', activeClass : 'drag-active', drop : handleDropEvent, @@ -72,15 +72,33 @@ } // Drop event handler for nodes - function handleDropEvent( event, ui ) { - console.log('handleDropEvent'); + function handleDropEvent( event, ui ) { var sourceNode = ui.draggable; var targetNode = $(this); - var targetLi = $('li:contains("' + targetNode.html() +'")').last(); + // finding nodes based on plaintext and html + // content is hard! + var targetLi = $('li').filter(function(){ + + li = $(this).clone() + .children("ul,li") + .remove() + .end(); + + return li.html() == targetNode.html(); + }); - var sourceliHtml = $('li:contains("' + sourceNode.html() +'")').last().clone(); - var sourceLi = $('li:contains("' + sourceNode.html() +'")').last(); + var sourceLi = $('li').filter(function(){ + + li = $(this).clone() + .children("ul,li") + .remove() + .end(); + + return li.html() == sourceNode.html(); + }); + + var sourceliClone = sourceLi.clone(); var sourceUl = sourceLi.parent('ul'); if(sourceUl.children('li').size() > 1){ @@ -90,14 +108,14 @@ } if(targetLi.children('ul').size() >0){ - targetLi.children('ul').append('
  • '+sourceliHtml.html()+'
  • '); + targetLi.children('ul').append('
  • '+sourceliClone.html()+'
  • '); }else{ - targetLi.append(''); + targetLi.append(''); } - } + } // handleDropEvent - } + } // Drag and drop }; // Option defaults