RuntimeInCommon.min.js 4.8 KB

1
  1. MWF.xApplication.MinderEditor.Drag=new Class({initialize:function(e){this.editor=e;this.fsm=e.fsm;this.minder=e.minder;this.popmenu=e.popmenu;this.receiver=e.receiver;this.receiverElement=this.receiver.element;this.setupFsm();var i,n;var r=0;var t=1;var s=20;var a=t;var o,h,l,f,d;var u=this.freeHorizen=false;var c=this.freeVirtical=false;this.frame=null;this.minder.on("mousedown",function(e){a=r;var t=this.minder.getPaper().container.getBoundingClientRect();i=e.originEvent.clientX;n=e.originEvent.clientY;d=t.top;o=t.width;h=t.height}.bind(this));this.minder.on("mousemove",function(e){if(this.fsm.state()==="drag"&&a==r&&this.minder.getSelectedNode()&&(Math.abs(i-e.originEvent.clientX)>s||Math.abs(n-e.originEvent.clientY)>s)){l=e.originEvent.clientX;f=e.originEvent.clientY-d;if(l<s){this.move("right",s-l)}else if(l>o-s){this.move("left",s+l-o)}else{u=true}if(f<s){this.move("bottom",f)}else if(f>h-s){this.move("top",s+f-h)}else{c=true}if(u&&c){this.move(false)}}if(this.fsm.state()!=="drag"&&a===r&&this.minder.getSelectedNode()&&(Math.abs(i-e.originEvent.clientX)>s||Math.abs(n-e.originEvent.clientY)>s)){if(this.fsm.state()==="popmenu"){popmenu.active(Popmenu.STATE_IDLE)}return this.fsm.jump("drag","user-drag")}}.bind(this));window.addEventListener("mouseup",function(){a=t;if(this.fsm.state()==="drag"){this.move(false);return this.fsm.jump("normal","drag-finish")}}.bind(this),false)},setupFsm:function(){this.fsm.when("* -> drag",function(){});this.fsm.when("drag -> *",function(e,t,i){if(i=="drag-finish"){}})},move:function(e,t){if(!e){this.freeHorizen=this.freeVirtical=false;this.frame&&kity.releaseFrame(this.frame);this.frame=null;return}if(!this.frame){this.frame=kity.requestFrame(function(t,i,n){return function(e){switch(t){case"left":n._viewDragger.move({x:-i,y:0},0);break;case"top":n._viewDragger.move({x:0,y:-i},0);break;case"right":n._viewDragger.move({x:i,y:0},0);break;case"bottom":n._viewDragger.move({x:0,y:i},0);break;default:return}e.next()}}(e,t,this.minder))}}});MWF.xApplication.MinderEditor.FSM=new Class({initialize:function(e){this.currentState=e;this.BEFORE_ARROW=" - ";this.AFTER_ARROW=" -> ";this.handlers=[];this.debug=new MWF.xApplication.MinderEditor.Debug("fsm")},jump:function(e,t){if(!t)throw new Error("Please tell fsm the reason to jump");var i=this.currentState;var n=[i,e].concat([].slice.call(arguments,1));var r,s;for(r=0;r<this.handlers.length;r++){s=this.handlers[r];if(this.handlerConditionMatch(s.condition,"before",i,e)){if(s.apply(null,n))return}}this.currentState=e;this.debug.log("[{0}] {1} -> {2}",t,i,e);for(r=0;r<this.handlers.length;r++){s=this.handlers[r];if(this.handlerConditionMatch(s.condition,"after",i,e)){s.apply(null,n)}}return this.currentState},state:function(){return this.currentState},when:function(e,t){this.debug.log("[{0}] {1} ",e,t);if(arguments.length==1){t=e;e="* -> *"}var i,n,r,s;n=e.split(this.BEFORE_ARROW);if(n.length==2){i="before"}else{n=e.split(this.AFTER_ARROW);if(n.length==2){i="after"}}if(!i)throw new Error("Illegal fsm condition: "+e);r=n[0];s=n[1];t.condition={when:i,exit:r,enter:s};this.handlers.push(t)},handlerConditionMatch:function(e,t,i,n){if(e.when!=t)return false;if(e.enter!="*"&&e.enter!=n)return false;if(e.exit!="*"&&e.exit!=i)return;return true}});MWF.xApplication.MinderEditor.Receiver=new Class({initialize:function(e){this.editor=e;this.minder=e.minder;this.fsm=e.fsm;this.key=e.key;var t=this.element=document.createElement("div");t.contentEditable=true;t.setAttribute("tabindex",-1);t.classList.add("receiver");t.onkeydown=t.onkeypress=t.onkeyup=this.dispatchKeyEvent.bind(this);this.editor.contentNode.appendChild(t);this.selectAll();this.minder.on("beforemousedown",this.selectAll.bind(this));this.minder.on("receiverfocus",this.selectAll.bind(this));this.minder.on("readonly",function(){this.minder.disable();this.element.parentElement.removeChild(this.element)}.bind(this));this.listeners=[]},selectAll:function(){if(!this.element.innerHTML)this.element.innerHTML="&nbsp;";var e=document.createRange();var t=window.getSelection();e.selectNodeContents(this.element);t.removeAllRanges();t.addRange(e);this.element.focus()},enable:function(){this.element.setAttribute("contenteditable",true)},disable:function(){this.element.setAttribute("contenteditable",false)},fixFFCaretDisappeared:function(){this.element.removeAttribute("contenteditable");this.element.setAttribute("contenteditable","true");this.element.blur();this.element.focus()},onblur:function(e){this.element.onblur=e},listen:function(e,t){if(arguments.length==1){t=e;e="*"}t.notifyState=e;this.listeners.push(t)},dispatchKeyEvent:function(e){var n=this;e.is=function(e){var t=e.split("|");for(var i=0;i<t.length;i++){if(n.key.is(this,t[i]))return true}return false};var t,i;for(var r=0;r<this.listeners.length;r++){t=this.listeners[r];if(t.notifyState!="*"&&t.notifyState!=this.fsm.state()){continue}if(t.call(null,e)){return}}}});