modx.panel.source.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. MODx.panel.Source = function(config) {
  2. config = config || {};
  3. Ext.applyIf(config,{
  4. id: 'modx-panel-source'
  5. ,url: MODx.config.connector_url
  6. ,baseParams: {
  7. action: 'source/update'
  8. }
  9. ,defaults: { collapsible: false ,autoHeight: true }
  10. ,cls: 'container form-with-labels'
  11. ,items: [{
  12. html: _('source')
  13. ,id: 'modx-source-header'
  14. ,xtype: 'modx-header'
  15. },{
  16. xtype: 'modx-tabs'
  17. ,defaults: {
  18. autoHeight: true
  19. ,border: true
  20. ,bodyCssClass: 'tab-panel-wrapper'
  21. }
  22. ,id: 'modx-source-tabs'
  23. ,forceLayout: true
  24. ,deferredRender: false
  25. ,stateful: true
  26. ,stateId: 'modx-source-tabpanel'
  27. ,stateEvents: ['tabchange']
  28. ,getState:function() {
  29. return {activeTab:this.items.indexOf(this.getActiveTab())};
  30. }
  31. ,items: [{
  32. title: _('general_information')
  33. ,defaults: { border: false, msgTarget: 'side' }
  34. ,layout: 'form'
  35. ,id: 'modx-dashboard-form'
  36. ,labelWidth: 150
  37. ,items: [{
  38. xtype: 'panel'
  39. ,border: false
  40. ,cls: 'main-wrapper'
  41. ,layout: 'form'
  42. ,labelAlign: 'top'
  43. ,items: [{
  44. layout: 'column'
  45. ,border: false
  46. ,defaults: {
  47. layout: 'form'
  48. ,labelAlign: 'top'
  49. ,anchor: '100%'
  50. ,border: false
  51. }
  52. ,items: [{
  53. columnWidth: .65
  54. ,cls: 'main-content'
  55. ,items: [{
  56. xtype: 'hidden'
  57. ,name: 'id'
  58. ,id: 'modx-source-id'
  59. ,value: config.record.id
  60. },{
  61. name: 'name'
  62. ,id: 'modx-source-name'
  63. ,xtype: 'textfield'
  64. ,fieldLabel: _('name')
  65. ,description: MODx.expandHelp ? '' : _('source_name_desc')
  66. ,allowBlank: false
  67. ,enableKeyEvents: true
  68. ,anchor: '100%'
  69. ,listeners: {
  70. 'keyup': {scope:this,fn:function(f,e) {
  71. Ext.getCmp('modx-source-header').getEl().update(_('source')+': '+f.getValue());
  72. }}
  73. }
  74. },{
  75. xtype: MODx.expandHelp ? 'label' : 'hidden'
  76. ,forId: 'modx-source-name'
  77. ,html: _('source_name_desc')
  78. ,cls: 'desc-under'
  79. },{
  80. name: 'description'
  81. ,id: 'modx-source-description'
  82. ,xtype: 'textarea'
  83. ,fieldLabel: _('description')
  84. ,description: MODx.expandHelp ? '' : _('source_description_desc')
  85. ,anchor: '100%'
  86. ,grow: true
  87. },{
  88. xtype: MODx.expandHelp ? 'label' : 'hidden'
  89. ,forId: 'modx-source-description'
  90. ,html: _('source_description_desc')
  91. ,cls: 'desc-under'
  92. }]
  93. },{
  94. columnWidth: .35
  95. ,cls: 'main-content'
  96. ,items: [{
  97. name: 'class_key'
  98. ,hiddenName: 'class_key'
  99. ,id: 'modx-source-type'
  100. ,xtype: 'modx-combo-source-type'
  101. ,fieldLabel: _('source_type')
  102. ,description: MODx.expandHelp ? '' : _('source_type_desc')
  103. ,anchor: '100%'
  104. },{
  105. xtype: MODx.expandHelp ? 'label' : 'hidden'
  106. ,forId: 'modx-source-type'
  107. ,html: _('source_type_desc')
  108. ,cls: 'desc-under'
  109. }]
  110. }]
  111. }]
  112. },{
  113. html: '<p>'+_('source_properties.intro_msg')+'</p>'
  114. ,xtype: 'modx-description'
  115. },{
  116. xtype: 'modx-grid-source-properties'
  117. ,preventRender: true
  118. ,source: config.record.id
  119. ,defaultProperties: config.defaultProperties
  120. ,autoHeight: true
  121. ,cls: 'main-wrapper'
  122. ,listeners: {
  123. 'afterRemoveRow': {fn:this.markDirty,scope:this}
  124. }
  125. }]
  126. },{
  127. title: _('access')
  128. ,hideMode: 'offsets'
  129. ,items: [{
  130. html: '<p>'+_('source.access.intro_msg')+'</p>'
  131. ,xtype: 'modx-description'
  132. },{
  133. xtype: 'modx-grid-source-access'
  134. ,preventRender: true
  135. ,source: config.record.id
  136. ,autoHeight: true
  137. ,cls: 'main-wrapper'
  138. ,listeners: {
  139. 'afterRemoveRow': {fn:this.markDirty,scope:this}
  140. ,'updateRole': {fn:this.markDirty,scope:this}
  141. ,'addMember': {fn:this.markDirty,scope:this}
  142. }
  143. }]
  144. }]
  145. }]
  146. ,listeners: {
  147. 'setup': {fn:this.setup,scope:this}
  148. ,'success': {fn:this.success,scope:this}
  149. ,'beforeSubmit': {fn:this.beforeSubmit,scope:this}
  150. }
  151. });
  152. MODx.panel.Source.superclass.constructor.call(this,config);
  153. };
  154. Ext.extend(MODx.panel.Source,MODx.FormPanel,{
  155. initialized: false
  156. ,setup: function() {
  157. if (this.initialized) { return false; }
  158. if (Ext.isEmpty(this.config.record.id)) {
  159. this.fireEvent('ready');
  160. return false;
  161. }
  162. this.getForm().setValues(this.config.record);
  163. /* The component rendering is deferred since we are not using renderTo */
  164. Ext.getCmp('modx-source-header').html = _('source')+': '+this.config.record.name;
  165. var g,d;
  166. if (!Ext.isEmpty(this.config.record.properties)) {
  167. g = Ext.getCmp('modx-grid-source-properties');
  168. if (g) {
  169. g.defaultProperties = this.config.defaultProperties;
  170. g.getStore().loadData(this.config.record.properties);
  171. }
  172. }
  173. if (!Ext.isEmpty(this.config.record.access)) {
  174. d = this.config.record.access;
  175. g = Ext.getCmp('modx-grid-source-access');
  176. if (g) {
  177. d = Ext.decode(d);
  178. if (!Ext.isEmpty(d)) {
  179. g.defaultProperties = d;
  180. g.getStore().loadData(d);
  181. }
  182. }
  183. }
  184. this.fireEvent('ready',this.config.record);
  185. MODx.fireEvent('ready');
  186. this.initialized = true;
  187. }
  188. ,beforeSubmit: function(o) {
  189. var bp = {};
  190. var sp = Ext.getCmp('modx-grid-source-properties');
  191. if (sp) {
  192. bp.properties = sp.encode();
  193. }
  194. var ap = Ext.getCmp('modx-grid-source-access');
  195. if (ap) {
  196. bp.access = ap.encode();
  197. }
  198. Ext.apply(o.form.baseParams,bp);
  199. }
  200. ,success: function(o) {
  201. if (Ext.isEmpty(this.config.record) || Ext.isEmpty(this.config.record.id)) {
  202. MODx.loadPage('source/update', 'id='+o.result.object.id);
  203. } else {
  204. Ext.getCmp('modx-abtn-save').setDisabled(false);
  205. var wg = Ext.getCmp('modx-grid-source-properties');
  206. if (wg) { wg.getStore().commitChanges(); }
  207. var ag = Ext.getCmp('modx-grid-source-access');
  208. if (ag) { ag.getStore().commitChanges(); }
  209. }
  210. }
  211. });
  212. Ext.reg('modx-panel-source',MODx.panel.Source);