ViewExplorer.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. MWF.require("MWF.widget.Mask", null, false);
  2. MWF.xDesktop.requireApp("process.Application", "WorkExplorer", null, false);
  3. MWF.xApplication.process.Application.ViewExplorer = new Class({
  4. Extends: MWF.xApplication.process.Application.WorkExplorer,
  5. Implements: [Options, Events],
  6. initialize: function(node, actions, options){
  7. this.setOptions(options);
  8. this.setTooltip();
  9. this.path = "/x_component_process_Application/$WorkExplorer/";
  10. this.cssPath = "/x_component_process_Application/$WorkExplorer/"+this.options.style+"/css.wcss";
  11. this._loadCss();
  12. this.actions = actions;
  13. this.node = $(node);
  14. this.items=[];
  15. },
  16. load: function(){
  17. if (!this.actions){
  18. MWF.xDesktop.requireApp("process.Application", "Actions.RestActions", function(){
  19. this.actions = new MWF.xApplication.process.Application.Actions.RestActions();
  20. this.loadToolbar();
  21. this.loadFilterNode();
  22. //this.loadFilterConditionNode();
  23. this.loadContentNode();
  24. this.setNodeScroll();
  25. }.bind(this));
  26. }else{
  27. this.loadToolbar();
  28. this.loadFilterNode();
  29. //this.loadFilterConditionNode();
  30. this.loadContentNode();
  31. this.setNodeScroll();
  32. }
  33. this.mask = new MWF.widget.Mask({"style": "desktop"});
  34. this.mask.loadNode(this.node);
  35. //this.loadElementList();
  36. },
  37. createWorkListHead: function(){},
  38. setContentSize: function(){
  39. var toolbarSize = this.toolbarNode.getSize();
  40. var nodeSize = this.node.getSize();
  41. var pt = this.elementContentNode.getStyle("padding-top").toFloat();
  42. var pb = this.elementContentNode.getStyle("padding-bottom").toFloat();
  43. var filterSize = this.filterNode.getSize();
  44. var height = nodeSize.y-toolbarSize.y-pt-pb-filterSize.y;
  45. this.elementContentNode.setStyle("height", ""+height+"px");
  46. this.pageCount = (height/40).toInt()+5;
  47. },
  48. createSearchElementNode: function(){
  49. return false;
  50. },
  51. loadFilterNode: function(){
  52. this.filterNode = new Element("div", {"styles": this.css.filterNode}).inject(this.node);
  53. this.filterNode.setStyle("padding", "0px 10px");
  54. //this.filterProcessAreaNode = new Element("div", {"styles": this.css.filterProcessAreaNode}).inject(this.filterNode);
  55. //this.filterProcessListNode = new Element("div", {"styles": this.css.filterProcessListNode}).inject(this.filterProcessAreaNode);
  56. this.loadViewList();
  57. },
  58. loadViewList: function(){
  59. this.actions.listView(this.app.options.id, function(json){
  60. if (json.data.length){
  61. json.data.each(function(process){
  62. this.loadViewListNode(process);
  63. }.bind(this));
  64. if (this.mask){
  65. this.mask.hide();
  66. this.mask = null;
  67. }
  68. if (this.currentView){
  69. this.currentView.click();
  70. }else{
  71. this.items[0].click();
  72. }
  73. }else{
  74. this.filterNode.destroy();
  75. var noElementNode = new Element("div", {
  76. "styles": this.css.noElementNode,
  77. "text": this.app.lp.noView
  78. }).inject(this.elementContentListNode);
  79. if (this.mask){
  80. this.mask.hide();
  81. this.mask = null;
  82. }
  83. }
  84. }.bind(this));
  85. },
  86. loadViewListNode: function(view){
  87. var viewNode = new Element("div", {"styles": this.css.filterViewNode}).inject(this.filterNode);
  88. viewNode.set("text", view.name);
  89. viewNode.store("view", view);
  90. this.items.push(viewNode);
  91. if (this.app.status.viewName){
  92. if (view.name == this.app.status.viewName) this.currentView = viewNode;
  93. }
  94. var _self = this;
  95. viewNode.addEvent("click", function(){
  96. _self.loadViewData(this);
  97. });
  98. viewNode.makeLnk({
  99. "par": this._getLnkPar(view)
  100. });
  101. },
  102. _getLnkPar: function(view){
  103. return {
  104. "icon": this.path+this.options.style+"/viewIcon/lnk.png",
  105. "title": view.name,
  106. "par": "process.Application#{\"navi\": 2, \"id\": \""+this.app.options.id+"\", \"viewName\": \""+view.name+"\", \"hideMenu\": true}"
  107. };
  108. },
  109. loadViewData: function(node){
  110. if (!this.mask){
  111. this.mask = new MWF.widget.Mask({"style": "desktop"});
  112. this.mask.loadNode(this.node);
  113. }
  114. this.items.each(function(item){
  115. item.setStyles(this.css.filterViewNode);
  116. }.bind(this));
  117. node.setStyles(this.css.filterViewNode_current);
  118. var view = node.retrieve("view");
  119. this.actions.loadView(function(json){
  120. this.showViewData(json.data);
  121. if (this.mask){
  122. this.mask.hide();
  123. this.mask = null;
  124. }
  125. }.bind(this), null, view.id, this.app.options.id);
  126. },
  127. showViewData: function(data){
  128. this.elementContentListNode.empty();
  129. this.viewTable = null;
  130. this.loadViewDataTitle(data.selectEntryList);
  131. this.loadViewDataLine(data);
  132. },
  133. loadViewDataTitle: function(titleList){
  134. this.viewTable = new Element("table", {
  135. "styles": this.css.viewTableNode,
  136. "width": "100%",
  137. "border": "0",
  138. "cellPadding": "0",
  139. "cellSpacing": "0"
  140. }).inject(this.elementContentListNode);
  141. this.viewHeadTr = new Element("tr").inject(this.viewTable);
  142. titleList.each(function(title){
  143. var th = new Element("th", {
  144. "styles": this.css.viewHeadTh,
  145. "text": title.displayName
  146. }).inject(this.viewHeadTr);
  147. }.bind(this));
  148. },
  149. loadViewDataLine: function(data){
  150. if ((data.groupEntry) && (data.groupEntry.column)){
  151. if (data.groupGrid.length){
  152. data.groupGrid.each(function(line, idx){
  153. var groupTr = new Element("tr", {"styles": this.css.viewContentTrNode}).inject(this.viewTable);
  154. var colSpan = data.selectEntryList.length;
  155. var td = new Element("td", {"styles": this.css.viewContentGroupTdNode, "colSpan": colSpan}).inject(groupTr);
  156. var groupAreaNode = new Element("div", {"styles": this.css.viewContentTdGroupNode}).inject(td);
  157. var groupIconNode = new Element("div", {"styles": this.css.viewContentTdGroupIconNode}).inject(groupAreaNode);
  158. var groupTextNode = new Element("div", {"styles": this.css.viewContentTdGroupTextNode}).inject(groupAreaNode);
  159. groupTextNode.set("text", line.group);
  160. var subtrs = [];
  161. line.list.each(function(entry){
  162. var tr = new Element("tr", {"styles": this.css.viewContentTrNode}).inject(this.viewTable);
  163. tr.setStyle("display", "none")
  164. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(tr);
  165. Object.each(entry.data, function(d, k){
  166. if (k!=data.groupEntry.column){
  167. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(tr);
  168. td.set("text", d);
  169. }
  170. }.bind(this));
  171. subtrs.push(tr)
  172. }.bind(this));
  173. groupAreaNode.store("subtrs", subtrs);
  174. var _self = this;
  175. groupAreaNode.addEvent("click", function(){
  176. var subtrs = this.retrieve("subtrs");
  177. var iconNode = groupAreaNode.getFirst("div");
  178. if (subtrs[0]){
  179. if (subtrs[0].getStyle("display")=="none"){
  180. subtrs.each(function(subtr){ subtr.setStyle("display", "table-row"); });
  181. iconNode.setStyle("background", "url("+"/x_component_process_ViewDesigner/$View/default/icon/down.png) center center no-repeat");
  182. }else{
  183. subtrs.each(function(subtr){ subtr.setStyle("display", "none"); });
  184. iconNode.setStyle("background", "url("+"/x_component_process_ViewDesigner/$View/default/icon/right.png) center center no-repeat");
  185. }
  186. }
  187. _self.setContentHeight();
  188. });
  189. }.bind(this));
  190. }
  191. }else{
  192. if (data.grid.length){
  193. data.grid.each(function(line, idx){
  194. var tr = new Element("tr", {"styles": this.css.viewContentTrNode}).inject(this.viewTable);
  195. Object.each(line.data, function(d, k){
  196. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(tr);
  197. td.set("text", d);
  198. }.bind(this));
  199. }.bind(this));
  200. }
  201. }
  202. }
  203. });