UNPKG

@balkangraph/familytree.js

Version:

Ultimate Family Tree JavaScript library

1 lines 414 kB
var FamilyTree=function(e,t){var i=this;if(("string"==typeof e||e instanceof String)&&(e=document.querySelector(e)),this.element=e,this.config=FamilyTree.mergeDeep(FamilyTree._defaultConfig(t),t),this._layoutConfigs={base:{orientation:this.config.orientation,levelSeparation:this.config.levelSeparation,mixedHierarchyNodesSeparation:this.config.mixedHierarchyNodesSeparation,assistantSeparation:this.config.assistantSeparation,subtreeSeparation:this.config.subtreeSeparation,siblingSeparation:this.config.siblingSeparation,layout:this.config.layout,columns:this.config.columns,collapse:this.config.collapse,partnerNodeSeparation:this.config.partnerNodeSeparation}},this.config.tags)for(var r in this.config.tags){var a=this.config.tags[r];null!=a.subTreeConfig&&(this._layoutConfigs[r]={orientation:null!=a.subTreeConfig.orientation?a.subTreeConfig.orientation:this.config.orientation,levelSeparation:null!=a.subTreeConfig.levelSeparation?a.subTreeConfig.levelSeparation:this.config.levelSeparation,mixedHierarchyNodesSeparation:null!=a.subTreeConfig.mixedHierarchyNodesSeparation?a.subTreeConfig.mixedHierarchyNodesSeparation:this.config.mixedHierarchyNodesSeparation,assistantSeparation:null!=a.subTreeConfig.assistantSeparation?a.subTreeConfig.assistantSeparation:this.config.assistantSeparation,subtreeSeparation:null!=a.subTreeConfig.subtreeSeparation?a.subTreeConfig.subtreeSeparation:this.config.subtreeSeparation,siblingSeparation:null!=a.subTreeConfig.siblingSeparation?a.subTreeConfig.siblingSeparation:this.config.siblingSeparation,layout:null!=a.subTreeConfig.layout?a.subTreeConfig.layout:this.config.layout,columns:null!=a.subTreeConfig.columns?a.subTreeConfig.columns:this.config.columns,collapse:null!=a.subTreeConfig.collapse?a.subTreeConfig.collapse:this.config.collapse,partnerNodeSeparation:null!=a.subTreeConfig.partnerNodeSeparation?a.subTreeConfig.partnerNodeSeparation:this.config.partnerNodeSeparation})}this._event_id=FamilyTree._guid(),FamilyTree._validateConfig(this.config)&&(this._vScroll={},this.config.ui||(this.ui=FamilyTree.ui),this.config.editUI?this.editUI=this.config.editUI:this.editUI=new FamilyTree.editUI,this.editUI.init(this),this.config.filterUI?this.filterUI=this.config.filterUI:this.filterUI=new FamilyTree.filterUI,this.filterUI.init(this),this.manager=new FamilyTree.manager(this),this.config.searchUI?this.searchUI=this.config.searchUI:this.searchUI=new FamilyTree.searchUI,this.config.nodeMenuUI?this.nodeMenuUI=this.config.nodeMenuUI:this.nodeMenuUI=new FamilyTree.menuUI,this.nodeMenuUI.init(this,this.config.nodeMenu),this.config.nodeCircleMenuUI?this.nodeCircleMenuUI=this.config.nodeCircleMenuUI:this.nodeCircleMenuUI=new FamilyTree.circleMenuUI,this.nodeCircleMenuUI.init(this,this.config.nodeCircleMenu),this.config.nodeContextMenuUI?this.nodeContextMenuUI=this.config.nodeContextMenuUI:this.nodeContextMenuUI=new FamilyTree.menuUI,this.nodeContextMenuUI.init(this,this.config.nodeContextMenu),this.config.toolbarUI?this.toolbarUI=this.config.toolbarUI:this.toolbarUI=new FamilyTree.toolbarUI,this.config.notifierUI?this.notifierUI=this.config.notifierUI:this.notifierUI=new FamilyTree.notifierUI,this.notifierUI.init(this),this.config.menuUI?this.menuUI=this.config.menuUI:this.menuUI=new FamilyTree.menuUI,this.menuUI.init(this,this.config.menu),this.config.xScrollUI||(this.xScrollUI=new FamilyTree.xScrollUI(this.element,this.config,function(){return{boundary:i.response.boundary,scale:i.getScale(),viewBox:i.getViewBox(),padding:i.config.padding}},function(e){i.setViewBox(e)},function(){i._draw(!0,FamilyTree.action.xScroll)})),this.config.yScrollUI||(this.yScrollUI=new FamilyTree.yScrollUI(this.element,this.config,function(){return{boundary:i.response.boundary,scale:i.getScale(),viewBox:i.getViewBox(),padding:i.config.padding}},function(e){i.setViewBox(e)},function(){i._draw(!0,FamilyTree.action.xScroll)})),this.config.undoRedoUI?this.undoRedoUI=this.config.undoRedoUI:this.undoRedoUI=new FamilyTree.undoRedoUI,this.element.classList.add("bft-"+this.config.mode),this._gragStartedId=null,this._timeout=null,this._touch=null,this._initialized=!1,this._loaded=!1,this._moveInterval=null,this._movePosition=null,this.response=null,this.nodes=null,this.isVisible=null,FamilyTree._intersectionObserver(this.element,function(e){i.isVisible=e,!1!==FamilyTree.events.publish("visibility-change",[i])&&FamilyTree.LAZY_LOADING&&i.isVisible&&(i._loaded?i._draw(!1,FamilyTree.action.update):(i._setInitialSizeIfNotSet(),i._draw(!1,FamilyTree.action.init)))}))};FamilyTree._defaultConfig=function(e){return{interactive:!0,mode:"light",lazyLoading:!0,enableDragDrop:!1,enableSearch:!0,enableTouch:!1,enablePan:!0,keyNavigation:!1,miniMap:!1,nodeMenu:null,nodeCircleMenu:null,nodeContextMenu:null,menu:null,toolbar:!1,sticky:!0,nodeMouseClick:FamilyTree.action.details,nodeMouseDbClick:FamilyTree.none,mouseScrool:FamilyTree.action.zoom,showXScroll:FamilyTree.none,showYScroll:FamilyTree.none,template:"ana",tags:{},min:!1,nodeBinding:{},linkBinding:{},searchFields:null,searchDisplayField:null,searchFieldsWeight:null,searchFieldsAbbreviation:null,nodes:[],clinks:[],slinks:[],backdrops:[],groupDottedLines:[],dottedLines:[],undoRedoStorageName:null,levelSeparation:60,siblingSeparation:20,subtreeSeparation:40,backdropSeparation:15,mixedHierarchyNodesSeparation:15,assistantSeparation:100,minPartnerSeparation:50,partnerChildrenSplitSeparation:20,partnerNodeSeparation:15,columns:10,padding:30,orientation:FamilyTree.orientation.top,layout:FamilyTree.layout.normal,layoutGridColumns:"dynamic",scaleInitial:1,movable:null,scaleMin:.1,scaleMax:5,orderBy:null,editUI:null,filterUI:null,searchUI:null,xScrollUI:null,yScrollUI:null,nodeMenuUI:null,nodeCircleMenuUI:null,nodeContextMenuUI:null,toolbarUI:null,notifierUI:null,menuUI:null,undoRedoUI:null,exportUrl:"https://balkan.app/export",collapse:{},expand:{},align:FamilyTree.CENTER,UI:null,anim:{func:FamilyTree.anim.outPow,duration:200},zoom:{speed:120,smooth:12},roots:null,state:null,editForm:{readOnly:!1,titleBinding:"name",photoBinding:"img",addMore:"Add more fields",addMoreBtn:"Add",addMoreFieldName:"Field name",saveAndCloseBtn:"Save and close",cancelBtn:"Cancel",generateElementsFromFields:!0,focusBinding:null,buttons:{edit:{icon:FamilyTree.icon.edit(24,24,"#fff"),text:"Edit",hideIfEditMode:!0,hideIfDetailsMode:!1},share:{icon:FamilyTree.icon.share(24,24,"#fff"),text:"Share"},pdf:{icon:FamilyTree.icon.pdf(24,24,"#fff"),text:"Save as PDF"},remove:{icon:FamilyTree.icon.remove(24,24,"#fff"),text:"Remove",hideIfDetailsMode:!0}},elements:[]}}},FamilyTree.prototype.load=function(e,t){var i=this;return this.config.nodes=e,this._draw(!1,FamilyTree.action.init,void 0,function(){i.filterUI.update(),t&&t()}),this},FamilyTree.prototype.loadXML=function(e,t){var i=FamilyTree._xml2json(e);return this.load(i,t)},FamilyTree.prototype.getXML=function(){return FamilyTree._json2xml(this.config.nodes)},FamilyTree.prototype.on=function(e,t){return FamilyTree.events.on(e,t,this._event_id),this},FamilyTree.prototype.removeListener=function(e,t){return FamilyTree.events.remove(e,t,this._event_id)},FamilyTree.prototype.draw=function(e,t,i){null==e&&(e=FamilyTree.action.update),this._draw(!1,e,t,i)},FamilyTree.prototype._draw=function(e,t,i,r){var a=this;if(!FamilyTree.LAZY_LOADING||this.isVisible)if(FamilyTree.LAZY_LOADING||this._initialized||(this._setInitialSizeIfNotSet(),0!=this.width()&&0!=this.height())){this._hideBeforeAnimationCompleted=!1;var n=t==FamilyTree.action.init?null:this.getViewBox();this.manager.read(e,this.width(),this.height(),n,t,i,function(e){if(!a.notifierUI.show(e.notif)){t!=FamilyTree.action.exporting&&(a.nodes=e.nodes,a.visibleNodeIds=e.visibleNodeIds,a.roots=e.roots),a.editUI.fields=e.allFields;var n={defs:""};FamilyTree.events.publish("renderdefs",[a,n]);var o=a.ui.defs(n.defs),l=a.getScale(e.viewBox);o+=a.ui.pointer(a.config,t,l);var s=a.getViewBox(),d=e.viewBox;n={content:o,res:e};FamilyTree.events.publish("prerender",[a,n]),o=n.content;var c=[];if(FamilyTree.RENDER_LINKS_BEFORE_NODES)for(var m=0;m<e.visibleNodeIds.length;m++){var h=e.nodes[e.visibleNodeIds[m]];FamilyTree.getRootOf(h).stParent?c.push(h.id):o+=a.ui.link(h,a,l,e.bordersByRootIdAndLevel,e.nodes,t)}for(m=0;m<e.visibleNodeIds.length;m++){h=e.nodes[e.visibleNodeIds[m]];var p=a._get(h.id);FamilyTree.RENDER_LINKS_BEFORE_NODES&&c.includes(h.id)&&(o+=a.ui.link(h,a,l,e.bordersByRootIdAndLevel,e.nodes,t)),o+=a.ui.node(h,p,e.animations,a.config,void 0,void 0,void 0,t,l,a)}for(m=0;m<e.visibleNodeIds.length;m++){h=e.nodes[e.visibleNodeIds[m]];FamilyTree.RENDER_LINKS_BEFORE_NODES||(o+=a.ui.link(h,a,l,e.bordersByRootIdAndLevel,e.nodes,t)),o+=a.ui.expandCollapseBtn(a,h,a._layoutConfigs,t,l)}n={content:o,res:e};if(FamilyTree.events.publish("render",[a,n]),o=n.content,e=n.res,o+=a.ui.lonely(a.config),t!==FamilyTree.action.exporting){t!==FamilyTree.action.centernode&&t!==FamilyTree.action.insert&&t!==FamilyTree.action.expand&&t!==FamilyTree.action.collapse&&t!==FamilyTree.action.update||(d=s),t===FamilyTree.action.init&&null!=s&&(d=s),a.response=e;F=a.ui.svg(a.width(),a.height(),d,a.config,o);if(a._initialized){var f=a.getSvg(),u=f.parentNode;u.removeChild(f),u.insertAdjacentHTML("afterbegin",F),a._attachEventHandlers(),a.xScrollUI.addListener(a.getSvg()),a.yScrollUI.addListener(a.getSvg()),a.xScrollUI.setPosition(),a.yScrollUI.setPosition()}else a.element.innerHTML=a.ui.css()+F+a.ui.menuButton(a.config),a._attachInitEventHandlers(),a._attachEventHandlers(),a.xScrollUI.create(a.width(),a.config.padding),a.xScrollUI.setPosition(),a.xScrollUI.addListener(a.getSvg()),a.yScrollUI.create(a.height(),a.config.padding),a.yScrollUI.setPosition(),a.yScrollUI.addListener(a.getSvg()),a.config.enableSearch&&a.searchUI.init(a),a.toolbarUI.init(a,a.config.toolbar),a.undoRedoUI.init(a);var y=!1,g=a.response.animations;if(g[0].length>0){a._hideBeforeAnimation(g[0].length);for(m=0;m<g[0].length;m++)g[0][m]=a.getNodeElement(g[0][m]);FamilyTree.animate(g[0],g[1],g[2],a.config.anim.duration,a.config.anim.func,function(){y||(r&&r(),FamilyTree.events.publish("redraw",[a]),a._showAfterAnimation(),y=!0)})}t===FamilyTree.action.centerNode?FamilyTree.animate(a.getSvg(),{viewbox:s},{viewbox:a.response.viewBox},a.config.anim.duration,a.config.anim.func,function(){a.ripple(i.options.rippleId),y||(r&&r(),FamilyTree.events.publish("redraw",[a]),a._showAfterAnimation(),y=!0)},function(){a.xScrollUI.setPosition(),a.yScrollUI.setPosition()}):!s||!a.response||s[0]==a.response.viewBox[0]&&s[1]==a.response.viewBox[1]&&s[2]==a.response.viewBox[2]&&s[3]==a.response.viewBox[3]||t!==FamilyTree.action.insert&&t!==FamilyTree.action.expand&&t!==FamilyTree.action.collapse&&t!==FamilyTree.action.update&&t!==FamilyTree.action.init?0==g[0].length&&(y||(r&&r(),FamilyTree.events.publish("redraw",[a]),y=!0)):FamilyTree.animate(a.getSvg(),{viewbox:s},{viewbox:a.response.viewBox},2*a.config.anim.duration,a.config.anim.func,function(){a.xScrollUI.setPosition(),a.yScrollUI.setPosition(),y||(r&&r(),FamilyTree.events.publish("redraw",[a]),y=!0)}),a._initialized||(a._initialized=!0,a.filterUI.update(),FamilyTree.events.publish("init",[a])),!a._loaded&&e&&e.nodes&&Object.keys(e.nodes).length&&(a._loaded=!0)}else{var v=e.boundary,T=v.maxX-v.minX,b=v.maxY-v.minY,F=a.ui.svg(T,b,[v.minX,v.minY,T,b],a.config,o,l);r(F,e)}}},function(e){FamilyTree.events.publish("ready",[a,e])})}else console.error("Cannot load the family with size 0! If you are using the FamilyTree within tabs set FamilyTree.LAZY_LOADING to true! ")},FamilyTree.prototype._setInitialSizeIfNotSet=function(){this.element.style.overflow="hidden",this.element.style.position="relative",0==this.element.offsetHeight&&(this.element.style.height="100%",0==this.element.offsetHeight&&(this.element.style.height="700px")),0==this.element.offsetWidth&&(this.element.style.width="100%",0==this.element.offsetWidth&&(this.element.style.width="700px"))},FamilyTree.prototype.width=function(){return this.element.offsetWidth},FamilyTree.prototype.height=function(){return this.element.offsetHeight},FamilyTree.prototype.getViewBox=function(){var e=this.getSvg();return FamilyTree._getViewBox(e)},FamilyTree.prototype.setViewBox=function(e){this.getSvg().setAttribute("viewBox",e.toString())},FamilyTree.prototype.getScale=function(e){return e||(e=this.getViewBox()),FamilyTree.getScale(e,this.width(),this.height(),this.config.scaleInitial,this.config.scaleMax,this.config.scaleMin)},FamilyTree.prototype.setScale=function(e){e>this.config.scaleMax&&(e=this.config.scaleMax),e<this.config.scaleMin&&(e=this.config.scaleMin);var t=this.getViewBox().slice(0),i=this.width(),r=this.height(),a=i/t[2],n=r/t[3],o=a>n?n:a,l=t,s=t[2],d=t[3];return t[2]=t[2]/(e/o),t[3]=t[3]/(e/o),t[0]=l[0]-(t[2]-s)/2,t[1]=l[1]-(t[3]-d)/2,this.setViewBox(t),FamilyTree.events.publish("redraw",[this]),e},FamilyTree.prototype.ripple=function(e,t,i){var r=this.getNode(e);if(null!=r){var a=this.getNodeElement(e);if(null!=a){var n=this.getScale(),o=r.w/2,l=r.h/2;if(void 0!==t&&void 0!==i){var s=a.getBoundingClientRect();o=t/n-s.left/n,l=i/n-s.top/n}var d=r.w,c=r.h,m=d-o>o?d-o:o,h=c-l>l?c-l:l,p=m>h?m:h,f=document.createElementNS("http://www.w3.org/2000/svg","g"),u=document.createElementNS("http://www.w3.org/2000/svg","clipPath"),y=document.createElementNS("http://www.w3.org/2000/svg","rect"),g=document.createElementNS("http://www.w3.org/2000/svg","circle"),v=FamilyTree.randomId();u.setAttribute("id",v);var T={ripple:FamilyTree.t(r.templateName,r.min,this.getScale()).ripple,node:r};FamilyTree.events.publish("ripple",[this,T]),y.setAttribute("x",T.ripple.rect?T.ripple.rect.x:0),y.setAttribute("y",T.ripple.rect?T.ripple.rect.y:0),y.setAttribute("width",T.ripple.rect?T.ripple.rect.width:r.w),y.setAttribute("height",T.ripple.rect?T.ripple.rect.height:r.h),y.setAttribute("rx",T.ripple.radius),y.setAttribute("ry",T.ripple.radius),g.setAttribute("clip-path","url(#"+v+")"),g.setAttribute("cx",o),g.setAttribute("cy",l),g.setAttribute("r",0),g.setAttribute("fill",T.ripple.color),g.setAttribute("class","bft-ripple"),u.appendChild(y),f.appendChild(u),f.appendChild(g),a.appendChild(f),FamilyTree.animate(g,{r:0,opacity:1},{r:p,opacity:0},500,FamilyTree.anim.outPow,function(){a.removeChild(f)})}}},FamilyTree.prototype.center=function(e,t,i){var r,a,n=e,o=!0,l=!0;t&&null!=t.parentState&&(r=t.parentState),t&&null!=t.childrenState&&(a=t.childrenState),t&&null!=t.rippleId&&(n=t.rippleId),t&&null!=t.vertical&&(o=t.vertical),t&&null!=t.horizontal&&(l=t.horizontal);var s={parentState:r,childrenState:a,rippleId:n,vertical:o,horizontal:l};this._draw(!1,FamilyTree.action.centerNode,{id:e,options:s},i)},FamilyTree.prototype.fit=function(e){this.config.scaleInitial=FamilyTree.match.boundary,this._draw(!0,FamilyTree.action.init,{method:"fit"},e)},FamilyTree.prototype.fitIfOutside=function(e){this.config.scaleInitial=FamilyTree.match.boundaryIfOutside,this._draw(!0,FamilyTree.action.init,{method:"fit"},e)},FamilyTree.prototype.toggleFullScreen=function(){var e=document.querySelector("["+FamilyTree.attr.tlbr+"r='fullScreen']");document.fullscreenElement==this.element||document.webkitFullscreenElement==this.element||document.mozFullScreenElement==this.element||document.msFullscreenElement==this.element?(document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen(),e&&(e.innerHTML=FamilyTree.toolbarUI.openFullScreenIcon)):(this.element.requestFullscreen?this.element.requestFullscreen():this.element.mozRequestFullScreen?this.element.mozRequestFullScreen():this.element.webkitRequestFullscreen?this.element.webkitRequestFullscreen():this.element.msRequestFullscreen&&this.element.msRequestFullscreen(),e&&(e.innerHTML=FamilyTree.toolbarUI.closeFullScreenIcon))},FamilyTree.prototype.getNode=function(e){return this.nodes[e]},FamilyTree.prototype.setLayout=function(e,t){t||(t="base"),this._layoutConfigs[t].layout=e,"base"==t&&(this.config.layout=e),this._draw(!1,FamilyTree.action.update)},FamilyTree.prototype.setOrientation=function(e,t,i){var r=this;t||(t="base"),this._layoutConfigs[t].orientation=e,"base"==t&&(this.config.orientation=e),this._draw(!1,FamilyTree.action.update,void 0,function(){FamilyTree._moveToBoundaryArea(r.getSvg(),r.getViewBox(),r.response.boundary,function(){r._draw(!0,FamilyTree.action.pan),i&&i()})})},FamilyTree.prototype.search=function(e,t,i){return FamilyTree.isNEU(t)&&(t=this.searchUI._searchFields),FamilyTree.isNEU(i)&&(i=t),FamilyTree._search.search(this.config.nodes,e,t,i,this.config.searchDisplayField,this.config.searchFieldsWeight,this.searchUI._searchFieldsAbbreviation)},FamilyTree.prototype._hideBeforeAnimation=function(e){if(1!=this._hideBeforeAnimationCompleted&&!(e&&e<FamilyTree.ANIM_THRESHOLD)){var t=this.element.getElementsByTagName("text");if(t.length>FamilyTree.TEXT_THRESHOLD)for(var i=0;i<t.length;i++)t[i].style.display="none";var r=this.element.getElementsByTagName("image");if(r.length>FamilyTree.IMAGES_THRESHOLD)for(i=0;i<r.length;i++)r[i].style.display="none";var a=this.element.querySelectorAll("["+FamilyTree.attr.link_id+"]");if(a.length>FamilyTree.LINKS_THRESHOLD)for(i=0;i<a.length;i++)a[i].style.display="none";var n=this.element.querySelectorAll("["+FamilyTree.attr.control_expcoll_id+"]");if(n.length>FamilyTree.BUTTONS_THRESHOLD)for(i=0;i<n.length;i++)n[i].style.display="none";var o=this.element.querySelectorAll("["+FamilyTree.attr.control_up_id+"]");if(o.length>FamilyTree.BUTTONS_THRESHOLD)for(i=0;i<o.length;i++)o[i].style.display="none";this._hideBeforeAnimationCompleted=!0}},FamilyTree.prototype._showAfterAnimation=function(){for(var e=this.element.getElementsByTagName("text"),t=0;t<e.length;t++)e[t].style.display="";var i=this.element.getElementsByTagName("image");for(t=0;t<i.length;t++)i[t].style.display="";var r=this.element.querySelectorAll("["+FamilyTree.attr.link_id+"]");for(t=0;t<r.length;t++)r[t].style.display="";var a=this.element.querySelectorAll("["+FamilyTree.attr.control_expcoll_id+"]");for(t=0;t<a.length;t++)a[t].style.display="";var n=this.element.querySelectorAll("["+FamilyTree.attr.control_up_id+"]");for(t=0;t<n.length;t++)n[t].style.display="";this._hideBeforeAnimationCompleted=!1},FamilyTree.prototype.isChild=function(e,t){for(var i=this.getNode(t);i;){if(i.id==e)return!0;i=i.parent?i.parent:i.stParent}return!1},FamilyTree.prototype.getCollapsedIds=function(e){for(var t=[],i=0;i<e.childrenIds.length;i++){var r=this.getNode(e.childrenIds[i]);1==r.collapsed&&t.push(r.id)}return t},FamilyTree.prototype.stateToUrl=function(){if(this.manager.state){var e={};return e.exp=this.manager.state.exp.join("*"),e.min=this.manager.state.min.join("*"),e.adjustify=this.manager.state.adjustify.x+"*"+this.manager.state.adjustify.y,e.scale=this.manager.state.scale,e.y=this.manager.state.x,e.x=this.manager.state.y,new URLSearchParams(e).toString()}return""},FamilyTree.prototype.generateId=function(){for(;;){var e="_"+("0000"+(Math.random()*Math.pow(36,4)|0).toString(36)).slice(-4);if(null==this.nodes||!this.nodes.hasOwnProperty(e))return e}},FamilyTree.prototype.moveNodesToVisibleArea=function(e,t){for(var i=this,r=this.getSvg(),a=this.getViewBox(),n=null,o=null,l=null,s=null,d=0;d<e.length;d++){var c=this.nodes[e[d]];(null===n||n<c.x+c.w)&&(n=c.x+c.w),(null===o||o<c.y+c.h)&&(o=c.y+c.h),(null===l||l>c.x)&&(l=c.x),(null===s||s>c.y)&&(s=c.y)}var m=this.width(),h=this.height(),p=m/(v=n-l+2*this.config.padding),f=h/(T=o-s+2*this.config.padding),u=p>f?f:p,y=Math.ceil(m/u),g=Math.ceil(h/u),v=0,T=0;if(y-2*this.config.padding>=n-l)v=(n+l)/2-y/2;else switch(v=firstRoot.x-y/2+FamilyTree.manager._getNodeWidth(firstRoot,this.config)/2,this.config.orientation){case FamilyTree.orientation.right:case FamilyTree.orientation.right_top:(v=-(y/2-(l-n)/2))<this.config.padding-y&&(v=this.config.padding-y);break;case FamilyTree.orientation.left:case FamilyTree.orientation.bottom_left:case FamilyTree.orientation.top_left:case FamilyTree.orientation.left_top:(v=-(y/2-(n-l)/2))>-this.config.padding&&(v=-this.config.padding)}if(g-2*this.config.padding>=o-s)T=(o+s)/2-g/2;else switch((T=-(g/2-(o-s)/2))>-this.config.padding&&(T=-this.config.padding),this.config.orientation){case FamilyTree.orientation.bottom:case FamilyTree.orientation.bottom_left:(T=-(g/2-(s-o)/2))<this.config.padding-g&&(T=this.config.padding-g);break;case FamilyTree.orientation.left:case FamilyTree.orientation.right:T=firstRoot.y-g/2+FamilyTree.manager._getNodeWidth(firstRoot,this.config)/2}var b=[v,T,y,g];a[0]!==b[0]||a[1]!==b[1]?FamilyTree.animate(r,{viewBox:a},{viewBox:b},this.config.anim.duration,this.config.anim.func,function(){i.draw(FamilyTree.action.update,void 0,t)}):t&&t()},FamilyTree.prototype._nodeHasHiddenParent=function(e){return!e.parent&&!FamilyTree.isNEU(e.pid)&&this.getNode(e.pid)},FamilyTree.prototype.destroy=function(){this._removeEvent(window,"resize"),FamilyTree.events.removeForEventId(this._event_id),this.element.innerHTML=null},FamilyTree.__defaultConfig=FamilyTree._defaultConfig,FamilyTree._defaultConfig=function(e){var t=FamilyTree.__defaultConfig();return t.nodeTreeMenu=null,t.template="tommy",t.mode="light",t.minPartnerSeparation=30,t.partnerChildrenSplitSeparation=10,t.siblingSeparation=35,t.tags["children-group"]={template:"cgroup",subTreeConfig:{siblingSeparation:7,columns:1}},e&&e.template?(t.tags.male={template:e.template+"_male"},t.tags.female={template:e.template+"_female"}):(t.tags.male={template:t.template+"_male"},t.tags.female={template:t.template+"_female"}),t},FamilyTree.prototype.load=function(e,t){var i=this;return this.config.nodes=e,this._draw(!1,FamilyTree.action.init,void 0,function(){i.filterUI.update(),t&&t()}),this},FamilyTree.prototype.getRecentRootsByNodeId=function(e){this.recentRoots||(this.recentRoots=[]);var t=this.recentRoots,i=this.getNode(e);return i?(i.rids.sort(function(e,i){var r=t.indexOf(e),a=t.indexOf(i);return-1==r?1e3:-1==a?-1e3:r-a}),i.rids):[]},FamilyTree.prototype._nodeHasHiddenParent=function(e){return!(e.parent||FamilyTree.isNEU(e.pid)||!this.getNode(e.pid))||(!(!e.isPartner||FamilyTree.isNEU(e.mid)||!this.getNode(e.mid))||(!(!e.isPartner||FamilyTree.isNEU(e.fid)||!this.getNode(e.fid))||!!(e.isPartner&&e.pids.length>1)))},FamilyTree.prototype._center=FamilyTree.prototype.center,FamilyTree.prototype.center=function(e,t,i){var r=this.getRecentRootsByNodeId(e);Array.isArray(this.config.roots)||(roots=[]),FamilyTree._changeRootOption(this.config.roots,r,this.manager.rootList),this._center(e,t,i)},FamilyTree.localStorage={},FamilyTree.localStorage.getItem=function(e){var t=localStorage.getItem("to_date");if(t){if((t=new Date(t))<new Date){for(var i=0,r=localStorage.length;i<r;++i){var a=localStorage.key(i);a&&a.startsWith&&a.startsWith('{"n"')&&localStorage.removeItem(a)}localStorage.removeItem("to_date")}}else(t=new Date).setDate(t.getDate()+5),t=t.toISOString(),localStorage.setItem("to_date",t);return localStorage.getItem(e)},FamilyTree.localStorage.setItem=function(e,t){try{localStorage.setItem(e,t)}catch(e){e.code==e.QUOTA_EXCEEDED_ERR?(console.warn("Local storage quota exceeded"),localStorage.clear()):(console.error("Local storage error code:"+e.code),console.error(e))}},FamilyTree.prototype.canUpdateLink=function(e,t){if(null==t||null==t)return!1;if(null==e||null==e)return!1;if(e==t)return!1;var i=this.getNode(t),r=this.getNode(e);return!(i&&r&&(i.isPartner||i.hasPartners&&r.isAssistant||i.hasAssistants&&r.isPartner))&&!this.isChild(e,t)},FamilyTree.prototype._canUpdateLink=FamilyTree.prototype.canUpdateLink,FamilyTree.prototype.updateNode=function(e,t,i){var r=this,a=this.get(e.id);if(!0===i&&!1===FamilyTree.events.publish("update",[this,a,e]))return!1;this.update(e),FamilyTree.events.publish("updated",[this]),this.filterUI.update();var n=this.getNode(e.id),o=n.pid;null==o&&(o=n.stpid),this._draw(!1,FamilyTree.action.update,{id:o},function(){r.ripple(e.id),t&&t()})},FamilyTree.prototype.update=function(e){for(var t=0;t<this.config.nodes.length;t++)if(this.config.nodes[t].id==e.id){this._putInUndoStack(),this.clearRedo(),this.config.nodes[t]=e;break}return this},FamilyTree.prototype.removeNode=function(e,t,i){var r=this;if(!this.canRemove(e))return!1;var a=this._getNewPidsAndStpidsForIds(e);if(!0===i&&!1===FamilyTree.events.publish("remove",[this,e,a]))return!1;return this.remove(e),FamilyTree.events.publish("updated",[this]),this.filterUI.update(),this._draw(!1,FamilyTree.action.update,null,function(){r.config.sticky&&FamilyTree._moveToBoundaryArea(r.getSvg(),r.getViewBox(),r.response.boundary),t&&t()}),!0},FamilyTree.prototype.remove=function(e){var t=this.get(e);if(t){this._putInUndoStack(),this.clearRedo();for(var i=this.config.nodes.length-1;i>=0;i--)this.config.nodes[i].pid!=e&&this.config.nodes[i].stpid!=e||(this.config.nodes[i].pid=t.pid,this.config.nodes[i].stpid=t.stpid),this.config.nodes[i].id==e&&this.config.nodes.splice(i,1)}return this},FamilyTree.prototype._getNewPidsAndStpidsForIds=function(e){var t=this.get(e),i={},r={};if(t)for(var a=this.config.nodes.length-1;a>=0;a--)this.config.nodes[a].pid==e?i[this.config.nodes[a].id]=t.pid:this.config.nodes[a].stpid==e&&(r[this.config.nodes[a].id]=t.stpid);return{newPidsForIds:i,newStpidsForIds:r}},FamilyTree.prototype.addNode=function(e,t,i){var r=this;if(!0===i&&!1===FamilyTree.events.publish("add",[this,e]))return!1;this.add(e),FamilyTree.events.publish("updated",[this]),this.filterUI.update(),r._draw(!1,FamilyTree.action.insert,{id:e.pid,insertedNodeId:e.id},function(){r.ripple(e.id),t&&t()})},FamilyTree.prototype.add=function(e){if(null==e.id&&console.error("Call addNode without id"),this._putInUndoStack(),this.clearRedo(),this.config.movable&&!FamilyTree.isNEU(e.pid)){var t=this._get(e.pid);t&&(null!=t.movex&&(e.movex=t.movex),null!=t.movey&&(e.movey=t.movey))}return this.config.nodes.push(e),this},FamilyTree.prototype.replaceIds=function(e,t){this._replaceIds(e),this._draw(!1,FamilyTree.action.update,void 0,t)},FamilyTree.prototype._replaceIds=function(e){for(var t=function(t){for(var i=0;i<t.length;i++){var r=t[i];for(var a in e){var n=e[a];r.from==a&&(r.from=n),r.to==a&&(r.to=n)}}},i=0;i<this.config.nodes.length;i++){var r=this.config.nodes[i];for(var a in e){var n=e[a];r.id==a&&(r.id=n),r.pid==a&&(r.pid=n),r.stpid==a&&(r.stpid=n),r.ppid==a&&(r.ppid=n)}}if(Array.isArray(this.config.roots))for(i=0;i<this.config.roots.length;i++)FamilyTree.isNEU(e[this.config.roots[i]])||(this.config.roots[i]=e[this.config.roots[i]]);if(this.nodes)for(var o in this.nodes)if(!FamilyTree.isNEU(e[o])){n=e[o];(l=this.nodes[o]).id=n,this.nodes[n]=l}if(this.manager.oldNodes)for(var o in this.manager.oldNodes)if(!FamilyTree.isNEU(e[o])){n=e[o];(l=this.manager.oldNodes[o]).id=n,this.manager.oldNodes[n]=l}if(this.roots)for(var o in this.roots)if(!FamilyTree.isNEU(e[o])){var l;n=e[o];(l=this.roots[o]).id=n,this.roots[n]=l}t(this.config.clinks),t(this.config.slinks),t(this.config.groupDottedLines),t(this.config.dottedLines)},FamilyTree.prototype._get=function(e){var t=this.__get(e);if(t)return t;if((this.config.groupDottedLines.length||this.config.dottedLines.length)&&!FamilyTree.isNEU(e)&&"string"==typeof e&&(-1!=e.indexOf("balkan_group_dotted_")||-1!=e.indexOf("balkan_dotted_"))){var i=(e=(e=e.replace("balkan_group_dotted_","")).replace("balkan_dotted_","")).indexOf("_balkan_id_");if(e=e.substring(i+11),t=this.__get(e))return t}return null},FamilyTree.prototype.__get=function(e){for(var t=0;t<this.config.nodes.length;t++)if(this.config.nodes[t].id==e)return this.config.nodes[t];return null},FamilyTree.prototype.get=function(e){var t=this._get(e);return null==t?null:JSON.parse(JSON.stringify(t))},FamilyTree.prototype.canRemove=function(e){var t=this.getNode(e);return!!t&&(!t.hasPartners&&!t.hasAssistants)},FamilyTree.prototype.addChildNode=function(e,t,i){this.hideTreeMenu(!1);var r=this;if(!e||FamilyTree.isNEU(e.mid)&&FamilyTree.isNEU(e.fid))console.error("addSonNode invalid data");else{FamilyTree.isNEU(e.id)&&(e.id=this.generateId());var a={addNodesData:[e],updateNodesData:[],removeNodeId:null};if(!0===i)if(!1===FamilyTree.events.publish("update",[this,a]))return!1;r._fireUpdate_addUpdateRemove(a,i);var n="";FamilyTree.isNEU(a.addNodesData[0].pid)?FamilyTree.isNEU(a.addNodesData[0].mid)?FamilyTree.isNEU(a.addNodesData[0].fid)||(n=a.addNodesData[0].fid):n=a.addNodesData[0].mid:n=a.addNodesData[0].pid,r._draw(!1,FamilyTree.action.insert,{id:n,insertedNodeId:a.addNodesData[0].id},function(){r.ripple(a.addNodesData[0].id),t&&t(),!0===i&&FamilyTree.events.publish("updated",[r,a]),r.filterUI.update()})}},FamilyTree.prototype.addChildAndPartnerNodes=function(e,t,i,r,a){this.hideTreeMenu(!1);var n=this;if(!t||FamilyTree.isNEU(t.mid)&&FamilyTree.isNEU(t.fid))console.error("addChildAndPartnerNodes invalid childData");else if(i){FamilyTree.isNEU(t.id)&&(t.id=this.generateId()),FamilyTree.isNEU(i.id)&&(i.id=this.generateId()),"_ft_partner"==t.mid?t.mid=i.id:"_ft_partner"==t.fid&&(t.fid=i.id);var o=[],l=null;Array.isArray(i.pids)&&(1!=i.pids.length&&console.error("addChildAndPartnerNodes partnerData.pids has to have one partner"),l=this.get(i.pids[0]),Array.isArray(l.pids)||(l.pids=[]),l.pids.push(i.id),o.push(l));var s={addNodesData:[t,i],updateNodesData:o,removeNodeId:null};if(!0===a)if(!1===FamilyTree.events.publish("update",[this,s]))return!1;n._fireUpdate_addUpdateRemove(s,a);var d=n.getRecentRootsByNodeId(e);FamilyTree._changeRootOption(n.config.roots,d,n.manager.rootList);var c="";l?c=l.id:FamilyTree.isNEU(t.pid)?FamilyTree.isNEU(t.mid)?FamilyTree.isNEU(t.fid)||(c=t.fid):c=t.mid:c=t.pid,n._draw(!1,FamilyTree.action.update,{id:c},function(){n.ripple(t.id),n.ripple(i.id),r&&r(),!0===a&&FamilyTree.events.publish("updated",[n,s]),n.filterUI.update()}),!0===a&&FamilyTree.events.publish("updating",[n,s])}else console.error("addChildAndPartnerNodes invalid data")},FamilyTree.prototype.addPartnerAndParentNodes=function(e,t,i,r,a){this.hideTreeMenu(!1);var n=this;if(!FamilyTree.isNEU(t)&&t.length)if(i){FamilyTree.isNEU(i.id)&&(i.id=this.generateId());for(var o=[],l=0;l<t.length;l++){var s=this.get(t[l]);if(!FamilyTree.isNEU(s.mid)&&!FamilyTree.isNEU(s.fid))return void console.error("father id (fid) or mather id (mid) has to be null or undefined");FamilyTree.isNEU(s.mid)?s.mid=i.id:FamilyTree.isNEU(s.mid)||(s.fid=i.id),o.push(s)}var d=null;Array.isArray(i.pids)&&(1!=i.pids.length&&console.error("addChildAndPartnerNodes partnerData.pids has to have one partner"),d=this.get(i.pids[0]),Array.isArray(d.pids)||(d.pids=[]),d.pids.push(i.id),o.push(d));var c={addNodesData:[i],updateNodesData:o,removeNodeId:null};if(!0===a)if(!1===FamilyTree.events.publish("update",[this,c]))return!1;n._fireUpdate_addUpdateRemove(c,a);var m=n.getRecentRootsByNodeId(e);FamilyTree._changeRootOption(n.config.roots,m,n.manager.rootList);var h="";d&&(h=d.id),n._draw(!1,FamilyTree.action.update,{id:h},function(){n.ripple(i.id),r&&r(),!0===a&&FamilyTree.events.publish("updated",[n,c]),n.filterUI.update()}),!0===a&&FamilyTree.events.publish("updating",[n,c])}else console.error("addPartnerAndParentNodes invalid data");else console.error("addPartnerAndParentNodes invalid data")},FamilyTree.prototype.addPartnerNode=function(e,t,i){this.hideTreeMenu(!1);var r=this;if(e&&Array.isArray(e.pids)&&1==e.pids.length){FamilyTree.isNEU(e.id)&&(e.id=this.generateId());var a=this.get(e.pids[0]);Array.isArray(a.pids)||(a.pids=[]),a.pids.push(e.id);var n={removeNodeId:null,updateNodesData:[a],addNodesData:[e]};if(!0===i)if(!1===FamilyTree.events.publish("update",[this,n]))return!1;r._fireUpdate_addUpdateRemove(n,i);var o=r.getRecentRootsByNodeId(n.updateNodesData[0].id);FamilyTree._changeRootOption(r.config.roots,o,r.manager.rootList);var l=n.updateNodesData[0].id;r._draw(!1,FamilyTree.action.insert,{id:l,insertedNodeId:n.addNodesData[0].id},function(){r.ripple(n.addNodesData[0].id),t&&t(),!0===i&&FamilyTree.events.publish("updated",[r,n]),r.filterUI.update()}),!0===i&&FamilyTree.events.publish("updating",[r,n])}else console.error("addPartnerNode invalid data")},FamilyTree.prototype.addParentNode=function(e,t,i,r,a){this.hideTreeMenu(!1);var n=this;if(i){if(["mid","fid"].has(t))if(FamilyTree.isNEU(e))console.error("addParentNode invalid childId");else{FamilyTree.isNEU(i.id)&&(i.id=this.generateId());var o=[],l=this.get(e);l[t]=i.id,o.push(l);var s=null;Array.isArray(i.pids)&&(1!=i.pids.length&&console.error("addParentNode: data has to have one partner"),s=this.get(i.pids[0]),Array.isArray(s.pids)||(s.pids=[]),s.pids.push(i.id),o.push(s));var d={removeNodeId:null,updateNodesData:o,addNodesData:[i]};if(!0===a)if(!1===FamilyTree.events.publish("update",[this,d]))return!1;n._fireUpdate_addUpdateRemove(d,a);var c=e;n.config.roots=[d.addNodesData[0].id],n._draw(!1,FamilyTree.action.insert,{id:c,insertedNodeId:d.addNodesData[0].id},function(){n.ripple(d.addNodesData[0].id),r&&r(),!0===a&&FamilyTree.events.publish("updated",[n,d]),n.filterUI.update()}),!0===a&&FamilyTree.events.publish("updating",[n,d])}else console.error("addParentNode invalid type")}else console.error("addParentNode invalid data")},FamilyTree.prototype.canRemove=function(e){var t=this.getNode(e);if(!t)return!1;var i=this.getNode(t.mid),r=this.getNode(t.fid),a=t.ftChildrenIds.length>0,n=!1,o=t.pids.length>0,l=t.pids.length>1;if(1==t.pids.length){var s=this.getNode(t.pids[0]);n=t.ftChildrenIds.compare(s.ftChildrenIds)}return!(!i&&!r||a||o)||(!(i||r||a||l||!o||n)||(!(i||r||!a||!n)||(!(i||r||!a||n)||!(i||r||a||!n))))},FamilyTree.prototype.removeNode=function(e,t,i){var r=this;if(this.canRemove(e)){var a=this.getNode(e),n=[];if(Array.isArray(a.pids))for(var o=0;o<a.pids.length;o++){var l=this.get(a.pids[o]);if(l)-1!=(d=l.pids.indexOf(a.id))&&(l.pids.splice(d,1),n.push(l))}if(Array.isArray(a.ftChildrenIds))for(o=0;o<a.ftChildrenIds.length;o++){var s=this.get(a.ftChildrenIds[o]);s&&(s.mid==a.id?(s.mid=void 0,n.push(s)):s.fid==a.id&&(s.fid=void 0,n.push(s)))}var d,c={removeNodeId:e,updateNodesData:n,addNodesData:[]};if(!0===i)if(!1===FamilyTree.events.publish("update",[this,c]))return!1;r._fireUpdate_addUpdateRemove(c,i),-1!=(d=r.config.roots.indexOf(e))&&r.config.roots.splice(d,1),r._draw(!1,FamilyTree.action.update,null,function(){r.config.sticky&&FamilyTree._moveToBoundaryArea(r.getSvg(),r.getViewBox(),r.response.boundary),t&&t(),!0===i&&FamilyTree.events.publish("updated",[r,c]),r.filterUI.update()}),!0===i&&FamilyTree.events.publish("updating",[r,c])}},FamilyTree.prototype.updateNode=function(e,t,i){var r=this,a=this.getNode(e.id);e.pids||(e.pids=[]);var n=[];n.push(e);for(var o=0;o<a.pids.length;o++){if(!e.pids.has(a.pids[o]))if((s=this._get(a.pids[o]))&&s.pids){var l=s.pids.indexOf(e.id);-1!=l&&(s.pids.splice(l,1),n.push(e)),a.pids.splice(o,1),n.push(s)}}for(o=0;o<e.pids.length;o++){var s;if(!a.pids||!a.pids.has(e.pids[o]))(s=this._get(e.pids[o])).pids||(s.pids=[]),s.pids.push(e.pids[o]),n.push(s)}var d={removeNodeId:null,updateNodesData:n,addNodesData:[]};if(!0===i&&!1===FamilyTree.events.publish("update",[this,d]))return!1;r._fireUpdate_addUpdateRemove(d,i),r._draw(!1,FamilyTree.action.update,null,function(){r.config.sticky&&FamilyTree._moveToBoundaryArea(r.getSvg(),r.getViewBox(),r.response.boundary),t&&t(),!0===i&&FamilyTree.events.publish("updated",[r,d]),r.filterUI.update()})},FamilyTree.prototype._fireUpdate_addUpdateRemove=function(e,t){for(var i=0;i<e.addNodesData.length;i++)this.add(e.addNodesData[i]);for(i=0;i<e.updateNodesData.length;i++)this.update(e.updateNodesData[i]);FamilyTree.isNEU(e.removeNodeId)||this.remove(e.removeNodeId),!0===t&&FamilyTree.events.publish("updating",[this,e])},FamilyTree.prototype.__replaceIds=FamilyTree.prototype._replaceIds,FamilyTree.prototype._replaceIds=function(e){this.__replaceIds(e);for(var t=0;t<this.config.nodes.length;t++){var i=this.config.nodes[t];for(var r in e){var a=e[r];if(i.fid==r&&(i.fid=a),i.mid==r&&(i.mid=a),Array.isArray(i.pids))for(var n=0;n<i.pids.length;n++)i.pids[n]==r&&(i.pids[n]=a)}}},void 0===FamilyTree&&(FamilyTree={}),FamilyTree._ajax=function(e,t,i,r,a){null==r&&(r="arraybuffer");var n=new XMLHttpRequest;n.onload=function(e){4==n.readyState&&200===this.status&&(null==e.target?a(this.response):a(e.target.response))},n.onerror=function(e){a({error:e})},n.open(t,e),n.responseType=r,n.setRequestHeader("Content-Type","application/json"),null==i?n.send():n.send(i)},void 0===FamilyTree&&(FamilyTree={}),FamilyTree.animate=function(e,t,i,r,a,n,o){var l,s=10,d=1,c=r/s+1;document.getElementsByTagName("g");return Array.isArray(e)||(e=[e]),Array.isArray(t)||(t=[t]),Array.isArray(i)||(i=[i]),l=setInterval(function(){for(var m=0;m<e.length;m++)for(var h in i[m]){var p=FamilyTree._arrayContains(["top","left","right","bottom","width","height"],h.toLowerCase())?"px":"";switch(h.toLowerCase()){case"d":var f=a((d*s-s)/r)*(i[m][h][0]-t[m][h][0])+t[m][h][0],u=a((d*s-s)/r)*(i[m][h][1]-t[m][h][1])+t[m][h][1];e[m].setAttribute("d",e[m].getAttribute("d")+" L"+f+" "+u);break;case"r":var y=a((d*s-s)/r)*(i[m][h]-t[m][h])+t[m][h];e[m].setAttribute("r",y);break;case"x1":y=a((d*s-s)/r)*(i[m][h]-t[m][h])+t[m][h];e[m].setAttribute("x1",y);break;case"x2":y=a((d*s-s)/r)*(i[m][h]-t[m][h])+t[m][h];e[m].setAttribute("x2",y);break;case"y1":y=a((d*s-s)/r)*(i[m][h]-t[m][h])+t[m][h];e[m].setAttribute("y1",y);break;case"y2":y=a((d*s-s)/r)*(i[m][h]-t[m][h])+t[m][h];e[m].setAttribute("y2",y);break;case"rotate3d":if(i[m][h]){var g=t[m][h],v=i[m][h],T=[0,0,0,0];for(var b in g)T[b]=a((d*s-s)/r)*(v[b]-g[b])+g[b];e[m].style.transform="rotate3d("+T.toString()+"deg)"}break;case"transform":if(i[m][h]){g=t[m][h],v=i[m][h],T=[0,0,0,0,0,0];for(var b in g)T[b]=a((d*s-s)/r)*(v[b]-g[b])+g[b];e[m].hasAttribute("transform")?e[m].setAttribute("transform","matrix("+T.toString()+")"):e[m].style.transform="matrix("+T.toString()+")"}break;case"viewbox":if(i[m][h]){g=t[m][h],v=i[m][h],T=[0,0,0,0];for(var b in g)T[b]=a((d*s-s)/r)*(v[b]-g[b])+g[b];e[m].setAttribute("viewBox",T.toString())}break;case"margin":if(i[m][h]){g=t[m][h],v=i[m][h],T=[0,0,0,0];for(var b in g)T[b]=a((d*s-s)/r)*(v[b]-g[b])+g[b];var F="";for(b=0;b<T.length;b++)F+=parseInt(T[b])+"px ";e[m]&&e[m].style&&(e[m].style[h]=F)}break;case"scrolly":y=a((d*s-s)/r)*(i[m][h]-t[m][h])+t[m][h];e[m].scrollTo(0,y);break;default:y=a((d*s-s)/r)*(i[m][h]-t[m][h])+t[m][h];e[m]&&e[m].style&&(e[m].style[h]=y+p)}}o&&o(),(d+=1)>c+1&&(clearInterval(l),n&&n(e))},s)},FamilyTree.anim={},FamilyTree.anim.inPow=function(e){return e<0?0:e>1?1:Math.pow(e,2)},FamilyTree.anim.outPow=function(e){if(e<0)return 0;if(e>1)return 1;return-1*(Math.pow(e-1,2)+-1)},FamilyTree.anim.inOutPow=function(e){if(e<0)return 0;if(e>1)return 1;if((e*=2)<1)return FamilyTree.anim.inPow(e,2)/2;return-.5*(Math.pow(e-2,2)+-2)},FamilyTree.anim.inSin=function(e){return e<0?0:e>1?1:1-Math.cos(e*(Math.PI/2))},FamilyTree.anim.outSin=function(e){return e<0?0:e>1?1:Math.sin(e*(Math.PI/2))},FamilyTree.anim.inOutSin=function(e){return e<0?0:e>1?1:-.5*(Math.cos(Math.PI*e)-1)},FamilyTree.anim.inExp=function(e){return e<0?0:e>1?1:Math.pow(2,10*(e-1))},FamilyTree.anim.outExp=function(e){return e<0?0:e>1?1:1-Math.pow(2,-10*e)},FamilyTree.anim.inOutExp=function(e){return e<0?0:e>1?1:e<.5?.5*Math.pow(2,10*(2*e-1)):.5*(2-Math.pow(2,10*(-2*e+1)))},FamilyTree.anim.inCirc=function(e){return e<0?0:e>1?1:-(Math.sqrt(1-e*e)-1)},FamilyTree.anim.outCirc=function(e){return e<0?0:e>1?1:Math.sqrt(1-(e-1)*(e-1))},FamilyTree.anim.inOutCirc=function(e){return e<0?0:e>1?1:e<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(2*e-2)*(2*e-2))+1)},FamilyTree.anim.rebound=function(e){return e<0?0:e>1?1:e<1/2.75?1-7.5625*e*e:e<2/2.75?1-(7.5625*(e-1.5/2.75)*(e-1.5/2.75)+.75):e<2.5/2.75?1-(7.5625*(e-2.25/2.75)*(e-2.25/2.75)+.9375):1-(7.5625*(e-2.625/2.75)*(e-2.625/2.75)+.984375)},FamilyTree.anim.inBack=function(e){return e<0?0:e>1?1:e*e*(2.70158*e-1.70158)},FamilyTree.anim.outBack=function(e){return e<0?0:e>1?1:(e-1)*(e-1)*(2.70158*(e-1)+1.70158)+1},FamilyTree.anim.inOutBack=function(e){return e<0?0:e>1?1:e<.5?4*e*e*(7.1898*e-2.5949)*.5:.5*((2*e-2)*(2*e-2)*(3.5949*(2*e-2)+2.5949)+2)},FamilyTree.anim.impulse=function(e){var t=2*e;return t*Math.exp(1-t)},FamilyTree.anim.expPulse=function(e){return Math.exp(-2*Math.pow(e,2))},void 0===FamilyTree&&(FamilyTree={}),FamilyTree.prototype._attachInitEventHandlers=function(e){this._addEvent(window,"resize",this._resizeHandler)},FamilyTree.prototype._attachEventHandlers=function(e){if(this.config.interactive){e=this.getSvg();this.config.enableTouch||FamilyTree.isMobile()?(this._addEvent(e,"touchstart",this._globalMouseDownHandler),this._addEvent(e,"touchend",this._globalClickHandler)):(this._addEvent(e,"mousedown",this._globalMouseDownHandler),this._addEvent(e,"click",this._globalClickHandler),this._addEvent(e,"contextmenu",this._globalContextHandler),this._addEvent(e,"dblclick",this._globalDbClickHandler),this.config.mouseScrool!=FamilyTree.action.none&&this._addEvent(e,"wheel",this._mouseScrollHandler));var t=this.getMenuButton();t&&this._addEvent(t,"click",this._menuClickHandler)}},FamilyTree.prototype._addEvent=function(e,t,i,r){var a,n;(r||(r=""),e.getListenerList||(e.getListenerList={}),e.getListenerList[t+r])||(a=this,n=i,i=function(){if(n)return n.apply(a,[this,arguments[0]])},e.addEventListener?"mousewheel"==t?e.addEventListener(t,o,{passive:!1}):e.addEventListener(t,o,!1):e.attachEvent("on"+t,function(){var t=i.call(e,window.event);return!1===t&&(window.event.returnValue=!1,window.event.cancelBubble=!0),t}),e.getListenerList[t+r]=o);function o(e){var t=i.apply(this,arguments);return!1===t&&(e.stopPropagation(),e.preventDefault()),t}},FamilyTree.prototype._removeEvent=function(e,t){if(e.getListenerList[t]){var i=e.getListenerList[t];e.removeEventListener(t,i,!1),delete e.getListenerList[t]}},void 0===FamilyTree&&(FamilyTree={}),FamilyTree.VERSION="8.14.55",FamilyTree.orientation={},FamilyTree.orientation.top=0,FamilyTree.orientation.bottom=1,FamilyTree.orientation.right=2,FamilyTree.orientation.left=3,FamilyTree.orientation.top_left=4,FamilyTree.orientation.bottom_left=5,FamilyTree.orientation.right_top=6,FamilyTree.orientation.left_top=7,FamilyTree.align={},FamilyTree.align.center=FamilyTree.CENTER=8,FamilyTree.align.orientation=FamilyTree.ORIENTATION=9,FamilyTree.attr={},FamilyTree.attr.l="data-l",FamilyTree.attr.id="data-id",FamilyTree.attr.sl="data-sl",FamilyTree.attr.lbl="data-lbl",FamilyTree.attr.val="data-val",FamilyTree.attr.tlbr="data-tlbr",FamilyTree.attr.item="data-item",FamilyTree.attr.layout="data-layout",FamilyTree.attr.node_id="data-n-id",FamilyTree.attr.link_id="data-l-id",FamilyTree.attr.field_name="data-f-name",FamilyTree.attr.c_link_to="data-c-l-to",FamilyTree.attr.c_link_from="data-c-l-from",FamilyTree.attr.s_link_to="data-s-l-to",FamilyTree.attr.s_link_from="data-s-l-from",FamilyTree.attr.control_add="data-ctrl-add",FamilyTree.attr.control_expcoll_id="data-ctrl-ec-id",FamilyTree.attr.control_up_id="data-ctrl-up-id",FamilyTree.attr.control_export_menu="data-ctrl-menu",FamilyTree.attr.control_node_menu_id="data-ctrl-n-menu-id",FamilyTree.attr.control_node_circle_menu_id="data-ctrl-n-c-menu-id",FamilyTree.attr.control_node_circle_menu_name="data-ctrl-n-c-menu-name",FamilyTree.attr.control_node_circle_menu_wrraper_id="data-ctrl-n-c-menu-wrapper-id",FamilyTree.attr.width="data-width",FamilyTree.attr.text_overflow="data-text-overflow",FamilyTree.ID="id",FamilyTree.PID="pid",FamilyTree.STPID="stpid",FamilyTree.TAGS="tags",FamilyTree.NODES="nodes",FamilyTree.ELASTIC="elastic",FamilyTree.ASSISTANT="Assistant",FamilyTree.action={},FamilyTree.action.expand=0,FamilyTree.action.collapse=1,FamilyTree.action.maximize=101,FamilyTree.action.minimize=102,FamilyTree.action.expandCollapse=501,FamilyTree.action.edit=1,FamilyTree.action.zoom=2,FamilyTree.action.ctrlZoom=22,FamilyTree.action.scroll=41,FamilyTree.action.xScroll=3,FamilyTree.action.yScroll=4,FamilyTree.action.none=5,FamilyTree.action.init=6,FamilyTree.action.update=7,FamilyTree.action.move=70,FamilyTree.action.pan=8,FamilyTree.action.centerNode=9,FamilyTree.action.resize=10,FamilyTree.action.insert=11,FamilyTree.action.insertfirst=12,FamilyTree.action.details=13,FamilyTree.action.exporting=14,FamilyTree.none=400001,FamilyTree.scroll={},FamilyTree.scroll.visible=!0,FamilyTree.scroll.smooth=12,FamilyTree.scroll.speed=120,FamilyTree.scroll.safari={smooth:12,speed:250},FamilyTree.match={},FamilyTree.match.height=100001,FamilyTree.match.width=100002,FamilyTree.match.boundary=100003,FamilyTree.match.boundaryIfOutside=100004,FamilyTree.movable={},FamilyTree.movable.node="node",FamilyTree.movable.tree="tree",FamilyTree.movable.detachTree="detachTree",FamilyTree.layout={},FamilyTree.layout.normal=FamilyTree.normal=0,FamilyTree.layout.mixed=FamilyTree.mixed=1,FamilyTree.layout.tree=FamilyTree.tree=2,FamilyTree.layout.treeLeftOffset=FamilyTree.treeLeftOffset=3,FamilyTree.layout.treeRightOffset=FamilyTree.treeRightOffset=4,FamilyTree.layout.treeLeft=5,FamilyTree.layout.treeRight=6,FamilyTree.layout.grid=-1,FamilyTree.nodeOpenTag="<g "+FamilyTree.attr.node_id+'="{id}" style="opacity: {opacity}" transform="matrix(1,0,0,1,{x},{y})" class="{class}" '+FamilyTree.attr.sl+'="{sl}" '+FamilyTree.attr.l+"={level} {lcn}>",FamilyTree.linkOpenTag="<g "+FamilyTree.attr.link_id+'="[{id}][{child-id}]" class="{class}">',FamilyTree.expcollOpenTag="<g "+FamilyTree.attr.control_expcoll_id+'="{id}" transform="matrix(1,0,0,1,{x},{y})" style="cursor:pointer;">',FamilyTree.upOpenTag="<g "+FamilyTree.attr.control_up_id+'="{id}" transform="matrix(1,0,0,1,{x},{y})" style="cursor:pointer;">',FamilyTree.linkFieldsOpenTag='<g transform="matrix(1,0,0,1,{x},{y}) rotate({rotate})">',FamilyTree.grCloseTag="</g>",FamilyTree.A5w=420,FamilyTree.A5h=595,FamilyTree.A4w=595,FamilyTree.A4h=842,FamilyTree.A3w=842,FamilyTree.A3h=1191,FamilyTree.A2w=1191,FamilyTree.A2h=1684,FamilyTree.A1w=1684,FamilyTree.A1h=2384,FamilyTree.Letterw=612,FamilyTree.Letterh=791,FamilyTree.Legalw=612,FamilyTree.Legalh=1009,FamilyTree.COLLAPSE_PARENT_NEIGHBORS=1,FamilyTree.COLLAPSE_SUB_CHILDRENS=2,FamilyTree.COLLAPSE_PARENT_SUB_CHILDREN_EXCEPT_CLICKED=3,FamilyTree.TEXT_THRESHOLD=400,FamilyTree.IMAGES_THRESHOLD=100,FamilyTree.LINKS_THRESHOLD=200,FamilyTree.BUTTONS_THRESHOLD=70,FamilyTree.ANIM_THRESHOLD=50,FamilyTree.IT_IS_LONELY_HERE='<g transform="translate(-100, 0)" style="cursor:pointer;" '+FamilyTree.attr.control_add+'="control-add"><text fill="#039be5">{link}</text></g>',FamilyTree.RES={},FamilyTree.IT_IS_LONELY_HERE_LINK=FamilyTree.RES.IT_IS_LONELY_HERE_LINK="It's lonely here, add your first node",FamilyTree.FIRE_DRAG_NOT_CLICK_IF_MOVE=3,FamilyTree.STRING_TAGS=!1,FamilyTree.MAX_NODES_MESS="The trial has expired or 200 nodes limit was reached! <br /><a style='color: #039BE5;' target='_blank' href='https://balkan.app/FamilyTreeJS/Docs/Evaluation'>See more</a>",FamilyTree.OFFLINE_MESS="The evaluation version requires internet connection! <br /><a style='color: #039BE5;' target='_blank' href='https://balkan.app/FamilyTreeJS/Docs/Evaluation'>See more</a>",FamilyTree.SEARCH_PLACEHOLDER="Search... type ? to get help.",FamilyTree.SEARCH_HELP_SYMBOL="?",FamilyTree.SEARCH_CLOSE_RESULT_ON_ESCAPE_OR_CLICKOUTSIDE=!1,FamilyTree.SEARCH_RESULT_LIMIT=10,FamilyTree.IMPORT_MESSAGE="Choose the columns (fields) in your data file that contain the required information.",FamilyTree.FIXED_POSITION_ON_CLICK=!1,FamilyTree.RENDER_LINKS_BEFORE_NODES=!1,FamilyTree.RENDER_CLINKS_BEFORE_NODES=!1,FamilyTree.MIXED_LAYOUT_ALL_NODES=!0,FamilyTree.MIXED_LAYOUT_FOR_NODES_WITH_COLLAPSED_CHILDREN=!1,FamilyTree.MIXED_LAYOUT_IF_NUMBER_OF_CHILDREN_IS_MORE_THEN=1,FamilyTree.LINK_ROUNDED_CORNERS=5,FamilyTree.MOVE_STEP=5,FamilyTree.CLINK_CURVE=1,FamilyTree.MAX_DEPTH=200,FamilyTree.SCALE_FACTOR=1.44,FamilyTree.LAZY_LOADING_FACTOR=500,FamilyTree.HIDE_EDIT_FORM_ON_PAN=!0,FamilyTree.LAZY_LOADING=!0,FamilyTree.ARRAY_FIELDS=["tags"],FamilyTree.CSV_DELIMITER=",",FamilyTree.EDITFORM_CLOSE_BTN='<svg data-edit-from-close class="bft-edit-form-close"><path style="fill:#ffffff;" d="M21.205,5.007c-0.429-0.444-1.143-0.444-1.587,0c-0.429,0.429-0.429,1.143,0,1.571l8.047,8.047H1.111 C0.492,14.626,0,15.118,0,15.737c0,0.619,0.492,1.127,1.111,1.127h26.554l-8.047,8.032c-0.429,0.444-0.429,1.159,0,1.587 c0.444,0.444,1.159,0.444,1.587,0l9.952-9.952c0.444-0.429,0.444-1.143,0-1.571L21.205,5.007z"></path></svg>',FamilyTree.ESCAPE_HTML=!1,FamilyTree.VERTICAL_CHILDREN_ASSISTANT=!1,FamilyTree.EXPORT_PAGES_CUT_NODES=!1,FamilyTree.RESET_MOVABLE_ONEXPANDCOLLAPSE=!1,FamilyTree.FILTER_ALPHABETICALLY=!0,FamilyTree.SERVER_PREFIX=".azurewebsites.net/api/OrgChartJS",FamilyTree.FUNC_URL_NAME="func-url-orgfamilyjs",FamilyTree.MINIMUM_SYMBOLS_IN_SEARCH_INPUT=1,"undefined"!=typeof module&&(module.exports=FamilyTree),FamilyTree.SERVER_PREFIX=".azurewebsites.net/api/FamilyTreeJS",FamilyTree.FUNC_URL_NAME="func-url-familytreejs",FamilyTree.OC_VERSION=FamilyTree.VERSION,FamilyTree.VERSION="1.09.47",FamilyTree.RENDER_LINKS_BEFORE_NODES=!0,FamilyTree.ARRAY_FIELDS=["tags","pids"],FamilyTree._intersects=function(e,t,i){var r=e.x-i.siblingSeparation/4,a=e.y,n=e.x+e.w+i.siblingSeparation/4,o=e.y;switch(i.orientation){case FamilyTree.orientation.right:case FamilyTree.orientation.right_top:case FamilyTree.orientation.left:case FamilyTree.orientation.left_top:r=e.x,a=e.y-i.siblingSeparation/4,n=e.x,o=e.y+e.h+i.siblingSeparation/4}var l,s,d,c=t.p,m=t.q,h=t.r,p=t.s;return 0!==(l=(n-r)*(p-m)-(h-c)*(o-a))&&(s=((a-o)*(h-r)+(n-r)*(p-a))/l,0<(d=((p-m)*(h-r)+(c-h)*(p-a))/l)&&d<1&&0<s&&s<1)},FamilyTree._addPoint=function(e,t,i,r,a){switch(i.orientation){case FamilyTree.orientation.top:case FamilyTree.orientation.top_left:return FamilyTree._addPointTop(e,t,i,r,a);case FamilyTree.orientation.bottom:case FamilyTree.orientation.bottom_left:return FamilyTree._addPointBottom(e,t,i,r,a);case FamilyTree.orientation.left:case FamilyTree.orientation.left_top:return FamilyTree._addPointLeft(e,t,i,r,a);case FamilyTree.orientation.right:ca