Main.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743
  1. MWF.xApplication.process = MWF.xApplication.process || {};
  2. MWF.xApplication.process.ApplicationExplorer = MWF.xApplication.process.ApplicationExplorer || {};
  3. MWF.xDesktop.requireApp("process.ApplicationExplorer", "lp."+MWF.language, null, false);
  4. MWF.xApplication.process.ApplicationExplorer.Main = new Class({
  5. Extends: MWF.xApplication.Common.Main,
  6. Implements: [Options, Events],
  7. options: {
  8. "style": "default",
  9. "mvcStyle": "style.css",
  10. "name": "process.ApplicationExplorer",
  11. "icon": "icon.png",
  12. "width": "1500",
  13. "height": "760",
  14. "isResize": true,
  15. "isMax": true,
  16. "title": MWF.xApplication.process.ApplicationExplorer.LP.title,
  17. "maxWidth": 840,
  18. "minWidth": 720
  19. },
  20. onQueryLoad: function(){
  21. this.lp = MWF.xApplication.process.ApplicationExplorer.LP;
  22. this.viewPath = this.path+this.options.style+"/view.html";
  23. this.restActions = MWF.Actions.get("x_processplatform_assemble_designer");
  24. this.deleteElements = [];
  25. },
  26. loadApplication: function(callback){
  27. this.loadControl();
  28. this.content.loadHtml(this.viewPath, {"bind": {"lp": this.lp, "control": this.control}}, function(){
  29. if (!this.options.isRefresh){
  30. this.maxSize(function(){
  31. this.loadApp(callback);
  32. }.bind(this));
  33. }else{
  34. this.loadApp(callback);
  35. }
  36. }.bind(this));
  37. },
  38. loadApp: function(callback){
  39. this.loadNodes();
  40. this.resizeContent();
  41. this.addEvent("resize", this.resizeContent.bind(this));
  42. this.loadApplicationCategoryList();
  43. //this.loadApplicationList();
  44. this.clickAllCategoryNode();
  45. if (callback) callback();
  46. },
  47. loadControl: function(){
  48. this.control = {};
  49. this.control.canCreate = MWF.AC.isProcessPlatformCreator();
  50. this.control.canManage = !!(MWF.AC.isAdministrator() || MWF.AC.isProcessManager());
  51. },
  52. loadNodes: function(){
  53. this.node = this.content.getElement(".o2_process_AppExp_content");
  54. this.topNode = this.content.getElement(".o2_process_AppExp_top");
  55. this.allCategoryNode = this.content.getElement(".o2_process_AppExp_All");
  56. this.category = this.allCategoryNode;
  57. if (this.allCategoryNode) this.allCategoryNode.addEvent("click", this.clickAllCategoryNode.bind(this));
  58. this.createNode = this.content.getElement(".o2_process_AppExp_create");
  59. if (this.createNode) this.createNode.addEvent("click", this.createApplication.bind(this));
  60. this.importNode = this.content.getElement(".o2_process_AppExp_import");
  61. this.categoryAreaNode = this.content.getElement(".o2_process_AppExp_category");
  62. this.contentArea = this.content.getElement(".o2_process_AppExp_contentArea");
  63. this.contentNode = this.content.getElement(".o2_process_AppExp_contentNode");
  64. this.bottomNode = this.content.getElement(".o2_process_AppExp_bottom");
  65. if (this.importNode){
  66. this.importNode.addEvent("click", function(e){
  67. this.importApplication(e);
  68. }.bind(this));
  69. }
  70. },
  71. importApplication: function(e){
  72. MWF.xDesktop.requireApp("process.ApplicationExplorer", "Importer", function(){
  73. (new MWF.xApplication.process.ApplicationExplorer.Importer(this, e)).load();
  74. }.bind(this));
  75. },
  76. createApplication: function(){
  77. this.createApplicationCreateMarkNode();
  78. this.createApplicationCreateAreaNode();
  79. this.createApplicationCreateNode();
  80. this.applicationCreateAreaNode.inject(this.applicationCreateMarkNode, "after");
  81. this.applicationCreateAreaNode.fade("in");
  82. $("createApplicationName").focus();
  83. this.setApplicationCreateNodeSize();
  84. this.setApplicationCreateNodeSizeFun = this.setApplicationCreateNodeSize.bind(this);
  85. this.addEvent("resize", this.setApplicationCreateNodeSizeFun);
  86. },
  87. createApplicationCreateMarkNode: function(){
  88. this.applicationCreateMarkNode = new Element("div.o2_process_AppExp_applicationCreateMarkNode", {
  89. "events": {
  90. "mouseover": function(e){e.stopPropagation();},
  91. "mouseout": function(e){e.stopPropagation();}
  92. }
  93. }).inject(this.node, "after");
  94. },
  95. createApplicationCreateAreaNode: function(){
  96. this.applicationCreateAreaNode = new Element("div.o2_process_AppExp_applicationCreateAreaNode");
  97. },
  98. createApplicationCreateNode: function(){
  99. this.applicationCreateNode = new Element("div.o2_process_AppExp_applicationCreateNode").inject(this.applicationCreateAreaNode);
  100. this.applicationCreateNewNode = new Element("div.o2_process_AppExp_applicationCreateNewNode").inject(this.applicationCreateNode);
  101. this.applicationCreateFormNode = new Element("div.o2_process_AppExp_applicationCreateFormNode").inject(this.applicationCreateNode);
  102. var html = "<table width=\"100%\" height=\"80%\" border=\"0\" cellPadding=\"0\" cellSpacing=\"0\">" +
  103. "<tr><td style=\"height: 30px; line-height: 30px; text-align: left; min-width: 80px; width:25%\">" +
  104. this.lp.name+":</td>" +
  105. "<td style=\"; text-align: right;\"><input type=\"text\" class='o2_process_AppExp_createApplicationName' id=\"createApplicationName\" " +
  106. "style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  107. "height: 26px;\"/></td></tr>" +
  108. "<tr><td style=\"height: 30px; line-height: 30px; text-align: left\">"+this.lp.alias+":</td>" +
  109. "<td style=\"; text-align: right;\"><input type=\"text\" class='o2_process_AppExp_createApplicationAlias' id=\"createApplicationAlias\" " +
  110. "style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  111. "height: 26px;\"/></td></tr>" +
  112. "<tr><td style=\"height: 30px; line-height: 30px; text-align: left\">"+this.lp.description+":</td>" +
  113. "<td style=\"; text-align: right;\"><input type=\"text\" class='o2_process_AppExp_createApplicationDescription' id=\"createApplicationDescription\" " +
  114. "style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  115. "height: 26px;\"/></td></tr>" +
  116. "<tr><td style=\"height: 30px; line-height: 30px; text-align: left\">"+this.lp.type+":</td>" +
  117. "<td style=\"; text-align: right;\"><input type=\"text\" class='o2_process_AppExp_createApplicationType' id=\"createApplicationType\" " +
  118. "style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  119. "height: 26px;\"/></td></tr>" +
  120. //"<tr><td style=\"height: 30px; line-height: 30px; text-align: left\">"+this.options.tooltip.iconLabel+":</td>" +
  121. //"<td style=\"; text-align: right;\"><input type=\"text\" id=\"createApplicationType\" " +
  122. //"style=\"width: 99%; border:1px solid #999; background-color:#FFF; border-radius: 3px; box-shadow: 0px 0px 6px #CCC; " +
  123. //"height: 26px;\"/></td></tr>" +
  124. "</table>";
  125. this.applicationCreateFormNode.set("html", html);
  126. this.applicationCancelActionNode = new Element("div.o2_process_AppExp_applicationCreateCancelActionNode", {
  127. "text": this.lp.action_cancel
  128. }).inject(this.applicationCreateFormNode);
  129. this.applicationCreateOkActionNode = new Element("div.o2_process_AppExp_applicationCreateOkActionNode", {
  130. "text": this.lp.action_ok
  131. }).inject(this.applicationCreateFormNode);
  132. this.applicationCancelActionNode.addEvent("click", function(e){
  133. this.cancelCreateApplication(e);
  134. }.bind(this));
  135. this.applicationCreateOkActionNode.addEvent("click", function(e){
  136. this.okCreateApplication(e);
  137. }.bind(this));
  138. },
  139. setApplicationCreateNodeSize: function(){
  140. var size = this.node.getSize();
  141. var allSize = this.content.getSize();
  142. this.applicationCreateMarkNode.setStyles({
  143. "width": ""+allSize.x+"px",
  144. "height": ""+allSize.y+"px"
  145. });
  146. this.applicationCreateAreaNode.setStyles({
  147. "width": ""+size.x+"px",
  148. "height": ""+size.y+"px"
  149. });
  150. var hY = size.y*0.8;
  151. var mY = size.y*0.2/2;
  152. this.applicationCreateNode.setStyles({
  153. "height": ""+hY+"px",
  154. "margin-top": ""+mY+"px"
  155. });
  156. var iconSize = this.applicationCreateNewNode.getSize();
  157. var formHeight = hY*0.7;
  158. if (formHeight>250) formHeight = 250;
  159. var formMargin = hY*0.3/2-iconSize.y;
  160. this.applicationCreateFormNode.setStyles({
  161. "height": ""+formHeight+"px",
  162. "margin-top": ""+formMargin+"px"
  163. });
  164. },
  165. cancelCreateApplication: function(e){
  166. var _self = this;
  167. var nameNode = this.applicationCreateFormNode.getElement(".o2_process_AppExp_createApplicationName");
  168. var aliasNode = this.applicationCreateFormNode.getElement(".o2_process_AppExp_createApplicationAlias");
  169. var descriptionNode = this.applicationCreateFormNode.getElement(".o2_process_AppExp_createApplicationDescription");
  170. if (nameNode.get("value") || aliasNode.get("value") || descriptionNode.get("value")){
  171. this.confirm("warn", e, this.lp.createApplication_cancel_title, this.lp.createApplication_cancel, 320, 100, function(){
  172. _self.applicationCreateMarkNode.destroy();
  173. _self.applicationCreateAreaNode.destroy();
  174. this.close();
  175. },function(){
  176. this.close();
  177. });
  178. }else{
  179. this.applicationCreateMarkNode.destroy();
  180. this.applicationCreateAreaNode.destroy();
  181. }
  182. },
  183. okCreateApplication: function(e){
  184. var nameNode = this.applicationCreateFormNode.getElement(".o2_process_AppExp_createApplicationName");
  185. var aliasNode = this.applicationCreateFormNode.getElement(".o2_process_AppExp_createApplicationAlias");
  186. var descriptionNode = this.applicationCreateFormNode.getElement(".o2_process_AppExp_createApplicationDescription");
  187. var typeNode = this.applicationCreateFormNode.getElement(".o2_process_AppExp_createApplicationType");
  188. var data = {
  189. "name": nameNode.get("value"),
  190. "alias": aliasNode.get("value"),
  191. "description": descriptionNode.get("value"),
  192. "applicationCategory": typeNode.get("value")
  193. };
  194. if (data.name){
  195. this.restActions.saveApplication(data, function(json){
  196. this.applicationCreateMarkNode.destroy();
  197. this.applicationCreateAreaNode.destroy();
  198. this.restActions.getApplication(json.data.id, function(json){
  199. json.data.processList = [];
  200. json.data.formList = [];
  201. this.createApplicationItem(json.data, "top");
  202. // var application = new MWF.xApplication.process.ApplicationExplorer.Application(this, json.data, "top");
  203. // application.load();
  204. //this.applications.push(application);
  205. }.bind(this));
  206. this.notice(this.lp.application.createApplicationSuccess, "success");
  207. // this.app.processConfig();
  208. }.bind(this));
  209. }else{
  210. nameNode.setStyle("border-color", "red");
  211. nameNode.focus();
  212. this.notice(this.lp.application.inputApplicationName, "error");
  213. }
  214. },
  215. clickAllCategoryNode: function(){
  216. if (this.category){
  217. this.category.removeClass("o2_process_AppExp_categoryItem_current");
  218. this.category.removeClass("o2_process_AppExp_All_current");
  219. this.category.removeClass("o2_process_AppExp_categoryItem_over");
  220. this.category.removeClass("o2_process_AppExp_All_over");
  221. }
  222. this.allCategoryNode.removeClass("o2_process_AppExp_categoryItem_over");
  223. this.allCategoryNode.addClass("o2_process_AppExp_All_current");
  224. this.category = this.allCategoryNode;
  225. this.loadApplicationList(this.allCategoryNode);
  226. },
  227. resizeContent: function(){
  228. var size = this.content.getSize();
  229. var topSize = this.topNode.getComputedSize();
  230. var bottomSize = this.bottomNode.getComputedSize();
  231. var h = size.y-topSize.totalHeight-bottomSize.totalHeight;
  232. this.contentArea.setStyle("height", ""+h+"px");
  233. this.getApplicationDimension();
  234. if (this.contentNode){
  235. this.contentNode.setStyles({
  236. "margin-left": ""+this.dimension.marginLeft+"px",
  237. "margin-right": ""+this.dimension.marginRight+"px"
  238. });
  239. }
  240. },
  241. createCategoryExpandButton: function(){
  242. //this.categoryExpandButtonArea = new Element("div.o2_process_AppExp_categoryExpandButtonArea").inject(this.categoryAreaNode);
  243. this.categoryExpandButton = new Element("div.o2_process_AppExp_categoryExpandButton").inject(this.categoryAreaNode, "before");
  244. this.categoryExpandButton.addEvent("click", this.expandOrCollapseCategory.bind(this));
  245. },
  246. expandOrCollapseCategory: function(e){
  247. if (!this.categoryMorph) this.categoryMorph = new Fx.Morph(this.categoryAreaNode, {"duration": 100});
  248. if (this.categoryAreaNode.hasClass("o2_process_AppExp_category_more")){
  249. this.categoryAreaNode.removeClass("o2_process_AppExp_category_more");
  250. this.categoryMorph.start({"height": ""+this.topNode.getSize().y+"px"});
  251. if (this.expandOrCollapseCategoryFun) this.content.removeEvent("click", this.expandOrCollapseCategoryFun);
  252. }else{
  253. this.categoryAreaNode.addClass("o2_process_AppExp_category_more");
  254. this.categoryMorph.start({"height": ""+this.categoryAreaNode.getScrollSize().y+"px"});
  255. this.expandOrCollapseCategoryFun = this.expandOrCollapseCategory.bind(this);
  256. this.content.addEvent("click", this.expandOrCollapseCategoryFun);
  257. }
  258. e.stopPropagation();
  259. },
  260. loadApplicationCategoryList: function(){
  261. if (this.control.canCreate){
  262. this.restActions.listApplicationCategory(function(json){
  263. debugger;
  264. var emptyCategory = null;
  265. json.data.each(function(category){
  266. var categoryName = category.applicationCategory || category.portalCategory || category.protalCategory || category.name;
  267. if (categoryName){
  268. this.createCategoryItemNode(categoryName, category.count);
  269. }else{
  270. emptyCategory = category;
  271. }
  272. }.bind(this));
  273. if (this.categoryAreaNode.getScrollSize().y>this.categoryAreaNode.getSize().y) this.createCategoryExpandButton();
  274. }.bind(this));
  275. }
  276. },
  277. createCategoryItemNode: function(text, count){
  278. debugger;
  279. var categoryName = text;
  280. var itemNode = new Element("div.o2_process_AppExp_categoryItem", {
  281. "text": (count) ? categoryName+" ("+count+") " : categoryName
  282. }).inject(this.categoryAreaNode);
  283. itemNode.store("categoryName", categoryName);
  284. var _self = this;
  285. itemNode.addEvents({
  286. "mouseover": function(){if (_self.category != this) this.addClass("o2_process_AppExp_categoryItem_over");},
  287. "mouseout": function(){if (_self.category != this) this.removeClass("o2_process_AppExp_categoryItem_over");},
  288. "click": function(){_self.clickCategoryNode(this)}
  289. });
  290. },
  291. clickCategoryNode: function(item){
  292. // var node = this.categoryListAreaNode.getFirst("div");
  293. // node.setStyles(this.css.allCategoryItemNode);
  294. if (this.category){
  295. this.category.removeClass("o2_process_AppExp_categoryItem_current");
  296. this.category.removeClass("o2_process_AppExp_All_current");
  297. this.category.removeClass("o2_process_AppExp_categoryItem_over");
  298. this.category.removeClass("o2_process_AppExp_All_over");
  299. }
  300. item.removeClass("o2_process_AppExp_categoryItem_over");
  301. item.addClass("o2_process_AppExp_categoryItem_current");
  302. var p = item.getPosition(this.categoryAreaNode);
  303. var size = this.topNode.getSize();
  304. if (p.y>=size.y) item.inject(this.categoryAreaNode, "top");
  305. this.category = item;
  306. this.loadApplicationList(item);
  307. },
  308. getApplicationDimension: function(){
  309. debugger;
  310. if (!this.dimension) this.dimension = {};
  311. this.dimension.count = 2;
  312. this.dimension.width = this.options.maxWidth;
  313. this.dimension.marginLeft = 40;
  314. this.dimension.marginRight = 20;
  315. //var size = this.contentNode.getSize();
  316. var areaSize = this.contentArea.getSize();
  317. var x = areaSize.x-60;
  318. if (areaSize.y>=this.contentArea.getScrollSize().y) x = x-18;
  319. var n = (x/this.dimension.count).toInt();
  320. if (n<this.options.minWidth){
  321. this.dimension.count = 1;
  322. this.dimension.width = Math.min(x, this.options.maxWidth);
  323. }else{
  324. while(n>this.options.maxWidth){
  325. this.dimension.count++;
  326. n = (x/this.dimension.count).toInt();
  327. if (n<this.options.minWidth){
  328. this.dimension.count--;
  329. n = this.options.maxWidth;
  330. break;
  331. }
  332. }
  333. this.dimension.width = n;
  334. }
  335. var margin = areaSize.x-(this.dimension.width*this.dimension.count);
  336. this.dimension.marginLeft = margin/2;
  337. this.dimension.marginRight = margin/2-20;
  338. },
  339. loadApplicationList: function(item){
  340. var name = "";
  341. if (item){name = item.retrieve("categoryName", "")};
  342. this.restActions.listApplicationSummary(name, function(json){
  343. this.contentNode.empty();
  344. if (json.data.length){
  345. this.getApplicationDimension();
  346. json.data.each(function(appData){
  347. this.createApplicationItem(appData);
  348. // var application = new MWF.xApplication.process.ApplicationExplorer.Application(this, appData);
  349. // application.load();
  350. //this.applications.push(application);
  351. }.bind(this));
  352. }else {
  353. if (this.control.canCreate){
  354. var noApplicationNode = new Element("div.o2_process_AppExp_noApplicationNode", {
  355. "html": this.lp.noApplicationCreate
  356. }).inject(this.contentNode);
  357. noApplicationNode.addEvent("click", function(){
  358. this.createApplication();
  359. }.bind(this));
  360. }else{
  361. var noApplicationNode = new Element("div.o2_process_AppExp_noApplicationNode", {
  362. "text": this.lp.noApplication
  363. }).inject(this.contentNode);
  364. }
  365. }
  366. }.bind(this));
  367. },
  368. createApplicationItem: function(appData, where){
  369. var application = new MWF.xApplication.process.ApplicationExplorer.Application(this, appData, where);
  370. application.load();
  371. },
  372. checkDeleteApplication: function(){
  373. if (this.deleteElements.length){
  374. if (!this.deleteElementsNode){
  375. this.deleteElementsNode = new Element("div.o2_process_AppExp_deleteElements", {
  376. "text": this.lp.application.deleteElements
  377. }).inject(this.node);
  378. this.deleteElementsNode.position({
  379. relativeTo: this.contentArea,
  380. position: "centerTop",
  381. edge: "centerTop"
  382. });
  383. this.deleteElementsNode.addEvent("click", function(e){
  384. this.deleteSelectedElements(e);
  385. }.bind(this));
  386. }
  387. }else{
  388. if (this.deleteElementsNode){
  389. this.deleteElementsNode.destroy();
  390. this.deleteElementsNode = null;
  391. delete this.deleteElementsNode;
  392. }
  393. }
  394. },
  395. deleteSelectedElements: function(e){
  396. var _self = this;
  397. var applicationList = [];
  398. this.deleteElements.each(function(app){
  399. applicationList.push(app.data.name);
  400. });
  401. var confirmStr = this.lp.application.deleteElementsConfirm+" ("+applicationList.join("、")+") ";
  402. var check = "<br/><br/><input type=\"checkbox\" id=\"deleteApplicationAllCheckbox\" value=\"yes\">"+this.lp.application.deleteApplicationAllConfirm;
  403. confirmStr += check;
  404. this.confirm("infor", e, this.lp.application.deleteElementsTitle, {"html":confirmStr}, 530, 250, function(){
  405. confirmStr = _self.lp.application.deleteElementsConfirmAgain+"<br/><br/><font style='color:red; font-size:14px; font-weight: bold'>"+applicationList.join("、")+"</font>";
  406. var checkbox = this.content.getElement("#deleteApplicationAllCheckbox");
  407. var onlyRemoveNotCompleted = true;
  408. if (checkbox.checked){
  409. onlyRemoveNotCompleted = false;
  410. confirmStr = _self.lp.application.deleteElementsAllConfirmAgain+"<br/><br/><font style='color:red; font-size:14px; font-weight: bold'>"+applicationList.join("、")+"</font>";
  411. }
  412. this.close();
  413. _self.confirm("infor", e, _self.lp.application.deleteElementsTitle, {"html":confirmStr}, 500, 200, function(){
  414. var deleted = [];
  415. var doCount = 0;
  416. var readyCount = _self.deleteElements.length;
  417. var errorText = "";
  418. var complete = function(){
  419. if (doCount == readyCount){
  420. if (errorText){
  421. _self.app.notice(errorText, "error");
  422. }
  423. }
  424. };
  425. _self.deleteElements.each(function(application){
  426. application["delete"](onlyRemoveNotCompleted, function(){
  427. deleted.push(application);
  428. doCount++;
  429. if (_self.deleteElements.length==doCount){
  430. _self.deleteElements = _self.deleteElements.filter(function(item, index){
  431. return !deleted.contains(item);
  432. });
  433. _self.checkDeleteApplication();
  434. }
  435. complete();
  436. }, function(error){
  437. errorText = (errorText) ? errorText+"<br/><br/>"+error : error;
  438. doCount++;
  439. if (_self.deleteElements.length==doCount){
  440. _self.deleteElements = _self.deleteElements.filter(function(item, index){
  441. return !deleted.contains(item);
  442. });
  443. _self.checkDeleteApplication();
  444. }
  445. complete();
  446. });
  447. });
  448. this.close();
  449. }, function(){
  450. this.close();
  451. });
  452. this.close();
  453. }, function(){
  454. this.close();
  455. });
  456. }
  457. });
  458. MWF.xApplication.process.ApplicationExplorer.Application = new Class({
  459. Implements: [Events],
  460. initialize: function (app, data, where) {
  461. this.app = app;
  462. this.lp = this.app.lp;
  463. this.dimension = this.app.dimension;
  464. this.container = this.app.contentNode;
  465. this.data = data;
  466. this.where = where || "bottom";
  467. this.canManage = this.checkManage();
  468. },
  469. checkManage: function(){
  470. if (this.app.control.canManage) return true;
  471. if (this.app.control.canCreate && (this.data.creatorPerson==layout.desktop.session.user.name)) return true;
  472. if (this.data.controllerList.indexOf(layout.desktop.session.user.distinguishedName)!==-1) return true;
  473. return false;
  474. },
  475. load: function(){
  476. this.node = new Element("div.o2_process_AppExp_item_node").inject(this.container, this.where);
  477. var w = this.dimension.width-20;
  478. this.node.setStyle("width", ""+w+"px");
  479. this.node.loadHtml(this.app.path+this.app.options.style+"/application.html", {"bind": {"lp": this.lp, "data": this.data, "canManage": this.canManage}}, function(){
  480. this.loadNodes();
  481. this.loadElements();
  482. this.loadNewNode();
  483. }.bind(this));
  484. this.resizeContentFun = this.resizeContent.bind(this);
  485. this.app.addEvent("resize", this.resizeContentFun);
  486. },
  487. loadElements: function(){
  488. this.loadElementList("formList", this.formListNode, this.openForm.bind(this), this.lp.noForm, this.createNewForm.bind(this));
  489. this.loadElementList("processList", this.processListNode, this.openProcess.bind(this), this.lp.noProcess, this.createNewProcess.bind(this));
  490. },
  491. loadNewNode: function(){
  492. this.newNode = this.node.getElement(".o2_process_AppExp_item_newNode");
  493. if (this.data.updateTime){
  494. var createDate = Date.parse(this.data.createTime);
  495. var currentDate = new Date();
  496. if (createDate.diff(currentDate, "hour")<12) {
  497. this.newNode.show();
  498. }else{
  499. this.newNode.hide();
  500. }
  501. }
  502. },
  503. loadElementList: function(list, container, click, noElement, noElementClick){
  504. if (this.data[list].length){
  505. this.data[list].each(function(el){
  506. var item = new Element("div.o2_process_AppExp_item_content_element").inject(container);
  507. item.set("text", el.name);
  508. //item.set("title", (el.description) ? el.name+"\n"+el.description : el.name);
  509. item.store("elementId", el.id);
  510. item.addEvents({
  511. "mouseover": function(){this.addClass("o2_process_AppExp_item_content_element_over")},
  512. "mouseout": function(){this.removeClass("o2_process_AppExp_item_content_element_over")},
  513. "click": function(e){
  514. var id = this.retrieve("elementId");
  515. if (click) click(id, e);
  516. }
  517. });
  518. }.bind(this));
  519. }else{
  520. var node = new Element("div.o2_process_AppExp_item_content_element", {
  521. "text": noElement,
  522. "styles": { "color": "#999999" }
  523. }).inject(container);
  524. node.addEvent("click", function(e){ if (noElementClick) noElementClick(e); }.bind(this));
  525. }
  526. },
  527. createNewForm: function(e){
  528. this.openApplication(e, 0);
  529. },
  530. createNewProcess: function(e){
  531. this.openApplication(e, 1);
  532. },
  533. openApplication: function(e, navi){
  534. var appId = "process.ProcessManager"+this.data.id;
  535. if (this.app.desktop.apps[appId]){
  536. this.app.desktop.apps[appId].setCurrent();
  537. }else {
  538. this.app.desktop.openApplication(e, "process.ProcessManager", {
  539. "application": this.data,
  540. "appId": appId,
  541. "onQueryLoad": function(){
  542. this.status = {"navi": navi || null};
  543. }
  544. });
  545. }
  546. },
  547. openForm: function(id, e){
  548. if (id){
  549. layout.desktop.getFormDesignerStyle(function(){
  550. var _self = this;
  551. var options = {
  552. "style": layout.desktop.formDesignerStyle,
  553. "appId": "process.FormDesigner"+id,
  554. "onQueryLoad": function(){
  555. this.actions = _self.app.actions;
  556. this.options.id = id;
  557. this.application = _self.data;
  558. }
  559. };
  560. this.app.desktop.openApplication(e, "process.FormDesigner", options);
  561. }.bind(this));
  562. }
  563. },
  564. openProcess: function(id, e){
  565. if (id){
  566. var _self = this;
  567. var options = {
  568. "appId": "process.ProcessDesigner"+id,
  569. "onQueryLoad": function(){
  570. this.actions = _self.app.actions;
  571. this.options.id = id;
  572. this.application = _self.data;
  573. }
  574. };
  575. this.app.desktop.openApplication(e, "process.ProcessDesigner", options);
  576. }
  577. },
  578. setIconNode: function(){
  579. if (this.data.icon){
  580. this.iconNode.setStyle("background-image", "url(data:image/png;base64,"+this.data.icon+")");
  581. }else{
  582. this.iconNode.setStyle("background-image", "url("+"/x_component_process_ApplicationExplorer/$Main/default/icon/application.png)")
  583. }
  584. this.iconNode.makeLnk({
  585. "par": this._getLnkPar()
  586. });
  587. },
  588. _getLnkPar: function(){
  589. var lnkIcon = "/x_component_process_ApplicationExplorer/$Main/default/lnk.png";
  590. if (this.data.icon) lnkIcon = "data:image/png;base64,"+this.data.icon;
  591. var appId = "process.ProcessManager"+this.data.id;
  592. return {
  593. "icon": lnkIcon,
  594. "title": this.data.name,
  595. "par": "process.ProcessManager#{\"application\": \""+this.data.id+"\", \"appId\": \""+appId+"\"}"
  596. };
  597. },
  598. loadNodes: function(){
  599. this.iconNode = this.node.getElement(".o2_process_AppExp_item_icon");
  600. this.setIconNode();
  601. this.titleNode = this.node.getElement(".o2_process_AppExp_item_titleNode");
  602. this.formListNode = this.node.getElement(".o2_process_AppExp_item_contentFormList");
  603. this.processListNode = this.node.getElement(".o2_process_AppExp_item_contentProcessList");
  604. this.pageListNode = this.node.getElement(".o2_process_AppExp_item_contentPageList");
  605. this.viewListNode = this.node.getElement(".o2_process_AppExp_item_contentViewList");
  606. this.statListNode = this.node.getElement(".o2_process_AppExp_item_contentStatList");
  607. this.titleNode.addEvent("click", function(e){
  608. this.openApplication(e);
  609. }.bind(this));
  610. this.categoryNode = this.node.getElement(".o2_process_AppExp_item_categoryNode");
  611. this.categoryNode.set("text", this.data.applicationCategory || this.data.portalCategory || this.data.protalCategory || this.lp.unCategory);
  612. if (this.data.applicationCategory || this.data.portalCategory || this.data.protalCategory){
  613. this.categoryNode.set("title", this.data.applicationCategory);
  614. this.categoryNode.addClass("o2_process_AppExp_item_categoryColorNode");
  615. }
  616. this.actionArea = this.node.getElement(".o2_process_AppExp_item_ActionArea");
  617. this.actionDelete = this.node.getElement(".o2_process_AppExp_item_Action_delete");
  618. this.actionExport = this.node.getElement(".o2_process_AppExp_item_Action_export");
  619. if (this.actionArea) this.setActionEvent();
  620. },
  621. setActionEvent: function(){
  622. this.node.addEvents({
  623. "mouseover": function(){
  624. if (!this.readyDelete) this.actionArea.fade("in");
  625. }.bind(this),
  626. "mouseout": function(){
  627. if (!this.readyDelete) this.actionArea.fade("out");
  628. }.bind(this)
  629. });
  630. this.actionDelete.addEvent("click", function(e){
  631. this.checkDeleteApplication(e);
  632. e.stopPropagation();
  633. }.bind(this));
  634. this.actionExport.addEvent("click", function(e){
  635. this.exportApplication(e);
  636. e.stopPropagation();
  637. }.bind(this));
  638. },
  639. checkDeleteApplication: function(e){
  640. if (!this.readyDelete){
  641. this.actionDelete.addClass("o2_process_AppExp_item_Action_delete_select");
  642. this.node.addClass("o2_process_AppExp_item_node_del");
  643. this.readyDelete = true;
  644. this.app.deleteElements.push(this);
  645. }else{
  646. this.actionDelete.removeClass("o2_process_AppExp_item_Action_delete_select");
  647. this.node.removeClass("o2_process_AppExp_item_node_del");
  648. this.readyDelete = false;
  649. this.app.deleteElements.erase(this);
  650. }
  651. this.app.checkDeleteApplication();
  652. },
  653. exportApplication: function(){
  654. MWF.xDesktop.requireApp("process.ApplicationExplorer", "Exporter", function(){
  655. (new MWF.xApplication.process.ApplicationExplorer.Exporter(this.app, this.data)).load();
  656. }.bind(this));
  657. },
  658. resizeContent: function(){
  659. var w = this.dimension.width-20;
  660. this.node.setStyle("width", ""+w+"px");
  661. },
  662. "delete": function(onlyRemoveNotCompleted, success, failure){
  663. this._deleteElement(this.data.id, onlyRemoveNotCompleted, function(){
  664. this.destroy();
  665. if (success) success();
  666. }.bind(this), function(xhr, text, error){
  667. var errorText = error;
  668. if (xhr) errorText = xhr.responseText;
  669. // this.explorer.app.notice(errorText, "error", this.explorer.propertyContentNode, {x: "left", y:"top"});
  670. if (failure) failure(errorText);
  671. }.bind(this));
  672. },
  673. _deleteElement: function(id, onlyRemoveNotCompleted, success, failure){
  674. this.app.restActions.deleteApplication(id, onlyRemoveNotCompleted, success, failure);
  675. },
  676. destroy: function(){
  677. if (this.resizeContentFun) this.app.removeEvent("resize", this.resizeContentFun);
  678. this.node.destroy();
  679. o2.release(this);
  680. }
  681. });