MWF.require("MWF.widget.Common", null, false); MWF.require("MWF.widget.JsonTemplate", null, false); MWF.xApplication.process.FormDesigner.Property = MWF.FCProperty = new Class({ Extends: MWF.widget.Common, Implements: [Options, Events], options: { "style": "default", "path": "/x_component_process_FormDesigner/property/property.html" }, initialize: function(module, propertyNode, designer, options){ this.setOptions(options); this.module = module; this.form = module.form; this.data = module.json; this.htmlPath = this.options.path; this.designer = designer; this.maplists = {}; this.propertyNode = propertyNode; }, load: function(){ if (this.fireEvent("queryLoad")){ MWF.getRequestText(this.htmlPath, function(responseText, responseXML){ this.htmlString = responseText; this.fireEvent("postLoad"); }.bind(this)); } this.propertyNode.addEvent("keydown", function(e){e.stopPropagation();}); }, editProperty: function(td){ }, getHtmlString: function(callback){ if (!this.htmlString){ MWF.getRequestText(this.htmlPath, function(responseText, responseXML){ this.htmlString = responseText; if (callback) callback(); }.bind(this)); }else{ if (callback) callback(); } }, show: function(){ if (!this.propertyContent){ this.getHtmlString(function(){ if (this.htmlString){ this.JsonTemplate = new MWF.widget.JsonTemplate(this.data, this.htmlString); this.propertyContent = new Element("div", {"styles": {"overflow": "hidden"}}).inject(this.propertyNode); this.propertyContent.set("html", this.JsonTemplate.load()); this.setEditNodeEvent(); this.setEditNodeStyles(this.propertyContent); this.loadPropertyTab(); this.loadMaplist(); this.loadStylesList(); this.loadDivTemplateType(); this.loadPersonInput(); this.loadFormFieldInput(); this.loadScriptArea(); this.loadHtmlEditorArea(); this.loadTreeData(); this.loadArrayList(); this.loadEventsEditor(); this.loadActionArea(); this.loadHTMLArea(); this.loadJSONArea(); this.loadFormSelect(); this.loadViewSelect(); this.loadValidation(); this.loadIconSelect(); this.loadImageClipper(); // this.loadScriptInput(); //MWF.process.widget.EventsEditor } }.bind(this)); }else{ this.propertyContent.setStyle("display", "block"); } (new Fx.Scroll(layout.desktop.node)).toTop(); }, hide: function(){ //this.JsonTemplate = null; //this.propertyNode.set("html", ""); if (this.propertyContent) this.propertyContent.setStyle("display", "none"); }, loadTreeData: function(){ var arrays = this.propertyContent.getElements(".MWFTreeData"); arrays.each(function(node){ var title = node.get("title"); var name = node.get("name"); var json = this.data[name]; if (!json) json = []; MWF.require("MWF.widget.TreeEditor", function(){ var treeEditor = new MWF.widget.TreeEditor(node, { "title": title, "maxObj": this.propertyNode.parentElement.parentElement.parentElement, "onChange": function(){ this.data[name] = treeEditor.toJson(); this.module.json[name] = this.data[name]; this.module._refreshTree(); }.bind(this) }); treeEditor.load(json); }.bind(this)); node.addEvent("keydown", function(e){e.stopPropagation();}); }.bind(this)); }, loadJSONArea: function(){ var jsonNode = this.propertyContent.getElement(".MWFJSONArea"); if (jsonNode){ this.propertyTab.pages.each(function(page){ if (page.contentNode == jsonNode.parentElement){ page.setOptions({ "onShow": function(){ jsonNode.empty(); MWF.require("MWF.widget.JsonParse", function(){ this.json = new MWF.widget.JsonParse(this.module.json, jsonNode, null); this.json.load(); }.bind(this)); }.bind(this) }); } }.bind(this)); } }, loadHTMLArea: function(){ var htmlNode = this.propertyContent.getElement(".MWFHTMLArea"); if (htmlNode){ var copy = this.module.node.clone(true, true); copy.clearStyles(true); htmlNode.set("text", copy.outerHTML); copy.destroy(); this.propertyTab.pages.each(function(page){ if (page.contentNode == htmlNode.parentElement){ page.setOptions({ "onShow": function(){ var copy = this.module.node.clone(true, true); copy.clearStyles(true); htmlNode.set("text", copy.outerHTML); copy.destroy(); }.bind(this) }); } }.bind(this)); } }, loadFormSelect: function(){ var formNodes = this.propertyContent.getElements(".MWFFormSelect"); if (formNodes.length){ this.getFormList(function(){ formNodes.each(function(node){ var select = new Element("select").inject(node); select.addEvent("change", function(e){ this.setValue(e.target.getParent("div").get("name"), e.target.options[e.target.selectedIndex].value); }.bind(this)); this.setFormSelectOptions(node, select); var refreshNode = new Element("div", {"styles": this.form.css.propertyRefreshFormNode}).inject(node); refreshNode.addEvent("click", function(e){ this.getFormList(function(){ this.setFormSelectOptions(node, select); }.bind(this), true); }.bind(this)); //select.addEvent("click", function(e){ // this.setFormSelectOptions(node, select); //}.bind(this)); }.bind(this)); }.bind(this)); } }, setFormSelectOptions: function(node, select){ var name = node.get("name"); select.empty(); var option = new Element("option", {"text": "none"}).inject(select); this.forms.each(function(form){ var option = new Element("option", { "text": form.name, "value": form.id, "selected": (this.data[name]==form.id) }).inject(select); }.bind(this)); }, getFormList: function(callback, refresh){ if (!this.forms || refresh){ this.form.designer.actions.listForm(this.form.designer.application.id, function(json){ this.forms = json.data; if (callback) callback(); }.bind(this)); }else{ if (callback) callback(); } }, // clearStyles: function(node){ // node.removeProperty("style"); // var subNode = node.getFirst(); // while (subNode){ // this.clearStyles(subNode); // subNode = subNode.getNext(); // } // }, loadViewSelect: function(){ var viewNodes = this.propertyContent.getElements(".MWFViewSelect"); if (viewNodes.length){ this.getViewList(function(){ viewNodes.each(function(node){ var select = new Element("select").inject(node); select.addEvent("change", function(e){ var viewId = e.target.options[e.target.selectedIndex].value; var viewName = e.target.options[e.target.selectedIndex].get("text"); this.setValue(e.target.getParent("div").get("name"), viewId); this.setValue(e.target.getParent("div").get("name")+"Name", viewName); }.bind(this)); this.setViewSelectOptions(node, select); var refreshNode = new Element("div", {"styles": this.form.css.propertyRefreshFormNode}).inject(node); refreshNode.addEvent("click", function(e){ this.getViewList(function(){ this.setViewSelectOptions(node, select); }.bind(this), true); }.bind(this)); //select.addEvent("click", function(e){ // this.setFormSelectOptions(node, select); //}.bind(this)); }.bind(this)); }.bind(this)); } }, setViewSelectOptions: function(node, select){ var name = node.get("name"); select.empty(); var option = new Element("option", {"text": "none"}).inject(select); this.views.each(function(view){ var option = new Element("option", { "text": view.name, "value": view.id, "selected": (this.data[name]==view.id) }).inject(select); }.bind(this)); }, getViewList: function(callback, refresh){ if (!this.views || refresh){ this.form.designer.actions.listView(this.form.designer.application.id, function(json){ this.views = json.data; if (callback) callback(); }.bind(this)); }else{ if (callback) callback(); } }, loadValidation: function(){ var nodes = this.propertyContent.getElements(".MWFValidation"); if (nodes.length){ nodes.each(function(node){ var name = node.get("name"); MWF.xDesktop.requireApp("process.FormDesigner", "widget.ValidationEditor", function(){ var validationEditor = new MWF.xApplication.process.FormDesigner.widget.ValidationEditor(node, this.designer, { "onChange": function(){ var data = validationEditor.getValidationData(); this.data[name] = data; }.bind(this) }); validationEditor.load(this.data[name]) }.bind(this)); //new MWF.xApplication.process.FormDesigner.widget.ValidationEditor(node, this.designer); }.bind(this)); } }, loadIconSelect: function(){ var nodes = this.propertyContent.getElements(".MWFIcon"); if (nodes.length){ nodes.each(function(node){ var id = node.get("name"); var icon = this.data[id]; var iconNode = new Element("div", {"styles": this.form.css.processIconNode}).inject(node); if (icon) iconNode.setStyles({"background": "url("+icon+") center center no-repeat"}); var selectNode = new Element("div", {"styles": this.form.css.processIconSelectNode, "text": this.form.designer.lp.selectIcon}).inject(node); selectNode.addEvent("click", function(){ this.selectIcon(node); }.bind(this)); }.bind(this)); } }, selectIcon: function(node){ if (!node.iconMenu){ var iconSelectMenu = new MWF.widget.Menu(node, {"event": "click", "style": "processIcon"}); iconSelectMenu.load(); node.iconMenu = iconSelectMenu; var _self = this; for (var i=0; i<=48; i++){ var icon = "/x_component_process_ProcessManager/$Explorer/default/processIcon/process_icon_"+i+".png"; var item = iconSelectMenu.addMenuItem("", "click", function(){ var id = node.get("name"); var src = this.item.getElement("img").get("src"); _self.data[id] = src; node.getFirst("div").setStyle("background-image", "url("+src+")"); }, icon); item.iconName = icon; } } }, loadImageClipper: function(){ var nodes = this.propertyContent.getElements(".MWFImageClipper"); if (nodes.length){ nodes.each(function(node){ var id = node.get("name"); var selectNode = new Element("div", {"styles": this.form.css.processIconSelectNode, "text": this.form.designer.lp.selectImage}).inject(node); selectNode.addEvent("click", function(){ this.selectImage(node, id); }.bind(this)); }.bind(this)); } }, selectImage: function(node, name){ MWF.xDesktop.requireApp("process.FormDesigner", "widget.ImageClipper", function(){ var size = this.module.node.getSize(); var image = new MWF.xApplication.process.FormDesigner.widget.ImageClipper(this.designer, { "title": this.form.designer.lp.selectImage, "width": (this.data.styles.width) ? size.x : 0, "height": (this.data.styles.height) ? size.y : 0, "onChange": function(){ debugger; var data = image.data; this.changeJsonDate(name, data); this.changeData(name, node, null); }.bind(this) }); image.load(this.data[name]) }.bind(this)); }, loadEventsEditor: function(){ var events = this.propertyContent.getElement(".MWFEventsArea"); if (events){ var name = events.get("name"); var eventsObj = this.data[name]; MWF.xDesktop.requireApp("process.FormDesigner", "widget.EventsEditor", function(){ var eventsEditor = new MWF.xApplication.process.FormDesigner.widget.EventsEditor(events, this.designer, { //"maxObj": this.propertyNode.parentElement.parentElement.parentElement, "maxObj": this.designer.formContentNode }); eventsEditor.load(eventsObj); }.bind(this)); } }, loadArrayList: function(){ var arrays = this.propertyContent.getElements(".MWFArraylist"); arrays.each(function(node){ var title = node.get("title"); var name = node.get("name"); var arr = this.data[name]; if (!arr) arr = []; MWF.require("MWF.widget.Arraylist", function(){ var arraylist = new MWF.widget.Arraylist(node, { "title": title, "onChange": function(){ this.data[name] = arraylist.toArray(); }.bind(this) }); arraylist.load(arr); }.bind(this)); node.addEvent("keydown", function(e){e.stopPropagation();}); }.bind(this)); }, loadHtmlEditorArea: function(){ var htmlAreas = this.propertyContent.getElements(".MWFHtmlEditorArea"); htmlAreas.each(function(node){ var title = node.get("title"); var name = node.get("name"); var scriptContent = this.data[name]; MWF.require("MWF.widget.HtmlEditorArea", function(){ var htmlArea = new MWF.widget.HtmlEditorArea(node, { "title": title, //"maxObj": this.propertyNode.parentElement.parentElement.parentElement, "maxObj": this.designer.formContentNode, "onChange": function(){ this.data[name] = htmlArea.getValue(); this.changeData(name); }.bind(this), "onSave": function(){ this.designer.saveForm(); }.bind(this) }); htmlArea.load({"code": scriptContent}); }.bind(this)); }.bind(this)); }, loadStylesList: function(){ var styleSelNodes = this.propertyContent.getElements(".MWFFormStyle"); styleSelNodes.each(function(node){ if (this.module.form.stylesList){ if (!this.data.formStyleType) this.data.formStyleType = "default"; Object.each(this.module.form.stylesList, function(s, key){ new Element("option", { "text": s.name, "value": key, "selected": ((!this.data.formStyleType && key=="default") || (this.data.formStyleType==key)) }).inject(node) }.bind(this)); }else{ node.getParent("tr").setStyle("display", "none"); } }.bind(this)); }, loadDivTemplateType: function(){ var nodes = this.propertyContent.getElements(".MWFDivTemplate"); if (nodes.length){ var keys = []; if (this.module.form.stylesList) { if (this.module.form.stylesList[this.module.form.json.formStyleType]){ var styles = this.module.form.stylesList[this.module.form.json.formStyleType][this.module.moduleName]; if (styles) { Object.each(styles, function (v, k) { keys.push(k); }.bind(this)); } } } nodes.each(function(node){ node.empty(); new Element("option", { "text": "default", "value": "default", "selected": (!this.data.templateType || this.data.templateType=="default") }).inject(node); if (keys.length){ keys.each(function(k){ new Element("option", { "text": styles[k].name, "value": k, "selected": (this.data.templateType==k) }).inject(node) }.bind(this)); }else{ node.getParent("tr").setStyle("display", "none"); } }.bind(this)); } }, loadPersonInput: function(){ var personIdentityNodes = this.propertyContent.getElements(".MWFPersonIdentity"); var personDepartmentNodes = this.propertyContent.getElements(".MWFPersonDepartment"); var personCompanyNodes = this.propertyContent.getElements(".MWFPersonCompany"); var dutyNodes = this.propertyContent.getElements(".MWFDutySelector"); MWF.xDesktop.requireApp("process.ProcessDesigner", "widget.PersonSelector", function(){ personIdentityNodes.each(function(node){ new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.form.designer, { "type": "identity", "names": this.data[node.get("name")], "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) }); }.bind(this)); personDepartmentNodes.each(function(node){ new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.form.designer, { "type": "department", "names": this.data[node.get("name")], "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) }); }.bind(this)); personCompanyNodes.each(function(node){ new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.form.designer, { "type": "company", "names": this.data[node.get("name")], "onChange": function(ids){this.savePersonItem(node, ids);}.bind(this) }); }.bind(this)); dutyNodes.each(function(node){ new MWF.xApplication.process.ProcessDesigner.widget.PersonSelector(node, this.form.designer, { "type": "duty", "names": this.data[node.get("name")], "onChange": function(ids){this.addDutyItem(node, ids);}.bind(this), "onRemoveDuty": function(item){this.removeDutyItem(node, item);}.bind(this) }); }.bind(this)); }.bind(this)); }, removeDutyItem: function(node, item){ if (item.data.id){ var values = this.data[node.get("name")] || []; var value = values.filter(function(v){ return v.id == item.data.id; }); value.each(function(v) { values = values.erase(v); }); this.data[node.get("name")] = values; } item.node.destroy(); MWF.release(item); delete item; }, addDutyItem: function(node, ids){ var value = this.data[node.get("name")] || ""; if (!value) value = "[]"; var values = JSON.decode(value); ids.each(function(id){ if (id.data.id){ for (var i=0; i