')
.append('
' + nodeData.ddsId + '
')
.append('
' + nodeData[opts.nodeId] + '
')
.append('
' + nodeData.typeId + '
')
.append('
' + nodeData.symbol + '
')
.append('
' + nodeData.eqNr + '
')
.append('
' + nodeData.info + '
')
.append('
' + nodeData.assignState + '
')
.append('
' + nodeData.tactIdentifier + '
')
.append('
' + nodeData.sign + '
')
.append('
' + nodeData.designator + '
')
.addClass('node ' + (nodeData.className || '') + (level >= opts.depth ? ' slide-up' : ''))
.append('
'+ (nodeData.image ? nodeData.image : '') + '
')
.append('
' + nodeData[opts.nodeTitle] + '
')
.append('
' + (nodeData.isUnit === 'true' ? opts.unit_name : nodeData.eqNr) + '
')
.append(typeof opts.nodeContent !== 'undefined' ? '
' + (nodeData[opts.nodeContent] || '') + '
' : '');
// append 4 direction arrows or expand/collapse buttons
var flags = nodeData.relationship || '';
if (opts.verticalDepth && (level + 2) > opts.verticalDepth) {
if ((level + 1) >= opts.verticalDepth && Number(flags.substr(2,1))) {
var icon = level + 1 >= opts.depth ? 'plus' : 'minus';
$nodeDiv.append('
');
}
} else {
if (Number(flags.substr(0,1))) {
$nodeDiv.append('
');
}
if(Number(flags.substr(1,1))) {
$nodeDiv.append('
' +
'
');
}
if(Number(flags.substr(2,1))) {
$nodeDiv.append('
')
.children('.title').prepend('
');
}
}
$nodeDiv.on('mouseenter mouseleave', function(event) {
var $node = $(this), flag = false;
var $topEdge = $node.children('.topEdge');
var $rightEdge = $node.children('.rightEdge');
var $bottomEdge = $node.children('.bottomEdge');
var $leftEdge = $node.children('.leftEdge');
if (event.type === 'mouseenter') {
if ($topEdge.length) {
flag = getNodeState($node, 'parent').visible;
$topEdge.toggleClass('fa-chevron-up', !flag).toggleClass('fa-chevron-down', flag);
}
if ($bottomEdge.length) {
flag = getNodeState($node, 'children').visible;
$bottomEdge.toggleClass('fa-chevron-down', !flag).toggleClass('fa-chevron-up', flag);
}
if ($leftEdge.length) {
switchHorizontalArrow($node);
}
} else {
$node.children('.edge').removeClass('fa-chevron-up fa-chevron-down fa-chevron-right fa-chevron-left');
}
});
$nodeDiv.on('dblclick', function(event)
{
window.webNotifier.startDBClick(nodeData.ddsId);
});
// define click event handler
$nodeDiv.on('click', function(event)
{
//hide menu if already shown
var menu = $(".menu");
menu.hide();
window.currentSelectedDiv=-1;
$(this).addClass('focused');
return false
});
// define click event handler
$nodeDiv.on('contextmenu', function(e)
{
if(!opts.menu)
return;
var menu = $(".menu");
menu.find(".menuDelete").text(opts.menu_delete)
menu.find(".menuEdit").text(opts.menu_edit)
// window.currentSelectedId=nodeData.ddsId;
//create new object!
var $tr = $(this)
window.currentSelectedDiv =
{
'id': nodeData.id,
'ddsId': parseInt($tr.find('.ddsid').text()),
'typeId': parseInt($tr.find('.typeid').text()),
'symbol': $tr.find('.symbol').text(),
'eqNr': parseInt($tr.find('.eqnr').text()),
'isUnit': $tr.find('.unit').text(),
'name': $tr.find('.title').text(),
'info': $tr.find('.info').text(),
'assignState': parseInt($tr.find('.assignstate').text()),
'tactIdentifier': $tr.find('.tactidentifier').text(),
'sign': $tr.find('.sign').text(),
'designator': $tr.find('.designator').text(),
'title': $tr.find('.content').text()
};
//console.error(JSON.stringify(window.currentSelectedDiv))
//hide menu if already shown
menu.hide();
//get x and y values of the click event
var pageX = e.pageX;
var pageY = e.pageY;
//position menu div near mouse cliked area
menu.css({top: pageY , left: pageX});
var mwidth = menu.width();
var mheight = menu.height();
var screenWidth = $(window).width();
var screenHeight = $(window).height();
//if window is scrolled
var scrTop = $(window).scrollTop();
//if the menu is close to right edge of the window
if(pageX+mwidth > screenWidth){
menu.css({left:pageX-mwidth});
}
//if the menu is close to bottom edge of the window
if(pageY+mheight > screenHeight+scrTop){
menu.css({top:pageY-mheight});
}
//finally show the menu
menu.show();
//return false;
});
// define click event handler for the top edge
$nodeDiv.on('click', '.topEdge', function(event) {
event.stopPropagation();
var $that = $(this);
var $node = $that.parent();
var parentState = getNodeState($node, 'parent');
if (parentState.exist) {
var $parent = $node.closest('table').closest('tr').siblings(':first').find('.node');
if ($parent.is('.slide')) { return; }
// hide the ancestor nodes and sibling nodes of the specified node
if (parentState.visible) {
hideParent($node);
$parent.one('transitionend', function() {
if (isInAction($node)) {
switchVerticalArrow($that);
switchHorizontalArrow($node);
}
});
} else { // show the ancestors and siblings
showParent($node);
}
} else {
// load the new parent node of the specified node by ajax request
var nodeId = $that.parent()[0].id;
// start up loading status
if (startLoading($that, $node, opts)) {
// load new nodes
$.ajax({ 'url': $.isFunction(opts.ajaxURL.parent) ? opts.ajaxURL.parent(nodeData) : opts.ajaxURL.parent + nodeId, 'dataType': 'json' })
.done(function(data) {
if ($node.closest('.orgchart').data('inAjax')) {
if (!$.isEmptyObject(data)) {
addParent.call($node.closest('.orgchart').parent(), $node, data, opts);
}
}
})
.fail(function() { console.log('Failed to get parent node data'); })
.always(function() { endLoading($that, $node, opts); });
}
}
});
// bind click event handler for the bottom edge
$nodeDiv.on('click', '.bottomEdge', function(event) {
event.stopPropagation();
var $that = $(this);
var $node = $that.parent();
var childrenState = getNodeState($node, 'children');
if (childrenState.exist) {
var $children = $node.closest('tr').siblings(':last');
if ($children.find('.node:visible').is('.slide')) { return; }
// hide the descendant nodes of the specified node
if (childrenState.visible) {
hideChildren($node);
} else { // show the descendants
showChildren($node);
}
} else { // load the new children nodes of the specified node by ajax request
var nodeId = $that.parent()[0].id;
if (startLoading($that, $node, opts)) {
$.ajax({ 'url': $.isFunction(opts.ajaxURL.children) ? opts.ajaxURL.children(nodeData) : opts.ajaxURL.children + nodeId, 'dataType': 'json' })
.done(function(data, textStatus, jqXHR) {
if ($node.closest('.orgchart').data('inAjax')) {
if (data.children.length) {
addChildren($node, data, $.extend({}, opts, { depth: 0 }));
}
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log('Failed to get children nodes data');
})
.always(function() {
endLoading($that, $node, opts);
});
}
}
});
// event handler for toggle buttons in Hybrid(horizontal + vertical) OrgChart
$nodeDiv.on('click', '.toggleBtn', function(event) {
var $this = $(this);
var $descWrapper = $this.parent().next();
var $descendants = $descWrapper.find('.node');
var $children = $descWrapper.children().children('.node');
if ($children.is('.slide')) { return; }
$this.toggleClass('fa-plus-square fa-minus-square');
if ($descendants.eq(0).is('.slide-up')) {
$descWrapper.removeClass('hidden');
repaint($children.get(0));
$children.addClass('slide').removeClass('slide-up').eq(0).one('transitionend', function() {
$children.removeClass('slide');
});
} else {
$descendants.addClass('slide slide-up').eq(0).one('transitionend', function() {
$descendants.removeClass('slide');
// $descWrapper.addClass('hidden');
$descendants.closest('ul').addClass('hidden');
});
$descendants.find('.toggleBtn').removeClass('fa-minus-square').addClass('fa-plus-square');
}
});
// bind click event handler for the left and right edges
$nodeDiv.on('click', '.leftEdge, .rightEdge', function(event) {
event.stopPropagation();
var $that = $(this);
var $node = $that.parent();
var siblingsState = getNodeState($node, 'siblings');
if (siblingsState.exist) {
var $siblings = $node.closest('table').parent().siblings();
if ($siblings.find('.node:visible').is('.slide')) { return; }
if (opts.toggleSiblingsResp) {
var $prevSib = $node.closest('table').parent().prev();
var $nextSib = $node.closest('table').parent().next();
if ($that.is('.leftEdge')) {
if ($prevSib.is('.hidden')) {
showSiblings($node, 'left');
} else {
hideSiblings($node, 'left');
}
} else {
if ($nextSib.is('.hidden')) {
showSiblings($node, 'right');
} else {
hideSiblings($node, 'right');
}
}
} else {
if (siblingsState.visible) {
hideSiblings($node);
} else {
showSiblings($node);
}
}
} else {
// load the new sibling nodes of the specified node by ajax request
var nodeId = $that.parent()[0].id;
var url = (getNodeState($node, 'parent').exist) ?
($.isFunction(opts.ajaxURL.siblings) ? opts.ajaxURL.siblings(nodeData) : opts.ajaxURL.siblings + nodeId) :
($.isFunction(opts.ajaxURL.families) ? opts.ajaxURL.families(nodeData) : opts.ajaxURL.families + nodeId);
if (startLoading($that, $node, opts)) {
$.ajax({ 'url': url, 'dataType': 'json' })
.done(function(data, textStatus, jqXHR) {
if ($node.closest('.orgchart').data('inAjax')) {
if (data.siblings || data.children) {
addSiblings($node, data, opts);
}
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log('Failed to get sibling nodes data');
})
.always(function() {
endLoading($that, $node, opts);
});
}
}
});
if (opts.draggable)
{
$nodeDiv.on('dragstart', function(event)
{
var origEvent = event.originalEvent;
var isFirefox = /firefox/.test(window.navigator.userAgent.toLowerCase());
if (isFirefox) {
origEvent.dataTransfer.setData('text/html', 'hack for firefox');
}
// if users enable zoom or direction options
if ($nodeDiv.closest('.orgchart').css('transform') !== 'none')
{
var ghostNode, nodeCover;
if (!document.querySelector('.ghost-node')) {
ghostNode = document.createElementNS("http://www.w3.org/2000/svg", "svg");
ghostNode.classList.add('ghost-node');
nodeCover = document.createElementNS('http://www.w3.org/2000/svg','rect');
ghostNode.appendChild(nodeCover);
$nodeDiv.closest('.orgchart').append(ghostNode);
} else {
ghostNode = $nodeDiv.closest('.orgchart').children('.ghost-node').get(0);
nodeCover = $(ghostNode).children().get(0);
}
var transValues = $nodeDiv.closest('.orgchart').css('transform').split(',');
var scale = Math.abs(window.parseFloat((opts.direction === 't2b' || opts.direction === 'b2t') ? transValues[0].slice(transValues[0].indexOf('(') + 1) : transValues[1]));
ghostNode.setAttribute('width', $nodeDiv.outerWidth(false));
ghostNode.setAttribute('height', $nodeDiv.outerHeight(false));
nodeCover.setAttribute('x',5 * scale);
nodeCover.setAttribute('y',5 * scale);
nodeCover.setAttribute('width', 120 * scale);
nodeCover.setAttribute('height', 40 * scale);
nodeCover.setAttribute('rx', 4 * scale);
nodeCover.setAttribute('ry', 4 * scale);
nodeCover.setAttribute('stroke-width', 1 * scale);
var xOffset = origEvent.offsetX * scale;
var yOffset = origEvent.offsetY * scale;
if (opts.direction === 'l2r') {
xOffset = origEvent.offsetY * scale;
yOffset = origEvent.offsetX * scale;
} else if (opts.direction === 'r2l') {
xOffset = $nodeDiv.outerWidth(false) - origEvent.offsetY * scale;
yOffset = origEvent.offsetX * scale;
} else if (opts.direction === 'b2t') {
xOffset = $nodeDiv.outerWidth(false) - origEvent.offsetX * scale;
yOffset = $nodeDiv.outerHeight(false) - origEvent.offsetY * scale;
}
if (isFirefox) { // hack for old version of Firefox(< 48.0)
nodeCover.setAttribute('fill', 'rgb(255, 255, 255)');
nodeCover.setAttribute('stroke', 'rgb(191, 0, 0)');
var ghostNodeWrapper = document.createElement('img');
ghostNodeWrapper.src = 'data:image/svg+xml;utf8,' + (new XMLSerializer()).serializeToString(ghostNode);
origEvent.dataTransfer.setDragImage(ghostNodeWrapper, xOffset, yOffset);
} else {
origEvent.dataTransfer.setDragImage(ghostNode, xOffset, yOffset);
}
}
var $dragged = $(this);
window.draggedId = parseInt($dragged.find('.ddsid').text())
var $dragZone = $dragged.closest('.nodes').siblings().eq(0).find('.node:first');
var $dragHier = $dragged.closest('table').find('.node');
$dragged.closest('.orgchart')
.data('dragged', $dragged)
.find('.node').each(function(index, node)
{
if ($dragHier.index(node) === -1)
{
if (opts.dropCriteria)
{
if (opts.dropCriteria($dragged, $dragZone, $(node)))
{
$(node).addClass('allowedDrop');
}else
{
$(node).removeClass('allowedDrop');
}
} else
{
$(node).addClass('allowedDrop');
}
}
});
})
.on('mouseout', function()
{
var $dropZone = $(this);
var $orgchart = $dropZone.closest('.orgchart');
$orgchart.find('.allowedDrop').removeClass('allowedDrop');
window.draggedId = -1;
})
.on('dragover', function(event)
{
event.preventDefault();
//console.error(window.draggedId)
if(window.draggedId < 0) //drag from outer space
{
//console.error("HEZ THATS WRONG!")
//if we drag from outside just check local hover:
if( $(this).find('.unit').text() === opts.unit_name )
{
$(this).addClass('allowedDrop');
}
else
{
$(this).removeClass('allowedDrop');
}
}
if (!$(this).is('.allowedDrop'))
{
event.originalEvent.dataTransfer.dropEffect = 'none';
}
})
.on('dragend', function(event)
{
window.draggedId = -1;
$(this).closest('.orgchart').find('.allowedDrop').removeClass('allowedDrop');
})
.on('dragstop', function(event)
{
window.draggedId = -1;
$(this).closest('.orgchart').find('.allowedDrop').removeClass('allowedDrop');
})
.on('drop', function(event)
{
var $dropZone = $(this);
var $orgchart = $dropZone.closest('.orgchart');
event.preventDefault();
var $transferData = event.originalEvent.dataTransfer.getData("text/plain");
$orgchart.find('.allowedDrop').removeClass('allowedDrop');
window.draggedId = -1;
if(!!$transferData)
{
var $jsonData = JSON.parse($transferData);
$jsonData.parentId = parseInt($dropZone.find('.ddsId').text());
if($jsonData.id < 0)
$jsonData.id = modId++;
console.log($dropZone.closest('tr').siblings('.nodes').find('.node:first'));
console.log(getNodeState($dropZone, 'children'));
if(getNodeState($dropZone, 'children').exist)
{
console.log("has Children ad a sibling")
$jsonData.relationship = '110'
var $arr = [$jsonData]
var myObject = {
siblings: $arr
}
addSiblings($dropZone.closest('tr').siblings('.nodes').find('.node:first'), myObject, opts);
//addChildren($dropZone, myObject, opts);
}else
{
console.log("has no Children ad a new one")
$jsonData.relationship = '100'
var $arr = [$jsonData]
var myObject = {
children: $arr
}
addChildren($dropZone, myObject, opts);
}
}else
{
var $dragged = $orgchart.data('dragged');
// firstly, deal with the hierarchy of drop zone
var $dragZone = $dragged.closest('.nodes').siblings().eq(0).children();
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 });
}
//console.log(getHierarchy());
window.webNotifier.doMoveChanged();
});
}
// allow user to append dom modification after finishing node create of orgchart
if (opts.createNode) {
opts.createNode($nodeDiv, nodeData);
}
dtd.resolve($nodeDiv);
return dtd.promise();
}
// recursively build the tree
function buildHierarchy ($appendTo, nodeData, level, opts, callback) {
var $nodeWrapper;
// Construct the node
var $childNodes = nodeData.children;
var hasChildren = $childNodes ? $childNodes.length : false;
var isVerticalNode = (opts.verticalDepth && (level + 1) >= opts.verticalDepth) ? true : false;
if (Object.keys(nodeData).length > 1) { // if nodeData has nested structure
$nodeWrapper = isVerticalNode ? $appendTo : $('
');
if (!isVerticalNode) {
$appendTo.append($nodeWrapper);
}
$.when(createNode(nodeData, level, opts))
.done(function($nodeDiv) {
if (isVerticalNode) {
$nodeWrapper.append($nodeDiv);
}else {
$nodeWrapper.append($nodeDiv.wrap(' |
').closest('tr'));
}
if (callback) {
callback();
}
})
.fail(function() {
console.log('Failed to creat node')
});
}
// Construct the inferior nodes and connectiong lines
if (hasChildren) {
if (Object.keys(nodeData).length === 1) { // if nodeData is just an array
$nodeWrapper = $appendTo;
}
var isHidden = (level + 1 >= opts.depth || nodeData.collapsed) ? ' hidden' : '';
var isVerticalLayer = (opts.verticalDepth && (level + 2) >= opts.verticalDepth) ? true : false;
// draw the line close to parent node
if (!isVerticalLayer) {
$nodeWrapper.append(' |
');
}
// draw the lines close to children nodes
var lineLayer = '| | ';
for (var i=1; i<$childNodes.length; i++) {
lineLayer += ' | | ';
}
lineLayer += ' |
';
var $nodeLayer;
if (isVerticalLayer) {
$nodeLayer = $('');
if (isHidden) {
$nodeLayer.addClass(isHidden);
}
if (level + 2 === opts.verticalDepth) {
$nodeWrapper.append(' |
')
.find('.verticalNodes').children().append($nodeLayer);
} else {
$nodeWrapper.append($nodeLayer);
}
} else {
$nodeLayer = $('');
$nodeWrapper.append(lineLayer).append($nodeLayer);
}
// recurse through children nodes
$.each($childNodes, function() {
var $nodeCell = isVerticalLayer ? $('- ') : $('
');
$nodeLayer.append($nodeCell);
buildHierarchy($nodeCell, this, level + 1, opts, callback);
});
}
}
// build the child nodes of specific node
function buildChildNode ($appendTo, nodeData, opts, callback) {
var opts = opts || $appendTo.closest('.orgchart').data('options');
var data = nodeData.children || nodeData.siblings;
console.log("buildChild");
console.log(nodeData);
console.log(data);
var length = 1;
if(data)
length = data.length;
$appendTo.find('td:first').attr('colspan', length * 2);
buildHierarchy($appendTo, { 'children': data }, 0, opts, callback);
}
// exposed method
function addChildren($node, data, opts) {
var opts = opts || $node.closest('.orgchart').data('options');
var count = 0;
console.log("AddChildren")
buildChildNode.call($node.closest('.orgchart').parent(), $node.closest('table'), data, opts, function()
{
console.log("BuildCHildNode: " + data.children.length);
if (++count === data.children.length)
{
if (!$node.children('.bottomEdge').length) {
$node.append('');
}
if (!$node.find('.symbol').length) {
$node.children('.title').prepend('');
}
console.log($node);
showChildren($node);
}
});
}
// build the parent node of specific node
function buildParentNode($currentRoot, nodeData, opts, callback) {
var that = this;
var $table = $('');
nodeData.relationship = nodeData.relationship || '001';
$.when(createNode(nodeData, 0, opts || $currentRoot.closest('.orgchart').data('options')))
.done(function($nodeDiv) {
$table.append($nodeDiv.removeClass('slide-up').addClass('slide-down').wrap(' | ').closest('tr'));
$table.append(' | ');
var linesRow = ' | | ';
$table.append('' + linesRow + ' ');
var $oc = that.children('.orgchart');
$oc.prepend($table)
.children('table:first').append(' | ')
.children('tr:last').children().append($oc.children('table').last());
callback();
})
.fail(function() {
console.log('Failed to create parent node');
});
}
// exposed method
function addParent($currentRoot, data, opts) {
buildParentNode.call(this, $currentRoot, data, opts, function() {
if (!$currentRoot.children('.topEdge').length) {
$currentRoot.children('.title').after('');
}
showParent($currentRoot);
});
}
// subsequent processing of build sibling nodes
function complementLine($oneSibling, siblingCount, existingSibligCount) {
var lines = '';
for (var i = 0; i < existingSibligCount; i++) {
lines += ' | | ';
}
$oneSibling.parent().prevAll('tr:gt(0)').children().attr('colspan', siblingCount * 2)
.end().next().children(':first').after(lines);
}
// build the sibling nodes of specific node
function buildSiblingNode($nodeChart, nodeData, opts, callback) {
var opts = opts || $nodeChart.closest('.orgchart').data('options');
var newSiblingCount = nodeData.siblings ? nodeData.siblings.length : nodeData.children.length;
var existingSibligCount = $nodeChart.parent().is('td') ? $nodeChart.closest('tr').children().length : 1;
var siblingCount = existingSibligCount + newSiblingCount;
var insertPostion = (siblingCount > 1) ? Math.floor(siblingCount/2 - 1) : 0;
console.log("Build Sibling note from: " );
console.log(nodeData);
console.log("to: ");
console.log($nodeChart);
console.log(newSiblingCount)
// just build the sibling nodes for the specific node
if ($nodeChart.parent().is('td')) {
var $parent = $nodeChart.closest('tr').prevAll('tr:last');
$nodeChart.closest('tr').prevAll('tr:lt(2)').remove();
var childCount = 0;
buildChildNode.call($nodeChart.closest('.orgchart').parent(),$nodeChart.parent().closest('table'), nodeData, opts, function() {
if (++childCount === newSiblingCount) {
var $siblingTds = $nodeChart.parent().closest('table').children('tr:last').children('td');
if (existingSibligCount > 1) {
complementLine($siblingTds.eq(0).before($nodeChart.closest('td').siblings().addBack().unwrap()), siblingCount, existingSibligCount);
$siblingTds.addClass('hidden').find('.node').addClass('slide-left');
} else {
complementLine($siblingTds.eq(insertPostion).after($nodeChart.closest('td').unwrap()), siblingCount, 1);
$siblingTds.not(':eq(' + insertPostion + 1 + ')').addClass('hidden')
.slice(0, insertPostion).find('.node').addClass('slide-right')
.end().end().slice(insertPostion).find('.node').addClass('slide-left');
}
callback();
}
});
} else { // build the sibling nodes and parent node for the specific ndoe
var nodeCount = 0;
buildHierarchy($nodeChart.closest('.orgchart'), nodeData, 0, opts, function() {
if (++nodeCount === siblingCount) {
complementLine($nodeChart.next().children('tr:last')
.children().eq(insertPostion).after($('')
.append($nodeChart)), siblingCount, 1);
$nodeChart.closest('tr').siblings().eq(0).addClass('hidden').find('.node').addClass('slide-down');
$nodeChart.parent().siblings().addClass('hidden')
.slice(0, insertPostion).find('.node').addClass('slide-right')
.end().end().slice(insertPostion).find('.node').addClass('slide-left');
callback();
}
});
}
}
function addSiblings($node, data, opts) {
buildSiblingNode.call($node.closest('.orgchart').parent(), $node.closest('table'), data, opts, function()
{
$node.closest('.nodes').data('siblingsLoaded', true);
if (!$node.children('.leftEdge').length)
{
console.log("No Left Edge");
$node.children('.topEdge').after('');
}
showSiblings($node);
});
}
function removeNodes($node) {
console.log("remove nodes")
var $parent = $node.closest('table').parent();
var $sibs = $parent.parent().siblings();
if ($parent.is('td')) {
if (getNodeState($node, 'siblings').exist) {
$sibs.eq(2).children('.topLine:lt(2)').remove();
$sibs.slice(0, 2).children().attr('colspan', $sibs.eq(2).children().length);
$parent.remove();
} else {
$sibs.eq(0).children().removeAttr('colspan')
.find('.bottomEdge').remove()
.end().end().siblings().remove();
}
} else {
$parent.add($parent.siblings()).remove();
}
}
function removeNode($nodeId)
{
var $chart = $(this).find('.orgchart');
console.log("Try to remove node with id: " + $nodeId);
$chart.find('tr').each(function ()
{
var node = $( this );
console.log(node.find('.modid').text());
if(parseInt(node.find('.modid').text()) !== $nodeId)
{
return true;
}
console.log("Found Note with Id: " + $nodeId);
removeNodes(node);
return false;
});
return true;
}
}));
| |