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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jquery.orgchart.min.js","sources":["jquery.orgchart.js"],"sourcesContent":["/*\n * jQuery OrgChart Plugin\n * https://github.com/dabeng/OrgChart\n *\n * Copyright 2016, dabeng\n * https://github.com/dabeng\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/MIT\n */\n'use strict';\n\n(function (factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n factory(require('jquery'), window, document);\n } else {\n factory(jQuery, window, document);\n }\n}(function ($, window, document, undefined) {\n var OrgChart = function (elem, opts) {\n this.$chartContainer = $(elem);\n this.opts = opts;\n this.defaultOptions = {\n 'nodeTitle': 'name',\n 'nodeId': 'id',\n 'toggleSiblingsResp': false,\n 'visibleLevel': 999,\n 'chartClass': '',\n 'exportButton': false,\n 'exportButtonName': 'Export',\n 'exportFilename': 'OrgChart',\n 'exportFileextension': 'png',\n 'parentNodeSymbol': 'oci-leader',\n 'draggable': false,\n 'direction': 't2b',\n 'pan': false,\n 'zoom': false,\n 'zoominLimit': 7,\n 'zoomoutLimit': 0.5\n };\n };\n //\n OrgChart.prototype = {\n //\n init: function (opts) {\n var that = this;\n this.options = $.extend({}, this.defaultOptions, this.opts, opts);\n // build the org-chart\n var $chartContainer = this.$chartContainer;\n if (this.$chart) {\n this.$chart.remove();\n }\n var data = this.options.data;\n var $chart = this.$chart = $('<div>', {\n 'data': { 'options': this.options },\n 'class': 'orgchart' + (this.options.chartClass !== '' ? ' ' + this.options.chartClass : '') + (this.options.direction !== 't2b' ? ' ' + this.options.direction : ''),\n 'click': function(event) {\n if (!$(event.target).closest('.node').length) {\n $chart.find('.node.focused').removeClass('focused');\n }\n }\n });\n if (typeof MutationObserver !== 'undefined') {\n this.triggerInitEvent();\n }\n var $root = $chart.append($('<ul class=\"nodes\"><li class=\"hierarchy\"></li></ul>')).find('.hierarchy');\n if ($.type(data) === 'object') {\n if (data instanceof $) { // ul datasource\n this.buildHierarchy($root, this.buildJsonDS(data.children()), 0, this.options);\n } else { // local json datasource\n this.buildHierarchy($root, this.options.ajaxURL ? data : this.attachRel(data, '00'));\n }\n } else {\n $chart.append('<i class=\"oci oci-spinner spinner\"></i>');\n $.ajax({\n 'url': data,\n 'dataType': 'json'\n })\n .done(function(data, textStatus, jqXHR) {\n that.buildHierarchy($root, that.options.ajaxURL ? data : that.attachRel(data, '00'), 0, that.options);\n })\n .fail(function(jqXHR, textStatus, errorThrown) {\n console.log(errorThrown);\n })\n .always(function() {\n $chart.children('.spinner').remove();\n });\n }\n $chartContainer.append($chart);\n\n // append the export button\n if (this.options.exportButton && !$('.oc-export-btn').length) {\n this.attachExportButton();\n }\n\n if (this.options.pan) {\n this.bindPan();\n }\n\n if (this.options.zoom) {\n this.bindZoom();\n }\n\n return this;\n },\n //\n triggerInitEvent: function () {\n var that = this;\n var mo = new MutationObserver(function (mutations) {\n mo.disconnect();\n initTime:\n for (var i = 0; i < mutations.length; i++) {\n for (var j = 0; j < mutations[i].addedNodes.length; j++) {\n if (mutations[i].addedNodes[j].classList.contains('orgchart')) {\n if (that.options.initCompleted && typeof that.options.initCompleted === 'function') {\n that.options.initCompleted(that.$chart);\n }\n var initEvent = $.Event('init.orgchart');\n that.$chart.trigger(initEvent);\n break initTime;\n }\n }\n }\n });\n mo.observe(this.$chartContainer[0], { childList: true });\n },\n triggerLoadEvent: function ($target, rel) {\n var initEvent = $.Event('load-' + rel +'.orgchart');\n $target.trigger(initEvent);\n },\n triggerShowEvent: function ($target, rel) {\n var initEvent = $.Event('show-' + rel + '.orgchart');\n $target.trigger(initEvent);\n },\n triggerHideEvent: function ($target, rel) {\n var initEvent = $.Event('hide-' + rel + '.orgchart');\n $target.trigger(initEvent);\n },\n // add export button for orgchart\n attachExportButton: function () {\n var that = this;\n var $exportBtn = $('<button>', {\n 'class': 'oc-export-btn',\n 'text': this.options.exportButtonName,\n 'click': function(e) {\n e.preventDefault();\n that.export();\n }\n });\n this.$chartContainer.after($exportBtn);\n },\n setOptions: function (opts, val) {\n if (typeof opts === 'string') {\n if (opts === 'pan') {\n if (val) {\n this.bindPan();\n } else {\n this.unbindPan();\n }\n }\n if (opts === 'zoom') {\n if (val) {\n this.bindZoom();\n } else {\n this.unbindZoom();\n }\n }\n }\n if (typeof opts === 'object') {\n if (opts.data) {\n this.init(opts);\n } else {\n if (typeof opts.pan !== 'undefined') {\n if (opts.pan) {\n this.bindPan();\n } else {\n this.unbindPan();\n }\n }\n if (typeof opts.zoom !== 'undefined') {\n if (opts.zoom) {\n this.bindZoom();\n } else {\n this.unbindZoom();\n }\n }\n }\n }\n\n return this;\n },\n //\n panStartHandler: function (e) {\n var $chart = $(e.delegateTarget);\n if ($(e.target).closest('.node').length || (e.touches && e.touches.length > 1)) {\n $chart.data('panning', false);\n return;\n } else {\n $chart.css('cursor', 'move').data('panning', true);\n }\n var lastX = 0;\n var lastY = 0;\n var lastTf = $chart.css('transform');\n if (lastTf !== 'none') {\n var temp = lastTf.split(',');\n if (lastTf.indexOf('3d') === -1) {\n lastX = parseInt(temp[4]);\n lastY = parseInt(temp[5]);\n } else {\n lastX = parseInt(temp[12]);\n lastY = parseInt(temp[13]);\n }\n }\n var startX = 0;\n var startY = 0;\n if (!e.targetTouches) { // pand on desktop\n startX = e.pageX - lastX;\n startY = e.pageY - lastY;\n } else if (e.targetTouches.length === 1) { // pan on mobile device\n startX = e.targetTouches[0].pageX - lastX;\n startY = e.targetTouches[0].pageY - lastY;\n } else if (e.targetTouches.length > 1) {\n return;\n }\n $chart.on('mousemove touchmove',function(e) {\n if (!$chart.data('panning')) {\n return;\n }\n var newX = 0;\n var newY = 0;\n if (!e.targetTouches) { // pand on desktop\n newX = e.pageX - startX;\n newY = e.pageY - startY;\n } else if (e.targetTouches.length === 1) { // pan on mobile device\n newX = e.targetTouches[0].pageX - startX;\n newY = e.targetTouches[0].pageY - startY;\n } else if (e.targetTouches.length > 1) {\n return;\n }\n var lastTf = $chart.css('transform');\n if (lastTf === 'none') {\n if (lastTf.indexOf('3d') === -1) {\n $chart.css('transform', 'matrix(1, 0, 0, 1, ' + newX + ', ' + newY + ')');\n } else {\n $chart.css('transform', 'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, ' + newX + ', ' + newY + ', 0, 1)');\n }\n } else {\n var matrix = lastTf.split(',');\n if (lastTf.indexOf('3d') === -1) {\n matrix[4] = ' ' + newX;\n matrix[5] = ' ' + newY + ')';\n } else {\n matrix[12] = ' ' + newX;\n matrix[13] = ' ' + newY;\n }\n $chart.css('transform', matrix.join(','));\n }\n });\n },\n //\n panEndHandler: function (e) {\n if (e.data.chart.data('panning')) {\n e.data.chart.data('panning', false).css('cursor', 'default').off('mousemove');\n }\n },\n //\n bindPan: function () {\n this.$chartContainer.css('overflow', 'hidden');\n this.$chart.on('mousedown touchstart', this.panStartHandler);\n $(document).on('mouseup touchend', { 'chart': this.$chart }, this.panEndHandler);\n },\n //\n unbindPan: function () {\n this.$chartContainer.css('overflow', 'auto');\n this.$chart.off('mousedown touchstart', this.panStartHandler);\n $(document).off('mouseup touchend', this.panEndHandler);\n },\n //\n zoomWheelHandler: function (e) {\n var oc = e.data.oc;\n e.preventDefault();\n var newScale = 1 + (e.originalEvent.deltaY > 0 ? -0.2 : 0.2);\n oc.setChartScale(oc.$chart, newScale);\n },\n //\n zoomStartHandler: function (e) {\n if(e.touches && e.touches.length === 2) {\n var oc = e.data.oc;\n oc.$chart.data('pinching', true);\n var dist = oc.getPinchDist(e);\n oc.$chart.data('pinchDistStart', dist);\n }\n },\n zoomingHandler: function (e) {\n var oc = e.data.oc;\n if(oc.$chart.data('pinching')) {\n var dist = oc.getPinchDist(e);\n oc.$chart.data('pinchDistEnd', dist);\n }\n },\n zoomEndHandler: function (e) {\n var oc = e.data.oc;\n if(oc.$chart.data('pinching')) {\n oc.$chart.data('pinching', false);\n var diff = oc.$chart.data('pinchDistEnd') - oc.$chart.data('pinchDistStart');\n if (diff > 0) {\n oc.setChartScale(oc.$chart, 1.2);\n } else if (diff < 0) {\n oc.setChartScale(oc.$chart, 0.8);\n }\n }\n },\n //\n bindZoom: function () {\n this.$chartContainer.on('wheel', { 'oc': this }, this.zoomWheelHandler);\n this.$chartContainer.on('touchstart', { 'oc': this }, this.zoomStartHandler);\n $(document).on('touchmove', { 'oc': this }, this.zoomingHandler);\n $(document).on('touchend', { 'oc': this }, this.zoomEndHandler);\n },\n unbindZoom: function () {\n this.$chartContainer.off('wheel', this.zoomWheelHandler);\n this.$chartContainer.off('touchstart', this.zoomStartHandler);\n $(document).off('touchmove', this.zoomingHandler);\n $(document).off('touchend', this.zoomEndHandler);\n },\n //\n getPinchDist: function (e) {\n return Math.sqrt((e.touches[0].clientX - e.touches[1].clientX) * (e.touches[0].clientX - e.touches[1].clientX) +\n (e.touches[0].clientY - e.touches[1].clientY) * (e.touches[0].clientY - e.touches[1].clientY));\n },\n //\n setChartScale: function ($chart, newScale) {\n var opts = $chart.data('options');\n var lastTf = $chart.css('transform');\n var matrix = '';\n var targetScale = 1;\n if (lastTf === 'none') {\n $chart.css('transform', 'scale(' + newScale + ',' + newScale + ')');\n } else {\n matrix = lastTf.split(',');\n if (lastTf.indexOf('3d') === -1) {\n targetScale = Math.abs(window.parseFloat(matrix[3]) * newScale);\n if (targetScale > opts.zoomoutLimit && targetScale < opts.zoominLimit) {\n $chart.css('transform', lastTf + ' scale(' + newScale + ',' + newScale + ')');\n }\n } else {\n targetScale = Math.abs(window.parseFloat(matrix[1]) * newScale);\n if (targetScale > opts.zoomoutLimit && targetScale < opts.zoominLimit) {\n $chart.css('transform', lastTf + ' scale3d(' + newScale + ',' + newScale + ', 1)');\n }\n }\n }\n },\n //\n buildJsonDS: function ($li) {\n var that = this;\n var subObj = {\n 'name': $li.contents().eq(0).text().trim(),\n 'relationship': ($li.parent().parent().is('li') ? '1': '0') + ($li.siblings('li').length ? 1: 0) + ($li.children('ul').length ? 1 : 0)\n };\n $.each($li.data(), function(key, value) {\n subObj[key] = value;\n });\n $li.children('ul').children().each(function() {\n if (!subObj.children) { subObj.children = []; }\n subObj.children.push(that.buildJsonDS($(this)));\n });\n return subObj;\n },\n //\n attachRel: function (data, flags) {\n var that = this;\n data.relationship = flags + (data.children && data.children.length > 0 ? 1 : 0);\n if (data.children) {\n data.children.forEach(function(item) {\n that.attachRel(item, '1' + (data.children.length > 1 ? 1 : 0));\n });\n }\n return data;\n },\n //\n loopChart: function ($chart, includeNodeData) {\n includeNodeData = (includeNodeData !== null && includeNodeData !== undefined) ? includeNodeData : false;\n var that = this;\n var $node = $chart.find('.node:first');\n var subObj = { 'id': $node[0].id };\n if (includeNodeData) {\n $.each($node.data('nodeData'), function (key, value) {\n subObj[key] = value;\n });\n }\n $node.siblings('.nodes').children().each(function() {\n if (!subObj.children) { subObj.children = []; }\n subObj.children.push(that.loopChart($(this), includeNodeData));\n });\n return subObj;\n },\n //\n getHierarchy: function (includeNodeData) {\n includeNodeData = (includeNodeData !== null && includeNodeData !== undefined) ? includeNodeData : false;\n if (typeof this.$chart === 'undefined') {\n return 'Error: orgchart does not exist'\n } else {\n if (!this.$chart.find('.node').length) {\n return 'Error: nodes do not exist'\n } else {\n var valid = true;\n this.$chart.find('.node').each(function () {\n if (!this.id) {\n valid = false;\n return false;\n }\n });\n if (!valid) {\n return 'Error: All nodes of orghcart to be exported must have data-id attribute!';\n }\n }\n }\n return this.loopChart(this.$chart, includeNodeData);\n },\n // detect the exist/display state of related node\n getNodeState: function ($node, relation) {\n var $target = {};\n var isVerticalNode = !!$node.closest('vertical').length;\n var relation = relation || 'self';\n if (relation === 'parent') {\n if (isVerticalNode) {\n $target = $node.closest('ul').parents('ul');\n if (!$target.length) {\n $target = $node.closest('.nodes');\n if (!$target.length) {\n $target = $node.closest('.vertical').siblings(':first');\n }\n }\n } else {\n $target = $node.closest('.nodes').siblings('.node');\n }\n if ($target.length) {\n if ($target.is('.hidden') || (!$target.is('.hidden') && $target.closest('.nodes').is('.hidden')) || (!$target.is('.hidden') && $target.closest('.vertical').is('.hidden'))) {\n return { 'exist': true, 'visible': false };\n }\n return { 'exist': true, 'visible': true };\n }\n } else if (relation === 'children') {\n $target = isVerticalNode ? $node.parent().children('ul') : $node.siblings('.nodes');\n if ($target.length) {\n if (!$target.is('.hidden')) {\n return { 'exist': true, 'visible': true };\n }\n return { 'exist': true, 'visible': false };\n }\n } else if (relation === 'siblings') {\n $target = isVerticalNode ? $node.closest('ul') : $node.parent().siblings();\n if ($target.length && (!isVerticalNode || $target.children('li').length > 1)) {\n if (!$target.is('.hidden') && !$target.parent().is('.hidden') && (!isVerticalNode || !$target.closest('.vertical').is('.hidden'))) {\n return { 'exist': true, 'visible': true };\n }\n return { 'exist': true, 'visible': false };\n }\n } else {\n $target = $node;\n if ($target.length) {\n if (!(($target.closest('.nodes').length && $target.closest('.nodes').is('.hidden')) ||\n ($target.closest('.hierarchy').length && $target.closest('.hierarchy').is('.hidden')) ||\n ($target.closest('.vertical').length && ($target.closest('.nodes').is('.hidden') || $target.closest('.vertical').is('.hidden')))\n )) {\n return { 'exist': true, 'visible': true };\n }\n return { 'exist': true, 'visible': false };\n }\n }\n return { 'exist': false, 'visible': false };\n },\n getParent: function ($node) {\n return this.getRelatedNodes($node, 'parent');\n },\n getChildren: function ($node) {\n return this.getRelatedNodes($node, 'children');\n },\n getSiblings: function ($node) {\n return this.getRelatedNodes($node, 'siblings');\n },\n // find the related nodes\n getRelatedNodes: function ($node, relation) {\n if (!$node || !($node instanceof $) || !$node.is('.node')) {\n return $();\n }\n if (relation === 'parent') {\n return $node.closest('.nodes').siblings('.node');\n } else if (relation === 'children') {\n return $node.siblings('.nodes').children('.hierarchy').find('.node:first');\n } else if (relation === 'siblings') {\n return $node.closest('.hierarchy').siblings().find('.node:first');\n } else {\n return $();\n }\n },\n hideParentEnd: function (event) {\n $(event.target).removeClass('sliding');\n event.data.parent.addClass('hidden');\n },\n // recursively hide the ancestor node and sibling nodes of the specified node\n hideParent: function ($node) {\n var $parent = $node.closest('.nodes').siblings('.node');\n if ($parent.find('.spinner').length) {\n $node.closest('.orgchart').data('inAjax', false);\n }\n // hide the sibling nodes\n if (this.getNodeState($node, 'siblings').visible) {\n this.hideSiblings($node);\n }\n // hide the lines\n $node.parent().addClass('isAncestorsCollapsed');\n // hide the superior nodes with transition\n if (this.getNodeState($parent).visible) {\n $parent.addClass('sliding slide-down').one('transitionend', { 'parent': $parent }, this.hideParentEnd);\n }\n // if the current node has the parent node, hide it recursively\n if (this.getNodeState($parent, 'parent').visible) {\n this.hideParent($parent);\n }\n },\n showParentEnd: function (event) {\n var $node = event.data.node;\n $(event.target).removeClass('sliding');\n if (this.isInAction($node)) {\n this.switchVerticalArrow($node.children('.topEdge'));\n }\n },\n // show the parent node of the specified node\n showParent: function ($node) {\n // just show only one superior level\n var $parent = $node.closest('.nodes').siblings('.node').removeClass('hidden');\n // just show only one line\n $node.closest('.hierarchy').removeClass('isAncestorsCollapsed');\n // show parent node with animation\n this.repaint($parent[0]);\n $parent.addClass('sliding').removeClass('slide-down').one('transitionend', { 'node': $node }, this.showParentEnd.bind(this));\n },\n stopAjax: function ($nodeLevel) {\n if ($nodeLevel.find('.spinner').length) {\n $nodeLevel.closest('.orgchart').data('inAjax', false);\n }\n },\n isVisibleNode: function (index, elem) {\n return this.getNodeState($(elem)).visible;\n },\n // do some necessary cleanup tasks when hide animation is finished\n hideChildrenEnd: function (event) {\n var $node = event.data.node;\n event.data.animatedNodes.removeClass('sliding');\n event.data.animatedNodes.closest('.nodes').addClass('hidden');\n if (this.isInAction($node)) {\n this.switchVerticalArrow($node.children('.bottomEdge'));\n }\n },\n // recursively hide the descendant nodes of the specified node\n hideChildren: function ($node) {\n $node.closest('.hierarchy').addClass('isChildrenCollapsed');\n var $lowerLevel = $node.siblings('.nodes');\n this.stopAjax($lowerLevel);\n var $animatedNodes = $lowerLevel.find('.node').filter(this.isVisibleNode.bind(this));\n var isVerticalDesc = $lowerLevel.is('.vertical');\n if (!isVerticalDesc) {\n $animatedNodes.closest('.hierarchy').addClass('isCollapsedDescendant');\n }\n if ($lowerLevel.is('.vertical') || $lowerLevel.find('.vertical').length) {\n $animatedNodes.find('.oci-minus-square').removeClass('oci-minus-square').addClass('oci-plus-square');\n }\n this.repaint($animatedNodes.get(0));\n $animatedNodes.addClass('sliding slide-up').eq(0).one('transitionend', { 'animatedNodes': $animatedNodes, 'lowerLevel': $lowerLevel, 'node': $node }, this.hideChildrenEnd.bind(this));\n },\n //\n showChildrenEnd: function (event) {\n var $node = event.data.node;\n event.data.animatedNodes.removeClass('sliding');\n if (this.isInAction($node)) {\n this.switchVerticalArrow($node.children('.bottomEdge'));\n }\n },\n // show the children nodes of the specified node\n showChildren: function ($node) {\n var that = this;\n $node.closest('.hierarchy').removeClass('isChildrenCollapsed');\n var $levels = $node.siblings('.nodes');\n var isVerticalDesc = $levels.is('.vertical');\n var $animatedNodes = isVerticalDesc\n ? $levels.removeClass('hidden').find('.node').filter(this.isVisibleNode.bind(this))\n : $levels.removeClass('hidden').children('.hierarchy').find('.node:first').filter(this.isVisibleNode.bind(this));\n if (!isVerticalDesc) {\n $animatedNodes.filter(':not(:only-child)').closest('.hierarchy').addClass('isChildrenCollapsed');\n $animatedNodes.closest('.hierarchy').removeClass('isCollapsedDescendant');\n }\n // the two following statements are used to enforce browser to repaint\n this.repaint($animatedNodes.get(0));\n $animatedNodes.addClass('sliding').removeClass('slide-up').eq(0).one('transitionend', { 'node': $node, 'animatedNodes': $animatedNodes }, this.showChildrenEnd.bind(this));\n },\n //\n hideSiblingsEnd: function (event) {\n var $node = event.data.node;\n var $nodeContainer = event.data.nodeContainer;\n var direction = event.data.direction;\n var $siblings = direction ? (direction === 'left' ? $nodeContainer.prevAll(':not(.hidden)') : $nodeContainer.nextAll(':not(.hidden)')) : $nodeContainer.siblings();\n event.data.animatedNodes.removeClass('sliding');\n $siblings.find('.node:gt(0)').filter(this.isVisibleNode.bind(this))\n .removeClass('slide-left slide-right').addClass('slide-up');\n $siblings.find('.nodes, .vertical').addClass('hidden')\n .end().addClass('hidden');\n\n if (this.isInAction($node)) {\n this.switchHorizontalArrow($node);\n }\n },\n // hide the sibling nodes of the specified node\n hideSiblings: function ($node, direction) {\n var that = this;\n var $nodeContainer = $node.closest('.hierarchy').addClass('isSiblingsCollapsed');\n if ($nodeContainer.siblings().find('.spinner').length) {\n $node.closest('.orgchart').data('inAjax', false);\n }\n if (direction) {\n if (direction === 'left') {\n $nodeContainer.addClass('left-sibs')\n .prevAll('.isSiblingsCollapsed').removeClass('isSiblingsCollapsed left-sibs').end()\n .prevAll().addClass('isCollapsedSibling isChildrenCollapsed')\n .find('.node').filter(this.isVisibleNode.bind(this)).addClass('sliding slide-right');\n } else {\n $nodeContainer.addClass('right-sibs')\n .nextAll('.isSiblingsCollapsed').removeClass('isSiblingsCollapsed right-sibs').end()\n .nextAll().addClass('isCollapsedSibling isChildrenCollapsed')\n .find('.node').filter(this.isVisibleNode.bind(this)).addClass('sliding slide-left');\n }\n } else {\n $nodeContainer.prevAll().find('.node').filter(this.isVisibleNode.bind(this)).addClass('sliding slide-right');\n $nodeContainer.nextAll().find('.node').filter(this.isVisibleNode.bind(this)).addClass('sliding slide-left');\n $nodeContainer.siblings().addClass('isCollapsedSibling isChildrenCollapsed');\n }\n var $animatedNodes = $nodeContainer.siblings().find('.sliding');\n $animatedNodes.eq(0).one('transitionend', { 'node': $node, 'nodeContainer': $nodeContainer, 'direction': direction, 'animatedNodes': $animatedNodes }, this.hideSiblingsEnd.bind(this));\n },\n //\n showSiblingsEnd: function (event) {\n var $node = event.data.node;\n event.data.visibleNodes.removeClass('sliding');\n if (this.isInAction($node)) {\n this.switchHorizontalArrow($node);\n $node.children('.topEdge').removeClass('oci-chevron-up').addClass('oci-chevron-down');\n }\n },\n //\n showRelatedParentEnd: function(event) {\n $(event.target).removeClass('sliding');\n },\n // show the sibling nodes of the specified node\n showSiblings: function ($node, direction) {\n var that = this;\n // firstly, show the sibling nodes\n var $siblings = $();\n var $nodeContainer = $node.closest('.hierarchy');\n if (direction) {\n if (direction === 'left') {\n $siblings = $nodeContainer.prevAll().removeClass('hidden');\n } else {\n $siblings = $nodeContainer.nextAll().removeClass('hidden');\n }\n } else {\n $siblings = $node.closest('.hierarchy').siblings().removeClass('hidden');\n }\n // secondly, show the lines\n var $upperLevel = $node.closest('.nodes').siblings('.node');\n if (direction) {\n $nodeContainer.removeClass(direction + '-sibs');\n if (!$nodeContainer.is('[class*=-sibs]')) {\n $nodeContainer.removeClass('isSiblingsCollapsed');\n }\n $siblings.removeClass('isCollapsedSibling ' + direction + '-sibs');\n } else {\n $node.closest('.hierarchy').removeClass('isSiblingsCollapsed');\n $siblings.removeClass('isCollapsedSibling');\n }\n // thirdly, show parent node if it is collapsed\n if (!this.getNodeState($node, 'parent').visible) {\n $node.closest('.hierarchy').removeClass('isAncestorsCollapsed');\n $upperLevel.removeClass('hidden');\n this.repaint($upperLevel[0]);\n $upperLevel.addClass('sliding').removeClass('slide-down').one('transitionend', this.showRelatedParentEnd);\n }\n // lastly, show the sibling nodes with animation\n var $visibleNodes = $siblings.find('.node').filter(this.isVisibleNode.bind(this));\n this.repaint($visibleNodes.get(0));\n $visibleNodes.addClass('sliding').removeClass('slide-left slide-right');\n $visibleNodes.eq(0).one('transitionend', { 'node': $node, 'visibleNodes': $visibleNodes }, this.showSiblingsEnd.bind(this));\n },\n // start up loading status for requesting new nodes\n startLoading: function ($edge) {\n var $chart = this.$chart;\n if (typeof $chart.data('inAjax') !== 'undefined' && $chart.data('inAjax') === true) {\n return false;\n }\n\n $edge.addClass('hidden');\n $edge.parent().append('<i class=\"oci oci-spinner spinner\"></i>')\n .children().not('.spinner').css('opacity', 0.2);\n $chart.data('inAjax', true);\n $('.oc-export-btn').prop('disabled', true);\n return true;\n },\n // terminate loading status for requesting new nodes\n endLoading: function ($edge) {\n var $node = $edge.parent();\n $edge.removeClass('hidden');\n $node.find('.spinner').remove();\n $node.children().removeAttr('style');\n this.$chart.data('inAjax', false);\n $('.oc-export-btn').prop('disabled', false);\n },\n // whether the cursor is hovering over the node\n isInAction: function ($node) {\n return $node.children('.edge').attr('class').indexOf('oci-') > -1 ? true : false;\n },\n //\n switchVerticalArrow: function ($arrow) {\n $arrow.toggleClass('oci-chevron-up').toggleClass('oci-chevron-down');\n },\n //\n switchHorizontalArrow: function ($node) {\n var opts = this.options;\n if (opts.toggleSiblingsResp && (typeof opts.ajaxURL === 'undefined' || $node.closest('.nodes').data('siblingsLoaded'))) {\n var $prevSib = $node.parent().prev();\n if ($prevSib.length) {\n if ($prevSib.is('.hidden')) {\n $node.children('.leftEdge').addClass('oci-chevron-left').removeClass('oci-chevron-right');\n } else {\n $node.children('.leftEdge').addClass('oci-chevron-right').removeClass('oci-chevron-left');\n }\n }\n var $nextSib = $node.parent().next();\n if ($nextSib.length) {\n if ($nextSib.is('.hidden')) {\n $node.children('.rightEdge').addClass('oci-chevron-right').removeClass('oci-chevron-left');\n } else {\n $node.children('.rightEdge').addClass('oci-chevron-left').removeClass('oci-chevron-right');\n }\n }\n } else {\n var $sibs = $node.parent().siblings();\n var sibsVisible = $sibs.length ? !$sibs.is('.hidden') : false;\n $node.children('.leftEdge').toggleClass('oci-chevron-right', sibsVisible).toggleClass('oci-chevron-left', !sibsVisible);\n $node.children('.rightEdge').toggleClass('oci-chevron-left', sibsVisible).toggleClass('oci-chevron-right', !sibsVisible);\n }\n },\n //\n repaint: function (node) {\n if (node) {\n node.style.offsetWidth = node.offsetWidth;\n }\n },\n // determines how to show arrow buttons \n nodeEnterLeaveHandler: function (event) {\n var $node = $(event.delegateTarget);\n var flag = false;\n if ($node.closest('.nodes.vertical').length) {\n var $toggleBtn = $node.children('.toggleBtn');\n if (event.type === 'mouseenter') {\n if ($node.children('.toggleBtn').length) {\n flag = this.getNodeState($node, 'children').visible;\n $toggleBtn.toggleClass('oci-plus-square', !flag).toggleClass('oci-minus-square', flag);\n }\n } else {\n $toggleBtn.removeClass('oci-plus-square oci-minus-square');\n }\n } else {\n var $topEdge = $node.children('.topEdge');\n var $rightEdge = $node.children('.rightEdge');\n var $bottomEdge = $node.children('.bottomEdge');\n var $leftEdge = $node.children('.leftEdge');\n if (event.type === 'mouseenter') {\n if ($topEdge.length) {\n flag = this.getNodeState($node, 'parent').visible;\n $topEdge.toggleClass('oci-chevron-up', !flag).toggleClass('oci-chevron-down', flag);\n }\n if ($bottomEdge.length) {\n flag = this.getNodeState($node, 'children').visible;\n $bottomEdge.toggleClass('oci-chevron-down', !flag).toggleClass('oci-chevron-up', flag);\n }\n if ($leftEdge.length) {\n this.switchHorizontalArrow($node);\n }\n } else {\n $node.children('.edge').removeClass('oci-chevron-up oci-chevron-down oci-chevron-right oci-chevron-left');\n }\n }\n },\n //\n nodeClickHandler: function (event) {\n this.$chart.find('.focused').removeClass('focused');\n $(event.delegateTarget).addClass('focused');\n },\n // load new nodes by ajax\n loadNodes: function (rel, url, $edge) {\n var that = this;\n var opts = this.options;\n $.ajax({ 'url': url, 'dataType': 'json' })\n .done(function (data) {\n if (that.$chart.data('inAjax')) {\n if (rel === 'parent') {\n if (!$.isEmptyObject(data)) {\n that.addParent($edge.parent(), data);\n }\n } else if (rel === 'children') {\n if (data.children.length) {\n that.addChildren($edge.parent(), data[rel]);\n }\n } else {\n that.addSiblings($edge.parent(), data.siblings ? data.siblings : data);\n }\n that.triggerLoadEvent($edge.parent(), rel);\n }\n })\n .fail(function () {\n console.log('Failed to get ' + rel + ' data');\n })\n .always(function () {\n that.endLoading($edge);\n });\n },\n //\n HideFirstParentEnd: function (event) {\n var $topEdge = event.data.topEdge;\n var $node = $topEdge.parent();\n if (this.isInAction($node)) {\n this.switchVerticalArrow($topEdge);\n this.switchHorizontalArrow($node);\n }\n },\n // actions on clinking top edge of a node\n topEdgeClickHandler: function (event) {\n event.stopPropagation();\n var that = this;\n var $topEdge = $(event.target);\n var $node = $(event.delegateTarget);\n var parentState = this.getNodeState($node, 'parent');\n if (parentState.exist) {\n var $parent = $node.closest('.nodes').siblings('.node');\n if ($parent.is('.sliding')) { return; }\n // hide the ancestor nodes and sibling nodes of the specified node\n if (parentState.visible) {\n this.hideParent($node);\n $parent.one('transitionend', { 'topEdge': $topEdge }, this.HideFirstParentEnd.bind(this));\n this.triggerHideEvent($node, 'parent');\n } else { // show the ancestors and siblings\n this.showParent($node);\n this.triggerShowEvent($node, 'parent');\n }\n } else { // load the new parent node of the specified node by ajax request\n // start up loading status\n if (this.startLoading($topEdge)) {\n var opts = this.options;\n var url = $.isFunction(opts.ajaxURL.parent) ? opts.ajaxURL.parent($node.data('nodeData')) : opts.ajaxURL.parent + $node[0].id;\n this.loadNodes('parent', url, $topEdge);\n }\n }\n },\n // actions on clinking bottom edge of a node\n bottomEdgeClickHandler: function (event) {\n event.stopPropagation();\n var $bottomEdge = $(event.target);\n var $node = $(event.delegateTarget);\n var childrenState = this.getNodeState($node, 'children');\n if (childrenState.exist) {\n var $children = $node.siblings('.nodes').children().children('.node');\n if ($children.is('.sliding')) { return; }\n // hide the descendant nodes of the specified node\n if (childrenState.visible) {\n this.hideChildren($node);\n this.triggerHideEvent($node, 'children');\n } else { // show the descendants\n this.showChildren($node);\n this.triggerShowEvent($node, 'children');\n }\n } else { // load the new children nodes of the specified node by ajax request\n if (this.startLoading($bottomEdge)) {\n var opts = this.options;\n var url = $.isFunction(opts.ajaxURL.children) ? opts.ajaxURL.children($node.data('nodeData')) : opts.ajaxURL.children + $node[0].id;\n this.loadNodes('children', url, $bottomEdge);\n }\n }\n },\n // actions on clicking horizontal edges\n hEdgeClickHandler: function (event) {\n event.stopPropagation();\n var $hEdge = $(event.target);\n var $node = $(event.delegateTarget);\n var opts = this.options;\n var siblingsState = this.getNodeState($node, 'siblings');\n if (siblingsState.exist) {\n var $siblings = $node.closest('.hierarchy').siblings();\n if ($siblings.find('.sliding').length) { return; }\n if (opts.toggleSiblingsResp) {\n var $prevSib = $node.closest('.hierarchy').prev();\n var $nextSib = $node.closest('.hierarchy').next();\n if ($hEdge.is('.leftEdge')) {\n if ($prevSib.is('.hidden')) {\n this.showSiblings($node, 'left');\n this.triggerShowEvent($node,'siblings');\n } else {\n this.hideSiblings($node, 'left');\n this.triggerHideEvent($node, 'siblings');\n }\n } else {\n if ($nextSib.is('.hidden')) {\n this.showSiblings($node, 'right');\n this.triggerShowEvent($node,'siblings');\n } else {\n this.hideSiblings($node, 'right');\n this.triggerHideEvent($node, 'siblings');\n }\n }\n } else {\n if (siblingsState.visible) {\n this.hideSiblings($node);\n this.triggerHideEvent($node, 'siblings');\n } else {\n this.showSiblings($node);\n this.triggerShowEvent($node, 'siblings');\n }\n }\n } else {\n // load the new sibling nodes of the specified node by ajax request\n if (this.startLoading($hEdge)) {\n var nodeId = $node[0].id;\n var url = (this.getNodeState($node, 'parent').exist) ?\n ($.isFunction(opts.ajaxURL.siblings) ? opts.ajaxURL.siblings($node.data('nodeData')) : opts.ajaxURL.siblings + nodeId) :\n ($.isFunction(opts.ajaxURL.families) ? opts.ajaxURL.families($node.data('nodeData')) : opts.ajaxURL.families + nodeId);\n this.loadNodes('siblings', url, $hEdge);\n }\n }\n },\n //\n expandVNodesEnd: function (event) {\n event.data.vNodes.removeClass('sliding');\n },\n //\n collapseVNodesEnd: function (event) {\n event.data.vNodes.removeClass('sliding').closest('ul').addClass('hidden');\n },\n // event handler for toggle buttons in Hybrid(horizontal + vertical) OrgChart\n toggleVNodes: function (event) {\n var $toggleBtn = $(event.target);\n var $descWrapper = $toggleBtn.parent().next();\n var $descendants = $descWrapper.find('.node');\n var $children = $descWrapper.children().children('.node');\n if ($children.is('.sliding')) { return; }\n $toggleBtn.toggleClass('oci-plus-square oci-minus-square');\n if ($descendants.eq(0).is('.slide-up')) {\n $descWrapper.removeClass('hidden');\n this.repaint($children.get(0));\n $children.addClass('sliding').removeClass('slide-up').eq(0).one('transitionend', { 'vNodes': $children }, this.expandVNodesEnd);\n } else {\n $descendants.addClass('sliding slide-up').eq(0).one('transitionend', { 'vNodes': $descendants }, this.collapseVNodesEnd);\n $descendants.find('.toggleBtn').removeClass('oci-minus-square oci-plus-square');\n }\n },\n //\n createGhostNode: function (event) {\n var $nodeDiv = $(event.target);\n var opts = this.options;\n var origEvent = event.originalEvent;\n var isFirefox = /firefox/.test(window.navigator.userAgent.toLowerCase());\n var ghostNode, nodeCover;\n if (!document.querySelector('.ghost-node')) {\n ghostNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n if (!ghostNode.classList) return;\n ghostNode.classList.add('ghost-node');\n nodeCover = document.createElementNS('http://www.w3.org/2000/svg','rect');\n ghostNode.appendChild(nodeCover);\n $nodeDiv.closest('.orgchart').append(ghostNode);\n } else {\n ghostNode = $nodeDiv.closest('.orgchart').children('.ghost-node').get(0);\n nodeCover = $(ghostNode).children().get(0);\n }\n var transValues = $nodeDiv.closest('.orgchart').css('transform').split(',');\n var isHorizontal = opts.direction === 't2b' || opts.direction === 'b2t';\n var scale = Math.abs(window.parseFloat(isHorizontal ? transValues[0].slice(transValues[0].indexOf('(') + 1) : transValues[1]));\n ghostNode.setAttribute('width', isHorizontal ? $nodeDiv.outerWidth(false) : $nodeDiv.outerHeight(false));\n ghostNode.setAttribute('height', isHorizontal ? $nodeDiv.outerHeight(false) : $nodeDiv.outerWidth(false));\n nodeCover.setAttribute('x',5 * scale);\n nodeCover.setAttribute('y',5 * scale);\n nodeCover.setAttribute('width', 120 * scale);\n nodeCover.setAttribute('height', 40 * scale);\n nodeCover.setAttribute('rx', 4 * scale);\n nodeCover.setAttribute('ry', 4 * scale);\n nodeCover.setAttribute('stroke-width', 1 * scale);\n var xOffset = origEvent.offsetX * scale;\n var yOffset = origEvent.offsetY * scale;\n if (opts.direction === 'l2r') {\n xOffset = origEvent.offsetY * scale;\n yOffset = origEvent.offsetX * scale;\n } else if (opts.direction === 'r2l') {\n xOffset = $nodeDiv.outerWidth(false) - origEvent.offsetY * scale;\n yOffset = origEvent.offsetX * scale;\n } else if (opts.direction === 'b2t') {\n xOffset = $nodeDiv.outerWidth(false) - origEvent.offsetX * scale;\n yOffset = $nodeDiv.outerHeight(false) - origEvent.offsetY * scale;\n }\n if (isFirefox) { // hack for old version of Firefox(< 48.0)\n nodeCover.setAttribute('fill', 'rgb(255, 255, 255)');\n nodeCover.setAttribute('stroke', 'rgb(191, 0, 0)');\n var ghostNodeWrapper = document.createElement('img');\n ghostNodeWrapper.src = 'data:image/svg+xml;utf8,' + (new XMLSerializer()).serializeToString(ghostNode);\n origEvent.dataTransfer.setDragImage(ghostNodeWrapper, xOffset, yOffset);\n } else {\n // IE/Edge do not support this, so only use it if we can\n if (origEvent.dataTransfer.setDragImage)\n origEvent.dataTransfer.setDragImage(ghostNode, xOffset, yOffset);\n }\n },\n // get the level amount of a hierachy\n getUpperLevel: function ($node) {\n if (!$node.is('.node')) {\n return 0;\n }\n return $node.parents('.hierarchy').length;\n },\n // get the level amount of a hierachy\n getLowerLevel: function ($node) {\n if (!$node.is('.node')) {\n return 0;\n }\n return $node.closest('.hierarchy').find('.nodes').length + 1;\n },\n // get nodes in level order traversal\n getLevelOrderNodes: function ($root) {\n if(!$root) return [];\n var queue = [];\n var output = [];\n queue.push($root);\n while(queue.length) {\n var row = [];\n for(var i = 0; i < queue.length; i++) {\n var cur = queue.shift();\n var children = this.getChildren(cur);\n if(children.length) {\n queue.push(children.toArray().flat());\n }\n row.push($(cur));\n }\n output.push(row);\n }\n return output;\n },\n //\n filterAllowedDropNodes: function ($dragged) {\n var opts = this.options;\n // what is being dragged? a node, or something within a node?\n var draggingNode = $dragged.closest('[draggable]').hasClass('node');\n var $dragZone = $dragged.closest('.nodes').siblings('.node'); // parent node\n var $dragHier = $dragged.closest('.hierarchy').find('.node'); // this node, and its children\n this.$chart.data('dragged', $dragged)\n .find('.node').each(function (index, node) {\n if (!draggingNode || $dragHier.index(node) === -1) {\n if (opts.dropCriteria) {\n if (opts.dropCriteria($dragged, $dragZone, $(node))) {\n $(node).addClass('allowedDrop');\n }\n } else {\n $(node).addClass('allowedDrop');\n }\n }\n });\n },\n //\n dragstartHandler: function (event) {\n event.originalEvent.dataTransfer.setData('text/html', 'hack for firefox');\n // if users enable zoom or direction options\n if (this.$chart.css('transform') !== 'none') {\n this.createGhostNode(event);\n }\n this.filterAllowedDropNodes($(event.target));\n },\n //\n dragoverHandler: function (event) {\n if (!$(event.delegateTarget).is('.allowedDrop')) {\n event.originalEvent.dataTransfer.dropEffect = 'none';\n } else {\n // default action for drag-and-drop of div is not to drop, so preventing default action for nodes which have allowedDrop class\n //to fix drag and drop on IE and Edge\n event.preventDefault();\n }\n },\n //\n dragendHandler: function (event) {\n this.$chart.find('.allowedDrop').removeClass('allowedDrop');\n },\n // when user drops the node, it will be removed from original parent node and be added to new parent node\n dropHandler: function (event) {\n var $dropZone = $(event.delegateTarget);\n var $dragged = this.$chart.data('dragged');\n\n // Pass on drops which are not nodes (since they are not our doing)\n if (!$dragged.hasClass('node')) {\n this.$chart.triggerHandler({ 'type': 'otherdropped.orgchart', 'draggedItem': $dragged, 'dropZone': $dropZone });\n return;\n }\n\n if (!$dropZone.hasClass('allowedDrop')) {\n // We are trying to drop a node into a node which isn't allowed\n // IE/Edge have a habit of allowing this, so we need our own double-check\n return;\n }\n\n var $dragZone = $dragged.closest('.nodes').siblings('.node');\n var dropEvent = $.Event('nodedrop.orgchart');\n this.$chart.trigger(dropEvent, { 'draggedNode': $dragged, 'dragZone': $dragZone, 'dropZone': $dropZone });\n if (dropEvent.isDefaultPrevented()) {\n return;\n }\n // firstly, deal with the hierarchy of drop zone\n if (!$dropZone.siblings('.nodes').length) { // if the drop zone is a leaf node\n $dropZone.append('<i class=\"edge verticalEdge bottomEdge oci\"></i>')\n .after('<ul class=\"nodes\"></ul>')\n .siblings('.nodes').append($dragged.find('.horizontalEdge').remove().end().closest('.hierarchy'));\n if ($dropZone.children('.title').length) {\n $dropZone.children('.title').prepend('<i class=\"oci '+ this.$chart.data('options').parentNodeSymbol + ' symbol\"></i>');\n }\n } else {\n var horizontalEdges = '<i class=\"edge horizontalEdge rightEdge oci\"></i><i class=\"edge horizontalEdge leftEdge oci\"></i>';\n if (!$dragged.find('.horizontalEdge').length) {\n $dragged.append(horizontalEdges);\n }\n $dropZone.siblings('.nodes').append($dragged.closest('.hierarchy'));\n var $dropSibs = $dragged.closest('.hierarchy').siblings().find('.node:first');\n if ($dropSibs.length === 1) {\n $dropSibs.append(horizontalEdges);\n }\n }\n // secondly, deal with the hierarchy of dragged node\n if ($dragZone.siblings('.nodes').children('.hierarchy').length === 1) { // if there is only one sibling node left\n $dragZone.siblings('.nodes').children('.hierarchy').find('.node:first')\n .find('.horizontalEdge').remove();\n } else if ($dragZone.siblings('.nodes').children('.hierarchy').length === 0) {\n $dragZone.find('.bottomEdge, .symbol').remove()\n .end().siblings('.nodes').remove();\n }\n },\n //\n touchstartHandler: function (event) {\n if (this.touchHandled)\n return;\n\n if (event.touches && event.touches.length > 1)\n return;\n\n this.touchHandled = true;\n this.touchMoved = false; // this is so we can work out later if this was a 'press' or a 'drag' touch\n event.preventDefault();\n },\n //\n touchmoveHandler: function (event) {\n if (!this.touchHandled)\n return;\n\n if (event.touches && event.touches.length > 1)\n return;\n\n event.preventDefault();\n\n if (!this.touchMoved) {\n // we do not bother with createGhostNode (dragstart does) since the touch event does not have a dataTransfer property\n this.filterAllowedDropNodes($(event.currentTarget)); // will also set 'this.$chart.data('dragged')' for us\n // create an image which can be used to illustrate the drag (our own createGhostNode)\n this.touchDragImage = this.createDragImage(event, this.$chart.data('dragged')[0]);\n }\n this.touchMoved = true;\n\n // move our dragimage so it follows our finger\n this.moveDragImage(event, this.touchDragImage);\n\n var $touching = $(document.elementFromPoint(event.touches[0].clientX, event.touches[0].clientY));\n var $touchingNodes = $touching.closest('div.node');\n if ($touchingNodes.length > 0) {\n var touchingNodeElement = $touchingNodes[0];\n if ($touchingNodes.is('.allowedDrop')) {\n this.touchTargetNode = touchingNodeElement;\n }\n else {\n this.touchTargetNode = null;\n }\n }\n else {\n this.touchTargetNode = null;\n }\n },\n //\n touchendHandler: function (event) {\n if (!this.touchHandled) {\n return;\n }\n this.destroyDragImage();\n if (this.touchMoved) {\n // we've had movement, so this was a 'drag' touch\n if (this.touchTargetNode) {\n var fakeEventForDropHandler = { delegateTarget: this.touchTargetNode };\n this.dropHandler(fakeEventForDropHandler);\n this.touchTargetNode = null;\n }\n this.dragendHandler(event);\n }\n else {\n // we did not move, so this was a 'press' touch (fake a click)\n var firstTouch = event.changedTouches[0];\n var fakeMouseClickEvent = document.createEvent('MouseEvents');\n fakeMouseClickEvent.initMouseEvent('click', true, true, window, 1, firstTouch.screenX, firstTouch.screenY, firstTouch.clientX, firstTouch.clientY, event.ctrlKey, event.altKey, event.shiftKey, event.metaKey, 0, null);\n event.target.dispatchEvent(fakeMouseClickEvent);\n }\n this.touchHandled = false;\n },\n //\n createDragImage: function (event, source) {\n var dragImage = source.cloneNode(true);\n this.copyStyle(source, dragImage);\n dragImage.style.top = dragImage.style.left = '-9999px';\n var sourceRectangle = source.getBoundingClientRect();\n var sourcePoint = this.getTouchPoint(event);\n this.touchDragImageOffset = { x: sourcePoint.x - sourceRectangle.left, y: sourcePoint.y - sourceRectangle.top };\n dragImage.style.opacity = '0.5';\n document.body.appendChild(dragImage);\n return dragImage;\n },\n //\n destroyDragImage: function () {\n if (this.touchDragImage && this.touchDragImage.parentElement)\n this.touchDragImage.parentElement.removeChild(this.touchDragImage);\n this.touchDragImageOffset = null;\n this.touchDragImage = null;\n },\n //\n copyStyle: function (src, dst) {\n // remove potentially troublesome attributes\n var badAttributes = ['id', 'class', 'style', 'draggable'];\n badAttributes.forEach(function (att) {\n dst.removeAttribute(att);\n });\n // copy canvas content\n if (src instanceof HTMLCanvasElement) {\n var cSrc = src, cDst = dst;\n cDst.width = cSrc.width;\n cDst.height = cSrc.height;\n cDst.getContext('2d').drawImage(cSrc, 0, 0);\n }\n // copy style (without transitions)\n var cs = getComputedStyle(src);\n for (var i = 0; i < cs.length; i++) {\n var key = cs[i];\n if (key.indexOf('transition') < 0) {\n dst.style[key] = cs[key];\n }\n }\n dst.style.pointerEvents = 'none';\n // and repeat for all children\n for (var i = 0; i < src.children.length; i++) {\n this.copyStyle(src.children[i], dst.children[i]);\n }\n },\n //\n getTouchPoint: function (event) {\n if (event && event.touches) {\n event = event.touches[0];\n }\n return {\n x: event.clientX,\n y: event.clientY\n };\n },\n //\n moveDragImage: function (event, image) {\n if (!event || !image)\n return;\n var orgChartMaster = this;\n requestAnimationFrame(function () {\n var pt = orgChartMaster.getTouchPoint(event);\n var s = image.style;\n s.position = 'absolute';\n s.pointerEvents = 'none';\n s.zIndex = '999999';\n if (orgChartMaster.touchDragImageOffset) {\n s.left = Math.round(pt.x - orgChartMaster.touchDragImageOffset.x) + 'px';\n s.top = Math.round(pt.y - orgChartMaster.touchDragImageOffset.y) + 'px';\n }\n });\n },\n //\n bindDragDrop: function ($node) {\n $node.on('dragstart', this.dragstartHandler.bind(this))\n .on('dragover', this.dragoverHandler.bind(this))\n .on('dragend', this.dragendHandler.bind(this))\n .on('drop', this.dropHandler.bind(this))\n .on('touchstart', this.touchstartHandler.bind(this))\n .on('touchmove', this.touchmoveHandler.bind(this))\n .on('touchend', this.touchendHandler.bind(this));\n },\n // create node\n createNode: function (data) {\n var that = this;\n var opts = this.options;\n var level = data.level;\n if (data.children && data[opts.nodeId]) {\n $.each(data.children, function (index, child) {\n child.parentId = data[opts.nodeId]\n });\n }\n // construct the content of node\n var $nodeDiv = $('<div' + (opts.draggable ? ' draggable=\"true\"' : '') + (data[opts.nodeId] ? ' id=\"' + data[opts.nodeId] + '\"' : '') + (data.parentId ? ' data-parent=\"' + data.parentId + '\"' : '') + '>')\n .addClass('node ' + (data.className || '') + (level > opts.visibleLevel ? ' slide-up' : ''));\n if (opts.nodeTemplate) {\n $nodeDiv.append(opts.nodeTemplate(data));\n } else {\n $nodeDiv.append('<div class=\"title\">' + data[opts.nodeTitle] + '</div>')\n .append(typeof opts.nodeContent !== 'undefined' ? '<div class=\"content\">' + (data[opts.nodeContent] || '') + '</div>' : '');\n }\n //\n var nodeData = $.extend({}, data);\n delete nodeData.children;\n $nodeDiv.data('nodeData', nodeData);\n // append 4 direction arrows or expand/collapse buttons\n var flags = data.relationship || '';\n if (opts.verticalLevel && level >= opts.verticalLevel) {\n if ((level + 1) > opts.verticalLevel && Number(flags.substr(2,1))) {\n $nodeDiv.append('<i class=\"toggleBtn oci\"></i>')\n .children('.title').prepend('<i class=\"oci '+ opts.parentNodeSymbol + ' symbol\"></i>');\n }\n } else {\n if (Number(flags.substr(0,1))) {\n $nodeDiv.append('<i class=\"edge verticalEdge topEdge oci\"></i>');\n }\n if(Number(flags.substr(1,1))) {\n $nodeDiv.append('<i class=\"edge horizontalEdge rightEdge oci\"></i>' +\n '<i class=\"edge horizontalEdge leftEdge oci\"></i>');\n }\n if(Number(flags.substr(2,1))) {\n $nodeDiv.append('<i class=\"edge verticalEdge bottomEdge oci\"></i>')\n .children('.title').prepend('<i class=\"oci '+ opts.parentNodeSymbol + ' symbol\"></i>');\n }\n }\n\n $nodeDiv.on('mouseenter mouseleave', this.nodeEnterLeaveHandler.bind(this));\n $nodeDiv.on('click', this.nodeClickHandler.bind(this));\n $nodeDiv.on('click', '.topEdge', this.topEdgeClickHandler.bind(this));\n $nodeDiv.on('click', '.bottomEdge', this.bottomEdgeClickHandler.bind(this));\n $nodeDiv.on('click', '.leftEdge, .rightEdge', this.hEdgeClickHandler.bind(this));\n $nodeDiv.on('click', '.toggleBtn', this.toggleVNodes.bind(this));\n\n if (opts.draggable) {\n this.bindDragDrop($nodeDiv);\n this.touchHandled = false;\n this.touchMoved = false;\n this.touchTargetNode = null;\n }\n // allow user to append dom modification after finishing node create of orgchart\n if (opts.createNode) {\n opts.createNode($nodeDiv, data);\n }\n\n return $nodeDiv;\n },\n // recursively build the tree\n buildHierarchy: function ($appendTo, data) {\n var that = this;\n var opts = this.options;\n var level = 0;\n if (data.level) {\n level = data.level;\n } else {\n level = data.level = $appendTo.parentsUntil('.orgchart', '.nodes').length;\n }\n // Construct the node\n if (Object.keys(data).length > 2) {\n var $nodeDiv = this.createNode(data);\n if (opts.verticalLevel && level >= opts.verticalLevel) {\n $appendTo.append($nodeDiv);\n } else {\n $appendTo.append($nodeDiv);\n }\n }\n // Construct the \"inferior nodes\"\n if (data.children && data.children.length) {\n var isHidden = level + 1 > opts.visibleLevel || (data.collapsed !== undefined && data.collapsed);\n var isVerticalLayer = opts.verticalLevel && (level + 1) >= opts.verticalLevel;\n var $nodesLayer;\n if (isVerticalLayer) {\n $nodesLayer = $('<ul class=\"nodes\">');\n if (isHidden && level + 1 >= opts.verticalLevel) {\n $nodesLayer.addClass('hidden');\n }\n if (level + 1 === opts.verticalLevel) {\n $appendTo.addClass('hybrid').append($nodesLayer.addClass('vertical'));\n } else {\n $appendTo.append($nodesLayer);\n }\n } else {\n $nodesLayer = $('<ul class=\"nodes' + (isHidden ? ' hidden' : '') + '\">');\n if (Object.keys(data).length === 2) {\n $appendTo.append($nodesLayer);\n } else {\n if (isHidden) {\n $appendTo.addClass('isChildrenCollapsed');\n }\n $appendTo.append($nodesLayer);\n }\n }\n // recurse through children nodes\n $.each(data.children, function () {\n var $nodeCell = $('<li class=\"hierarchy\">');\n $nodesLayer.append($nodeCell);\n this.level = level + 1;\n that.buildHierarchy($nodeCell, this);\n });\n }\n },\n // build the child nodes of specific node\n buildChildNode: function ($appendTo, data) {\n this.buildHierarchy($appendTo, { 'children': data });\n },\n // exposed method\n addChildren: function ($node, data) {\n this.buildChildNode($node.closest('.hierarchy'), data);\n if (!$node.find('.symbol').length) {\n $node.children('.title').prepend('<i class=\"oci '+ this.options.parentNodeSymbol + ' symbol\"></i>');\n }\n if ($node.closest('.nodes.vertical').length) {\n if (!$node.children('.toggleBtn').length) {\n $node.append('<i class=\"toggleBtn oci\"></i>');\n }\n } else {\n if (!$node.children('.bottomEdge').length) {\n $node.append('<i class=\"edge verticalEdge bottomEdge oci\"></i>');\n }\n }\n if (this.isInAction($node)) {\n this.switchVerticalArrow($node.children('.bottomEdge'));\n }\n },\n // build the parent node of specific node\n buildParentNode: function ($currentRoot, data) {\n data.relationship = data.relationship || '001';\n var $newRootWrapper = $('<ul class=\"nodes\"><li class=\"hierarchy\"></li></ul>')\n .find('.hierarchy').append(this.createNode(data)).end();\n this.$chart.prepend($newRootWrapper)\n .find('.hierarchy:first').append($currentRoot.closest('ul').addClass('nodes'));\n },\n // exposed method\n addParent: function ($currentRoot, data) {\n this.buildParentNode($currentRoot, data);\n if (!$currentRoot.children('.topEdge').length) {\n $currentRoot.children('.title').after('<i class=\"edge verticalEdge topEdge oci\"></i>');\n }\n if (this.isInAction($currentRoot)) {\n this.switchVerticalArrow($currentRoot.children('.topEdge'));\n }\n },\n // build the sibling nodes of specific node\n buildSiblingNode: function ($nodeChart, data) {\n var newSiblingCount = $.isArray(data) ? data.length : data.children.length;\n var existingSibligCount = $nodeChart.parent().is('.nodes') ? $nodeChart.siblings().length + 1 : 1;\n var siblingCount = existingSibligCount + newSiblingCount;\n var insertPostion = (siblingCount > 1) ? Math.floor(siblingCount/2 - 1) : 0;\n // just build the sibling nodes for the specific node\n if ($nodeChart.closest('.nodes').parent().is('.hierarchy')) {\n this.buildChildNode($nodeChart.parent().closest('.hierarchy'), data);\n var $siblings = $nodeChart.parent().closest('.hierarchy').children('.nodes:last').children('.hierarchy');\n if (existingSibligCount > 1) {\n $siblings.eq(0).before($nodeChart.siblings().addBack().unwrap());\n } else {\n $siblings.eq(insertPostion).after($nodeChart.unwrap());\n }\n } else { // build the sibling nodes and parent node for the specific ndoe\n this.buildHierarchy($nodeChart.parent().prepend($('<li class=\"hierarchy\">')).children('.hierarchy:first'), data);\n $nodeChart.prevAll('.hierarchy').children('.nodes').children().eq(insertPostion).after($nodeChart);\n }\n },\n //\n addSiblings: function ($node, data) {\n this.buildSiblingNode($node.closest('.hierarchy'), data);\n $node.closest('.nodes').data('siblingsLoaded', true);\n if (!$node.children('.leftEdge').length) {\n $node.children('.topEdge').after('<i class=\"edge horizontalEdge rightEdge oci\"></i><i class=\"edge horizontalEdge leftEdge oci\"></i>');\n }\n if (this.isInAction($node)) {\n this.switchHorizontalArrow($node);\n $node.children('.topEdge').removeClass('oci-chevron-up').addClass('oci-chevron-down');\n }\n },\n // remove node and its descendent nodes\n removeNodes: function ($node) {\n var $wrapper = $node.closest('.hierarchy').parent();\n if ($wrapper.parent().is('.hierarchy')) {\n if (this.getNodeState($node, 'siblings').exist) {\n $node.closest('.hierarchy').remove();\n if ($wrapper.children().length === 1) {\n $wrapper.find('.node:first .horizontalEdge').remove();\n }\n } else {\n $wrapper.siblings('.node').find('.bottomEdge').remove()\n .end().end().remove();\n }\n } else { // if $node is root node\n $wrapper.closest('.orgchart').remove();\n }\n },\n //\n hideDropZones: function () {\n // Remove all the 'this is a drop zone' indicators\n var orgChartObj = this;\n orgChartObj.$chart.find('.allowedDrop')\n .removeClass('allowedDrop');\n },\n //\n showDropZones: function (dragged) {\n // Highlight all the 'drop zones', and set dragged, so that the drop/enter can work out what happens later\n // TODO: This assumes all nodes are droppable: it doesn't run the custom isDroppable function - it should!\n var orgChartObj = this;\n orgChartObj.$chart.find('.node')\n .each(function (index, node) {\n $(node).addClass('allowedDrop');\n });\n orgChartObj.$chart.data('dragged', $(dragged));\n },\n //\n processExternalDrop: function (dropZone, dragged) {\n // Allow an external drop event to be handled by one of our nodes\n if (dragged) {\n this.$chart.data('dragged', $(dragged));\n }\n var droppedOnNode = dropZone.closest('.node');\n // would like to just call 'dropZoneHandler', but I can't reach it from here\n // instead raise a drop event on the node element\n droppedOnNode.triggerHandler({ 'type': 'drop' });\n },\n //\n exportPDF: function(canvas, exportFilename){\n var doc = {};\n var docWidth = Math.floor(canvas.width);\n var docHeight = Math.floor(canvas.height);\n if (!window.jsPDF) {\n window.jsPDF = window.jspdf.jsPDF;\n }\n\n if (docWidth > docHeight) {\n doc = new jsPDF({\n orientation: 'landscape',\n unit: 'px',\n format: [docWidth, docHeight]\n });\n } else {\n doc = new jsPDF({\n orientation: 'portrait',\n unit: 'px',\n format: [docHeight, docWidth]\n });\n }\n doc.addImage(canvas.toDataURL(), 'png', 0, 0);\n doc.save(exportFilename + '.pdf');\n },\n //\n exportPNG: function(canvas, exportFilename){\n var that = this;\n var isWebkit = 'WebkitAppearance' in document.documentElement.style;\n var isFf = !!window.sidebar;\n var isEdge = navigator.appName === 'Microsoft Internet Explorer' || (navigator.appName === \"Netscape\" && navigator.appVersion.indexOf('Edge') > -1);\n var $chartContainer = this.$chartContainer;\n\n if ((!isWebkit && !isFf) || isEdge) {\n window.navigator.msSaveBlob(canvas.msToBlob(), exportFilename + '.png');\n } else {\n var selector = '.oci-download-btn' + (that.options.chartClass !== '' ? '.' + that.options.chartClass : '');\n\n if (!$chartContainer.find(selector).length) {\n $chartContainer.append('<a class=\"oci-download-btn' + (that.options.chartClass !== '' ? ' ' + that.options.chartClass : '') + '\"'\n + ' download=\"' + exportFilename + '.png\"></a>');\n }\n\n $chartContainer.find(selector).attr('href', canvas.toDataURL())[0].click();\n }\n },\n //\n export: function (exportFilename, exportFileextension) {\n var that = this;\n exportFilename = (typeof exportFilename !== 'undefined') ? exportFilename : this.options.exportFilename;\n exportFileextension = (typeof exportFileextension !== 'undefined') ? exportFileextension : this.options.exportFileextension;\n if ($(this).children('.spinner').length) {\n return false;\n }\n var $chartContainer = this.$chartContainer;\n var $mask = $chartContainer.find('.mask');\n if (!$mask.length) {\n $chartContainer.append('<div class=\"mask\"><i class=\"oci oci-spinner spinner\"></i></div>');\n } else {\n $mask.removeClass('hidden');\n }\n var sourceChart = $chartContainer.addClass('canvasContainer').find('.orgchart:not(\".hidden\")').get(0);\n var flag = that.options.direction === 'l2r' || that.options.direction === 'r2l';\n html2canvas(sourceChart, {\n 'width': flag ? sourceChart.clientHeight : sourceChart.clientWidth,\n 'height': flag ? sourceChart.clientWidth : sourceChart.clientHeight,\n 'onclone': function (cloneDoc) {\n $(cloneDoc).find('.canvasContainer').css('overflow', 'visible')\n .find('.orgchart:not(\".hidden\"):first').css('transform', '');\n }\n })\n .then(function (canvas) {\n $chartContainer.find('.mask').addClass('hidden');\n\n if (exportFileextension.toLowerCase() === 'pdf') {\n that.exportPDF(canvas, exportFilename);\n } else {\n that.exportPNG(canvas, exportFilename);\n }\n\n $chartContainer.removeClass('canvasContainer');\n }, function () {\n $chartContainer.removeClass('canvasContainer');\n });\n }\n };\n\n $.fn.orgchart = function (opts) {\n return new OrgChart(this, opts).init();\n };\n\n}));\n"],"names":["factory","module","exports","require","window","document","jQuery","$","undefined","OrgChart","elem","opts","this","$chartContainer","defaultOptions","nodeTitle","nodeId","toggleSiblingsResp","visibleLevel","chartClass","exportButton","exportButtonName","exportFilename","exportFileextension","parentNodeSymbol","draggable","direction","pan","zoom","zoominLimit","zoomoutLimit","prototype","init","that","options","extend","data","$chart","remove","class","click","event","target","closest","length","find","removeClass","$root","MutationObserver","triggerInitEvent","append","type","buildHierarchy","buildJsonDS","children","ajaxURL","attachRel","ajax","url","dataType","done","textStatus","jqXHR","fail","errorThrown","console","log","always","attachExportButton","bindPan","bindZoom","mo","mutations","disconnect","initTime","i","j","addedNodes","classList","contains","initCompleted","initEvent","Event","trigger","observe","childList","triggerLoadEvent","$target","rel","triggerShowEvent","triggerHideEvent","$exportBtn","text","e","preventDefault","export","after","setOptions","val","unbindPan","unbindZoom","panStartHandler","delegateTarget","touches","css","temp","lastX","lastY","lastTf","startX","split","indexOf","parseInt","startY","targetTouches","pageX","pageY","on","newX","newY","matrix","join","panEndHandler","chart","off","zoomWheelHandler","oc","newScale","originalEvent","deltaY","setChartScale","zoomStartHandler","dist","getPinchDist","zoomingHandler","zoomEndHandler","diff","Math","sqrt","clientX","clientY","targetScale","abs","parseFloat","$li","subObj","name","contents","eq","trim","relationship","parent","is","siblings","each","key","value","push","flags","forEach","item","loopChart","includeNodeData","$node","id","getHierarchy","valid","getNodeState","relation","isVerticalNode","parents","exist","visible","getParent","getRelatedNodes","getChildren","getSiblings","hideParentEnd","addClass","hideParent","$parent","hideSiblings","one","showParentEnd","node","isInAction","switchVerticalArrow","showParent","repaint","bind","stopAjax","$nodeLevel","isVisibleNode","index","hideChildrenEnd","animatedNodes","hideChildren","$lowerLevel","$animatedNodes","filter","get","lowerLevel","showChildrenEnd","showChildren","$levels","isVerticalDesc","hideSiblingsEnd","$nodeContainer","nodeContainer","$siblings","prevAll","nextAll","end","switchHorizontalArrow","showSiblingsEnd","visibleNodes","showRelatedParentEnd","showSiblings","$upperLevel","$visibleNodes","startLoading","$edge","not","prop","endLoading","removeAttr","attr","$arrow","toggleClass","$prevSib","prev","$nextSib","next","sibsVisible","$sibs","style","offsetWidth","nodeEnterLeaveHandler","$topEdge","$bottomEdge","$leftEdge","flag","$toggleBtn","nodeClickHandler","loadNodes","isEmptyObject","addParent","addChildren","addSiblings","HideFirstParentEnd","topEdge","topEdgeClickHandler","stopPropagation","parentState","isFunction","bottomEdgeClickHandler","childrenState","hEdgeClickHandler","$hEdge","siblingsState","families","expandVNodesEnd","vNodes","collapseVNodesEnd","toggleVNodes","$descWrapper","$descendants","$children","createGhostNode","ghostNode","nodeCover","$nodeDiv","origEvent","isFirefox","test","navigator","userAgent","toLowerCase","querySelector","createElementNS","add","appendChild","transValues","isHorizontal","scale","slice","xOffset","setAttribute","outerWidth","outerHeight","offsetX","yOffset","offsetY","ghostNodeWrapper","createElement","src","XMLSerializer","serializeToString","dataTransfer","setDragImage","getUpperLevel","getLowerLevel","getLevelOrderNodes","queue","output","row","cur","shift","toArray","flat","filterAllowedDropNodes","$dragged","draggingNode","hasClass","$dragZone","$dragHier","dropCriteria","dragstartHandler","setData","dragoverHandler","dropEffect","dragendHandler","dropHandler","horizontalEdges","$dropSibs","$dropZone","dropEvent","draggedNode","dragZone","dropZone","isDefaultPrevented","prepend","triggerHandler","draggedItem","touchstartHandler","touchHandled","touchMoved","touchmoveHandler","touchingNodeElement","currentTarget","touchDragImage","createDragImage","moveDragImage","$touchingNodes","elementFromPoint","touchTargetNode","touchendHandler","firstTouch","fakeMouseClickEvent","destroyDragImage","fakeEventForDropHandler","changedTouches","createEvent","initMouseEvent","screenX","screenY","ctrlKey","altKey","shiftKey","metaKey","dispatchEvent","source","dragImage","cloneNode","sourceRectangle","copyStyle","top","left","getBoundingClientRect","sourcePoint","getTouchPoint","touchDragImageOffset","x","y","opacity","body","parentElement","removeChild","dst","att","removeAttribute","HTMLCanvasElement","cDst","width","cSrc","height","getContext","drawImage","cs","getComputedStyle","pointerEvents","image","orgChartMaster","requestAnimationFrame","pt","s","position","zIndex","round","bindDragDrop","createNode","level","child","parentId","className","nodeData","nodeTemplate","nodeContent","verticalLevel","Number","substr","$appendTo","isHidden","$nodesLayer","parentsUntil","Object","keys","collapsed","$nodeCell","buildChildNode","buildParentNode","$currentRoot","$newRootWrapper","buildSiblingNode","$nodeChart","newSiblingCount","isArray","existingSibligCount","siblingCount","insertPostion","floor","before","addBack","unwrap","removeNodes","$wrapper","hideDropZones","showDropZones","dragged","processExternalDrop","exportPDF","canvas","doc","docWidth","docHeight","jsPDF","jspdf","orientation","unit","format","addImage","toDataURL","save","exportPNG","isWebkit","documentElement","isFf","sidebar","isEdge","appName","appVersion","msSaveBlob","msToBlob","selector","$mask","sourceChart","html2canvas","clientHeight","clientWidth","onclone","cloneDoc","then","fn","orgchart"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jquery.orgchart.min.js","sources":["jquery.orgchart.js"],"sourcesContent":["/*\n * jQuery OrgChart Plugin\n * https://github.com/dabeng/OrgChart\n *\n * Copyright 2016, dabeng\n * https://github.com/dabeng\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/MIT\n */\n'use strict';\n\n(function (factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n factory(require('jquery'), window, document);\n } else {\n factory(jQuery, window, document);\n }\n}(function ($, window, document, undefined) {\n var OrgChart = function (elem, opts) {\n this.$chartContainer = $(elem);\n this.opts = opts;\n this.defaultOptions = {\n 'nodeTitle': 'name',\n 'nodeId': 'id',\n 'toggleSiblingsResp': false,\n 'visibleLevel': 999,\n 'chartClass': '',\n 'exportButton': false,\n 'exportButtonName': 'Export',\n 'exportFilename': 'OrgChart',\n 'exportFileextension': 'png',\n 'parentNodeSymbol': 'oci-leader',\n 'draggable': false,\n 'direction': 't2b',\n 'pan': false,\n 'zoom': false,\n 'zoominLimit': 7,\n 'zoomoutLimit': 0.5\n };\n };\n //\n OrgChart.prototype = {\n //\n init: function (opts) {\n var that = this;\n this.options = $.extend({}, this.defaultOptions, this.opts, opts);\n // build the org-chart\n var $chartContainer = this.$chartContainer;\n if (this.$chart) {\n this.$chart.remove();\n }\n var data = this.options.data;\n var $chart = this.$chart = $('<div>', {\n 'data': { 'options': this.options },\n 'class': 'orgchart' + (this.options.chartClass !== '' ? ' ' + this.options.chartClass : '') + (this.options.direction !== 't2b' ? ' ' + this.options.direction : ''),\n 'click': function(event) {\n if (!$(event.target).closest('.node').length) {\n $chart.find('.node.focused').removeClass('focused');\n }\n }\n });\n if (typeof MutationObserver !== 'undefined') {\n this.triggerInitEvent();\n }\n var $root = $chart.append($('<ul class=\"nodes\"><li class=\"hierarchy\"></li></ul>')).find('.hierarchy');\n if ($.type(data) === 'object') {\n if (data instanceof $) { // ul datasource\n this.buildHierarchy($root, this.buildJsonDS(data.children()), 0, this.options);\n } else { // local json datasource\n this.buildHierarchy($root, this.options.ajaxURL ? data : this.attachRel(data, '00'));\n }\n } else {\n $chart.append('<i class=\"oci oci-spinner spinner\"></i>');\n $.ajax({\n 'url': data,\n 'dataType': 'json'\n })\n .done(function(data, textStatus, jqXHR) {\n that.buildHierarchy($root, that.options.ajaxURL ? data : that.attachRel(data, '00'), 0, that.options);\n })\n .fail(function(jqXHR, textStatus, errorThrown) {\n console.log(errorThrown);\n })\n .always(function() {\n $chart.children('.spinner').remove();\n });\n }\n $chartContainer.append($chart);\n\n // append the export button\n if (this.options.exportButton && !$('.oc-export-btn').length) {\n this.attachExportButton();\n }\n\n if (this.options.pan) {\n this.bindPan();\n }\n\n if (this.options.zoom) {\n this.bindZoom();\n }\n\n return this;\n },\n //\n triggerInitEvent: function () {\n var that = this;\n var mo = new MutationObserver(function (mutations) {\n mo.disconnect();\n initTime:\n for (var i = 0; i < mutations.length; i++) {\n for (var j = 0; j < mutations[i].addedNodes.length; j++) {\n if (mutations[i].addedNodes[j].classList.contains('orgchart')) {\n if (that.options.initCompleted && typeof that.options.initCompleted === 'function') {\n that.options.initCompleted(that.$chart);\n }\n var initEvent = $.Event('init.orgchart');\n that.$chart.trigger(initEvent);\n break initTime;\n }\n }\n }\n });\n mo.observe(this.$chartContainer[0], { childList: true });\n },\n triggerLoadEvent: function ($target, rel) {\n var initEvent = $.Event('load-' + rel +'.orgchart');\n $target.trigger(initEvent);\n },\n triggerShowEvent: function ($target, rel) {\n var initEvent = $.Event('show-' + rel + '.orgchart');\n $target.trigger(initEvent);\n },\n triggerHideEvent: function ($target, rel) {\n var initEvent = $.Event('hide-' + rel + '.orgchart');\n $target.trigger(initEvent);\n },\n // add export button for orgchart\n attachExportButton: function () {\n var that = this;\n var $exportBtn = $('<button>', {\n 'class': 'oc-export-btn',\n 'text': this.options.exportButtonName,\n 'click': function(e) {\n e.preventDefault();\n that.export();\n }\n });\n this.$chartContainer.after($exportBtn);\n },\n setOptions: function (opts, val) {\n if (typeof opts === 'string') {\n if (opts === 'pan') {\n if (val) {\n this.bindPan();\n } else {\n this.unbindPan();\n }\n }\n if (opts === 'zoom') {\n if (val) {\n this.bindZoom();\n } else {\n this.unbindZoom();\n }\n }\n }\n if (typeof opts === 'object') {\n if (opts.data) {\n this.init(opts);\n } else {\n if (typeof opts.pan !== 'undefined') {\n if (opts.pan) {\n this.bindPan();\n } else {\n this.unbindPan();\n }\n }\n if (typeof opts.zoom !== 'undefined') {\n if (opts.zoom) {\n this.bindZoom();\n } else {\n this.unbindZoom();\n }\n }\n }\n }\n\n return this;\n },\n //\n panStartHandler: function (e) {\n var $chart = $(e.delegateTarget);\n if ($(e.target).closest('.node').length || (e.touches && e.touches.length > 1)) {\n $chart.data('panning', false);\n return;\n } else {\n $chart.css('cursor', 'move').data('panning', true);\n }\n var lastX = 0;\n var lastY = 0;\n var lastTf = $chart.css('transform');\n if (lastTf !== 'none') {\n var temp = lastTf.split(',');\n if (lastTf.indexOf('3d') === -1) {\n lastX = parseInt(temp[4]);\n lastY = parseInt(temp[5]);\n } else {\n lastX = parseInt(temp[12]);\n lastY = parseInt(temp[13]);\n }\n }\n var startX = 0;\n var startY = 0;\n if (!e.targetTouches) { // pand on desktop\n startX = e.pageX - lastX;\n startY = e.pageY - lastY;\n } else if (e.targetTouches.length === 1) { // pan on mobile device\n startX = e.targetTouches[0].pageX - lastX;\n startY = e.targetTouches[0].pageY - lastY;\n } else if (e.targetTouches.length > 1) {\n return;\n }\n $chart.on('mousemove touchmove',function(e) {\n if (!$chart.data('panning')) {\n return;\n }\n var newX = 0;\n var newY = 0;\n if (!e.targetTouches) { // pand on desktop\n newX = e.pageX - startX;\n newY = e.pageY - startY;\n } else if (e.targetTouches.length === 1) { // pan on mobile device\n newX = e.targetTouches[0].pageX - startX;\n newY = e.targetTouches[0].pageY - startY;\n } else if (e.targetTouches.length > 1) {\n return;\n }\n var lastTf = $chart.css('transform');\n if (lastTf === 'none') {\n if (lastTf.indexOf('3d') === -1) {\n $chart.css('transform', 'matrix(1, 0, 0, 1, ' + newX + ', ' + newY + ')');\n } else {\n $chart.css('transform', 'matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, ' + newX + ', ' + newY + ', 0, 1)');\n }\n } else {\n var matrix = lastTf.split(',');\n if (lastTf.indexOf('3d') === -1) {\n matrix[4] = ' ' + newX;\n matrix[5] = ' ' + newY + ')';\n } else {\n matrix[12] = ' ' + newX;\n matrix[13] = ' ' + newY;\n }\n $chart.css('transform', matrix.join(','));\n }\n });\n },\n //\n panEndHandler: function (e) {\n if (e.data.chart.data('panning')) {\n e.data.chart.data('panning', false).css('cursor', 'default').off('mousemove');\n }\n },\n //\n bindPan: function () {\n this.$chartContainer.css('overflow', 'hidden');\n this.$chart.on('mousedown touchstart', this.panStartHandler);\n $(document).on('mouseup touchend', { 'chart': this.$chart }, this.panEndHandler);\n },\n //\n unbindPan: function () {\n this.$chartContainer.css('overflow', 'auto');\n this.$chart.off('mousedown touchstart', this.panStartHandler);\n $(document).off('mouseup touchend', this.panEndHandler);\n },\n //\n zoomWheelHandler: function (e) {\n var oc = e.data.oc;\n e.preventDefault();\n var newScale = 1 + (e.originalEvent.deltaY > 0 ? -0.2 : 0.2);\n oc.setChartScale(oc.$chart, newScale);\n },\n //\n zoomStartHandler: function (e) {\n if(e.touches && e.touches.length === 2) {\n var oc = e.data.oc;\n oc.$chart.data('pinching', true);\n var dist = oc.getPinchDist(e);\n oc.$chart.data('pinchDistStart', dist);\n }\n },\n zoomingHandler: function (e) {\n var oc = e.data.oc;\n if(oc.$chart.data('pinching')) {\n var dist = oc.getPinchDist(e);\n oc.$chart.data('pinchDistEnd', dist);\n }\n },\n zoomEndHandler: function (e) {\n var oc = e.data.oc;\n if(oc.$chart.data('pinching')) {\n oc.$chart.data('pinching', false);\n var diff = oc.$chart.data('pinchDistEnd') - oc.$chart.data('pinchDistStart');\n if (diff > 0) {\n oc.setChartScale(oc.$chart, 1.2);\n } else if (diff < 0) {\n oc.setChartScale(oc.$chart, 0.8);\n }\n }\n },\n //\n bindZoom: function () {\n this.$chartContainer.on('wheel', { 'oc': this }, this.zoomWheelHandler);\n this.$chartContainer.on('touchstart', { 'oc': this }, this.zoomStartHandler);\n $(document).on('touchmove', { 'oc': this }, this.zoomingHandler);\n $(document).on('touchend', { 'oc': this }, this.zoomEndHandler);\n },\n unbindZoom: function () {\n this.$chartContainer.off('wheel', this.zoomWheelHandler);\n this.$chartContainer.off('touchstart', this.zoomStartHandler);\n $(document).off('touchmove', this.zoomingHandler);\n $(document).off('touchend', this.zoomEndHandler);\n },\n //\n getPinchDist: function (e) {\n return Math.sqrt((e.touches[0].clientX - e.touches[1].clientX) * (e.touches[0].clientX - e.touches[1].clientX) +\n (e.touches[0].clientY - e.touches[1].clientY) * (e.touches[0].clientY - e.touches[1].clientY));\n },\n //\n setChartScale: function ($chart, newScale) {\n var opts = $chart.data('options');\n var lastTf = $chart.css('transform');\n var matrix = '';\n var targetScale = 1;\n if (lastTf === 'none') {\n $chart.css('transform', 'scale(' + newScale + ',' + newScale + ')');\n } else {\n matrix = lastTf.split(',');\n if (lastTf.indexOf('3d') === -1) {\n targetScale = Math.abs(window.parseFloat(matrix[3]) * newScale);\n if (targetScale > opts.zoomoutLimit && targetScale < opts.zoominLimit) {\n $chart.css('transform', lastTf + ' scale(' + newScale + ',' + newScale + ')');\n }\n } else {\n targetScale = Math.abs(window.parseFloat(matrix[1]) * newScale);\n if (targetScale > opts.zoomoutLimit && targetScale < opts.zoominLimit) {\n $chart.css('transform', lastTf + ' scale3d(' + newScale + ',' + newScale + ', 1)');\n }\n }\n }\n },\n //\n buildJsonDS: function ($li) {\n var that = this;\n var subObj = {\n 'name': $li.contents().eq(0).text().trim(),\n 'relationship': ($li.parent().parent().is('li') ? '1': '0') + ($li.siblings('li').length ? 1: 0) + ($li.children('ul').length ? 1 : 0)\n };\n $.each($li.data(), function(key, value) {\n subObj[key] = value;\n });\n $li.children('ul').children().each(function() {\n if (!subObj.children) { subObj.children = []; }\n subObj.children.push(that.buildJsonDS($(this)));\n });\n return subObj;\n },\n //\n attachRel: function (data, flags) {\n var that = this;\n data.relationship = flags + (data.children && data.children.length > 0 ? 1 : 0);\n if (data.children) {\n data.children.forEach(function(item) {\n if (data.isHybrid || data.isVertical) {\n item.isVertical = true;\n }\n that.attachRel(item, '1' + (data.children.length > 1 ? 1 : 0));\n });\n }\n return data;\n },\n //\n loopChart: function ($chart, includeNodeData) {\n includeNodeData = (includeNodeData !== null && includeNodeData !== undefined) ? includeNodeData : false;\n var that = this;\n var $node = $chart.find('.node:first');\n var subObj = { 'id': $node[0].id };\n if (includeNodeData) {\n $.each($node.data('nodeData'), function (key, value) {\n subObj[key] = value;\n });\n }\n $node.siblings('.nodes').children().each(function() {\n if (!subObj.children) { subObj.children = []; }\n subObj.children.push(that.loopChart($(this), includeNodeData));\n });\n return subObj;\n },\n //\n getHierarchy: function (includeNodeData) {\n includeNodeData = (includeNodeData !== null && includeNodeData !== undefined) ? includeNodeData : false;\n if (typeof this.$chart === 'undefined') {\n return 'Error: orgchart does not exist'\n } else {\n if (!this.$chart.find('.node').length) {\n return 'Error: nodes do not exist'\n } else {\n var valid = true;\n this.$chart.find('.node').each(function () {\n if (!this.id) {\n valid = false;\n return false;\n }\n });\n if (!valid) {\n return 'Error: All nodes of orghcart to be exported must have data-id attribute!';\n }\n }\n }\n return this.loopChart(this.$chart, includeNodeData);\n },\n // detect the exist/display state of related node\n getNodeState: function ($node, relation) {\n var $target = {};\n var isVerticalNode = !!$node.closest('vertical').length;\n var relation = relation || 'self';\n if (relation === 'parent') {\n if (isVerticalNode) {\n $target = $node.closest('ul').parents('ul');\n if (!$target.length) {\n $target = $node.closest('.nodes');\n if (!$target.length) {\n $target = $node.closest('.vertical').siblings(':first');\n }\n }\n } else {\n $target = $node.closest('.nodes').siblings('.node');\n }\n if ($target.length) {\n if ($target.is('.hidden') || (!$target.is('.hidden') && $target.closest('.nodes').is('.hidden')) || (!$target.is('.hidden') && $target.closest('.vertical').is('.hidden'))) {\n return { 'exist': true, 'visible': false };\n }\n return { 'exist': true, 'visible': true };\n }\n } else if (relation === 'children') {\n $target = isVerticalNode ? $node.parent().children('ul') : $node.siblings('.nodes');\n if ($target.length) {\n if (!$target.is('.hidden')) {\n return { 'exist': true, 'visible': true };\n }\n return { 'exist': true, 'visible': false };\n }\n } else if (relation === 'siblings') {\n $target = isVerticalNode ? $node.closest('ul') : $node.parent().siblings();\n if ($target.length && (!isVerticalNode || $target.children('li').length > 1)) {\n if (!$target.is('.hidden') && !$target.parent().is('.hidden') && (!isVerticalNode || !$target.closest('.vertical').is('.hidden'))) {\n return { 'exist': true, 'visible': true };\n }\n return { 'exist': true, 'visible': false };\n }\n } else {\n $target = $node;\n if ($target.length) {\n if (!(($target.closest('.nodes').length && $target.closest('.nodes').is('.hidden')) ||\n ($target.closest('.hierarchy').length && $target.closest('.hierarchy').is('.hidden')) ||\n ($target.closest('.vertical').length && ($target.closest('.nodes').is('.hidden') || $target.closest('.vertical').is('.hidden')))\n )) {\n return { 'exist': true, 'visible': true };\n }\n return { 'exist': true, 'visible': false };\n }\n }\n return { 'exist': false, 'visible': false };\n },\n getParent: function ($node) {\n return this.getRelatedNodes($node, 'parent');\n },\n getChildren: function ($node) {\n return this.getRelatedNodes($node, 'children');\n },\n getSiblings: function ($node) {\n return this.getRelatedNodes($node, 'siblings');\n },\n // find the related nodes\n getRelatedNodes: function ($node, relation) {\n if (!$node || !($node instanceof $) || !$node.is('.node')) {\n return $();\n }\n if (relation === 'parent') {\n return $node.closest('.nodes').siblings('.node');\n } else if (relation === 'children') {\n return $node.siblings('.nodes').children('.hierarchy').find('.node:first');\n } else if (relation === 'siblings') {\n return $node.closest('.hierarchy').siblings().find('.node:first');\n } else {\n return $();\n }\n },\n hideParentEnd: function (event) {\n $(event.target).removeClass('sliding');\n event.data.parent.addClass('hidden');\n },\n // recursively hide the ancestor node and sibling nodes of the specified node\n hideParent: function ($node) {\n var $parent = $node.closest('.nodes').siblings('.node');\n if ($parent.find('.spinner').length) {\n $node.closest('.orgchart').data('inAjax', false);\n }\n // hide the sibling nodes\n if (this.getNodeState($node, 'siblings').visible) {\n this.hideSiblings($node);\n }\n // hide the lines\n $node.parent().addClass('isAncestorsCollapsed');\n // hide the superior nodes with transition\n if (this.getNodeState($parent).visible) {\n $parent.addClass('sliding slide-down').one('transitionend', { 'parent': $parent }, this.hideParentEnd);\n }\n // if the current node has the parent node, hide it recursively\n if (this.getNodeState($parent, 'parent').visible) {\n this.hideParent($parent);\n }\n },\n showParentEnd: function (event) {\n var $node = event.data.node;\n $(event.target).removeClass('sliding');\n if (this.isInAction($node)) {\n this.switchVerticalArrow($node.children('.topEdge'));\n }\n },\n // show the parent node of the specified node\n showParent: function ($node) {\n // just show only one superior level\n var $parent = $node.closest('.nodes').siblings('.node').removeClass('hidden');\n // just show only one line\n $node.closest('.hierarchy').removeClass('isAncestorsCollapsed');\n // show parent node with animation\n this.repaint($parent[0]);\n $parent.addClass('sliding').removeClass('slide-down').one('transitionend', { 'node': $node }, this.showParentEnd.bind(this));\n },\n stopAjax: function ($nodeLevel) {\n if ($nodeLevel.find('.spinner').length) {\n $nodeLevel.closest('.orgchart').data('inAjax', false);\n }\n },\n isVisibleNode: function (index, elem) {\n return this.getNodeState($(elem)).visible;\n },\n // do some necessary cleanup tasks when hide animation is finished\n hideChildrenEnd: function (event) {\n var $node = event.data.node;\n event.data.animatedNodes.removeClass('sliding');\n event.data.animatedNodes.closest('.nodes').addClass('hidden');\n if (this.isInAction($node)) {\n this.switchVerticalArrow($node.children('.bottomEdge'));\n }\n },\n // recursively hide the descendant nodes of the specified node\n hideChildren: function ($node) {\n $node.closest('.hierarchy').addClass('isChildrenCollapsed');\n var $lowerLevel = $node.siblings('.nodes');\n this.stopAjax($lowerLevel);\n var $animatedNodes = $lowerLevel.find('.node').filter(this.isVisibleNode.bind(this));\n var isVerticalDesc = $lowerLevel.is('.vertical');\n if (!isVerticalDesc) {\n $animatedNodes.closest('.hierarchy').addClass('isCollapsedDescendant');\n }\n if ($lowerLevel.is('.vertical') || $lowerLevel.find('.vertical').length) {\n $animatedNodes.find('.oci-minus-square').removeClass('oci-minus-square').addClass('oci-plus-square');\n }\n this.repaint($animatedNodes.get(0));\n $animatedNodes.addClass('sliding slide-up').eq(0).one('transitionend', { 'animatedNodes': $animatedNodes, 'lowerLevel': $lowerLevel, 'node': $node }, this.hideChildrenEnd.bind(this));\n },\n //\n showChildrenEnd: function (event) {\n var $node = event.data.node;\n event.data.animatedNodes.removeClass('sliding');\n if (this.isInAction($node)) {\n this.switchVerticalArrow($node.children('.bottomEdge'));\n }\n },\n // show the children nodes of the specified node\n showChildren: function ($node) {\n var that = this;\n $node.closest('.hierarchy').removeClass('isChildrenCollapsed');\n var $levels = $node.siblings('.nodes');\n var isVerticalDesc = $levels.is('.vertical');\n var $animatedNodes = isVerticalDesc\n ? $levels.removeClass('hidden').find('.node').filter(this.isVisibleNode.bind(this))\n : $levels.removeClass('hidden').children('.hierarchy').find('.node:first').filter(this.isVisibleNode.bind(this));\n if (!isVerticalDesc) {\n $animatedNodes.filter(':not(:only-child)').closest('.hierarchy').addClass('isChildrenCollapsed');\n $animatedNodes.closest('.hierarchy').removeClass('isCollapsedDescendant');\n }\n // the two following statements are used to enforce browser to repaint\n this.repaint($animatedNodes.get(0));\n $animatedNodes.addClass('sliding').removeClass('slide-up').eq(0).one('transitionend', { 'node': $node, 'animatedNodes': $animatedNodes }, this.showChildrenEnd.bind(this));\n },\n //\n hideSiblingsEnd: function (event) {\n var $node = event.data.node;\n var $nodeContainer = event.data.nodeContainer;\n var direction = event.data.direction;\n var $siblings = direction ? (direction === 'left' ? $nodeContainer.prevAll(':not(.hidden)') : $nodeContainer.nextAll(':not(.hidden)')) : $nodeContainer.siblings();\n event.data.animatedNodes.removeClass('sliding');\n $siblings.find('.node:gt(0)').filter(this.isVisibleNode.bind(this))\n .removeClass('slide-left slide-right').addClass('slide-up');\n $siblings.find('.nodes, .vertical').addClass('hidden')\n .end().addClass('hidden');\n\n if (this.isInAction($node)) {\n this.switchHorizontalArrow($node);\n }\n },\n // hide the sibling nodes of the specified node\n hideSiblings: function ($node, direction) {\n var that = this;\n var $nodeContainer = $node.closest('.hierarchy').addClass('isSiblingsCollapsed');\n if ($nodeContainer.siblings().find('.spinner').length) {\n $node.closest('.orgchart').data('inAjax', false);\n }\n if (direction) {\n if (direction === 'left') {\n $nodeContainer.addClass('left-sibs')\n .prevAll('.isSiblingsCollapsed').removeClass('isSiblingsCollapsed left-sibs').end()\n .prevAll().addClass('isCollapsedSibling isChildrenCollapsed')\n .find('.node').filter(this.isVisibleNode.bind(this)).addClass('sliding slide-right');\n } else {\n $nodeContainer.addClass('right-sibs')\n .nextAll('.isSiblingsCollapsed').removeClass('isSiblingsCollapsed right-sibs').end()\n .nextAll().addClass('isCollapsedSibling isChildrenCollapsed')\n .find('.node').filter(this.isVisibleNode.bind(this)).addClass('sliding slide-left');\n }\n } else {\n $nodeContainer.prevAll().find('.node').filter(this.isVisibleNode.bind(this)).addClass('sliding slide-right');\n $nodeContainer.nextAll().find('.node').filter(this.isVisibleNode.bind(this)).addClass('sliding slide-left');\n $nodeContainer.siblings().addClass('isCollapsedSibling isChildrenCollapsed');\n }\n var $animatedNodes = $nodeContainer.siblings().find('.sliding');\n $animatedNodes.eq(0).one('transitionend', { 'node': $node, 'nodeContainer': $nodeContainer, 'direction': direction, 'animatedNodes': $animatedNodes }, this.hideSiblingsEnd.bind(this));\n },\n //\n showSiblingsEnd: function (event) {\n var $node = event.data.node;\n event.data.visibleNodes.removeClass('sliding');\n if (this.isInAction($node)) {\n this.switchHorizontalArrow($node);\n $node.children('.topEdge').removeClass('oci-chevron-up').addClass('oci-chevron-down');\n }\n },\n //\n showRelatedParentEnd: function(event) {\n $(event.target).removeClass('sliding');\n },\n // show the sibling nodes of the specified node\n showSiblings: function ($node, direction) {\n var that = this;\n // firstly, show the sibling nodes\n var $siblings = $();\n var $nodeContainer = $node.closest('.hierarchy');\n if (direction) {\n if (direction === 'left') {\n $siblings = $nodeContainer.prevAll().removeClass('hidden');\n } else {\n $siblings = $nodeContainer.nextAll().removeClass('hidden');\n }\n } else {\n $siblings = $node.closest('.hierarchy').siblings().removeClass('hidden');\n }\n // secondly, show the lines\n var $upperLevel = $node.closest('.nodes').siblings('.node');\n if (direction) {\n $nodeContainer.removeClass(direction + '-sibs');\n if (!$nodeContainer.is('[class*=-sibs]')) {\n $nodeContainer.removeClass('isSiblingsCollapsed');\n }\n $siblings.removeClass('isCollapsedSibling ' + direction + '-sibs');\n } else {\n $node.closest('.hierarchy').removeClass('isSiblingsCollapsed');\n $siblings.removeClass('isCollapsedSibling');\n }\n // thirdly, show parent node if it is collapsed\n if (!this.getNodeState($node, 'parent').visible) {\n $node.closest('.hierarchy').removeClass('isAncestorsCollapsed');\n $upperLevel.removeClass('hidden');\n this.repaint($upperLevel[0]);\n $upperLevel.addClass('sliding').removeClass('slide-down').one('transitionend', this.showRelatedParentEnd);\n }\n // lastly, show the sibling nodes with animation\n var $visibleNodes = $siblings.find('.node').filter(this.isVisibleNode.bind(this));\n this.repaint($visibleNodes.get(0));\n $visibleNodes.addClass('sliding').removeClass('slide-left slide-right');\n $visibleNodes.eq(0).one('transitionend', { 'node': $node, 'visibleNodes': $visibleNodes }, this.showSiblingsEnd.bind(this));\n },\n // start up loading status for requesting new nodes\n startLoading: function ($edge) {\n var $chart = this.$chart;\n if (typeof $chart.data('inAjax') !== 'undefined' && $chart.data('inAjax') === true) {\n return false;\n }\n\n $edge.addClass('hidden');\n $edge.parent().append('<i class=\"oci oci-spinner spinner\"></i>')\n .children().not('.spinner').css('opacity', 0.2);\n $chart.data('inAjax', true);\n $('.oc-export-btn').prop('disabled', true);\n return true;\n },\n // terminate loading status for requesting new nodes\n endLoading: function ($edge) {\n var $node = $edge.parent();\n $edge.removeClass('hidden');\n $node.find('.spinner').remove();\n $node.children().removeAttr('style');\n this.$chart.data('inAjax', false);\n $('.oc-export-btn').prop('disabled', false);\n },\n // whether the cursor is hovering over the node\n isInAction: function ($node) {\n return $node.children('.edge').attr('class').indexOf('oci-') > -1 ? true : false;\n },\n //\n switchVerticalArrow: function ($arrow) {\n $arrow.toggleClass('oci-chevron-up').toggleClass('oci-chevron-down');\n },\n //\n switchHorizontalArrow: function ($node) {\n var opts = this.options;\n if (opts.toggleSiblingsResp && (typeof opts.ajaxURL === 'undefined' || $node.closest('.nodes').data('siblingsLoaded'))) {\n var $prevSib = $node.parent().prev();\n if ($prevSib.length) {\n if ($prevSib.is('.hidden')) {\n $node.children('.leftEdge').addClass('oci-chevron-left').removeClass('oci-chevron-right');\n } else {\n $node.children('.leftEdge').addClass('oci-chevron-right').removeClass('oci-chevron-left');\n }\n }\n var $nextSib = $node.parent().next();\n if ($nextSib.length) {\n if ($nextSib.is('.hidden')) {\n $node.children('.rightEdge').addClass('oci-chevron-right').removeClass('oci-chevron-left');\n } else {\n $node.children('.rightEdge').addClass('oci-chevron-left').removeClass('oci-chevron-right');\n }\n }\n } else {\n var $sibs = $node.parent().siblings();\n var sibsVisible = $sibs.length ? !$sibs.is('.hidden') : false;\n $node.children('.leftEdge').toggleClass('oci-chevron-right', sibsVisible).toggleClass('oci-chevron-left', !sibsVisible);\n $node.children('.rightEdge').toggleClass('oci-chevron-left', sibsVisible).toggleClass('oci-chevron-right', !sibsVisible);\n }\n },\n //\n repaint: function (node) {\n if (node) {\n node.style.offsetWidth = node.offsetWidth;\n }\n },\n // determines how to show arrow buttons \n nodeEnterLeaveHandler: function (event) {\n var $node = $(event.delegateTarget);\n var flag = false;\n if ($node.closest('.nodes.vertical').length) {\n var $toggleBtn = $node.children('.toggleBtn');\n if (event.type === 'mouseenter') {\n if ($node.children('.toggleBtn').length) {\n flag = this.getNodeState($node, 'children').visible;\n $toggleBtn.toggleClass('oci-plus-square', !flag).toggleClass('oci-minus-square', flag);\n }\n } else {\n $toggleBtn.removeClass('oci-plus-square oci-minus-square');\n }\n } else {\n var $topEdge = $node.children('.topEdge');\n var $rightEdge = $node.children('.rightEdge');\n var $bottomEdge = $node.children('.bottomEdge');\n var $leftEdge = $node.children('.leftEdge');\n if (event.type === 'mouseenter') {\n if ($topEdge.length) {\n flag = this.getNodeState($node, 'parent').visible;\n $topEdge.toggleClass('oci-chevron-up', !flag).toggleClass('oci-chevron-down', flag);\n }\n if ($bottomEdge.length) {\n flag = this.getNodeState($node, 'children').visible;\n $bottomEdge.toggleClass('oci-chevron-down', !flag).toggleClass('oci-chevron-up', flag);\n }\n if ($leftEdge.length) {\n this.switchHorizontalArrow($node);\n }\n } else {\n $node.children('.edge').removeClass('oci-chevron-up oci-chevron-down oci-chevron-right oci-chevron-left');\n }\n }\n },\n //\n nodeClickHandler: function (event) {\n this.$chart.find('.focused').removeClass('focused');\n $(event.delegateTarget).addClass('focused');\n },\n // load new nodes by ajax\n loadNodes: function (rel, url, $edge) {\n var that = this;\n var opts = this.options;\n $.ajax({ 'url': url, 'dataType': 'json' })\n .done(function (data) {\n if (that.$chart.data('inAjax')) {\n if (rel === 'parent') {\n if (!$.isEmptyObject(data)) {\n that.addParent($edge.parent(), data);\n }\n } else if (rel === 'children') {\n if (data.children.length) {\n that.addChildren($edge.parent(), data[rel]);\n }\n } else {\n that.addSiblings($edge.parent(), data.siblings ? data.siblings : data);\n }\n that.triggerLoadEvent($edge.parent(), rel);\n }\n })\n .fail(function () {\n console.log('Failed to get ' + rel + ' data');\n })\n .always(function () {\n that.endLoading($edge);\n });\n },\n //\n HideFirstParentEnd: function (event) {\n var $topEdge = event.data.topEdge;\n var $node = $topEdge.parent();\n if (this.isInAction($node)) {\n this.switchVerticalArrow($topEdge);\n this.switchHorizontalArrow($node);\n }\n },\n // actions on clinking top edge of a node\n topEdgeClickHandler: function (event) {\n event.stopPropagation();\n var that = this;\n var $topEdge = $(event.target);\n var $node = $(event.delegateTarget);\n var parentState = this.getNodeState($node, 'parent');\n if (parentState.exist) {\n var $parent = $node.closest('.nodes').siblings('.node');\n if ($parent.is('.sliding')) { return; }\n // hide the ancestor nodes and sibling nodes of the specified node\n if (parentState.visible) {\n this.hideParent($node);\n $parent.one('transitionend', { 'topEdge': $topEdge }, this.HideFirstParentEnd.bind(this));\n this.triggerHideEvent($node, 'parent');\n } else { // show the ancestors and siblings\n this.showParent($node);\n this.triggerShowEvent($node, 'parent');\n }\n } else { // load the new parent node of the specified node by ajax request\n // start up loading status\n if (this.startLoading($topEdge)) {\n var opts = this.options;\n var url = $.isFunction(opts.ajaxURL.parent) ? opts.ajaxURL.parent($node.data('nodeData')) : opts.ajaxURL.parent + $node[0].id;\n this.loadNodes('parent', url, $topEdge);\n }\n }\n },\n // actions on clinking bottom edge of a node\n bottomEdgeClickHandler: function (event) {\n event.stopPropagation();\n var $bottomEdge = $(event.target);\n var $node = $(event.delegateTarget);\n var childrenState = this.getNodeState($node, 'children');\n if (childrenState.exist) {\n var $children = $node.siblings('.nodes').children().children('.node');\n if ($children.is('.sliding')) { return; }\n // hide the descendant nodes of the specified node\n if (childrenState.visible) {\n this.hideChildren($node);\n this.triggerHideEvent($node, 'children');\n } else { // show the descendants\n this.showChildren($node);\n this.triggerShowEvent($node, 'children');\n }\n } else { // load the new children nodes of the specified node by ajax request\n if (this.startLoading($bottomEdge)) {\n var opts = this.options;\n var url = $.isFunction(opts.ajaxURL.children) ? opts.ajaxURL.children($node.data('nodeData')) : opts.ajaxURL.children + $node[0].id;\n this.loadNodes('children', url, $bottomEdge);\n }\n }\n },\n // actions on clicking horizontal edges\n hEdgeClickHandler: function (event) {\n event.stopPropagation();\n var $hEdge = $(event.target);\n var $node = $(event.delegateTarget);\n var opts = this.options;\n var siblingsState = this.getNodeState($node, 'siblings');\n if (siblingsState.exist) {\n var $siblings = $node.closest('.hierarchy').siblings();\n if ($siblings.find('.sliding').length) { return; }\n if (opts.toggleSiblingsResp) {\n var $prevSib = $node.closest('.hierarchy').prev();\n var $nextSib = $node.closest('.hierarchy').next();\n if ($hEdge.is('.leftEdge')) {\n if ($prevSib.is('.hidden')) {\n this.showSiblings($node, 'left');\n this.triggerShowEvent($node,'siblings');\n } else {\n this.hideSiblings($node, 'left');\n this.triggerHideEvent($node, 'siblings');\n }\n } else {\n if ($nextSib.is('.hidden')) {\n this.showSiblings($node, 'right');\n this.triggerShowEvent($node,'siblings');\n } else {\n this.hideSiblings($node, 'right');\n this.triggerHideEvent($node, 'siblings');\n }\n }\n } else {\n if (siblingsState.visible) {\n this.hideSiblings($node);\n this.triggerHideEvent($node, 'siblings');\n } else {\n this.showSiblings($node);\n this.triggerShowEvent($node, 'siblings');\n }\n }\n } else {\n // load the new sibling nodes of the specified node by ajax request\n if (this.startLoading($hEdge)) {\n var nodeId = $node[0].id;\n var url = (this.getNodeState($node, 'parent').exist) ?\n ($.isFunction(opts.ajaxURL.siblings) ? opts.ajaxURL.siblings($node.data('nodeData')) : opts.ajaxURL.siblings + nodeId) :\n ($.isFunction(opts.ajaxURL.families) ? opts.ajaxURL.families($node.data('nodeData')) : opts.ajaxURL.families + nodeId);\n this.loadNodes('siblings', url, $hEdge);\n }\n }\n },\n //\n expandVNodesEnd: function (event) {\n event.data.vNodes.removeClass('sliding');\n },\n //\n collapseVNodesEnd: function (event) {\n event.data.vNodes.removeClass('sliding').closest('ul').addClass('hidden');\n },\n // event handler for toggle buttons in Hybrid(horizontal + vertical) OrgChart\n toggleVNodes: function (event) {\n var $toggleBtn = $(event.target);\n var $descWrapper = $toggleBtn.parent().next();\n var $descendants = $descWrapper.find('.node');\n var $children = $descWrapper.children().children('.node');\n if ($children.is('.sliding')) { return; }\n $toggleBtn.toggleClass('oci-plus-square oci-minus-square');\n if ($descendants.eq(0).is('.slide-up')) {\n $descWrapper.removeClass('hidden');\n this.repaint($children.get(0));\n $children.addClass('sliding').removeClass('slide-up').eq(0).one('transitionend', { 'vNodes': $children }, this.expandVNodesEnd);\n } else {\n $descendants.addClass('sliding slide-up').eq(0).one('transitionend', { 'vNodes': $descendants }, this.collapseVNodesEnd);\n $descendants.find('.toggleBtn').removeClass('oci-minus-square oci-plus-square');\n }\n },\n //\n createGhostNode: function (event) {\n var $nodeDiv = $(event.target);\n var opts = this.options;\n var origEvent = event.originalEvent;\n var isFirefox = /firefox/.test(window.navigator.userAgent.toLowerCase());\n var ghostNode, nodeCover;\n if (!document.querySelector('.ghost-node')) {\n ghostNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n if (!ghostNode.classList) return;\n ghostNode.classList.add('ghost-node');\n nodeCover = document.createElementNS('http://www.w3.org/2000/svg','rect');\n ghostNode.appendChild(nodeCover);\n $nodeDiv.closest('.orgchart').append(ghostNode);\n } else {\n ghostNode = $nodeDiv.closest('.orgchart').children('.ghost-node').get(0);\n nodeCover = $(ghostNode).children().get(0);\n }\n var transValues = $nodeDiv.closest('.orgchart').css('transform').split(',');\n var isHorizontal = opts.direction === 't2b' || opts.direction === 'b2t';\n var scale = Math.abs(window.parseFloat(isHorizontal ? transValues[0].slice(transValues[0].indexOf('(') + 1) : transValues[1]));\n ghostNode.setAttribute('width', isHorizontal ? $nodeDiv.outerWidth(false) : $nodeDiv.outerHeight(false));\n ghostNode.setAttribute('height', isHorizontal ? $nodeDiv.outerHeight(false) : $nodeDiv.outerWidth(false));\n nodeCover.setAttribute('x',5 * scale);\n nodeCover.setAttribute('y',5 * scale);\n nodeCover.setAttribute('width', 120 * scale);\n nodeCover.setAttribute('height', 40 * scale);\n nodeCover.setAttribute('rx', 4 * scale);\n nodeCover.setAttribute('ry', 4 * scale);\n nodeCover.setAttribute('stroke-width', 1 * scale);\n var xOffset = origEvent.offsetX * scale;\n var yOffset = origEvent.offsetY * scale;\n if (opts.direction === 'l2r') {\n xOffset = origEvent.offsetY * scale;\n yOffset = origEvent.offsetX * scale;\n } else if (opts.direction === 'r2l') {\n xOffset = $nodeDiv.outerWidth(false) - origEvent.offsetY * scale;\n yOffset = origEvent.offsetX * scale;\n } else if (opts.direction === 'b2t') {\n xOffset = $nodeDiv.outerWidth(false) - origEvent.offsetX * scale;\n yOffset = $nodeDiv.outerHeight(false) - origEvent.offsetY * scale;\n }\n if (isFirefox) { // hack for old version of Firefox(< 48.0)\n nodeCover.setAttribute('fill', 'rgb(255, 255, 255)');\n nodeCover.setAttribute('stroke', 'rgb(191, 0, 0)');\n var ghostNodeWrapper = document.createElement('img');\n ghostNodeWrapper.src = 'data:image/svg+xml;utf8,' + (new XMLSerializer()).serializeToString(ghostNode);\n origEvent.dataTransfer.setDragImage(ghostNodeWrapper, xOffset, yOffset);\n } else {\n // IE/Edge do not support this, so only use it if we can\n if (origEvent.dataTransfer.setDragImage)\n origEvent.dataTransfer.setDragImage(ghostNode, xOffset, yOffset);\n }\n },\n // get the level amount of a hierachy\n getUpperLevel: function ($node) {\n if (!$node.is('.node')) {\n return 0;\n }\n return $node.parents('.hierarchy').length;\n },\n // get the level amount of a hierachy\n getLowerLevel: function ($node) {\n if (!$node.is('.node')) {\n return 0;\n }\n return $node.closest('.hierarchy').find('.nodes').length + 1;\n },\n // get nodes in level order traversal\n getLevelOrderNodes: function ($root) {\n if(!$root) return [];\n var queue = [];\n var output = [];\n queue.push($root);\n while(queue.length) {\n var row = [];\n for(var i = 0; i < queue.length; i++) {\n var cur = queue.shift();\n var children = this.getChildren(cur);\n if(children.length) {\n queue.push(children.toArray().flat());\n }\n row.push($(cur));\n }\n output.push(row);\n }\n return output;\n },\n //\n filterAllowedDropNodes: function ($dragged) {\n var opts = this.options;\n // what is being dragged? a node, or something within a node?\n var draggingNode = $dragged.closest('[draggable]').hasClass('node');\n var $dragZone = $dragged.closest('.nodes').siblings('.node'); // parent node\n var $dragHier = $dragged.closest('.hierarchy').find('.node'); // this node, and its children\n this.$chart.data('dragged', $dragged)\n .find('.node').each(function (index, node) {\n if (!draggingNode || $dragHier.index(node) === -1) {\n if (opts.dropCriteria) {\n if (opts.dropCriteria($dragged, $dragZone, $(node))) {\n $(node).addClass('allowedDrop');\n }\n } else {\n $(node).addClass('allowedDrop');\n }\n }\n });\n },\n //\n dragstartHandler: function (event) {\n event.originalEvent.dataTransfer.setData('text/html', 'hack for firefox');\n // if users enable zoom or direction options\n if (this.$chart.css('transform') !== 'none') {\n this.createGhostNode(event);\n }\n this.filterAllowedDropNodes($(event.target));\n },\n //\n dragoverHandler: function (event) {\n if (!$(event.delegateTarget).is('.allowedDrop')) {\n event.originalEvent.dataTransfer.dropEffect = 'none';\n } else {\n // default action for drag-and-drop of div is not to drop, so preventing default action for nodes which have allowedDrop class\n //to fix drag and drop on IE and Edge\n event.preventDefault();\n }\n },\n //\n dragendHandler: function (event) {\n this.$chart.find('.allowedDrop').removeClass('allowedDrop');\n },\n // when user drops the node, it will be removed from original parent node and be added to new parent node\n dropHandler: async function (event) {\n var that = this;\n var $dropZone = $(event.delegateTarget);\n var $dragged = this.$chart.data('dragged');\n\n // Pass on drops which are not nodes (since they are not our doing)\n if (!$dragged.hasClass('node')) {\n this.$chart.triggerHandler({ 'type': 'otherdropped.orgchart', 'draggedItem': $dragged, 'dropZone': $dropZone });\n return;\n }\n\n if (!$dropZone.hasClass('allowedDrop')) {\n // We are trying to drop a node into a node which isn't allowed\n // IE/Edge have a habit of allowing this, so we need our own double-check\n return;\n }\n\n var $dragZone = $dragged.closest('.nodes').siblings('.node');\n var dropEvent = $.Event('nodedrop.orgchart');\n this.$chart.trigger(dropEvent, { 'draggedNode': $dragged, 'dragZone': $dragZone, 'dropZone': $dropZone });\n if (dropEvent.isDefaultPrevented()) {\n return;\n }\n // special process for hybrid chart\n var datasource = this.$chart.data('options').data;\n var digger = new JSONDigger(datasource, this.$chart.data('options').nodeId, 'children');\n const hybridNode = digger.findOneNode({ 'isHybrid': true });\n if (this.$chart.data('options').verticalLevel > 1 || hybridNode) {\n var draggedNode = digger.findNodeById($dragged.data('nodeData').id);\n var copy = Object.assign({}, draggedNode);\n digger.removeNode(draggedNode.id);\n var dropNode = digger.findNodeById($dropZone.data('nodeData').id);\n if (dropNode.children) {\n dropNode.children.push(copy);\n } else {\n dropNode.children = [copy];\n }\n that.init({ 'data': datasource });\n } else {\n // The folowing code snippets are used to process horizontal chart\n // firstly, deal with the hierarchy of drop zone\n if (!$dropZone.siblings('.nodes').length) { // if the drop zone is a leaf node\n $dropZone.append('<i class=\"edge verticalEdge bottomEdge oci\"></i>')\n .after('<ul class=\"nodes\"></ul>')\n .siblings('.nodes').append($dragged.find('.horizontalEdge').remove().end().closest('.hierarchy'));\n if ($dropZone.children('.title').length) {\n $dropZone.children('.title').prepend('<i class=\"oci '+ this.$chart.data('options').parentNodeSymbol + ' symbol\"></i>');\n }\n } else {\n var horizontalEdges = '<i class=\"edge horizontalEdge rightEdge oci\"></i><i class=\"edge horizontalEdge leftEdge oci\"></i>';\n if (!$dragged.find('.horizontalEdge').length) {\n $dragged.append(horizontalEdges);\n }\n $dropZone.siblings('.nodes').append($dragged.closest('.hierarchy'));\n var $dropSibs = $dragged.closest('.hierarchy').siblings().find('.node:first');\n if ($dropSibs.length === 1) {\n $dropSibs.append(horizontalEdges);\n }\n }\n // secondly, deal with the hierarchy of dragged node\n if ($dragZone.siblings('.nodes').children('.hierarchy').length === 1) { // if there is only one sibling node left\n $dragZone.siblings('.nodes').children('.hierarchy').find('.node:first')\n .find('.horizontalEdge').remove();\n } else if ($dragZone.siblings('.nodes').children('.hierarchy').length === 0) {\n $dragZone.find('.bottomEdge, .symbol').remove()\n .end().siblings('.nodes').remove();\n }\n }\n },\n //\n touchstartHandler: function (event) {\n if (this.touchHandled)\n return;\n\n if (event.touches && event.touches.length > 1)\n return;\n\n this.touchHandled = true;\n this.touchMoved = false; // this is so we can work out later if this was a 'press' or a 'drag' touch\n event.preventDefault();\n },\n //\n touchmoveHandler: function (event) {\n if (!this.touchHandled)\n return;\n\n if (event.touches && event.touches.length > 1)\n return;\n\n event.preventDefault();\n\n if (!this.touchMoved) {\n // we do not bother with createGhostNode (dragstart does) since the touch event does not have a dataTransfer property\n this.filterAllowedDropNodes($(event.currentTarget)); // will also set 'this.$chart.data('dragged')' for us\n // create an image which can be used to illustrate the drag (our own createGhostNode)\n this.touchDragImage = this.createDragImage(event, this.$chart.data('dragged')[0]);\n }\n this.touchMoved = true;\n\n // move our dragimage so it follows our finger\n this.moveDragImage(event, this.touchDragImage);\n\n var $touching = $(document.elementFromPoint(event.touches[0].clientX, event.touches[0].clientY));\n var $touchingNodes = $touching.closest('div.node');\n if ($touchingNodes.length > 0) {\n var touchingNodeElement = $touchingNodes[0];\n if ($touchingNodes.is('.allowedDrop')) {\n this.touchTargetNode = touchingNodeElement;\n }\n else {\n this.touchTargetNode = null;\n }\n }\n else {\n this.touchTargetNode = null;\n }\n },\n //\n touchendHandler: function (event) {\n if (!this.touchHandled) {\n return;\n }\n this.destroyDragImage();\n if (this.touchMoved) {\n // we've had movement, so this was a 'drag' touch\n if (this.touchTargetNode) {\n var fakeEventForDropHandler = { delegateTarget: this.touchTargetNode };\n this.dropHandler(fakeEventForDropHandler);\n this.touchTargetNode = null;\n }\n this.dragendHandler(event);\n }\n else {\n // we did not move, so this was a 'press' touch (fake a click)\n var firstTouch = event.changedTouches[0];\n var fakeMouseClickEvent = document.createEvent('MouseEvents');\n fakeMouseClickEvent.initMouseEvent('click', true, true, window, 1, firstTouch.screenX, firstTouch.screenY, firstTouch.clientX, firstTouch.clientY, event.ctrlKey, event.altKey, event.shiftKey, event.metaKey, 0, null);\n event.target.dispatchEvent(fakeMouseClickEvent);\n }\n this.touchHandled = false;\n },\n //\n createDragImage: function (event, source) {\n var dragImage = source.cloneNode(true);\n this.copyStyle(source, dragImage);\n dragImage.style.top = dragImage.style.left = '-9999px';\n var sourceRectangle = source.getBoundingClientRect();\n var sourcePoint = this.getTouchPoint(event);\n this.touchDragImageOffset = { x: sourcePoint.x - sourceRectangle.left, y: sourcePoint.y - sourceRectangle.top };\n dragImage.style.opacity = '0.5';\n document.body.appendChild(dragImage);\n return dragImage;\n },\n //\n destroyDragImage: function () {\n if (this.touchDragImage && this.touchDragImage.parentElement)\n this.touchDragImage.parentElement.removeChild(this.touchDragImage);\n this.touchDragImageOffset = null;\n this.touchDragImage = null;\n },\n //\n copyStyle: function (src, dst) {\n // remove potentially troublesome attributes\n var badAttributes = ['id', 'class', 'style', 'draggable'];\n badAttributes.forEach(function (att) {\n dst.removeAttribute(att);\n });\n // copy canvas content\n if (src instanceof HTMLCanvasElement) {\n var cSrc = src, cDst = dst;\n cDst.width = cSrc.width;\n cDst.height = cSrc.height;\n cDst.getContext('2d').drawImage(cSrc, 0, 0);\n }\n // copy style (without transitions)\n var cs = getComputedStyle(src);\n for (var i = 0; i < cs.length; i++) {\n var key = cs[i];\n if (key.indexOf('transition') < 0) {\n dst.style[key] = cs[key];\n }\n }\n dst.style.pointerEvents = 'none';\n // and repeat for all children\n for (var i = 0; i < src.children.length; i++) {\n this.copyStyle(src.children[i], dst.children[i]);\n }\n },\n //\n getTouchPoint: function (event) {\n if (event && event.touches) {\n event = event.touches[0];\n }\n return {\n x: event.clientX,\n y: event.clientY\n };\n },\n //\n moveDragImage: function (event, image) {\n if (!event || !image)\n return;\n var orgChartMaster = this;\n requestAnimationFrame(function () {\n var pt = orgChartMaster.getTouchPoint(event);\n var s = image.style;\n s.position = 'absolute';\n s.pointerEvents = 'none';\n s.zIndex = '999999';\n if (orgChartMaster.touchDragImageOffset) {\n s.left = Math.round(pt.x - orgChartMaster.touchDragImageOffset.x) + 'px';\n s.top = Math.round(pt.y - orgChartMaster.touchDragImageOffset.y) + 'px';\n }\n });\n },\n //\n bindDragDrop: function ($node) {\n $node.on('dragstart', this.dragstartHandler.bind(this))\n .on('dragover', this.dragoverHandler.bind(this))\n .on('dragend', this.dragendHandler.bind(this))\n .on('drop', this.dropHandler.bind(this))\n .on('touchstart', this.touchstartHandler.bind(this))\n .on('touchmove', this.touchmoveHandler.bind(this))\n .on('touchend', this.touchendHandler.bind(this));\n },\n // create node\n createNode: function (data) {\n var that = this;\n var opts = this.options;\n var level = data.level;\n if (data.children && data[opts.nodeId]) {\n $.each(data.children, function (index, child) {\n child.parentId = data[opts.nodeId]\n });\n }\n // construct the content of node\n var $nodeDiv = $('<div' + (opts.draggable ? ' draggable=\"true\"' : '') + (data[opts.nodeId] ? ' id=\"' + data[opts.nodeId] + '\"' : '') + (data.parentId ? ' data-parent=\"' + data.parentId + '\"' : '') + '>')\n .addClass('node ' + (data.className || '') + (level > opts.visibleLevel ? ' slide-up' : ''));\n if (opts.nodeTemplate) {\n $nodeDiv.append(opts.nodeTemplate(data));\n } else {\n $nodeDiv.append('<div class=\"title\">' + data[opts.nodeTitle] + '</div>')\n .append(typeof opts.nodeContent !== 'undefined' ? '<div class=\"content\">' + (data[opts.nodeContent] || '') + '</div>' : '');\n }\n //\n var nodeData = $.extend({}, data);\n delete nodeData.children;\n $nodeDiv.data('nodeData', nodeData);\n // append 4 direction arrows or expand/collapse buttons\n var flags = data.relationship || '';\n if ((opts.verticalLevel && level >= opts.verticalLevel) || data.isVertical) {\n if (Number(flags.substr(2,1))) {\n $nodeDiv.append('<i class=\"toggleBtn oci\"></i>')\n .children('.title').prepend('<i class=\"oci '+ opts.parentNodeSymbol + ' symbol\"></i>');\n }\n } else if (data.isHybrid) {\n if (Number(flags.substr(2,1))) {\n $nodeDiv.append('<i class=\"edge verticalEdge bottomEdge oci\"></i>')\n .children('.title').prepend('<i class=\"oci '+ opts.parentNodeSymbol + ' symbol\"></i>');\n }\n } else {\n if (Number(flags.substr(0,1))) {\n $nodeDiv.append('<i class=\"edge verticalEdge topEdge oci\"></i>');\n }\n if(Number(flags.substr(1,1))) {\n $nodeDiv.append('<i class=\"edge horizontalEdge rightEdge oci\"></i>' +\n '<i class=\"edge horizontalEdge leftEdge oci\"></i>');\n }\n if(Number(flags.substr(2,1))) {\n $nodeDiv.append('<i class=\"edge verticalEdge bottomEdge oci\"></i>')\n .children('.title').prepend('<i class=\"oci '+ opts.parentNodeSymbol + ' symbol\"></i>');\n }\n }\n\n $nodeDiv.on('mouseenter mouseleave', this.nodeEnterLeaveHandler.bind(this));\n $nodeDiv.on('click', this.nodeClickHandler.bind(this));\n $nodeDiv.on('click', '.topEdge', this.topEdgeClickHandler.bind(this));\n $nodeDiv.on('click', '.bottomEdge', this.bottomEdgeClickHandler.bind(this));\n $nodeDiv.on('click', '.leftEdge, .rightEdge', this.hEdgeClickHandler.bind(this));\n $nodeDiv.on('click', '.toggleBtn', this.toggleVNodes.bind(this));\n\n if (opts.draggable) {\n this.bindDragDrop($nodeDiv);\n this.touchHandled = false;\n this.touchMoved = false;\n this.touchTargetNode = null;\n }\n // allow user to append dom modification after finishing node create of orgchart\n if (opts.createNode) {\n opts.createNode($nodeDiv, data);\n }\n\n return $nodeDiv;\n },\n // recursively build the tree\n buildHierarchy: function ($appendTo, data) {\n var that = this;\n var opts = this.options;\n var level = 0;\n if (data.level) {\n level = data.level;\n } else {\n level = data.level = $appendTo.parentsUntil('.orgchart', '.nodes').length;\n }\n // Construct the node\n if (Object.keys(data).length > 2) {\n $appendTo.append(this.createNode(data));\n }\n // Construct the \"inferior nodes\"\n if (data.children && data.children.length) {\n var isHidden = level + 1 > opts.visibleLevel || (data.collapsed !== undefined && data.collapsed);\n var $nodesLayer;\n if ((opts.verticalLevel && (level + 1) >= opts.verticalLevel) || data.isHybrid) {\n $nodesLayer = $('<ul class=\"nodes\">');\n if (isHidden && (opts.verticalLevel && (level + 1) >= opts.verticalLevel)) {\n $nodesLayer.addClass('hidden');\n }\n if (((opts.verticalLevel && level + 1 === opts.verticalLevel) || data.isHybrid)\n && !$appendTo.closest('.vertical').length) {\n $appendTo.append($nodesLayer.addClass('vertical'));\n } else {\n $appendTo.append($nodesLayer);\n }\n } else {\n $nodesLayer = $('<ul class=\"nodes' + (isHidden ? ' hidden' : '') + '\">');\n if (Object.keys(data).length === 2) {\n $appendTo.append($nodesLayer);\n } else {\n if (isHidden) {\n $appendTo.addClass('isChildrenCollapsed');\n }\n $appendTo.append($nodesLayer);\n }\n }\n // recurse through children nodes\n $.each(data.children, function () {\n var $nodeCell = $('<li class=\"hierarchy\">');\n $nodesLayer.append($nodeCell);\n this.level = level + 1;\n that.buildHierarchy($nodeCell, this);\n });\n }\n },\n // build the child nodes of specific node\n buildChildNode: function ($appendTo, data) {\n this.buildHierarchy($appendTo, { 'children': data });\n },\n // exposed method\n addChildren: function ($node, data) {\n this.buildChildNode($node.closest('.hierarchy'), data);\n if (!$node.find('.symbol').length) {\n $node.children('.title').prepend('<i class=\"oci '+ this.options.parentNodeSymbol + ' symbol\"></i>');\n }\n if ($node.closest('.nodes.vertical').length) {\n if (!$node.children('.toggleBtn').length) {\n $node.append('<i class=\"toggleBtn oci\"></i>');\n }\n } else {\n if (!$node.children('.bottomEdge').length) {\n $node.append('<i class=\"edge verticalEdge bottomEdge oci\"></i>');\n }\n }\n if (this.isInAction($node)) {\n this.switchVerticalArrow($node.children('.bottomEdge'));\n }\n },\n // build the parent node of specific node\n buildParentNode: function ($currentRoot, data) {\n data.relationship = data.relationship || '001';\n var $newRootWrapper = $('<ul class=\"nodes\"><li class=\"hierarchy\"></li></ul>')\n .find('.hierarchy').append(this.createNode(data)).end();\n this.$chart.prepend($newRootWrapper)\n .find('.hierarchy:first').append($currentRoot.closest('ul').addClass('nodes'));\n },\n // exposed method\n addParent: function ($currentRoot, data) {\n this.buildParentNode($currentRoot, data);\n if (!$currentRoot.children('.topEdge').length) {\n $currentRoot.children('.title').after('<i class=\"edge verticalEdge topEdge oci\"></i>');\n }\n if (this.isInAction($currentRoot)) {\n this.switchVerticalArrow($currentRoot.children('.topEdge'));\n }\n },\n // build the sibling nodes of specific node\n buildSiblingNode: function ($nodeChart, data) {\n var newSiblingCount = $.isArray(data) ? data.length : data.children.length;\n var existingSibligCount = $nodeChart.parent().is('.nodes') ? $nodeChart.siblings().length + 1 : 1;\n var siblingCount = existingSibligCount + newSiblingCount;\n var insertPostion = (siblingCount > 1) ? Math.floor(siblingCount/2 - 1) : 0;\n // just build the sibling nodes for the specific node\n if ($nodeChart.closest('.nodes').parent().is('.hierarchy')) {\n this.buildChildNode($nodeChart.parent().closest('.hierarchy'), data);\n var $siblings = $nodeChart.parent().closest('.hierarchy').children('.nodes:last').children('.hierarchy');\n if (existingSibligCount > 1) {\n $siblings.eq(0).before($nodeChart.siblings().addBack().unwrap());\n } else {\n $siblings.eq(insertPostion).after($nodeChart.unwrap());\n }\n } else { // build the sibling nodes and parent node for the specific ndoe\n this.buildHierarchy($nodeChart.parent().prepend($('<li class=\"hierarchy\">')).children('.hierarchy:first'), data);\n $nodeChart.prevAll('.hierarchy').children('.nodes').children().eq(insertPostion).after($nodeChart);\n }\n },\n //\n addSiblings: function ($node, data) {\n this.buildSiblingNode($node.closest('.hierarchy'), data);\n $node.closest('.nodes').data('siblingsLoaded', true);\n if (!$node.children('.leftEdge').length) {\n $node.children('.topEdge').after('<i class=\"edge horizontalEdge rightEdge oci\"></i><i class=\"edge horizontalEdge leftEdge oci\"></i>');\n }\n if (this.isInAction($node)) {\n this.switchHorizontalArrow($node);\n $node.children('.topEdge').removeClass('oci-chevron-up').addClass('oci-chevron-down');\n }\n },\n // remove node and its descendent nodes\n removeNodes: function ($node) {\n var $wrapper = $node.closest('.hierarchy').parent();\n if ($wrapper.parent().is('.hierarchy')) {\n if (this.getNodeState($node, 'siblings').exist) {\n $node.closest('.hierarchy').remove();\n if ($wrapper.children().length === 1) {\n $wrapper.find('.node:first .horizontalEdge').remove();\n }\n } else {\n $wrapper.siblings('.node').find('.bottomEdge').remove()\n .end().end().remove();\n }\n } else { // if $node is root node\n $wrapper.closest('.orgchart').remove();\n }\n },\n //\n hideDropZones: function () {\n // Remove all the 'this is a drop zone' indicators\n var orgChartObj = this;\n orgChartObj.$chart.find('.allowedDrop')\n .removeClass('allowedDrop');\n },\n //\n showDropZones: function (dragged) {\n // Highlight all the 'drop zones', and set dragged, so that the drop/enter can work out what happens later\n // TODO: This assumes all nodes are droppable: it doesn't run the custom isDroppable function - it should!\n var orgChartObj = this;\n orgChartObj.$chart.find('.node')\n .each(function (index, node) {\n $(node).addClass('allowedDrop');\n });\n orgChartObj.$chart.data('dragged', $(dragged));\n },\n //\n processExternalDrop: function (dropZone, dragged) {\n // Allow an external drop event to be handled by one of our nodes\n if (dragged) {\n this.$chart.data('dragged', $(dragged));\n }\n var droppedOnNode = dropZone.closest('.node');\n // would like to just call 'dropZoneHandler', but I can't reach it from here\n // instead raise a drop event on the node element\n droppedOnNode.triggerHandler({ 'type': 'drop' });\n },\n //\n exportPDF: function(canvas, exportFilename){\n var doc = {};\n var docWidth = Math.floor(canvas.width);\n var docHeight = Math.floor(canvas.height);\n if (!window.jsPDF) {\n window.jsPDF = window.jspdf.jsPDF;\n }\n\n if (docWidth > docHeight) {\n doc = new jsPDF({\n orientation: 'landscape',\n unit: 'px',\n format: [docWidth, docHeight]\n });\n } else {\n doc = new jsPDF({\n orientation: 'portrait',\n unit: 'px',\n format: [docHeight, docWidth]\n });\n }\n doc.addImage(canvas.toDataURL(), 'png', 0, 0);\n doc.save(exportFilename + '.pdf');\n },\n //\n exportPNG: function(canvas, exportFilename){\n var that = this;\n var isWebkit = 'WebkitAppearance' in document.documentElement.style;\n var isFf = !!window.sidebar;\n var isEdge = navigator.appName === 'Microsoft Internet Explorer' || (navigator.appName === \"Netscape\" && navigator.appVersion.indexOf('Edge') > -1);\n var $chartContainer = this.$chartContainer;\n\n if ((!isWebkit && !isFf) || isEdge) {\n window.navigator.msSaveBlob(canvas.msToBlob(), exportFilename + '.png');\n } else {\n var selector = '.oci-download-btn' + (that.options.chartClass !== '' ? '.' + that.options.chartClass : '');\n\n if (!$chartContainer.find(selector).length) {\n $chartContainer.append('<a class=\"oci-download-btn' + (that.options.chartClass !== '' ? ' ' + that.options.chartClass : '') + '\"'\n + ' download=\"' + exportFilename + '.png\"></a>');\n }\n\n $chartContainer.find(selector).attr('href', canvas.toDataURL())[0].click();\n }\n },\n //\n export: function (exportFilename, exportFileextension) {\n var that = this;\n exportFilename = (typeof exportFilename !== 'undefined') ? exportFilename : this.options.exportFilename;\n exportFileextension = (typeof exportFileextension !== 'undefined') ? exportFileextension : this.options.exportFileextension;\n if ($(this).children('.spinner').length) {\n return false;\n }\n var $chartContainer = this.$chartContainer;\n var $mask = $chartContainer.find('.mask');\n if (!$mask.length) {\n $chartContainer.append('<div class=\"mask\"><i class=\"oci oci-spinner spinner\"></i></div>');\n } else {\n $mask.removeClass('hidden');\n }\n var sourceChart = $chartContainer.addClass('canvasContainer').find('.orgchart:not(\".hidden\")').get(0);\n var flag = that.options.direction === 'l2r' || that.options.direction === 'r2l';\n html2canvas(sourceChart, {\n 'width': flag ? sourceChart.clientHeight : sourceChart.clientWidth,\n 'height': flag ? sourceChart.clientWidth : sourceChart.clientHeight,\n 'onclone': function (cloneDoc) {\n $(cloneDoc).find('.canvasContainer').css('overflow', 'visible')\n .find('.orgchart:not(\".hidden\"):first').css('transform', '');\n }\n })\n .then(function (canvas) {\n $chartContainer.find('.mask').addClass('hidden');\n\n if (exportFileextension.toLowerCase() === 'pdf') {\n that.exportPDF(canvas, exportFilename);\n } else {\n that.exportPNG(canvas, exportFilename);\n }\n\n $chartContainer.removeClass('canvasContainer');\n }, function () {\n $chartContainer.removeClass('canvasContainer');\n });\n }\n };\n\n $.fn.orgchart = function (opts) {\n return new OrgChart(this, opts).init();\n };\n\n}));\n"],"names":["factory","module","exports","require","window","document","jQuery","$","undefined","OrgChart","elem","opts","this","$chartContainer","defaultOptions","nodeTitle","nodeId","toggleSiblingsResp","visibleLevel","chartClass","exportButton","exportButtonName","exportFilename","exportFileextension","parentNodeSymbol","draggable","direction","pan","zoom","zoominLimit","zoomoutLimit","prototype","init","that","options","extend","data","$chart","remove","class","click","event","target","closest","length","find","removeClass","$root","MutationObserver","triggerInitEvent","append","type","buildHierarchy","buildJsonDS","children","ajaxURL","attachRel","ajax","url","dataType","done","textStatus","jqXHR","fail","errorThrown","console","log","always","attachExportButton","bindPan","bindZoom","mo","mutations","disconnect","initTime","i","j","addedNodes","classList","contains","initCompleted","initEvent","Event","trigger","observe","childList","triggerLoadEvent","$target","rel","triggerShowEvent","triggerHideEvent","$exportBtn","text","e","preventDefault","export","after","setOptions","val","unbindPan","unbindZoom","panStartHandler","delegateTarget","touches","css","temp","lastX","lastY","lastTf","startX","split","indexOf","parseInt","startY","targetTouches","pageX","pageY","on","newX","newY","matrix","join","panEndHandler","chart","off","zoomWheelHandler","oc","newScale","originalEvent","deltaY","setChartScale","zoomStartHandler","dist","getPinchDist","zoomingHandler","zoomEndHandler","diff","Math","sqrt","clientX","clientY","targetScale","abs","parseFloat","$li","subObj","name","contents","eq","trim","relationship","parent","is","siblings","each","key","value","push","flags","forEach","item","isHybrid","isVertical","loopChart","includeNodeData","$node","id","getHierarchy","valid","getNodeState","relation","isVerticalNode","parents","exist","visible","getParent","getRelatedNodes","getChildren","getSiblings","hideParentEnd","addClass","hideParent","$parent","hideSiblings","one","showParentEnd","node","isInAction","switchVerticalArrow","showParent","repaint","bind","stopAjax","$nodeLevel","isVisibleNode","index","hideChildrenEnd","animatedNodes","hideChildren","$lowerLevel","$animatedNodes","filter","get","lowerLevel","showChildrenEnd","showChildren","$levels","isVerticalDesc","hideSiblingsEnd","$nodeContainer","nodeContainer","$siblings","prevAll","nextAll","end","switchHorizontalArrow","showSiblingsEnd","visibleNodes","showRelatedParentEnd","showSiblings","$upperLevel","$visibleNodes","startLoading","$edge","not","prop","endLoading","removeAttr","attr","$arrow","toggleClass","$prevSib","prev","$nextSib","next","sibsVisible","$sibs","style","offsetWidth","nodeEnterLeaveHandler","$topEdge","$bottomEdge","$leftEdge","flag","$toggleBtn","nodeClickHandler","loadNodes","isEmptyObject","addParent","addChildren","addSiblings","HideFirstParentEnd","topEdge","topEdgeClickHandler","stopPropagation","parentState","isFunction","bottomEdgeClickHandler","childrenState","hEdgeClickHandler","$hEdge","siblingsState","families","expandVNodesEnd","vNodes","collapseVNodesEnd","toggleVNodes","$descWrapper","$descendants","$children","createGhostNode","ghostNode","nodeCover","$nodeDiv","origEvent","isFirefox","test","navigator","userAgent","toLowerCase","querySelector","createElementNS","add","appendChild","transValues","isHorizontal","scale","slice","xOffset","setAttribute","outerWidth","outerHeight","offsetX","yOffset","offsetY","ghostNodeWrapper","createElement","src","XMLSerializer","serializeToString","dataTransfer","setDragImage","getUpperLevel","getLowerLevel","getLevelOrderNodes","queue","output","row","cur","shift","toArray","flat","filterAllowedDropNodes","$dragged","draggingNode","hasClass","$dragZone","$dragHier","dropCriteria","dragstartHandler","setData","dragoverHandler","dropEffect","dragendHandler","dropHandler","async","datasource","copy","horizontalEdges","$dropSibs","$dropZone","dropEvent","draggedNode","dragZone","dropZone","isDefaultPrevented","hybridNode","digger","JSONDigger","findOneNode","verticalLevel","findNodeById","Object","assign","removeNode","dropNode","prepend","triggerHandler","draggedItem","touchstartHandler","touchHandled","touchMoved","touchmoveHandler","touchingNodeElement","currentTarget","touchDragImage","createDragImage","moveDragImage","$touchingNodes","elementFromPoint","touchTargetNode","touchendHandler","firstTouch","fakeMouseClickEvent","destroyDragImage","fakeEventForDropHandler","changedTouches","createEvent","initMouseEvent","screenX","screenY","ctrlKey","altKey","shiftKey","metaKey","dispatchEvent","source","dragImage","cloneNode","sourceRectangle","copyStyle","top","left","getBoundingClientRect","sourcePoint","getTouchPoint","touchDragImageOffset","x","y","opacity","body","parentElement","removeChild","dst","att","removeAttribute","HTMLCanvasElement","cDst","width","cSrc","height","getContext","drawImage","cs","getComputedStyle","pointerEvents","image","orgChartMaster","requestAnimationFrame","pt","s","position","zIndex","round","bindDragDrop","createNode","level","child","parentId","className","nodeData","nodeTemplate","nodeContent","Number","substr","$appendTo","isHidden","$nodesLayer","parentsUntil","keys","collapsed","$nodeCell","buildChildNode","buildParentNode","$currentRoot","$newRootWrapper","buildSiblingNode","$nodeChart","newSiblingCount","isArray","existingSibligCount","siblingCount","insertPostion","floor","before","addBack","unwrap","removeNodes","$wrapper","hideDropZones","showDropZones","dragged","processExternalDrop","exportPDF","canvas","doc","docWidth","docHeight","jsPDF","jspdf","orientation","unit","format","addImage","toDataURL","save","exportPNG","isWebkit","documentElement","isFf","sidebar","isEdge","appName","appVersion","msSaveBlob","msToBlob","selector","$mask","sourceChart","html2canvas","clientHeight","clientWidth","onclone","cloneDoc","then","fn","orgchart"],"mappings":"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"}
|