panel.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. fred.panel.ElementRTEConfig = function (config) {
  2. config = config || {};
  3. config.id = config.id || 'fred-panel-element-rte-config';
  4. Ext.applyIf(config, {
  5. border: false,
  6. cls: 'container',
  7. url: fred.config.connectorUrl,
  8. baseParams: {
  9. action: 'mgr/element_rte_configs/update'
  10. },
  11. useLoadingMask: true,
  12. items: this.getItems(config),
  13. listeners: {
  14. 'setup': {
  15. fn: this.setup,
  16. scope: this
  17. },
  18. 'success': {
  19. fn: this.success,
  20. scope: this
  21. }
  22. }
  23. });
  24. fred.panel.ElementRTEConfig.superclass.constructor.call(this, config);
  25. };
  26. Ext.extend(fred.panel.ElementRTEConfig, MODx.FormPanel, {
  27. setup: function () {
  28. if (this.config.isUpdate) {
  29. MODx.Ajax.request({
  30. url: this.config.url,
  31. params: {
  32. action: 'mgr/element_rte_configs/get',
  33. id: MODx.request.id
  34. },
  35. listeners: {
  36. 'success': {
  37. fn: function (r) {
  38. if (Array.isArray(r.object.data) && r.object.data.length === 0) {
  39. r.object.data = '';
  40. } else {
  41. if (typeof r.object.data === 'object') {
  42. r.object.data = JSON.stringify(r.object.data, null, 2);
  43. }
  44. }
  45. this.getForm().setValues(r.object);
  46. this.fireEvent('ready', r.object);
  47. MODx.fireEvent('ready');
  48. },
  49. scope: this
  50. }
  51. }
  52. });
  53. } else {
  54. var theme = MODx.request.theme;
  55. if (theme) {
  56. this.getForm().setValues({theme: theme});
  57. }
  58. this.fireEvent('ready');
  59. MODx.fireEvent('ready');
  60. }
  61. },
  62. success: function (o, r) {
  63. if (this.config.isUpdate == false) {
  64. fred.loadPage('element/rte_config/update', {id: o.result.object.id});
  65. }
  66. },
  67. getItems: function (config) {
  68. return [
  69. {
  70. html: '<h2>' + ((config.isUpdate == true) ? _('fred.element_rte_configs.update') : _('fred.element_rte_configs.create')) + '</h2>',
  71. border: false,
  72. cls: 'modx-page-header'
  73. },
  74. {
  75. name: 'id',
  76. xtype: 'hidden'
  77. },
  78. this.getGeneralFields(config),
  79. {
  80. html: '<br />',
  81. bodyCssClass: 'transparent-background'
  82. },
  83. this.getColumnsGrid(config)
  84. ];
  85. },
  86. getGeneralFields: function (config) {
  87. return [
  88. {
  89. deferredRender: false,
  90. border: true,
  91. defaults: {
  92. autoHeight: true,
  93. layout: 'form',
  94. labelWidth: 150,
  95. bodyCssClass: 'main-wrapper',
  96. layoutOnTabChange: true
  97. },
  98. items: [
  99. {
  100. defaults: {
  101. msgTarget: 'side',
  102. autoHeight: true
  103. },
  104. cls: 'form-with-labels',
  105. border: false,
  106. items: [
  107. {
  108. layout: 'column',
  109. border: false,
  110. anchor: '100%',
  111. defaults: {
  112. layout: 'form',
  113. labelAlign: 'top',
  114. labelSeparator: '',
  115. anchor: '100%',
  116. border: false
  117. },
  118. items: [
  119. {
  120. columnWidth: .7,
  121. border: false,
  122. defaults: {
  123. msgTarget: 'under',
  124. anchor: '100%'
  125. },
  126. items: [
  127. {
  128. xtype: 'textfield',
  129. fieldLabel: _('fred.element_rte_configs.name'),
  130. name: 'name',
  131. anchor: '100%',
  132. allowBlank: false
  133. }
  134. ]
  135. },
  136. {
  137. columnWidth: .3,
  138. border: false,
  139. defaults: {
  140. msgTarget: 'under',
  141. anchor: '100%'
  142. },
  143. items: [
  144. {
  145. xtype: 'fred-combo-themes',
  146. fieldLabel: _('fred.element_rte_configs.theme'),
  147. name: 'theme',
  148. hiddenName: 'theme',
  149. anchor: '100%',
  150. allowBlank: false,
  151. isUpdate: config.isUpdate
  152. }
  153. ]
  154. }
  155. ]
  156. },
  157. {
  158. layout: 'column',
  159. border: false,
  160. anchor: '100%',
  161. defaults: {
  162. layout: 'form',
  163. labelAlign: 'top',
  164. labelSeparator: '',
  165. anchor: '100%',
  166. border: false
  167. },
  168. items: [
  169. {
  170. columnWidth: 1,
  171. border: false,
  172. defaults: {
  173. msgTarget: 'under',
  174. anchor: '100%'
  175. },
  176. items: [
  177. {
  178. xtype: 'textarea',
  179. fieldLabel: _('fred.element_rte_configs.description'),
  180. name: 'description',
  181. anchor: '100%',
  182. height: 100
  183. }
  184. ]
  185. }
  186. ]
  187. }
  188. ]
  189. }
  190. ]
  191. }
  192. ];
  193. },
  194. getColumnsGrid: function (config) {
  195. var items = [
  196. {
  197. html: '<br />',
  198. bodyCssClass: 'transparent-background'
  199. }
  200. ];
  201. items.push([
  202. {
  203. deferredRender: false,
  204. border: true,
  205. defaults: {
  206. autoHeight: true,
  207. layout: 'form',
  208. labelWidth: 150,
  209. bodyCssClass: 'main-wrapper',
  210. layoutOnTabChange: true
  211. },
  212. items: [
  213. {
  214. defaults: {
  215. msgTarget: 'side',
  216. autoHeight: true
  217. },
  218. cls: 'form-with-labels',
  219. border: false,
  220. items: [
  221. {
  222. layout: 'column',
  223. border: false,
  224. height: 100,
  225. defaults: {
  226. layout: 'form',
  227. labelAlign: 'top',
  228. labelSeparator: '',
  229. anchor: '100%',
  230. border: false
  231. },
  232. items: [
  233. {
  234. columnWidth: 1,
  235. border: false,
  236. defaults: {
  237. msgTarget: 'under'
  238. },
  239. items: [
  240. {
  241. xtype: Ext.ComponentMgr.isRegistered('modx-texteditor') ? 'modx-texteditor' : 'textarea',
  242. mimeType: 'application/json',
  243. name: 'data',
  244. id: 'data',
  245. hideLabel: true,
  246. anchor: '100%',
  247. height: 400,
  248. grow: false,
  249. value: ''
  250. }
  251. ]
  252. }
  253. ]
  254. }
  255. ]
  256. }
  257. ]
  258. }
  259. ]);
  260. return items;
  261. }
  262. });
  263. Ext.reg('fred-panel-element-rte-config', fred.panel.ElementRTEConfig);