orgchart 3.6.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +64 -4
  2. package/demo/css/fontawesome.min.css +9 -0
  3. package/demo/custom-icons.html +146 -0
  4. package/demo/data-prop-compact.html +82 -0
  5. package/demo/{isHybrid.html → data-prop-hybrid.html} +1 -1
  6. package/demo/index.html +3 -1
  7. package/demo/multiple-layers.html +4 -4
  8. package/demo/option-createNode.html +2 -2
  9. package/demo/pan-zoom.html +3 -0
  10. package/demo/vertical-level.html +17 -17
  11. package/demo/webfonts/fa-brands-400.ttf +0 -0
  12. package/demo/webfonts/fa-brands-400.woff2 +0 -0
  13. package/demo/webfonts/fa-regular-400.ttf +0 -0
  14. package/demo/webfonts/fa-regular-400.woff2 +0 -0
  15. package/demo/webfonts/fa-solid-900.ttf +0 -0
  16. package/demo/webfonts/fa-solid-900.woff2 +0 -0
  17. package/demo/webfonts/fa-v4compatibility.ttf +0 -0
  18. package/demo/webfonts/fa-v4compatibility.woff2 +0 -0
  19. package/dist/css/jquery.orgchart.css +311 -156
  20. package/dist/css/jquery.orgchart.min.css +1 -1
  21. package/dist/js/jquery.orgchart.js +128 -56
  22. package/dist/js/jquery.orgchart.min.js +4 -1
  23. package/dist/js/jquery.orgchart.min.js.map +1 -1
  24. package/gulpfile.js +1 -1
  25. package/package.json +1 -1
  26. package/src/css/jquery.orgchart.css +311 -156
  27. package/src/js/jquery.orgchart.js +128 -56
  28. package/test/integration/init-tests.js +8 -8
  29. package/test/visual-regression/zoom/__image_snapshots__/__diff_output__/test-js-orgchart-visual-regression-tests-zoomin-correctly-1-snap-diff.png +0 -0
  30. package/test/visual-regression/zoom/__image_snapshots__/__diff_output__/test-js-orgchart-visual-regression-tests-zoomout-correctly-1-snap-diff.png +0 -0
  31. package/test/visual-regression/zoom/__image_snapshots__/test-js-orgchart-visual-regression-tests-zoomin-correctly-1-snap.png +0 -0
  32. package/test/visual-regression/zoom/__image_snapshots__/test-js-orgchart-visual-regression-tests-zoomout-correctly-1-snap.png +0 -0
@@ -1 +1 @@
1
- .orgchart{box-sizing:border-box;display:inline-block;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:linear-gradient(90deg,rgba(200,0,0,.15) 10%,rgba(0,0,0,0) 10%),linear-gradient(rgba(200,0,0,.15) 10%,rgba(0,0,0,0) 10%);background-size:10px 10px;border:1px dashed transparent;padding:20px 20px 0 20px}.orgchart .hidden,.orgchart~.hidden{display:none!important}.orgchart.b2t{transform:rotate(180deg)}.orgchart.l2r{position:absolute;transform:rotate(-90deg) rotateY(180deg);transform-origin:left top;text-align:center}.orgchart.r2l{position:absolute;transform:rotate(90deg);transform-origin:left top;text-align:center}.orgchart~.mask{position:absolute;top:0;right:0;bottom:0;left:0;z-index:999;text-align:center;background-color:rgba(0,0,0,.3)}.orgchart~.mask .spinner{position:absolute;top:calc(50% - 50px);left:calc(50% - 50px)}.orgchart>.spinner::before,.orgchart~.mask .spinner::before{width:100px;height:100px;border-width:10px;border-radius:50px;border-top-color:rgba(68,157,68,.8);border-bottom-color:rgba(68,157,68,.8);border-left-color:rgba(68,157,68,.8)}.orgchart .nodes{display:flex;list-style:none;padding-left:0;margin:0}.orgchart .hierarchy{position:relative}.orgchart .hierarchy::before{content:"";position:absolute;top:-11px;left:0;width:100%;border-top:2px solid rgba(217,83,79,.8);box-sizing:border-box}.orgchart .hierarchy.isSiblingsCollapsed.left-sibs::before,.orgchart .hierarchy:first-child::before{left:calc(50% - 1px);width:calc(50% + 1px)}.orgchart .hierarchy.isSiblingsCollapsed.right-sibs::before,.orgchart .hierarchy:last-child::before{width:calc(50% + 1px)}.orgchart .hierarchy:not(.hidden):only-child::before{width:2px}.orgchart .isAncestorsCollapsed:only-child::before,.orgchart .isAncestorsCollapsed>.node::before,.orgchart .isChildrenCollapsed>.node:not(:only-child)::after,.orgchart .isCollapsedDescendant::before,.orgchart .isCollapsedDescendant>.node::after,.orgchart .isCollapsedDescendant>.node::before,.orgchart .isCollapsedSibling .hierarchy::before,.orgchart .isCollapsedSibling::before,.orgchart .isSiblingsCollapsed.left-sibs.right-sibs::before,.orgchart .isSiblingsCollapsed.left-sibs:last-child:before,.orgchart .isSiblingsCollapsed.right-sibs:first-child:before,.orgchart .isSiblingsCollapsed:not(.left-sibs):not(.right-sibs)::before,.orgchart>.nodes>.hierarchy::before{content:none}.orgchart .node:not(:only-child)::after{content:"";position:absolute;bottom:-11px;left:calc(50% - 1px);width:2px;height:9px;background-color:rgba(217,83,79,.8)}.orgchart ul li .node.allowedDrop{border-color:rgba(68,157,68,.9)}.orgchart ul li .node.currentDropTarget{background-color:rgba(68,157,68,.9)}.orgchart ul li .node.selected{background-color:rgba(238,217,54,.5)}.orgchart ul li .node:hover{background-color:rgba(238,217,54,.5)}.orgchart>ul>li>ul li>.node::before{content:"";position:absolute;top:var(--top,-11px);left:calc(50% - 1px);width:2px;height:var(--height,9px);background-color:rgba(217,83,79,.8)}.orgchart>ul>li>ul li.isSiblingsCollapsed>.node::before{top:var(--top-cross-point,-13px);height:var(--height-cross-point,11px)}.orgchart .node{box-sizing:border-box;display:inline-block;position:relative;margin:0 0 20px 0;padding:3px;border:2px dashed transparent;text-align:center}.orgchart.l2r .node,.orgchart.r2l .node{width:50px;height:140px}.orgchart .node:hover{background-color:rgba(238,217,54,.5);transition:.5s;cursor:default;z-index:20}.orgchart .node.focused{background-color:rgba(238,217,54,.5)}.orgchart .ghost-node{position:fixed;left:-10000px;top:-10000px}.orgchart .ghost-node rect{fill:#fff;stroke:#bf0000}.orgchart .node.allowedDrop{border-color:rgba(68,157,68,.9)}.orgchart .node>.spinner{position:absolute;top:calc(50% - 1rem);left:calc(50% - 1rem)}.orgchart .node>.spinner::before{width:2rem;height:2rem;border-width:.2rem;border-radius:1rem;border-top-color:rgba(68,157,68,.8);border-bottom-color:rgba(68,157,68,.8);border-left-color:rgba(68,157,68,.8)}.orgchart .node .title{box-sizing:border-box;padding:2px;width:130px;text-align:center;font-size:.75rem;font-weight:700;height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(217,83,79,.8);color:#fff;border-radius:4px 4px 0 0}.orgchart.b2t .node .title{transform:rotate(-180deg);transform-origin:center bottom}.orgchart.l2r .node .title{transform:rotate(-90deg) translate(-45px,-45px) rotateY(180deg);transform-origin:bottom center}.orgchart.r2l .node .title{transform:rotate(-90deg) translate(-45px,-45px);transform-origin:bottom center}.orgchart .node .title .symbol{float:left;margin-top:12px;margin-left:2px}.orgchart .node .title .symbol::before{background-color:#fff;border-color:rgba(217,83,79,.8)}.orgchart .node .title .symbol::after{background-color:#fff}.orgchart .node .content{box-sizing:border-box;padding:2px;height:20px;font-size:.625rem;border:1px solid rgba(217,83,79,.8);border-radius:0 0 4px 4px;text-align:center;background-color:#fff;color:#333;text-overflow:ellipsis;white-space:nowrap}.orgchart.b2t .node .content{transform:rotate(180deg);transform-origin:center top}.orgchart.l2r .node .content{transform:rotate(-90deg) translate(-45px,-45px) rotateY(180deg);transform-origin:top center;width:130px}.orgchart.r2l .node .content{transform:rotate(-90deg) translate(-45px,-45px);transform-origin:top center;width:130px}.orgchart .node .edge{position:absolute;cursor:default;transition:.2s}.orgchart .node .edge::before{border-color:rgba(68,157,68,.5)}.orgchart.noncollapsable .node .edge{display:none}.orgchart .node .edge:hover{cursor:pointer}.orgchart .edge:hover::before{border-color:#449d44}.orgchart .node .verticalEdge{width:calc(100% - 6px);width:-webkit-calc(100% - 6px);width:-moz-calc(100% - 6px);height:10px;left:3px}.orgchart .node .verticalEdge::before{position:absolute;left:calc(50% - .3125rem)}.orgchart .node .topEdge{top:-2px}.orgchart .node .topEdge.oci-chevron-up::before{top:2px}.orgchart .node .topEdge.oci-chevron-down::before{bottom:3px}.orgchart .node .bottomEdge{bottom:-2px}.orgchart .node .bottomEdge.oci-chevron-up::before{bottom:-3px}.orgchart .node .bottomEdge.oci-chevron-down::before{bottom:1px}.orgchart .node .horizontalEdge{width:10px;height:calc(100% - 6px);height:-webkit-calc(100% - 6px);height:-moz-calc(100% - 6px);top:3px}.orgchart .node .rightEdge{right:-2px}.orgchart .node .leftEdge{left:-2px}.orgchart .node .horizontalEdge::before{position:absolute;top:calc(50% - .3125rem)}.orgchart .node .rightEdge.oci-chevron-left::before{right:-3px}.orgchart .node .rightEdge.oci-chevron-right::before{right:1px}.orgchart .node .leftEdge.oci-chevron-right::before{left:-3px}.orgchart .node .leftEdge.oci-chevron-left::before{left:1px}.orgchart .node .toggleBtn{position:absolute;left:5px;bottom:-2px;width:1rem;height:1rem}.orgchart .node .toggleBtn::before{background-color:rgba(68,157,68,.6)}.orgchart .node .toggleBtn:hover::before{background-color:#449d44}.oc-export-btn{margin-left:.5rem;padding:.5rem 1rem}.orgchart .node{transition:transform .3s,opacity .3s}.orgchart .slide-down{opacity:0;transform:translateY(40px)}.orgchart.l2r .node.slide-down,.orgchart.r2l .node.slide-down{transform:translateY(130px)}.orgchart .slide-up{opacity:0;transform:translateY(-40px)}.orgchart.l2r .node.slide-up,.orgchart.r2l .node.slide-up{transform:translateY(-130px)}.orgchart .slide-right{opacity:0;transform:translateX(130px)}.orgchart.l2r .node.slide-right,.orgchart.r2l .node.slide-right{transform:translateX(40px)}.orgchart .slide-left{opacity:0;transform:translateX(-130px)}.orgchart.l2r .node.slide-left,.orgchart.r2l .node.slide-left{transform:translateX(-40px)}.orgchart .nodes.vertical{display:block;padding-left:18px}.orgchart .nodes.vertical .nodes{list-style:none;display:block;margin:0;padding-left:18px;text-align:left}.orgchart .nodes.vertical .node{margin-bottom:0}.orgchart .nodes.vertical .node::after,.orgchart .nodes.vertical .node::before{content:none}.orgchart .nodes.vertical>.hierarchy:first-child::before{box-sizing:border-box;top:-11px;height:35px;width:calc(50% - 2px);border-width:2px 0 0 2px}.orgchart .nodes.vertical .hierarchy{position:relative;text-align:left}.orgchart .nodes.vertical .hierarchy::after,.orgchart .nodes.vertical .hierarchy::before{box-sizing:border-box;content:'';position:absolute;left:-6px;border-color:rgba(217,83,79,.8);border-style:solid;border-width:0 0 2px 2px}.orgchart .nodes.vertical .hierarchy::before{top:-4px;height:30px;width:11px}.orgchart .nodes.vertical .hierarchy::after{top:1px;height:100%}.orgchart .nodes.vertical .hierarchy:first-child::after{box-sizing:border-box;top:24px;width:11px;border-width:2px 0 0 2px}.orgchart .nodes.vertical .hierarchy:last-child::after{box-sizing:border-box;border-width:2px 0 0}.oci{display:inline-block;position:relative;font-style:normal;font-family:Arial}.oci-chevron-up::before{content:"";display:inline-block;box-sizing:border-box;vertical-align:text-bottom;width:.625rem;height:.625rem;border-width:0 .2rem .2rem 0;border-style:solid;border-color:#000;background:0 0;transform:rotate(-135deg)}.oci-chevron-right::before{content:"";display:inline-block;box-sizing:border-box;width:.625rem;height:.625rem;border-width:0 .2rem .2rem 0;border-style:solid;border-color:#000;background:0 0;transform:rotate(-45deg)}.oci-chevron-down::before{content:"";display:inline-block;box-sizing:border-box;width:.625rem;height:.625rem;border-width:0 .2rem .2rem 0;border-style:solid;border-color:#000;background:0 0;transform:rotate(45deg)}.oci-chevron-left::before{content:"";display:inline-block;box-sizing:border-box;width:.625rem;height:.625rem;border-width:0 .2rem .2rem 0;border-style:solid;border-color:#000;background:0 0;transform:rotate(135deg)}.oci-leader::before{position:absolute;content:"";display:inline-block;width:.4rem;height:.4rem;border-radius:.2rem;background:#000;top:-.75rem;left:.1rem}.oci-leader::after{position:absolute;content:"";display:inline-block;width:.875rem;height:.375rem;border-radius:.25rem .25rem 0 0;background:#000;top:-.3rem;left:-.125rem}.oci-plus-square::before{content:"+";display:inline-block;vertical-align:text-bottom;text-align:center;width:1rem;height:1rem;background-color:#000;color:#fff}.oci-plus-circle::before{content:"+";display:inline-block;vertical-align:text-bottom;text-align:center;width:1rem;height:1rem;border-radius:.5rem;background-color:#000;color:#fff}.oci-minus-square::before{content:"−";display:inline-block;vertical-align:text-bottom;text-align:center;width:1rem;height:1rem;background-color:#000;color:#fff}.oci-minus-circle::before{content:"−";display:inline-block;vertical-align:text-bottom;text-align:center;width:1rem;height:1rem;border-radius:.5rem;background-color:#000;color:#fff}.oci-arrow-circle-up::before{content:"▲";display:inline-block;text-align:center;vertical-align:text-bottom;width:1rem;height:1rem;border-radius:.5rem;background-color:#000;color:#fff;font-size:.875rem}.oci-arrow-circle-down::before{content:"▼";text-align:center;display:inline-block;vertical-align:text-bottom;width:1rem;height:1rem;border-radius:.5rem;background-color:#000;color:#fff;font-size:.875rem}.oci-info-circle::before{content:"i";display:inline-block;vertical-align:text-bottom;width:1rem;height:1rem;border-radius:.5rem;background-color:#000;color:#fff;text-align:center;font-weight:700}.oci-spinner::before{content:"";vertical-align:text-bottom;display:inline-block;box-sizing:border-box;width:1rem;height:1rem;border:.1rem solid #000;border-right-color:transparent;border-radius:.625rem;animation:oci-infinite-spinning .75s linear infinite}@keyframes oci-infinite-spinning{from{transform:rotate(0)}to{transform:rotate(360deg)}}
1
+ .orgchart{box-sizing:border-box;display:inline-block;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:linear-gradient(to top,rgba(200,0,0,.15) 5%,rgba(0,0,0,0) 5%),linear-gradient(to right,rgba(200,0,0,.15) 5%,rgba(0,0,0,0) 5%),linear-gradient(to bottom,rgba(200,0,0,.15) 5%,rgba(0,0,0,0) 5%),linear-gradient(to left,rgba(200,0,0,.15) 5%,rgba(0,0,0,0) 5%);background-size:10px 10px;padding:20px 20px 0 20px}.orgchart .hidden,.orgchart~.hidden{display:none!important}.orgchart.b2t{transform:rotate(180deg)}.orgchart.l2r{position:absolute;transform:rotate(-90deg) rotateY(180deg);transform-origin:left top;text-align:center}.orgchart.r2l{position:absolute;transform:rotate(90deg);transform-origin:left top;text-align:center}.orgchart~.mask{position:absolute;top:0;right:0;bottom:0;left:0;z-index:999;text-align:center;background-color:rgba(0,0,0,.3)}.orgchart~.mask .spinner{position:absolute;top:calc(50% - 50px);left:calc(50% - 50px)}.orgchart>.spinner::before,.orgchart~.mask .spinner::before{width:100px;height:100px;border-width:10px;border-radius:50px;border-top-color:rgba(68,157,68,.8);border-bottom-color:rgba(68,157,68,.8);border-left-color:rgba(68,157,68,.8)}.orgchart .nodes{display:flex;list-style:none;padding-left:0;margin:0}.orgchart .hierarchy{position:relative}.orgchart .hierarchy::before{content:"";position:absolute;top:-11px;left:0;width:100%;border-top:2px solid rgba(217,83,79,.8);box-sizing:border-box}.orgchart .hierarchy.isSiblingsCollapsed.left-sibs::before,.orgchart .hierarchy:first-child::before{left:calc(50% - 1px);width:calc(50% + 1px)}.orgchart .hierarchy.isSiblingsCollapsed.right-sibs::before,.orgchart .hierarchy:last-child::before{width:calc(50% + 1px)}.orgchart .hierarchy:not(.hidden):only-child::before{width:2px}.orgchart .isAncestorsCollapsed:only-child::before,.orgchart .isAncestorsCollapsed>.node::before,.orgchart .isChildrenCollapsed>.node:not(:only-child)::after,.orgchart .isCollapsedDescendant::before,.orgchart .isCollapsedDescendant>.node::after,.orgchart .isCollapsedDescendant>.node::before,.orgchart .isCollapsedSibling .hierarchy::before,.orgchart .isCollapsedSibling::before,.orgchart .isSiblingsCollapsed.left-sibs.right-sibs::before,.orgchart .isSiblingsCollapsed.left-sibs:last-child:before,.orgchart .isSiblingsCollapsed.right-sibs:first-child:before,.orgchart .isSiblingsCollapsed:not(.left-sibs):not(.right-sibs)::before,.orgchart>.nodes>.hierarchy::before{content:none}.orgchart .node:not(:only-child)::after{content:"";position:absolute;bottom:-12px;left:calc(50% - 1px);width:2px;height:10px;background-color:rgba(217,83,79,.8)}.orgchart ul li .node.allowedDrop{border-color:rgba(68,157,68,.9)}.orgchart ul li .node.currentDropTarget{background-color:rgba(68,157,68,.9)}.orgchart ul li .node.selected{background-color:rgba(238,217,54,.5)}.orgchart ul li .node:hover{background-color:rgba(238,217,54,.5)}.orgchart>ul>li>ul li>.node::before{content:"";position:absolute;top:var(--top,-12px);left:calc(50% - 1px);width:2px;height:var(--height,10px);background-color:rgba(217,83,79,.8)}.orgchart>ul>li>ul li.isSiblingsCollapsed>.node::before{top:var(--top-cross-point,-12px);height:var(--height-cross-point,10px)}.orgchart .node{box-sizing:border-box;display:inline-block;position:relative;margin:0 0 20px 0;padding:3px;border:2px dashed transparent;text-align:center}.orgchart.l2r .node,.orgchart.r2l .node{width:50px;height:140px}.orgchart .node:hover{background-color:rgba(238,217,54,.5);transition:.5s;cursor:default;z-index:20}.orgchart .node.focused{background-color:rgba(238,217,54,.5)}.orgchart .ghost-node{position:fixed;left:-10000px;top:-10000px}.orgchart .ghost-node rect{fill:#fff;stroke:#bf0000}.orgchart .node.allowedDrop{border-color:rgba(68,157,68,.9)}.orgchart .node>.spinner{position:absolute;top:calc(50% - 1rem);left:calc(50% - 1rem)}.orgchart .node>.spinner::before{width:2rem;height:2rem;border-width:.2rem;border-radius:1rem;border-top-color:rgba(68,157,68,.8);border-bottom-color:rgba(68,157,68,.8);border-left-color:rgba(68,157,68,.8)}.orgchart .node .title{box-sizing:border-box;width:130px;text-align:center;font-size:12px;font-weight:700;height:20px;line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(217,83,79,.8);color:#fff;border-radius:4px 4px 0 0}.orgchart.b2t .node .title{transform:rotate(-180deg);transform-origin:center bottom}.orgchart.l2r .node .title{transform:rotate(-90deg) translate(-45px,-45px) rotateY(180deg);transform-origin:bottom center}.orgchart.r2l .node .title{transform:rotate(-90deg) translate(-45px,-45px);transform-origin:bottom center}.orgchart .node .title .parentNodeSymbol{float:left}.orgchart .node .title .parentNodeSymbol::before{color:#fff}.orgchart .node .title .parentNodeSymbol::after{background-color:#fff}.orgchart .node .content{box-sizing:border-box;width:130px;height:20px;line-height:20px;font-size:10px;border:1px solid rgba(217,83,79,.8);border-width:0 1px 1px 1px;border-radius:0 0 .25rem .25rem;text-align:center;background-color:#fff;color:#333;text-overflow:ellipsis;white-space:nowrap}.orgchart.b2t .node .content{transform:rotate(180deg);transform-origin:center top}.orgchart.l2r .node .content{transform:rotate(-90deg) translate(-45px,-45px) rotateY(180deg);transform-origin:top center;width:130px}.orgchart.r2l .node .content{transform:rotate(-90deg) translate(-45px,-45px);transform-origin:top center;width:130px}.orgchart .node .edge{position:absolute;cursor:default;transition:.2s}.orgchart .node .edge::before{border-color:rgba(68,157,68,.5)}.orgchart.noncollapsable .node .edge{display:none}.orgchart .node .edge:hover{cursor:pointer}.orgchart .edge:hover::before{border-color:#449d44}.orgchart .node .verticalEdge{width:calc(100% - 6px);height:10px;left:3px}.orgchart .node .verticalEdge::before{position:absolute;left:calc(50% - 5px)}.orgchart .node .topEdge{top:-2px}.orgchart .node .topEdge.oci-chevron-up::before{top:2px}.orgchart .node .topEdge.oci-chevron-down::before{bottom:3px}.orgchart .node .bottomEdge{bottom:-2px}.orgchart .node .bottomEdge.oci-chevron-up::before{bottom:-3px}.orgchart .node .bottomEdge.oci-chevron-down::before{bottom:1px}.orgchart .node .horizontalEdge{width:10px;height:calc(100% - 6px);top:3px}.orgchart .node .rightEdge{right:-2px}.orgchart .node .leftEdge{left:-2px}.orgchart .node .horizontalEdge::before{position:absolute;top:calc(50% - 5px)}.orgchart .node .leftEdge.oci-chevron-right::before{left:-3px}.orgchart .node .leftEdge.oci-chevron-left::before{left:1px}.orgchart .node .rightEdge.oci-chevron-left::before{right:-3px}.orgchart .node .rightEdge.oci-chevron-right::before{right:1px}.orgchart .node .toggleBtn{position:absolute;left:-2px;bottom:-2px;width:16px;height:16px}.orgchart .node .toggleBtn::before{background-color:rgba(68,157,68,.6);position:absolute;left:0;bottom:0}.orgchart .node .toggleBtn:hover::before{background-color:#449d44}.oc-export-btn{margin-left:.5rem;padding:.5rem 1rem}.orgchart .node{transition:transform .3s,opacity .3s}.orgchart .slide-down{opacity:0;transform:translateY(40px)}.orgchart.l2r .node.slide-down,.orgchart.r2l .node.slide-down{transform:translateY(130px)}.orgchart .slide-up{opacity:0;transform:translateY(-40px)}.orgchart.l2r .node.slide-up,.orgchart.r2l .node.slide-up{transform:translateY(-130px)}.orgchart .slide-right{opacity:0;transform:translateX(130px)}.orgchart.l2r .node.slide-right,.orgchart.r2l .node.slide-right{transform:translateX(40px)}.orgchart .slide-left{opacity:0;transform:translateX(-130px)}.orgchart.l2r .node.slide-left,.orgchart.r2l .node.slide-left{transform:translateX(-40px)}.orgchart .nodes.vertical{display:block;padding-left:10px}.orgchart .nodes.vertical .nodes{list-style:none;display:block;margin:0;padding-left:10px;text-align:left}.orgchart .nodes.vertical .node{margin-bottom:0}.orgchart .nodes.vertical .node::after,.orgchart .nodes.vertical .node::before{content:none}.orgchart .nodes.vertical .hierarchy{position:relative;text-align:left}.orgchart .nodes.vertical .hierarchy::after,.orgchart .nodes.vertical .hierarchy::before{box-sizing:border-box;content:'';position:absolute;left:-6px;border-color:rgba(217,83,79,.8);border-style:solid;border-width:0 0 2px 2px}.orgchart .nodes.vertical .hierarchy::before{top:0;height:26px;width:11px}.orgchart .nodes.vertical .hierarchy::after{bottom:0;height:calc(100% - 24px)}.orgchart .nodes.vertical .hierarchy:last-child::after{border-width:2px 0 0 0}.orgchart .nodes.vertical>.hierarchy:first-child::before{box-sizing:border-box;top:-11px;height:35px;width:calc(50% + 2px);border-width:2px 0 0 2px}.orgchart .nodes.vertical>.hierarchy:first-child::after{box-sizing:border-box;top:24px;width:11px;border-width:2px 0 0 2px}.orgchart .nodes.vertical>.hierarchy:first-child:last-child::after{border-width:2px 0 0 0}.orgchart .hierarchy>.node.compact{position:static;display:grid;width:140px;height:50px;overflow:hidden;background-color:#eee}.orgchart .node.compact.even,.orgchart .node.compact.even:hover{background-color:#eee}.orgchart .node.compact.odd,.orgchart .node.compact.odd:hover{background-color:#fff}.orgchart .node.compact.even>.node.focused,.orgchart .node.compact.even>.node.selected,.orgchart .node.compact.even>.node:hover{background-color:#fff}.orgchart .node.compact.odd>.node.focused,.orgchart .node.compact.odd>.node.selected,.orgchart .node.compact.odd>.node:hover{background-color:#eee}.orgchart .hierarchy>.node.compact.looseMode{display:grid;width:unset;height:unset;overflow:unset}.orgchart .hierarchy>.node.compact::before{top:var(--top-cross-point,-10px)}.orgchart .node.compact>.node.compact{position:relative;display:grid;width:140px;height:50px;overflow:hidden}.orgchart .node.compact .node.compact.looseMode{width:unset;height:unset;overflow:unset}.orgchart .hierarchy>.node.compact>.content{position:absolute;top:25px;left:5px}.orgchart .hierarchy>.node.compact.looseMode>.title{margin-top:5px;margin-left:5px}.orgchart .hierarchy>.node.compact.looseMode>.content{top:30px;left:10px}.orgchart .node.compact>.node.compact.looseMode>.title{margin-top:5px;margin-left:5px}.orgchart .node.compact>.node.compact>.content{position:absolute;top:23px;left:3px}.orgchart .node.compact>.node.compact.looseMode>.content{top:28px;left:8px}.orgchart .node.compact .node{margin-bottom:0}.orgchart .node.compact .node:not(:only-child)::after{content:unset}.orgchart .backToCompactSymbol,.orgchart .backToLooseSymbol{cursor:pointer}.orgchart .hierarchy>.node.compact>.backToCompactSymbol{position:absolute;top:5px;left:5px}.orgchart .hierarchy>.node.compact.looseMode>.backToCompactSymbol{top:10px;left:10px}.orgchart .node.compact>.node.compact.looseMode>.backToCompactSymbol{top:8px;left:8px}.orgchart .node.compact>.node.compact>.backToCompactSymbol{position:absolute;top:3px;left:3px}.orgchart .hierarchy>.node.compact>.backToLooseSymbol{position:absolute;top:25px;right:5px}.orgchart .node.compact>.node.compact>.backToLooseSymbol{position:absolute;top:23px;right:3px}.orgchart .node.compact .backToCompactSymbol::before{border-top-color:rgba(68,157,68,.6)}.orgchart .node.compact .backToLooseSymbol::before{border-bottom-color:rgba(68,157,68,.6)}.orgchart .node.compact .backToCompactSymbol:hover::before{border-top-color:#449d44}.orgchart .node.compact .backToLooseSymbol:hover::before{border-bottom-color:#449d44}.oci{display:inline-block;position:relative;font-style:normal;font-family:Arial}.oci-menu::before{content:"≡";display:inline-block;width:1rem;height:1rem;text-align:center;line-height:1rem;color:#000;font-size:1rem}.oci-chevron-up::before{content:"";box-sizing:border-box;width:10px;height:10px;display:inline-block;border:3px solid #000;transform:rotate(45deg);border-right:unset;border-bottom:unset}.oci-chevron-down::before{content:"";box-sizing:border-box;width:10px;height:10px;display:inline-block;border:3px solid #000;transform:rotate(45deg);border-top:unset;border-left:unset}.oci-chevron-left::before{content:"";box-sizing:border-box;width:10px;height:10px;display:inline-block;border:3px solid #000;transform:rotate(45deg);border-top:unset;border-right:unset}.oci-chevron-right::before{content:"";box-sizing:border-box;width:10px;height:10px;display:inline-block;border:3px solid #000;transform:rotate(45deg);border-left:unset;border-bottom:unset}.oci-corner-top-left::before{content:"";display:inline-block;border-top:20px solid #000;border-right:20px solid transparent}.oci-corner-top-right::before{content:"";display:inline-block;box-sizing:border-box;width:0;height:0;border-top:20px solid #000;border-left:20px solid transparent}.oci-corner-bottom-right::before{content:"";display:inline-block;box-sizing:border-box;width:0;height:0;border-bottom:20px solid #000;border-left:20px solid transparent}.oci-corner-bottom-left::before{content:"";display:inline-block;box-sizing:border-box;width:0;height:0;border-bottom:20px solid #000;border-right:20px solid transparent}.oci-plus-square::before{content:"﹢";display:inline-block;width:16px;height:16px;text-align:center;line-height:16px;background-color:#000;color:#fff;font-weight:700}.oci-minus-square::before{content:"﹣";display:inline-block;width:16px;height:16px;text-align:center;line-height:16px;background-color:#000;color:#fff;font-weight:700}.oci-arrow-square-up::before{content:"⬆";display:inline-block;width:1rem;height:1rem;text-align:center;line-height:1rem;background-color:#000;color:#fff;font-weight:700}.oci-arrow-square-down::before{content:"⬇";display:inline-block;width:1rem;height:1rem;text-align:center;line-height:1rem;background-color:#000;color:#fff;font-weight:700}.oci-info-circle::before{content:"i";display:inline-block;width:1rem;height:1rem;border-radius:.5rem;background-color:#000;color:#fff;text-align:center;font-weight:700}.oci-spinner::before{content:"";vertical-align:text-bottom;display:inline-block;box-sizing:border-box;width:1rem;height:1rem;border:.1rem solid #000;border-right-color:transparent;border-radius:.625rem;animation:oci-infinite-spinning .75s linear infinite}@keyframes oci-infinite-spinning{from{transform:rotate(0)}to{transform:rotate(360deg)}}
@@ -21,6 +21,19 @@
21
21
  this.$chartContainer = $(elem);
22
22
  this.opts = opts;
23
23
  this.defaultOptions = {
24
+ 'icons': {
25
+ 'theme': 'oci',
26
+ 'parentNode': 'oci-menu',
27
+ 'expandToUp': 'oci-chevron-up',
28
+ 'collapseToDown': 'oci-chevron-down',
29
+ 'collapseToLeft': 'oci-chevron-left',
30
+ 'expandToRight': 'oci-chevron-right',
31
+ 'backToCompact': 'oci-corner-top-left',
32
+ 'backToLoose': 'oci-corner-bottom-right',
33
+ 'collapsed': 'oci-plus-square',
34
+ 'expanded': 'oci-minus-square',
35
+ 'spinner': 'oci-spinner'
36
+ },
24
37
  'nodeTitle': 'name',
25
38
  'nodeId': 'id',
26
39
  'toggleSiblingsResp': false,
@@ -30,7 +43,6 @@
30
43
  'exportButtonName': 'Export',
31
44
  'exportFilename': 'OrgChart',
32
45
  'exportFileextension': 'png',
33
- 'parentNodeSymbol': 'oci-leader',
34
46
  'draggable': false,
35
47
  'direction': 't2b',
36
48
  'pan': false,
@@ -71,7 +83,7 @@
71
83
  this.buildHierarchy($root, this.options.ajaxURL ? data : this.attachRel(data, '00'));
72
84
  }
73
85
  } else {
74
- $chart.append('<i class="oci oci-spinner spinner"></i>');
86
+ $chart.append(`<i class="${this.options.icons.theme} ${this.options.icons.spinner} spinner"></i>`);
75
87
  $.ajax({
76
88
  'url': data,
77
89
  'dataType': 'json'
@@ -103,6 +115,20 @@
103
115
 
104
116
  return this;
105
117
  },
118
+ handleCompactNodes: function () {
119
+ // caculate the compact nodes' level which is used to add different styles
120
+ this.$chart.find('.node.compact')
121
+ .each((index, node) => {
122
+ $(node).addClass($(node).parents('.compact').length % 2 === 0 ? 'even' : 'odd');
123
+ }); // the following code snippets is used to add direction arrows for the most top compact node, however the styles is not adjusted correctly
124
+ // .filter((index, node) => !$(node).parent().is('.compact'))
125
+ // .each((index, node) => {
126
+ // $(node).append(`<i class="edge verticalEdge topEdge ${this.options.icons.theme}"></i>`);
127
+ // if (this.getSiblings($(node)).length) {
128
+ // $(node).append(`<i class="edge horizontalEdge rightEdge ${this.options.icons.theme}"></i><i class="edge horizontalEdge leftEdge ${this.options.icons.theme}"></i>`);
129
+ // }
130
+ // });
131
+ },
106
132
  //
107
133
  triggerInitEvent: function () {
108
134
  var that = this;
@@ -112,6 +138,7 @@
112
138
  for (var i = 0; i < mutations.length; i++) {
113
139
  for (var j = 0; j < mutations[i].addedNodes.length; j++) {
114
140
  if (mutations[i].addedNodes[j].classList.contains('orgchart')) {
141
+ that.handleCompactNodes();
115
142
  if (that.options.initCompleted && typeof that.options.initCompleted === 'function') {
116
143
  that.options.initCompleted(that.$chart);
117
144
  }
@@ -367,14 +394,21 @@
367
394
  });
368
395
  return subObj;
369
396
  },
370
- //
397
+ // process datasource and add necessary information
371
398
  attachRel: function (data, flags) {
372
399
  var that = this;
373
400
  data.relationship = flags + (data.children && data.children.length > 0 ? 1 : 0);
401
+ if (this.options?.compact?.constructor === Function && this.options.compact(data)) {
402
+ data.compact = true;
403
+ }
374
404
  if (data.children) {
375
405
  data.children.forEach(function(item) {
376
- if (data.isHybrid || data.isVertical) {
377
- item.isVertical = true;
406
+ if (data.hybrid || data.vertical) { // identify all the descendant nodes except the root node of hybrid structure
407
+ item.vertical = true;
408
+ } else if (data.compact && item.children) { // identify all the compact ancestor nodes
409
+ item.compact = true;
410
+ } else if (data.compact && !item.children) { // identify all the compact descendant nodes
411
+ item.associatedCompact = true;
378
412
  }
379
413
  that.attachRel(item, '1' + (data.children.length > 1 ? 1 : 0));
380
414
  });
@@ -568,7 +602,7 @@
568
602
  $animatedNodes.closest('.hierarchy').addClass('isCollapsedDescendant');
569
603
  }
570
604
  if ($lowerLevel.is('.vertical') || $lowerLevel.find('.vertical').length) {
571
- $animatedNodes.find('.oci-minus-square').removeClass('oci-minus-square').addClass('oci-plus-square');
605
+ $animatedNodes.find(this.options.icons.expanded).removeClass(this.options.icons.expanded).addClass(this.options.icons.collapsed);
572
606
  }
573
607
  this.repaint($animatedNodes.get(0));
574
608
  $animatedNodes.addClass('sliding slide-up').eq(0).one('transitionend', { 'animatedNodes': $animatedNodes, 'lowerLevel': $lowerLevel, 'node': $node }, this.hideChildrenEnd.bind(this));
@@ -647,7 +681,7 @@
647
681
  event.data.visibleNodes.removeClass('sliding');
648
682
  if (this.isInAction($node)) {
649
683
  this.switchHorizontalArrow($node);
650
- $node.children('.topEdge').removeClass('oci-chevron-up').addClass('oci-chevron-down');
684
+ $node.children('.topEdge').removeClass(this.options.icons.expandToUp).addClass(this.options.icons.collapseToDown);
651
685
  }
652
686
  },
653
687
  //
@@ -702,7 +736,7 @@
702
736
  }
703
737
 
704
738
  $edge.addClass('hidden');
705
- $edge.parent().append('<i class="oci oci-spinner spinner"></i>')
739
+ $edge.parent().append(`<i class="${this.options.icons.theme} ${this.options.icons.spinner} spinner"></i>`)
706
740
  .children().not('.spinner').css('opacity', 0.2);
707
741
  $chart.data('inAjax', true);
708
742
  $('.oc-export-btn').prop('disabled', true);
@@ -719,11 +753,16 @@
719
753
  },
720
754
  // whether the cursor is hovering over the node
721
755
  isInAction: function ($node) {
722
- return $node.children('.edge').attr('class').indexOf('oci-') > -1 ? true : false;
756
+ return [
757
+ this.options.icons.expandToUp,
758
+ this.options.icons.collapseToDown,
759
+ this.options.icons.collapseToLeft,
760
+ this.options.icons.expandToRight
761
+ ].some((icon) => $node.children('.edge').attr('class').indexOf(icon) > -1);
723
762
  },
724
763
  //
725
764
  switchVerticalArrow: function ($arrow) {
726
- $arrow.toggleClass('oci-chevron-up').toggleClass('oci-chevron-down');
765
+ $arrow.toggleClass(`${this.options.icons.expandToUp} ${this.options.icons.collapseToDown}`);
727
766
  },
728
767
  //
729
768
  switchHorizontalArrow: function ($node) {
@@ -732,24 +771,24 @@
732
771
  var $prevSib = $node.parent().prev();
733
772
  if ($prevSib.length) {
734
773
  if ($prevSib.is('.hidden')) {
735
- $node.children('.leftEdge').addClass('oci-chevron-left').removeClass('oci-chevron-right');
774
+ $node.children('.leftEdge').addClass(opts.icons.collapseToLeft).removeClass(opts.icons.expandToRight);
736
775
  } else {
737
- $node.children('.leftEdge').addClass('oci-chevron-right').removeClass('oci-chevron-left');
776
+ $node.children('.leftEdge').addClass(opts.icons.expandToRight).removeClass(opts.icons.collapseToLeft);
738
777
  }
739
778
  }
740
779
  var $nextSib = $node.parent().next();
741
780
  if ($nextSib.length) {
742
781
  if ($nextSib.is('.hidden')) {
743
- $node.children('.rightEdge').addClass('oci-chevron-right').removeClass('oci-chevron-left');
782
+ $node.children('.rightEdge').addClass(opts.icons.expandToRight).removeClass(opts.icons.collapseToLeft);
744
783
  } else {
745
- $node.children('.rightEdge').addClass('oci-chevron-left').removeClass('oci-chevron-right');
784
+ $node.children('.rightEdge').addClass(opts.icons.collapseToLeft).removeClass(opts.icons.expandToRight);
746
785
  }
747
786
  }
748
787
  } else {
749
788
  var $sibs = $node.parent().siblings();
750
789
  var sibsVisible = $sibs.length ? !$sibs.is('.hidden') : false;
751
- $node.children('.leftEdge').toggleClass('oci-chevron-right', sibsVisible).toggleClass('oci-chevron-left', !sibsVisible);
752
- $node.children('.rightEdge').toggleClass('oci-chevron-left', sibsVisible).toggleClass('oci-chevron-right', !sibsVisible);
790
+ $node.children('.leftEdge').toggleClass(opts.icons.expandToRight, sibsVisible).toggleClass(opts.icons.collapseToLeft, !sibsVisible);
791
+ $node.children('.rightEdge').toggleClass(opts.icons.collapseToLeft, sibsVisible).toggleClass(opts.icons.expandToRight, !sibsVisible);
753
792
  }
754
793
  },
755
794
  //
@@ -767,10 +806,10 @@
767
806
  if (event.type === 'mouseenter') {
768
807
  if ($node.children('.toggleBtn').length) {
769
808
  flag = this.getNodeState($node, 'children').visible;
770
- $toggleBtn.toggleClass('oci-plus-square', !flag).toggleClass('oci-minus-square', flag);
809
+ $toggleBtn.toggleClass(this.options.icons.collapsed, !flag).toggleClass(this.options.icons.expanded, flag);
771
810
  }
772
811
  } else {
773
- $toggleBtn.removeClass('oci-plus-square oci-minus-square');
812
+ $toggleBtn.removeClass(`${this.options.icons.collapsed} ${this.options.icons.expanded}`);
774
813
  }
775
814
  } else {
776
815
  var $topEdge = $node.children('.topEdge');
@@ -780,17 +819,17 @@
780
819
  if (event.type === 'mouseenter') {
781
820
  if ($topEdge.length) {
782
821
  flag = this.getNodeState($node, 'parent').visible;
783
- $topEdge.toggleClass('oci-chevron-up', !flag).toggleClass('oci-chevron-down', flag);
822
+ $topEdge.toggleClass(this.options.icons.expandToUp, !flag).toggleClass(this.options.icons.collapseToDown, flag);
784
823
  }
785
824
  if ($bottomEdge.length) {
786
825
  flag = this.getNodeState($node, 'children').visible;
787
- $bottomEdge.toggleClass('oci-chevron-down', !flag).toggleClass('oci-chevron-up', flag);
826
+ $bottomEdge.toggleClass(this.options.icons.collapseToDown, !flag).toggleClass(this.options.icons.expandToUp, flag);
788
827
  }
789
828
  if ($leftEdge.length) {
790
829
  this.switchHorizontalArrow($node);
791
830
  }
792
831
  } else {
793
- $node.children('.edge').removeClass('oci-chevron-up oci-chevron-down oci-chevron-right oci-chevron-left');
832
+ $node.children('.edge').removeClass(`${this.options.icons.expandToUp} ${this.options.icons.collapseToDown} ${this.options.icons.collapseToLeft} ${this.options.icons.expandToRight}`);
794
833
  }
795
834
  }
796
835
  },
@@ -939,6 +978,19 @@
939
978
  }
940
979
  }
941
980
  },
981
+ // show the compact node's children in the compact mode
982
+ backToCompactHandler: function (event) {
983
+ $(event.delegateTarget).removeClass('looseMode')
984
+ .children('.backToCompactSymbol').addClass('hidden').end()
985
+ .children('.backToLooseSymbol').removeClass('hidden');
986
+ },
987
+ // show the compact node's children in the loose mode
988
+ backToLooseHandler: function (event) {
989
+ $(event.delegateTarget)
990
+ .addClass('looseMode')
991
+ .children('.backToLooseSymbol').addClass('hidden').end()
992
+ .children('.backToCompactSymbol').removeClass('hidden');
993
+ },
942
994
  //
943
995
  expandVNodesEnd: function (event) {
944
996
  event.data.vNodes.removeClass('sliding');
@@ -954,14 +1006,14 @@
954
1006
  var $descendants = $descWrapper.find('.node');
955
1007
  var $children = $descWrapper.children().children('.node');
956
1008
  if ($children.is('.sliding')) { return; }
957
- $toggleBtn.toggleClass('oci-plus-square oci-minus-square');
1009
+ $toggleBtn.toggleClass(`${this.options.icons.collapsed} ${this.options.icons.expanded}`);
958
1010
  if ($descendants.eq(0).is('.slide-up')) {
959
1011
  $descWrapper.removeClass('hidden');
960
1012
  this.repaint($children.get(0));
961
1013
  $children.addClass('sliding').removeClass('slide-up').eq(0).one('transitionend', { 'vNodes': $children }, this.expandVNodesEnd);
962
1014
  } else {
963
1015
  $descendants.addClass('sliding slide-up').eq(0).one('transitionend', { 'vNodes': $descendants }, this.collapseVNodesEnd);
964
- $descendants.find('.toggleBtn').removeClass('oci-minus-square oci-plus-square');
1016
+ $descendants.find('.toggleBtn').removeClass(`${this.options.icons.collapsed} ${this.options.icons.expanded}`);
965
1017
  }
966
1018
  },
967
1019
  //
@@ -1122,7 +1174,7 @@
1122
1174
  // special process for hybrid chart
1123
1175
  var datasource = this.$chart.data('options').data;
1124
1176
  var digger = new JSONDigger(datasource, this.$chart.data('options').nodeId, 'children');
1125
- const hybridNode = digger.findOneNode({ 'isHybrid': true });
1177
+ const hybridNode = digger.findOneNode({ 'hybrid': true });
1126
1178
  if (this.$chart.data('options').verticalLevel > 1 || hybridNode) {
1127
1179
  var draggedNode = digger.findNodeById($dragged.data('nodeData').id);
1128
1180
  var copy = Object.assign({}, draggedNode);
@@ -1138,14 +1190,14 @@
1138
1190
  // The folowing code snippets are used to process horizontal chart
1139
1191
  // firstly, deal with the hierarchy of drop zone
1140
1192
  if (!$dropZone.siblings('.nodes').length) { // if the drop zone is a leaf node
1141
- $dropZone.append('<i class="edge verticalEdge bottomEdge oci"></i>')
1193
+ $dropZone.append(`<i class="edge verticalEdge bottomEdge ${this.options.icons.theme}"></i>`)
1142
1194
  .after('<ul class="nodes"></ul>')
1143
1195
  .siblings('.nodes').append($dragged.find('.horizontalEdge').remove().end().closest('.hierarchy'));
1144
1196
  if ($dropZone.children('.title').length) {
1145
- $dropZone.children('.title').prepend('<i class="oci '+ this.$chart.data('options').parentNodeSymbol + ' symbol"></i>');
1197
+ $dropZone.children('.title').prepend(`<i class="${this.options.icons.theme} ${this.$chart.data('options').icons.parentNode} parentNodeSymbol"></i>`);
1146
1198
  }
1147
1199
  } else {
1148
- var horizontalEdges = '<i class="edge horizontalEdge rightEdge oci"></i><i class="edge horizontalEdge leftEdge oci"></i>';
1200
+ var horizontalEdges = `<i class="edge horizontalEdge rightEdge ${this.options.icons.theme}"></i><i class="edge horizontalEdge leftEdge ${this.options.icons.theme}"></i>`;
1149
1201
  if (!$dragged.find('.horizontalEdge').length) {
1150
1202
  $dragged.append(horizontalEdges);
1151
1203
  }
@@ -1160,7 +1212,7 @@
1160
1212
  $dragZone.siblings('.nodes').children('.hierarchy').find('.node:first')
1161
1213
  .find('.horizontalEdge').remove();
1162
1214
  } else if ($dragZone.siblings('.nodes').children('.hierarchy').length === 0) {
1163
- $dragZone.find('.bottomEdge, .symbol').remove()
1215
+ $dragZone.find('.bottomEdge, .parentNodeSymbol').remove()
1164
1216
  .end().siblings('.nodes').remove();
1165
1217
  }
1166
1218
  }
@@ -1344,29 +1396,39 @@
1344
1396
  var nodeData = $.extend({}, data);
1345
1397
  delete nodeData.children;
1346
1398
  $nodeDiv.data('nodeData', nodeData);
1347
- // append 4 direction arrows or expand/collapse buttons
1399
+ // append 4 direction arrows or expand/collapse buttons or reset buttons
1348
1400
  var flags = data.relationship || '';
1349
- if ((opts.verticalLevel && level >= opts.verticalLevel) || data.isVertical) {
1401
+ if ((opts.verticalLevel && level >= opts.verticalLevel) || data.vertical) {
1350
1402
  if (Number(flags.substr(2,1))) {
1351
- $nodeDiv.append('<i class="toggleBtn oci"></i>')
1352
- .children('.title').prepend('<i class="oci '+ opts.parentNodeSymbol + ' symbol"></i>');
1403
+ $nodeDiv.append(`<i class="toggleBtn ${opts.icons.theme}"></i>`)
1404
+ .children('.title').prepend(`<i class="${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol"></i>`);
1353
1405
  }
1354
- } else if (data.isHybrid) {
1406
+ } else if (data.hybrid) {
1355
1407
  if (Number(flags.substr(2,1))) {
1356
- $nodeDiv.append('<i class="edge verticalEdge bottomEdge oci"></i>')
1357
- .children('.title').prepend('<i class="oci '+ opts.parentNodeSymbol + ' symbol"></i>');
1408
+ $nodeDiv.append(`<i class="edge verticalEdge bottomEdge ${opts.icons.theme}"></i>`)
1409
+ .children('.title').prepend(`<i class="${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol"></i>`);
1358
1410
  }
1411
+ } else if (data.compact) {
1412
+ $nodeDiv.css('grid-template-columns', `repeat(${Math.floor(Math.sqrt(data.children.length + 1))}, auto)`);
1413
+ if (Number(flags.substr(2,1))) {
1414
+ $nodeDiv.append(`
1415
+ <i class="${opts.icons.theme} ${opts.icons.backToCompact} backToCompactSymbol hidden"></i>
1416
+ <i class="${opts.icons.theme} ${opts.icons.backToLoose} backToLooseSymbol"></i>
1417
+ `)
1418
+ .children('.title').prepend(`<i class="${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol"></i>`);
1419
+ }
1420
+ } else if (data.associatedCompact) {
1421
+
1359
1422
  } else {
1360
1423
  if (Number(flags.substr(0,1))) {
1361
- $nodeDiv.append('<i class="edge verticalEdge topEdge oci"></i>');
1424
+ $nodeDiv.append(`<i class="edge verticalEdge topEdge ${opts.icons.theme}"></i>`);
1362
1425
  }
1363
1426
  if(Number(flags.substr(1,1))) {
1364
- $nodeDiv.append('<i class="edge horizontalEdge rightEdge oci"></i>' +
1365
- '<i class="edge horizontalEdge leftEdge oci"></i>');
1427
+ $nodeDiv.append(`<i class="edge horizontalEdge rightEdge ${opts.icons.theme}"></i><i class="edge horizontalEdge leftEdge ${opts.icons.theme}"></i>`);
1366
1428
  }
1367
1429
  if(Number(flags.substr(2,1))) {
1368
- $nodeDiv.append('<i class="edge verticalEdge bottomEdge oci"></i>')
1369
- .children('.title').prepend('<i class="oci '+ opts.parentNodeSymbol + ' symbol"></i>');
1430
+ $nodeDiv.append(`<i class="edge verticalEdge bottomEdge ${opts.icons.theme}"></i>`)
1431
+ .children('.title').prepend(`<i class="${opts.icons.theme} ${opts.icons.parentNode} parentNodeSymbol"></i>`);
1370
1432
  }
1371
1433
  }
1372
1434
 
@@ -1376,6 +1438,8 @@
1376
1438
  $nodeDiv.on('click', '.bottomEdge', this.bottomEdgeClickHandler.bind(this));
1377
1439
  $nodeDiv.on('click', '.leftEdge, .rightEdge', this.hEdgeClickHandler.bind(this));
1378
1440
  $nodeDiv.on('click', '.toggleBtn', this.toggleVNodes.bind(this));
1441
+ $nodeDiv.on('click', '> .backToCompactSymbol',this.backToCompactHandler.bind(this));
1442
+ $nodeDiv.on('click', '> .backToLooseSymbol',this.backToLooseHandler.bind(this));
1379
1443
 
1380
1444
  if (opts.draggable) {
1381
1445
  this.bindDragDrop($nodeDiv);
@@ -1395,6 +1459,7 @@
1395
1459
  var that = this;
1396
1460
  var opts = this.options;
1397
1461
  var level = 0;
1462
+ var $nodeDiv;
1398
1463
  if (data.level) {
1399
1464
  level = data.level;
1400
1465
  } else {
@@ -1402,23 +1467,26 @@
1402
1467
  }
1403
1468
  // Construct the node
1404
1469
  if (Object.keys(data).length > 2) {
1405
- $appendTo.append(this.createNode(data));
1470
+ $nodeDiv = this.createNode(data);
1471
+ $appendTo.append($nodeDiv);
1406
1472
  }
1407
1473
  // Construct the "inferior nodes"
1408
1474
  if (data.children && data.children.length) {
1409
1475
  var isHidden = level + 1 > opts.visibleLevel || (data.collapsed !== undefined && data.collapsed);
1410
1476
  var $nodesLayer;
1411
- if ((opts.verticalLevel && (level + 1) >= opts.verticalLevel) || data.isHybrid) {
1477
+ if ((opts.verticalLevel && (level + 1) >= opts.verticalLevel) || data.hybrid) {
1412
1478
  $nodesLayer = $('<ul class="nodes">');
1413
1479
  if (isHidden && (opts.verticalLevel && (level + 1) >= opts.verticalLevel)) {
1414
1480
  $nodesLayer.addClass('hidden');
1415
1481
  }
1416
- if (((opts.verticalLevel && level + 1 === opts.verticalLevel) || data.isHybrid)
1482
+ if (((opts.verticalLevel && level + 1 === opts.verticalLevel) || data.hybrid)
1417
1483
  && !$appendTo.closest('.vertical').length) {
1418
1484
  $appendTo.append($nodesLayer.addClass('vertical'));
1419
1485
  } else {
1420
1486
  $appendTo.append($nodesLayer);
1421
1487
  }
1488
+ } else if (data.compact) {
1489
+ $nodeDiv.addClass('compact');
1422
1490
  } else {
1423
1491
  $nodesLayer = $('<ul class="nodes' + (isHidden ? ' hidden' : '') + '">');
1424
1492
  if (Object.keys(data).length === 2) {
@@ -1432,10 +1500,14 @@
1432
1500
  }
1433
1501
  // recurse through children nodes
1434
1502
  $.each(data.children, function () {
1435
- var $nodeCell = $('<li class="hierarchy">');
1436
- $nodesLayer.append($nodeCell);
1437
1503
  this.level = level + 1;
1438
- that.buildHierarchy($nodeCell, this);
1504
+ if (data.compact) {
1505
+ that.buildHierarchy($nodeDiv, this);
1506
+ } else {
1507
+ var $nodeCell = $('<li class="hierarchy">');
1508
+ $nodesLayer.append($nodeCell);
1509
+ that.buildHierarchy($nodeCell, this);
1510
+ }
1439
1511
  });
1440
1512
  }
1441
1513
  },
@@ -1446,16 +1518,16 @@
1446
1518
  // exposed method
1447
1519
  addChildren: function ($node, data) {
1448
1520
  this.buildChildNode($node.closest('.hierarchy'), data);
1449
- if (!$node.find('.symbol').length) {
1450
- $node.children('.title').prepend('<i class="oci '+ this.options.parentNodeSymbol + ' symbol"></i>');
1521
+ if (!$node.find('.parentNodeSymbol').length) {
1522
+ $node.children('.title').prepend(`<i class="${this.options.icons.theme} ${this.options.icons.parentNode} parentNodeSymbol"></i>`);
1451
1523
  }
1452
1524
  if ($node.closest('.nodes.vertical').length) {
1453
1525
  if (!$node.children('.toggleBtn').length) {
1454
- $node.append('<i class="toggleBtn oci"></i>');
1526
+ $node.append(`<i class="toggleBtn ${this.options.icons.theme}"></i>`);
1455
1527
  }
1456
1528
  } else {
1457
1529
  if (!$node.children('.bottomEdge').length) {
1458
- $node.append('<i class="edge verticalEdge bottomEdge oci"></i>');
1530
+ $node.append(`<i class="edge verticalEdge bottomEdge ${this.options.icons.theme}"></i>`);
1459
1531
  }
1460
1532
  }
1461
1533
  if (this.isInAction($node)) {
@@ -1474,7 +1546,7 @@
1474
1546
  addParent: function ($currentRoot, data) {
1475
1547
  this.buildParentNode($currentRoot, data);
1476
1548
  if (!$currentRoot.children('.topEdge').length) {
1477
- $currentRoot.children('.title').after('<i class="edge verticalEdge topEdge oci"></i>');
1549
+ $currentRoot.children('.title').after(`<i class="edge verticalEdge topEdge ${this.options.icons.theme}"></i>`);
1478
1550
  }
1479
1551
  if (this.isInAction($currentRoot)) {
1480
1552
  this.switchVerticalArrow($currentRoot.children('.topEdge'));
@@ -1505,11 +1577,11 @@
1505
1577
  this.buildSiblingNode($node.closest('.hierarchy'), data);
1506
1578
  $node.closest('.nodes').data('siblingsLoaded', true);
1507
1579
  if (!$node.children('.leftEdge').length) {
1508
- $node.children('.topEdge').after('<i class="edge horizontalEdge rightEdge oci"></i><i class="edge horizontalEdge leftEdge oci"></i>');
1580
+ $node.children('.topEdge').after(`<i class="edge horizontalEdge rightEdge ${this.options.icons.theme}"></i><i class="edge horizontalEdge leftEdge ${this.options.icons.theme}"></i>`);
1509
1581
  }
1510
1582
  if (this.isInAction($node)) {
1511
1583
  this.switchHorizontalArrow($node);
1512
- $node.children('.topEdge').removeClass('oci-chevron-up').addClass('oci-chevron-down');
1584
+ $node.children('.topEdge').removeClass(this.options.icons.expandToUp).addClass(this.options.icons.collapseToDown);
1513
1585
  }
1514
1586
  },
1515
1587
  // remove node and its descendent nodes
@@ -1594,10 +1666,10 @@
1594
1666
  if ((!isWebkit && !isFf) || isEdge) {
1595
1667
  window.navigator.msSaveBlob(canvas.msToBlob(), exportFilename + '.png');
1596
1668
  } else {
1597
- var selector = '.oci-download-btn' + (that.options.chartClass !== '' ? '.' + that.options.chartClass : '');
1669
+ var selector = '.download-btn' + (that.options.chartClass !== '' ? '.' + that.options.chartClass : '');
1598
1670
 
1599
1671
  if (!$chartContainer.find(selector).length) {
1600
- $chartContainer.append('<a class="oci-download-btn' + (that.options.chartClass !== '' ? ' ' + that.options.chartClass : '') + '"'
1672
+ $chartContainer.append('<a class="download-btn' + (that.options.chartClass !== '' ? ' ' + that.options.chartClass : '') + '"'
1601
1673
  + ' download="' + exportFilename + '.png"></a>');
1602
1674
  }
1603
1675
 
@@ -1615,7 +1687,7 @@
1615
1687
  var $chartContainer = this.$chartContainer;
1616
1688
  var $mask = $chartContainer.find('.mask');
1617
1689
  if (!$mask.length) {
1618
- $chartContainer.append('<div class="mask"><i class="oci oci-spinner spinner"></i></div>');
1690
+ $chartContainer.append(`<div class="mask"><i class="${this.options.icons.theme} ${this.options.icons.spinner} spinner"></i></div>`);
1619
1691
  } else {
1620
1692
  $mask.removeClass('hidden');
1621
1693
  }