MWF.xApplication.process.Xform.widget = MWF.xApplication.process.Xform.widget || {}; MWF.require("MWF.widget.Common", null, false); MWF.xApplication.process.Xform.widget.View = new Class({ Implements: [Options, Events], Extends: MWF.widget.Common, options: { "style": "default" }, initialize: function(container, json, options){ this.setOptions(options); this.path = "/x_component_process_Xform/widget/$View/"; this.cssPath = "/x_component_process_Xform/widget/$View/"+this.options.style+"/css.wcss"; this._loadCss(); this.container = $(container); this.items = []; this.selectedItems = []; this.json = json; this.viewJson = null; this.gridJson = null; this.load(); }, load: function(){ debugger; this.container.empty(); this.container.setStyles(this.css.viewNode); this.createViewNode(); }, createViewNode: function(){ this.viewTable = new Element("table", { "styles": this.css.viewTitleTableNode, "border": "0px", "cellPadding": "0", "cellSpacing": "0" }).inject(this.container); this.loadingAreaNode = new Element("div", {"styles": this.css.viewLoadingAreaNode}).inject(this.container); new Element("div", {"styles": {"height": "5px"}}).inject(this.loadingAreaNode); var loadingNode = new Element("div", {"styles": this.css.viewLoadingNode}).inject(this.loadingAreaNode); new Element("div", {"styles": this.css.viewLoadingIconNode}).inject(loadingNode); var loadingTextNode = new Element("div", {"styles": this.css.viewLoadingTextNode}).inject(loadingNode); loadingTextNode.set("text", "loading..."); if (this.json.isTitle!="no"){ this.viewTitleLine = new Element("tr", {"styles": this.css.viewTitleLineNode}).inject(this.viewTable); //if (this.json.select!="no"){ this.selectTitleCell = new Element("td", { "styles": this.css.viewTitleCellNode }).inject(this.viewTitleLine); this.selectTitleCell.setStyle("width", "10px"); if (this.json.titleStyles) this.selectTitleCell.setStyles(this.json.titleStyles); //} this.getView(function(){ this.viewJson.selectEntryList.each(function(column){ //if (column.export){ var viewCell = new Element("td", { "styles": this.css.viewTitleCellNode, "text": column.displayName }).inject(this.viewTitleLine); if (this.json.titleStyles) viewCell.setStyles(this.json.titleStyles); //} }.bind(this)); this.lookup(); }.bind(this)); }else{ this.getView(function(){ this.lookup(); }.bind(this)); //this.lookup(); } }, lookup: function(){ this.getLookupAction(function(){ if (this.json.application){ this.lookupAction.invoke({"name": "lookup","async": true, "parameter": {"view": this.json.viewName, "application": this.json.application},"success": function(json){ if (this.viewJson.groupEntry.column){ this.gridJson = json.data.groupGrid; this.loadGroupData(); }else{ this.gridJson = json.data.grid; this.loadData(); } if (this.loadingAreaNode){ this.loadingAreaNode.destroy(); this.loadingAreaNode = null; } //if (json.data.length){ // json.data.each(function(line, idx){ // this.items.push(new MWF.xApplication.process.Xform.widget.View.Item(this, line)); // }.bind(this)); //} }.bind(this)}); }else{ //this.lookupAction.invoke({"name": "lookup","async": true, "parameter": {"id": this.json.view},"success": function(json){ // if (json.data.length){ // json.data.each(function(line, idx){ // this.items.push(new MWF.xApplication.process.Xform.widget.View.Item(this, line)); // }.bind(this)); // } //}.bind(this)}); } }.bind(this)); }, loadData: function(){ if (this.gridJson.length){ this.gridJson.each(function(line, idx){ this.items.push(new MWF.xApplication.process.Xform.widget.View.Item(this, line)); }.bind(this)); } }, loadGroupData: function(){ if (this.selectTitleCell){ this.selectTitleCell.set("html", ""+""+""); this.selectTitleCell.setStyle("cursor", "pointer"); this.selectTitleCell.addEvent("click", this.expandOrCollapseAll.bind(this)); } if (this.gridJson.length){ this.gridJson.each(function(data, idx){ this.items.push(new MWF.xApplication.process.Xform.widget.View.ItemCategory(this, data)); }.bind(this)); } }, expandOrCollapseAll: function(){ var icon = this.selectTitleCell.getElement("span"); if (icon.get("html").indexOf("right.png")==-1){ this.items.each(function(item){ item.collapse(); icon.set("html", ""); }.bind(this)); }else{ this.items.each(function(item, i){ window.setTimeout(function(){ item.expand(); }.bind(this), 10*i+5); icon.set("html", ""); }.bind(this)); } }, getView: function(callback){ this.getLookupAction(function(){ if (this.json.application){ this.lookupAction.invoke({"name": "getView","async": true, "parameter": {"view": this.json.viewName, "application": this.json.application},"success": function(json){ this.viewJson = JSON.decode(json.data.data); //var viewData = JSON.decode(json.data.data); if (callback) callback(); }.bind(this)}); }else{ //this.lookupAction.invoke({"name": "getView","async": true, "parameter": {"id": this.json.view},"success": function(json){ // var viewData = JSON.decode(json.data.data); // viewData.columnList.each(function(column){ // if (column.export){ // var viewCell = new Element("td", { // "styles": this.css.viewTitleCellNode, // "text": column.text // }).inject(this.viewTitleLine); // if (this.json.titleStyles) viewCell.setStyles(this.json.titleStyles); // } // }.bind(this)); // // if (callback) callback(); //}.bind(this)}); } }.bind(this)); }, getLookupAction: function(callback){ if (!this.lookupAction){ MWF.require("MWF.xDesktop.Actions.RestActions", function(){ this.lookupAction = new MWF.xDesktop.Actions.RestActions("", "x_processplatform_assemble_surface", ""); this.lookupAction.getActions = function(actionCallback){ this.actions = { //"lookup": {"uri": "/jaxrs/view/{id}"}, //"lookupName": {"uri": "/jaxrs/view/flag/{view}/application/flag/{application}"}, //"getView": {"uri": "/jaxrs/view/{id}/design"}, //"getViewName": {"uri": "/jaxrs/view/flag/{view}/application/flag/{application}/design"} //"lookup": {"uri": "/jaxrs/view/{id}"}, "lookup": {"uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}/execute", "method":"PUT"}, "getView": {"uri": "/jaxrs/queryview/flag/{view}/application/flag/{application}"} //"getViewName": {"uri": "/jaxrs/view/flag/{view}/application/flag/{application}/design"} }; if (actionCallback) actionCallback(); } if (callback) callback(); }.bind(this)); }else{ if (callback) callback(); } }, getData: function(){ if (this.selectedItems.length){ var arr = []; this.selectedItems.each(function(item){ arr.push(item.data); }); return arr; }else{ return []; } } }); MWF.xApplication.process.Xform.widget.View.Item = new Class({ initialize: function(view, data, prev){ this.view = view; this.data = data; this.css = this.view.css; this.isSelected = false; this.prev = prev; this.load(); }, load: function(){ this.node = new Element("tr", {"styles": this.css.viewContentTrNode}); if (this.prev){ this.node.inject(this.prev.node, "after"); }else{ this.node.inject(this.view.viewTable); } //if (this.view.json.select!="no"){ this.selectTd = new Element("td", {"styles": this.css.viewContentTdNode}).inject(this.node); //if (this.view.json.itemStyles) this.selectTd.setStyles(this.view.json.itemStyles); this.selectTd.setStyles({"cursor": "pointer"}); if (this.view.json.itemStyles) this.selectTd.setStyles(this.view.json.itemStyles); //} Object.each(this.data.data, function(cell, k){ var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(this.node); if (k!= this.view.viewJson.groupEntry.column) td.set("text", cell); if (this.view.json.itemStyles) td.setStyles(this.view.json.itemStyles); }.bind(this)); //this.data.each(function(cell, i){ // var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(this.node); // td.set("text", cell); // //if (this.view.json.itemStyles) td.setStyles(this.view.json.itemStyles); //}.bind(this)); this.setEvent(); }, setEvent: function(){ if (this.view.json.select!="no"){ this.node.addEvents({ "mouseover": function(){ if (!this.isSelected){ var iconName = "checkbox"; if (this.view.json.select=="single") iconName = "radiobox"; this.selectTd.setStyles({"background": "url("+"/x_component_process_Xform/$Form/default/icon/"+iconName+".png) center center no-repeat"}); } }.bind(this), "mouseout": function(){ if (!this.isSelected) this.selectTd.setStyles({"background": "transparent"}); }.bind(this), "click": function(){this.select();}.bind(this) }); } }, select: function(){ if (this.isSelected){ if (this.view.json.select=="single"){ this.unSelectedSingle(); }else{ this.unSelected(); } }else{ if (this.view.json.select=="single"){ this.selectedSingle(); }else{ this.selected(); } } this.view.fireEvent("select"); }, selected: function(){ this.view.selectedItems.push(this); this.selectTd.setStyles({"background": "url("+"/x_component_process_Xform/$Form/default/icon/checkbox_checked.png) center center no-repeat"}); this.node.setStyles(this.css.viewContentTrNode_selected); this.isSelected = true; }, unSelected: function(){ this.view.selectedItems.erase(this); this.selectTd.setStyles({"background": "transparent"}); this.node.setStyles(this.css.viewContentTrNode); this.isSelected = false; }, selectedSingle: function(){ if (this.view.currentSelectedItem) this.view.currentSelectedItem.unSelectedSingle(); this.view.selectedItems = [this]; this.view.currentSelectedItem = this; this.selectTd.setStyles({"background": "url("+"/x_component_process_Xform/$Form/default/icon/radiobox_checked.png) center center no-repeat"}); this.node.setStyles(this.css.viewContentTrNode_selected); this.isSelected = true; }, unSelectedSingle: function(){ this.view.selectedItems = []; this.view.currentSelectedItem = null; this.selectTd.setStyles({"background": "transparent"}); this.node.setStyles(this.css.viewContentTrNode); this.isSelected = false; } }); MWF.xApplication.process.Xform.widget.View.ItemCategory = new Class({ initialize: function(view, data){ this.view = view; this.data = data; this.css = this.view.css; this.items = []; this.loadChild = false; this.load(); }, load: function(){ this.node = new Element("tr", {"styles": this.css.viewContentTrNode}).inject(this.view.viewTable); //if (this.view.json.select!="no"){ this.selectTd = new Element("td", {"styles": this.css.viewContentCategoryTdNode}).inject(this.node); if (this.view.json.itemStyles) this.selectTd.setStyles(this.view.json.itemStyles); //} this.categoryTd = new Element("td", { "styles": this.css.viewContentCategoryTdNode, "colspan": this.view.viewJson.selectEntryList.length }).inject(this.node); //this.categoryIconNode = new Element("div", {"styles": this.css.viewContentCategoryIconNode}).inject(this.categoryTd); this.categoryTd.set("html", " "+this.data.group); if (this.view.json.itemStyles) this.categoryTd.setStyles(this.view.json.itemStyles); //this.data.list.each(function(line){ // this.items.push(new MWF.xApplication.process.Xform.widget.View.Item(this.view, line)); //}.bind(this)); this.setEvent(); }, setEvent: function(){ if (this.selectTd){ this.node.addEvents({ //"mouseover": function(){ // if (!this.isSelected){ // var iconName = "checkbox"; // if (this.view.json.select=="single") iconName = "radiobox"; // this.selectTd.setStyles({"background": "url("+"/x_component_process_Xform/$Form/default/icon/"+iconName+".png) center center no-repeat"}); // } //}.bind(this), //"mouseout": function(){ // if (!this.isSelected) this.selectTd.setStyles({"background": "transparent"}); //}.bind(this), "click": function(){this.expandOrCollapse();}.bind(this) }); } }, expandOrCollapse: function(){ var t = this.node.getElement("span").get("html"); if (t.indexOf("right.png")==-1){ this.collapse(); }else{ this.expand(); } }, collapse: function(){ this.items.each(function(item){ item.node.setStyle("display", "none"); }.bind(this)); this.node.getElement("span").set("html", ""); }, expand: function(){ this.items.each(function(item){ item.node.setStyle("display", "table-row"); }.bind(this)); this.node.getElement("span").set("html", ""); if (!this.loadChild){ //window.setTimeout(function(){ this.data.list.each(function(line){ this.items.push(new MWF.xApplication.process.Xform.widget.View.Item(this.view, line, this)); }.bind(this)); this.loadChild = true; //}.bind(this), 10); } } });