MWF.xDesktop.requireApp("process.ProcessManager", "DictionaryExplorer", null, false); MWF.xApplication.process.ProcessManager.FileExplorer = new Class({ Extends: MWF.xApplication.process.ProcessManager.DictionaryExplorer, Implements: [Options, Events], options: { "create": MWF.APPPM.LP.file.create, "search": MWF.APPPM.LP.file.search, "searchText": MWF.APPPM.LP.file.searchText, "noElement": MWF.APPPM.LP.file.noDictionaryNoticeText }, // createSearchElementNode: function(){ // this.titleActionNodeNode = new Element("div", { // "styles": this.css.titleActionNode, // "text": MWF.APPPM.LP.file.loadFiles // }).inject(this.toolbarNode); // this.titleActionNodeNode.addEvent("click", function(){ // this.implodeFiles(); // }.bind(this)); // }, getNewData: function(){ return { "id": "", "name": "", "alias": "", "description": "", "application": (this.app.options.application || this.app.application).id, "fileName": "" } }, getSizeText: function(s){ var o = [ {"t": "K", "i": 1024}, {"t": "M", "i": 1024*1024}, {"t": "G", "i": 1024*1024*1024} ]; var i = 0; var n = s/o[i].i; while (n>1000 && i<2){ i++; n = s/o[i].i; } n = Math.round(n*100)/100; return ""+n+" "+o[i].t; }, implodeFiles: function(){ if (this.upload){ this.upload.upload(); }else{ MWF.require("MWF.widget.Upload", function(){ var datas = []; this.upload = new MWF.widget.Upload(this.app.content, { "action": MWF.Actions.get("x_processplatform_assemble_designer").action, "multiple": true, "method": "uploadFile", "parameter": {"id": ""}, "onBeforeUploadEntry": function(file, up){ var data = this.getNewData(); data.name = file.name; data.fileName = file.name; data.description = file.name+" "+this.getSizeText(file.size); data.updateTime = (new Date()).format("db"); MWF.Actions.get("x_processplatform_assemble_designer").saveFile(data, function(json){ up.options.parameter = {"id": json.data.id}; var node = this.elementContentListNode.getFirst(); if (node) if (node.hasClass("noElementNode")){ node.destroy(); } datas.push(data); }.bind(this), null, false); }.bind(this), "onEvery": function(json, current, count, file){ var data = datas[current-1]; var itemObj = this._getItemObject(data); itemObj.load(); }.bind(this) }).load(); }.bind(this)); } }, loadContentNode: function(){ this.cssPath = this.path+this.options.style+"/file.css"; this.elementContentNode = new Element("div", { "styles": this.css.elementContentNode }).inject(this.node); this.elementContentNode.addEvent("click", function(){ while (this.selectMarkItems.length){ this.selectMarkItems[0].unSelected(); } }.bind(this)); this.elementContentListNode = new Element("div", { "styles": this.css.elementContentListNode }).inject(this.elementContentNode); this.elementContentListNode.loadCss(this.cssPath); this.setContentSize(); this.app.addEvent("resize", function(){this.setContentSize();}.bind(this)); }, _createElement: function(e){ this.implodeFiles(); }, _loadItemDataList: function(callback){ var id = ""; if (this.app.application) id = this.app.application.id; if (this.app.options.application) id = this.app.options.application.id; this.actions.listFile(id,callback); }, _getItemObject: function(item){ return new MWF.xApplication.process.ProcessManager.FileExplorer.File(this, item) }, setTooltip: function(){ this.options.tooltip = { "create": MWF.APPPM.LP.file.create, "search": MWF.APPPM.LP.file.search, "searchText": MWF.APPPM.LP.file.searchText, "noElement": MWF.APPPM.LP.file.noScriptNoticeText }; }, deleteItems: function(){ this.hideDeleteAction(); while (this.deleteMarkItems.length){ var item = this.deleteMarkItems.shift(); if (this.deleteMarkItems.length){ item.deleteFile(); }else{ item.deleteFile(function(){ }.bind(this)); } } }, destroy: function(){ this.node.destroy(); o2.removeCss(this.cssPath); o2.release(this); }, getIconJson: function(callback){ if (!this.icons){ MWF.getJSON("../x_component_File/$Main/icon.json", function(json){ this.icons = json; if (callback) callback(); }.bind(this), false, false); }else{ if (callback) callback(); } }, getIcon: function(fileName){ this.getIconJson(); var ext = fileName.substring(fileName.lastIndexOf(".")+1, fileName.length); if (!ext) ext="unkonw"; var iconName = this.icons[ext.toLowerCase()] || this.icons.unknow; return "../x_component_File/$Main/default/file/"+iconName; } }); MWF.xApplication.process.ProcessManager.FileExplorer.File = new Class({ Extends: MWF.xApplication.process.ProcessManager.DictionaryExplorer.Dictionary, load: function(){ var view = this.explorer.path+this.explorer.options.style+"/file.html"; this.node = new Element("div.o2_fileItemNode", { "events": { "mouseover": function(){ if (this.deleteActionNode) this.deleteActionNode.fade("in"); if (this.saveasActionNode) this.saveasActionNode.fade("in"); }.bind(this), "mouseout": function(){ if (this.deleteActionNode) this.deleteActionNode.fade("out"); if (this.saveasActionNode) this.saveasActionNode.fade("out"); }.bind(this) } }).inject(this.container); if (this.data.name.icon) this.icon = this.data.name.icon; var ext = this.data.fileName.substring(this.data.fileName.lastIndexOf(".")+1, this.data.fileName.length); this.data.fileUrl = this._getUrl(); if (["png","jpg","bmp","gif","jpeg","jpe"].indexOf(ext)!==-1){ //new Image() this.data.iconUrl = this.data.fileUrl; }else{ this.data.iconUrl = this.explorer.getIcon(this.data.fileName); } //this.data.iconUrl = this.explorer.path+""+this.explorer.options.style+"/processIcon/"+this.icon; this.node.loadHtml(view, {"bind": this.data}, function(){ debugger; var itemIconNode = this.node.getElement(".o2_fileItemIconNode"); var itemImgNode = this.node.getElement(".o2_fileItemImgNode"); var itemUrlNode = this.node.getElement(".o2_fileItemUrlNode"); itemUrlNode.setStyle("-webkit-user-select", "text"); var s = itemIconNode.getSize(); // if (!s.x) s.x = itemIconNode.getStyle("width").toFloat(); // if (!s.y) s.y = itemIconNode.getStyle("height").toFloat(); itemImgNode.setStyles({ "max-width": ""+s.x+"px", "max-height": ""+s.y+"px" }); itemImgNode.set("src", this.data.iconUrl); this.deleteActionNode = this.node.getElement(".o2_fileDeleteActionNode"); var itemTextTitleNode = this.node.getElement(".o2_fileItemTextTitleNode"); itemIconNode.addEvent("click", function(e){ this.toggleSelected(); e.stopPropagation(); }.bind(this)); itemIconNode.makeLnk({ "par": this._getLnkPar() }); if (!this.explorer.options.noDelete) this._createActions(); itemTextTitleNode.addEvent("click", function(e){ this._open(e); e.stopPropagation(); }.bind(this)); this._customNodes(); this._isNew(); }.bind(this)); }, _createActions: function(){ if (this.deleteActionNode) this.deleteActionNode.addEvent("click", function(e){ this.deleteItem(e); }.bind(this)); }, _customNodes: function(){}, _open: function(e){ var _self = this; MWF.Actions.get("x_processplatform_assemble_designer").getFile(this.data.id, function(json){ this.data = json.data; new MWF.xApplication.process.ProcessManager.FileDesigner(this.explorer, this.data); }.bind(this)); }, _getIcon: function(){ return "file.png"; }, _getUrl: function(){ var url = MWF.Actions.get("x_processplatform_assemble_surface").action.actions.readFile.uri; url = url.replace(/{flag}/, this.data.id); url = url.replace(/{applicationFlag}/, this.data.application); url = "/x_processplatform_assemble_surface"+url; return o2.filterUrl(MWF.Actions.getHost("x_processplatform_assemble_surface")+url); }, _getLnkPar: function(){ return { "icon": this.data.iconUrl, "title": this.data.name, "par": "@url#"+this._getUrl() }; }, deleteFile: function(callback){ this.explorer.app.restActions.deleteFile(this.data.id, function(){ this.node.destroy(); if (callback) callback(); }.bind(this)); }, _isNew: function(){ if (this.data.updateTime){ var createDate = Date.parse(this.data.updateTime); var currentDate = new Date(); if (createDate.diff(currentDate, "hour")<12) { this.newNode = new Element("div", { "styles": this.css.itemFileNewNode }).inject(this.node); this.newNode.addEvent("click", function(e){ this.toggleSelected(); e.stopPropagation(); }.bind(this)); } } }, selected: function(){ if (this.deleteMode) this.deleteItem(); this.isSelected = true; this.node.setStyles(this.css.itemNode_selected); this.explorer.selectMarkItems.push(this); } }); MWF.xApplication.process.ProcessManager.FileDesigner = new Class({ initialize: function(explorer, item){ this.explorer = explorer; this.app = this.explorer.app; this.data = item; this.container = this.explorer.container; this.css = this.explorer.css; this.lp = MWF.APPPM.LP; this.load(); }, getNewData: function(){ return { "id": "", "name": "", "alias": "", "description": "", "application": (this.explorer.app.options.application || this.explorer.app.application).id, "fileName": "" } }, resize: function(){ var size = this.app.content.getSize(); var nodeSize = this.fileAreaNode.getSize(); var x = (size.x-nodeSize.x)/2; var y = (size.y-nodeSize.y)/2; if (y<0) y=0; if (x<0) x=0; this.fileAreaNode.setStyles({ "top": ""+y+"px", "left": ""+x+"px" }); var titleSize = this.titleNode.getSize(); var buttonSize = this.buttonNode.getSize(); var h = nodeSize.y-titleSize.y-buttonSize.y; this.contentNode.setStyle("height", ""+h+"px"); }, load: function(){ if (!this.data) this.data = this.getNewData(); this.fileMaskNode = new Element("div", {"styles": this.css.createTemplateMaskNode}).inject(this.app.content); this.fileAreaNode = new Element("div", {"styles": this.css.createFormTemplateAreaNode}).inject(this.app.content); this.fileAreaNode.fade("in"); this.titleNode = new Element("div", {"styles": this.css.fileDesignerTitleNode}).inject(this.fileAreaNode); this.titleIconNode = new Element("div", {"styles": this.css.fileDesignerTitleIconNode}).inject(this.titleNode); if (!this.data.id) this.titleIconNode.setStyle("background-image", "url("+this.explorer.path+this.app.options.style+"/icon/new.png)"); this.titleTextNode = new Element("div", {"styles": this.css.fileDesignerTitleTextNode}).inject(this.titleNode); var title = (this.data.name) ? this.data.name : this.explorer.options.tooltip.create; this.titleTextNode.set("text", title); this.contentNode = new Element("div", {"styles": this.css.fileDesignerContentNode}).inject(this.fileAreaNode); this.createContent(); this.buttonNode = new Element("div", {"styles": this.css.fileDesignerButtonNode}).inject(this.fileAreaNode); this.createButton(); this.resizeFun = this.resize.bind(this); this.resizeFun(); this.app.addEvent("resize", this.resizeFun); this.setEvent(); }, createContent: function(){ this.contentAreaNode = new Element("div", {"styles": this.css.fileDesignerContentAreaNode}).inject(this.contentNode); this.nameInput = this.createContentLine(this.lp.name, this.data.name); this.aliasInput = this.createContentLine(this.lp.alias, this.data.alias); this.descriptionInput = this.createContentLine(this.lp.file.description, this.data.description, true); this.createContentFile(); this.createContentFileUrl(); }, createContentFileUrl: function(){ if (this.data.fileName){ var div = new Element("div", {"styles": this.css.fileDesignerContentLineNode}).inject(this.contentAreaNode); var lineTitleNode = new Element("div", {"styles": this.css.fileDesignerContentLineTitleNode, "text": "URL"}).inject(div); this.fileUrlNode = new Element("div", {"styles": this.css.fileDesignerContentLineContentNode}).inject(div); div.setStyle("height", "80px"); var url = MWF.Actions.get("x_processplatform_assemble_surface").action.actions.readFile.uri; url = url.replace(/{flag}/, this.data.id); url = url.replace(/{applicationFlag}/, this.data.application); url = "/x_processplatform_assemble_surface"+url; this.fileUrlNode.setStyle("line-height", "18px"); var href = MWF.Actions.getHost("x_processplatform_assemble_surface")+url; //this.fileUrlNode.set("html", ""+url+""); this.fileUrlNode.set("text", url); var a = new Element("div", { "styles": {"height": "30px"}, "html": "open" }).inject(this.fileUrlNode, "bottom"); } }, modifyContentFileUrl: function(){ if (!this.fileUrlNode){ this.createContentFileUrl(); }else{ var url = MWF.Actions.get("x_processplatform_assemble_surface").action.actions.readFile.uri; url = url.replace(/{flag}/, this.data.id); url = url.replace(/{applicationFlag}/, this.data.application); //this.fileUrlNode.set("text", "/x_processplatform_assemble_surface"+url); url = "/x_processplatform_assemble_surface"+url; this.fileUrlNode.setStyle("line-height", "18px"); var href = MWF.Actions.getHost("x_processplatform_assemble_surface")+url; //this.fileUrlNode.set("html", ""+url+""); this.fileUrlNode.set("text", url); var a = new Element("div", { "styles": {"height": "30px"}, "html": "open" }).inject(this.fileUrlNode, "bottom"); } }, createContentFile: function(){ var div = new Element("div", {"styles": this.css.fileDesignerContentFileLineNode}).inject(this.contentAreaNode); var lineTitleNode = new Element("div", {"styles": this.css.fileDesignerContentFileLineTitleNode, "text": this.lp.attachment}).inject(div); var lineRightNode = new Element("div", {"styles": this.css.fileDesignerContentFileLineRightNode}).inject(div); this.fileContentNode = new Element("div", {"styles": this.css.fileDesignerContentFileLineContentNode}).inject(div); this.uploadFileButton = new Element("div", {"styles": this.css.fileDesignerUploadButtonNode, "text": this.lp.upload}).inject(lineRightNode); if (this.data.fileName){ this.loadFileIcon(); } }, // getIconJson: function(callback){ // if (!this.icons){ // MWF.getJSON("../x_component_File/$Main/icon.json", function(json){ // this.icons = json; // if (callback) callback(); // }.bind(this), false, false); // }else{ // if (callback) callback(); // } // }, // getIcon: function(ext){ // if (!ext) ext="unkonw"; // var iconName = this.icons[ext.toLowerCase()] || this.icons.unknow; // return "../x_component_File/$Main/default/file/"+iconName; // }, loadFileIcon: function(){ debugger; this.fileContentNode.empty(); //var ext = this.data.fileName.substr(this.data.fileName.lastIndexOf(".")+1, this.data.fileName.length); //this.explorer.getIconJson(function(){ var url = this.explorer.getIcon(this.data.fileName); var fileIconNode = new Element("div", {"styles": this.css.fileDesignerContentFileLineFileIconNode}).inject(this.fileContentNode); fileIconNode.setStyle("background-image", "url('"+url+"')"); var fileTextNode = new Element("div", {"styles": this.css.fileDesignerContentFileLineFileNameNode, "text": this.data.fileName}).inject(this.fileContentNode); var fileSizeNode = new Element("div", {"styles": this.css.fileDesignerContentFileLineFileSizeNode, "text": this.data.description}).inject(this.fileContentNode); //}.bind(this)); }, createContentLine: function(text, value, readonly){ var div = new Element("div", {"styles": this.css.fileDesignerContentLineNode}).inject(this.contentAreaNode); var lineTitleNode = new Element("div", {"styles": this.css.fileDesignerContentLineTitleNode, "text": text}).inject(div); var lineContentNode = new Element("div", {"styles": this.css.fileDesignerContentLineContentNode}).inject(div); return new Element("input", {"styles": this.css.fileDesignerContentLineInputNode, "value": value, "readonly": readonly}).inject(lineContentNode); }, createButton: function(){ this.cancelButton = new Element("div", {"styles": this.css.fileDesignerCancelButtonNode, "text": this.lp.cancel}).inject(this.buttonNode); this.okButton = new Element("div", {"styles": this.css.fileDesignerOkButtonNode, "text": this.lp.ok}).inject(this.buttonNode); }, setEvent: function(){ this.cancelButton.addEvent("click", function(e){ this.close(e); }.bind(this)); this.okButton.addEvent("click", function(){ this.save(); }.bind(this)); this.uploadFileButton.addEvent("click", function(){ this.upload(); }.bind(this)); }, upload: function(){ if (!this.data.id){ //MWF.Actions.get("x_processplatform_assemble_designer").saveFile(this.data, function(){ // this.explorer.reload(); this.uploadFile(function(){ this.app.notice(this.lp.file.uploadSuccess, "success"); }.bind(this)); //}.bind(this)); }else{ this.uploadFile(function(){ this.app.notice(this.lp.file.uploadSuccess, "success"); }.bind(this)); } }, uploadFile: function(callback){ MWF.require("MWF.widget.Upload", function(){ new MWF.widget.Upload(this.app.content, { "action": MWF.Actions.get("x_processplatform_assemble_designer").action, "multiple": false, "method": "uploadFile", "parameter": {"id": this.data.id}, "onCompleted": function(){ this.loadFileIcon(); this.modifyContentFileUrl(); this.explorer.reload(); if (callback) callback(); }.bind(this), "onBeforeUpload": function(files, up){ var name = files[0].name; this.nameInput.set("value", name); var data = this.getData(); this.data = Object.merge(this.data, data); MWF.Actions.get("x_processplatform_assemble_designer").saveFile(this.data, function(json){ this.explorer.reload(); up.options.parameter = {"id": json.data.id}; }.bind(this), null, false); }.bind(this), "onEvery": function(json, current, count, file){ //this.data.description = file.name+" "+this.getSizeText(file.size); //this.data.id = json.data.id; this.data.fileName = file.name; this.data.description = file.name+" "+this.getSizeText(file.size); this.descriptionInput.set("value", this.data.description); MWF.Actions.get("x_processplatform_assemble_designer").saveFile(this.data); }.bind(this) }).load(); }.bind(this)); }, getSizeText: function(s){ var o = [ {"t": "K", "i": 1024}, {"t": "M", "i": 1024*1024}, {"t": "G", "i": 1024*1024*1024} ]; var i = 0; var n = s/o[i].i; while (n>1000 && i<2){ i++; n = s/o[i].i; } n = Math.round(n*100)/100; return ""+n+" "+o[i].t; }, getData: function(){ return { "name": this.nameInput.get("value"), "alias": this.aliasInput.get("value"), "description": this.descriptionInput.get("value") } }, close: function(e){ var data = this.getData(); var _self = this; if (data.name!==this.data.name || data.alias!==this.data.alias || data.description!== this.data.description){ this.app.confirm("infor", e, this.lp.file.saveConfirm, this.lp.file.saveConfirmText, 350, 120, function(){ this.close(); _self.save(); }, function(){ this.close(); _self.destroy(); }) }else{ this.destroy(); } }, save: function(){ var data = this.getData(); this.data = Object.merge(this.data, data); MWF.Actions.get("x_processplatform_assemble_designer").saveFile(this.data, function(){ this.explorer.reload(); this.app.notice(this.lp.file.saveSuccess, "success"); this.destroy(); }.bind(this)); }, destroy: function(){ this.fileMaskNode.destroy(); this.fileAreaNode.destroy(); if (this.resizeFun) this.app.removeEvent("resize", this.resizeFun); MWF.release(this); } });