panel.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. fred.panel.ElementOptionSet = function (config) {
  2. config = config || {};
  3. config.id = config.id || 'fred-panel-element-option-set';
  4. Ext.applyIf(config, {
  5. border: false,
  6. cls: 'container',
  7. url: fred.config.connectorUrl,
  8. baseParams: {
  9. action: 'mgr/element_option_sets/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.ElementOptionSet.superclass.constructor.call(this, config);
  25. };
  26. Ext.extend(fred.panel.ElementOptionSet, 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_option_sets/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/option_set/update', {id: o.result.object.id});
  65. }
  66. },
  67. getItems: function (config) {
  68. return [
  69. {
  70. html: '<h2>' + ((config.isUpdate == true) ? _('fred.element_option_sets.update') : _('fred.element_option_sets.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. height: 100,
  111. defaults: {
  112. layout: 'form',
  113. labelAlign: 'top',
  114. labelSeparator: '',
  115. anchor: '100%',
  116. border: false
  117. },
  118. items: [
  119. {
  120. columnWidth: 0.7,
  121. border: false,
  122. defaults: {
  123. msgTarget: 'under'
  124. },
  125. items: [
  126. {
  127. xtype: 'textfield',
  128. fieldLabel: _('fred.element_option_sets.name'),
  129. name: 'name',
  130. anchor: '100%',
  131. allowBlank: false
  132. },
  133. {
  134. xtype: 'textarea',
  135. fieldLabel: _('fred.element_option_sets.description'),
  136. name: 'description',
  137. anchor: '100%'
  138. }
  139. ]
  140. },
  141. {
  142. columnWidth: 0.3,
  143. border: false,
  144. defaults: {
  145. msgTarget: 'under'
  146. },
  147. items: [
  148. {
  149. xtype: 'fred-combo-themes',
  150. fieldLabel: _('fred.element_option_sets.theme'),
  151. name: 'theme',
  152. hiddenName: 'theme',
  153. anchor: '100%',
  154. allowBlank: false,
  155. isUpdate: config.isUpdate
  156. },
  157. {
  158. xtype: 'fred-combo-boolean',
  159. useInt: true,
  160. fieldLabel: _('fred.element_option_sets.complete'),
  161. name: 'complete',
  162. hiddenName: 'complete',
  163. anchor: '100%',
  164. value: 1
  165. }
  166. ]
  167. }
  168. ]
  169. }
  170. ]
  171. }
  172. ]
  173. }
  174. ];
  175. },
  176. getColumnsGrid: function (config) {
  177. var items = [
  178. {
  179. html: '<br />',
  180. bodyCssClass: 'transparent-background'
  181. }
  182. ];
  183. items.push([
  184. {
  185. deferredRender: false,
  186. border: true,
  187. defaults: {
  188. autoHeight: true,
  189. layout: 'form',
  190. labelWidth: 150,
  191. bodyCssClass: 'main-wrapper',
  192. layoutOnTabChange: true
  193. },
  194. items: [
  195. {
  196. defaults: {
  197. msgTarget: 'side',
  198. autoHeight: true
  199. },
  200. cls: 'form-with-labels',
  201. border: false,
  202. items: [
  203. {
  204. layout: 'column',
  205. border: false,
  206. height: 100,
  207. defaults: {
  208. layout: 'form',
  209. labelAlign: 'top',
  210. labelSeparator: '',
  211. anchor: '100%',
  212. border: false
  213. },
  214. items: [
  215. {
  216. columnWidth: 1,
  217. border: false,
  218. defaults: {
  219. msgTarget: 'under'
  220. },
  221. items: [
  222. {
  223. xtype: Ext.ComponentMgr.isRegistered('modx-texteditor') ? 'modx-texteditor' : 'textarea',
  224. mimeType: 'application/json',
  225. name: 'data',
  226. id: 'data',
  227. hideLabel: true,
  228. anchor: '100%',
  229. height: 400,
  230. grow: false,
  231. value: ''
  232. }
  233. ]
  234. }
  235. ]
  236. }
  237. ]
  238. }
  239. ]
  240. }
  241. ]);
  242. return items;
  243. }
  244. });
  245. Ext.reg('fred-panel-element-option-set', fred.panel.ElementOptionSet);