Main.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. MWF.xApplication.AppMarket.Main = new Class({
  2. Extends: MWF.xApplication.Common.Main,
  3. Implements: [Options, Events],
  4. options: {
  5. "style": "default",
  6. "name": "AppMarket",
  7. "icon": "icon.png",
  8. "width": "1000",
  9. "height": "700",
  10. "title": MWF.xApplication.AppMarket.LP.title
  11. },
  12. onQueryLoad: function(){
  13. this.lp = MWF.xApplication.AppMarket.LP;
  14. this.actions = MWF.Actions.get("x_program_center");
  15. },
  16. loadApplication: function(callback){
  17. this.components = [];
  18. this.loadTitle();
  19. this.contentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.content);
  20. this.contentModuleArea = new Element("div", {"styles": this.css.contentModuleArea}).inject(this.contentNode);
  21. this.setContentSize();
  22. this.addEvent("resize", this.setContentSize);
  23. this.loadCloudAppsContent();
  24. },
  25. loadTitle: function(){
  26. this.titleBar = new Element("div", {"styles": this.css.titleBar}).inject(this.content);
  27. this.taskTitleTextNode = new Element("div", {"styles": this.css.titleTextNode,"text": this.lp.title}).inject(this.titleBar);
  28. },
  29. setContentSize: function(){
  30. var size = this.content.getSize();
  31. var titleSize = this.titleBar.getSize();
  32. var height = size.y-titleSize.y;
  33. this.contentNode.setStyles({"height": ""+height+"px", "overflow": "auto"});
  34. var max = size.x*0.98;
  35. var n = (size.x/170).toInt();
  36. var x = n*170;
  37. while (x>max){
  38. n--;
  39. x = n*170;
  40. }
  41. this.contentModuleArea.setStyle("width", ""+x+"px");
  42. },
  43. loadCloudAppsContent: function(){
  44. this.loadCloudApps(function(){
  45. if (MWF.AC.isAdministrator()) this.loadNewApp();
  46. }.bind(this));
  47. },
  48. loadCloudApps: function(callback){
  49. this.categoryList = [];
  50. this.itemList = [];
  51. this.actions.listModule({"categoryList":[]}, function(json){
  52. json.data.each(function(category){
  53. this.categoryList.push(category.category);
  54. category.moduleList.each(function(module){
  55. //for (var i=0; i<20; i++)
  56. this.itemList.push(new MWF.xApplication.AppMarket.Module(this, module));
  57. }.bind(this));
  58. }.bind(this));
  59. }.bind(this));
  60. }
  61. });
  62. MWF.xApplication.AppMarket.Module = new Class({
  63. initialize: function(app, data){
  64. this.app = app;
  65. this.data = data;
  66. this.lp = this.app.lp;
  67. this.css = this.app.css;
  68. this.content = this.app.contentModuleArea;
  69. this.load();
  70. },
  71. load: function(){
  72. this.node = new Element("div", {"styles": this.css.moduleNode}).inject(this.content);
  73. this.iconAreaNode = new Element("div", {"styles": this.css.moduleIconAreaNode}).inject(this.node);
  74. this.iconNode = new Element("div", {"styles": this.css.moduleIconNode}).inject(this.iconAreaNode);
  75. if (this.data.icon){
  76. this.iconNode.setStyle("background-image", "url(data:image/png;base64,"+this.data.icon+")");
  77. this.iconNode.setStyle("background-size", "cover");
  78. }
  79. this.contentNode = new Element("div", {"styles": this.css.moduleContentNode}).inject(this.node);
  80. this.nameNode = new Element("div", {"styles": this.css.moduleNameNode}).inject(this.contentNode);
  81. this.categoryNode = new Element("div", {"styles": this.css.moduleCategoryNode}).inject(this.contentNode);
  82. this.descriptionNode = new Element("div", {"styles": this.css.moduleDescriptionNode}).inject(this.contentNode);
  83. this.actionNode = new Element("div", {"styles": this.css.moduleActionNode}).inject(this.contentNode);
  84. this.nameNode.set("text", this.data.name);
  85. this.categoryNode.set("text", this.data.category);
  86. this.descriptionNode.set("text", this.data.description);
  87. this.actionNode.set("text", this.lp.download);
  88. this.loadEvent();
  89. },
  90. loadEvent: function(){
  91. this.node.addEvents({
  92. "mouseover": function(){this.setStyle("background-color", "#ffffff")},
  93. "mouseout": function(){this.setStyle("background-color", "#f5f5f5")}
  94. });
  95. this.actionNode.addEvent("click", function(e){
  96. this.downloadApp();
  97. e.stopPropagation();
  98. }.bind(this));
  99. this.node.addEvent("click", function(){
  100. this.openApp();
  101. }.bind(this));
  102. },
  103. downloadApp: function(){
  104. var position = this.actionNode.getPosition(this.app.content);
  105. var size = this.app.contentNode.getSize();
  106. var width = size.x*0.9;
  107. if (width>600) width = 600;
  108. var height = size.y*0.9;
  109. var x = (size.x-width)/2;
  110. var y = (size.y-height)/2;
  111. var setupModule = null;
  112. MWF.require("MWF.xDesktop.Dialog", function(){
  113. var dlg = new MWF.xDesktop.Dialog({
  114. "title": this.lp.setupTitle+" "+this.data.name,
  115. "style": "appMarket",
  116. "top": y+20,
  117. "left": x,
  118. "fromTop":position.y,
  119. "fromLeft": position.x,
  120. "width": width,
  121. "height": height,
  122. "html": "",
  123. "maskNode": this.app.content,
  124. "container": this.app.content,
  125. "buttonList": [
  126. {
  127. "text": this.lp.ok,
  128. "action": function(){
  129. if (setupModule) setupModule.setup();
  130. this.close();
  131. }
  132. },
  133. {
  134. "text": this.lp.cancel,
  135. "action": function(){this.close();}
  136. }
  137. ]
  138. });
  139. dlg.show();
  140. setupModule = new MWF.xApplication.AppMarket.Module.Setup(this, dlg);
  141. }.bind(this));
  142. },
  143. openApp: function(){
  144. }
  145. });
  146. MWF.xApplication.AppMarket.Module.Setup = new Class({
  147. initialize: function(module, dlg){
  148. this.module = module;
  149. this.app = this.module.app;
  150. this.data = this.module.data;
  151. this.lp = this.module.lp;
  152. this.css = this.app.css;
  153. this.dlg = dlg;
  154. this.content = this.dlg.content;
  155. this.setupData = {};
  156. this.compareData = null;
  157. this.load();
  158. },
  159. load: function(){
  160. this.node = new Element("div", {"styles": this.css.moduleSetupContentNode}).inject(this.content);
  161. this.loadTitle();
  162. this.loadContent();
  163. },
  164. loadTitle: function(){
  165. this.titleNode = new Element("div", {"styles": this.css.moduleSetupTitleNode}).inject(this.node);
  166. this.iconAreaNode = new Element("div", {"styles": this.css.moduleSetupIconAreaNode}).inject(this.titleNode);
  167. var iconNode = new Element("div", {"styles": this.css.moduleSetupIconNode}).inject(this.iconAreaNode);
  168. if (this.data.icon){
  169. iconNode.setStyle("background-image", "url(data:image/png;base64,"+this.data.icon+")");
  170. iconNode.setStyle("background-size", "cover");
  171. }
  172. var contentNode = new Element("div", {"styles": this.css.moduleSetupTitleContentNode}).inject(this.titleNode);
  173. var nameNode = new Element("div", {"styles": this.css.moduleSetupNameNode}).inject(contentNode);
  174. var categoryNode = new Element("div", {"styles": this.css.moduleSetupCategoryNode}).inject(contentNode);
  175. var descriptionNode = new Element("div", {"styles": this.css.moduleSetupDescriptionNode}).inject(contentNode);
  176. nameNode.set("text", this.data.name);
  177. categoryNode.set("text", this.data.category);
  178. descriptionNode.set("text", this.data.description);
  179. },
  180. loadContent: function(){
  181. this.contentNode = new Element("div", {"styles": this.css.moduleSetupCompareContentNode}).inject(this.node);
  182. this.createLoading(this.contentNode);
  183. this.loadCompare();
  184. },
  185. createLoading: function(node){
  186. this.dlg.button.setStyle("display", "none");
  187. this.loadingAreaNode = new Element("div", {"styles": this.css.moduleLoadingAreaNode}).inject(node);
  188. var img = new Element("img", {
  189. "styles": this.css.moduleLoadingImgNode,
  190. "src": this.app.path+this.app.options.style+"/icon/loading.gif"
  191. }).inject(this.loadingAreaNode);
  192. },
  193. clearLoading: function(){
  194. if (this.loadingAreaNode){
  195. this.loadingAreaNode.destroy();
  196. this.loadingAreaNode = null;
  197. }
  198. this.dlg.button.setStyle("display", "block");
  199. },
  200. loadCompare: function(){
  201. this.app.actions.compareModule(this.data.id, function(json){
  202. this.clearLoading();
  203. this.setupData.flag = json.data.flag;
  204. this.createListArea();
  205. this.compareData = json.data;
  206. this.loadProcessList();
  207. this.loadPortalList();
  208. this.loadCMSList();
  209. this.loadQueryList();
  210. //json.data.processPlatformList
  211. }.bind(this));
  212. },
  213. createListArea: function(){
  214. this.contentAreaNode = new Element("div").inject(this.contentNode);
  215. this.contentInforNode = new Element("div", {"styles": this.css.moduleSetupContentInforNode, "text": this.lp.downloadInfor}).inject(this.contentAreaNode);
  216. //this.processArea = new Element("div", {"styles": this.css.moduleSetupListAreaNode}).inject(this.contentNode);
  217. this.processAreaTitle = new Element("div", {"styles": this.css.moduleSetupListAreaTitleNode, "text": this.lp.process}).inject(this.contentAreaNode);
  218. this.processAreaContent = new Element("div", {"styles": this.css.moduleSetupListAreaContentNode}).inject(this.contentAreaNode);
  219. this.portalAreaTitle = new Element("div", {"styles": this.css.moduleSetupListAreaTitleNode, "text": this.lp.portal}).inject(this.contentAreaNode);
  220. this.portalAreaContent = new Element("div", {"styles": this.css.moduleSetupListAreaContentNode}).inject(this.contentAreaNode);
  221. this.cmsAreaTitle = new Element("div", {"styles": this.css.moduleSetupListAreaTitleNode, "text": this.lp.cms}).inject(this.contentAreaNode);
  222. this.cmsAreaContent = new Element("div", {"styles": this.css.moduleSetupListAreaContentNode}).inject(this.contentAreaNode);
  223. this.queryAreaTitle = new Element("div", {"styles": this.css.moduleSetupListAreaTitleNode, "text": this.lp.query}).inject(this.contentAreaNode);
  224. this.queryAreaContent = new Element("div", {"styles": this.css.moduleSetupListAreaContentNode}).inject(this.contentAreaNode);
  225. },
  226. loadProcessList: function(){
  227. this.processListNodes = [];
  228. this.compareData.processPlatformList.each(function(item){
  229. this.processListNodes.push(new MWF.xApplication.AppMarket.Module.Setup.ProcessElement(this, this.processAreaContent, item));
  230. }.bind(this));
  231. },
  232. loadPortalList: function(){
  233. this.portalListNodes = [];
  234. this.compareData.portalList.each(function(item){
  235. this.portalListNodes.push(new MWF.xApplication.AppMarket.Module.Setup.PortalElement(this, this.portalAreaContent, item));
  236. }.bind(this));
  237. },
  238. loadCMSList: function(){
  239. this.cmsListNodes = [];
  240. this.compareData.cmsList.each(function(item){
  241. this.cmsListNodes.push(new MWF.xApplication.AppMarket.Module.Setup.CmsElement(this, this.cmsAreaContent, item));
  242. }.bind(this));
  243. },
  244. loadQueryList: function(){
  245. this.queryListNodes = [];
  246. this.compareData.queryList.each(function(item){
  247. this.queryListNodes.push(new MWF.xApplication.AppMarket.Module.Setup.QueryElement(this, this.queryAreaContent, item));
  248. }.bind(this));
  249. },
  250. setup: function(){
  251. this.setupData.flag = this.compareData.flag;
  252. this.setupData.processPlatformList = [];
  253. this.setupData.portalList = [];
  254. this.setupData.queryList = [];
  255. this.setupData.cmsList = [];
  256. this.getWriteData(this.processListNodes, this.setupData.processPlatformList);
  257. this.getWriteData(this.portalListNodes, this.setupData.portalList);
  258. this.getWriteData(this.cmsListNodes, this.setupData.cmsList);
  259. this.getWriteData(this.queryListNodes, this.setupData.queryList);
  260. this.contentAreaNode.setStyle("display", "none");
  261. this.createLoading(this.contentNode);
  262. this.app.actions.importModule(this.compareData.flag, this.setupData, function(){
  263. this.app.notice(this.module.data.name+" "+this.lp.setupSuccess, "success");
  264. this.clearLoading();
  265. }.bind(this));
  266. },
  267. getWriteData: function(nodes, json){
  268. nodes.each(function(item){
  269. if (item.action){
  270. var v = item.action.options[item.action.selectedIndex].get("value");
  271. if (v!="ignore"){
  272. json.push({"id": item.data.id, "method":v});
  273. }
  274. }else{
  275. json.push({"id": item.data.id});
  276. }
  277. }.bind(this));
  278. }
  279. });
  280. MWF.xApplication.AppMarket.Module.Setup.Element = new Class({
  281. initialize: function(setup, content, data){
  282. this.setup = setup;
  283. this.app = this.setup.app;
  284. this.data = data;
  285. this.lp = this.app.lp;
  286. this.css = this.app.css;
  287. this.content = content;
  288. this.load();
  289. },
  290. load: function(){
  291. this.contentNode = new Element("div", {"styles": this.css.moduleSetupListContentNode}).inject(this.content);
  292. this.iconNode = new Element("div", {"styles": this.css.moduleSetupListIconNode}).inject(this.contentNode);
  293. this.actionNode = new Element("div", {"styles": this.css.moduleSetupListActionNode}).inject(this.contentNode);
  294. this.inforNode = new Element("div", {"styles": this.css.moduleSetupListInforNode}).inject(this.contentNode);
  295. this.nameNode = new Element("div", {"styles": this.css.moduleSetupListNameNode}).inject(this.contentNode);
  296. this.nameNode.set(this.getNameContent());
  297. if (this.data.exist){
  298. this.iconNode.setStyle("background", "url("+this.app.path+this.app.options.style+"/icon/conflict.png) center center no-repeat");
  299. this.contentNode.setStyle("color", "#e86a58");
  300. this.inforNode.set("text", this.lp.conflict);
  301. this.action = new Element("select", {"styles": this.css.moduleSetupListActionSelectNode}).inject(this.actionNode);
  302. var options = "<option value='ignore' selected>"+this.lp.ignore+"</option>";
  303. options += "<option value='create'>"+this.lp.create+"</option>";
  304. options += "<option value='cover'>"+this.lp.cover+"</option>";
  305. this.action.set("html", options);
  306. // this.action.addEvent("change", function(e){
  307. //
  308. // }.bind(this));
  309. }else{
  310. this.action = new Element("select", {"styles": this.css.moduleSetupListActionSelectNode}).inject(this.actionNode);
  311. var options = "<option value='ignore'>"+this.lp.ignore+"</option>";
  312. options += "<option value='create' selected>"+this.lp.create+"</option>";
  313. this.action.set("html", options);
  314. //this.inforNode.set("text", this.lp.setup);
  315. }
  316. },
  317. getNameContent: function(){
  318. return {
  319. "title": this.lp.name+": "+this.data.name+" "+this.lp.id+": "+this.data.id,
  320. "text": this.data.name
  321. }
  322. }
  323. });
  324. MWF.xApplication.AppMarket.Module.Setup.ProcessElement = new Class({
  325. Extends: MWF.xApplication.AppMarket.Module.Setup.Element
  326. });
  327. MWF.xApplication.AppMarket.Module.Setup.PortalElement = new Class({
  328. Extends: MWF.xApplication.AppMarket.Module.Setup.Element
  329. });
  330. MWF.xApplication.AppMarket.Module.Setup.CmsElement = new Class({
  331. Extends: MWF.xApplication.AppMarket.Module.Setup.Element
  332. });
  333. MWF.xApplication.AppMarket.Module.Setup.QueryElement = new Class({
  334. Extends: MWF.xApplication.AppMarket.Module.Setup.Element
  335. });