')
.addClass('node ' + (nodeData.className || '') + (level >= opts.depth ? ' slide-up' : ''));
if (opts.nodeTemplate) {
$nodeDiv.append(opts.nodeTemplate(nodeData));
@@ -988,44 +989,53 @@
var $dragged = $orgchart.data('dragged');
$orgchart.find('.allowedDrop').removeClass('allowedDrop');
var $dragZone = $dragged.closest('.nodes').siblings().eq(0).children();
- // firstly, deal with the hierarchy of drop zone
- if (!$dropZone.closest('tr').siblings().length) { // if the drop zone is a leaf node
- $dropZone.append('
')
- .parent().attr('colspan', 2)
- .parent().after('
|
'
- + '
| |
'
- + '
|
')
- .siblings(':last').append($dragged.find('.horizontalEdge').remove().end().closest('table').parent());
- } else {
- var dropColspan = parseInt($dropZone.parent().attr('colspan')) + 2;
- var horizontalEdges = '
';
- $dropZone.closest('tr').next().addBack().children().attr('colspan', dropColspan);
- if (!$dragged.find('.horizontalEdge').length) {
- $dragged.append(horizontalEdges);
- }
- $dropZone.closest('tr').siblings().eq(1).children(':last').before('
| | ')
- .end().next().append($dragged.closest('table').parent());
- var $dropSibs = $dragged.closest('table').parent().siblings().find('.node:first');
- if ($dropSibs.length === 1) {
- $dropSibs.append(horizontalEdges);
- }
- }
- // secondly, deal with the hierarchy of dragged node
- var dragColspan = parseInt($dragZone.attr('colspan'));
- if (dragColspan > 2) {
- $dragZone.attr('colspan', dragColspan - 2)
- .parent().next().children().attr('colspan', dragColspan - 2)
- .end().next().children().slice(1, 3).remove();
- var $dragSibs = $dragZone.parent().siblings('.nodes').children().find('.node:first');
- if ($dragSibs.length ===1) {
- $dragSibs.find('.horizontalEdge').remove();
- }
- } else {
- $dragZone.removeAttr('colspan')
- .find('.bottomEdge').remove()
- .end().end().siblings().remove();
- }
- $orgchart.triggerHandler({ 'type': 'nodedropped.orgchart', 'draggedNode': $dragged, 'dragZone': $dragZone.children(), 'dropZone': $dropZone });
+ var promise = $.Deferred().resolve();
+ if (opts.validateDrop) {
+ promise = $orgchart.triggerHandler({'type': 'validate.nodedropped.orgchart','draggedNode': $dragged,'dragZone': $dragZone.children(),'dropZone': $dropZone});
+ }
+ promise.then(function () {
+ // firstly, deal with the hierarchy of drop zone
+ if (!$dropZone.closest('tr').siblings().length) { // if the drop zone is a leaf node
+ $dropZone.append('
')
+ .parent().attr('colspan', 2)
+ .parent().after('
|
'
+ + '
| |
'
+ + '
|
')
+ .siblings(':last').append($dragged.find('.horizontalEdge').remove().end().closest('table').parent());
+ } else {
+ var dropColspan = parseInt($dropZone.parent().attr('colspan')) + 2;
+ var horizontalEdges = '
';
+ $dropZone.closest('tr').next().addBack().children().attr('colspan', dropColspan);
+ if (!$dragged.find('.horizontalEdge').length) {
+ $dragged.append(horizontalEdges);
+ }
+ $dropZone.closest('tr').siblings().eq(1).children(':last').before('
| | ')
+ .end().next().append($dragged.closest('table').parent());
+ var $dropSibs = $dragged.closest('table').parent().siblings().find('.node:first');
+ if ($dropSibs.length === 1) {
+ $dropSibs.append(horizontalEdges);
+ }
+ }
+ // secondly, deal with the hierarchy of dragged node
+ var dragColspan = parseInt($dragZone.attr('colspan'));
+ if (dragColspan > 2) {
+ $dragZone.attr('colspan', dragColspan - 2)
+ .parent().next().children().attr('colspan', dragColspan - 2)
+ .end().next().children().slice(1, 3).remove();
+ var $dragSibs = $dragZone.parent().siblings('.nodes').children().find('.node:first');
+ if ($dragSibs.length ===1) {
+ $dragSibs.find('.horizontalEdge').remove();
+ }
+ } else {
+ $dragZone.removeAttr('colspan')
+ .find('.bottomEdge').remove()
+ .end().end().siblings().remove();
+ }
+ $orgchart.triggerHandler({ 'type': 'nodedropped.orgchart', 'draggedNode': $dragged, 'dragZone': $dragZone.children(), 'dropZone': $dropZone });
+ })
+ .catch(function () {
+ console.log('Not allowed to move node to destination');
+ });
});
}
// allow user to append dom modification after finishing node create of orgchart