modx.grid.local.property.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. MODx.grid.LocalProperty = function(config) {
  2. config = config || {};
  3. Ext.applyIf(config,{
  4. dynProperty: 'xtype'
  5. ,dynField: 'value'
  6. ,propertyRecord: [{name: 'name'},{name: 'value'}]
  7. ,data: []
  8. });
  9. MODx.grid.LocalProperty.superclass.constructor.call(this,config);
  10. this.propRecord = Ext.data.Record.create(config.propertyRecord);
  11. };
  12. Ext.extend(MODx.grid.LocalProperty,MODx.grid.LocalGrid,{
  13. onCellDblClick: function(g,ri,ci,e) {
  14. var cm = this.getColumnModel();
  15. if (cm.getColumnId(ci) == this.config.dynField) {
  16. e.preventDefault();
  17. var r = this.getStore().getAt(ri).data;
  18. this.initEditor(cm,ci,ri,r);
  19. this.startEditing(ri,ci);
  20. }
  21. }
  22. ,initEditor: function(cm,ci,ri,r) {
  23. cm.setEditable(ci,true);
  24. var xtype = this.config.dynProperty;
  25. var o;
  26. if (r[xtype] == 'list') {
  27. o = this.createCombo(r);
  28. } else {
  29. var z = {};
  30. z[xtype] = r[xtype] || 'textfield';
  31. try {
  32. o = Ext.ComponentMgr.create(z);
  33. } catch (e) {
  34. z[xtype] = 'textfield';
  35. o = MODx.load(z);
  36. }
  37. }
  38. var ed = new Ext.grid.GridEditor(o);
  39. cm.setEditor(ci,ed);
  40. return ed;
  41. }
  42. ,renderDynField: function(v,md,rec,ri,ci,s,g) {
  43. var r = s.getAt(ri).data;
  44. var f,idx;
  45. var oz = v;
  46. var xtype = this.config.dynProperty;
  47. if (!r[xtype] || r[xtype] == 'combo-boolean') {
  48. f = MODx.grid.Grid.prototype.rendYesNo;
  49. oz = f(v == 1,md);
  50. } else if (r[xtype] === 'datefield') {
  51. f = Ext.util.Format.dateRenderer('Y-m-d');
  52. oz = f(v);
  53. } else if (r[xtype] === 'password') {
  54. f = this.rendPassword;
  55. oz = f(v,md);
  56. } else if (r[xtype].substr(0,5) == 'combo' || r[xtype] == 'list' || r[xtype].substr(0,9) == 'modx-combo') {
  57. var cm = g.getColumnModel();
  58. var ed = cm.getCellEditor(ci,ri);
  59. var cb;
  60. if (!ed) {
  61. r.xtype = r.xtype || 'combo-boolean';
  62. cb = this.createCombo(r);
  63. ed = new Ext.grid.GridEditor(cb);
  64. cm.setEditor(ci,ed);
  65. } else if (ed && ed.field && ed.field.xtype == 'modx-combo') {
  66. cb = ed.field;
  67. }
  68. if (r[xtype] != 'list') {
  69. f = Ext.util.Format.comboRenderer(ed.field);
  70. oz = f(v);
  71. } else if (cb) {
  72. idx = cb.getStore().find(cb.valueField,v);
  73. rec = cb.getStore().getAt(idx);
  74. if (rec) {
  75. oz = rec.get(cb.displayField);
  76. } else {
  77. oz = v;
  78. }
  79. }
  80. }
  81. return Ext.util.Format.htmlEncode(oz);
  82. }
  83. ,createCombo: function(p) {
  84. var obj;
  85. try {
  86. obj = Ext.ComponentMgr.create({ xtype: r.xtype, id: Ext.id() });
  87. } catch(e) {
  88. try {
  89. var flds = p.options;
  90. var data = [];
  91. for (var i=0;i<flds.length;i=i+1) {
  92. data.push([flds[i].name,flds[i].value,flds[i].text]);
  93. }
  94. obj = MODx.load({
  95. xtype: 'modx-combo'
  96. ,store: new Ext.data.SimpleStore({
  97. fields: ['d','v','t']
  98. ,data: data
  99. })
  100. ,displayField: 'd'
  101. ,valueField: 'v'
  102. ,mode: 'local'
  103. ,triggerAction: 'all'
  104. ,editable: false
  105. ,selectOnFocus: false
  106. ,preventRender: true
  107. });
  108. } catch (e2) {
  109. obj = Ext.ComponentMgr.create({ xtype: 'combo-boolean', id: Ext.id() });
  110. }
  111. }
  112. return obj;
  113. }
  114. });
  115. Ext.reg('grid-local-property',MODx.grid.LocalProperty);