| 1 |
- MWF.xApplication.query.QueryExplorer.Exporter=new Class({Extends:MWF.widget.Common,Implements:[Options,Events],options:{style:"default"},initialize:function(app,data,options){this.setOptions(options);this.app=app;this.container=this.app.content;this.data=data;this.path="/x_component_portal_PortalExplorer/$Exporter/";this.cssPath="/x_component_portal_PortalExplorer/$Exporter/"+this.options.style+"/css.wcss";this._loadCss()},load:function(){this.container.mask({destroyOnHide:true,style:{"background-color":"#666",opacity:.6}});this.node=new Element("div",{styles:this.css.content});this.titleNode=new Element("div",{styles:this.css.titleNode,text:this.app.lp.application.export}).inject(this.node);this.contentNode=new Element("div",{styles:this.css.contentNode}).inject(this.node);this.buttonAreaNode=new Element("div",{styles:this.css.buttonAreaNode}).inject(this.node);this.cancelButton=new Element("div",{styles:this.css.button,text:this.app.lp.application.export_cancel}).inject(this.buttonAreaNode);this.okButton=new Element("div",{styles:this.css.okButton,text:this.app.lp.application.export_ok}).inject(this.buttonAreaNode);this.loadContent();this.setEvent();this.node.inject(this.container);this.node.position({relativeTo:this.container,position:"center",edge:"center"})},loadContent:function(){this.actions=this.app.restActions;listTitleNodeArea=new Element("div",{styles:this.css.listTitleNodeArea}).inject(this.contentNode);this.viewSelectAction=new Element("div",{styles:this.css.listTitleActionNode,text:this.app.lp.application.select}).inject(listTitleNodeArea);new Element("div",{styles:this.css.listTitleNode,text:this.app.lp.application.view}).inject(listTitleNodeArea);this.viewListNode=new Element("div",{styles:this.css.listNode}).inject(this.contentNode);listTitleNodeArea=new Element("div",{styles:this.css.listTitleNodeArea}).inject(this.contentNode);this.statSelectAction=new Element("div",{styles:this.css.listTitleActionNode,text:this.app.lp.application.select}).inject(listTitleNodeArea);new Element("div",{styles:this.css.listTitleNode,text:this.app.lp.application.stat}).inject(listTitleNodeArea);this.statListNode=new Element("div",{styles:this.css.listNode}).inject(this.contentNode);this.listView();this.listStat();this.viewSelectAction.addEvent("click",function(){this.inverse(this.viewListNode)}.bind(this));this.statSelectAction.addEvent("click",function(){this.inverse(this.statListNode)}.bind(this))},listView:function(){this.actions.listView(this.data.id,function(json){if(json.data){json.data.each(function(view){this.createItem(view,this.viewListNode)}.bind(this))}}.bind(this))},listStat:function(){this.actions.listStat(this.data.id,function(json){if(json.data){json.data.each(function(stat){this.createItem(stat,this.statListNode)}.bind(this))}}.bind(this))},inverse:function(node){var inputs=node.getElements("input");inputs.each(function(input){if(input.checked){input.set("checked",false)}else{input.set("checked",true)}})},createItem:function(data,node){var item=new Element("div",{styles:this.css.processItem}).inject(node);var checkbox=new Element("input",{styles:this.css.processItemCheckbox,type:"checkbox",checked:true}).inject(item);checkbox.store("itemData",data);var textNode=new Element("div",{text:data.name,styles:this.css.processItemText}).inject(item)},setEvent:function(){this.cancelButton.addEvent("click",function(e){this.close()}.bind(this));this.okButton.addEvent("click",function(e){this.exportApplication()}.bind(this))},close:function(){this.container.unmask();this.node.destroy();this.cancelButton=null;this.okButton=null;this.buttonAreaNode=null;this.contentNode=null;this.titleNode=null;this.node=null;this.viewListNode=null;this.statListNode=null;this.fireEvent("close")},exportApplication:function(){this.applicationJson={application:{},viewList:[],statList:[]};this.createProgressBar();var views=this.viewListNode.getElements("input:checked");var stats=this.statListNode.getElements("input:checked");this.status={count:views.length+stats.length+1,complete:0};this.exportProperty();this.exportViews(views);this.exportStats(stats)},exportProperty:function(){this.actions.getApplication(this.data.id,function(json){this.progressBarTextNode.set("text","load Application Property ...");if(json.data){this.applicationJson.application=json.data}this.checkExport()}.bind(this))},exportViews:function(views){views.each(function(viewCheckbox){var view=viewCheckbox.retrieve("itemData");this.actions.getView(view.id,function(json){this.progressBarTextNode.set("text",'load View "'+view.name+'" ...');if(json.data){this.applicationJson.viewList.push(json.data)}this.checkExport()}.bind(this))}.bind(this))},exportStats:function(stats){stats.each(function(statCheckbox){var stat=statCheckbox.retrieve("itemData");this.actions.getStat(stat.id,function(json){this.progressBarTextNode.set("text",'load Stat "'+stat.name+'" ...');if(json.data){this.applicationJson.statList.push(json.data)}this.checkExport()}.bind(this))}.bind(this))},checkExport:function(){this.status.complete=this.status.complete+1;var x=358*(this.status.complete/this.status.count);this.progressBarPercent.setStyle("width",""+x+"px");if(this.status.complete==this.status.count){this.saveApplicationToLocal()}},saveApplicationToLocal:function(){debugger;if(window.hasOwnProperty("ActiveXObject")){var win=window.open("","_blank");win.document.write(JSON.encode(this.applicationJson))}else{this.downloadFile(this.data.name+".xapp",JSON.encode(this.applicationJson))}this.progressBarNode.destroy();this.progressBarNode=null;this.progressBarTextNode=null;this.progressBar=null;this.progressBarPercent=null;this.close()},downloadFile:function(fileName,content){var link=new Element("a",{text:this.data.name}).inject(this.progressBarTextNode);var blob=new Blob([content]);link.download=fileName;link.href=URL.createObjectURL(blob);var evt=document.createEvent("HTMLEvents");evt.initEvent("click",false,false);link.dispatchEvent(evt);link.click()},createProgressBar:function(){this.node.hide();this.progressBarNode=new Element("div",{styles:this.css.progressBarNode});this.progressBarNode.inject(this.container);this.progressBarNode.position({relativeTo:this.container,position:"center",edge:"center"});this.progressBarTextNode=new Element("div",{styles:this.css.progressBarTextNode}).inject(this.progressBarNode);this.progressBar=new Element("div",{styles:this.css.progressBar}).inject(this.progressBarNode);this.progressBarPercent=new Element("div",{styles:this.css.progressBarPercent}).inject(this.progressBar)}});
|