MWF.xApplication.process.ProcessDesigner.widget = MWF.xApplication.process.ProcessDesigner.widget || {};
MWF.xDesktop.requireApp("process.ProcessDesigner", "widget.ScriptText",null,false);
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor = new Class({
Implements: [Options, Events],
Extends: MWF.widget.Common,
options: {
"style": "default"
},
initialize: function(node, text, options){
this.setOptions(options);
this.node = $(node);
this.data = (text) ? JSON.decode(text) : [];
this.name = node.get("name");
this.path = "../x_component_process_ProcessDesigner/widget/$SerialEditor/";
this.cssPath = "../x_component_process_ProcessDesigner/widget/$SerialEditor/"+this.options.style+"/css.wcss";
this._loadCss();
this.selectedItems = [];
this.items = {};
},
load: function(){
this.titleNode = new Element("div", {"styles": this.css.titleNode}).inject(this.node);
this.titleNode.set("text", MWF.xApplication.process.ProcessDesigner.LP.serialSelectTitle);
this.selectNode = new Element("div", {"styles": this.css.selectNode}).inject(this.node);
this.downNode = new Element("div", {"styles": this.css.downNode}).inject(this.node);
this.previewNode = new Element("div", {"styles": this.css.previewNode}).inject(this.node);
this.showNode = new Element("div", {"styles": this.css.showNode}).inject(this.node);
this.propertyNode = new Element("div", {"styles": this.css.propertyNode}).inject(this.node);
this.loadSelectNode();
// this.loadSerialActivity();
},
loadSelectNode: function(){
this.getSerialRule(function(){
this.loadSelectNodeItems();
this.loadSelectedNodeItems();
}.bind(this));
},
loadSelectedNodeItems: function(){
this.data.each(function(itemData){
this.selectedItems.push(new MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem[itemData.key.capitalize()](this.items[itemData.key], itemData));
}.bind(this));
this.fireEvent("change");
},
loadSelectNodeItems: function(){
Object.each(this.serialRuleJson, function(v, k){
this.loadSelectNodeItem(v, k);
}.bind(this));
},
loadSelectNodeItem: function(v, k){
this.items[k] = new MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.Item(v, k, this);
},
getSerialRule: function(callback){
if (!this.serialRuleJson){
var serialConifgUrl = "../x_component_process_ProcessDesigner/$Process/serialRule.json";
MWF.getJSON(serialConifgUrl, function(json){
this.serialRuleJson = json;
if (callback) callback();
}.bind(this));
}else{
if (callback) callback();
}
},
getData: function(){
var data = [];
this.selectedItems.each(function(item){
data.push(item.getData());
});
this.data = data;
return data;
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.Item = new Class({
initialize: function(value, key, editor){
this.editor = editor;
this.json = value;
this.key = key;
this.css = this.editor.css;
this.load();
},
load: function(){
this.node = new Element("div", {"styles": this.css.itemNode}).inject(this.editor.selectNode);
this.iconNode = new Element("div", {"styles": this.css.itemIconNode}).inject(this.node);
this.textNode = new Element("div", {"styles": this.css.itemTextNode}).inject(this.node);
this.textNode.set({
"text": this.json.text,
"title": this.json.description
});
this.node.addEvents({
"mouseover": function(){this.node.setStyles(this.css.itemNode_over); this.iconNode.setStyles(this.css.itemIconNode_over);}.bind(this),
"mouseout": function(){this.node.setStyles(this.css.itemNode); this.iconNode.setStyles(this.css.itemIconNode);}.bind(this),
"click": function(){this.selectNumberItem();}.bind(this)
});
},
selectNumberItem: function(){
this.editor.selectedItems.push(new MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem[this.key.capitalize()](this));
this.editor.fireEvent("change");
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem = new Class({
initialize: function(item, itemData){
this.item = item;
this.json = item.json;
this.key = item.key;
this.editor = item.editor;
this.css = this.editor.css;
this.data = itemData;
this.load();
},
load: function(){
this.node = new Element("div", {"styles": this.css.selectedItemNode}).inject(this.editor.showNode);
this.textNode = new Element("div", {"styles": this.css.selectedItemTextNode}).inject(this.node);
this.textNode.set({
"text": this.json.text,
"title": this.json.description
});
this.node.addEvents({
"mouseover": function(){
if (this.editor.currentItem!=this) this.node.setStyles(this.css.selectedItemNode_over);
}.bind(this),
"mouseout": function(){
if (this.editor.currentItem!=this) this.node.setStyles(this.css.selectedItemNode);
}.bind(this),
"click": function(){this.selectItem();}.bind(this)
});
this.closeNode = new Element("div", {"styles": this.css.selectedItemCloseNode}).inject(this.node);
this.closeNode.addEvent("click", function(){
this.deleteItem();
}.bind(this));
this.loadProperty();
this.selectItem();
},
loadProperty: function(){},
deleteItem: function(){
this.node.destroy();
if (this.propertyNode) this.propertyNode.destroy();
this.editor.selectedItems.erase(this);
if (this.editor.currentItem === this) this.editor.currentItem = null;
this.editor.fireEvent("change");
MWF.release(this);
},
selectItem: function(){
if (this.editor.currentItem) this.editor.currentItem.unSelectItem();
if (this.propertyNode){
this.propertyNode.setStyle("display", "block");
if (this.key==="number"){
this.loadNumberBy();
}
}
this.node.setStyles(this.css.selectedItemNode_check);
this.editor.currentItem = this;
},
unSelectItem: function(){
this.node.setStyles(this.css.selectedItemNode);
if (this.propertyNode) this.propertyNode.setStyle("display", "none");
this.editor.currentItem = null;
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Text = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem,
loadProperty: function(){
this.propertyNode = new Element("div", {"styles": this.css.itemPropertyNode}).inject(this.editor.propertyNode);
this.propertyTitleNode = new Element("div", {"styles": this.css.propertyTitleNode}).inject(this.propertyNode);
this.propertyTitleNode.set("text", MWF.xApplication.process.ProcessDesigner.LP.serialTextTitle);
this.propertyInputDivNode = new Element("div", {"styles": this.css.propertyInputDivNode}).inject(this.propertyNode);
this.propertyInputNode = new Element("input", {
"type": "text",
"value": (this.data) ? this.data.value: "",
"styles": this.css.propertyInputNode
}).inject(this.propertyInputDivNode);
this.changeText();
this.propertyInputNode.addEvents({
"change": function(){
this.changeText();
}.bind(this),
"blur": function(){},
});
},
changeText: function(){
var value = this.propertyInputNode.get("value");
if (value){
this.textNode.set("text", "\""+value+"\"");
}else{
this.textNode.set("text", this.json.text);
}
this.editor.fireEvent("change");
},
getData: function(){
var value = this.propertyInputNode.get("value");
var key = this.key;
var script = "return serial.text(\""+value+"\")";
return {
"key": key,
"value": value,
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Year = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem,
loadProperty: function(){
this.value = "created";
var i = Math.random();
this.propertyNode = new Element("div", {"styles": this.css.itemPropertyNode}).inject(this.editor.propertyNode);
var propertyTitleNode = new Element("div", {"styles": this.css.propertyTitleNode}).inject(this.propertyNode);
propertyTitleNode.set("text", MWF.xApplication.process.ProcessDesigner.LP.serialDateTitle);
var propertyInputDivNode = new Element("div", {"styles": this.css.propertyInputDivNode}).inject(this.propertyNode);
var v = (this.data) ? this.data.value: "created";
html = "" + MWF.xApplication.process.ProcessDesigner.LP.serialCreatedDateTitle;
html += "" + MWF.xApplication.process.ProcessDesigner.LP.serialCurrentDateTitle;
propertyInputDivNode.set("html", html);
this.changeText((this.data) ? this.data.value: "created");
propertyInputDivNode.getElements("input").addEvent("click", function(e){
if (e.target.checked){
var v = e.target.get("value");
this.changeText(v);
}
}.bind(this));
},
changeText: function(v){
var text = MWF.xApplication.process.ProcessDesigner.LP.serialCreated;
if (v=="current"){
text = MWF.xApplication.process.ProcessDesigner.LP.serialCurrent;
}
this.value = v;
this.textNode.set("text", this.json.text+"("+text+")");
this.editor.fireEvent("change");
},
getData: function(){
var key = this.key;
var f = (this.value=="current") ? "year" : "createYear";
var script = "return serial."+f+"(\"yyyy\")";
return {
"key": key,
"value": this.value,
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Month = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Year,
getData: function(){
var key = this.key;
var f = (this.value=="current") ? "month" : "createMonth";
var script = "return serial."+f+"(\"MM\")";
return {
"key": key,
"value": this.value,
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Day = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Year,
getData: function(){
var key = this.key;
var f = (this.value=="current") ? "day" : "createDay";
var script = "return serial."+f+"(\"dd\")";
return {
"key": key,
"value": this.value,
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Company = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem,
getData: function(){
var key = this.key;
var script = "return serial.company()";
return {
"key": key,
"value": "",
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Department = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem,
getData: function(){
var key = this.key;
var script = "return serial.department()";
return {
"key": key,
"value": "",
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.CompanyAttribute = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem,
loadProperty: function(){
this.propertyNode = new Element("div", {"styles": this.css.itemPropertyNode}).inject(this.editor.propertyNode);
this.propertyTitleNode = new Element("div", {"styles": this.css.propertyTitleNode}).inject(this.propertyNode);
this.propertyTitleNode.set("text", MWF.xApplication.process.ProcessDesigner.LP.serialAttributeTitle);
this.propertyInputDivNode = new Element("div", {"styles": this.css.propertyInputDivNode}).inject(this.propertyNode);
this.propertyInputNode = new Element("input", {
"type": "text",
"value": (this.data) ? this.data.value: "",
"styles": this.css.propertyInputNode
}).inject(this.propertyInputDivNode);
this.changeText();
this.propertyInputNode.addEvents({
"change": function(){
this.changeText();
}.bind(this),
"blur": function(){},
});
},
changeText: function(){
var value = this.propertyInputNode.get("value");
if (value){
this.textNode.set("text", this.json.text+"("+value+")");
}else{
this.textNode.set("text", this.json.text);
}
this.editor.fireEvent("change");
},
getData: function(){
var value = this.propertyInputNode.get("value");
var key = this.key;
var script = "return serial.companyAttribute(\""+value+"\")";
return {
"key": key,
"value": value,
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.DepartmentAttribute = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.CompanyAttribute,
getData: function(){
var value = this.propertyInputNode.get("value");
var key = this.key;
var script = "return serial.departmentAttribute(\""+value+"\")";
return {
"key": key,
"value": value,
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Number = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem,
loadProperty: function(){
this.propertyNode = new Element("div", {"styles": this.css.itemPropertyNode}).inject(this.editor.propertyNode);
var lineNode = new Element("div", {"styles": this.css.lineNode}).inject(this.propertyNode);
var propertyTitleNode = new Element("div", {"styles": this.css.propertyTitleNode}).inject(lineNode);
propertyTitleNode.set("text", MWF.xApplication.process.ProcessDesigner.LP.serialNumberByTitle);
this.propertyNumberByDivNode = new Element("div", {"styles": this.css.propertyInputDivNode}).inject(lineNode);
this.loadNumberBy();
lineNode = new Element("div", {"styles": this.css.lineNode}).inject(this.propertyNode);
propertyTitleNode = new Element("div", {"styles": this.css.propertyTitleNode}).inject(lineNode);
propertyTitleNode.set("text", MWF.xApplication.process.ProcessDesigner.LP.serialNumberLongTitle);
this.propertyInputDivNode = new Element("div", {"styles": this.css.propertyInputDivNode}).inject(lineNode);
this.propertyInputNode = new Element("select").inject(this.propertyInputDivNode);
var value = (this.data) ? this.data.value: {};
var numberLong = value.lng || 0;
var optionsHtml = "";
optionsHtml += "";
optionsHtml += "";
optionsHtml += "";
optionsHtml += "";
optionsHtml += "";
optionsHtml += "";
optionsHtml += "";
optionsHtml += "";
this.propertyInputNode.set("html", optionsHtml);
this.propertyInputNode.addEvents({
"change": function(){
this.editor.fireEvent("change");
}.bind(this)
});
},
loadNumberBy: function(){
this.propertyNumberByDivNode.empty();
var i = Math.random();
var value = (this.data) ? this.data.value: {};
var numberBy = value.by || [];
var html = "";
this.editor.selectedItems.each(function(item, n){
if (item.key!="number"){
var check = (numberBy.indexOf(n)==-1)? "" : "checked"
html += "" + item.json.text;
}
});
this.propertyNumberByDivNode.set("html", html);
this.propertyNumberByDivNode.getElements("input").addEvent("click", function(e){
this.editor.fireEvent("change");
}.bind(this));
},
getData: function(){
var numberLong = this.propertyInputNode.options[this.propertyInputNode.selectedIndex].value;
var numberBy = [];
var inputs = this.propertyNumberByDivNode.getElements("input");
inputs.each(function(input){
if (input.checked) numberBy.push(input.get("value").toInt());
}.bind(this));
var value = {"lng": numberLong, "by": numberBy};
var code = "return serial.nextSerialNumber("+JSON.encode(numberBy)+", "+numberLong+")"
return {
"key": this.key,
"value": value,
"script": code
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Script = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem,
loadProperty: function(){
debugger;
this.code = (this.data) ? this.data.value: "";
this.propertyNode = new Element("div", {"styles": this.css.itemPropertyNode}).inject(this.editor.propertyNode);
this.scriptNode = new Element("div", {"styles": this.css.scriptNode}).inject(this.propertyNode);
this.scriptNode.set("title", MWF.xApplication.process.ProcessDesigner.LP.serialScriptTitle);
this.scriptArea = new MWF.xApplication.process.ProcessDesigner.widget.ScriptText(this.scriptNode, (this.data) ? this.data.value: "", this.editor.process.designer, {
"maskNode": this.editor.process.designer.content,
"maxObj": this.editor.process.designer.paperNode,
"onChange": function(code){
this.code = code;
this.editor.fireEvent("change");
}.bind(this)
});
},
getData: function(){
var value = this.code;
var key = this.key;
return {
"key": key,
"value": value,
"script": value
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Unit = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem,
getData: function(){
var key = this.key;
var script = "return serial.unit()";
return {
"key": key,
"value": "",
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.Unit = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem,
getData: function(){
var key = this.key;
var script = "return serial.unit()";
return {
"key": key,
"value": "",
"script": script
}
}
});
MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.UnitAttribute = new Class({
Extends: MWF.xApplication.process.ProcessDesigner.widget.SerialEditor.SelectedItem.CompanyAttribute,
getData: function(){
var value = this.propertyInputNode.get("value");
var key = this.key;
var script = "return serial.unitAttribute(\""+value+"\")";
return {
"key": key,
"value": value,
"script": script
}
}
});