js-pkg
Version:
Npm package of Syncfusion.JavaScript.
10 lines • 1.23 MB
JavaScript
/*!
* filename: ej.diagram.min.js
* version : 15.3.0.33
* Copyright Syncfusion Inc. 2001 - 2017. All rights reserved.
* Use of this code is subject to the terms of our license.
* A copy of the current license can be obtained at any time by e-mailing
* licensing@syncfusion.com. Any infringement will be prosecuted under
* applicable laws.
*/
(function(n){typeof define=="function"&&define.amd?define(["./../common/ej.core.min","jsrender","./../common/ej.data.min","./../common/ej.touch.min","./../common/ej.draggable.min","./../common/ej.scroller.min","./../web/ej.menu.min"],n):n()})(function(){(function($,ej,undefined){"use strict";ej.widget("ejDiagram","ej.datavisualization.Diagram",{element:null,model:null,_requiresID:!0,validTags:["div"],defaults:{width:"",height:"",nodes:[],connectors:[],labelRenderingMode:"html",defaultSettings:{connector:null,node:null,group:null},nodeTemplate:null,connectorTemplate:null,dataSourceSettings:{dataSource:null,query:null,tableName:null,id:"",parent:"",nodes:null,connectors:null,root:"",crudAction:{create:"",update:"",destroy:"",read:""},customFields:[],connectionDataSource:{dataSource:null,id:"",sourceNode:"",targetNode:"",sourcePointX:"",sourcePointY:"",targetPointX:"",targetPointY:"",crudAction:{create:"",update:"",destroy:"",read:""},customFields:[]}},rulerSettings:{showRulers:!1,horizontalRuler:{interval:5,segmentWidth:100,arrangeTick:null,tickAlignment:"rightorbottom",markerColor:"red",length:null,thickness:25},verticalRuler:{interval:5,segmentWidth:100,arrangeTick:null,tickAlignment:"rightorbottom",markerColor:"red",length:null,thickness:25}},snapSettings:{horizontalGridLines:{linesInterval:null,snapInterval:[20],lineDashArray:"",lineColor:"lightgray"},verticalGridLines:{linesInterval:null,snapInterval:[20],lineDashArray:"",lineColor:"lightgray"},snapConstraints:15,enableSnapToObject:!0,snapAngle:5,snapObjectDistance:5},scrollSettings:{horizontalOffset:0,verticalOffset:0,currentZoom:1,viewPortHeight:0,viewPortWidth:0,minZoom:.25,maxZoom:30,zoomFactor:.2,padding:{left:0,right:0,top:0,bottom:0}},pageSettings:{pageWidth:null,pageHeight:null,multiplePage:!1,pageBorderWidth:0,pageBackgroundColor:"#ffffff",pageBorderColor:"#565656",pageMargin:24,showPageBreak:!1,pageOrientation:"portrait",scrollLimit:"diagram",scrollableArea:{x:Number.POSITIVE_INFINITY,y:Number.POSITIVE_INFINITY,width:Number.POSITIVE_INFINITY,height:Number.POSITIVE_INFINITY},autoScrollBorder:{left:15,top:15,right:15,bottom:15},boundaryConstraints:"infinity"},locale:"en-US",contextMenu:{items:[],showCustomMenuItemsOnly:!1},enableContextMenu:!0,enableAutoScroll:!0,tooltip:{templateId:"",relativeMode:"object",alignment:{horizontal:"center",vertical:"bottom"},margin:{left:5,right:5,top:5,bottom:5}},showTooltip:!0,layout:{bounds:null,type:"none",horizontalAlignment:"center",verticalAlignment:"top",orientation:"toptobottom",horizontalSpacing:30,verticalSpacing:30,margin:{left:0,right:0,top:0,bottom:0},marginX:0,marginY:0,fixedNode:"",getLayoutInfo:null,getConnectorSegments:null,root:""},drawingTools:{},backgroundImage:{source:"",scale:"meet",alignment:"xmidymid"},backgroundColor:"transparent",bridgeDirection:"top",version:"13.1",constraints:502,tool:null,drawType:{},selectedItems:{offsetX:0,offsetY:0,width:0,height:0,rotateAngle:0,children:[],constraints:30,userHandles:[],tooltip:{templateId:"",alignment:{horizontal:"center",vertical:"bottom"},margin:{top:10}},getConstraints:null},commandManager:{commands:{}},historyManager:{push:null,pop:null,canPop:null,canLog:null,undo:null,redo:null,startGroupAction:null,closeGroupAction:null,stackLimit:null,undoStack:[],redoStack:[]},connectorType:"straightLine",editorFocusChange:null,nodeCollectionChange:null,templateNodeRendering:null,historyChange:null,autoScrollChange:null,itemClick:null,connectorCollectionChange:null,selectionChange:null,mouseLeave:null,mouseEnter:null,mouseOver:null,click:null,doubleClick:null,dragEnter:null,dragOver:null,dragLeave:null,drop:null,drag:null,textChange:null,sizeChange:null,connectionChange:null,rotationChange:null,contextMenuClick:null,contextMenuBeforeOpen:null,contextMenuClose:null,connectorSourceChange:null,connectorTargetChange:null,scrollChange:null,segmentChange:null,propertyChange:null,groupChange:null,create:null,destroy:null},observables:["nodes","connectors","locale","enableContextMenu","backgroundColor","backgroundImage","enableAutoScroll","showTooltip","bridgeDirection","tool","pageSettings.pageHeight","pageSettings.pageWidth","pageSettings.multiplePage","pageSettings.pageBorderWidth","pageSettings.pageBackgroundColor","pageSettings.pageBorderColor","pageSettings.pageMargin","pageSettings.showPageBreak","pageSettings.pageOrientation","pageSettings.scrollLimit","snapSettings.enableSnapToObject","snapSettings.snapAngle","snapSettings.snapObjectDistance","snapSettings.snapConstraints","dataSourceSettings.id","dataSourceSettings.parent","dataSourceSettings.root","dataSourceSettings.dataSource","dataSourceSettings.tableName","dataSourceSettings.query","layout.type","layout.orientation","layout.horizontalSpacing","layout.verticalSpacing","layout.marginX","layout.marginY","layout.fixedNode","selectedItems.offsetX","selectedItems.offsetY","selectedItems.width","selectedItems.height","selectedItems.rotateAngle","scrollSettings.horizontalOffset","scrollSettings.verticalOffset","scrollSettings.zoomFactor","tooltip.templateId","tooltip.relativeMode","tooltip.alignment.horizontal","tooltip.alignment.vertical","contextMenu.items","contextMenu.showCustomMenuItemsOnly"],nodes:ej.util.valueFunction("nodes"),connectors:ej.util.valueFunction("connectors"),locale:ej.util.valueFunction("locale"),enableContextMenu:ej.util.valueFunction("enableContextMenu"),enableAutoScroll:ej.util.valueFunction("enableAutoScroll"),showTooltip:ej.util.valueFunction("showTooltip"),bridgeDirection:ej.util.valueFunction("bridgeDirection"),tool:ej.util.valueFunction("tool"),_backgroundColor:ej.util.valueFunction("backgroundColor"),_backgroundImage:ej.util.valueFunction("backgroundImage"),_pageHeight:ej.util.valueFunction("pageSettings.pageHeight"),_pageWidth:ej.util.valueFunction("pageSettings.pageWidth"),_multiplePage:ej.util.valueFunction("pageSettings.multiplePage"),_pageBorderWidth:ej.util.valueFunction("pageSettings.pageBorderWidth"),_pageBackgroundColor:ej.util.valueFunction("pageSettings.pageBackgroundColor"),_pageBorderColor:ej.util.valueFunction("pageSettings.pageBorderColor"),_pageMargin:ej.util.valueFunction("pageSettings.pageMargin"),_showPageBreak:ej.util.valueFunction("pageSettings.showPageBreak"),_pageOrientation:ej.util.valueFunction("pageSettings.pageOrientation"),_scrollLimit:ej.util.valueFunction("pageSettings.scrollLimit"),_enableSnapToObject:ej.util.valueFunction("snapSettings.enableSnapToObject"),_snapConstraints:ej.util.valueFunction("snapSettings.snapConstraints"),_snapAngle:ej.util.valueFunction("snapSettings.snapAngle"),_snapObjectDistance:ej.util.valueFunction("snapSettings.snapObjectDistance"),_selectorOffsetX:ej.util.valueFunction("selectedItems.offsetX"),_selectorOffsetY:ej.util.valueFunction("selectedItems.offsetY"),_selectorWidth:ej.util.valueFunction("selectedItems.width"),_selectorHeight:ej.util.valueFunction("selectedItems.height"),_selectorRotateAngle:ej.util.valueFunction("selectedItems.rotateAngle"),_horizontalOffset:ej.util.valueFunction("scrollSettings.horizontalOffset"),_verticalOffset:ej.util.valueFunction("scrollSettings.verticalOffset"),zoomFactor:ej.util.valueFunction("scrollSettings.zoomFactor"),_layoutType:ej.util.valueFunction("layout.type"),_layoutOrientation:ej.util.valueFunction("layout.orientation"),_horizontalSpacing:ej.util.valueFunction("layout.horizontalSpacing"),_verticalSpacing:ej.util.valueFunction("layout.verticalSpacing"),_layoutMarginX:ej.util.valueFunction("layout.marginX"),_layoutMarginY:ej.util.valueFunction("layout.marginY"),_fixedNode:ej.util.valueFunction("layout.fixedNode"),_dataSourceUniqueId:ej.util.valueFunction("dataSourceSettings.id"),_dataSourceParentId:ej.util.valueFunction("dataSourceSettings.parent"),_dataSource:ej.util.valueFunction("dataSourceSettings.dataSource"),_dataSourceTableName:ej.util.valueFunction("dataSourceSettings.tableName"),_dataSourceQueryString:ej.util.valueFunction("dataSourceSettings.query"),_dataSourceRoot:ej.util.valueFunction("dataSourceSettings.root"),_tooltipTemplateId:ej.util.valueFunction("tooltip.templateId"),_horizontalTooltipAlignment:ej.util.valueFunction("tooltip.alignment.horizontal"),_verticalTooltipAlignment:ej.util.valueFunction("tooltip.alignment.vertical"),_tooltipMode:ej.util.valueFunction("tooltip.relativeMode"),_showCustomContextMenuItems:ej.util.valueFunction("contextMenu.showCustomMenuItemsOnly"),_contextMenuItems:ej.util.valueFunction("contextMenu.items"),dataTypes:{nodes:"data",connectors:"data",contextMenu:{items:"array"},dataSourceSettings:{dataSource:"data"},defaultSettings:{connector:{segments:"data",labels:"data"},node:{children:"data",gradient:{stops:"data"},labels:"data",lanes:"data",phases:"data",points:"data",ports:"data"},group:{children:"data",gradient:{stops:"data"},labels:"data",lanes:"data",phases:"data",points:"data",ports:"data"}},snapSettings:{horizontalGridLines:{linesInterval:"data",snapInterval:"data"},verticalGridLines:{linesInterval:"data",snapInterval:"data"}},selectedItems:{children:"data",userHandles:"data"}},_doubleClickEvent:!1,_nodes:[],_connectors:[],_canvas:null,_svg:null,_toolToActivate:null,_inAction:!1,_isPinching:!1,_isEditing:!1,_nodeToHit:null,_enableAPIMethods:!0,_currentCursor:null,_pasteIndex:null,_page:null,_view:null,_currentLabel:null,_zOrder:0,_clipboardData:null,_currZoom:1,_UndoRedo:!1,_mouseEventTriggered:!1,_selectedItem:"",_historyList:{currentEntry:{next:null,previous:null},canUndo:!1,canRedo:!1},_historyCount:0,_lastbefore:null,_defaultContextMenuItems:[{name:"cut",text:"Cut"},{name:"copy",text:"Copy"},{name:"paste",text:"Paste"},{name:"undo",text:"Undo"},{name:"redo",text:"Redo"},{name:"selectAll",text:"Select All"},{name:"grouping",text:"Grouping",subItems:[{name:"group",text:"Group"},{name:"ungroup",text:"Ungroup"}]},{name:"order",text:"Order",subItems:[{name:"bringToFront",text:"Bring To Front"},{name:"moveForward",text:"Move Forward"},{name:"sendToBack",text:"Send To Back"},{name:"sendBackward",text:"Send Backward"}]}],_hScrollOffset:0,_vScrollOffset:0,_hScrollbar:null,_vScrollbar:null,_scrollPixel:30,_previousSelectedItems:[],_eventCause:{},_crudDeleteNodes:[],_isMobile:!1,_labelHashTable:{},activeTool:null,selectionList:[],tools:null,nameTable:{},boundaryTable:{},_init:function(){var i,r,u,n,f,t;this.boundaryTable={};this.nameTable={};this.selectionList=[];this._isInit=!0;this.nameTable={};this.boundaryTable={};i=window.SVGSVGElement?!0:!1;i&&(this.model.height||(this.model.height="18px"),ej.widget.unobtrusive!==undefined&&(this.model.snapSettings.horizontalGridLines&&this.model.snapSettings.horizontalGridLines.linesInterval&&typeof this.model.snapSettings.horizontalGridLines.linesInterval=="string"&&(this.model.snapSettings.horizontalGridLines.linesInterval=JSON.parse(this.model.snapSettings.horizontalGridLines.linesInterval)),this.model.snapSettings.verticalGridLines&&this.model.snapSettings.verticalGridLines.linesInterval&&typeof this.model.snapSettings.verticalGridLines.linesInterval=="string"&&(this.model.snapSettings.verticalGridLines.linesInterval=JSON.parse(this.model.snapSettings.verticalGridLines.linesInterval)),this.model.defaultSettings.connector&&(r=ej.datavisualization.Diagram.Connector({}),this.model.defaultSettings.connector=this._equivalentPropMap(r,this.model.defaultSettings.connector)),this.model.defaultSettings.node&&(u=ej.datavisualization.Diagram.Node({}),this.model.defaultSettings.node=this._equivalentPropMap(u,this.model.defaultSettings.node))),this.model.snapSettings.horizontalGridLines&&this.model.snapSettings.horizontalGridLines.linesInterval==null&&(this.model.snapSettings.horizontalGridLines.linesInterval=[1.25,18.75,.25,19.75,.25,19.75,.25,19.75,.25,19.75]),this.model.snapSettings.verticalGridLines&&this.model.snapSettings.verticalGridLines.linesInterval==null&&(this.model.snapSettings.verticalGridLines.linesInterval=[1.25,18.75,.25,19.75,.25,19.75,.25,19.75,.25,19.75]),n=this,n.model.dataSourceSettings.crudAction.read&&(f=$.ajax({type:"GET",url:n.model.dataSourceSettings.crudAction.read,async:!1,success:function(t){n.model.dataSourceSettings.dataSource=t},error:function(){}}),this._isWebAPI=!0),n.model.dataSourceSettings.connectionDataSource.crudAction.read&&(f=$.ajax({type:"GET",url:n.model.dataSourceSettings.connectionDataSource.crudAction.read,async:!1,success:function(t){n.model.dataSourceSettings.connectionDataSource.dataSource=t},error:function(){}}),this._isWebAPI=!0),this.model.backgroundImage&&(typeof this.model.backgroundImage=="string"&&(t=this.model.backgroundImage),typeof this.model.backgroundImage=="function"&&(t=this.model.backgroundImage()),t&&(this.model.backgroundImage=ej.datavisualization.Diagram.BackgroundImage({source:t}))),this._layoutMarginX()&&(this.model.layout.margin.left=this.model.layout.margin.right=this._layoutMarginX()),this._layoutMarginY()&&(this.model.layout.margin.top=this.model.layout.margin.bottom=this._layoutMarginY()),this._cloneGlobalVariables(),this._spatialSearch=ej.datavisualization.Diagram.SpatialSearch(),this._initDefaults(),this._initViews(),this._initData(),this._initCanvas(),this._initDiagramTool(),this._initVisualGuide(),this._wireEvents(),this._initHandles(),this._initContextMenu(),this._drawingTool=!1,this._isDropped=!1,this._initCommands(),this._initHistoryManager(),this.model.zoomFactor&&this.model.zoomFactor!==.2&&(this.model.scrollSettings.zoomFactor=this.model.zoomFactor),this._updateScrollSettings(this.model.scrollSettings),delete this._viewPort,this._cloneModel=$.extend(!0,{},this.model));delete this._isInit},_equivalentPropMap:function(n,t){var u={},r;for(var i in n)r=i.toLowerCase(),ej.isPlainObject(t[r])||ej.isPlainObject(t[i])?u[i]=this._equivalentPropMap(n[i],t[r]?t[r]:t[i]):(t[r]||t[i])&&(u[i]=t[r]?t[r]:t[i]);return u},refresh:function(){var t,n;if(this._updateTableNodes(),this._updateGroupChildren(this.model),this._isSwimlaneExist){for(t=this.connectors(),n=0;n<t.length;n++)t[n].zOrder=-1;delete this._isSwimlaneExist}this._updateScrollOffset(0,0);this._destroy();this.element.addClass("e-datavisualization-diagram");this._currZoom=1;this._hScrollbar=null;this._vScrollbar=null;this._view=null;this._svg=null;this._page=null;this._pageBackgroundLayer=null;this._diagramLayer=null;this._htmlLayer=null;this.clearHistory();this._spatialSearch=ej.datavisualization.Diagram.SpatialSearch();this.model.dataSourceSettings&&this.model.dataSourceSettings.dataSource&&(this.nodes([]),this.connectors([]),this._nodes=[],this._connectors=[]);this._init()},_initCommands:function(n){var u=ej.datavisualization.Diagram.KeyModifiers,i=ej.datavisualization.Diagram.Keys,r,f,t,e;if(n)r=this.model.commandManager.commands;else{n=this.model.commandManager.commands;r={copy:{gesture:{key:i.C,keyModifiers:u.Control},_isDefault:!0},paste:{gesture:{key:i.V,keyModifiers:u.Control},_isDefault:!0},cut:{gesture:{key:i.X,keyModifiers:u.Control},_isDefault:!0},"delete":{gesture:{key:i.Delete},_isDefault:!0},undo:{gesture:{key:i.Z,keyModifiers:u.Control},_isDefault:!0},redo:{gesture:{key:i.Y,keyModifiers:u.Control},_isDefault:!0},selectAll:{gesture:{key:i.A,keyModifiers:u.Control},_isDefault:!0},nudgeUp:{parameter:"up",gesture:{key:i.Up},_isDefault:!0},nudgeRight:{parameter:"right",gesture:{key:i.Right},_isDefault:!0},nudgeDown:{parameter:"down",gesture:{key:i.Down},_isDefault:!0},nudgeLeft:{parameter:"left",gesture:{key:i.Left},_isDefault:!0},startEdit:{gesture:{key:113},_isDefault:!0},endEdit:{gesture:{key:i.Escape}},focusToNextItem:{gesture:{key:i.Tab},_isDefault:!0},focusToPreviousItem:{gesture:{key:i.Tab,keyModifiers:u.Control},_isDefault:!0},selectFocusedItem:{gesture:{key:i.Enter},_isDefault:!0}};for(f in r)this._initCommandValues(f,r[f])}for(t in n)r[t]?n[t]?(n[t]&&r[t].gesture&&n[t].gesture&&(this._isLoad||r[t]._isDefault&&delete r[t]._isDefault,n[t].gesture=ej.datavisualization.Diagram.Gesture($.extend({},!0,r[t].gesture,n[t].gesture)),this._tempCommandManager&&this._tempCommandManager.commands&&this._tempCommandManager.commands[t]._isDefault&&this._initCommandValues(t,n[t])),$.extend(r[t],!0,n[t])):r[t]=null:n[t]&&(e=ej.datavisualization.Diagram.Command(n[t]),r[t]=e);this.model.commandManager.commands=r},_initCommandValues:function(n,t){switch(n){case"copy":t.execute=$.proxy(this.copy,this);t.canExecute=$.proxy(this._canExecute,this);break;case"paste":t.execute=$.proxy(this._commandPaste,this);t.canExecute=$.proxy(this._canExecute,this);break;case"cut":t.execute=$.proxy(this.cut,this);t.canExecute=$.proxy(this._canExecute,this);break;case"delete":t.execute=$.proxy(this.remove,this);t.canExecute=$.proxy(this._canExecute,this);break;case"undo":t.execute=$.proxy(this.undo,this);t.canExecute=$.proxy(this._canExecute,this);break;case"redo":t.execute=$.proxy(this.redo,this);t.canExecute=$.proxy(this._canExecute,this);break;case"selectAll":t.execute=$.proxy(this._selectCommand,this);t.canExecute=$.proxy(this._canExecute,this);break;case"nudgeUp":case"nudgeRight":case"nudgeDown":case"nudgeLeft":t.execute=$.proxy(this._nudgeCommand,this);t.canExecute=$.proxy(this._canExecute,this);break;case"startEdit":t.execute=$.proxy(this._startEditCommand,this);t.canExecute=$.proxy(this._canExecute,this);break;case"endEdit":t.execute=$.proxy(this._endEdit,this);t.canExecute=$.proxy(this._canExecute,this);break;case"focusToNextItem":case"focusToPreviousItem":t.execute=$.proxy(this._focusToItem,this);t.canExecute=$.proxy(this._canExecute,this);break;case"selectFocusedItem":t.execute=$.proxy(this._selectFocusedItem,this);t.canExecute=$.proxy(this._canExecute,this)}},_initViews:function(n){n||(this._views=[],this._views.push(this._id));this._views[this._id]={type:"mainview",context:ej.datavisualization.Diagram.SvgContext,style:"position:relative; height:"+this.model.height+"; width:"+this.model.width+";"}},_initDefaults:function(){this.tool()||(ej.isMobile()?(this.tool(ej.datavisualization.Diagram.Tool.ZoomPan),this._isMobile=!0):this.tool(ej.datavisualization.Diagram.Tool.SingleSelect|ej.datavisualization.Diagram.Tool.MultipleSelect));this._initTools()},_initCanvas:function(n){this._renderCanvas(n)},_initVisualGuide:function(){this.model.tooltip&&(this.model.tooltip=ej.datavisualization.Diagram.Tooltip(this.model.tooltip));this.model.selectedItems&&(this.model.selectorConstraints&&(this.model.selectedItems.constraints=this.model.selectorConstraints),this.model.selectedItems.tooltip=ej.datavisualization.Diagram.Util.canEnableTooltip(this)&&this.showTooltip()?this.model.selectedItems.tooltip?ej.datavisualization.Diagram.Tooltip(this.model.selectedItems.tooltip):ej.datavisualization.Diagram.Tooltip({margin:{top:10}}):null,this.model.selectedItems.tooltip&&this.model.tooltipTemplateId&&(this.model.selectedItems.tooltip.templateId=this.model.selectedItems.tooltip.templateId||this.model.tooltipTemplateId))},_initTools:function(){this.tools={select:new ej.datavisualization.Diagram.SelectTool(this),move:new ej.datavisualization.Diagram.MoveTool(this),resize:new ej.datavisualization.Diagram.ResizeTool(this),rotate:new ej.datavisualization.Diagram.RotateTool(this),endPoint:new ej.datavisualization.Diagram.ConnectionEditTool(this),panTool:new ej.datavisualization.Diagram.PanTool(this),straightLine:new ej.datavisualization.Diagram.StraightLineTool(this),orthogonalLine:new ej.datavisualization.Diagram.OrthogonalLineTool(this),bezierLine:new ej.datavisualization.Diagram.BezierLineTool(this),phase:new ej.datavisualization.Diagram.PhaseTool(this),shapeTool:new ej.datavisualization.Diagram.ShapeTool(this),text:new ej.datavisualization.Diagram.TextTool(this)};this._toolToActivate="select";this.activeTool=this.tools[this._toolToActivate];this._registerDrawingTools()},_initDiagramTool:function(){var n=this.tool(),t;n&ej.datavisualization.Diagram.Tool.ContinuesDraw?this.model.drawType&&(t=this.model.drawType.shape?this.model.drawType.shape:this.model.drawType.type,this._drawToolShape(t,!1)):n&ej.datavisualization.Diagram.Tool.DrawOnce?this.model.drawType&&(t=this.model.drawType.shape?this.model.drawType.shape:this.model.drawType.type,this._drawToolShape(t,!0)):n&ej.datavisualization.Diagram.Tool.ZoomPan?ej.datavisualization.Diagram.Util.canPanning(this)&&(this._toolToActivate="panTool",this.activeTool=this.tools[this._toolToActivate],this.activeTool._isMouseDown=!1,this._currentCursor="pointer"):n&ej.datavisualization.Diagram.Tool.MultipleSelect&&(this.activateTool("select"),this.activeTool.singleAction=!1)},_initHandles:function(){var t=this.model.selectedItems.userHandles,n;if(t)for(n=0;n<t.length;n++)t[n]=ej.datavisualization.Diagram.UserHandle(t[n]),t[n].tool&&(t[n].tool.diagram=this,this.tools[t[n].name]=t[n].tool)},_initHistoryManager:function(){this.model.historyManager.push=$.proxy(this.addHistoryEntry,this);this.model.historyManager.pop=$.proxy(this.removeHistoryEntry,this);this.model.historyManager.canPop=$.proxy(this.canRemoveHistoryEntry,this);this.model.historyManager.startGroupAction=$.proxy(this._startGroupAction,this);this.model.historyManager.closeGroupAction=$.proxy(this._closeGroupAction,this)},_cloneGlobalVariables:function(){this._historyList=$.extend(!0,{},this._historyList)},_setNodesConnectors:function(n,t){var r=[],u=!1,f=!1,e=n.nodes?typeof n.nodes=="function"?n.nodes().length:n.nodes.length:0,o=n.connectors?n.connectors&&typeof n.connectors=="function"?n.connectors().length:n.connectors.length:0,i;if(n.nodes&&e!=this._nodes.length){for(i=0;i<this.nodes().length;i++)this._removeElementFromCollection(this.nameTable[this.nodes()[i].name]);this._isPreventModelChange=!0;this.nodes(typeof n.nodes=="function"?n.nodes():n.nodes);this._isPreventModelChange=!1;this._initNodeCollection(t);u=!0}if(n.connectors&&o!=this._connectors.length){for(i=0;i<this.connectors().length;i++)this._removeElementFromCollection(this.nameTable[this.connectors()[i].name]);this._isPreventModelChange=!0;this.connectors(typeof n.connectors=="function"?n.connectors():n.connectors);this._isPreventModelChange=!1;this._initConnectorCollection();f=!0}return r=this.nodes(),r=r.length>0?this.nodes().concat(this.connectors()):this.connectors(),(r.length>0||n.nodes.length==0||n.connectors.length==0)&&this._resetObjectCollection(r,t,u,f),!0},_removeElementFromCollection:function(n){if(n){if(n.children)for(var t=0;t<n.children.length;t++)this._removeElementFromCollection(this.nameTable[this._getChild(n.children[t])]);n.segments?this._removeEdges(n):(this._disConnect(n,{}),n.inEdges=n.outEdges=[]);ej.datavisualization.Diagram.SpatialUtil._removeFromaQuad(this._spatialSearch,this._spatialSearch.quadTable[n.name],n);ej.datavisualization.Diagram.SpatialUtil._updateBounds(this,this._spatialSearch,n);this._removeElement(n);delete this.nameTable[n.name]}},_updateCloneModel:function(n){n&&(this._cloneModel[n]=typeof this.model[n]=="string"?this.model[n]:$.extend(!0,{},this.model[n]))},_compareModelProperty:function(n,t,i){if(n&&this._cloneModel[n]!==this.model[n]){var r={};r[n]=this.model[n];this._comparePropertyValues(this._cloneModel,n,r,t,i);this._updateCloneModel(n)}},_setModel:function(n){var l=!1,i,u,t,s,f,h,a,v,r;for(t in n){switch(t){case"height":case"width":this._initViews(!0);this._initCanvas(!0);break;case"nodes":case"connectors":l||this._isPreventModelChange||this._isRefreshTriggered&&typeof this.model.nodes=="function"||(l=this._setNodesConnectors(n,this._isLoad),this._trigger("refresh"));delete this._isRefreshTriggered;break;case"enableContextMenu":this.model.enableContextMenu=n[t];this._initContextMenu(this._isLoad);break;case"contextMenu":this.model.contextMenu=$.extend({},this.model.contextMenu,n[t]);this._initContextMenu(this._isLoad);break;case"rulerSettings":this._updateRulerSettings(n[t]);break;case"snapSettings":u=n[t];u&&Object.keys(u).length>0&&(this._updateSnapSettings(n[t]),ej.datavisualization.Diagram.SvgContext._renderGrid(this._canvas,this._svg,this._page,this));break;case"selectorConstraints":this._setSelectorConstraints(n[t]);break;case"constraints":if(this.model.constraints=n[t],this._hasSelection()&&!ej.datavisualization.Diagram.Util.isPageEditable(this)&&this._clearSelection(),s=this._getConnectors(),s.length>0)for(f=0;f<s.length;f++)ej.datavisualization.Diagram.Util.updateBridging(this.model.connectors[f],this),ej.datavisualization.Diagram.DiagramContext.update(this.model.connectors[f],this);break;case"drawingTools":this.model.drawingTools=n[t];this._registerDrawingTools();break;case"backgroundImage":this.model.backgroundImage=this.model.backgroundImage&&typeof this.model.backgroundImage=="string"?ej.datavisualization.Diagram.BackgroundImage({source:this.model.backgroundImage}):$.extend(!0,{},this.model.backgroundImage,n[t]);ej.datavisualization.Diagram.SvgContext._renderBackground(this,this._canvas,this._svg,this._page,this.model);break;case"backgroundColor":this.model.backgroundColor=n[t];ej.datavisualization.Diagram.SvgContext._renderBackground(this,this._canvas,this._svg,this._page,this.model);break;case"enableAutoScroll":this.enableAutoScroll(n[t]);break;case"autoScrollMargin":this.model.autoScrollMargin=n[t];break;case"layout":n[t].marginX&&(this.model.layout.margin.left=this.model.layout.margin.right=Number(typeof n[t].marginX=="function"?this._layoutMarginX():n[t].marginX));n[t].marginY&&(this.model.layout.margin.top=this.model.layout.margin.bottom=Number(typeof n[t].marginY=="function"?this._layoutMarginY():n[t].marginY));this.model.layout=$.extend(!0,{},this.model.layout,n[t]);this._setLayout(n[t]);break;case"selectedItems":this.updateSelector(n[t]);break;case"pageSettings":this.updatePageSettings(n[t]);break;case"scrollSettings":this._updateScrollSettings(n[t]);break;case"locale":this.locale(n[t]);h=document.getElementById(this.element[0].id+"_contextMenu");h.parentNode.removeChild(h);this.model.contextMenu&&this.model.contextMenu.items&&this.model.contextMenu.items.length>0&&(this.model.contextMenu.items=[]);this._renderContextMenu();break;case"nodeTemplate":this.clear();this._initData();i=this;this._views.forEach(function(n){var t=i._views[n],r=i._setNodeZOrder(t);i._renderDiagramObjects(r,t)});this.layout();break;case"bridgeDirection":case"tool":this.update(n);break;case"connectorTemplate":this._updateConnectors();break;case"commandManager":a=n[t]&&n[t].commands?n[t].commands:undefined;this._initCommands(a);break;case"historyManager":this.model.historyManager=$.extend(!0,this.model.historyManager,{},n[t]);var e=this.model.historyManager.stackLimit,o=this.model.historyManager.redoStack.length,c=this.model.historyManager.undoStack.length;o>0&&(o>e?(r=o-e,this.model.historyManager.redoStack.splice(0,r),this.model.historyManager.undoStack=[]):(v=e-o,r=c-v,this.model.historyManager.undoStack.splice(0,r)));c>0&&(r=c-e,r>0&&this.model.historyManager.undoStack.splice(0,r));this._initHistoryManager();break;case"showTooltip":this.model.showTooltip=n[t];this.model.selectedItems.tooltip=this.showTooltip()?ej.datavisualization.Diagram.Tooltip({margin:{top:10}}):null;break;case"toolTipTemplateId":this.model.selectedItems.tooltip||(this.model.selectedItems.tooltip=ej.datavisualization.Diagram.Tooltip({margin:{top:10}}));this.model.selectedItems.tooltip.templateId=n[t];break;case"tooltip":this.model.tooltip=n[t]===null?null:ej.datavisualization.Diagram.Tooltip($.extend(!0,this.model.tooltip,{},n[t]));break;case"dataSourceSettings":u=n[t];u&&Object.keys(u).length>0&&(this.clear(),$.extend(this.model.dataSourceSettings,n[t]),this._initData(),i=this,this._views.forEach(function(n){var t=i._views[n],r=i._setNodeZOrder(t);i._renderDiagramObjects(r,t)}),this.layout())}t==="nodes"||t==="connectors"||t==="selectorConstraints"||t==="selectedItems"||t==="bridgeDirection"||t==="tool"||t==="dataSourceSettings"||this._compareModelProperty(t)}},_resetObjectCollection:function(n,t,i,r){var f,u,o,e;if(i&&($(this.element).find(".ej-d-node").remove(),$(this.element).find(".ej-d-group").remove(),$(this.element).find(".ej-d-seperator").remove()),r)for(f=$(this.element).find(".ej-d-connector"),u=f.length-1;u>=0;u--)o=this.nameTable[f[u].id],o&&o.parent==""&&$(f[u]).remove();this._hasSelection()&&this._clearSelection();e=this;this._views.forEach(function(n){var t=e._views[n],i=e._setNodeZOrder(t);e._renderDiagramObjects(i,t)})},_getConnectors:function(){var t=[],i,n;for(i in this.nameTable)n=this.nameTable[i],(n._type==="connector"||n.segments)&&t.push(n);return t},_generateNodes:function(n){for(var u,t,i=[],r=0;r<n.length;r++)u=n[r],t=this._makeNode(u),t!=null&&t.name&&!this._findNodeByName(i,t.name)&&i.push(t);return i},_generateConnectors:function(n){for(var u,t,i=[],r=0;r<n.length;r++)u=n[r],t=this._makeLine(u),t&&t.name&&!this._findNodeByName(i,t.name)&&i.push(t);return i},_findNodeByName:function(n,t){for(var i=0;i<n.length;i++)if(n[i].name===t)return!0;return!1},_makeNode:function(n){var t=this.model.dataSourceSettings,r={},u=n[t.id],i;if(u){if(r.name=u,t.customFields&&t.customFields.length>0)for(i=0;i<t.customFields.length;i++)r[t.customFields[i]]=n[t.customFields[i]];return r}return null},_makeLine:function(n){var t=this.model.dataSourceSettings.connectionDataSource,i={},r;if(i.name=n[t.id]?n[t.id]:"connector_"+ej.datavisualization.Diagram.Util.randomId(),i.sourceNode=n[t.sourceNode],i.targetNode=n[t.targetNode],n[t.sourcePointX]&&n[t.sourcePointY]&&(i.sourcePoint={x:Number(n[t.sourcePointX]),y:Number(n[t.sourcePointY])}),n[t.targetPointX]&&n[t.targetPointY]&&(i.targetPoint={x:Number(n[t.targetPointX]),y:Number(n[t.targetPointY])}),t.customFields&&t.customFields.length>0)for(r=0;r<t.customFields.length;r++)i[t.customFields[r]]=n[t.customFields[r]];return i},insertData:function(n){var u,r,f,t,i;if(n)t=this._parameterMap(n),u=n.type==="connector"?this.model.dataSourceSettings.connectionDataSource.crudAction.create:this.model.dataSourceSettings.crudAction.create,t&&this._raiseAjaxPost(JSON.stringify({data:[t]}),u);else{if(r=this._getNewNodes(),r.nodes){for(t=[],i=0;i<r.nodes.length;i++)t.push(this._parameterMap(r.nodes[i]));t&&t.length>0&&this._raiseAjaxPost(JSON.stringify({data:t}),this.model.dataSourceSettings.crudAction.create)}if(r.connectors){for(t=[],i=0;i<r.connectors.length;i++)t.push(this._parameterMap(r.connectors[i]));t&&t.length>0&&this._raiseAjaxPost(JSON.stringify({data:t}),this.model.dataSourceSettings.connectionDataSource.crudAction.create)}}},updateData:function(n){var u,r,f,t,i;if(n)t=this._parameterMap(n),u=n.type==="connector"?this.model.dataSourceSettings.connectionDataSource.crudAction.update:this.model.dataSourceSettings.crudAction.update,t&&this._raiseAjaxPost(JSON.stringify({data:[t]}),u);else{if(r=this._getUpdatedNodes(),r.nodes){for(t=[],i=0;i<r.nodes.length;i++)t.push(this._parameterMap(r.nodes[i]));t&&t.length>0&&this._raiseAjaxPost(JSON.stringify({data:t}),this.model.dataSourceSettings.crudAction.update)}if(r.connectors){for(t=[],i=0;i<r.connectors.length;i++)t.push(this._parameterMap(r.connectors[i]));t&&t.length>0&&this._raiseAjaxPost(JSON.stringify({data:t}),this.model.dataSourceSettings.connectionDataSource.crudAction.update)}}},removeData:function(n){var u,r,f,t,i;if(n)t=this._parameterMap(n),u=n.type==="connector"?this.model.dataSourceSettings.connectionDataSource.crudAction.destroy:this.model.dataSourceSettings.crudAction.destroy,t&&this._raiseAjaxPost(JSON.stringify({data:[t]}),u);else{if(r=this._getDeletedNodes(),r.nodes){for(t=[],i=0;i<r.nodes.length;i++)t.push(this._parameterMap(r.nodes[i]));t&&t.length>0&&this._raiseAjaxPost(JSON.stringify({data:t}),this.model.dataSourceSettings.crudAction.destroy)}if(r.connectors){for(t=[],i=0;i<r.connectors.length;i++)t.push(this._parameterMap(r.connectors[i]));t&&t.length>0&&this._raiseAjaxPost(JSON.stringify({data:t}),this.model.dataSourceSettings.connectionDataSource.crudAction.destroy)}}},_parameterMap:function(n){var i={},t,r;if(n.type==="connector"){if(t=this.model.dataSourceSettings.connectionDataSource,t.id&&(i[t.id]=n.name),t.sourcePointX&&t.sourcePointY&&(i[t.sourcePointX]=n.sourcePoint.X,i[t.sourcePointY]=n.sourcePoint.Y),t.targetPointX&&t.targetPointY&&(i[t.targetPointX]=n.targetPoint.X,i[t.targetPointY]=n.targetPoint.Y),t.sourceNode&&(i[t.sourceNode]=n.sourceNode),t.targetNode&&(i[t.targetNode]=n.targetNode),t.customFields&&t.customFields.length>0)for(r=0;r<t.customFields.length;r++)i[t.customFields[r]]=n[t.customFields[r]]}else if(t=this.model.dataSourceSettings,t.id&&(i[t.id]=n.name),t.width&&(i[t.width]=n.width),t.height&&(i[t.height]=n.height),t.offsetX&&(i[t.offsetX]=n.offsetX),t.offsetY&&(i[t.offsetY]=n.offsetY),t.customFields&&t.customFields.length>0)for(r=0;r<t.customFields.length;r++)i[t.customFields[r]]=n[t.customFields[r]];return i},_raiseAjaxPost:function(n,t){var i=this,r=$.ajax({contentType:"application/json",type:"POST",url:t,data:this._isWebAPI?JSON.stringify(JSON.parse(n).data):JSON.stringify(JSON.parse(n)),dataType:"json",error:function(n){n.status===404&&console.log("Method not found")}})},_initData:function(){var dataSourceSettings,dataSource,nodes,connectors,dataSourceApplied,tempNodes,tempconnectors,i,collapsedNodes;if(this.model.dataSourceSettings&&(dataSourceSettings={},this.model.dataSourceSettings.dataSource&&this.model.dataSourceSettings.connectionDataSource.dataSource?(dataSourceSettings.dataSource=this.model.dataSourceSettings.dataSource,dataSourceSettings.isBinding=!0,dataSourceSettings.nodes=this._generateNodes(this.model.dataSourceSettings.dataSource),dataSourceSettings.connectors=this._generateConnectors(this.model.dataSourceSettings.connectionDataSource.dataSource)):this.model.dataSourceSettings.dataSource&&(dataSourceSettings.id=this._dataSourceUniqueId(),dataSourceSettings.parent=this._dataSourceParentId(),dataSourceSettings.root=this._dataSourceRoot(),dataSourceSettings.dataSource=this._dataSource(),dataSourceSettings.tableName=this._dataSourceTableName(),dataSourceSettings.query=this._dataSourceQueryString()),dataSource=dataSourceSettings.dataSource||this.model.dataSourceSettings.nodes||this.model.dataSourceSettings.connectors),dataSource){if(nodes=[],connectors=[],dataSourceSettings&&dataSourceSettings.isBinding)dataSourceSettings.nodes&&dataSourceSettings.nodes.length>0&&this._applyTemplate(this.model.dataSourceSettings,dataSourceSettings.nodes,nodes,"nodes"),dataSourceSettings.connectors&&dataSourceSettings.connectors.length>0&&this._applyTemplate(this.model.dataSourceSettings,dataSourceSettings.connectors,connectors,"connectors");else if(this.model.dataSourceSettings.nodes||this.model.dataSourceSettings.connectors){if(this.model.dataSourceSettings.nodes){if(dataSource=this.model.dataSourceSettings.nodes||this.model.dataSourceSettings.dataSource,dataSource)if(dataSource instanceof ej.DataManager){$.ajaxSetup({async:!1});var query=this._findQuery(this.model.dataSourceSettings.nodes,this.model.dataSourceSettings.nodeBinding),queryPromise=dataSource.executeQuery(eval(query)),diagram=this;queryPromise.done(function(n){diagram.retriveData=n.result;diagram._applyTemplate(diagram.model.dataSourceSettings,n.result,nodes,"nodes")})}else this._applyTemplate(this.model.dataSourceSettings,dataSource,nodes,"nodes");this.model.dataSourceSettings.connectors&&(dataSource=this.model.dataSourceSettings.connectors||this.model.dataSourceSettings.dataSource,dataSource&&(dataSource instanceof ej.DataManager?($.ajaxSetup({async:!1}),query=this._findQuery(this.model.dataSourceSettings.connectors,this.model.dataSourceSettings.connectorBinding),queryPromise=dataSource.executeQuery(eval(query)),queryPromise.done(function(n){diagram.retriveData=n.result;diagram._applyTemplate(diagram.model.dataSourceSettings,n.result,connectors,"connectors")})):this._applyTemplate(this.model.dataSourceSettings,dataSource,connectors,"connectors")))}}else dataSource instanceof ej.DataManager?(this._initDataSource(dataSourceSettings,nodes,connectors),dataSourceSettings.parent&&(dataSourceApplied=!0)):typeof dataSource!="string"&&dataSource.length&&(this._applyDataSource(dataSourceSettings,dataSource,nodes,connectors),this.model.dataSourceSettings.parent&&(dataSourceApplied=!0));for(tempNodes=[],tempconnectors=[],this.nodes().length>0&&(tempNodes=this.nodes()),this.connectors().length>0&&(tempconnectors=this.connectors()),this.nodes(nodes),this.connectors(connectors),i=0;i<tempNodes.length;i++)this.nodes().push(tempNodes[i]),this._nodes=$.extend(!0,[],this.nodes());for(i=0;i<tempconnectors.length;i++)this.connectors().push(tempconnectors[i]),this._connectors=$.extend(!0,[],this.connectors())}collapsedNodes=this._initNodeCollection(!1,dataSourceApplied);this._initConnectorCollection(dataSourceApplied);collapsedNodes.length>0&&this._collapseNodes(collapsedNodes);this._cloneModel=$.extend(!0,{},this.model)},_getNodeTemplate:function(){var n;return this.model.nodeTemplate&&(typeof this.model.nodeTemplate=="string"&&(n=ej.util.getObject(this.model.nodeTemplate,window)),$.isFunction(this.model.nodeTemplate)&&(n=this.model.nodeTemplate)),n},_getConnectorTemplate:function(){var n;return this.model.connectorTemplate&&(typeof this.model.connectorTemplate=="string"&&(this.model.connectorTemplate=ej.util.getObject(this.model.connectorTemplate,window)),$.isFunction(this.model.connectorTemplate)&&(n=this.model.connectorTemplate)),n},_initNodeCollection:function(n,t){var f=[],r=this.nodes(),u,i;for(this.model.dataSourceSettings.dataSource||(u=this._getNodeTemplate()),this._isNodeInitializing=!0,i=0;i<r.length;i++)r[i].container&&!$.isEmptyObject(r[i].container)||r[i].isSwimlane||r[i].type==="swimlane"?(i=this._convertGroupChild(r[i],r),r[i]=ej.datavisualization.Diagram.ContainerHelper._initContainer(this,r[i])):typeof r[i].shape!="object"&&(r[i]=ej.datavisualization.Diagram.NodeType(r[i],this)),r[i].name==""&&(r[i].name="node_"+ej.datavisualization.Diagram.Util.randomId()),r[i].type==="swimlane"||r[i].isSwimlane?this.nameTable[r[i].name]=ej.datavisualization.Diagram.Group(r[i]):r[i]._type==="group"||r[i].children&&r[i].children.length>0?(r[i].type=="bpmn"&&r[i].container?r[i]=ej.datavisualization.Diagram.ContainerHelper._initContainer(this,r[i]):(i=this._convertGroupChild(r[i],r),r[i]=this._getNewGroup(r[i])),r[i]._type="group",this.nameTable[r[i].name]=r[i],this._initGroupNode(r[i]),n||r[i].type==="bpmn"||this._udpateChildRotateAngle(r[i])):t?r[i].shape&&typeof r[i].shape=="object"&&ej.datavisualization.Diagram.Util._updateShapeProperties(r[i]):(r[i]=this._getNewNode(r[i]),this.nameTable[r[i].name]=r[i]),!t&&u&&(u(this,r[i]),typeof r[i].shape!="object"&&(r[i]=ej.datavisualization.Diagram.NodeType(r[i],this)),(r[i]._type==="group"||r[i].children&&r[i].children.length>0)&&(r[i]=r[i].type=="bpmn"&&r[i].container?ej.datavisualization.Diagram.ContainerHelper._initContainer(this,r[i]):this._getNewGroup(r[i]),this._initGroupNode(r[i]))),r[i]._type==="node"&&r[i].labels.length&&(r[i].width==0||r[i].height==0)&&this._getNodeDimension(r[i]),this.nameTable[r[i].name]=r[i],this._updateQuad(r[i]),r[i].isExpanded||f.push(r[i]);return delete this._isNodeInitializing,this._nodes=$.extend(!0,[],r),f},_convertGroupChild:function(n,t){var r,i;if(n.children&&n.children.length>0)for(r=0;r<n.children.length;r++)i=n.children[r],i&&typeof i=="string"&&(i=this.nameTable[i],n.children[r]=i,ej.datavisualization.Diagram.SpatialUtil._removeFromaQuad(this._spatialSearch,this._spatialSearch.quadTable[i.name],i),ej.datavisualization.Diagram.SpatialUtil._updateBounds(this,this._spatialSearch,i,!1),i.type==="group"&&(r=this._convertGroupChild(i,n.children)),i.type==="connector"?ej.datavisualization.Diagram.Util.removeItem(this.connectors(),i):ej.datavisualization.Diagram.Util.removeItem(this.nodes(),i));return t.indexOf(n)},_initConnectorCollection:function(n){for(var i=this.connectors(),t,u=this._getConnectorTemplate(),r=0,f=i.length;r<f;r++)t=n?i[r]:this._getNewConnector(i[r]),this.nameTable[t.name]=t,n||this.model.layout&&this._layoutType()===ej.datavisualization.Diagram.LayoutTypes.None&&this._dock(t,this.nameTable),this._updateEdges(t),u&&!n&&u(this,t),i[r]=t;this._connectors=$.extend(!0,[],i)},_initDataSource:function(dataSourceSettings,nodes,connectors){var dataSource=dataSourceSettings.dataSource,diagram=this,mapper,query,queryPromise;dataSource.dataSource.json&&dataSource.dataSource.json.length>0?diagram._applyDataSource(dataSourceSettings,dataSource.dataSource.json,nodes,connectors):dataSource.dataSource.table||(mapper=dataSourceSettings,dataSource instanceof ej.DataManager&&($.ajaxSetup({async:!1}),query=this._findQuery(mapper,dataSourceSettings.nodeBinding),queryPromise=dataSourceSettings.dataSource.executeQuery(eval(query)),queryPromise.done(function(n){diagram.retriveData=n.result;diagram._applyDataSource(dataSourceSettings,n.result,nodes,connectors)})))},_findQuery:function(n,t){var u=[],e=ej.Query(),h=n.query||this.model.dataSourceSettings.query,c,o,r,i,s,f;if(ej.isNullOrUndefined(h)){c=n.dataSource||this.model.dataSourceSettings.dataSource;o=n.tableName||this.model.dataSourceSettings.tableName;for(r in n)r==="tableName"||r==="dataSource"||r==="designTemplate"||r.match("Binding")||n[r]&&u.push(n[r]);for(i in t)if(i==="labels")for(s=t[i],f=0;f<s.length;f++)s[f].text&&u.push(s[f].text);else i=="shape"||i=="line"?t[i][type]&&r.push(t[i][type]):t[i]&&u.push(t[i]);u.length>0&&e.select(u);c.dataSource.url.match(o+"$")||ej.isNullOrUndefined(o)||e.from(o)}else e=h;return e},_updateMultipleRootNodes:function(n,t,i){var r=n[i.parent],u,f;if(r&&r.length>0)for(f=0;f<r.length;f++)u=r[f],t[u]?t[u].items.push(n):t[u]={items:[n]};return t},_applyDataSource:function(n,t,i,r){for(var u=[],v,s,c,p,l,e,f,o,a,y,w,h=0;h<t.length;h++)f=t[h],$.isArray(f[n.parent])?u=this._updateMultipleRootNodes(f,u,n,t):u[f[n.parent]]?u[f[n.parent]].items.push(f):u[f[n.parent]]={items:[f]},n.root===f[n.id]&&(v={items:[f]});if(o=[],n.parent)if(v)o.push(v);else for(e in u)(e||e===0)&&e!="undefined"&&e!='""'&&e!="null"||o.push(u[e]);else o.push(u[undefined]);for(this.model.nodeTemplate&&(y=this._getNodeTemplate()),this.model.connectorTemplate&&(w=this._getConnectorTemplate()),s=0;s<o.length;s++)for(c=0;c<o[s].items.length;c++)p=o[s].items[c],l=this._applyNodeTemplate(n,p,y),i.push(l),n.parent&&(a=u[l[n.id]],a&&a.items&&this._renderChildNodes(n,a,l.name,i,r,u,y,w))},_getNewNodes:function(){var t=[],i=[],r,n;for(r in this.nameTable)n=this.nameTable[r],n&&n.type==="connector"&&n._status==="new"?(n._status="",i.push(n)):n&&n._status==="new"&&(n._status="",t.push(n));return{nodes:t,connectors:i}},_getUpdatedNodes:function(){var t=[],i=[],r,n;for(r in this.nameTable)n=this.nameTable[r],n&&n.type==="connector"&&n._status==="update"?(n._status="",i.push(n)):n&&n._status==="update"&&(n._status="",t.push(n));return{nodes:t,connectors:i}},_getDeletedNodes:function(){for(var n,i=[],r=[],t=0;t<this._crudDeleteNodes.length;t++)n=this._crudDeleteNodes[t],n&&n.type==="connector"?r.push(n):n&&i.push(n);return this._crudDeleteNodes=[],{nodes:i,connectors:r}},_isContainsSameConnector:function(n,t,i){var r,u;if(t&&i)for(r=0;r<n.length;r++)if(u=n[r],u&&u.sourceNode===t&&u.targetNode===i)return!0;return!1},_renderChildNodes:function(n,t,i,r,u,f,e,o){for(var c,s,l,a,h=0;h<t.items.length;h++)c=t.items[h],s=this._applyNodeTemplate(n,c,e),a=!1,this._collectionContains(s.name,r)?a=!0:r.push(s),this._isContainsSameConnector(u,i,s.name)||u.push(this._applyConnectorTemplate(n,null,i,s.name,o)),a||(l=f[c[n.id]],l&&this._renderChildNodes(n,l,s.name,r,u,f,e,o))},_applyTemplate:function(n,t,i,r){var f,u,e,o,s;if(this.model.nodeTemplate&&(f=this._getNodeTemplate()),this.model.connectorTemplate&&(s=this._getConnectorTemplate()),r=="nodes")for(u=0;u<t.length;u++)e=this._applyNodeTemplate(n,t[u],f),i.push(e);if(r=="connectors")for(u=0;u<t.length;u++)o=this._applyConnectorTemplate(n,t[u],t[u].sourceNode,t[u].targetNode,s),i.push(o)},_applyNodeTemplate:function(n,t,i){var r=t;return r.name!==""&&r.name||(r.name=ej.datavisualization.Diagram.Util.randomId()),r=r.type!="group"?this._getNewNode(r):this._getNewGroup(r),i&&i(this,r),r._type==="group"&&this._initGroupNode(r),r},_applyConnectorTemplate:function(n,t,i,r,u){var f={};return f.name=t&&t.name?t.name:ej.datavisualization.Diagram.Util.randomId(),f.sourceNode=i,f.targetNode=r,f=this._getNewConnector(f),u&&u(this,f),f},_collapseNodes:function(n){for(var i,t=0;t<n.length;t++)i=n[t],this._collapseChildren(i)},_getNewNode:function(n){return n.shape&&typeof n.shape=="object"&&ej.datavisualization.Diagram.Util._updateShapeProperties(n),ej.datavisualization.Diagram.Node($.extend(!0,{},this.model.defaultSettings.node,n))},_getNewGroup:function(n){var t=null,i=0,r;if(n.type=="bpmn"&&(n=ej.datavisualization.Diagram.Util._updateBpmnChild(ej.datavisualization.Diagram.Node(n),this)),n.children&&n.children.length>0)for(r in n.children)t=this.nameTable[this._getChild(n.children[r])],t&&(ej.datavisualization.Diagram.SpatialUtil._removeFromaQuad(this._spatialSearch,this._spatialSearch.quadTable[t.name],t),ej.datavisualization.Diagram.SpatialUtil._updateBounds(this,this._spatialSearch,t),t.segments?(i=this.connectors().indexOf(t),delete this.nameTable[t.name],this.nameTable[t.name]=this._getNewConnector(t),i>=0&&(this.connectors()[i]=this.nameTable[t.name]),this._dock(this.nameTable[t.name],this.nameTable),ej.datavisualization.Diagram.Util.updateBridging(this.nameTable[t.name],this)):t._type==="node"?(i=this.nodes().indexOf(t),delete this.nameTable[t.name],this.nameTable[t.name]=this._getNewNode(t),i>=0&&(this.nodes()[i]=this.nameTable[t.name])):t._type==="group"&&(i=this.nodes().indexOf(t),delete this.nameTable[t.name],this.nameTable[t.name]=this._getNewGroup(t),i>=0&&(this.nodes()[i]=this.nameTable[t.name])));return ej.datavisualization.Diagram.Group($.extend(!1,{},this.model.defaultSettings.group,n))},_isEmptyDiagramObject:function(n){if($.isEmptyObject(n))return!0;for(var t in n)if(typeof n[t]=="object")return this._isEmptyDiagramObject(n[t]);return!1},_getNewConnector:function(n){var t=$.extend(!0,{},this.model.defaultSettings.connector,n),r,u,i;return this.model.layout&&this.model.layout.type=="organizationalchart"&&(t=$.extend(!0,{},{segments:[{type:"orthogonal"}]},t)),this.model.defaultSettings.connector&&this.model.defaultSettings.connector.segments&&this.model.defaultSettings.connector.segments[0]&&(t.defaultType=this.model.defaultSettings.connector.segments[0].type),t.shape&&!this._isEmptyDiagramObject(t.shape)&&(t.shape.type=="umlactivity"&&(t=ej.datavisualization.Diagram.UMLConnectorShape(t),t.sourceNode&&(r=this.nameTable[t.sourceNode]),t.targetNode&&(u=this.nameTable[t.targetNode]),i=ej.datavisualization.Diagram.ClassifierHelper.EnableorDisableConnection(u,r,t,this),t.targetNode=i?i.name:null),t.shape.type=="umlclassifier"?(t=ej.datavisualization.Diagram.UMLConnectorShape(t),t.sourceNode&&(r=this.nameTable[t.sourceNode]),t.targetNode&&(u=this.nameTable[t.targetNode]),i=ej.datavisualization.Diagram.ClassifierHelper.EnableorDisableConnection(u,r,t,this),t.targetNode=i?i.name:null):(t.shape=$.extend(!0,{},ej.datavisualization.Diagram.ConnectorShapeDefaults,t.shape),t.shape.flow=="sequence"&&(t.shape.sequence=="normal"&&(t=$.extend(!0,{},{segments:[{type:"straight"}],targetDecorator:{shape:"arrow"},lineWidth:2},t)),t.shape.sequence=="conditional"&&(t=$.extend(!0,{},{segments:[{type:"straight"}],targetDecorator:{shape:"arrow"},lineWidth:2},t),t.sourceDecorator={shape:"diamond",fillColor:"white",width:20,height:10}),t.shape.sequence=="default"&&(t=$.extend(!0,{segments:[{type:"straight"}],targetDecorator:{shape:"arrow"},lineWidth:2},t))),t.shape.flow=="association"&&(t.shape.association=="directional"&&(t=$.extend(!0,{},{segments:[{type:"straight"}],lineWidth:2,lineDashArray:"2 2",targetDecorator:{shape:"openarrow",width:5,height:10}},t)),t.shape.association=="nondirectional"&&(t=$.extend(!0,{},{segments:[{type:"straight"}],lineWidth:2,lineDashArray:"2 2",targetDecorator:{shape:"none"}},t)),t.shape.association=="bidirectional"&&(t=$.extend(!0,{},{segments:[{type:"straight"}],lineWidth:2,lineDashArray:"2 2",targetDecorator:{shape:"openarrow",width:5,height:10}},t),t.sourceDecorator={shape:"openarrow",width:5,height:10})),t.shape.flow=="message"&&(t=$.extend(!0,{},{segments:[{type:"straight"}],sourceDecorator:{shape:"circle",fillColor:"white"},targetDecorator:{shape:"arrow",fillColor:"white"},lineWidth:2,lineDashArray:"4 4"},t)))),ej.datavisualization.Diagram.Util._initConnectionEnds(t,this),ej.datavisualization.Diagram.Connector(t)},_setOverview:function(n,t){var i,r,u;n?(this._overview=n,this._viewPort=ej.datavisualization.Diagram.ScrollUtil._viewPort(this,!0),this._views[n._id]||(this._views.push(n._id),this._views[n._id]={context:ej.datavisualization.Diagram.SvgContext,type:"overview"},n._renderDocument(this._views[n._id]),i=this._views[n._id],r=this._setNodeZOrder(i),this._renderDiagramObjects(r,i,null,!0),n._updateOverview(i)),delete this._viewPort):(n=$("#"+t).ejOverview("instance"),n._removeDocument(this._views[t]),this._views[t]=undefined,u=this._views.indexOf(t),this._views.splice(u,1))},_updateScrollOffset:function(n,t,i){this._hScrollOffset=Number(n);this._vScrollOffset=Number(t);this._verticalOffset(Number(t));this._horizontalOffset(Number(n));this._viewPort=ej.datavisualization.Diagram.ScrollUtil._viewPort(this,!0);ej.datavisualization.Diagram.ScrollUtil._transform(this,n,t,i);var r=this;this._views.forEach(function(i){var f=r._views[i],u;f.type=="overview"&&(u=$("#"+i).ejOverview("instance"),u&&u._scrollOverviewRect(n,t,r._currZoom))});this.model.scrollSettings.viewPortHeight=this._viewPort.height;this.model.scrollSettings.viewPortWidth=this._viewPort.width;this.model.scrollSettings.currentZoom=this._currZoom},_getChild:function(n){return ej.datavisualization.Diagram.Util.getChild(n)},_getChildren:function(n){var i,r,t;if(n){for(i=[],r=0;r<n.length;r++)t=n[r],t&&(typ