ViewExplorer.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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){
  92. if (this.app.status.viewName){
  93. if (view.name == this.app.status.viewName) this.currentView = viewNode;
  94. }
  95. }
  96. var _self = this;
  97. viewNode.addEvent("click", function(){
  98. _self.loadViewData(this);
  99. });
  100. viewNode.makeLnk({
  101. "par": this._getLnkPar(view)
  102. });
  103. },
  104. _getLnkPar: function(view){
  105. return {
  106. "icon": this.path+this.options.style+"/viewIcon/lnk.png",
  107. "title": view.name,
  108. "par": "process.Application#{\"navi\": 2, \"id\": \""+this.app.options.id+"\", \"viewName\": \""+view.name+"\", \"hideMenu\": true}"
  109. };
  110. },
  111. loadViewData: function(node){
  112. if (!this.mask){
  113. this.mask = new MWF.widget.Mask({"style": "desktop"});
  114. this.mask.loadNode(this.node);
  115. }
  116. this.items.each(function(item){
  117. item.setStyles(this.css.filterViewNode);
  118. }.bind(this));
  119. node.setStyles(this.css.filterViewNode_current);
  120. var view = node.retrieve("view");
  121. this.actions.loadView(function(json){
  122. this.showViewData(json.data);
  123. if (this.mask){
  124. this.mask.hide();
  125. this.mask = null;
  126. }
  127. }.bind(this), null, view.id, this.app.options.id);
  128. },
  129. showViewData: function(data){
  130. this.elementContentListNode.empty();
  131. this.viewTable = null;
  132. this.loadViewDataTitle(data.selectEntryList);
  133. this.loadViewDataLine(data);
  134. },
  135. loadViewDataTitle: function(titleList){
  136. this.viewTable = new Element("table", {
  137. "styles": this.css.viewTableNode,
  138. "width": "100%",
  139. "border": "0",
  140. "cellPadding": "0",
  141. "cellSpacing": "0"
  142. }).inject(this.elementContentListNode);
  143. this.viewHeadTr = new Element("tr").inject(this.viewTable);
  144. titleList.each(function(title){
  145. var th = new Element("th", {
  146. "styles": this.css.viewHeadTh,
  147. "text": title.displayName
  148. }).inject(this.viewHeadTr);
  149. }.bind(this));
  150. },
  151. loadViewDataLine: function(data){
  152. if ((data.groupEntry) && (data.groupEntry.column)){
  153. if (data.groupGrid.length){
  154. data.groupGrid.each(function(line, idx){
  155. var groupTr = new Element("tr", {"styles": this.css.viewContentTrNode}).inject(this.viewTable);
  156. var colSpan = data.selectEntryList.length;
  157. var td = new Element("td", {"styles": this.css.viewContentGroupTdNode, "colSpan": colSpan}).inject(groupTr);
  158. var groupAreaNode = new Element("div", {"styles": this.css.viewContentTdGroupNode}).inject(td);
  159. var groupIconNode = new Element("div", {"styles": this.css.viewContentTdGroupIconNode}).inject(groupAreaNode);
  160. var groupTextNode = new Element("div", {"styles": this.css.viewContentTdGroupTextNode}).inject(groupAreaNode);
  161. groupTextNode.set("text", line.group);
  162. var subtrs = [];
  163. line.list.each(function(entry){
  164. var tr = new Element("tr", {"styles": this.css.viewContentTrNode}).inject(this.viewTable);
  165. tr.setStyle("display", "none")
  166. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(tr);
  167. Object.each(entry.data, function(d, k){
  168. if (k!=data.groupEntry.column){
  169. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(tr);
  170. td.set("text", d);
  171. }
  172. }.bind(this));
  173. subtrs.push(tr)
  174. }.bind(this));
  175. groupAreaNode.store("subtrs", subtrs);
  176. var _self = this;
  177. groupAreaNode.addEvent("click", function(){
  178. var subtrs = this.retrieve("subtrs");
  179. var iconNode = groupAreaNode.getFirst("div");
  180. if (subtrs[0]){
  181. if (subtrs[0].getStyle("display")=="none"){
  182. subtrs.each(function(subtr){ subtr.setStyle("display", "table-row"); });
  183. iconNode.setStyle("background", "url("+"/x_component_process_ViewDesigner/$View/default/icon/down.png) center center no-repeat");
  184. }else{
  185. subtrs.each(function(subtr){ subtr.setStyle("display", "none"); });
  186. iconNode.setStyle("background", "url("+"/x_component_process_ViewDesigner/$View/default/icon/right.png) center center no-repeat");
  187. }
  188. }
  189. _self.setContentHeight();
  190. });
  191. }.bind(this));
  192. }
  193. }else{
  194. if (data.grid.length){
  195. data.grid.each(function(line, idx){
  196. var tr = new Element("tr", {"styles": this.css.viewContentTrNode}).inject(this.viewTable);
  197. Object.each(line.data, function(d, k){
  198. var td = new Element("td", {"styles": this.css.viewContentTdNode}).inject(tr);
  199. td.set("text", d);
  200. }.bind(this));
  201. }.bind(this));
  202. }
  203. }
  204. }
  205. });