MODx.grid.LocalProperty = function(config) { config = config || {}; Ext.applyIf(config,{ dynProperty: 'xtype' ,dynField: 'value' ,propertyRecord: [{name: 'name'},{name: 'value'}] ,data: [] }); MODx.grid.LocalProperty.superclass.constructor.call(this,config); this.propRecord = Ext.data.Record.create(config.propertyRecord); }; Ext.extend(MODx.grid.LocalProperty,MODx.grid.LocalGrid,{ onCellDblClick: function(g,ri,ci,e) { var cm = this.getColumnModel(); if (cm.getColumnId(ci) == this.config.dynField) { e.preventDefault(); var r = this.getStore().getAt(ri).data; this.initEditor(cm,ci,ri,r); this.startEditing(ri,ci); } } ,initEditor: function(cm,ci,ri,r) { cm.setEditable(ci,true); var xtype = this.config.dynProperty; var o; if (r[xtype] == 'list') { o = this.createCombo(r); } else { var z = {}; z[xtype] = r[xtype] || 'textfield'; try { o = Ext.ComponentMgr.create(z); } catch (e) { z[xtype] = 'textfield'; o = MODx.load(z); } } var ed = new Ext.grid.GridEditor(o); cm.setEditor(ci,ed); return ed; } ,renderDynField: function(v,md,rec,ri,ci,s,g) { var r = s.getAt(ri).data; var f,idx; var oz = v; var xtype = this.config.dynProperty; if (!r[xtype] || r[xtype] == 'combo-boolean') { f = MODx.grid.Grid.prototype.rendYesNo; oz = f(v == 1,md); } else if (r[xtype] === 'datefield') { f = Ext.util.Format.dateRenderer('Y-m-d'); oz = f(v); } else if (r[xtype] === 'password') { f = this.rendPassword; oz = f(v,md); } else if (r[xtype].substr(0,5) == 'combo' || r[xtype] == 'list' || r[xtype].substr(0,9) == 'modx-combo') { var cm = g.getColumnModel(); var ed = cm.getCellEditor(ci,ri); var cb; if (!ed) { r.xtype = r.xtype || 'combo-boolean'; cb = this.createCombo(r); ed = new Ext.grid.GridEditor(cb); cm.setEditor(ci,ed); } else if (ed && ed.field && ed.field.xtype == 'modx-combo') { cb = ed.field; } if (r[xtype] != 'list') { f = Ext.util.Format.comboRenderer(ed.field); oz = f(v); } else if (cb) { idx = cb.getStore().find(cb.valueField,v); rec = cb.getStore().getAt(idx); if (rec) { oz = rec.get(cb.displayField); } else { oz = v; } } } return Ext.util.Format.htmlEncode(oz); } ,createCombo: function(p) { var obj; try { obj = Ext.ComponentMgr.create({ xtype: r.xtype, id: Ext.id() }); } catch(e) { try { var flds = p.options; var data = []; for (var i=0;i