Minder.min.js 17 KB

1
  1. MWF.xApplication.Execution=MWF.xApplication.Execution||{};MWF.xApplication.Execution.Minder=new Class({Extends:MWF.widget.Common,Implements:[Options,Events],options:{style:"default",template:"default",theme:"fresh-blue",hasNavi:true,align:"center"},initialize:function(e,t,i,n){this.setOptions(n);this.container=e;this.app=t;this.lp=this.app.lp.minder;this.actions=this.app.restActions;this.path="/x_component_Execution/$Minder/";this.cssPath=this.path+this.options.style+"/css.wcss";this._loadCss();this.data=i},load:function(){this.loadResource(function(){this.loadKityMinder(this.data)}.bind(this));this.attachEvent()},reload:function(e){this.container.empty();this.loadKityMinder(e||this.data)},refresh:function(){this.moveToCenter()},destroy:function(){if(this.navi){this.navi.destroy();delete this.navi}if(this.km)delete this.km;delete this},loadResource:function(e){var t="/x_desktop/res/framework/kityminder/";COMMON.AjaxModule.loadCss(t+"core/src/kityminder.css",function(){COMMON.AjaxModule.load("kity",function(){COMMON.AjaxModule.load("kityminder",function(){if(e)e()}.bind(this))}.bind(this))}.bind(this))},loadKityMinder:function(e){var t=this;this.isMovingCenter=true;var i=this.km=new kityminder.Minder;i.renderTo(this.container);e.theme=e.theme||this.options.theme;e.template=e.template||this.options.template;this.deepestLevel=0;i.on("import",function(e){if(!t.alreadyBind){var n=i.getAllNode();n.forEach(function(e){var i=e.getLevel();t.deepestLevel=i>t.deepestLevel?i:t.deepestLevel;t.fireEvent("postLoadNode",e)});t.alreadyBind=true;if(t.options.hasNavi)t.loadNavi();t.fireEvent("postLoad",t)}});i.on("layoutallfinish",function(){if(t.templateChanged||t.isMovingCenter){t.moveToCenter();t.templateChanged=false;t.isMovingCenter=false}});i.importJson(e);i.execCommand("hand")},loadNavi:function(e){this.navi=new MWF.xApplication.Execution.Minder.Navigation(e||this.container,this,this.km,this.app,this.css);this.navi.load()},moveToCenter:function(){this._moveToCenter()},_moveToCenter:function(){if(this.options.align!="center")return;var e=this.km.getRenderContainer().getRenderBox("screen");var t=this.container.getCoordinates();var i=this.km.getRoot();var n=i.getRenderContainer().getRenderBox("screen");var s=n.top-e.top;var a=n.left-e.left;var o=i.getChildren().length;var h=this.km.queryCommandValue("template");var d,c,r=false;if(e.width>t.width){if(h=="fish-bone"||o<2){d=50}else{r=true}}else{d=parseInt((t.width-e.width)/2+a+50)}if(e.height>t.height){if(s>t.height){if(h=="fish-bone"){c=t.height-n.height}else if(o<2){c=parseInt(t.width/2)}else{r=true}}else{c=s+50}}else{c=parseInt((t.height-e.height)/2)+s}if(r){this.km.execCommand("camera",this.km.getRoot(),600)}else{var l=this.km.getViewDragger();l.moveTo(new kity.Point(d,c),300)}},attachEvent:function(){this.container.addEvent("mousewheel",function(e){if(e.wheel==1){this.km.execCommand("zoomIn");if(this.navi&&this.navi.navZoompanIndicator){var t=parseInt(this.navi.navZoompanIndicator.getStyle("margin-top"));if(t>0){this.navi.navZoompanIndicator.setStyle("margin-top",t-10+"px")}}}else{this.km.execCommand("zoomOut");if(this.navi&&this.navi.navZoompanIndicator){var i=parseInt(this.navi.navZoompan.getStyle("height"));var t=parseInt(this.navi.navZoompanIndicator.getStyle("margin-top"));if(t<i){this.navi.navZoompanIndicator.setStyle("margin-top",t+10+"px")}}}}.bind(this))}});MWF.xApplication.Execution.Minder.Navigation=new Class({Implements:[Options,Events],initialize:function(e,t,i,n,s){this.container=e;this.app=n;this.lp=this.app.lp.minder;this.actions=this.app.restActions;this.css=s;this.minder=t;this.km=i},load:function(e){this.createNavigation()},destroy:function(){this.node.destroy();delete this},createNavigation:function(){this.node=new Element("div",{styles:this.css.nav}).inject(this.container);this.navZoomIn=new Element("div",{styles:this.css.navButton,title:this.lp.navZoomin}).inject(this.node);new Element("div",{styles:this.css.navZoominIcon}).inject(this.navZoomIn);this.navZoomIn.addEvent("click",function(){this.km.execCommand("zoomIn");var e=parseInt(this.navZoompanIndicator.getStyle("margin-top"));if(e>0){this.navZoompanIndicator.setStyle("margin-top",e-10+"px")}}.bind(this));this.navZoompan=new Element("div",{styles:this.css.navZoompan}).inject(this.node);this.navZoompanOrigin=new Element("div",{styles:this.css.navZoompanOrigin}).inject(this.navZoompan);this.navZoompanOrigin.addEvent("click",function(){this.km.execCommand("zoom",100);this.navZoompanIndicator.setStyle("margin-top","30px")}.bind(this));this.navZoompanIndicator=new Element("div",{styles:this.css.navZoompanIndicator}).inject(this.navZoompan);this.navZoomout=new Element("div",{styles:this.css.navButton,title:this.lp.navZoomout}).inject(this.node);new Element("div",{styles:this.css.navZoomoutIcon}).inject(this.navZoomout);this.navZoomout.addEvent("click",function(){this.km.execCommand("zoomOut");var e=parseInt(this.navZoompan.getStyle("height"));var t=parseInt(this.navZoompanIndicator.getStyle("margin-top"));if(t<e){this.navZoompanIndicator.setStyle("margin-top",t+10+"px")}}.bind(this));this.navCameraNode=new Element("div",{styles:this.css.navButton,title:this.lp.navCamera}).inject(this.node);new Element("div",{styles:this.css.navCameraIcon}).inject(this.navCameraNode);this.navCameraNode.addEvent("click",function(){this.km.execCommand("camera",this.km.getRoot(),600)}.bind(this));this.navExpandNode=new Element("div",{styles:this.css.navButton,title:"展开节点"}).inject(this.node);new Element("div",{styles:this.css.navExpandIcon}).inject(this.navExpandNode);this.navExpandNode.addEvent("click",function(e){this.showExpendNode(e);e.stopPropagation()}.bind(this));this.navTrigger=new Element("div",{styles:this.css.navButton,title:this.lp.navTrigger}).inject(this.node);new Element("div",{styles:this.css.navTriggerIcon}).inject(this.navTrigger);this.navTrigger.addEvent("click",function(){this.toggleOpenPreViewer()}.bind(this));this.createrPreViewer();this.navMoveNode=new Element("div",{styles:this.css.navButton,title:this.lp.allowDrag}).inject(this.node);this.navMoveNode.setStyles(this.css.navButton_over);this.moveOpen=true;new Element("div",{styles:this.css.navMoveIcon}).inject(this.navMoveNode);this.navMoveNode.addEvent("click",function(){this.moveOpen=!this.moveOpen;if(this.moveOpen){this.navMoveNode.setStyles(this.css.navButton_over)}else{this.navMoveNode.setStyles(this.css.navButton)}this.km.execCommand("hand")}.bind(this));this.navTemplateNode=new Element("div",{styles:this.css.navButton,title:this.lp.changeTemplate}).inject(this.node);new Element("div",{styles:this.css.navTemplateIcon}).inject(this.navTemplateNode);this.navTemplateNode.addEvent("click",function(e){this.selectTemplate(e);e.stopPropagation()}.bind(this));this.navSearchNode=new Element("div",{styles:this.css.navButton,title:this.lp.search}).inject(this.node);new Element("div",{styles:this.css.navSearchIcon}).inject(this.navSearchNode);this.navSearchNode.addEvent("click",function(){if(!this.isShowedSearch){this.showSearch()}else{this.hideSearch()}}.bind(this))},toggleOpenPreViewer:function(){this.previewOpened=!this.previewOpened;if(this.previewOpened){this.navTrigger.setStyles(this.css.navButton_over)}else{this.navTrigger.setStyles(this.css.navButton)}this.preview.toggleOpen(this.previewOpened)},createrPreViewer:function(){this.preview=new MWF.xApplication.Execution.Minder.Preview(this,this.node,this.km,this.app,this.css);this.preview.load()},showSearch:function(){this.isShowedSearch=true;if(!this.searchBar){this.searchBar=new MWF.xApplication.Execution.Minder.SearchBar(this,this.node,this.km,this.app,this.css);this.searchBar.load()}else{this.searchBar.show()}this.navSearchNode.setStyles(this.css.navButton_over)},hideSearch:function(){this.isShowedSearch=false;this.searchBar.hide();this.navSearchNode.setStyles(this.css.navButton)},selectTemplate:function(){this.templateOpen=!this.templateOpen;if(this.templateOpen){if(this.templateSelectNode){this.templateSelectNode.setStyle("display","block")}else{this.createTemplateSelectNode()}this.navTemplateNode.setStyles(this.css.navButton_over)}else{this.hideTemplateSelectNode()}},hideTemplateSelectNode:function(){this.templateOpen=false;this.navTemplateNode.setStyles(this.css.navButton);if(this.templateSelectNode){this.templateSelectNode.setStyle("display","none")}},createTemplateSelectNode:function(){this.templateSelectNode=new Element("div",{styles:this.css.templateSelectNode}).inject(this.node);this.minderTemplate=new Element("div",{styles:this.css.minderTemplate,title:this.lp.minderTemplate}).inject(this.templateSelectNode);this.minderTemplate.addEvents({mouseover:function(){this.minderTemplate.setStyles(this.css.minderTemplate_over)}.bind(this),mouseout:function(){this.minderTemplate.setStyles(this.css.minderTemplate)}.bind(this),click:function(){this.minder.templateChanged=true;this.km.execCommand("template","default");this.hideTemplateSelectNode()}.bind(this)});this.fishboneTemplate=new Element("div",{styles:this.css.fishboneTemplate,title:this.lp.fishBoneTemplate}).inject(this.templateSelectNode);this.fishboneTemplate.addEvents({mouseover:function(){this.fishboneTemplate.setStyles(this.css.fishboneTemplate_over)}.bind(this),mouseout:function(){this.fishboneTemplate.setStyles(this.css.fishboneTemplate)}.bind(this),click:function(){this.minder.templateChanged=true;this.km.execCommand("template","fish-bone");this.hideTemplateSelectNode()}.bind(this)});this.app.content.addEvent("click",function(){this.hideTemplateSelectNode()}.bind(this))},showExpendNode:function(){this.expendNodeOpen=!this.expendNodeOpen;if(this.expendNodeOpen){if(this.expendArea){this.expendArea.setStyle("display","block")}else{this.createExpandArea()}this.navExpandNode.setStyles(this.css.navButton_over)}else{this.hideExpendArea()}},hideExpendArea:function(){this.expendNodeOpen=false;this.navExpandNode.setStyles(this.css.navButton);if(this.expendArea){this.expendArea.setStyle("display","none")}},createExpandArea:function(){var e=this.minder.deepestLevel;this.expendArea=new Element("div",{styles:this.css.expendArea}).inject(this.node);this.expendArea.setStyle("height",this.css.expendNode.height*(e+1));var t=new Element("div",{styles:this.css.expendNode,text:"展开所有节点"}).inject(this.expendArea);t.addEvents({mouseover:function(){this.node.setStyles(this.navi.css.expendNode_over)}.bind({navi:this,node:t}),mouseout:function(){this.node.setStyles(this.navi.css.expendNode)}.bind({navi:this,node:t}),click:function(){this.navi.km.execCommand("expandtolevel",e);this.navi.hideExpendArea()}.bind({navi:this,node:t})});for(var i=1;i<=e;i++){var n=new Element("div",{styles:this.css.expendNode,text:"展开到"+i+"级节点"}).inject(this.expendArea);n.addEvents({mouseover:function(){this.node.setStyles(this.navi.css.expendNode_over)}.bind({navi:this,node:n}),mouseout:function(){this.node.setStyles(this.navi.css.expendNode)}.bind({navi:this,node:n}),click:function(){this.navi.km.execCommand("expandtolevel",this.level);this.navi.hideExpendArea()}.bind({navi:this,node:n,level:i})})}this.app.content.addEvent("click",function(){this.hideExpendArea()}.bind(this))}});MWF.xApplication.Execution.Minder.Preview=new Class({options:{show:"true"},Implements:[Options,Events],initialize:function(e,t,i,n,s){this.navi=e;this.container=t;this.app=n;this.lp=this.app.lp.minder;this.actions=this.app.restActions;this.css=s;this.km=i},load:function(e){this.navPreviewer=new Element("div",{styles:this.css.navPreviewer}).inject(this.container);this.initPreViewer();if(this.options.show)this.navi.toggleOpenPreViewer()},initPreViewer:function(){var e=this.paper=new kity.Paper(this.navPreviewer);this.nodeThumb=e.put(new kity.Path);this.connectionThumb=e.put(new kity.Path);this.visibleRect=e.put(new kity.Rect(100,100).stroke("red","1%"));this.contentView=new kity.Box;this.visibleView=new kity.Box;this.pathHandler=this.getPathHandler(this.km.getTheme());this.navigate()},getPathHandler:function(e){switch(e){case"tianpan":case"tianpan-compact":return function(e,t,i,n,s){var a=n>>1;e.push("M",t,i+a,"a",a,a,0,1,1,0,.01,"z")};default:{return function(e,t,i,n,s){e.push("M",t,i,"h",n,"v",s,"h",-n,"z")}}}},toggleOpen:function(e){if(e){this.navPreviewer.setStyle("display","block");this.bindPreviewerEvent();this.updateContentView();this.updateVisibleView()}else{this.navPreviewer.setStyle("display","none");this.unbindPreviewerEvent()}},bindPreviewerEvent:function(){this.updateContentViewFun=this.updateContentViewFun||this.updateContentView.bind(this);this.updateVisibleViewFun=this.updateVisibleViewFun||this.updateVisibleView.bind(this);this.km.on("layout layoutallfinish",this.updateContentViewFun);this.km.on("viewchange",this.updateVisibleViewFun)},unbindPreviewerEvent:function(){this.km.off("layout layoutallfinish",this.updateContentViewFun);this.km.off("viewchange",this.updateVisibleViewFun)},moveView:function(e,t){var i=this.visibleView;e.x=-e.x;e.y=-e.y;var n=this.km.getPaper().getViewPortMatrix();i=n.transformBox(i);var s=e.offset(i.width/2,i.height/2);this.km.getViewDragger().moveTo(s,t)},navigate:function(){var e=this;this.dragging=false;this.paper.on("mousedown",function(t){e.dragging=true;e.moveView(t.getPosition("top"),200);e.navPreviewer.setStyles(e.css.navPreviewerGrab)});this.paper.on("mousemove",function(t){if(e.dragging){e.moveView(t.getPosition("top"))}});$(window).addEvent("mouseup",function(){e.dragging=false;if(e.navPreviewer)e.navPreviewer.setStyles(e.css.navPreviewerNoGrab)})},updateContentView:function(){var e=this.km.getRenderContainer().getBoundaryBox();this.contentView=e;var t=30;this.paper.setViewBox(e.x-t-.5,e.y-t-.5,e.width+t*2+1,e.height+t*2+1);var i=[];var n=[];this.km.getRoot().traverse(function(e){var t=e.getLayoutBox();this.pathHandler(i,t.x,t.y,t.width,t.height);if(e.getConnection()&&e.parent&&e.parent.isExpanded()){n.push(e.getConnection().getPathData())}}.bind(this));this.paper.setStyle("background",this.km.getStyle("background"));if(i.length){this.nodeThumb.fill(this.km.getStyle("root-background")).setPathData(i)}else{this.nodeThumb.setPathData(null)}if(n.length){this.connectionThumb.stroke(this.km.getStyle("connect-color"),"0.5%").setPathData(n)}else{this.connectionThumb.setPathData(null)}this.updateVisibleView()},updateVisibleView:function(){this.visibleView=this.km.getViewDragger().getView();this.visibleRect.setBox(this.visibleView.intersect(this.contentView))}});MWF.xApplication.Execution.Minder.SearchBar=new Class({Implements:[Options,Events],initialize:function(e,t,i,n,s){this.navi=e;this.container=t;this.app=n;this.lp=this.app.lp.minder;this.actions=this.app.restActions;this.css=s;this.km=i},load:function(e){this.createSearchBar();this.nodeSequence=[];this.searchSequence=[];this.km.on("contentchange",this.makeNodeSequence.bind(this));this.makeNodeSequence()},show:function(){this.node.setStyle("display","block")},hide:function(){this.node.setStyle("display","none")},createSearchBar:function(){this.node=new Element("div",{styles:this.css.searchBar}).inject(this.container);this.searchInput=new Element("input",{type:"text",styles:this.css.searchInput,value:this.lp.searchText}).inject(this.node);this.searchInput.addEvents({focus:function(e){if(this.searchInput.get("value")==this.lp.searchText){this.searchInput.set("value","")}}.bind(this),blur:function(e){if(this.searchInput.get("value").trim()==""){this.searchInput.set("value",this.lp.searchText)}}.bind(this),keyup:function(){this.doSearch(this.searchInput.get("value"),"next")}.bind(this)});this.resultInforNode=new Element("div",{styles:this.css.resultInforNode,text:"0/0"}).inject(this.node);this.prevButton=new Element("div",{styles:this.css.prevButton,title:this.lp.prev}).inject(this.node);this.prevButton.addEvent("click",function(){this.goPrev()}.bind(this));this.nextButton=new Element("div",{styles:this.css.nextButton,title:this.lp.next}).inject(this.node);this.nextButton.addEvent("click",function(){this.goNext()}.bind(this));this.closeButton=new Element("div",{styles:this.css.closeButton,title:this.lp.close}).inject(this.node);this.closeButton.addEvent("click",function(){this.close()}.bind(this))},goNext:function(){this.doSearch(this.searchInput.get("value"),"next")},goPrev:function(){this.doSearch(this.searchInput.get("value"),"prev")},close:function(){this.navi.hideSearch()},makeNodeSequence:function(){this.nodeSequence=[];this.km.getRoot().traverse(function(e){this.nodeSequence.push(e)}.bind(this))},makeSearchSequence:function(e){this.searchSequence=[];for(var t=0;t<this.nodeSequence.length;t++){var i=this.nodeSequence[t];var n=i.getText().toLowerCase();if(n.indexOf(e)!=-1){this.searchSequence.push({node:i})}var s=i.getData("note");if(s&&s.toLowerCase().indexOf(e)!=-1){this.searchSequence.push({node:i,keyword:e})}}},doSearch:function(e,t){this.km.fire("hidenoterequest");if(!e||!/\S/.exec(e)){this.searchInput.focus();return}this.curIndex=0;this.resultNum=0;e=e.toLowerCase();var i=this.lastKeyword!=e;this.lastKeyword=e;if(i){this.makeSearchSequence(e)}this.resultNum=this.searchSequence.length;if(this.searchSequence.length){var n=i?0:(t==="next"?this.lastIndex+1:this.lastIndex-1)||0;n=(this.searchSequence.length+n)%this.searchSequence.length;this.setSearchResult(this.searchSequence[n].node,this.searchSequence[n].keyword);this.lastIndex=n;this.curIndex=n+1;this.resultInforNode.set("text",this.curIndex+"/"+this.searchSequence.length)}},setSearchResult:function(e,t){setTimeout(function(){if(t){this.km.fire("shownoterequest",{node:e,keyword:t})}if(!e.isExpanded()){this.km.select(e,true);this.km.execCommand("expand",true)}else{this.km.select(e,true);this.km.execCommand("camera",e,50)}}.bind(this),60)}});