package.browser.tree.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /**
  2. * The tree panel holding the repository categories
  3. *
  4. * @class MODx.tree.PackageBrowserTree
  5. * @extends MODx.tree.Tree
  6. * @param {Object} config An object of options.
  7. * @xtype modx-package-browser-tree
  8. */
  9. MODx.tree.PackageBrowserTree = function(config) {
  10. config = config || {};
  11. Ext.applyIf(config,{
  12. url: MODx.config.connector_url
  13. ,action: 'workspace/packages/rest/getNodes'
  14. ,baseParams: {
  15. provider: MODx.provider
  16. }
  17. ,loaderConfig: {
  18. preloadChildren: false
  19. }
  20. ,stateful: false
  21. ,rootVisible: false
  22. ,enableDD: false
  23. ,autoHeight: true
  24. ,singleExpand: true
  25. ,root:{
  26. text: _('provider')
  27. ,nodeType: 'async'
  28. ,id: 'modx-package-browser-tree-root'
  29. }
  30. ,tbar: [{
  31. xtype: 'textfield'
  32. ,emptyText: _('search')
  33. ,name: 'search'
  34. ,id: 'package-browser-search-fld'
  35. ,cls: 'icon-search'
  36. ,hideMode: 'offsets'
  37. ,width: 249
  38. ,listeners: {
  39. change: this.search
  40. ,specialkey: function( form, e ) {
  41. if(e.getKey() == Ext.EventObject.ENTER){
  42. form.blur();
  43. }
  44. }
  45. ,scope:this
  46. }
  47. }]
  48. });
  49. MODx.tree.PackageBrowserTree.superclass.constructor.call(this,config);
  50. this.on('click',this.onNodeClick,this);
  51. this.on('beforeload',this.onBeforeLoad, this);
  52. };
  53. Ext.extend(MODx.tree.PackageBrowserTree,MODx.tree.Tree,{
  54. initEvents: function(){
  55. MODx.tree.PackageBrowserTree.superclass.initEvents.call(this);
  56. this.getRootNode().expand();
  57. this.getProviderInfos(MODx.provider);
  58. }
  59. ,onLoad: function(ldr,node,resp) {
  60. var r = Ext.decode(resp.responseText);
  61. if (r.message) {
  62. MODx.msg.alert(_('error'), r.message, function() {
  63. location.href = location.href;
  64. });
  65. return false;
  66. }
  67. }
  68. ,changeGProvider: false
  69. ,changePProvider: false
  70. ,getProviderInfos: function(pv){
  71. MODx.Ajax.request({
  72. url: this.config.url
  73. ,params: {
  74. action: 'workspace/packages/rest/getInfo'
  75. ,provider: pv
  76. }
  77. ,listeners: {
  78. 'success': {fn:function(r) {
  79. this.providerInfos = r.object;
  80. Ext.getCmp('modx-package-browser-home').updateDetail(this.providerInfos);
  81. },scope:this}
  82. }
  83. });
  84. }
  85. ,setProvider: function(pv){
  86. if (Ext.isEmpty(pv) || pv == undefined) { pv = MODx.defaultProvider; }
  87. this.getLoader().baseParams.provider = pv;
  88. this.getProviderInfos(pv);
  89. this.changeGProvider = true;
  90. this.changePProvider = true;
  91. }
  92. ,onNodeClick: function(n,e) {
  93. switch (n.attributes.type) {
  94. case 'repository':
  95. var r = Ext.getCmp('modx-package-browser-repositories');
  96. r.activate();
  97. r.updateDetail(n.attributes.data);
  98. break;
  99. case 'tag':
  100. var tp = n.parentNode;
  101. if (tp && tp.attributes.data.templated == 1) {
  102. var p = Ext.getCmp('modx-package-browser-thumbs-view');
  103. p.store.baseParams.tag = n.attributes.data.id;
  104. if(this.changePProvider){
  105. p.store.baseParams.provider = MODx.provider;
  106. this.changePProvider = false;
  107. }
  108. p.run();
  109. Ext.getCmp('modx-package-browser-view').activate(n.attributes.data.name);
  110. } else {
  111. var grid = Ext.getCmp('modx-package-browser-grid');
  112. grid.getStore().setBaseParam('tag', n.attributes.data.id);
  113. grid.getStore().setBaseParam('query', '');
  114. if(this.changeGProvider){
  115. grid.getStore().setBaseParam('provider', MODx.provider);
  116. grid.getStore().removeAll();
  117. this.changeGProvider = false;
  118. }
  119. grid.getStore().load();
  120. grid.activate(n.attributes.data.name);
  121. }
  122. break;
  123. default:
  124. var home = Ext.getCmp('modx-package-browser-home');
  125. home.activate();
  126. home.updateDetail(this.providerInfos);
  127. break;
  128. }
  129. }
  130. ,onBeforeLoad: function(node) {
  131. if(node.attributes.type == 'repository'){
  132. this.loader.baseParams.type = 'repository';
  133. this.loader.baseParams.id = node.attributes.id;
  134. } else if( node.attributes.type == 'undefined' ){
  135. this.getSelectionModel().select(this.root.childNodes[0]);
  136. }
  137. }
  138. ,searchFor: function(name){
  139. var f = Ext.getCmp('package-browser-search-fld');
  140. f.setValue(name);
  141. this.search(f, name);
  142. }
  143. ,search: function(tf, newValue) {
  144. var nv = newValue || tf.originalValue;
  145. var grid = Ext.getCmp('modx-package-browser-grid');
  146. grid.getStore().setBaseParam('tag', '');
  147. grid.getStore().setBaseParam('query', nv);
  148. grid.getStore().setBaseParam('provider', MODx.provider);
  149. grid.getStore().load();
  150. grid.activate(_('search'), nv);
  151. return true;
  152. }
  153. });
  154. Ext.reg('modx-package-browser-tree',MODx.tree.PackageBrowserTree);