Main.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  1. MWF.xApplication.cms = MWF.xApplication.cms || {};
  2. MWF.CMSE = MWF.xApplication.cms.Module = MWF.xApplication.cms.Module ||{};
  3. MWF.require("MWF.widget.Identity", null,false);
  4. MWF.xDesktop.requireApp("cms.Module", "Actions.RestActions", null, false);
  5. MWF.xApplication.cms.Module.options = {
  6. multitask: false,
  7. executable: true
  8. }
  9. MWF.xApplication.cms.Module.Main = new Class({
  10. Extends: MWF.xApplication.Common.Main,
  11. Implements: [Options, Events],
  12. options: {
  13. "style": "default",
  14. "name": "cms.Module",
  15. "icon": "icon.png",
  16. "width": "1200",
  17. "height": "700",
  18. "isResize": true,
  19. "isMax": true,
  20. "isCategory" : false,
  21. "searchKey" : "",
  22. "title": MWF.xApplication.cms.Module.LP.title
  23. },
  24. onQueryLoad: function(){
  25. this.lp = MWF.xApplication.cms.Module.LP;
  26. },
  27. loadApplication: function(callback){
  28. this.controllers = [];
  29. this.isAdmin = false;
  30. this.restActions = new MWF.xApplication.cms.Module.Actions.RestActions();
  31. this.createNode();
  32. this.loadApplicationContent();
  33. },
  34. createNode: function(){
  35. this.content.setStyle("overflow", "hidden");
  36. this.node = new Element("div", {
  37. "styles": this.css.node
  38. }).inject(this.content);
  39. this.naviContainerNode = new Element("div.naviContainerNode", {
  40. "styles": this.css.naviContainerNode
  41. }).inject(this.node);
  42. this.leftTitleNode = new Element("div.leftTitleNode", {
  43. "styles": this.css.leftTitleNode
  44. }).inject(this.naviContainerNode);
  45. this.rightContentNode = new Element("div", {
  46. "styles":this.css.rightContentNode
  47. }).inject(this.node);
  48. this.titleBar = new Element("div", {
  49. "styles": this.css.titleBar
  50. }).inject(this.rightContentNode );
  51. },
  52. loadApplicationContent: function(){
  53. if( this.options.columnData ){
  54. this.setTitle(this.options.columnData.appName);
  55. this.loadController(function(){
  56. this.loadTitle(function(){
  57. this.loadMenu();
  58. }.bind(this));
  59. }.bind(this))
  60. }else if( (this.status && this.status.columnId) || this.options.columnId ){
  61. var columnId = this.options.columnId || this.status.columnId;
  62. this.loadColumnData( columnId, function(){
  63. this.loadController(function(){
  64. this.loadTitle(function(){
  65. this.loadMenu();
  66. }.bind(this));
  67. }.bind(this))
  68. }.bind(this))
  69. }else if( this.options.columnAlias ){
  70. this.restActions.getColumnByAlias( this.options.columnAlias, function( json ){
  71. this.options.columnData = json.data;
  72. this.setTitle(this.options.columnData.appName);
  73. this.loadController(function(){
  74. this.loadTitle(function(){
  75. this.loadMenu();
  76. }.bind(this));
  77. }.bind(this))
  78. }.bind(this))
  79. }
  80. },
  81. loadColumnData : function(columnId, callback){
  82. this.restActions.getColumn( {"id":columnId }, function( json ){
  83. this.options.columnData = json.data;
  84. this.setTitle(this.options.columnData.appName);
  85. if(callback)callback()
  86. }.bind(this))
  87. },
  88. loadController: function(callback){
  89. this.restActions.listColumnController(this.options.columnData.id, function( json ){
  90. json.data = json.data || [];
  91. json.data.each(function(item){
  92. this.controllers.push(item.adminUid)
  93. }.bind(this))
  94. this.isAdmin = MWF.AC.isAdministrator() || this.controllers.contains(layout.desktop.session.user.name);
  95. if(callback)callback(json);
  96. }.bind(this));
  97. },
  98. loadTitle : function(callback){
  99. this.loadCreateDocumentActionNode(
  100. function(){
  101. //this.loadRefreshNode();
  102. this.loadTitleIconNode();
  103. this.loadTitleContentNode();
  104. this.loadSearchNode();
  105. if(callback)callback();
  106. }.bind(this)
  107. );
  108. },
  109. loadCreateDocumentActionNode: function( callback ) {
  110. this.restActions.listCategoryByPublisher( this.options.columnData.id, function( json ){
  111. if( json.data && json.data.length ){
  112. this.createDocumentAction = new Element("div", {
  113. "styles": this.css.createDocumentAction,
  114. "text" : this.lp.start
  115. }).inject(this.titleBar);
  116. this.createDocumentAction.addEvents({
  117. "click": function(e){
  118. MWF.xDesktop.requireApp("cms.Index", "Newer", null, false);
  119. this.creater = new MWF.xApplication.cms.Index.Newer( this.options.columnData, null, this, this.view, {
  120. restrictToColumn : true
  121. });
  122. this.creater.load();
  123. }.bind(this),
  124. "mouseover" : function(e){
  125. this.createDocumentAction.setStyles( this.css.createDocumentAction_over )
  126. }.bind(this),
  127. "mouseout" : function(e){
  128. this.createDocumentAction.setStyles( this.css.createDocumentAction )
  129. }.bind(this)
  130. });
  131. }
  132. if(callback)callback();
  133. }.bind(this));
  134. },
  135. loadTitleIconNode : function(){
  136. this.defaultColumnIcon = "/x_component_cms_Index/$Main/"+this.options.style+"/icon/column.png";
  137. var iconAreaNode = this.iconAreaNode = new Element("div",{
  138. "styles" : this.css.titleIconAreaNode
  139. }).inject(this.leftTitleNode);
  140. var iconNode = this.iconNode = new Element("img",{
  141. "styles" : this.css.titleIconNode
  142. }).inject(iconAreaNode);
  143. if (this.options.columnData.appIcon){
  144. this.iconNode.set("src", "data:image/png;base64,"+this.options.columnData.appIcon+"");
  145. }else{
  146. this.iconNode.set("src", this.defaultColumnIcon)
  147. }
  148. iconNode.makeLnk({
  149. "par": this._getLnkPar()
  150. });
  151. },
  152. _getLnkPar: function(){
  153. var lnkIcon = this.defaultColumnIcon;
  154. if (this.options.columnData.appIcon) lnkIcon = "data:image/png;base64,"+this.options.columnData.appIcon;
  155. var appId = "cms.Module"+this.options.columnData.id;
  156. return {
  157. "icon": lnkIcon,
  158. "title": this.options.columnData.appName,
  159. "par": "cms.Module#{\"columnId\": \""+this.options.columnData.id+"\", \"appId\": \""+appId+"\"}"
  160. };
  161. },
  162. loadTitleContentNode: function(){
  163. this.titleContentNode = new Element("div", {
  164. "styles": this.css.titleContentNode
  165. }).inject(this.leftTitleNode);
  166. this.titleTextNode = new Element("div", {
  167. "styles": this.css.titleTextNode,
  168. "text": this.options.columnData.appName,
  169. "title": this.options.columnData.appName
  170. }).inject(this.titleContentNode);
  171. this.titleDescriptionNode = new Element("div", {
  172. "styles": this.css.titleDescriptionNode,
  173. "text": this.options.columnData.description ? this.options.columnData.description : this.lp.noDescription,
  174. "title": this.options.columnData.description ? this.options.columnData.description : this.lp.noDescription
  175. }).inject(this.titleContentNode);
  176. },
  177. loadSearchNode: function(){
  178. this.searchBarAreaNode = new Element("div", {
  179. "styles": this.css.searchBarAreaNode
  180. }).inject(this.titleBar);
  181. this.searchBarNode = new Element("div", {
  182. "styles": this.css.searchBarNode
  183. }).inject(this.searchBarAreaNode);
  184. this.searchBarActionNode = new Element("div", {
  185. "styles": this.css.searchBarActionNode
  186. }).inject(this.searchBarNode);
  187. this.searchBarResetActionNode = new Element("div", {
  188. "styles": this.css.searchBarResetActionNode
  189. }).inject(this.searchBarNode);
  190. this.searchBarResetActionNode.setStyle("display","none");
  191. this.searchBarInputBoxNode = new Element("div", {
  192. "styles": this.css.searchBarInputBoxNode
  193. }).inject(this.searchBarNode);
  194. this.searchBarInputNode = new Element("input", {
  195. "type": "text",
  196. "value": this.options.searchKey!="" ? this.options.searchKey : this.lp.searchKey,
  197. "styles": this.css.searchBarInputNode
  198. }).inject(this.searchBarInputBoxNode);
  199. var _self = this;
  200. this.searchBarActionNode.addEvent("click", function(){
  201. this.search();
  202. }.bind(this));
  203. this.searchBarResetActionNode.addEvent("click", function(){
  204. this.reset();
  205. }.bind(this));
  206. this.searchBarInputNode.addEvents({
  207. "focus": function(){
  208. if (this.value==_self.lp.searchKey) this.set("value", "");
  209. },
  210. "blur": function(){if (!this.value) this.set("value", _self.lp.searchKey);},
  211. "keydown": function(e){
  212. if (e.code==13){
  213. this.search();
  214. e.preventDefault();
  215. }
  216. }.bind(this),
  217. "selectstart": function(e){
  218. e.preventDefault();
  219. }
  220. });
  221. },
  222. loadRefreshNode : function(){
  223. this.refreshAreaNode = new Element("div", {
  224. "styles": this.css.refreshAreaNode
  225. }).inject(this.titleBar);
  226. this.refreshActionNode = new Element("div", {
  227. "styles": this.css.refreshActionNode,
  228. "title" : this.lp.refresh
  229. }).inject(this.refreshAreaNode);
  230. this.refreshActionNode.addEvent("click", function(){
  231. this.reloadView();
  232. }.bind(this));
  233. },
  234. loadMenu: function(callback){
  235. this.naviNode = new Element("div.naviNode", {
  236. "styles": this.css.naviNode
  237. }).inject(this.naviContainerNode);
  238. //this.setScrollBar(this.naviNode,{"where": "before"});
  239. MWF.require("MWF.widget.ScrollBar", function(){
  240. new MWF.widget.ScrollBar(this.naviContainerNode, {
  241. "style":"xApp_ProcessManager_StartMenu", "distance": 100, "friction": 4, "axis": {"x": false, "y": true}
  242. });
  243. }.bind(this));
  244. this.addEvent("resize", function(){this.setNaviSize();}.bind(this));
  245. //MWF.require("MWF.widget.ScrollBar", function(){
  246. // new MWF.widget.ScrollBar(this.menuNode, {
  247. // "style":"xApp_CMSModule_StartMenu", "distance": 100, "friction": 4, "axis": {"x": false, "y": true}
  248. // });
  249. //}.bind(this));
  250. if( this.status && this.status.categoryId ){
  251. this._loadMenu( this.status );
  252. }else if( this.options.categoryId && this.options.categoryId != "" ){
  253. if( this.options.viewId && this.options.viewId!="" ){
  254. this._loadMenu( { "categoryId" :this.options.categoryId , "viewId" : this.options.viewId } )
  255. }else{
  256. //this.getCategoryDefaultView(this.options.categoryId , function(viewId){
  257. // if( viewId ){
  258. // this._loadMenu( { "categoryId" :this.options.categoryId , "viewId" : viewId, "isCategory" : this.options.isCategory } );
  259. // }else{
  260. // this._loadMenu( { "categoryId" :this.options.categoryId , "isCategory" : this.options.isCategory, "naviIndex" : (this.options.naviIndex || 0) } );
  261. // }
  262. //}.bind(this))
  263. this._loadMenu( { "categoryId" :this.options.categoryId , "isCategory" : this.options.isCategory, "naviIndex" : (this.options.naviIndex || 0) } );
  264. }
  265. }else{
  266. this._loadMenu( { "categoryId" :"all" } )
  267. }
  268. },
  269. reloadView : function(){
  270. this.reset();
  271. },
  272. _loadMenu : function( options ){
  273. this.navi = new MWF.xApplication.cms.Module.Navi(this, this.naviNode, this.options.columnData, options );
  274. this.setNaviSize();
  275. },
  276. clearContent: function(){
  277. //debugger;
  278. if (this.moduleContent){
  279. if (this.view) delete this.view;
  280. this.moduleContent.destroy();
  281. this.moduleContent = null;
  282. }
  283. },
  284. openView : function(el, categoryData, viewData, searchKey, navi){
  285. if( (!searchKey || searchKey !="") && this.options.searchKey != "" ){
  286. searchKey = this.options.searchKey;
  287. //if(el)el.setStyles( this.css.viewNaviNode );
  288. //this.currentViewNaviNode = el;
  289. //if(navi)navi.currentViewNaviNode = null;
  290. this.options.searchKey = "";
  291. }
  292. MWF.xDesktop.requireApp("cms.Module", "ViewExplorer", function(){
  293. this.clearContent();
  294. this.moduleContent = new Element("div", {
  295. "styles": this.css.moduleContent
  296. }).inject(this.rightContentNode);
  297. if (!this.restActions) this.restActions = new MWF.xApplication.cms.Module.Actions.RestActions();
  298. this.view = new MWF.xApplication.cms.Module.ViewExplorer(
  299. this.moduleContent,
  300. this.restActions,
  301. this.options.columnData,
  302. categoryData,
  303. viewData,
  304. {"isAdmin": this.isAdmin, "searchKey" : searchKey }
  305. );
  306. this.view.app = this;
  307. this.view.load();
  308. if( !searchKey || searchKey=="" ){
  309. this.searchBarResetActionNode.setStyle("display","none");
  310. this.searchBarActionNode.setStyle("display","block");
  311. this.searchBarInputNode.set("value",this.lp.searchKey);
  312. }
  313. }.bind(this));
  314. },
  315. //getCategoryDefaultView : function(categoryId, callback){
  316. //MWF.UD.getDataJson("cms_defaultView_" + categoryId, function( data ){
  317. // if(callback)callback( data ? data.id : null );
  318. //}.bind(this))
  319. //},
  320. //setCategoryDefaultView : function(categoryId, viewId){
  321. // MWF.UD.putData("cms_defaultView_" + categoryId , { "id":viewId }, function(){
  322. // this.app.notice(this.app.lp.setDefaultSuccess, "success");
  323. // }.bind(this))
  324. //},
  325. search : function( key ){
  326. if(!key)key = this.searchBarInputNode.get("value");
  327. if(key==this.lp.searchKey)key="";
  328. if( key!="" ){
  329. this.searchBarResetActionNode.setStyle("display","block");
  330. this.searchBarActionNode.setStyle("display","none");
  331. }
  332. if(this.navi.currentViewNaviNode){
  333. //this.navi.currentViewNaviNode.setStyles( this.css.viewNaviNode );
  334. //this.currentViewNaviNode = this.navi.currentViewNaviNode
  335. var viewNaviNode = this.navi.currentViewNaviNode;
  336. //this.navi.currentViewNaviNode = null;
  337. var viewData = viewNaviNode.retrieve("viewData");
  338. var categoryId = viewNaviNode.retrieve("categoryId");
  339. if( viewData.content && typeof(viewData.content)=="string"){
  340. viewData.content = JSON.parse(viewData.content);
  341. }
  342. this.openView( viewNaviNode, this.navi.categorys[categoryId].data, viewData , key);
  343. }
  344. },
  345. reset : function(){
  346. this.searchBarInputNode.set("value",this.lp.searchKey);
  347. this.searchBarResetActionNode.setStyle("display","none");
  348. this.searchBarActionNode.setStyle("display","block");
  349. if(this.navi.currentViewNaviNode){
  350. var viewNaviNode = this.navi.currentViewNaviNode;
  351. }else{
  352. var viewNaviNode = this.navi.categorys.all.views.default.node;
  353. }
  354. this.navi.setCurrentViewNode( viewNaviNode );
  355. this.currentViewNaviNode = null;
  356. //var viewData = viewNaviNode.retrieve("viewData");
  357. //var categoryId = viewNaviNode.retrieve("categoryId");
  358. //if( viewData.content && typeof(viewData.content)=="string"){
  359. // viewData.content = JSON.parse(viewData.content);
  360. //}
  361. //this.openView( viewNaviNode, this.navi.categorys[categoryId].data, viewData )
  362. },
  363. recordStatus: function(){
  364. var viewNaviNode = this.navi.currentViewNaviNode;
  365. if( viewNaviNode ){
  366. var viewData = viewNaviNode.retrieve("viewData");
  367. var categoryId = viewNaviNode.retrieve("categoryId");
  368. var isCategory = viewNaviNode.retrieve("isCategory");
  369. if (categoryId){
  370. return {
  371. "columnId" : this.options.columnData.id,
  372. "categoryId" :categoryId,
  373. "isCategory" : isCategory,
  374. "viewId" : viewData.id ? viewData.id : "default"
  375. };
  376. }else{
  377. return { "columnId" : this.options.columnData.id }
  378. }
  379. }else{
  380. return { "columnId" : this.options.columnData.id }
  381. }
  382. },
  383. setNaviSize: function(){
  384. //var titlebarSize = this.titleBar ? this.titleBar.getSize() : {"x":0,"y":0};
  385. var nodeSize = this.node.getSize();
  386. //var pt = this.naviContainerNode.getStyle("padding-top").toFloat();
  387. //var pb = this.naviContainerNode.getStyle("padding-bottom").toFloat();
  388. //var height = nodeSize.y-pt-pb-titlebarSize.y;
  389. this.naviContainerNode.setStyle("height", ""+nodeSize.y+"px");
  390. }
  391. });
  392. MWF.xApplication.cms.Module.Navi = new Class({
  393. Implements: [Options, Events],
  394. options : {
  395. "categoryId" :"" ,
  396. "viewId" : "",
  397. "isCategory" : false,
  398. "navi" : -1,
  399. },
  400. initialize: function(app, node, columnData, options){
  401. this.setOptions(options);
  402. this.app = app;
  403. this.node = $(node);
  404. this.columnData = columnData;
  405. this.categorys = {};
  406. this.css = this.app.css;
  407. this.load();
  408. },
  409. load: function(){
  410. var self = this;
  411. this.loadAllDocNaviNode();
  412. new Element("div",{
  413. "styles" : this.css.viewNaviBottom
  414. }).inject(this.node);
  415. this.app.restActions.listCategory( this.columnData.id, function( json ){
  416. json.data.each(function(categroyData){
  417. var isCurrent = false;
  418. var categoryNaviNode = new Element("div.categoryNaviNode", {
  419. "styles": this.css.categoryNaviNode
  420. }).inject(this.node);
  421. var categoryExpendNode = new Element("div.emptyExpendNode",{
  422. "styles": this.css.emptyExpendNode
  423. }).inject(categoryNaviNode);
  424. var categoryNaviTextNode = new Element("div.categoryNaviTextNode",{
  425. "styles": this.css.categoryNaviTextNode,
  426. "text": categroyData.name
  427. }).inject(categoryNaviNode);
  428. this.categorys[categroyData.id] = {};
  429. this.categorys[categroyData.id].data = categroyData;
  430. this.categorys[categroyData.id].node = categoryNaviNode;
  431. this.categorys[categroyData.id].views = {};
  432. categoryNaviNode.store( "categoryId" , categroyData.id );
  433. categoryNaviNode.store( "isCategory" , true );
  434. categoryNaviNode.store( "expendNode" , categoryExpendNode );
  435. categoryNaviNode.addEvents({
  436. "mouseover": function(){ if (self.currentViewNaviNode!=this)this.setStyles(self.app.css.categoryNaviNode_over) },
  437. "mouseout": function(){ if (self.currentViewNaviNode!=this)this.setStyles( self.app.css.categoryNaviNode ) },
  438. click : function(){self.setCurrentViewNode(this);}
  439. });
  440. var viewNaviListNode = new Element("div.viewNaviListNode",{
  441. "styles" : this.css.viewNaviListNode
  442. }).inject(this.node);
  443. categoryNaviNode.store( "viewNode" , viewNaviListNode );
  444. if( !categroyData.defaultViewName || categroyData.defaultViewName == "default" || categroyData.defaultViewName == ""){
  445. categoryNaviNode.store( "viewData" , {"isDefault":true} );
  446. if( this.options.categoryId == categroyData.id && this.options.isCategory ){
  447. this.setCurrentViewNode( categoryNaviNode );
  448. isCurrent = true;
  449. }
  450. this.loadViewNaviListNode( categroyData, categoryNaviNode, viewNaviListNode, categoryExpendNode, isCurrent );
  451. }else{
  452. this.app.restActions.getView( categroyData.defaultViewName, function(json){
  453. categoryNaviNode.store( "viewData" , json.data );
  454. if( this.options.categoryId == categroyData.id && this.options.isCategory ){
  455. this.setCurrentViewNode( categoryNaviNode );
  456. isCurrent = true;
  457. }
  458. this.loadViewNaviListNode( categroyData, categoryNaviNode, viewNaviListNode, categoryExpendNode, isCurrent );
  459. }.bind(this));
  460. }
  461. }.bind(this));
  462. this.fireEvent("postLoad");
  463. }.bind(this),function(){
  464. this.fireEvent("postLoad");
  465. }.bind(this), true)
  466. },
  467. loadViewNaviListNode: function( categroyData, categoryNaviNode, viewNaviListNode, categoryExpendNode, isCurrent ){
  468. var index = 0;
  469. this.app.restActions.listViewByCategory( categroyData.id, function (d) {
  470. if(d.data.length > 0 ){
  471. categoryNaviNode.store( "isExpend", true );
  472. categoryNaviNode.store( "hasSub", true );
  473. categoryExpendNode.setStyles( isCurrent ? this.css.categoryExpendNode_selected : this.css.categoryExpendNode );
  474. categoryExpendNode.addEvent( "click" , function(ev){
  475. this.obj.triggerExpend( this.naviNode );
  476. ev.stopPropagation();
  477. }.bind({ obj : this, naviNode : categoryNaviNode }));
  478. }
  479. d.data.each(function(viewData ){
  480. this.createViewNaviNode(viewNaviListNode, viewData, categroyData.id, index++ );
  481. }.bind(this));
  482. new Element("div", {
  483. "styles": this.css.viewNaviSepartorNode
  484. }).inject(viewNaviListNode);
  485. }.bind(this));
  486. },
  487. loadAllDocNaviNode : function(){
  488. var _self = this;
  489. this.categorys.all = {};
  490. this.categorys.all.data = {"isAll":true};
  491. this.categorys.all.views = {};
  492. var viewNaviListNode = this.viewNaviListNode_all = new Element("div.viewNaviListNode_all",{
  493. "styles" : this.css.viewNaviListNode_all
  494. }).inject(this.node);
  495. var viewNaviNode = this.viewNaviNode_all = new Element("div.viewNaviNode_all", {
  496. "styles": this.css.viewNaviNode_all,
  497. "text" : this.app.lp.allDocument //+ this.columnData.appName
  498. }).inject(viewNaviListNode);
  499. var viewData = {
  500. "isDefault" : true,
  501. "isAll" : true
  502. };
  503. viewNaviNode.store("isAll",true);
  504. viewNaviNode.store("viewData",viewData);
  505. viewNaviNode.store("categoryId","all");
  506. var view = this.categorys.all.views.default = {};
  507. view.data = viewData;
  508. view.node = viewNaviNode;
  509. viewNaviNode.addEvents({
  510. "mouseover": function(){ if (_self.currentViewNaviNode!=this)this.setStyles(_self.css.viewNaviNode_all_over) },
  511. "mouseout": function(){ if (_self.currentViewNaviNode!=this)this.setStyles( _self.css.viewNaviNode_all ) },
  512. "click": function (el) {
  513. _self.setCurrentViewNode(this);
  514. }
  515. })
  516. new Element("div", {
  517. "styles": this.css.viewNaviSepartorNode
  518. }).inject(viewNaviListNode);
  519. if( this.options.categoryId == "all" ){
  520. this.setCurrentViewNode(viewNaviNode)
  521. }
  522. },
  523. createViewNaviNode : function(viewNaviListNode, viewData, categoryId,index){
  524. var _self = this;
  525. var viewNaviNode = new Element("div.viewNaviNode", {
  526. "styles": this.css.viewNaviNode,
  527. "text" : viewData.isDefault ? this.app.lp.defaultView : viewData.name
  528. }).inject(viewNaviListNode);
  529. viewNaviNode.store("viewData",viewData);
  530. viewNaviNode.store("categoryId",categoryId);
  531. var key = viewData.isDefault ? "default" : viewData.id;
  532. var view = this.categorys[categoryId].views[ key ] = {};
  533. view.data = viewData;
  534. view.node = viewNaviNode;
  535. viewNaviNode.addEvents({
  536. "mouseover": function(){ if (_self.currentViewNaviNode!=this)this.setStyles(_self.css.viewNaviNode_over) },
  537. "mouseout": function(){ if (_self.currentViewNaviNode!=this)this.setStyles( _self.css.viewNaviNode ) },
  538. "click": function (el) {
  539. _self.setCurrentViewNode(this);
  540. }
  541. });
  542. if( this.options.categoryId == categoryId && !this.options.isCategory ){
  543. if( this.options.viewId == "default" && viewData.isDefault ){
  544. this.setCurrentViewNode(viewNaviNode);
  545. }else if( this.options.viewId == viewData.id ){
  546. this.setCurrentViewNode(viewNaviNode);
  547. }else if( this.options.naviIndex == index ){
  548. this.setCurrentViewNode(viewNaviNode);
  549. }
  550. }
  551. },
  552. triggerExpend : function( viewNaviNode ){
  553. if( viewNaviNode.retrieve("hasSub") ){
  554. if( viewNaviNode.retrieve("isExpend") ){
  555. viewNaviNode.store("isExpend",false);
  556. if( this.currentViewNaviNode == viewNaviNode ){
  557. viewNaviNode.retrieve("expendNode").setStyles( this.css.categoryCollapseNode_selected );
  558. }else{
  559. viewNaviNode.retrieve("expendNode").setStyles( this.css.categoryCollapseNode );
  560. }
  561. viewNaviNode.retrieve("viewNode").setStyle("display","none");
  562. }else{
  563. viewNaviNode.store("isExpend",true);
  564. if( this.currentViewNaviNode == viewNaviNode ){
  565. viewNaviNode.retrieve("expendNode").setStyles( this.css.categoryExpendNode_selected );
  566. }else{
  567. viewNaviNode.retrieve("expendNode").setStyles( this.css.categoryExpendNode );
  568. }
  569. viewNaviNode.retrieve("viewNode").setStyle("display","");
  570. }
  571. }
  572. },
  573. setCurrentViewNode : function( viewNaviNode ){
  574. if(this.currentViewNaviNode){
  575. if( this.currentViewNaviNode.retrieve("isAll") ){
  576. this.currentViewNaviNode.setStyles( this.css.viewNaviNode_all );
  577. }else if( this.currentViewNaviNode.retrieve("isCategory") ){
  578. this.currentViewNaviNode.setStyles( this.css.categoryNaviNode );
  579. }else{
  580. this.currentViewNaviNode.setStyles( this.css.viewNaviNode );
  581. }
  582. if( this.currentViewNaviNode.retrieve("hasSub") ){
  583. if( this.currentViewNaviNode.retrieve("isExpend") ){
  584. this.currentViewNaviNode.retrieve("expendNode").setStyles( this.css.categoryExpendNode );
  585. }else{
  586. this.currentViewNaviNode.retrieve("expendNode").setStyles( this.css.categoryCollapseNode );
  587. }
  588. }
  589. }
  590. if( viewNaviNode.retrieve("isAll") ){
  591. viewNaviNode.setStyles( this.css.viewNaviNode_all_selected );
  592. }else if( viewNaviNode.retrieve("isCategory") ){
  593. viewNaviNode.setStyles( this.css.categoryNaviNode_selected );
  594. }else{
  595. viewNaviNode.setStyles( this.css.viewNaviNode_selected );
  596. }
  597. if( viewNaviNode.retrieve("hasSub") ){
  598. if( viewNaviNode.retrieve("isExpend") ){
  599. //viewNaviNode.store("isExpend",false);
  600. viewNaviNode.retrieve("expendNode").setStyles( this.css.categoryExpendNode_selected );
  601. //viewNaviNode.retrieve("viewNode").setStyle("display","none");
  602. }else{
  603. //viewNaviNode.store("isExpend",true);
  604. viewNaviNode.retrieve("expendNode").setStyles( this.css.categoryCollapseNode_selected );
  605. //viewNaviNode.retrieve("viewNode").setStyle("display","");
  606. }
  607. }
  608. this.currentViewNaviNode = viewNaviNode;
  609. var viewData = viewNaviNode.retrieve("viewData");
  610. var categoryId = viewNaviNode.retrieve("categoryId");
  611. if( viewData.content && typeof(viewData.content)=="string"){
  612. viewData.content = JSON.parse(viewData.content);
  613. }
  614. this.app.openView( viewNaviNode, this.categorys[categoryId].data, viewData, "", this );
  615. }
  616. });