modx.grid.settings.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. MODx.grid.SettingsGrid = function(config) {
  2. config = config || {};
  3. this.exp = new Ext.grid.RowExpander({
  4. tpl : new Ext.XTemplate(
  5. '<p class="desc">{[MODx.util.safeHtml(values.description_trans)]}</p>'
  6. )
  7. });
  8. if (!config.tbar) {
  9. config.tbar = [{
  10. text: _('setting_create')
  11. ,scope: this
  12. ,cls:'primary-button'
  13. ,handler: {
  14. xtype: 'modx-window-setting-create'
  15. ,url: config.url || MODx.config.connector_url
  16. ,blankValues: true
  17. }
  18. }];
  19. }
  20. config.tbar.push('->',{
  21. xtype: 'modx-combo-namespace'
  22. ,name: 'namespace'
  23. ,id: 'modx-filter-namespace'
  24. ,emptyText: _('namespace_filter')
  25. ,preselectValue: MODx.request['ns'] ? MODx.request['ns'] : 'core'
  26. ,allowBlank: false
  27. ,editable: true
  28. ,typeAhead: true
  29. ,forceSelection: true
  30. ,queryParam: 'search'
  31. ,width: 150
  32. ,listeners: {
  33. 'select': {fn: this.filterByNamespace, scope:this}
  34. }
  35. },{
  36. xtype: 'modx-combo-area'
  37. ,name: 'area'
  38. ,id: 'modx-filter-area'
  39. ,emptyText: _('area_filter')
  40. ,value: MODx.request['area']
  41. ,baseParams: {
  42. action: 'system/settings/getAreas'
  43. ,namespace: MODx.request['ns'] ? MODx.request['ns'] : 'core'
  44. }
  45. ,width: 250
  46. ,allowBlank: true
  47. ,editable: true
  48. ,typeAhead: true
  49. ,forceSelection: true
  50. ,listeners: {
  51. 'select': {fn: this.filterByArea, scope:this}
  52. }
  53. },{
  54. xtype: 'textfield'
  55. ,name: 'filter_key'
  56. ,id: 'modx-filter-key'
  57. ,cls: 'x-form-filter'
  58. ,emptyText: _('search_by_key')
  59. ,listeners: {
  60. 'change': {fn: this.filterByKey, scope: this}
  61. ,'render': {fn: function(cmp) {
  62. new Ext.KeyMap(cmp.getEl(), {
  63. key: Ext.EventObject.ENTER
  64. ,fn: this.blur
  65. ,scope: cmp
  66. });
  67. },scope:this}
  68. }
  69. },{
  70. xtype: 'button'
  71. ,id: 'modx-filter-clear'
  72. ,cls: 'x-form-filter-clear'
  73. ,text: _('filter_clear')
  74. ,listeners: {
  75. 'click': {fn: this.clearFilter, scope: this},
  76. 'mouseout': { fn: function(evt){
  77. this.removeClass('x-btn-focus');
  78. }
  79. }
  80. }
  81. });
  82. this.cm = new Ext.grid.ColumnModel({
  83. columns: [this.exp,{
  84. header: _('name')
  85. ,dataIndex: 'name_trans'
  86. ,sortable: true
  87. ,editable: false
  88. ,width: 175
  89. },{
  90. header: _('key')
  91. ,dataIndex: 'key'
  92. ,sortable: true
  93. ,editable: false
  94. ,width: 150
  95. },{
  96. header: _('value')
  97. ,dataIndex: 'value'
  98. ,sortable: true
  99. ,editable: true
  100. ,renderer: this.renderDynField.createDelegate(this,[this],true)
  101. ,width: 260
  102. },{
  103. header: _('last_modified')
  104. ,dataIndex: 'editedon'
  105. ,sortable: true
  106. ,editable: false
  107. ,renderer: this.renderLastModDate.createDelegate(this,[this],true)
  108. ,width: 100
  109. },{
  110. header: _('area')
  111. ,dataIndex: 'area_text'
  112. ,sortable: true
  113. ,hidden: true
  114. ,editable: false
  115. }]
  116. /* Editors are pushed here. I think that they should be in general grid
  117. * definitions (modx.grid.js) and activated via a config property (loadEditor: true) */
  118. ,getCellEditor: function(colIndex, rowIndex) {
  119. var field = this.getDataIndex(colIndex);
  120. if (field == 'value') {
  121. var rec = config.store.getAt(rowIndex);
  122. var xt = {xtype: 'textfield'};
  123. if (rec) {
  124. xt.xtype = rec.get('xtype');
  125. if (xt == 'text-password') {
  126. xt.xtype = 'textfield';
  127. xt.inputType = 'password';
  128. }
  129. }
  130. var o = MODx.load(xt);
  131. return new Ext.grid.GridEditor(o);
  132. }
  133. return Ext.grid.ColumnModel.prototype.getCellEditor.call(this, colIndex, rowIndex);
  134. }
  135. });
  136. Ext.applyIf(config, {
  137. cm: this.cm
  138. ,fields: ['key','name','value','description','xtype','namespace','area','area_text','editedon','oldkey','menu','name_trans','description_trans']
  139. ,url: MODx.config.connector_url
  140. ,baseParams: {
  141. action: 'system/settings/getList'
  142. ,namespace: MODx.request['ns'] ? MODx.request['ns'] : 'core'
  143. ,area: MODx.request['area']
  144. }
  145. ,clicksToEdit: 2
  146. ,grouping: true
  147. ,groupBy: 'area_text'
  148. ,singleText: _('setting')
  149. ,pluralText: _('settings')
  150. ,sortBy: 'key'
  151. ,plugins: this.exp
  152. ,primaryKey: 'key'
  153. ,autosave: true
  154. ,save_action: 'system/settings/updatefromgrid'
  155. ,pageSize: parseInt(MODx.config.default_per_page) || 20
  156. ,paging: true
  157. ,collapseFirst: false
  158. ,tools: [{
  159. id: 'plus'
  160. ,qtip: _('expand_all')
  161. ,handler: this.expandAll
  162. ,scope: this
  163. },{
  164. id: 'minus'
  165. ,hidden: true
  166. ,qtip: _('collapse_all')
  167. ,handler: this.collapseAll
  168. ,scope: this
  169. }]
  170. });
  171. this.view = new Ext.grid.GroupingView({
  172. emptyText: config.emptyText || _('ext_emptymsg')
  173. ,forceFit: true
  174. ,autoFill: true
  175. ,showPreview: true
  176. ,enableRowBody: true
  177. ,scrollOffset: 0
  178. });
  179. MODx.grid.SettingsGrid.superclass.constructor.call(this,config);
  180. };
  181. Ext.extend(MODx.grid.SettingsGrid,MODx.grid.Grid,{
  182. _addEnterKeyHandler: function() {
  183. this.getEl().addKeyListener(Ext.EventObject.ENTER,function() {
  184. this.fireEvent('change');
  185. },this);
  186. }
  187. ,_showMenu: function(g,ri,e) {
  188. e.stopEvent();
  189. e.preventDefault();
  190. this.menu.record = this.getStore().getAt(ri).data;
  191. if (!this.getSelectionModel().isSelected(ri)) {
  192. this.getSelectionModel().selectRow(ri);
  193. }
  194. this.menu.removeAll();
  195. var m = [];
  196. if (this.menu.record.menu) {
  197. m = this.menu.record.menu;
  198. } else {
  199. m.push({
  200. text: _('setting_update')
  201. ,handler: this.updateSetting
  202. },'-',{
  203. text: _('setting_remove')
  204. ,handler: this.removeSetting
  205. });
  206. }
  207. if (m.length > 0) {
  208. this.addContextMenuItem(m);
  209. this.menu.showAt(e.xy);
  210. }
  211. }
  212. ,removeSetting: function() {
  213. return this.remove('setting_remove_confirm', 'system/settings/remove');
  214. }
  215. ,updateSetting: function(btn,e) {
  216. var r = this.menu.record;
  217. r.fk = Ext.isDefined(this.config.fk) ? this.config.fk : 0;
  218. var uss = MODx.load({
  219. xtype: 'modx-window-setting-update'
  220. ,record: r
  221. ,grid: this
  222. ,listeners: {
  223. 'success': {fn:function(r) {
  224. this.refresh();
  225. },scope:this}
  226. }
  227. });
  228. uss.reset();
  229. uss.setValues(r);
  230. uss.show(e.target);
  231. }
  232. ,clearFilter: function() {
  233. var ns = MODx.request['ns'] ? MODx.request['ns'] : Ext.getCmp('modx-filter-namespace').getValue();
  234. var area = MODx.request['area'] ? MODx.request['area'] : '';
  235. this.getStore().baseParams = this.initialConfig.baseParams;
  236. var acb = Ext.getCmp('modx-filter-area');
  237. if (acb) {
  238. acb.store.baseParams['namespace'] = ns;
  239. acb.store.load();
  240. acb.reset();
  241. }
  242. Ext.getCmp('modx-filter-namespace').setValue(ns);
  243. Ext.getCmp('modx-filter-key').reset();
  244. this.getStore().baseParams.namespace = ns;
  245. this.getStore().baseParams.area = area;
  246. this.getStore().baseParams.key = '';
  247. this.getBottomToolbar().changePage(1);
  248. // this.refresh();
  249. }
  250. ,filterByKey: function(tf,newValue,oldValue) {
  251. this.getStore().baseParams.key = newValue;
  252. this.getStore().baseParams.namespace = '';
  253. this.getBottomToolbar().changePage(1);
  254. //this.refresh();
  255. return true;
  256. }
  257. ,filterByNamespace: function(cb,rec,ri) {
  258. this.getStore().baseParams['namespace'] = rec.data['name'];
  259. this.getStore().baseParams['area'] = '';
  260. this.getBottomToolbar().changePage(1);
  261. //this.refresh();
  262. var acb = Ext.getCmp('modx-filter-area');
  263. if (acb) {
  264. var s = acb.store;
  265. s.baseParams['namespace'] = rec.data.name;
  266. s.removeAll();
  267. s.load();
  268. acb.setValue('');
  269. }
  270. }
  271. ,filterByArea: function(cb,rec,ri) {
  272. this.getStore().baseParams['area'] = rec.data['v'];
  273. this.getBottomToolbar().changePage(1);
  274. // this.refresh();
  275. }
  276. ,renderDynField: function(v,md,rec,ri,ci,s,g) {
  277. var r = s.getAt(ri).data;
  278. v = Ext.util.Format.htmlEncode(v);
  279. var f;
  280. if (r.xtype == 'combo-boolean' || r.xtype == 'modx-combo-boolean') {
  281. f = MODx.grid.Grid.prototype.rendYesNo;
  282. return f(v,md,rec,ri,ci,s,g);
  283. } else if (r.xtype === 'datefield') {
  284. f = Ext.util.Format.dateRenderer(MODx.config.manager_date_format);
  285. return f(v,md,rec,ri,ci,s,g);
  286. } else if (r.xtype === 'text-password' || r.xtype == 'modx-text-password') {
  287. f = MODx.grid.Grid.prototype.rendPassword;
  288. return f(v,md,rec,ri,ci,s,g);
  289. } else if (r.xtype.substr(0,5) == 'combo' || r.xtype.substr(0,10) == 'modx-combo') {
  290. var cm = g.getColumnModel();
  291. var ed = cm.getCellEditor(ci,ri);
  292. if (!ed) {
  293. var o = Ext.ComponentMgr.create({xtype: r.xtype || 'textfield'});
  294. ed = new Ext.grid.GridEditor(o);
  295. cm.setEditor(ci,ed);
  296. }
  297. if (ed.store && !ed.store.isLoaded && ed.config.mode != 'local') {
  298. ed.store.load();
  299. ed.store.isLoaded = true;
  300. }
  301. f = Ext.util.Format.comboRenderer(ed.field,v);
  302. return f(v,md,rec,ri,ci,s,g);
  303. }
  304. return v;
  305. }
  306. /**
  307. * Prevent display updated date for unmodified records
  308. *
  309. * @param {String} value
  310. *
  311. * @returns {String}
  312. */
  313. ,renderLastModDate: function(value) {
  314. if (Ext.isEmpty(value)) {
  315. return '—';
  316. }
  317. // Return formatted date (server side)
  318. return value;
  319. // JavaScripts time is in milliseconds
  320. //return new Date(value*1000).format(MODx.config.manager_date_format + ' ' + MODx.config.manager_time_format);
  321. }
  322. });
  323. Ext.reg('modx-grid-settings',MODx.grid.SettingsGrid);
  324. MODx.combo.Area = function(config) {
  325. config = config || {};
  326. Ext.applyIf(config,{
  327. name: 'area'
  328. ,hiddenName: 'area'
  329. ,displayField: 'd'
  330. ,valueField: 'v'
  331. ,fields: ['d','v']
  332. ,url: MODx.config.connector_url
  333. ,baseParams: {
  334. action: 'system/settings/getAreas'
  335. }
  336. });
  337. MODx.combo.Area.superclass.constructor.call(this,config);
  338. };
  339. Ext.extend(MODx.combo.Area,MODx.combo.ComboBox);
  340. Ext.reg('modx-combo-area',MODx.combo.Area);
  341. MODx.window.CreateSetting = function(config) {
  342. config = config || {};
  343. config.keyField = config.keyField || {};
  344. Ext.applyIf(config,{
  345. title: _('setting_create')
  346. ,width: 600
  347. ,url: config.url
  348. ,action: 'system/settings/create'
  349. ,autoHeight: true
  350. ,fields: [{
  351. layout: 'column'
  352. ,border: false
  353. ,defaults: {
  354. layout: 'form'
  355. ,labelAlign: 'top'
  356. ,anchor: '100%'
  357. ,border: false
  358. }
  359. ,autoHeight: true
  360. ,items: [{
  361. columnWidth: .5
  362. ,items: [{
  363. xtype: 'hidden'
  364. ,name: 'fk'
  365. ,id: 'modx-cs-fk'
  366. ,value: config.fk || 0
  367. },Ext.applyIf(config.keyField, {
  368. xtype: 'textfield'
  369. ,fieldLabel: _('key')
  370. ,name: 'key'
  371. ,id: 'modx-cs-key'
  372. ,maxLength: 100
  373. ,anchor: '100%'
  374. }),{
  375. xtype: 'label'
  376. ,forId: 'modx-cs-key'
  377. ,html: _('key_desc')
  378. ,cls: 'desc-under'
  379. },{
  380. xtype: 'textfield'
  381. ,fieldLabel: _('name')
  382. ,name: 'name'
  383. ,id: 'modx-cs-name'
  384. ,anchor: '100%'
  385. },{
  386. xtype: 'label'
  387. ,forId: 'modx-cs-name'
  388. ,html: _('name_desc')
  389. ,cls: 'desc-under'
  390. },{
  391. xtype: 'textarea'
  392. ,fieldLabel: _('description')
  393. ,name: 'description'
  394. ,id: 'modx-cs-description'
  395. ,allowBlank: true
  396. ,anchor: '100%'
  397. },{
  398. xtype: 'label'
  399. ,forId: 'modx-cs-description'
  400. ,html: _('description_desc')
  401. ,cls: 'desc-under'
  402. }]
  403. },{
  404. columnWidth: .5
  405. ,items: [{
  406. xtype: 'modx-combo-xtype-spec'
  407. ,fieldLabel: _('xtype')
  408. ,description: MODx.expandHelp ? '' : _('xtype_desc')
  409. ,id: 'modx-cs-xtype'
  410. ,anchor: '100%'
  411. },{
  412. xtype: 'label'
  413. ,forId: 'modx-cs-xtype'
  414. ,html: _('xtype_desc')
  415. ,cls: 'desc-under'
  416. },{
  417. xtype: 'modx-combo-namespace'
  418. ,fieldLabel: _('namespace')
  419. ,name: 'namespace'
  420. ,id: 'modx-cs-namespace'
  421. ,value: Ext.getCmp('modx-filter-namespace').getValue()
  422. ,anchor: '100%'
  423. },{
  424. xtype: 'label'
  425. ,forId: 'modx-cs-namespace'
  426. ,html: _('namespace_desc')
  427. ,cls: 'desc-under'
  428. },{
  429. xtype: 'textfield'
  430. ,fieldLabel: _('area_lexicon_string')
  431. ,description: _('area_lexicon_string_msg')
  432. ,name: 'area'
  433. ,id: 'modx-cs-area'
  434. ,anchor: '100%'
  435. ,value: Ext.getCmp('modx-filter-area').getValue()
  436. },{
  437. xtype: 'label'
  438. ,forId: 'modx-cs-area'
  439. ,html: _('area_lexicon_string_msg')
  440. ,cls: 'desc-under'
  441. }]
  442. }]
  443. },{
  444. xtype: 'textarea'
  445. ,fieldLabel: _('value')
  446. ,name: 'value'
  447. ,id: 'modx-cs-value'
  448. ,autoHeight: true
  449. ,anchor: '100%'
  450. }]
  451. ,keys: []
  452. });
  453. MODx.window.CreateSetting.superclass.constructor.call(this,config);
  454. this.on('show',function() {
  455. this.reset();
  456. this.setValues({
  457. namespace: Ext.getCmp('modx-filter-namespace').value
  458. ,area: Ext.getCmp('modx-filter-area').value
  459. });
  460. },this);
  461. };
  462. Ext.extend(MODx.window.CreateSetting,MODx.Window);
  463. Ext.reg('modx-window-setting-create',MODx.window.CreateSetting);
  464. MODx.combo.xType = function(config) {
  465. config = config || {};
  466. Ext.applyIf(config,{
  467. store: new Ext.data.SimpleStore({
  468. fields: ['d','v']
  469. ,data: [[_('textfield'),'textfield']
  470. ,[_('textarea'),'textarea']
  471. ,[_('yesno'),'combo-boolean']
  472. ,[_('password'),'text-password']
  473. ,[_('category'),'modx-combo-category']
  474. ,[_('charset'),'modx-combo-charset']
  475. ,[_('country'),'modx-combo-country']
  476. ,[_('context'),'modx-combo-context']
  477. ,[_('namespace'),'modx-combo-namespace']
  478. ,[_('template'),'modx-combo-template']
  479. ,[_('user'),'modx-combo-user']
  480. ,[_('usergroup'),'modx-combo-usergroup']
  481. ,[_('language'),'modx-combo-language']
  482. ,[_('source'),'modx-combo-source']
  483. ,[_('source_type'),'modx-combo-source-type']
  484. ,[_('setting_manager_theme'),'modx-combo-manager-theme']
  485. ]
  486. })
  487. ,displayField: 'd'
  488. ,valueField: 'v'
  489. ,mode: 'local'
  490. ,name: 'xtype'
  491. ,hiddenName: 'xtype'
  492. ,triggerAction: 'all'
  493. ,editable: false
  494. ,selectOnFocus: false
  495. ,value: 'textfield'
  496. });
  497. MODx.combo.xType.superclass.constructor.call(this,config);
  498. };
  499. Ext.extend(MODx.combo.xType,Ext.form.ComboBox);
  500. Ext.reg('modx-combo-xtype-spec',MODx.combo.xType);
  501. MODx.window.UpdateSetting = function(config) {
  502. config = config || {};
  503. this.ident = config.ident || 'modx-uss-'+Ext.id();
  504. Ext.applyIf(config,{
  505. title: _('setting_update')
  506. ,width: 600
  507. ,url: config.grid.config.url
  508. ,action: 'system/settings/update'
  509. ,autoHeight: true
  510. ,fields: [{
  511. layout: 'column'
  512. ,border: false
  513. ,defaults: {
  514. layout: 'form'
  515. ,labelAlign: 'top'
  516. ,anchor: '100%'
  517. ,border: false
  518. }
  519. ,autoHeight: true
  520. ,items: [{
  521. columnWidth: .5
  522. ,items: [{
  523. xtype: 'hidden'
  524. ,name: 'fk'
  525. ,id: 'modx-'+this.ident+'-fk'
  526. ,value: config.fk || 0
  527. },{
  528. xtype: 'statictextfield'
  529. ,fieldLabel: _('key')
  530. ,description: MODx.expandHelp ? '' : _('key_desc')
  531. ,name: 'key'
  532. ,id: 'modx-'+this.ident+'-key'
  533. ,maxLength: 100
  534. ,submitValue: true
  535. ,anchor: '100%'
  536. },{
  537. xtype: MODx.expandHelp ? 'label' : 'hidden'
  538. ,forId: 'modx-'+this.ident+'-key'
  539. ,html: _('key_desc')
  540. ,cls: 'desc-under'
  541. },{
  542. xtype: 'textfield'
  543. ,fieldLabel: _('name')
  544. ,description: MODx.expandHelp ? '' : _('name_desc')
  545. ,name: 'name'
  546. ,id: 'modx-'+this.ident+'-name'
  547. ,anchor: '100%'
  548. },{
  549. xtype: MODx.expandHelp ? 'label' : 'hidden'
  550. ,forId: 'modx-'+this.ident+'-name'
  551. ,html: _('name_desc')
  552. ,cls: 'desc-under'
  553. },{
  554. xtype: 'textarea'
  555. ,fieldLabel: _('description')
  556. ,description: MODx.expandHelp ? '' : _('description_desc')
  557. ,name: 'description'
  558. ,id: 'modx-'+this.ident+'-description'
  559. ,allowBlank: true
  560. ,anchor: '100%'
  561. },{
  562. xtype: MODx.expandHelp ? 'label' : 'hidden'
  563. ,forId: 'modx-'+this.ident+'-description'
  564. ,html: _('description_desc')
  565. ,cls: 'desc-under'
  566. }]
  567. },{
  568. columnWidth: .5
  569. ,items: [{
  570. xtype: 'modx-combo-xtype-spec'
  571. ,fieldLabel: _('xtype')
  572. ,description: MODx.expandHelp ? '' : _('xtype_desc')
  573. ,id: 'modx-'+this.ident+'-xtype'
  574. ,anchor: '100%'
  575. },{
  576. xtype: MODx.expandHelp ? 'label' : 'hidden'
  577. ,forId: 'modx-'+this.ident+'-xtype'
  578. ,html: _('xtype_desc')
  579. ,cls: 'desc-under'
  580. },{
  581. xtype: 'modx-combo-namespace'
  582. ,fieldLabel: _('namespace')
  583. ,description: MODx.expandHelp ? '' : _('namespace_desc')
  584. ,name: 'namespace'
  585. ,id: 'modx-'+this.ident+'-namespace'
  586. ,value: 'core'
  587. ,anchor: '100%'
  588. },{
  589. xtype: MODx.expandHelp ? 'label' : 'hidden'
  590. ,forId: 'modx-'+this.ident+'-namespace'
  591. ,html: _('namespace_desc')
  592. ,cls: 'desc-under'
  593. },{
  594. xtype: 'textfield'
  595. ,fieldLabel: _('area_lexicon_string')
  596. ,description: MODx.expandHelp ? '' : _('area_lexicon_string_msg')
  597. ,name: 'area'
  598. ,id: 'modx-'+this.ident+'-area'
  599. ,anchor: '100%'
  600. },{
  601. xtype: MODx.expandHelp ? 'label' : 'hidden'
  602. ,forId: 'modx-'+this.ident+'-area'
  603. ,html: _('area_lexicon_string_msg')
  604. ,cls: 'desc-under'
  605. }]
  606. }]
  607. },{
  608. xtype: config.record ? config.record.xtype : 'textarea'
  609. ,fieldLabel: _('value')
  610. ,name: 'value'
  611. ,hiddenName: 'value'
  612. ,id: 'modx-'+this.ident+'-value'
  613. ,autoHeight: true
  614. ,anchor: '100%'
  615. }]
  616. ,keys: []
  617. });
  618. MODx.window.UpdateSetting.superclass.constructor.call(this,config);
  619. };
  620. Ext.extend(MODx.window.UpdateSetting,MODx.Window);
  621. Ext.reg('modx-window-setting-update',MODx.window.UpdateSetting);