Skip to content

Commit 358b58c

Browse files
committed
append option dropCriteria
1 parent 88de4a5 commit 358b58c

File tree

6 files changed

+51
-13
lines changed

6 files changed

+51
-13
lines changed

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,21 @@ $('#btn-delete-nodes').on('click', function() {
352352

353353
- **[I wanna drag & drop the nodes of orgchart](http://dabeng.github.io/OrgChart/drag-drop/)**
354354

355-
Users are allowed to drag & drop the nodes of orgchart when option "draggable" is assigned to true.
355+
Users are allowed to drag & drop the nodes of orgchart when option "draggable" is assigned to true. Furthermore, users can make use of option dropCriteria to inject their custom limitations on drag & drop. As shown below, we don't want an manager employee to be under a engineer under no circumstance.
356+
```js
357+
// sample of core source code
358+
$('#chart-container').orgchart({
359+
'data' : datascource,
360+
'nodeContent': 'title',
361+
'draggable': true,
362+
'dropCriteria': function($draggedNode, $dragZone, $dropZone) {
363+
if($draggedNode.find('.content').text().indexOf('manager') > -1 && $dropZone.find('.content').text().indexOf('engineer') > -1) {
364+
return false;
365+
}
366+
return true;
367+
}
368+
})
369+
```
356370

357371
![drag & drop](http://dabeng.github.io/OrgChart/drag-drop/recorder.gif)
358372

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "orgchart",
3-
"version": "1.1.0",
3+
"version": "1.1.1",
44
"homepage": "https://github.com/dabeng/OrgChart",
55
"authors": [
66
"dabeng <dabeng413@gmail.com>"

dist/js/jquery.orgchart.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -674,20 +674,29 @@
674674
$nodeDiv.on('dragstart', function(event) {
675675
event.originalEvent.dataTransfer.setData('text/html', 'hack for firefox');
676676
var $dragged = $(this);
677-
var $draggedZone = $dragged.closest('table').find('.node');
677+
var $dragZone = $dragged.closest('.nodes').siblings().eq(0).find('.node:first');
678+
var $dragHier = $dragged.closest('table').find('.node');
678679
$dragged.closest('.orgchart')
679680
.data('dragged', $dragged)
680681
.find('.node').each(function(index, node) {
681-
if ($draggedZone.index(node) === -1) {
682-
$(node).addClass('allowedDrop');
682+
if ($dragHier.index(node) === -1) {
683+
if (opts.dropCriteria) {
684+
if (opts.dropCriteria($dragged, $dragZone, $(node))) {
685+
$(node).addClass('allowedDrop');
686+
}
687+
} else {
688+
$(node).addClass('allowedDrop');
689+
}
683690
}
684691
});
685692
})
686693
.on('dragover', function(event) {
687694
event.preventDefault();
688695
var $dropZone = $(this);
689696
var $dragged = $dropZone.closest('.orgchart').data('dragged');
690-
if ($dragged.closest('table').find('.node').index($dropZone) > -1) {
697+
var $dragZone = $dragged.closest('.nodes').siblings().eq(0).find('.node:first');
698+
if ($dragged.closest('table').find('.node').index($dropZone) > -1 ||
699+
(opts.dropCriteria && !opts.dropCriteria($dragged, $dragZone, $dropZone))) {
691700
event.originalEvent.dataTransfer.dropEffect = 'none';
692701
}
693702
})

examples/drag-drop/scripts.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
'title': 'general manager',
1010
'children': [
1111
{ 'name': 'Bo Miao', 'title': 'department manager',
12-
'children': [{ 'name': 'Li Xin', 'title': 'senior' }]
12+
'children': [{ 'name': 'Li Xin', 'title': 'senior engineer' }]
1313
},
1414
{ 'name': 'Su Miao', 'title': 'department manager',
1515
'children': [
@@ -30,7 +30,13 @@
3030
$('#chart-container').orgchart({
3131
'data' : datascource,
3232
'nodeContent': 'title',
33-
'draggable': true
33+
'draggable': true,
34+
'dropCriteria': function($draggedNode, $dragZone, $dropZone) {
35+
if($draggedNode.find('.content').text().indexOf('manager') > -1 && $dropZone.find('.content').text().indexOf('engineer') > -1) {
36+
return false;
37+
}
38+
return true;
39+
}
3440
})
3541
.children('.orgchart').on('nodedropped.orgchart', function(event) {
3642
console.log('draggedNode:' + event.draggedNode.children('.title').text()

examples/js/jquery.orgchart.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -674,20 +674,29 @@
674674
$nodeDiv.on('dragstart', function(event) {
675675
event.originalEvent.dataTransfer.setData('text/html', 'hack for firefox');
676676
var $dragged = $(this);
677-
var $draggedZone = $dragged.closest('table').find('.node');
677+
var $dragZone = $dragged.closest('.nodes').siblings().eq(0).find('.node:first');
678+
var $dragHier = $dragged.closest('table').find('.node');
678679
$dragged.closest('.orgchart')
679680
.data('dragged', $dragged)
680681
.find('.node').each(function(index, node) {
681-
if ($draggedZone.index(node) === -1) {
682-
$(node).addClass('allowedDrop');
682+
if ($dragHier.index(node) === -1) {
683+
if (opts.dropCriteria) {
684+
if (opts.dropCriteria($dragged, $dragZone, $(node))) {
685+
$(node).addClass('allowedDrop');
686+
}
687+
} else {
688+
$(node).addClass('allowedDrop');
689+
}
683690
}
684691
});
685692
})
686693
.on('dragover', function(event) {
687694
event.preventDefault();
688695
var $dropZone = $(this);
689696
var $dragged = $dropZone.closest('.orgchart').data('dragged');
690-
if ($dragged.closest('table').find('.node').index($dropZone) > -1) {
697+
var $dragZone = $dragged.closest('.nodes').siblings().eq(0).find('.node:first');
698+
if ($dragged.closest('table').find('.node').index($dropZone) > -1 ||
699+
(opts.dropCriteria && !opts.dropCriteria($dragged, $dragZone, $dropZone))) {
691700
event.originalEvent.dataTransfer.dropEffect = 'none';
692701
}
693702
})

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "orgchart",
3-
"version": "1.1.0",
3+
"version": "1.1.1",
44
"description": "Simple and direct organization chart(tree-like hierarchy) plugin based on pure DOM and jQuery.",
55
"main": "./dist/js/jquery.orgchart.js",
66
"style": [

0 commit comments

Comments
 (0)