orgchart 3.2.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/demo/drag-drop-hybrid-chart.html +81 -0
- package/demo/drag-drop.html +1 -0
- package/demo/index.html +2 -0
- package/demo/isHybrid.html +71 -0
- package/demo/vertical-level.html +17 -16
- package/dist/css/jquery.orgchart.css +2 -19
- package/dist/css/jquery.orgchart.min.css +1 -1
- package/dist/js/jquery.orgchart.js +58 -36
- package/dist/js/jquery.orgchart.min.js +1 -1
- package/dist/js/jquery.orgchart.min.js.map +1 -1
- package/gulpfile.js +2 -1
- package/package.json +3 -2
- package/src/css/jquery.orgchart.css +2 -19
- package/src/js/jquery.orgchart.js +58 -36
- package/test/integration/init-tests.js +4 -4
package/gulpfile.js
CHANGED
|
@@ -48,7 +48,8 @@ gulp.task('addAssets', gulp.series('integration-tests', function () {
|
|
|
48
48
|
'node_modules/jquery/dist/jquery.min.js',
|
|
49
49
|
'node_modules/jquery-mockjax/dist/jquery.mockjax.min.js',
|
|
50
50
|
'node_modules/html2canvas/dist/html2canvas.min.js',
|
|
51
|
-
'node_modules/jspdf/dist/jspdf.umd.min.js'
|
|
51
|
+
'node_modules/jspdf/dist/jspdf.umd.min.js',
|
|
52
|
+
'node_modules/json-digger/dist/json-digger.js'
|
|
52
53
|
])
|
|
53
54
|
.pipe(gulp.dest(paths.demoJSFolder));
|
|
54
55
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orgchart",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"description": "Simple and direct organization chart(tree-like hierarchy) plugin based on pure DOM and jQuery.",
|
|
5
5
|
"main": "./dist/js/jquery.orgchart.min.js",
|
|
6
6
|
"style": [
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"html2canvas": "^1.4.1",
|
|
41
41
|
"jquery": "^3.6.2",
|
|
42
42
|
"jquery-mockjax": "^2.6.0",
|
|
43
|
+
"json-digger": "^2.0.2",
|
|
43
44
|
"jspdf": "^2.5.1"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
@@ -53,7 +54,7 @@
|
|
|
53
54
|
"gulp-eslint": "^4.0.2",
|
|
54
55
|
"gulp-inject": "^4.3.2",
|
|
55
56
|
"gulp-jest": "^4.0.3",
|
|
56
|
-
"gulp-mocha": "^
|
|
57
|
+
"gulp-mocha": "^8.0.0",
|
|
57
58
|
"gulp-rename": "^1.4.0",
|
|
58
59
|
"gulp-sourcemaps": "^2.6.5",
|
|
59
60
|
"gulp-uglify": "^3.0.2",
|
|
@@ -460,17 +460,9 @@
|
|
|
460
460
|
}
|
|
461
461
|
|
|
462
462
|
/* styles for vertical nodes */
|
|
463
|
-
.orgchart .hierarchy.hybrid > .node {
|
|
464
|
-
margin-bottom: 0;
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
.orgchart .hierarchy.hybrid > .node::after {
|
|
468
|
-
content: none;
|
|
469
|
-
}
|
|
470
463
|
|
|
471
464
|
.orgchart .nodes.vertical {
|
|
472
465
|
display: block;
|
|
473
|
-
margin: 0;
|
|
474
466
|
padding-left: 18px;
|
|
475
467
|
}
|
|
476
468
|
|
|
@@ -491,19 +483,10 @@
|
|
|
491
483
|
content: none;
|
|
492
484
|
}
|
|
493
485
|
|
|
494
|
-
.orgchart .nodes.vertical::before {
|
|
495
|
-
content: '';
|
|
496
|
-
display: inline-block;
|
|
497
|
-
position: relative;
|
|
498
|
-
height: 14px;
|
|
499
|
-
width: 2px;
|
|
500
|
-
left: -9px;
|
|
501
|
-
background-color: rgba(217, 83, 79, 0.8);
|
|
502
|
-
}
|
|
503
486
|
.orgchart .nodes.vertical > .hierarchy:first-child::before {
|
|
504
487
|
box-sizing: border-box;
|
|
505
|
-
top: -
|
|
506
|
-
height:
|
|
488
|
+
top: -11px;
|
|
489
|
+
height: 35px;
|
|
507
490
|
width: calc(50% - 2px);
|
|
508
491
|
border-width: 2px 0 0 2px;
|
|
509
492
|
}
|
|
@@ -373,6 +373,9 @@
|
|
|
373
373
|
data.relationship = flags + (data.children && data.children.length > 0 ? 1 : 0);
|
|
374
374
|
if (data.children) {
|
|
375
375
|
data.children.forEach(function(item) {
|
|
376
|
+
if (data.isHybrid || data.isVertical) {
|
|
377
|
+
item.isVertical = true;
|
|
378
|
+
}
|
|
376
379
|
that.attachRel(item, '1' + (data.children.length > 1 ? 1 : 0));
|
|
377
380
|
});
|
|
378
381
|
}
|
|
@@ -1093,7 +1096,8 @@
|
|
|
1093
1096
|
this.$chart.find('.allowedDrop').removeClass('allowedDrop');
|
|
1094
1097
|
},
|
|
1095
1098
|
// when user drops the node, it will be removed from original parent node and be added to new parent node
|
|
1096
|
-
dropHandler: function (event) {
|
|
1099
|
+
dropHandler: async function (event) {
|
|
1100
|
+
var that = this;
|
|
1097
1101
|
var $dropZone = $(event.delegateTarget);
|
|
1098
1102
|
var $dragged = this.$chart.data('dragged');
|
|
1099
1103
|
|
|
@@ -1115,33 +1119,51 @@
|
|
|
1115
1119
|
if (dropEvent.isDefaultPrevented()) {
|
|
1116
1120
|
return;
|
|
1117
1121
|
}
|
|
1118
|
-
//
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1122
|
+
// special process for hybrid chart
|
|
1123
|
+
var datasource = this.$chart.data('options').data;
|
|
1124
|
+
var digger = new JSONDigger(datasource, this.$chart.data('options').nodeId, 'children');
|
|
1125
|
+
const hybridNode = digger.findOneNode({ 'isHybrid': true });
|
|
1126
|
+
if (this.$chart.data('options').verticalLevel > 1 || hybridNode) {
|
|
1127
|
+
var draggedNode = digger.findNodeById($dragged.data('nodeData').id);
|
|
1128
|
+
var copy = Object.assign({}, draggedNode);
|
|
1129
|
+
digger.removeNode(draggedNode.id);
|
|
1130
|
+
var dropNode = digger.findNodeById($dropZone.data('nodeData').id);
|
|
1131
|
+
if (dropNode.children) {
|
|
1132
|
+
dropNode.children.push(copy);
|
|
1133
|
+
} else {
|
|
1134
|
+
dropNode.children = [copy];
|
|
1125
1135
|
}
|
|
1136
|
+
that.init({ 'data': datasource });
|
|
1126
1137
|
} else {
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1138
|
+
// The folowing code snippets are used to process horizontal chart
|
|
1139
|
+
// firstly, deal with the hierarchy of drop zone
|
|
1140
|
+
if (!$dropZone.siblings('.nodes').length) { // if the drop zone is a leaf node
|
|
1141
|
+
$dropZone.append('<i class="edge verticalEdge bottomEdge oci"></i>')
|
|
1142
|
+
.after('<ul class="nodes"></ul>')
|
|
1143
|
+
.siblings('.nodes').append($dragged.find('.horizontalEdge').remove().end().closest('.hierarchy'));
|
|
1144
|
+
if ($dropZone.children('.title').length) {
|
|
1145
|
+
$dropZone.children('.title').prepend('<i class="oci '+ this.$chart.data('options').parentNodeSymbol + ' symbol"></i>');
|
|
1146
|
+
}
|
|
1147
|
+
} else {
|
|
1148
|
+
var horizontalEdges = '<i class="edge horizontalEdge rightEdge oci"></i><i class="edge horizontalEdge leftEdge oci"></i>';
|
|
1149
|
+
if (!$dragged.find('.horizontalEdge').length) {
|
|
1150
|
+
$dragged.append(horizontalEdges);
|
|
1151
|
+
}
|
|
1152
|
+
$dropZone.siblings('.nodes').append($dragged.closest('.hierarchy'));
|
|
1153
|
+
var $dropSibs = $dragged.closest('.hierarchy').siblings().find('.node:first');
|
|
1154
|
+
if ($dropSibs.length === 1) {
|
|
1155
|
+
$dropSibs.append(horizontalEdges);
|
|
1156
|
+
}
|
|
1130
1157
|
}
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1158
|
+
// secondly, deal with the hierarchy of dragged node
|
|
1159
|
+
if ($dragZone.siblings('.nodes').children('.hierarchy').length === 1) { // if there is only one sibling node left
|
|
1160
|
+
$dragZone.siblings('.nodes').children('.hierarchy').find('.node:first')
|
|
1161
|
+
.find('.horizontalEdge').remove();
|
|
1162
|
+
} else if ($dragZone.siblings('.nodes').children('.hierarchy').length === 0) {
|
|
1163
|
+
$dragZone.find('.bottomEdge, .symbol').remove()
|
|
1164
|
+
.end().siblings('.nodes').remove();
|
|
1135
1165
|
}
|
|
1136
1166
|
}
|
|
1137
|
-
// secondly, deal with the hierarchy of dragged node
|
|
1138
|
-
if ($dragZone.siblings('.nodes').children('.hierarchy').length === 1) { // if there is only one sibling node left
|
|
1139
|
-
$dragZone.siblings('.nodes').children('.hierarchy').find('.node:first')
|
|
1140
|
-
.find('.horizontalEdge').remove();
|
|
1141
|
-
} else if ($dragZone.siblings('.nodes').children('.hierarchy').length === 0) {
|
|
1142
|
-
$dragZone.find('.bottomEdge, .symbol').remove()
|
|
1143
|
-
.end().siblings('.nodes').remove();
|
|
1144
|
-
}
|
|
1145
1167
|
},
|
|
1146
1168
|
//
|
|
1147
1169
|
touchstartHandler: function (event) {
|
|
@@ -1324,11 +1346,16 @@
|
|
|
1324
1346
|
$nodeDiv.data('nodeData', nodeData);
|
|
1325
1347
|
// append 4 direction arrows or expand/collapse buttons
|
|
1326
1348
|
var flags = data.relationship || '';
|
|
1327
|
-
if (opts.verticalLevel && level >= opts.verticalLevel) {
|
|
1328
|
-
if (
|
|
1349
|
+
if ((opts.verticalLevel && level >= opts.verticalLevel) || data.isVertical) {
|
|
1350
|
+
if (Number(flags.substr(2,1))) {
|
|
1329
1351
|
$nodeDiv.append('<i class="toggleBtn oci"></i>')
|
|
1330
1352
|
.children('.title').prepend('<i class="oci '+ opts.parentNodeSymbol + ' symbol"></i>');
|
|
1331
1353
|
}
|
|
1354
|
+
} else if (data.isHybrid) {
|
|
1355
|
+
if (Number(flags.substr(2,1))) {
|
|
1356
|
+
$nodeDiv.append('<i class="edge verticalEdge bottomEdge oci"></i>')
|
|
1357
|
+
.children('.title').prepend('<i class="oci '+ opts.parentNodeSymbol + ' symbol"></i>');
|
|
1358
|
+
}
|
|
1332
1359
|
} else {
|
|
1333
1360
|
if (Number(flags.substr(0,1))) {
|
|
1334
1361
|
$nodeDiv.append('<i class="edge verticalEdge topEdge oci"></i>');
|
|
@@ -1375,25 +1402,20 @@
|
|
|
1375
1402
|
}
|
|
1376
1403
|
// Construct the node
|
|
1377
1404
|
if (Object.keys(data).length > 2) {
|
|
1378
|
-
|
|
1379
|
-
if (opts.verticalLevel && level >= opts.verticalLevel) {
|
|
1380
|
-
$appendTo.append($nodeDiv);
|
|
1381
|
-
} else {
|
|
1382
|
-
$appendTo.append($nodeDiv);
|
|
1383
|
-
}
|
|
1405
|
+
$appendTo.append(this.createNode(data));
|
|
1384
1406
|
}
|
|
1385
1407
|
// Construct the "inferior nodes"
|
|
1386
1408
|
if (data.children && data.children.length) {
|
|
1387
1409
|
var isHidden = level + 1 > opts.visibleLevel || (data.collapsed !== undefined && data.collapsed);
|
|
1388
|
-
var isVerticalLayer = opts.verticalLevel && (level + 1) >= opts.verticalLevel;
|
|
1389
1410
|
var $nodesLayer;
|
|
1390
|
-
if (
|
|
1411
|
+
if ((opts.verticalLevel && (level + 1) >= opts.verticalLevel) || data.isHybrid) {
|
|
1391
1412
|
$nodesLayer = $('<ul class="nodes">');
|
|
1392
|
-
if (isHidden && level + 1 >= opts.verticalLevel) {
|
|
1413
|
+
if (isHidden && (opts.verticalLevel && (level + 1) >= opts.verticalLevel)) {
|
|
1393
1414
|
$nodesLayer.addClass('hidden');
|
|
1394
1415
|
}
|
|
1395
|
-
if (level + 1 === opts.verticalLevel)
|
|
1396
|
-
|
|
1416
|
+
if (((opts.verticalLevel && level + 1 === opts.verticalLevel) || data.isHybrid)
|
|
1417
|
+
&& !$appendTo.closest('.vertical').length) {
|
|
1418
|
+
$appendTo.append($nodesLayer.addClass('vertical'));
|
|
1397
1419
|
} else {
|
|
1398
1420
|
$appendTo.append($nodesLayer);
|
|
1399
1421
|
}
|
|
@@ -72,7 +72,7 @@ describe('orgchart -- integration tests', function () {
|
|
|
72
72
|
});
|
|
73
73
|
|
|
74
74
|
it('initialize chart with the given vertical level', function () {
|
|
75
|
-
var fragment = '<li class="hierarchy
|
|
75
|
+
var fragment = '<li class="hierarchy"><div id="n1" class="node"><div class="title">' +
|
|
76
76
|
'<i class="oci oci-leader symbol"></i>Lao Lao</div><i class="edge verticalEdge bottomEdge oci">' +
|
|
77
77
|
'</i></div><ul class="nodes vertical"><li class="hierarchy"><div id="n2" data-parent="n1" class="node">' +
|
|
78
78
|
'<div class="title">Bo Miao</div></div></li><li class="hierarchy"><div id="n3" data-parent="n1" class="node">' +
|
|
@@ -100,7 +100,7 @@ describe('orgchart -- integration tests', function () {
|
|
|
100
100
|
};
|
|
101
101
|
|
|
102
102
|
it('verticalLevel=2 and visibleLevel=1', function () {
|
|
103
|
-
var fragment = '<div class="orgchart"><ul class="nodes"><li class="hierarchy
|
|
103
|
+
var fragment = '<div class="orgchart"><ul class="nodes"><li class="hierarchy">' +
|
|
104
104
|
'<div class="node"><div class="title"><i class="oci oci-leader symbol">' +
|
|
105
105
|
'</i>Lao Lao</div><i class="edge verticalEdge bottomEdge oci"></i></div>' +
|
|
106
106
|
'<ul class="nodes hidden vertical"><li class="hierarchy"><div class="node slide-up">' +
|
|
@@ -119,7 +119,7 @@ describe('orgchart -- integration tests', function () {
|
|
|
119
119
|
});
|
|
120
120
|
|
|
121
121
|
it('verticalLevel=2 and visibleLevel=2', function () {
|
|
122
|
-
var fragment = '<div class="orgchart"><ul class="nodes"><li class="hierarchy
|
|
122
|
+
var fragment = '<div class="orgchart"><ul class="nodes"><li class="hierarchy">' +
|
|
123
123
|
'<div class="node"><div class="title"><i class="oci oci-leader symbol"></i>Lao Lao</div>' +
|
|
124
124
|
'<i class="edge verticalEdge bottomEdge oci"></i></div><ul class="nodes vertical">' +
|
|
125
125
|
'<li class="hierarchy"><div class="node"><div class="title">Bo Miao</div></div></li>' +
|
|
@@ -137,7 +137,7 @@ describe('orgchart -- integration tests', function () {
|
|
|
137
137
|
});
|
|
138
138
|
|
|
139
139
|
it('verticalLevel=2 and visibleLevel=3', function () {
|
|
140
|
-
var fragment = '<div class="orgchart"><ul class="nodes"><li class="hierarchy
|
|
140
|
+
var fragment = '<div class="orgchart"><ul class="nodes"><li class="hierarchy">' +
|
|
141
141
|
'<div class="node"><div class="title"><i class="oci oci-leader symbol"></i>Lao Lao</div>' +
|
|
142
142
|
'<i class="edge verticalEdge bottomEdge oci"></i></div><ul class="nodes vertical">' +
|
|
143
143
|
'<li class="hierarchy"><div class="node"><div class="title">Bo Miao</div></div></li>' +
|