!function(N,V,z){"use strict";var X="ht",k=N[X],r=k.Default,W=r.def,T=r.getInternal();k.HistoryManager=function(Z){this._histories=[],this.setDataModel(Z)},W(k.HistoryManager,V,{ms_ac:["dataModel","histories","historyIndex","maxHistoryCount","disabled"],ms_fire:1,_historyIndex:-1,_betweenTransaction:0,_maxHistoryCount:200,_disabled:!1,ignoredPropertyMap:{imageLoaded:!0,children:!0,attaches:!0,shape:!0,childChange:!0,agentChange:!0,sourceAgent:!0,targetAgent:!0,edgeGroup:!0,"*":!0},ignoreDataModelPropertyMap:{},beginInteraction:function(){this.beginTransaction()},endInteraction:function(){this.endTransaction()},beginTransaction:function(){if(!this._disabled){var E=this;E._betweenTransaction++,1===E._betweenTransaction&&(E._transactionHistories={})}},endTransaction:function(){if(0!==this._betweenTransaction){var S=this,I=S._histories;if(S._betweenTransaction>0&&S._betweenTransaction--,0===S._betweenTransaction){if(S._transactionHistories){var w=[];for(var q in S._transactionHistories)w.push(S._transactionHistories[q]);w.length&&(I=I.slice(0,S._historyIndex+1),I.push(w),I.length>S._maxHistoryCount&&(I=I.slice(I.length-S._maxHistoryCount)),S.setHistories(I),S.setHistoryIndex(I.length-1,!0))}delete S._transactionHistories}}},setDataModel:function(C){var w=this,R=w._dataModel;R!==C&&(R&&(delete R._historyManager,R.ump(w.handleDataModelPropertyChange,w),R.umm(w.$5p,w),R.umd(w.$6p,w),R.removeHierarchyChangeListener(w.handleHierarchyChange,w),R.removeIndexChangeListener(w.handleIndexChange,w)),w._dataModel=C,C&&(C._historyManager=w,C.mp(w.handleDataModelPropertyChange,w),C.mm(w.$5p,w),C.md(w.$6p,w),C.addHierarchyChangeListener(w.handleHierarchyChange,w),C.addIndexChangeListener(w.handleIndexChange,w)),w.fp("dataModel",R,C),w.clear())},setHistoryIndex:function(T,e){var U=this,Q=U._historyIndex,E=U._histories.length;if(-1>T?T=-1:T>=E&&(T=E-1),Q!==T){if(!e){var N=T-Q;N>0?U.$2p(N):0>N&&U.$1p(-N)}U._historyIndex=T,U.fp("historyIndex",Q,T),U.dataModel&&U.dataModel.onHistoryManagerChanged()}},setMaxHistoryCount:function(I){var V=this,t=V._histories,b=V._maxHistoryCount;(!I||0>=I)&&(I=10),b!==I&&(V._maxHistoryCount=I,V.fp("maxHistoryCount",b,I),t.length>I&&V.clear())},cloneValue:function(T){return k.Default.clone(T)},isPropertyUndoable:function(s){return s&&!this.ignoredPropertyMap[s]},isIndexUndoable:function(){return!1},isDataModelPropertyUndoable:function(Z){return Z&&!this.ignoreDataModelPropertyMap[Z]},$5p:function(p){this.handleChange(p,p.kind)},$6p:function(K){this.handleChange(K,"property")},handleHierarchyChange:function($){this.handleChange($,"hierarchy")},handleIndexChange:function(o){this.handleChange(o,"index")},handleDataModelPropertyChange:function(W){this.handleChange(W,"dataModelProperty")},toChildrenInfo:function(v){var b={};return b.data=v,b.children=[],v.eachChild(function(r){b.children.push(this.toChildrenInfo(r))},this),b},restoreChildren:function(q){var n=q.data;q.children.forEach(function(L){var s=L.data;s.getParent()!==n&&n.addChild(s),this._dataModel.contains(s)||this._dataModel.add(s),this.restoreChildren(L)},this)},handleChange:function(X,_){var N=this;if(!(N._disabled||N._isUndoRedoing||r.loadingRefGraph)){var J,m=(N._histories,X.data),D=X.property;if(!m||!(m._refGraph||m instanceof k.RefGraph)){if("property"===_)N.isPropertyUndoable(D,m)&&(J={kind:_,data:m,property:D,oldValue:N.cloneValue(X.oldValue,m,D),newValue:N.cloneValue(X.newValue,m,D),event:X});else if("hierarchy"===_||"index"===_&&N.isIndexUndoable(X))J={kind:_,data:m,oldIndex:X.oldIndex,newIndex:X.newIndex,event:X};else if("clear"===_)J={kind:_,json:X.json,event:X};else if("add"===_){if(J={kind:_,data:m,event:X,childrenInfo:this.toChildrenInfo(m),parent:m.getParent()},J.parent){var C=N._dataModel.getSiblings(m);J.siblingsIndex=C.indexOf(m)}m instanceof k.Node&&(J.host=m.getHost(),J.attaches=m.getAttaches()?m.getAttaches().toArray():z),m instanceof k.Edge&&(J.source=m.getSource(),J.target=m.getTarget())}else"remove"===_?J={kind:_,data:m,event:X}:"dataModelProperty"===_&&N.isDataModelPropertyUndoable(D,m)&&(J={kind:_,property:D,oldValue:N.cloneValue(X.oldValue,m,D),newValue:N.cloneValue(X.newValue,m,D),event:X});N.addHistory(J)}}},addHistory:function(m){var z=this;if(m)if(z._betweenTransaction){var P=(m.data?m.data._id:0)+"_"+m.kind+"_"+m.property;if("property"===m.kind||"dataModelProperty"===m.kind){var X=z._transactionHistories[P];X&&(m.oldValue=X.oldValue)}z._transactionHistories[P]=m}else{var a=z._histories;a=a.slice(0,z._historyIndex+1),a.push([m]),a.length>z._maxHistoryCount&&(a=a.slice(a.length-z._maxHistoryCount)),z.setHistories(a),z.setHistoryIndex(a.length-1,!0)}},canUndo:function(){return!this._disabled&&this._historyIndex>=0&&this._historyIndex=-1&&this._historyIndex=A)&&(A=1),this.setHistoryIndex(this._historyIndex-A)},$1p:function(o){if(this.canUndo()){var z,d=this,q=d._dataModel,Z=d._histories,N=d._historyIndex,L=0;for(d._isUndoRedoing=!0,r.setIsolating(!0);o>0;){if(N>=0&&N=0;H--){var I=z[H],u=I.kind,c=I.data,O=I.property,W=I.event,k=this.cloneValue(I.oldValue,c,O);if(I.undo)I.undo();else if("add"===u)q.remove(c,{keepChildren:!0});else if("remove"===u)q.contains(c)||q.add(c,W.rootsIndex,W.datasIndex);else if("clear"===u)q.deserialize(r.clone(I.json));else if("property"===u)if("parent"===O)k?k.addChild(c,W.oldIndex):(c.setParent(k),W.oldIndex>=0&&q.moveTo(c,W.oldIndex));else{var $=null;0===O.indexOf("a:")?($="attr",O=O.replace("a:","")):0===O.indexOf("s:")?($="style",O=O.replace("s:","")):0===O.indexOf("f:")&&($="field",O=O.replace("f:","")),T.setPropertyValue(c,$,O,k)}else if("dataModelProperty"===u){var $=null;0===O.indexOf("a:")?($="attr",O=O.replace("a:","")):0===O.indexOf("s:")?($="style",O=O.replace("s:","")):0===O.indexOf("f:")&&($="field",O=O.replace("f:","")),T.setPropertyValue(q,$,O,k)}else"hierarchy"===u?q.moveTo(c,I.oldIndex):"index"===u?q.moveToIndex(c,I.oldIndex):"selection"===u&&q.sm().ss(I.oldValue)}}o--}r.setIsolating(!1),delete d._isUndoRedoing,d.afterUndo(L)}},afterUndo:function(){},redo:function(B){(!B||0>=B)&&(B=1),this.setHistoryIndex(this._historyIndex+B)},$2p:function(P){if(this.canRedo()){var H,Z=this,m=Z._dataModel,q=Z._histories,i=Z._historyIndex,b=0;for(Z._isUndoRedoing=!0,r.setIsolating(!0);P>0;){if(i>=-1&&i=0&&m.moveTo(p,S.newIndex));else{var y=null;0===h.indexOf("a:")?(y="attr",h=h.replace("a:","")):0===h.indexOf("s:")?(y="style",h=h.replace("s:","")):0===h.indexOf("f:")&&(y="field",h=h.replace("f:","")),T.setPropertyValue(p,y,h,E)}else if("dataModelProperty"===f){var y=null;0===h.indexOf("a:")?(y="attr",h=h.replace("a:","")):0===h.indexOf("s:")?(y="style",h=h.replace("s:","")):0===h.indexOf("f:")&&(y="field",h=h.replace("f:","")),T.setPropertyValue(m,y,h,E)}else"hierarchy"===f?m.moveTo(p,L.newIndex):"index"===f?m.moveToIndex(p,L.newIndex):"selection"===f&&m.sm().ss(L.newValue)}}P--}r.setIsolating(!1),delete Z._isUndoRedoing,this.afterRedo(b)}},afterRedo:function(){},clear:function(){this.setHistories([]),this.setHistoryIndex(-1,!0),this._betweenTransaction=0,delete this._transactionHistories}})}("undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:(0,eval)("this"),Object);