orgchart 3.8.0 → 3.8.1
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/dist/js/jquery.orgchart.js +9 -1
- package/dist/js/jquery.orgchart.min.js +1 -1
- package/dist/js/jquery.orgchart.min.js.map +1 -1
- package/package.json +2 -2
- package/src/js/jquery.orgchart.js +9 -1
- package/test/visual-regression/zoom/__image_snapshots__/__diff_output__/test-js-orgchart-visual-regression-tests-zoomin-correctly-1-snap-diff.png +0 -0
- package/test/visual-regression/zoom/__image_snapshots__/__diff_output__/test-js-orgchart-visual-regression-tests-zoomout-correctly-1-snap-diff.png +0 -0
|
@@ -634,13 +634,21 @@
|
|
|
634
634
|
},
|
|
635
635
|
//
|
|
636
636
|
hideSiblingsEnd: function (event) {
|
|
637
|
+
var that = this;
|
|
637
638
|
var $node = event.data.node;
|
|
638
639
|
var $nodeContainer = event.data.nodeContainer;
|
|
639
640
|
var direction = event.data.direction;
|
|
640
641
|
var $siblings = direction ? (direction === 'left' ? $nodeContainer.prevAll(':not(.hidden)') : $nodeContainer.nextAll(':not(.hidden)')) : $nodeContainer.siblings();
|
|
641
642
|
event.data.animatedNodes.removeClass('sliding');
|
|
642
643
|
$siblings.find('.node:gt(0)').filter(this.isVisibleNode.bind(this))
|
|
643
|
-
.removeClass('slide-left slide-right')
|
|
644
|
+
.removeClass('slide-left slide-right')
|
|
645
|
+
.addClass(function() {
|
|
646
|
+
if (that.options.compact) {
|
|
647
|
+
return '';
|
|
648
|
+
} else {
|
|
649
|
+
return 'slide-up';
|
|
650
|
+
}
|
|
651
|
+
});
|
|
644
652
|
$siblings.find('.nodes, .vertical').addClass('hidden')
|
|
645
653
|
.end().addClass('hidden');
|
|
646
654
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";!function(e){"object"==typeof module&&"object"==typeof module.exports?e(require("jquery"),window,document):e(jQuery,window,document)}(function(l,h,c,r){function t(e,t){this.$chartContainer=l(e),this.opts=t,this.defaultOptions={icons:{theme:"oci",parentNode:"oci-menu",expandToUp:"oci-chevron-up",collapseToDown:"oci-chevron-down",collapseToLeft:"oci-chevron-left",expandToRight:"oci-chevron-right",backToCompact:"oci-corner-top-left",backToLoose:"oci-corner-bottom-right",collapsed:"oci-plus-square",expanded:"oci-minus-square",spinner:"oci-spinner"},nodeTitle:"name",nodeId:"id",toggleSiblingsResp:!1,visibleLevel:999,chartClass:"",exportButton:!1,exportButtonName:"Export",exportFilename:"OrgChart",exportFileextension:"png",draggable:!1,direction:"t2b",pan:!1,zoom:!1,zoominLimit:7,zoomoutLimit:.5}}t.prototype={init:function(e){var n=this,e=(this.options=l.extend({},this.defaultOptions,this.opts,e),this.$chartContainer),t=(this.$chart&&this.$chart.remove(),this.options.data),i=this.$chart=l("<div>",{data:{options:this.options},class:"orgchart"+(""!==this.options.chartClass?" "+this.options.chartClass:"")+("t2b"!==this.options.direction?" "+this.options.direction:""),click:function(e){l(e.target).closest(".node").length||i.find(".node.focused").removeClass("focused")}}),s=("undefined"!=typeof MutationObserver&&this.triggerInitEvent(),i.append(l('<ul class="nodes"><li class="hierarchy"></li></ul>')).find(".hierarchy"));return"object"===l.type(t)?t instanceof l?this.buildHierarchy(s,this.buildJsonDS(t.children()),0,this.options):this.buildHierarchy(s,this.options.ajaxURL?t:this.attachRel(t,"00")):(i.append(`<i class="${this.options.icons.theme} ${this.options.icons.spinner} spinner"></i>`),l.ajax({url:t,dataType:"json"}).done(function(e,t,i){n.buildHierarchy(s,n.options.ajaxURL?e:n.attachRel(e,"00"),0,n.options)}).fail(function(e,t,i){console.log(i)}).always(function(){i.children(".spinner").remove()})),e.append(i),this.options.exportButton&&!l(".oc-export-btn").length&&this.attachExportButton(),this.options.pan&&this.bindPan(),this.options.zoom&&this.bindZoom(),this},handleCompactNodes:function(){this.$chart.find(".node.compact").each((e,t)=>{l(t).addClass(l(t).parents(".compact").length%2==0?"even":"odd")})},triggerInitEvent:function(){var s=this,o=new MutationObserver(function(e){o.disconnect();e:for(var t=0;t<e.length;t++)for(var i=0;i<e[t].addedNodes.length;i++)if(e[t].addedNodes[i].classList.contains("orgchart")){s.handleCompactNodes(),s.options.initCompleted&&"function"==typeof s.options.initCompleted&&s.options.initCompleted(s.$chart);var n=l.Event("init.orgchart");s.$chart.trigger(n);break e}});o.observe(this.$chartContainer[0],{childList:!0})},triggerLoadEvent:function(e,t){t=l.Event("load-"+t+".orgchart");e.trigger(t)},triggerShowEvent:function(e,t){t=l.Event("show-"+t+".orgchart");e.trigger(t)},triggerHideEvent:function(e,t){t=l.Event("hide-"+t+".orgchart");e.trigger(t)},attachExportButton:function(){var t=this,e=l("<button>",{class:"oc-export-btn",text:this.options.exportButtonName,click:function(e){e.preventDefault(),t.export()}});this.$chartContainer.after(e)},setOptions:function(e,t){return"string"==typeof e&&("pan"===e&&(t?this.bindPan():this.unbindPan()),"zoom"===e)&&(t?this.bindZoom():this.unbindZoom()),"object"==typeof e&&(e.data?this.init(e):(void 0!==e.pan&&(e.pan?this.bindPan():this.unbindPan()),void 0!==e.zoom&&(e.zoom?this.bindZoom():this.unbindZoom()))),this},panStartHandler:function(e){var s=l(e.delegateTarget);if(l(e.target).closest(".node").length||e.touches&&1<e.touches.length)s.data("panning",!1);else{s.css("cursor","move").data("panning",!0);var t,i=0,n=0,o=s.css("transform"),a=("none"!==o&&(t=o.split(","),n=-1===o.indexOf("3d")?(i=parseInt(t[4]),parseInt(t[5])):(i=parseInt(t[12]),parseInt(t[13]))),0),d=0;if(e.targetTouches){if(1===e.targetTouches.length)a=e.targetTouches[0].pageX-i,d=e.targetTouches[0].pageY-n;else if(1<e.targetTouches.length)return}else a=e.pageX-i,d=e.pageY-n;s.on("mousemove touchmove",function(e){if(s.data("panning")){var t=0,i=0;if(e.targetTouches){if(1===e.targetTouches.length)t=e.targetTouches[0].pageX-a,i=e.targetTouches[0].pageY-d;else if(1<e.targetTouches.length)return}else t=e.pageX-a,i=e.pageY-d;var n,e=s.css("transform");"none"===e?-1===e.indexOf("3d")?s.css("transform","matrix(1, 0, 0, 1, "+t+", "+i+")"):s.css("transform","matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, "+t+", "+i+", 0, 1)"):(n=e.split(","),-1===e.indexOf("3d")?(n[4]=" "+t,n[5]=" "+i+")"):(n[12]=" "+t,n[13]=" "+i),s.css("transform",n.join(",")))}})}},panEndHandler:function(e){e.data.chart.data("panning")&&e.data.chart.data("panning",!1).css("cursor","default").off("mousemove")},bindPan:function(){this.$chartContainer.css("overflow","hidden"),this.$chart.on("mousedown touchstart",this.panStartHandler),l(c).on("mouseup touchend",{chart:this.$chart},this.panEndHandler)},unbindPan:function(){this.$chartContainer.css("overflow","auto"),this.$chart.off("mousedown touchstart",this.panStartHandler),l(c).off("mouseup touchend",this.panEndHandler)},zoomWheelHandler:function(e){var t=e.data.oc,e=(e.preventDefault(),1+(0<e.originalEvent.deltaY?-.2:.2));t.setChartScale(t.$chart,e)},zoomStartHandler:function(e){var t;e.touches&&2===e.touches.length&&((t=e.data.oc).$chart.data("pinching",!0),e=t.getPinchDist(e),t.$chart.data("pinchDistStart",e))},zoomingHandler:function(e){var t=e.data.oc;t.$chart.data("pinching")&&(e=t.getPinchDist(e),t.$chart.data("pinchDistEnd",e))},zoomEndHandler:function(e){var t,e=e.data.oc;e.$chart.data("pinching")&&(e.$chart.data("pinching",!1),0<(t=e.$chart.data("pinchDistEnd")-e.$chart.data("pinchDistStart"))?e.setChartScale(e.$chart,1.2):t<0&&e.setChartScale(e.$chart,.8))},bindZoom:function(){this.$chartContainer.on("wheel",{oc:this},this.zoomWheelHandler),this.$chartContainer.on("touchstart",{oc:this},this.zoomStartHandler),l(c).on("touchmove",{oc:this},this.zoomingHandler),l(c).on("touchend",{oc:this},this.zoomEndHandler)},unbindZoom:function(){this.$chartContainer.off("wheel",this.zoomWheelHandler),this.$chartContainer.off("touchstart",this.zoomStartHandler),l(c).off("touchmove",this.zoomingHandler),l(c).off("touchend",this.zoomEndHandler)},getPinchDist:function(e){return Math.sqrt((e.touches[0].clientX-e.touches[1].clientX)*(e.touches[0].clientX-e.touches[1].clientX)+(e.touches[0].clientY-e.touches[1].clientY)*(e.touches[0].clientY-e.touches[1].clientY))},setChartScale:function(e,t){var i,n=e.data("options"),s=e.css("transform"),o=1;"none"===s?e.css("transform","scale("+t+","+t+")"):(i=s.split(","),-1===s.indexOf("3d")?(o=Math.abs(h.parseFloat(i[3])*t))>n.zoomoutLimit&&o<n.zoominLimit&&e.css("transform",s+" scale("+t+","+t+")"):(o=Math.abs(h.parseFloat(i[1])*t))>n.zoomoutLimit&&o<n.zoominLimit&&e.css("transform",s+" scale3d("+t+","+t+", 1)"))},buildJsonDS:function(e){var t=this,i={name:e.contents().eq(0).text().trim(),relationship:(e.parent().parent().is("li")?"1":"0")+(e.siblings("li").length?1:0)+(e.children("ul").length?1:0)};return l.each(e.data(),function(e,t){i[e]=t}),e.children("ul").children().each(function(){i.children||(i.children=[]),i.children.push(t.buildJsonDS(l(this)))}),i},attachRel:function(t,e){var i=this;return t.relationship=e+(t.children&&0<t.children.length?1:0),this.options?.compact?.constructor===Function&&this.options.compact(t)&&(t.compact=!0),t.children&&t.children.forEach(function(e){t.hybrid||t.vertical?e.vertical=!0:t.compact&&e.children?e.compact=!0:t.compact&&!e.children&&(e.associatedCompact=!0),i.attachRel(e,"1"+(1<t.children.length?1:0))}),t},loopChart:function(e,t){t=null!==t&&t!==r&&t;var i=this,e=e.find(".node:first"),n={id:e[0].id};return t&&l.each(e.data("nodeData"),function(e,t){n[e]=t}),e.siblings(".nodes").children().each(function(){n.children||(n.children=[]),n.children.push(i.loopChart(l(this),t))}),n},getHierarchy:function(e){var t;return e=null!==e&&e!==r&&e,void 0===this.$chart?"Error: orgchart does not exist":this.$chart.find(".node").length?(t=!0,this.$chart.find(".node").each(function(){if(!this.id)return t=!1}),t?this.loopChart(this.$chart,e):"Error: All nodes of orghcart to be exported must have data-id attribute!"):"Error: nodes do not exist"},getNodeState:function(e,t){var i={},n=!!e.closest("vertical").length;if("parent"===(t=t||"self")){if(n?(i=e.closest("ul").parents("ul")).length||(i=e.closest(".nodes")).length||(i=e.closest(".vertical").siblings(":first")):i=e.closest(".nodes").siblings(".node"),i.length)return i.is(".hidden")||!i.is(".hidden")&&i.closest(".nodes").is(".hidden")||!i.is(".hidden")&&i.closest(".vertical").is(".hidden")?{exist:!0,visible:!1}:{exist:!0,visible:!0}}else if("children"===t){if((i=n?e.parent().children("ul"):e.siblings(".nodes")).length)return i.is(".hidden")?{exist:!0,visible:!1}:{exist:!0,visible:!0}}else if("siblings"===t){if((i=n?e.closest("ul"):e.parent().siblings()).length&&(!n||1<i.children("li").length))return i.is(".hidden")||i.parent().is(".hidden")||n&&i.closest(".vertical").is(".hidden")?{exist:!0,visible:!1}:{exist:!0,visible:!0}}else if((i=e).length)return i.closest(".nodes").length&&i.closest(".nodes").is(".hidden")||i.closest(".hierarchy").length&&i.closest(".hierarchy").is(".hidden")||i.closest(".vertical").length&&(i.closest(".nodes").is(".hidden")||i.closest(".vertical").is(".hidden"))?{exist:!0,visible:!1}:{exist:!0,visible:!0};return{exist:!1,visible:!1}},getParent:function(e){return this.getRelatedNodes(e,"parent")},getChildren:function(e){return this.getRelatedNodes(e,"children")},getSiblings:function(e){return this.getRelatedNodes(e,"siblings")},getRelatedNodes:function(e,t){return e&&e instanceof l&&e.is(".node")?"parent"===t?e.closest(".nodes").siblings(".node"):"children"===t?e.siblings(".nodes").children(".hierarchy").find(".node:first"):"siblings"===t?e.closest(".hierarchy").siblings().find(".node:first"):l():l()},hideParentEnd:function(e){l(e.target).removeClass("sliding"),e.data.parent.addClass("hidden")},hideParent:function(e){var t=e.closest(".nodes").siblings(".node");t.find(".spinner").length&&e.closest(".orgchart").data("inAjax",!1),this.getNodeState(e,"siblings").visible&&this.hideSiblings(e),e.parent().addClass("isAncestorsCollapsed"),this.getNodeState(t).visible&&t.addClass("sliding slide-down").one("transitionend",{parent:t},this.hideParentEnd),this.getNodeState(t,"parent").visible&&this.hideParent(t)},showParentEnd:function(e){var t=e.data.node;l(e.target).removeClass("sliding"),this.isInAction(t)&&this.switchVerticalArrow(t.children(".topEdge"))},showParent:function(e){var t=e.closest(".nodes").siblings(".node").removeClass("hidden");e.closest(".hierarchy").removeClass("isAncestorsCollapsed"),this.repaint(t[0]),t.addClass("sliding").removeClass("slide-down").one("transitionend",{node:e},this.showParentEnd.bind(this))},stopAjax:function(e){e.find(".spinner").length&&e.closest(".orgchart").data("inAjax",!1)},isVisibleNode:function(e,t){return this.getNodeState(l(t)).visible},hideChildrenEnd:function(e){var t=e.data.node;e.data.animatedNodes.removeClass("sliding"),e.data.animatedNodes.closest(".nodes").addClass("hidden"),this.isInAction(t)&&this.switchVerticalArrow(t.children(".bottomEdge"))},hideChildren:function(e){e.closest(".hierarchy").addClass("isChildrenCollapsed");var t=e.siblings(".nodes"),i=(this.stopAjax(t),t.find(".node").filter(this.isVisibleNode.bind(this)));t.is(".vertical")||i.closest(".hierarchy").addClass("isCollapsedDescendant"),(t.is(".vertical")||t.find(".vertical").length)&&i.find(this.options.icons.expanded).removeClass(this.options.icons.expanded).addClass(this.options.icons.collapsed),this.repaint(i.get(0)),i.addClass("sliding slide-up").eq(0).one("transitionend",{animatedNodes:i,lowerLevel:t,node:e},this.hideChildrenEnd.bind(this))},showChildrenEnd:function(e){var t=e.data.node;e.data.animatedNodes.removeClass("sliding"),this.isInAction(t)&&this.switchVerticalArrow(t.children(".bottomEdge"))},showChildren:function(e){e.closest(".hierarchy").removeClass("isChildrenCollapsed");var t=e.siblings(".nodes"),i=t.is(".vertical"),t=(i?t.removeClass("hidden").find(".node"):t.removeClass("hidden").children(".hierarchy").find(".node:first")).filter(this.isVisibleNode.bind(this));i||(t.filter(":not(:only-child)").closest(".hierarchy").addClass("isChildrenCollapsed"),t.closest(".hierarchy").removeClass("isCollapsedDescendant")),this.repaint(t.get(0)),t.addClass("sliding").removeClass("slide-up").eq(0).one("transitionend",{node:e,animatedNodes:t},this.showChildrenEnd.bind(this))},hideSiblingsEnd:function(e){var t=e.data.node,i=e.data.nodeContainer,n=e.data.direction,n=n?"left"===n?i.prevAll(":not(.hidden)"):i.nextAll(":not(.hidden)"):i.siblings();e.data.animatedNodes.removeClass("sliding"),n.find(".node:gt(0)").filter(this.isVisibleNode.bind(this)).removeClass("slide-left slide-right").addClass("slide-up"),n.find(".nodes, .vertical").addClass("hidden").end().addClass("hidden"),this.isInAction(t)&&this.switchHorizontalArrow(t)},hideSiblings:function(e,t){var i=e.closest(".hierarchy").addClass("isSiblingsCollapsed"),n=(i.siblings().find(".spinner").length&&e.closest(".orgchart").data("inAjax",!1),t?"left"===t?i.addClass("left-sibs").prevAll(".isSiblingsCollapsed").removeClass("isSiblingsCollapsed left-sibs").end().prevAll().addClass("isCollapsedSibling isChildrenCollapsed").find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-right"):i.addClass("right-sibs").nextAll(".isSiblingsCollapsed").removeClass("isSiblingsCollapsed right-sibs").end().nextAll().addClass("isCollapsedSibling isChildrenCollapsed").find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-left"):(i.prevAll().find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-right"),i.nextAll().find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-left"),i.siblings().addClass("isCollapsedSibling isChildrenCollapsed")),i.siblings().find(".sliding"));n.eq(0).one("transitionend",{node:e,nodeContainer:i,direction:t,animatedNodes:n},this.hideSiblingsEnd.bind(this))},showSiblingsEnd:function(e){var t=e.data.node;e.data.visibleNodes.removeClass("sliding"),this.isInAction(t)&&(this.switchHorizontalArrow(t),t.children(".topEdge").removeClass(this.options.icons.expandToUp).addClass(this.options.icons.collapseToDown))},showRelatedParentEnd:function(e){l(e.target).removeClass("sliding")},showSiblings:function(e,t){var i=l(),n=e.closest(".hierarchy"),i=(t?"left"===t?n.prevAll():n.nextAll():e.closest(".hierarchy").siblings()).removeClass("hidden"),s=e.closest(".nodes").siblings(".node"),n=(t?(n.removeClass(t+"-sibs"),n.is("[class*=-sibs]")||n.removeClass("isSiblingsCollapsed"),i.removeClass("isCollapsedSibling "+t+"-sibs")):(e.closest(".hierarchy").removeClass("isSiblingsCollapsed"),i.removeClass("isCollapsedSibling")),this.getNodeState(e,"parent").visible||(e.closest(".hierarchy").removeClass("isAncestorsCollapsed"),s.removeClass("hidden"),this.repaint(s[0]),s.addClass("sliding").removeClass("slide-down").one("transitionend",this.showRelatedParentEnd)),i.find(".node").filter(this.isVisibleNode.bind(this)));this.repaint(n.get(0)),n.addClass("sliding").removeClass("slide-left slide-right"),n.eq(0).one("transitionend",{node:e,visibleNodes:n},this.showSiblingsEnd.bind(this))},startLoading:function(e){var t=this.$chart;return(void 0===t.data("inAjax")||!0!==t.data("inAjax"))&&(e.addClass("hidden"),e.parent().append(`<i class="${this.options.icons.theme} ${this.options.icons.spinner} spinner"></i>`).children().not(".spinner").css("opacity",.2),t.data("inAjax",!0),l(".oc-export-btn").prop("disabled",!0),!0)},endLoading:function(e){var t=e.parent();e.removeClass("hidden"),t.find(".spinner").remove(),t.children().removeAttr("style"),this.$chart.data("inAjax",!1),l(".oc-export-btn").prop("disabled",!1)},isInAction:function(t){return[this.options.icons.expandToUp,this.options.icons.collapseToDown,this.options.icons.collapseToLeft,this.options.icons.expandToRight].some(e=>-1<t.children(".edge").attr("class").indexOf(e))},switchVerticalArrow:function(e){e.toggleClass(this.options.icons.expandToUp+" "+this.options.icons.collapseToDown)},switchHorizontalArrow:function(e){var t,i=this.options;i.toggleSiblingsResp&&(void 0===i.ajaxURL||e.closest(".nodes").data("siblingsLoaded"))?((t=e.parent().prev()).length&&(t.is(".hidden")?e.children(".leftEdge").addClass(i.icons.collapseToLeft).removeClass(i.icons.expandToRight):e.children(".leftEdge").addClass(i.icons.expandToRight).removeClass(i.icons.collapseToLeft)),(t=e.parent().next()).length&&(t.is(".hidden")?e.children(".rightEdge").addClass(i.icons.expandToRight).removeClass(i.icons.collapseToLeft):e.children(".rightEdge").addClass(i.icons.collapseToLeft).removeClass(i.icons.expandToRight))):(t=!!(t=e.parent().siblings()).length&&!t.is(".hidden"),e.children(".leftEdge").toggleClass(i.icons.expandToRight,t).toggleClass(i.icons.collapseToLeft,!t),e.children(".rightEdge").toggleClass(i.icons.collapseToLeft,t).toggleClass(i.icons.expandToRight,!t))},repaint:function(e){e&&(e.style.offsetWidth=e.offsetWidth)},nodeEnterLeaveHandler:function(e){var t,i,n,s=l(e.delegateTarget),o=!1;s.closest(".nodes.vertical").length?(t=s.children(".toggleBtn"),"mouseenter"===e.type?s.children(".toggleBtn").length&&(o=this.getNodeState(s,"children").visible,t.toggleClass(this.options.icons.collapsed,!o).toggleClass(this.options.icons.expanded,o)):t.removeClass(this.options.icons.collapsed+" "+this.options.icons.expanded)):(t=s.children(".topEdge"),s.children(".rightEdge"),i=s.children(".bottomEdge"),n=s.children(".leftEdge"),"mouseenter"===e.type?(t.length&&(o=this.getNodeState(s,"parent").visible,t.toggleClass(this.options.icons.expandToUp,!o).toggleClass(this.options.icons.collapseToDown,o)),i.length&&(o=this.getNodeState(s,"children").visible,i.toggleClass(this.options.icons.collapseToDown,!o).toggleClass(this.options.icons.expandToUp,o)),n.length&&this.switchHorizontalArrow(s)):s.children(".edge").removeClass(`${this.options.icons.expandToUp} ${this.options.icons.collapseToDown} ${this.options.icons.collapseToLeft} `+this.options.icons.expandToRight))},nodeClickHandler:function(e){this.$chart.find(".focused").removeClass("focused"),l(e.delegateTarget).addClass("focused")},loadNodes:function(t,e,i){var n=this;this.options;l.ajax({url:e,dataType:"json"}).done(function(e){n.$chart.data("inAjax")&&("parent"===t?l.isEmptyObject(e)||n.addParent(i.parent(),e):"children"===t?e.children.length&&n.addChildren(i.parent(),e[t]):n.addSiblings(i.parent(),e.siblings||e),n.triggerLoadEvent(i.parent(),t))}).fail(function(){console.log("Failed to get "+t+" data")}).always(function(){n.endLoading(i)})},HideFirstParentEnd:function(e){var e=e.data.topEdge,t=e.parent();this.isInAction(t)&&(this.switchVerticalArrow(e),this.switchHorizontalArrow(t))},topEdgeClickHandler:function(e){e.stopPropagation();var t,i=l(e.target),e=l(e.delegateTarget),n=this.getNodeState(e,"parent");n.exist?(t=e.closest(".nodes").siblings(".node")).is(".sliding")||(n.visible?(this.hideParent(e),t.one("transitionend",{topEdge:i},this.HideFirstParentEnd.bind(this)),this.triggerHideEvent(e,"parent")):(this.showParent(e),this.triggerShowEvent(e,"parent"))):this.startLoading(i)&&(n=this.options,t=l.isFunction(n.ajaxURL.parent)?n.ajaxURL.parent(e.data("nodeData")):n.ajaxURL.parent+e[0].id,this.loadNodes("parent",t,i))},bottomEdgeClickHandler:function(e){e.stopPropagation();var t=l(e.target),e=l(e.delegateTarget),i=this.getNodeState(e,"children");i.exist?e.siblings(".nodes").children().children(".node").is(".sliding")||(i.visible?(this.hideChildren(e),this.triggerHideEvent(e,"children")):(this.showChildren(e),this.triggerShowEvent(e,"children"))):this.startLoading(t)&&(i=this.options,i=l.isFunction(i.ajaxURL.children)?i.ajaxURL.children(e.data("nodeData")):i.ajaxURL.children+e[0].id,this.loadNodes("children",i,t))},hEdgeClickHandler:function(e){e.stopPropagation();var t,i,n=l(e.target),e=l(e.delegateTarget),s=this.options,o=this.getNodeState(e,"siblings");o.exist?e.closest(".hierarchy").siblings().find(".sliding").length||(s.toggleSiblingsResp?(t=e.closest(".hierarchy").prev(),i=e.closest(".hierarchy").next(),n.is(".leftEdge")?t.is(".hidden")?(this.showSiblings(e,"left"),this.triggerShowEvent(e,"siblings")):(this.hideSiblings(e,"left"),this.triggerHideEvent(e,"siblings")):i.is(".hidden")?(this.showSiblings(e,"right"),this.triggerShowEvent(e,"siblings")):(this.hideSiblings(e,"right"),this.triggerHideEvent(e,"siblings"))):o.visible?(this.hideSiblings(e),this.triggerHideEvent(e,"siblings")):(this.showSiblings(e),this.triggerShowEvent(e,"siblings"))):this.startLoading(n)&&(t=e[0].id,i=this.getNodeState(e,"parent").exist?l.isFunction(s.ajaxURL.siblings)?s.ajaxURL.siblings(e.data("nodeData")):s.ajaxURL.siblings+t:l.isFunction(s.ajaxURL.families)?s.ajaxURL.families(e.data("nodeData")):s.ajaxURL.families+t,this.loadNodes("siblings",i,n))},backToCompactHandler:function(e){l(e.delegateTarget).removeClass("looseMode").children(".backToCompactSymbol").addClass("hidden").end().children(".backToLooseSymbol").removeClass("hidden")},backToLooseHandler:function(e){l(e.delegateTarget).addClass("looseMode").children(".backToLooseSymbol").addClass("hidden").end().children(".backToCompactSymbol").removeClass("hidden")},expandVNodesEnd:function(e){e.data.vNodes.removeClass("sliding")},collapseVNodesEnd:function(e){e.data.vNodes.removeClass("sliding").closest("ul").addClass("hidden")},toggleVNodes:function(e){var e=l(e.target),t=e.parent().next(),i=t.find(".node"),n=t.children().children(".node");n.is(".sliding")||(e.toggleClass(this.options.icons.collapsed+" "+this.options.icons.expanded),i.eq(0).is(".slide-up")?(t.removeClass("hidden"),this.repaint(n.get(0)),n.addClass("sliding").removeClass("slide-up").eq(0).one("transitionend",{vNodes:n},this.expandVNodesEnd)):(i.addClass("sliding slide-up").eq(0).one("transitionend",{vNodes:i},this.collapseVNodesEnd),i.find(".toggleBtn").removeClass(this.options.icons.collapsed+" "+this.options.icons.expanded)))},createGhostNode:function(e){var t,i,n=l(e.target),s=this.options,e=e.originalEvent,o=/firefox/.test(h.navigator.userAgent.toLowerCase());if(c.querySelector(".ghost-node"))t=n.closest(".orgchart").children(".ghost-node").get(0),i=l(t).children().get(0);else{if(!(t=c.createElementNS("http://www.w3.org/2000/svg","svg")).classList)return;t.classList.add("ghost-node"),i=c.createElementNS("http://www.w3.org/2000/svg","rect"),t.appendChild(i),n.closest(".orgchart").append(t)}var a=n.closest(".orgchart").css("transform").split(","),d="t2b"===s.direction||"b2t"===s.direction,a=Math.abs(h.parseFloat(d?a[0].slice(a[0].indexOf("(")+1):a[1])),d=(t.setAttribute("width",d?n.outerWidth(!1):n.outerHeight(!1)),t.setAttribute("height",d?n.outerHeight(!1):n.outerWidth(!1)),i.setAttribute("x",5*a),i.setAttribute("y",5*a),i.setAttribute("width",120*a),i.setAttribute("height",40*a),i.setAttribute("rx",4*a),i.setAttribute("ry",4*a),i.setAttribute("stroke-width",+a),e.offsetX*a),r=e.offsetY*a;"l2r"===s.direction?(d=e.offsetY*a,r=e.offsetX*a):"r2l"===s.direction?(d=n.outerWidth(!1)-e.offsetY*a,r=e.offsetX*a):"b2t"===s.direction&&(d=n.outerWidth(!1)-e.offsetX*a,r=n.outerHeight(!1)-e.offsetY*a),o?(i.setAttribute("fill","rgb(255, 255, 255)"),i.setAttribute("stroke","rgb(191, 0, 0)"),(s=c.createElement("img")).src="data:image/svg+xml;utf8,"+(new XMLSerializer).serializeToString(t),e.dataTransfer.setDragImage(s,d,r)):e.dataTransfer.setDragImage&&e.dataTransfer.setDragImage(t,d,r)},getUpperLevel:function(e){return e.is(".node")?e.parents(".hierarchy").length:0},getLowerLevel:function(e){return e.is(".node")?e.closest(".hierarchy").find(".nodes").length+1:0},getLevelOrderNodes:function(e){if(!e)return[];var t=[],i=[];for(t.push(e);t.length;){for(var n=[],s=0;s<t.length;s++){var o=t.shift(),a=this.getChildren(o);a.length&&t.push(a.toArray().flat()),n.push(l(o))}i.push(n)}return i},filterAllowedDropNodes:function(i){var n=this.options,s=i.closest("[draggable]").hasClass("node"),o=i.closest(".nodes").siblings(".node"),a=i.closest(".hierarchy").find(".node");this.$chart.data("dragged",i).find(".node").each(function(e,t){s&&-1!==a.index(t)||n.dropCriteria&&!n.dropCriteria(i,o,l(t))||l(t).addClass("allowedDrop")})},dragstartHandler:function(e){e.originalEvent.dataTransfer.setData("text/html","hack for firefox"),"none"!==this.$chart.css("transform")&&this.createGhostNode(e),this.filterAllowedDropNodes(l(e.target))},dragoverHandler:function(e){l(e.delegateTarget).is(".allowedDrop")?e.preventDefault():e.originalEvent.dataTransfer.dropEffect="none"},dragendHandler:function(e){this.$chart.find(".allowedDrop").removeClass("allowedDrop")},dropHandler:async function(e){var t,i,n,s,o,e=l(e.delegateTarget),a=this.$chart.data("dragged");a.hasClass("node")?e.hasClass("allowedDrop")&&(t=a.closest(".nodes").siblings(".node"),i=l.Event("nodedrop.orgchart"),this.$chart.trigger(i,{draggedNode:a,dragZone:t,dropZone:e}),i.isDefaultPrevented()||(i=this.$chart.data("options").data,o=(s=new JSONDigger(i,this.$chart.data("options").nodeId,"children")).findOneNode({hybrid:!0}),1<this.$chart.data("options").verticalLevel||o?(o=s.findNodeById(a.data("nodeData").id),n=Object.assign({},o),s.removeNode(o.id),(o=s.findNodeById(e.data("nodeData").id)).children?o.children.push(n):o.children=[n],this.init({data:i})):(e.siblings(".nodes").length?(s=`<i class="edge horizontalEdge rightEdge ${this.options.icons.theme}"></i><i class="edge horizontalEdge leftEdge ${this.options.icons.theme}"></i>`,a.find(".horizontalEdge").length||a.append(s),e.siblings(".nodes").append(a.closest(".hierarchy")),1===(o=a.closest(".hierarchy").siblings().find(".node:first")).length&&o.append(s)):(e.append(`<i class="edge verticalEdge bottomEdge ${this.options.icons.theme}"></i>`).after('<ul class="nodes"></ul>').siblings(".nodes").append(a.find(".horizontalEdge").remove().end().closest(".hierarchy")),e.children(".title").length&&e.children(".title").prepend(`<i class="${this.options.icons.theme} ${this.$chart.data("options").icons.parentNode} parentNodeSymbol"></i>`)),1===t.siblings(".nodes").children(".hierarchy").length?t.siblings(".nodes").children(".hierarchy").find(".node:first").find(".horizontalEdge").remove():0===t.siblings(".nodes").children(".hierarchy").length&&t.find(".bottomEdge, .parentNodeSymbol").remove().end().siblings(".nodes").remove()))):this.$chart.triggerHandler({type:"otherdropped.orgchart",draggedItem:a,dropZone:e})},touchstartHandler:function(e){this.touchHandled||e.touches&&1<e.touches.length||(this.touchHandled=!0,this.touchMoved=!1,e.preventDefault())},touchmoveHandler:function(e){var t;!this.touchHandled||e.touches&&1<e.touches.length||(e.preventDefault(),this.touchMoved||(this.filterAllowedDropNodes(l(e.currentTarget)),this.touchDragImage=this.createDragImage(e,this.$chart.data("dragged")[0])),this.touchMoved=!0,this.moveDragImage(e,this.touchDragImage),0<(e=l(c.elementFromPoint(e.touches[0].clientX,e.touches[0].clientY)).closest("div.node")).length&&(t=e[0],e.is(".allowedDrop"))?this.touchTargetNode=t:this.touchTargetNode=null)},touchendHandler:function(e){var t,i;this.touchHandled&&(this.destroyDragImage(),this.touchMoved?(this.touchTargetNode&&(t={delegateTarget:this.touchTargetNode},this.dropHandler(t),this.touchTargetNode=null),this.dragendHandler(e)):(t=e.changedTouches[0],(i=c.createEvent("MouseEvents")).initMouseEvent("click",!0,!0,h,1,t.screenX,t.screenY,t.clientX,t.clientY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,0,null),e.target.dispatchEvent(i)),this.touchHandled=!1)},createDragImage:function(e,t){var i=t.cloneNode(!0),t=(this.copyStyle(t,i),i.style.top=i.style.left="-9999px",t.getBoundingClientRect()),e=this.getTouchPoint(e);return this.touchDragImageOffset={x:e.x-t.left,y:e.y-t.top},i.style.opacity="0.5",c.body.appendChild(i),i},destroyDragImage:function(){this.touchDragImage&&this.touchDragImage.parentElement&&this.touchDragImage.parentElement.removeChild(this.touchDragImage),this.touchDragImageOffset=null,this.touchDragImage=null},copyStyle:function(e,t){["id","class","style","draggable"].forEach(function(e){t.removeAttribute(e)}),e instanceof HTMLCanvasElement&&((n=t).width=(i=e).width,n.height=i.height,n.getContext("2d").drawImage(i,0,0));for(var i,n,s=getComputedStyle(e),o=0;o<s.length;o++){var a=s[o];a.indexOf("transition")<0&&(t.style[a]=s[a])}t.style.pointerEvents="none";for(o=0;o<e.children.length;o++)this.copyStyle(e.children[o],t.children[o])},getTouchPoint:function(e){return{x:(e=e&&e.touches?e.touches[0]:e).clientX,y:e.clientY}},moveDragImage:function(i,n){var s;i&&n&&(s=this,requestAnimationFrame(function(){var e=s.getTouchPoint(i),t=n.style;t.position="absolute",t.pointerEvents="none",t.zIndex="999999",s.touchDragImageOffset&&(t.left=Math.round(e.x-s.touchDragImageOffset.x)+"px",t.top=Math.round(e.y-s.touchDragImageOffset.y)+"px")}))},bindDragDrop:function(e){e.on("dragstart",this.dragstartHandler.bind(this)).on("dragover",this.dragoverHandler.bind(this)).on("dragend",this.dragendHandler.bind(this)).on("drop",this.dropHandler.bind(this)).on("touchstart",this.touchstartHandler.bind(this)).on("touchmove",this.touchmoveHandler.bind(this)).on("touchend",this.touchendHandler.bind(this))},createNode:function(i){var n=this.options,e=i.level,t=(i.children&&i[n.nodeId]&&l.each(i.children,function(e,t){t.parentId=i[n.nodeId]}),l("<div"+(n.draggable?' draggable="true"':"")+(i[n.nodeId]?' id="'+i[n.nodeId]+'"':"")+(i.parentId?' data-parent="'+i.parentId+'"':"")+">").addClass("node "+(i.className||"")+(e>n.visibleLevel?" slide-up":""))),s=(n.nodeTemplate?t.append(n.nodeTemplate(i)):t.append('<div class="title">'+i[n.nodeTitle]+"</div>").append(void 0!==n.nodeContent?'<div class="content">'+(i[n.nodeContent]||"")+"</div>":""),l.extend({},i)),s=(delete s.children,t.data("nodeData",s),i.relationship||"");return n.verticalLevel&&e>=n.verticalLevel||i.vertical?Number(s.substr(2,1))&&t.append(`<i class="toggleBtn ${n.icons.theme}"></i>`).children(".title").prepend(`<i class="${n.icons.theme} ${n.icons.parentNode} parentNodeSymbol"></i>`):i.hybrid?Number(s.substr(2,1))&&t.append(`<i class="edge verticalEdge bottomEdge ${n.icons.theme}"></i>`).children(".title").prepend(`<i class="${n.icons.theme} ${n.icons.parentNode} parentNodeSymbol"></i>`):i.compact?(t.css("grid-template-columns",`repeat(${Math.floor(Math.sqrt(i.children.length+1))}, auto)`),Number(s.substr(2,1))&&t.append(`
|
|
1
|
+
"use strict";!function(e){"object"==typeof module&&"object"==typeof module.exports?e(require("jquery"),window,document):e(jQuery,window,document)}(function(l,h,c,r){function t(e,t){this.$chartContainer=l(e),this.opts=t,this.defaultOptions={icons:{theme:"oci",parentNode:"oci-menu",expandToUp:"oci-chevron-up",collapseToDown:"oci-chevron-down",collapseToLeft:"oci-chevron-left",expandToRight:"oci-chevron-right",backToCompact:"oci-corner-top-left",backToLoose:"oci-corner-bottom-right",collapsed:"oci-plus-square",expanded:"oci-minus-square",spinner:"oci-spinner"},nodeTitle:"name",nodeId:"id",toggleSiblingsResp:!1,visibleLevel:999,chartClass:"",exportButton:!1,exportButtonName:"Export",exportFilename:"OrgChart",exportFileextension:"png",draggable:!1,direction:"t2b",pan:!1,zoom:!1,zoominLimit:7,zoomoutLimit:.5}}t.prototype={init:function(e){var n=this,e=(this.options=l.extend({},this.defaultOptions,this.opts,e),this.$chartContainer),t=(this.$chart&&this.$chart.remove(),this.options.data),i=this.$chart=l("<div>",{data:{options:this.options},class:"orgchart"+(""!==this.options.chartClass?" "+this.options.chartClass:"")+("t2b"!==this.options.direction?" "+this.options.direction:""),click:function(e){l(e.target).closest(".node").length||i.find(".node.focused").removeClass("focused")}}),s=("undefined"!=typeof MutationObserver&&this.triggerInitEvent(),i.append(l('<ul class="nodes"><li class="hierarchy"></li></ul>')).find(".hierarchy"));return"object"===l.type(t)?t instanceof l?this.buildHierarchy(s,this.buildJsonDS(t.children()),0,this.options):this.buildHierarchy(s,this.options.ajaxURL?t:this.attachRel(t,"00")):(i.append(`<i class="${this.options.icons.theme} ${this.options.icons.spinner} spinner"></i>`),l.ajax({url:t,dataType:"json"}).done(function(e,t,i){n.buildHierarchy(s,n.options.ajaxURL?e:n.attachRel(e,"00"),0,n.options)}).fail(function(e,t,i){console.log(i)}).always(function(){i.children(".spinner").remove()})),e.append(i),this.options.exportButton&&!l(".oc-export-btn").length&&this.attachExportButton(),this.options.pan&&this.bindPan(),this.options.zoom&&this.bindZoom(),this},handleCompactNodes:function(){this.$chart.find(".node.compact").each((e,t)=>{l(t).addClass(l(t).parents(".compact").length%2==0?"even":"odd")})},triggerInitEvent:function(){var s=this,o=new MutationObserver(function(e){o.disconnect();e:for(var t=0;t<e.length;t++)for(var i=0;i<e[t].addedNodes.length;i++)if(e[t].addedNodes[i].classList.contains("orgchart")){s.handleCompactNodes(),s.options.initCompleted&&"function"==typeof s.options.initCompleted&&s.options.initCompleted(s.$chart);var n=l.Event("init.orgchart");s.$chart.trigger(n);break e}});o.observe(this.$chartContainer[0],{childList:!0})},triggerLoadEvent:function(e,t){t=l.Event("load-"+t+".orgchart");e.trigger(t)},triggerShowEvent:function(e,t){t=l.Event("show-"+t+".orgchart");e.trigger(t)},triggerHideEvent:function(e,t){t=l.Event("hide-"+t+".orgchart");e.trigger(t)},attachExportButton:function(){var t=this,e=l("<button>",{class:"oc-export-btn",text:this.options.exportButtonName,click:function(e){e.preventDefault(),t.export()}});this.$chartContainer.after(e)},setOptions:function(e,t){return"string"==typeof e&&("pan"===e&&(t?this.bindPan():this.unbindPan()),"zoom"===e)&&(t?this.bindZoom():this.unbindZoom()),"object"==typeof e&&(e.data?this.init(e):(void 0!==e.pan&&(e.pan?this.bindPan():this.unbindPan()),void 0!==e.zoom&&(e.zoom?this.bindZoom():this.unbindZoom()))),this},panStartHandler:function(e){var s=l(e.delegateTarget);if(l(e.target).closest(".node").length||e.touches&&1<e.touches.length)s.data("panning",!1);else{s.css("cursor","move").data("panning",!0);var t,i=0,n=0,o=s.css("transform"),a=("none"!==o&&(t=o.split(","),n=-1===o.indexOf("3d")?(i=parseInt(t[4]),parseInt(t[5])):(i=parseInt(t[12]),parseInt(t[13]))),0),d=0;if(e.targetTouches){if(1===e.targetTouches.length)a=e.targetTouches[0].pageX-i,d=e.targetTouches[0].pageY-n;else if(1<e.targetTouches.length)return}else a=e.pageX-i,d=e.pageY-n;s.on("mousemove touchmove",function(e){if(s.data("panning")){var t=0,i=0;if(e.targetTouches){if(1===e.targetTouches.length)t=e.targetTouches[0].pageX-a,i=e.targetTouches[0].pageY-d;else if(1<e.targetTouches.length)return}else t=e.pageX-a,i=e.pageY-d;var n,e=s.css("transform");"none"===e?-1===e.indexOf("3d")?s.css("transform","matrix(1, 0, 0, 1, "+t+", "+i+")"):s.css("transform","matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, "+t+", "+i+", 0, 1)"):(n=e.split(","),-1===e.indexOf("3d")?(n[4]=" "+t,n[5]=" "+i+")"):(n[12]=" "+t,n[13]=" "+i),s.css("transform",n.join(",")))}})}},panEndHandler:function(e){e.data.chart.data("panning")&&e.data.chart.data("panning",!1).css("cursor","default").off("mousemove")},bindPan:function(){this.$chartContainer.css("overflow","hidden"),this.$chart.on("mousedown touchstart",this.panStartHandler),l(c).on("mouseup touchend",{chart:this.$chart},this.panEndHandler)},unbindPan:function(){this.$chartContainer.css("overflow","auto"),this.$chart.off("mousedown touchstart",this.panStartHandler),l(c).off("mouseup touchend",this.panEndHandler)},zoomWheelHandler:function(e){var t=e.data.oc,e=(e.preventDefault(),1+(0<e.originalEvent.deltaY?-.2:.2));t.setChartScale(t.$chart,e)},zoomStartHandler:function(e){var t;e.touches&&2===e.touches.length&&((t=e.data.oc).$chart.data("pinching",!0),e=t.getPinchDist(e),t.$chart.data("pinchDistStart",e))},zoomingHandler:function(e){var t=e.data.oc;t.$chart.data("pinching")&&(e=t.getPinchDist(e),t.$chart.data("pinchDistEnd",e))},zoomEndHandler:function(e){var t,e=e.data.oc;e.$chart.data("pinching")&&(e.$chart.data("pinching",!1),0<(t=e.$chart.data("pinchDistEnd")-e.$chart.data("pinchDistStart"))?e.setChartScale(e.$chart,1.2):t<0&&e.setChartScale(e.$chart,.8))},bindZoom:function(){this.$chartContainer.on("wheel",{oc:this},this.zoomWheelHandler),this.$chartContainer.on("touchstart",{oc:this},this.zoomStartHandler),l(c).on("touchmove",{oc:this},this.zoomingHandler),l(c).on("touchend",{oc:this},this.zoomEndHandler)},unbindZoom:function(){this.$chartContainer.off("wheel",this.zoomWheelHandler),this.$chartContainer.off("touchstart",this.zoomStartHandler),l(c).off("touchmove",this.zoomingHandler),l(c).off("touchend",this.zoomEndHandler)},getPinchDist:function(e){return Math.sqrt((e.touches[0].clientX-e.touches[1].clientX)*(e.touches[0].clientX-e.touches[1].clientX)+(e.touches[0].clientY-e.touches[1].clientY)*(e.touches[0].clientY-e.touches[1].clientY))},setChartScale:function(e,t){var i,n=e.data("options"),s=e.css("transform"),o=1;"none"===s?e.css("transform","scale("+t+","+t+")"):(i=s.split(","),-1===s.indexOf("3d")?(o=Math.abs(h.parseFloat(i[3])*t))>n.zoomoutLimit&&o<n.zoominLimit&&e.css("transform",s+" scale("+t+","+t+")"):(o=Math.abs(h.parseFloat(i[1])*t))>n.zoomoutLimit&&o<n.zoominLimit&&e.css("transform",s+" scale3d("+t+","+t+", 1)"))},buildJsonDS:function(e){var t=this,i={name:e.contents().eq(0).text().trim(),relationship:(e.parent().parent().is("li")?"1":"0")+(e.siblings("li").length?1:0)+(e.children("ul").length?1:0)};return l.each(e.data(),function(e,t){i[e]=t}),e.children("ul").children().each(function(){i.children||(i.children=[]),i.children.push(t.buildJsonDS(l(this)))}),i},attachRel:function(t,e){var i=this;return t.relationship=e+(t.children&&0<t.children.length?1:0),this.options?.compact?.constructor===Function&&this.options.compact(t)&&(t.compact=!0),t.children&&t.children.forEach(function(e){t.hybrid||t.vertical?e.vertical=!0:t.compact&&e.children?e.compact=!0:t.compact&&!e.children&&(e.associatedCompact=!0),i.attachRel(e,"1"+(1<t.children.length?1:0))}),t},loopChart:function(e,t){t=null!==t&&t!==r&&t;var i=this,e=e.find(".node:first"),n={id:e[0].id};return t&&l.each(e.data("nodeData"),function(e,t){n[e]=t}),e.siblings(".nodes").children().each(function(){n.children||(n.children=[]),n.children.push(i.loopChart(l(this),t))}),n},getHierarchy:function(e){var t;return e=null!==e&&e!==r&&e,void 0===this.$chart?"Error: orgchart does not exist":this.$chart.find(".node").length?(t=!0,this.$chart.find(".node").each(function(){if(!this.id)return t=!1}),t?this.loopChart(this.$chart,e):"Error: All nodes of orghcart to be exported must have data-id attribute!"):"Error: nodes do not exist"},getNodeState:function(e,t){var i={},n=!!e.closest("vertical").length;if("parent"===(t=t||"self")){if(n?(i=e.closest("ul").parents("ul")).length||(i=e.closest(".nodes")).length||(i=e.closest(".vertical").siblings(":first")):i=e.closest(".nodes").siblings(".node"),i.length)return i.is(".hidden")||!i.is(".hidden")&&i.closest(".nodes").is(".hidden")||!i.is(".hidden")&&i.closest(".vertical").is(".hidden")?{exist:!0,visible:!1}:{exist:!0,visible:!0}}else if("children"===t){if((i=n?e.parent().children("ul"):e.siblings(".nodes")).length)return i.is(".hidden")?{exist:!0,visible:!1}:{exist:!0,visible:!0}}else if("siblings"===t){if((i=n?e.closest("ul"):e.parent().siblings()).length&&(!n||1<i.children("li").length))return i.is(".hidden")||i.parent().is(".hidden")||n&&i.closest(".vertical").is(".hidden")?{exist:!0,visible:!1}:{exist:!0,visible:!0}}else if((i=e).length)return i.closest(".nodes").length&&i.closest(".nodes").is(".hidden")||i.closest(".hierarchy").length&&i.closest(".hierarchy").is(".hidden")||i.closest(".vertical").length&&(i.closest(".nodes").is(".hidden")||i.closest(".vertical").is(".hidden"))?{exist:!0,visible:!1}:{exist:!0,visible:!0};return{exist:!1,visible:!1}},getParent:function(e){return this.getRelatedNodes(e,"parent")},getChildren:function(e){return this.getRelatedNodes(e,"children")},getSiblings:function(e){return this.getRelatedNodes(e,"siblings")},getRelatedNodes:function(e,t){return e&&e instanceof l&&e.is(".node")?"parent"===t?e.closest(".nodes").siblings(".node"):"children"===t?e.siblings(".nodes").children(".hierarchy").find(".node:first"):"siblings"===t?e.closest(".hierarchy").siblings().find(".node:first"):l():l()},hideParentEnd:function(e){l(e.target).removeClass("sliding"),e.data.parent.addClass("hidden")},hideParent:function(e){var t=e.closest(".nodes").siblings(".node");t.find(".spinner").length&&e.closest(".orgchart").data("inAjax",!1),this.getNodeState(e,"siblings").visible&&this.hideSiblings(e),e.parent().addClass("isAncestorsCollapsed"),this.getNodeState(t).visible&&t.addClass("sliding slide-down").one("transitionend",{parent:t},this.hideParentEnd),this.getNodeState(t,"parent").visible&&this.hideParent(t)},showParentEnd:function(e){var t=e.data.node;l(e.target).removeClass("sliding"),this.isInAction(t)&&this.switchVerticalArrow(t.children(".topEdge"))},showParent:function(e){var t=e.closest(".nodes").siblings(".node").removeClass("hidden");e.closest(".hierarchy").removeClass("isAncestorsCollapsed"),this.repaint(t[0]),t.addClass("sliding").removeClass("slide-down").one("transitionend",{node:e},this.showParentEnd.bind(this))},stopAjax:function(e){e.find(".spinner").length&&e.closest(".orgchart").data("inAjax",!1)},isVisibleNode:function(e,t){return this.getNodeState(l(t)).visible},hideChildrenEnd:function(e){var t=e.data.node;e.data.animatedNodes.removeClass("sliding"),e.data.animatedNodes.closest(".nodes").addClass("hidden"),this.isInAction(t)&&this.switchVerticalArrow(t.children(".bottomEdge"))},hideChildren:function(e){e.closest(".hierarchy").addClass("isChildrenCollapsed");var t=e.siblings(".nodes"),i=(this.stopAjax(t),t.find(".node").filter(this.isVisibleNode.bind(this)));t.is(".vertical")||i.closest(".hierarchy").addClass("isCollapsedDescendant"),(t.is(".vertical")||t.find(".vertical").length)&&i.find(this.options.icons.expanded).removeClass(this.options.icons.expanded).addClass(this.options.icons.collapsed),this.repaint(i.get(0)),i.addClass("sliding slide-up").eq(0).one("transitionend",{animatedNodes:i,lowerLevel:t,node:e},this.hideChildrenEnd.bind(this))},showChildrenEnd:function(e){var t=e.data.node;e.data.animatedNodes.removeClass("sliding"),this.isInAction(t)&&this.switchVerticalArrow(t.children(".bottomEdge"))},showChildren:function(e){e.closest(".hierarchy").removeClass("isChildrenCollapsed");var t=e.siblings(".nodes"),i=t.is(".vertical"),t=(i?t.removeClass("hidden").find(".node"):t.removeClass("hidden").children(".hierarchy").find(".node:first")).filter(this.isVisibleNode.bind(this));i||(t.filter(":not(:only-child)").closest(".hierarchy").addClass("isChildrenCollapsed"),t.closest(".hierarchy").removeClass("isCollapsedDescendant")),this.repaint(t.get(0)),t.addClass("sliding").removeClass("slide-up").eq(0).one("transitionend",{node:e,animatedNodes:t},this.showChildrenEnd.bind(this))},hideSiblingsEnd:function(e){var t=this,i=e.data.node,n=e.data.nodeContainer,s=e.data.direction,s=s?"left"===s?n.prevAll(":not(.hidden)"):n.nextAll(":not(.hidden)"):n.siblings();e.data.animatedNodes.removeClass("sliding"),s.find(".node:gt(0)").filter(this.isVisibleNode.bind(this)).removeClass("slide-left slide-right").addClass(function(){return t.options.compact?"":"slide-up"}),s.find(".nodes, .vertical").addClass("hidden").end().addClass("hidden"),this.isInAction(i)&&this.switchHorizontalArrow(i)},hideSiblings:function(e,t){var i=e.closest(".hierarchy").addClass("isSiblingsCollapsed"),n=(i.siblings().find(".spinner").length&&e.closest(".orgchart").data("inAjax",!1),t?"left"===t?i.addClass("left-sibs").prevAll(".isSiblingsCollapsed").removeClass("isSiblingsCollapsed left-sibs").end().prevAll().addClass("isCollapsedSibling isChildrenCollapsed").find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-right"):i.addClass("right-sibs").nextAll(".isSiblingsCollapsed").removeClass("isSiblingsCollapsed right-sibs").end().nextAll().addClass("isCollapsedSibling isChildrenCollapsed").find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-left"):(i.prevAll().find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-right"),i.nextAll().find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-left"),i.siblings().addClass("isCollapsedSibling isChildrenCollapsed")),i.siblings().find(".sliding"));n.eq(0).one("transitionend",{node:e,nodeContainer:i,direction:t,animatedNodes:n},this.hideSiblingsEnd.bind(this))},showSiblingsEnd:function(e){var t=e.data.node;e.data.visibleNodes.removeClass("sliding"),this.isInAction(t)&&(this.switchHorizontalArrow(t),t.children(".topEdge").removeClass(this.options.icons.expandToUp).addClass(this.options.icons.collapseToDown))},showRelatedParentEnd:function(e){l(e.target).removeClass("sliding")},showSiblings:function(e,t){var i=l(),n=e.closest(".hierarchy"),i=(t?"left"===t?n.prevAll():n.nextAll():e.closest(".hierarchy").siblings()).removeClass("hidden"),s=e.closest(".nodes").siblings(".node"),n=(t?(n.removeClass(t+"-sibs"),n.is("[class*=-sibs]")||n.removeClass("isSiblingsCollapsed"),i.removeClass("isCollapsedSibling "+t+"-sibs")):(e.closest(".hierarchy").removeClass("isSiblingsCollapsed"),i.removeClass("isCollapsedSibling")),this.getNodeState(e,"parent").visible||(e.closest(".hierarchy").removeClass("isAncestorsCollapsed"),s.removeClass("hidden"),this.repaint(s[0]),s.addClass("sliding").removeClass("slide-down").one("transitionend",this.showRelatedParentEnd)),i.find(".node").filter(this.isVisibleNode.bind(this)));this.repaint(n.get(0)),n.addClass("sliding").removeClass("slide-left slide-right"),n.eq(0).one("transitionend",{node:e,visibleNodes:n},this.showSiblingsEnd.bind(this))},startLoading:function(e){var t=this.$chart;return(void 0===t.data("inAjax")||!0!==t.data("inAjax"))&&(e.addClass("hidden"),e.parent().append(`<i class="${this.options.icons.theme} ${this.options.icons.spinner} spinner"></i>`).children().not(".spinner").css("opacity",.2),t.data("inAjax",!0),l(".oc-export-btn").prop("disabled",!0),!0)},endLoading:function(e){var t=e.parent();e.removeClass("hidden"),t.find(".spinner").remove(),t.children().removeAttr("style"),this.$chart.data("inAjax",!1),l(".oc-export-btn").prop("disabled",!1)},isInAction:function(t){return[this.options.icons.expandToUp,this.options.icons.collapseToDown,this.options.icons.collapseToLeft,this.options.icons.expandToRight].some(e=>-1<t.children(".edge").attr("class").indexOf(e))},switchVerticalArrow:function(e){e.toggleClass(this.options.icons.expandToUp+" "+this.options.icons.collapseToDown)},switchHorizontalArrow:function(e){var t,i=this.options;i.toggleSiblingsResp&&(void 0===i.ajaxURL||e.closest(".nodes").data("siblingsLoaded"))?((t=e.parent().prev()).length&&(t.is(".hidden")?e.children(".leftEdge").addClass(i.icons.collapseToLeft).removeClass(i.icons.expandToRight):e.children(".leftEdge").addClass(i.icons.expandToRight).removeClass(i.icons.collapseToLeft)),(t=e.parent().next()).length&&(t.is(".hidden")?e.children(".rightEdge").addClass(i.icons.expandToRight).removeClass(i.icons.collapseToLeft):e.children(".rightEdge").addClass(i.icons.collapseToLeft).removeClass(i.icons.expandToRight))):(t=!!(t=e.parent().siblings()).length&&!t.is(".hidden"),e.children(".leftEdge").toggleClass(i.icons.expandToRight,t).toggleClass(i.icons.collapseToLeft,!t),e.children(".rightEdge").toggleClass(i.icons.collapseToLeft,t).toggleClass(i.icons.expandToRight,!t))},repaint:function(e){e&&(e.style.offsetWidth=e.offsetWidth)},nodeEnterLeaveHandler:function(e){var t,i,n,s=l(e.delegateTarget),o=!1;s.closest(".nodes.vertical").length?(t=s.children(".toggleBtn"),"mouseenter"===e.type?s.children(".toggleBtn").length&&(o=this.getNodeState(s,"children").visible,t.toggleClass(this.options.icons.collapsed,!o).toggleClass(this.options.icons.expanded,o)):t.removeClass(this.options.icons.collapsed+" "+this.options.icons.expanded)):(t=s.children(".topEdge"),s.children(".rightEdge"),i=s.children(".bottomEdge"),n=s.children(".leftEdge"),"mouseenter"===e.type?(t.length&&(o=this.getNodeState(s,"parent").visible,t.toggleClass(this.options.icons.expandToUp,!o).toggleClass(this.options.icons.collapseToDown,o)),i.length&&(o=this.getNodeState(s,"children").visible,i.toggleClass(this.options.icons.collapseToDown,!o).toggleClass(this.options.icons.expandToUp,o)),n.length&&this.switchHorizontalArrow(s)):s.children(".edge").removeClass(`${this.options.icons.expandToUp} ${this.options.icons.collapseToDown} ${this.options.icons.collapseToLeft} `+this.options.icons.expandToRight))},nodeClickHandler:function(e){this.$chart.find(".focused").removeClass("focused"),l(e.delegateTarget).addClass("focused")},loadNodes:function(t,e,i){var n=this;this.options;l.ajax({url:e,dataType:"json"}).done(function(e){n.$chart.data("inAjax")&&("parent"===t?l.isEmptyObject(e)||n.addParent(i.parent(),e):"children"===t?e.children.length&&n.addChildren(i.parent(),e[t]):n.addSiblings(i.parent(),e.siblings||e),n.triggerLoadEvent(i.parent(),t))}).fail(function(){console.log("Failed to get "+t+" data")}).always(function(){n.endLoading(i)})},HideFirstParentEnd:function(e){var e=e.data.topEdge,t=e.parent();this.isInAction(t)&&(this.switchVerticalArrow(e),this.switchHorizontalArrow(t))},topEdgeClickHandler:function(e){e.stopPropagation();var t,i=l(e.target),e=l(e.delegateTarget),n=this.getNodeState(e,"parent");n.exist?(t=e.closest(".nodes").siblings(".node")).is(".sliding")||(n.visible?(this.hideParent(e),t.one("transitionend",{topEdge:i},this.HideFirstParentEnd.bind(this)),this.triggerHideEvent(e,"parent")):(this.showParent(e),this.triggerShowEvent(e,"parent"))):this.startLoading(i)&&(n=this.options,t=l.isFunction(n.ajaxURL.parent)?n.ajaxURL.parent(e.data("nodeData")):n.ajaxURL.parent+e[0].id,this.loadNodes("parent",t,i))},bottomEdgeClickHandler:function(e){e.stopPropagation();var t=l(e.target),e=l(e.delegateTarget),i=this.getNodeState(e,"children");i.exist?e.siblings(".nodes").children().children(".node").is(".sliding")||(i.visible?(this.hideChildren(e),this.triggerHideEvent(e,"children")):(this.showChildren(e),this.triggerShowEvent(e,"children"))):this.startLoading(t)&&(i=this.options,i=l.isFunction(i.ajaxURL.children)?i.ajaxURL.children(e.data("nodeData")):i.ajaxURL.children+e[0].id,this.loadNodes("children",i,t))},hEdgeClickHandler:function(e){e.stopPropagation();var t,i,n=l(e.target),e=l(e.delegateTarget),s=this.options,o=this.getNodeState(e,"siblings");o.exist?e.closest(".hierarchy").siblings().find(".sliding").length||(s.toggleSiblingsResp?(t=e.closest(".hierarchy").prev(),i=e.closest(".hierarchy").next(),n.is(".leftEdge")?t.is(".hidden")?(this.showSiblings(e,"left"),this.triggerShowEvent(e,"siblings")):(this.hideSiblings(e,"left"),this.triggerHideEvent(e,"siblings")):i.is(".hidden")?(this.showSiblings(e,"right"),this.triggerShowEvent(e,"siblings")):(this.hideSiblings(e,"right"),this.triggerHideEvent(e,"siblings"))):o.visible?(this.hideSiblings(e),this.triggerHideEvent(e,"siblings")):(this.showSiblings(e),this.triggerShowEvent(e,"siblings"))):this.startLoading(n)&&(t=e[0].id,i=this.getNodeState(e,"parent").exist?l.isFunction(s.ajaxURL.siblings)?s.ajaxURL.siblings(e.data("nodeData")):s.ajaxURL.siblings+t:l.isFunction(s.ajaxURL.families)?s.ajaxURL.families(e.data("nodeData")):s.ajaxURL.families+t,this.loadNodes("siblings",i,n))},backToCompactHandler:function(e){l(e.delegateTarget).removeClass("looseMode").children(".backToCompactSymbol").addClass("hidden").end().children(".backToLooseSymbol").removeClass("hidden")},backToLooseHandler:function(e){l(e.delegateTarget).addClass("looseMode").children(".backToLooseSymbol").addClass("hidden").end().children(".backToCompactSymbol").removeClass("hidden")},expandVNodesEnd:function(e){e.data.vNodes.removeClass("sliding")},collapseVNodesEnd:function(e){e.data.vNodes.removeClass("sliding").closest("ul").addClass("hidden")},toggleVNodes:function(e){var e=l(e.target),t=e.parent().next(),i=t.find(".node"),n=t.children().children(".node");n.is(".sliding")||(e.toggleClass(this.options.icons.collapsed+" "+this.options.icons.expanded),i.eq(0).is(".slide-up")?(t.removeClass("hidden"),this.repaint(n.get(0)),n.addClass("sliding").removeClass("slide-up").eq(0).one("transitionend",{vNodes:n},this.expandVNodesEnd)):(i.addClass("sliding slide-up").eq(0).one("transitionend",{vNodes:i},this.collapseVNodesEnd),i.find(".toggleBtn").removeClass(this.options.icons.collapsed+" "+this.options.icons.expanded)))},createGhostNode:function(e){var t,i,n=l(e.target),s=this.options,e=e.originalEvent,o=/firefox/.test(h.navigator.userAgent.toLowerCase());if(c.querySelector(".ghost-node"))t=n.closest(".orgchart").children(".ghost-node").get(0),i=l(t).children().get(0);else{if(!(t=c.createElementNS("http://www.w3.org/2000/svg","svg")).classList)return;t.classList.add("ghost-node"),i=c.createElementNS("http://www.w3.org/2000/svg","rect"),t.appendChild(i),n.closest(".orgchart").append(t)}var a=n.closest(".orgchart").css("transform").split(","),d="t2b"===s.direction||"b2t"===s.direction,a=Math.abs(h.parseFloat(d?a[0].slice(a[0].indexOf("(")+1):a[1])),d=(t.setAttribute("width",d?n.outerWidth(!1):n.outerHeight(!1)),t.setAttribute("height",d?n.outerHeight(!1):n.outerWidth(!1)),i.setAttribute("x",5*a),i.setAttribute("y",5*a),i.setAttribute("width",120*a),i.setAttribute("height",40*a),i.setAttribute("rx",4*a),i.setAttribute("ry",4*a),i.setAttribute("stroke-width",+a),e.offsetX*a),r=e.offsetY*a;"l2r"===s.direction?(d=e.offsetY*a,r=e.offsetX*a):"r2l"===s.direction?(d=n.outerWidth(!1)-e.offsetY*a,r=e.offsetX*a):"b2t"===s.direction&&(d=n.outerWidth(!1)-e.offsetX*a,r=n.outerHeight(!1)-e.offsetY*a),o?(i.setAttribute("fill","rgb(255, 255, 255)"),i.setAttribute("stroke","rgb(191, 0, 0)"),(s=c.createElement("img")).src="data:image/svg+xml;utf8,"+(new XMLSerializer).serializeToString(t),e.dataTransfer.setDragImage(s,d,r)):e.dataTransfer.setDragImage&&e.dataTransfer.setDragImage(t,d,r)},getUpperLevel:function(e){return e.is(".node")?e.parents(".hierarchy").length:0},getLowerLevel:function(e){return e.is(".node")?e.closest(".hierarchy").find(".nodes").length+1:0},getLevelOrderNodes:function(e){if(!e)return[];var t=[],i=[];for(t.push(e);t.length;){for(var n=[],s=0;s<t.length;s++){var o=t.shift(),a=this.getChildren(o);a.length&&t.push(a.toArray().flat()),n.push(l(o))}i.push(n)}return i},filterAllowedDropNodes:function(i){var n=this.options,s=i.closest("[draggable]").hasClass("node"),o=i.closest(".nodes").siblings(".node"),a=i.closest(".hierarchy").find(".node");this.$chart.data("dragged",i).find(".node").each(function(e,t){s&&-1!==a.index(t)||n.dropCriteria&&!n.dropCriteria(i,o,l(t))||l(t).addClass("allowedDrop")})},dragstartHandler:function(e){e.originalEvent.dataTransfer.setData("text/html","hack for firefox"),"none"!==this.$chart.css("transform")&&this.createGhostNode(e),this.filterAllowedDropNodes(l(e.target))},dragoverHandler:function(e){l(e.delegateTarget).is(".allowedDrop")?e.preventDefault():e.originalEvent.dataTransfer.dropEffect="none"},dragendHandler:function(e){this.$chart.find(".allowedDrop").removeClass("allowedDrop")},dropHandler:async function(e){var t,i,n,s,o,e=l(e.delegateTarget),a=this.$chart.data("dragged");a.hasClass("node")?e.hasClass("allowedDrop")&&(t=a.closest(".nodes").siblings(".node"),i=l.Event("nodedrop.orgchart"),this.$chart.trigger(i,{draggedNode:a,dragZone:t,dropZone:e}),i.isDefaultPrevented()||(i=this.$chart.data("options").data,o=(s=new JSONDigger(i,this.$chart.data("options").nodeId,"children")).findOneNode({hybrid:!0}),1<this.$chart.data("options").verticalLevel||o?(o=s.findNodeById(a.data("nodeData").id),n=Object.assign({},o),s.removeNode(o.id),(o=s.findNodeById(e.data("nodeData").id)).children?o.children.push(n):o.children=[n],this.init({data:i})):(e.siblings(".nodes").length?(s=`<i class="edge horizontalEdge rightEdge ${this.options.icons.theme}"></i><i class="edge horizontalEdge leftEdge ${this.options.icons.theme}"></i>`,a.find(".horizontalEdge").length||a.append(s),e.siblings(".nodes").append(a.closest(".hierarchy")),1===(o=a.closest(".hierarchy").siblings().find(".node:first")).length&&o.append(s)):(e.append(`<i class="edge verticalEdge bottomEdge ${this.options.icons.theme}"></i>`).after('<ul class="nodes"></ul>').siblings(".nodes").append(a.find(".horizontalEdge").remove().end().closest(".hierarchy")),e.children(".title").length&&e.children(".title").prepend(`<i class="${this.options.icons.theme} ${this.$chart.data("options").icons.parentNode} parentNodeSymbol"></i>`)),1===t.siblings(".nodes").children(".hierarchy").length?t.siblings(".nodes").children(".hierarchy").find(".node:first").find(".horizontalEdge").remove():0===t.siblings(".nodes").children(".hierarchy").length&&t.find(".bottomEdge, .parentNodeSymbol").remove().end().siblings(".nodes").remove()))):this.$chart.triggerHandler({type:"otherdropped.orgchart",draggedItem:a,dropZone:e})},touchstartHandler:function(e){this.touchHandled||e.touches&&1<e.touches.length||(this.touchHandled=!0,this.touchMoved=!1,e.preventDefault())},touchmoveHandler:function(e){var t;!this.touchHandled||e.touches&&1<e.touches.length||(e.preventDefault(),this.touchMoved||(this.filterAllowedDropNodes(l(e.currentTarget)),this.touchDragImage=this.createDragImage(e,this.$chart.data("dragged")[0])),this.touchMoved=!0,this.moveDragImage(e,this.touchDragImage),0<(e=l(c.elementFromPoint(e.touches[0].clientX,e.touches[0].clientY)).closest("div.node")).length&&(t=e[0],e.is(".allowedDrop"))?this.touchTargetNode=t:this.touchTargetNode=null)},touchendHandler:function(e){var t,i;this.touchHandled&&(this.destroyDragImage(),this.touchMoved?(this.touchTargetNode&&(t={delegateTarget:this.touchTargetNode},this.dropHandler(t),this.touchTargetNode=null),this.dragendHandler(e)):(t=e.changedTouches[0],(i=c.createEvent("MouseEvents")).initMouseEvent("click",!0,!0,h,1,t.screenX,t.screenY,t.clientX,t.clientY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,0,null),e.target.dispatchEvent(i)),this.touchHandled=!1)},createDragImage:function(e,t){var i=t.cloneNode(!0),t=(this.copyStyle(t,i),i.style.top=i.style.left="-9999px",t.getBoundingClientRect()),e=this.getTouchPoint(e);return this.touchDragImageOffset={x:e.x-t.left,y:e.y-t.top},i.style.opacity="0.5",c.body.appendChild(i),i},destroyDragImage:function(){this.touchDragImage&&this.touchDragImage.parentElement&&this.touchDragImage.parentElement.removeChild(this.touchDragImage),this.touchDragImageOffset=null,this.touchDragImage=null},copyStyle:function(e,t){["id","class","style","draggable"].forEach(function(e){t.removeAttribute(e)}),e instanceof HTMLCanvasElement&&((n=t).width=(i=e).width,n.height=i.height,n.getContext("2d").drawImage(i,0,0));for(var i,n,s=getComputedStyle(e),o=0;o<s.length;o++){var a=s[o];a.indexOf("transition")<0&&(t.style[a]=s[a])}t.style.pointerEvents="none";for(o=0;o<e.children.length;o++)this.copyStyle(e.children[o],t.children[o])},getTouchPoint:function(e){return{x:(e=e&&e.touches?e.touches[0]:e).clientX,y:e.clientY}},moveDragImage:function(i,n){var s;i&&n&&(s=this,requestAnimationFrame(function(){var e=s.getTouchPoint(i),t=n.style;t.position="absolute",t.pointerEvents="none",t.zIndex="999999",s.touchDragImageOffset&&(t.left=Math.round(e.x-s.touchDragImageOffset.x)+"px",t.top=Math.round(e.y-s.touchDragImageOffset.y)+"px")}))},bindDragDrop:function(e){e.on("dragstart",this.dragstartHandler.bind(this)).on("dragover",this.dragoverHandler.bind(this)).on("dragend",this.dragendHandler.bind(this)).on("drop",this.dropHandler.bind(this)).on("touchstart",this.touchstartHandler.bind(this)).on("touchmove",this.touchmoveHandler.bind(this)).on("touchend",this.touchendHandler.bind(this))},createNode:function(i){var n=this.options,e=i.level,t=(i.children&&i[n.nodeId]&&l.each(i.children,function(e,t){t.parentId=i[n.nodeId]}),l("<div"+(n.draggable?' draggable="true"':"")+(i[n.nodeId]?' id="'+i[n.nodeId]+'"':"")+(i.parentId?' data-parent="'+i.parentId+'"':"")+">").addClass("node "+(i.className||"")+(e>n.visibleLevel?" slide-up":""))),s=(n.nodeTemplate?t.append(n.nodeTemplate(i)):t.append('<div class="title">'+i[n.nodeTitle]+"</div>").append(void 0!==n.nodeContent?'<div class="content">'+(i[n.nodeContent]||"")+"</div>":""),l.extend({},i)),s=(delete s.children,t.data("nodeData",s),i.relationship||"");return n.verticalLevel&&e>=n.verticalLevel||i.vertical?Number(s.substr(2,1))&&t.append(`<i class="toggleBtn ${n.icons.theme}"></i>`).children(".title").prepend(`<i class="${n.icons.theme} ${n.icons.parentNode} parentNodeSymbol"></i>`):i.hybrid?Number(s.substr(2,1))&&t.append(`<i class="edge verticalEdge bottomEdge ${n.icons.theme}"></i>`).children(".title").prepend(`<i class="${n.icons.theme} ${n.icons.parentNode} parentNodeSymbol"></i>`):i.compact?(t.css("grid-template-columns",`repeat(${Math.floor(Math.sqrt(i.children.length+1))}, auto)`),Number(s.substr(2,1))&&t.append(`
|
|
2
2
|
<i class="${n.icons.theme} ${n.icons.backToCompact} backToCompactSymbol hidden"></i>
|
|
3
3
|
<i class="${n.icons.theme} ${n.icons.backToLoose} backToLooseSymbol"></i>
|
|
4
4
|
`).children(".title").prepend(`<i class="${n.icons.theme} ${n.icons.parentNode} parentNodeSymbol"></i>`)):i.associatedCompact||(Number(s.substr(0,1))&&t.append(`<i class="edge verticalEdge topEdge ${n.icons.theme}"></i>`),Number(s.substr(1,1))&&t.append(`<i class="edge horizontalEdge rightEdge ${n.icons.theme}"></i><i class="edge horizontalEdge leftEdge ${n.icons.theme}"></i>`),Number(s.substr(2,1))&&t.append(`<i class="edge verticalEdge bottomEdge ${n.icons.theme}"></i>`).children(".title").prepend(`<i class="${n.icons.theme} ${n.icons.parentNode} parentNodeSymbol"></i>`)),t.on("mouseenter mouseleave",this.nodeEnterLeaveHandler.bind(this)),t.on("click",this.nodeClickHandler.bind(this)),t.on("click",".topEdge",this.topEdgeClickHandler.bind(this)),t.on("click",".bottomEdge",this.bottomEdgeClickHandler.bind(this)),t.on("click",".leftEdge, .rightEdge",this.hEdgeClickHandler.bind(this)),t.on("click",".toggleBtn",this.toggleVNodes.bind(this)),t.on("click","> .backToCompactSymbol",this.backToCompactHandler.bind(this)),t.on("click","> .backToLooseSymbol",this.backToLooseHandler.bind(this)),n.draggable&&(this.bindDragDrop(t),this.touchHandled=!1,this.touchMoved=!1,this.touchTargetNode=null),n.createNode&&n.createNode(t,i),t},buildHierarchy:function(e,t){var i,n,s,o=this,a=this.options,d=0,d=t.level||(t.level=e.parentsUntil(".orgchart",".nodes").length);2<Object.keys(t).length&&(i=this.createNode(t),e.append(i)),t.children&&t.children.length&&(n=d+1>a.visibleLevel||t.collapsed!==r&&t.collapsed,a.verticalLevel&&d+1>=a.verticalLevel||t.hybrid?(s=l('<ul class="nodes">'),n&&a.verticalLevel&&d+1>=a.verticalLevel&&s.addClass("hidden"),(a.verticalLevel&&d+1===a.verticalLevel||t.hybrid)&&!e.closest(".vertical").length?e.append(s.addClass("vertical")):e.append(s)):t.compact?i.addClass("compact"):(s=l('<ul class="nodes'+(n?" hidden":"")+'">'),2!==Object.keys(t).length&&n&&e.addClass("isChildrenCollapsed"),e.append(s)),l.each(t.children,function(){var e;this.level=d+1,t.compact?o.buildHierarchy(i,this):(e=l('<li class="hierarchy">'),s.append(e),o.buildHierarchy(e,this))}))},buildChildNode:function(e,t){this.buildHierarchy(e,{children:t})},addChildren:function(e,t){this.buildChildNode(e.closest(".hierarchy"),t),e.find(".parentNodeSymbol").length||e.children(".title").prepend(`<i class="${this.options.icons.theme} ${this.options.icons.parentNode} parentNodeSymbol"></i>`),e.closest(".nodes.vertical").length?e.children(".toggleBtn").length||e.append(`<i class="toggleBtn ${this.options.icons.theme}"></i>`):e.children(".bottomEdge").length||e.append(`<i class="edge verticalEdge bottomEdge ${this.options.icons.theme}"></i>`),this.isInAction(e)&&this.switchVerticalArrow(e.children(".bottomEdge"))},buildParentNode:function(e,t){t.relationship=t.relationship||"001";t=l('<ul class="nodes"><li class="hierarchy"></li></ul>').find(".hierarchy").append(this.createNode(t)).end();this.$chart.prepend(t).find(".hierarchy:first").append(e.closest("ul").addClass("nodes"))},addParent:function(e,t){this.buildParentNode(e,t),e.children(".topEdge").length||e.children(".title").after(`<i class="edge verticalEdge topEdge ${this.options.icons.theme}"></i>`),this.isInAction(e)&&this.switchVerticalArrow(e.children(".topEdge"))},buildSiblingNode:function(e,t){var i,n=(l.isArray(t)?t:t.children).length,s=e.parent().is(".nodes")?e.siblings().length+1:1,n=s+n,n=1<n?Math.floor(n/2-1):0;e.closest(".nodes").parent().is(".hierarchy")?(this.buildChildNode(e.parent().closest(".hierarchy"),t),i=e.parent().closest(".hierarchy").children(".nodes:last").children(".hierarchy"),1<s?i.eq(0).before(e.siblings().addBack().unwrap()):i.eq(n).after(e.unwrap())):(this.buildHierarchy(e.parent().prepend(l('<li class="hierarchy">')).children(".hierarchy:first"),t),e.prevAll(".hierarchy").children(".nodes").children().eq(n).after(e))},addSiblings:function(e,t){this.buildSiblingNode(e.closest(".hierarchy"),t),e.closest(".nodes").data("siblingsLoaded",!0),e.children(".leftEdge").length||e.children(".topEdge").after(`<i class="edge horizontalEdge rightEdge ${this.options.icons.theme}"></i><i class="edge horizontalEdge leftEdge ${this.options.icons.theme}"></i>`),this.isInAction(e)&&(this.switchHorizontalArrow(e),e.children(".topEdge").removeClass(this.options.icons.expandToUp).addClass(this.options.icons.collapseToDown))},removeNodes:function(e){var t=e.closest(".hierarchy").parent();t.parent().is(".hierarchy")?this.getNodeState(e,"siblings").exist?(e.closest(".hierarchy").remove(),1===t.children().length&&t.find(".node:first .horizontalEdge").remove()):t.siblings(".node").find(".bottomEdge").remove().end().end().remove():t.closest(".orgchart").remove()},hideDropZones:function(){this.$chart.find(".allowedDrop").removeClass("allowedDrop")},showDropZones:function(e){this.$chart.find(".node").each(function(e,t){l(t).addClass("allowedDrop")}),this.$chart.data("dragged",l(e))},processExternalDrop:function(e,t){t&&this.$chart.data("dragged",l(t)),e.closest(".node").triggerHandler({type:"drop"})},exportPDF:function(e,t){var i={},n=Math.floor(e.width),s=Math.floor(e.height);h.jsPDF||(h.jsPDF=h.jspdf.jsPDF),(i=s<n?new jsPDF({orientation:"landscape",unit:"px",format:[n,s]}):new jsPDF({orientation:"portrait",unit:"px",format:[s,n]})).addImage(e.toDataURL(),"png",0,0),i.save(t+".pdf")},exportPNG:function(e,t){var i="WebkitAppearance"in c.documentElement.style,n=!!h.sidebar,s="Microsoft Internet Explorer"===navigator.appName||"Netscape"===navigator.appName&&-1<navigator.appVersion.indexOf("Edge"),o=this.$chartContainer;!i&&!n||s?h.navigator.msSaveBlob(e.msToBlob(),t+".png"):(i=".download-btn"+(""!==this.options.chartClass?"."+this.options.chartClass:""),o.find(i).length||o.append('<a class="download-btn'+(""!==this.options.chartClass?" "+this.options.chartClass:"")+'" download="'+t+'.png"></a>'),o.find(i).attr("href",e.toDataURL())[0].click())},export:function(t,i){var n=this;if(t=void 0!==t?t:this.options.exportFilename,i=void 0!==i?i:this.options.exportFileextension,l(this).children(".spinner").length)return!1;var s=this.$chartContainer,e=s.find(".mask"),e=(e.length?e.removeClass("hidden"):s.append(`<div class="mask"><i class="${this.options.icons.theme} ${this.options.icons.spinner} spinner"></i></div>`),s.addClass("canvasContainer").find('.orgchart:not(".hidden")').get(0)),o="l2r"===n.options.direction||"r2l"===n.options.direction;html2canvas(e,{width:o?e.clientHeight:e.clientWidth,height:o?e.clientWidth:e.clientHeight,onclone:function(e){l(e).find(".canvasContainer").css("overflow","visible").find('.orgchart:not(".hidden"):first').css("transform","")}}).then(function(e){s.find(".mask").addClass("hidden"),"pdf"===i.toLowerCase()?n.exportPDF(e,t):n.exportPNG(e,t),s.removeClass("canvasContainer")},function(){s.removeClass("canvasContainer")})}},l.fn.orgchart=function(e){return new t(this,e).init()}});
|
|
@@ -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 'icons': {\n 'theme': 'oci',\n 'parentNode': 'oci-menu',\n 'expandToUp': 'oci-chevron-up',\n 'collapseToDown': 'oci-chevron-down',\n 'collapseToLeft': 'oci-chevron-left',\n 'expandToRight': 'oci-chevron-right',\n 'backToCompact': 'oci-corner-top-left',\n 'backToLoose': 'oci-corner-bottom-right',\n 'collapsed': 'oci-plus-square',\n 'expanded': 'oci-minus-square',\n 'spinner': 'oci-spinner'\n },\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 '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=\"${this.options.icons.theme} ${this.options.icons.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 handleCompactNodes: function () {\n // caculate the compact nodes' level which is used to add different styles\n this.$chart.find('.node.compact')\n .each((index, node) => {\n $(node).addClass($(node).parents('.compact').length % 2 === 0 ? 'even' : 'odd');\n }); // the following code snippets is used to add direction arrows for the most top compact node, however the styles is not adjusted correctly\n // .filter((index, node) => !$(node).parent().is('.compact'))\n // .each((index, node) => {\n // $(node).append(`<i class=\"edge verticalEdge topEdge ${this.options.icons.theme}\"></i>`);\n // if (this.getSiblings($(node)).length) {\n // $(node).append(`<i class=\"edge horizontalEdge rightEdge ${this.options.icons.theme}\"></i><i class=\"edge horizontalEdge leftEdge ${this.options.icons.theme}\"></i>`);\n // }\n // });\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 that.handleCompactNodes();\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 // process datasource and add necessary information\n attachRel: function (data, flags) {\n var that = this;\n data.relationship = flags + (data.children && data.children.length > 0 ? 1 : 0);\n if (this.options?.compact?.constructor === Function && this.options.compact(data)) {\n data.compact = true;\n }\n if (data.children) {\n data.children.forEach(function(item) {\n if (data.hybrid || data.vertical) { // identify all the descendant nodes except the root node of hybrid structure\n item.vertical = true;\n } else if (data.compact && item.children) { // identify all the compact ancestor nodes\n item.compact = true;\n } else if (data.compact && !item.children) { // identify all the compact descendant nodes\n item.associatedCompact = 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(this.options.icons.expanded).removeClass(this.options.icons.expanded).addClass(this.options.icons.collapsed);\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(this.options.icons.expandToUp).addClass(this.options.icons.collapseToDown);\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=\"${this.options.icons.theme} ${this.options.icons.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 [\n this.options.icons.expandToUp,\n this.options.icons.collapseToDown,\n this.options.icons.collapseToLeft,\n this.options.icons.expandToRight\n ].some((icon) => $node.children('.edge').attr('class').indexOf(icon) > -1);\n },\n //\n switchVerticalArrow: function ($arrow) {\n $arrow.toggleClass(`${this.options.icons.expandToUp} ${this.options.icons.collapseToDown}`);\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(opts.icons.collapseToLeft).removeClass(opts.icons.expandToRight);\n } else {\n $node.children('.leftEdge').addClass(opts.icons.expandToRight).removeClass(opts.icons.collapseToLeft);\n }\n }\n var $nextSib = $node.parent().next();\n if ($nextSib.length) {\n if ($nextSib.is('.hidden')) {\n $node.children('.rightEdge').addClass(opts.icons.expandToRight).removeClass(opts.icons.collapseToLeft);\n } else {\n $node.children('.rightEdge').addClass(opts.icons.collapseToLeft).removeClass(opts.icons.expandToRight);\n }\n }\n } else {\n var $sibs = $node.parent().siblings();\n var sibsVisible = $sibs.length ? !$sibs.is('.hidden') : false;\n $node.children('.leftEdge').toggleClass(opts.icons.expandToRight, sibsVisible).toggleClass(opts.icons.collapseToLeft, !sibsVisible);\n $node.children('.rightEdge').toggleClass(opts.icons.collapseToLeft, sibsVisible).toggleClass(opts.icons.expandToRight, !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(this.options.icons.collapsed, !flag).toggleClass(this.options.icons.expanded, flag);\n }\n } else {\n $toggleBtn.removeClass(`${this.options.icons.collapsed} ${this.options.icons.expanded}`);\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(this.options.icons.expandToUp, !flag).toggleClass(this.options.icons.collapseToDown, flag);\n }\n if ($bottomEdge.length) {\n flag = this.getNodeState($node, 'children').visible;\n $bottomEdge.toggleClass(this.options.icons.collapseToDown, !flag).toggleClass(this.options.icons.expandToUp, flag);\n }\n if ($leftEdge.length) {\n this.switchHorizontalArrow($node);\n }\n } else {\n $node.children('.edge').removeClass(`${this.options.icons.expandToUp} ${this.options.icons.collapseToDown} ${this.options.icons.collapseToLeft} ${this.options.icons.expandToRight}`);\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 // show the compact node's children in the compact mode\n backToCompactHandler: function (event) {\n $(event.delegateTarget).removeClass('looseMode')\n .children('.backToCompactSymbol').addClass('hidden').end()\n .children('.backToLooseSymbol').removeClass('hidden');\n },\n // show the compact node's children in the loose mode \n backToLooseHandler: function (event) {\n $(event.delegateTarget)\n .addClass('looseMode')\n .children('.backToLooseSymbol').addClass('hidden').end()\n .children('.backToCompactSymbol').removeClass('hidden');\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(`${this.options.icons.collapsed} ${this.options.icons.expanded}`);\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(`${this.options.icons.collapsed} ${this.options.icons.expanded}`);\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({ 'hybrid': 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 ${this.options.icons.theme}\"></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=\"${this.options.icons.theme} ${this.$chart.data('options').icons.parentNode} parentNodeSymbol\"></i>`);\n }\n } else {\n var horizontalEdges = `<i class=\"edge horizontalEdge rightEdge ${this.options.icons.theme}\"></i><i class=\"edge horizontalEdge leftEdge ${this.options.icons.theme}\"></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, .parentNodeSymbol').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 or reset buttons\n var flags = data.relationship || '';\n if ((opts.verticalLevel && level >= opts.verticalLevel) || data.vertical) {\n if (Number(flags.substr(2,1))) {\n $nodeDiv.append(`<i class=\"toggleBtn ${opts.icons.theme}\"></i>`)\n .children('.title').prepend(`<i class=\"${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol\"></i>`);\n }\n } else if (data.hybrid) {\n if (Number(flags.substr(2,1))) {\n $nodeDiv.append(`<i class=\"edge verticalEdge bottomEdge ${opts.icons.theme}\"></i>`)\n .children('.title').prepend(`<i class=\"${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol\"></i>`);\n }\n } else if (data.compact) {\n $nodeDiv.css('grid-template-columns', `repeat(${Math.floor(Math.sqrt(data.children.length + 1))}, auto)`);\n if (Number(flags.substr(2,1))) {\n $nodeDiv.append(`\n <i class=\"${opts.icons.theme} ${opts.icons.backToCompact} backToCompactSymbol hidden\"></i>\n <i class=\"${opts.icons.theme} ${opts.icons.backToLoose} backToLooseSymbol\"></i>\n `)\n .children('.title').prepend(`<i class=\"${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol\"></i>`);\n }\n } else if (data.associatedCompact) {\n \n } else {\n if (Number(flags.substr(0,1))) {\n $nodeDiv.append(`<i class=\"edge verticalEdge topEdge ${opts.icons.theme}\"></i>`);\n }\n if(Number(flags.substr(1,1))) {\n $nodeDiv.append(`<i class=\"edge horizontalEdge rightEdge ${opts.icons.theme}\"></i><i class=\"edge horizontalEdge leftEdge ${opts.icons.theme}\"></i>`);\n }\n if(Number(flags.substr(2,1))) {\n $nodeDiv.append(`<i class=\"edge verticalEdge bottomEdge ${opts.icons.theme}\"></i>`)\n .children('.title').prepend(`<i class=\"${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol\"></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 $nodeDiv.on('click', '> .backToCompactSymbol',this.backToCompactHandler.bind(this));\n $nodeDiv.on('click', '> .backToLooseSymbol',this.backToLooseHandler.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 var $nodeDiv;\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 $nodeDiv = this.createNode(data);\n $appendTo.append($nodeDiv);\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.hybrid) {\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.hybrid)\n && !$appendTo.closest('.vertical').length) {\n $appendTo.append($nodesLayer.addClass('vertical'));\n } else {\n $appendTo.append($nodesLayer);\n }\n } else if (data.compact) {\n $nodeDiv.addClass('compact');\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 this.level = level + 1;\n if (data.compact) {\n that.buildHierarchy($nodeDiv, this);\n } else {\n var $nodeCell = $('<li class=\"hierarchy\">');\n $nodesLayer.append($nodeCell);\n that.buildHierarchy($nodeCell, this);\n }\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('.parentNodeSymbol').length) {\n $node.children('.title').prepend(`<i class=\"${this.options.icons.theme} ${this.options.icons.parentNode} parentNodeSymbol\"></i>`);\n }\n if ($node.closest('.nodes.vertical').length) {\n if (!$node.children('.toggleBtn').length) {\n $node.append(`<i class=\"toggleBtn ${this.options.icons.theme}\"></i>`);\n }\n } else {\n if (!$node.children('.bottomEdge').length) {\n $node.append(`<i class=\"edge verticalEdge bottomEdge ${this.options.icons.theme}\"></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 ${this.options.icons.theme}\"></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 ${this.options.icons.theme}\"></i><i class=\"edge horizontalEdge leftEdge ${this.options.icons.theme}\"></i>`);\n }\n if (this.isInAction($node)) {\n this.switchHorizontalArrow($node);\n $node.children('.topEdge').removeClass(this.options.icons.expandToUp).addClass(this.options.icons.collapseToDown);\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 = '.download-btn' + (that.options.chartClass !== '' ? '.' + that.options.chartClass : '');\n\n if (!$chartContainer.find(selector).length) {\n $chartContainer.append('<a class=\"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=\"${this.options.icons.theme} ${this.options.icons.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","icons","theme","parentNode","expandToUp","collapseToDown","collapseToLeft","expandToRight","backToCompact","backToLoose","collapsed","expanded","spinner","nodeTitle","nodeId","toggleSiblingsResp","visibleLevel","chartClass","exportButton","exportButtonName","exportFilename","exportFileextension","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","handleCompactNodes","each","index","node","addClass","parents","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","key","value","push","flags","compact","constructor","Function","forEach","item","hybrid","vertical","associatedCompact","loopChart","includeNodeData","$node","id","getHierarchy","valid","getNodeState","relation","isVerticalNode","exist","visible","getParent","getRelatedNodes","getChildren","getSiblings","hideParentEnd","hideParent","$parent","hideSiblings","one","showParentEnd","isInAction","switchVerticalArrow","showParent","repaint","bind","stopAjax","$nodeLevel","isVisibleNode","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","some","attr","icon","$arrow","toggleClass","sibsVisible","$prevSib","prev","$nextSib","next","$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","backToCompactHandler","backToLooseHandler","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","floor","$appendTo","isHidden","$nodesLayer","parentsUntil","keys","$nodeCell","buildChildNode","buildParentNode","$currentRoot","$newRootWrapper","buildSiblingNode","$nodeChart","newSiblingCount","isArray","existingSibligCount","siblingCount","insertPostion","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 'icons': {\n 'theme': 'oci',\n 'parentNode': 'oci-menu',\n 'expandToUp': 'oci-chevron-up',\n 'collapseToDown': 'oci-chevron-down',\n 'collapseToLeft': 'oci-chevron-left',\n 'expandToRight': 'oci-chevron-right',\n 'backToCompact': 'oci-corner-top-left',\n 'backToLoose': 'oci-corner-bottom-right',\n 'collapsed': 'oci-plus-square',\n 'expanded': 'oci-minus-square',\n 'spinner': 'oci-spinner'\n },\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 '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=\"${this.options.icons.theme} ${this.options.icons.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 handleCompactNodes: function () {\n // caculate the compact nodes' level which is used to add different styles\n this.$chart.find('.node.compact')\n .each((index, node) => {\n $(node).addClass($(node).parents('.compact').length % 2 === 0 ? 'even' : 'odd');\n }); // the following code snippets is used to add direction arrows for the most top compact node, however the styles is not adjusted correctly\n // .filter((index, node) => !$(node).parent().is('.compact'))\n // .each((index, node) => {\n // $(node).append(`<i class=\"edge verticalEdge topEdge ${this.options.icons.theme}\"></i>`);\n // if (this.getSiblings($(node)).length) {\n // $(node).append(`<i class=\"edge horizontalEdge rightEdge ${this.options.icons.theme}\"></i><i class=\"edge horizontalEdge leftEdge ${this.options.icons.theme}\"></i>`);\n // }\n // });\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 that.handleCompactNodes();\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 // process datasource and add necessary information\n attachRel: function (data, flags) {\n var that = this;\n data.relationship = flags + (data.children && data.children.length > 0 ? 1 : 0);\n if (this.options?.compact?.constructor === Function && this.options.compact(data)) {\n data.compact = true;\n }\n if (data.children) {\n data.children.forEach(function(item) {\n if (data.hybrid || data.vertical) { // identify all the descendant nodes except the root node of hybrid structure\n item.vertical = true;\n } else if (data.compact && item.children) { // identify all the compact ancestor nodes\n item.compact = true;\n } else if (data.compact && !item.children) { // identify all the compact descendant nodes\n item.associatedCompact = 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(this.options.icons.expanded).removeClass(this.options.icons.expanded).addClass(this.options.icons.collapsed);\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 that = this;\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')\n .addClass(function() {\n if (that.options.compact) {\n return '';\n } else {\n return 'slide-up';\n }\n });\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(this.options.icons.expandToUp).addClass(this.options.icons.collapseToDown);\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=\"${this.options.icons.theme} ${this.options.icons.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 [\n this.options.icons.expandToUp,\n this.options.icons.collapseToDown,\n this.options.icons.collapseToLeft,\n this.options.icons.expandToRight\n ].some((icon) => $node.children('.edge').attr('class').indexOf(icon) > -1);\n },\n //\n switchVerticalArrow: function ($arrow) {\n $arrow.toggleClass(`${this.options.icons.expandToUp} ${this.options.icons.collapseToDown}`);\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(opts.icons.collapseToLeft).removeClass(opts.icons.expandToRight);\n } else {\n $node.children('.leftEdge').addClass(opts.icons.expandToRight).removeClass(opts.icons.collapseToLeft);\n }\n }\n var $nextSib = $node.parent().next();\n if ($nextSib.length) {\n if ($nextSib.is('.hidden')) {\n $node.children('.rightEdge').addClass(opts.icons.expandToRight).removeClass(opts.icons.collapseToLeft);\n } else {\n $node.children('.rightEdge').addClass(opts.icons.collapseToLeft).removeClass(opts.icons.expandToRight);\n }\n }\n } else {\n var $sibs = $node.parent().siblings();\n var sibsVisible = $sibs.length ? !$sibs.is('.hidden') : false;\n $node.children('.leftEdge').toggleClass(opts.icons.expandToRight, sibsVisible).toggleClass(opts.icons.collapseToLeft, !sibsVisible);\n $node.children('.rightEdge').toggleClass(opts.icons.collapseToLeft, sibsVisible).toggleClass(opts.icons.expandToRight, !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(this.options.icons.collapsed, !flag).toggleClass(this.options.icons.expanded, flag);\n }\n } else {\n $toggleBtn.removeClass(`${this.options.icons.collapsed} ${this.options.icons.expanded}`);\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(this.options.icons.expandToUp, !flag).toggleClass(this.options.icons.collapseToDown, flag);\n }\n if ($bottomEdge.length) {\n flag = this.getNodeState($node, 'children').visible;\n $bottomEdge.toggleClass(this.options.icons.collapseToDown, !flag).toggleClass(this.options.icons.expandToUp, flag);\n }\n if ($leftEdge.length) {\n this.switchHorizontalArrow($node);\n }\n } else {\n $node.children('.edge').removeClass(`${this.options.icons.expandToUp} ${this.options.icons.collapseToDown} ${this.options.icons.collapseToLeft} ${this.options.icons.expandToRight}`);\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 // show the compact node's children in the compact mode\n backToCompactHandler: function (event) {\n $(event.delegateTarget).removeClass('looseMode')\n .children('.backToCompactSymbol').addClass('hidden').end()\n .children('.backToLooseSymbol').removeClass('hidden');\n },\n // show the compact node's children in the loose mode \n backToLooseHandler: function (event) {\n $(event.delegateTarget)\n .addClass('looseMode')\n .children('.backToLooseSymbol').addClass('hidden').end()\n .children('.backToCompactSymbol').removeClass('hidden');\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(`${this.options.icons.collapsed} ${this.options.icons.expanded}`);\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(`${this.options.icons.collapsed} ${this.options.icons.expanded}`);\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({ 'hybrid': 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 ${this.options.icons.theme}\"></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=\"${this.options.icons.theme} ${this.$chart.data('options').icons.parentNode} parentNodeSymbol\"></i>`);\n }\n } else {\n var horizontalEdges = `<i class=\"edge horizontalEdge rightEdge ${this.options.icons.theme}\"></i><i class=\"edge horizontalEdge leftEdge ${this.options.icons.theme}\"></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, .parentNodeSymbol').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 or reset buttons\n var flags = data.relationship || '';\n if ((opts.verticalLevel && level >= opts.verticalLevel) || data.vertical) {\n if (Number(flags.substr(2,1))) {\n $nodeDiv.append(`<i class=\"toggleBtn ${opts.icons.theme}\"></i>`)\n .children('.title').prepend(`<i class=\"${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol\"></i>`);\n }\n } else if (data.hybrid) {\n if (Number(flags.substr(2,1))) {\n $nodeDiv.append(`<i class=\"edge verticalEdge bottomEdge ${opts.icons.theme}\"></i>`)\n .children('.title').prepend(`<i class=\"${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol\"></i>`);\n }\n } else if (data.compact) {\n $nodeDiv.css('grid-template-columns', `repeat(${Math.floor(Math.sqrt(data.children.length + 1))}, auto)`);\n if (Number(flags.substr(2,1))) {\n $nodeDiv.append(`\n <i class=\"${opts.icons.theme} ${opts.icons.backToCompact} backToCompactSymbol hidden\"></i>\n <i class=\"${opts.icons.theme} ${opts.icons.backToLoose} backToLooseSymbol\"></i>\n `)\n .children('.title').prepend(`<i class=\"${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol\"></i>`);\n }\n } else if (data.associatedCompact) {\n \n } else {\n if (Number(flags.substr(0,1))) {\n $nodeDiv.append(`<i class=\"edge verticalEdge topEdge ${opts.icons.theme}\"></i>`);\n }\n if(Number(flags.substr(1,1))) {\n $nodeDiv.append(`<i class=\"edge horizontalEdge rightEdge ${opts.icons.theme}\"></i><i class=\"edge horizontalEdge leftEdge ${opts.icons.theme}\"></i>`);\n }\n if(Number(flags.substr(2,1))) {\n $nodeDiv.append(`<i class=\"edge verticalEdge bottomEdge ${opts.icons.theme}\"></i>`)\n .children('.title').prepend(`<i class=\"${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol\"></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 $nodeDiv.on('click', '> .backToCompactSymbol',this.backToCompactHandler.bind(this));\n $nodeDiv.on('click', '> .backToLooseSymbol',this.backToLooseHandler.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 var $nodeDiv;\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 $nodeDiv = this.createNode(data);\n $appendTo.append($nodeDiv);\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.hybrid) {\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.hybrid)\n && !$appendTo.closest('.vertical').length) {\n $appendTo.append($nodesLayer.addClass('vertical'));\n } else {\n $appendTo.append($nodesLayer);\n }\n } else if (data.compact) {\n $nodeDiv.addClass('compact');\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 this.level = level + 1;\n if (data.compact) {\n that.buildHierarchy($nodeDiv, this);\n } else {\n var $nodeCell = $('<li class=\"hierarchy\">');\n $nodesLayer.append($nodeCell);\n that.buildHierarchy($nodeCell, this);\n }\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('.parentNodeSymbol').length) {\n $node.children('.title').prepend(`<i class=\"${this.options.icons.theme} ${this.options.icons.parentNode} parentNodeSymbol\"></i>`);\n }\n if ($node.closest('.nodes.vertical').length) {\n if (!$node.children('.toggleBtn').length) {\n $node.append(`<i class=\"toggleBtn ${this.options.icons.theme}\"></i>`);\n }\n } else {\n if (!$node.children('.bottomEdge').length) {\n $node.append(`<i class=\"edge verticalEdge bottomEdge ${this.options.icons.theme}\"></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 ${this.options.icons.theme}\"></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 ${this.options.icons.theme}\"></i><i class=\"edge horizontalEdge leftEdge ${this.options.icons.theme}\"></i>`);\n }\n if (this.isInAction($node)) {\n this.switchHorizontalArrow($node);\n $node.children('.topEdge').removeClass(this.options.icons.expandToUp).addClass(this.options.icons.collapseToDown);\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 = '.download-btn' + (that.options.chartClass !== '' ? '.' + that.options.chartClass : '');\n\n if (!$chartContainer.find(selector).length) {\n $chartContainer.append('<a class=\"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=\"${this.options.icons.theme} ${this.options.icons.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","icons","theme","parentNode","expandToUp","collapseToDown","collapseToLeft","expandToRight","backToCompact","backToLoose","collapsed","expanded","spinner","nodeTitle","nodeId","toggleSiblingsResp","visibleLevel","chartClass","exportButton","exportButtonName","exportFilename","exportFileextension","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","handleCompactNodes","each","index","node","addClass","parents","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","key","value","push","flags","compact","constructor","Function","forEach","item","hybrid","vertical","associatedCompact","loopChart","includeNodeData","$node","id","getHierarchy","valid","getNodeState","relation","isVerticalNode","exist","visible","getParent","getRelatedNodes","getChildren","getSiblings","hideParentEnd","hideParent","$parent","hideSiblings","one","showParentEnd","isInAction","switchVerticalArrow","showParent","repaint","bind","stopAjax","$nodeLevel","isVisibleNode","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","some","attr","icon","$arrow","toggleClass","sibsVisible","$prevSib","prev","$nextSib","next","$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","backToCompactHandler","backToLooseHandler","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","floor","$appendTo","isHidden","$nodesLayer","parentsUntil","keys","$nodeCell","buildChildNode","buildParentNode","$currentRoot","$newRootWrapper","buildSiblingNode","$nodeChart","newSiblingCount","isArray","existingSibligCount","siblingCount","insertPostion","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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orgchart",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.1",
|
|
4
4
|
"description": "Simple and direct organization chart(tree-like hierarchy) plugin based on pure DOM and jQuery.",
|
|
5
5
|
"main": "./dist/js/jquery.orgchart.min.js",
|
|
6
6
|
"style": [
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"browser-sync": "^2.26.7",
|
|
48
48
|
"chai": "^4.2.0",
|
|
49
|
-
"cypress": "^
|
|
49
|
+
"cypress": "^13.2.0",
|
|
50
50
|
"del": "^3.0.0",
|
|
51
51
|
"gulp": "^4.0.2",
|
|
52
52
|
"gulp-clean-css": "^3.10.0",
|
|
@@ -634,13 +634,21 @@
|
|
|
634
634
|
},
|
|
635
635
|
//
|
|
636
636
|
hideSiblingsEnd: function (event) {
|
|
637
|
+
var that = this;
|
|
637
638
|
var $node = event.data.node;
|
|
638
639
|
var $nodeContainer = event.data.nodeContainer;
|
|
639
640
|
var direction = event.data.direction;
|
|
640
641
|
var $siblings = direction ? (direction === 'left' ? $nodeContainer.prevAll(':not(.hidden)') : $nodeContainer.nextAll(':not(.hidden)')) : $nodeContainer.siblings();
|
|
641
642
|
event.data.animatedNodes.removeClass('sliding');
|
|
642
643
|
$siblings.find('.node:gt(0)').filter(this.isVisibleNode.bind(this))
|
|
643
|
-
.removeClass('slide-left slide-right')
|
|
644
|
+
.removeClass('slide-left slide-right')
|
|
645
|
+
.addClass(function() {
|
|
646
|
+
if (that.options.compact) {
|
|
647
|
+
return '';
|
|
648
|
+
} else {
|
|
649
|
+
return 'slide-up';
|
|
650
|
+
}
|
|
651
|
+
});
|
|
644
652
|
$siblings.find('.nodes, .vertical').addClass('hidden')
|
|
645
653
|
.end().addClass('hidden');
|
|
646
654
|
|
|
Binary file
|