194 lines
No EOL
6.4 KiB
JavaScript
194 lines
No EOL
6.4 KiB
JavaScript
YAHOO.ext.grid.PropsDataModel = function(propertyNames, source){
|
|
YAHOO.ext.grid.PropsDataModel.superclass.constructor.call(this, []);
|
|
if(source){
|
|
this.setSource(source);
|
|
}
|
|
this.names = propertyNames || {};
|
|
};
|
|
YAHOO.extendX(YAHOO.ext.grid.PropsDataModel, YAHOO.ext.grid.DefaultDataModel, {
|
|
setSource : function(o){
|
|
this.source = o;
|
|
var data = [];
|
|
for(var key in o){
|
|
if(this.isEditableValue(o[key])){
|
|
var vals = [key, o[key]];
|
|
vals.key = key;
|
|
data.push(vals);
|
|
}
|
|
}
|
|
this.removeAll();
|
|
this.addRows(data);
|
|
},
|
|
|
|
getRowId: function(rowIndex){
|
|
return this.data[rowIndex].key;
|
|
},
|
|
|
|
getPropertyName: function(rowIndex){
|
|
return this.data[rowIndex].key;
|
|
},
|
|
|
|
isEditableValue: function(val){
|
|
if(val && val instanceof Date){
|
|
return true;
|
|
}else if(typeof val == 'object' || typeof val == 'function'){
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
|
|
setValueAt : function(value, rowIndex, colIndex){
|
|
var origVal = this.getValueAt(rowIndex, colIndex);
|
|
if(typeof origVal == 'boolean'){
|
|
value = (value == 'true' || value == '1');
|
|
}
|
|
YAHOO.ext.grid.PropsDataModel.superclass.setValueAt.call(this, value, rowIndex, colIndex);
|
|
var key = this.data[rowIndex].key;
|
|
if(key){
|
|
this.source[key] = value;
|
|
}
|
|
},
|
|
|
|
getName : function(propName){
|
|
if(typeof this.names[propName] != 'undefined'){
|
|
return this.names[propName];
|
|
}
|
|
return propName;
|
|
},
|
|
|
|
getSource : function(){
|
|
return this.source;
|
|
}
|
|
});
|
|
YAHOO.ext.grid.PropsColumnModel = function(dataModel, customEditors){
|
|
YAHOO.ext.grid.PropsColumnModel.superclass.constructor.call(this, [
|
|
{header: 'Name', sortable: true},
|
|
{header: 'Value'}
|
|
]);
|
|
this.dataModel = dataModel;
|
|
this.bselect = YAHOO.ext.DomHelper.append(document.body, {
|
|
tag: 'select', cls: 'ygrid-editor', children: [
|
|
{tag: 'option', value: 'true', html: 'true'},
|
|
{tag: 'option', value: 'false', html: 'false'}
|
|
]
|
|
});
|
|
YAHOO.util.Dom.generateId(this.bselect);
|
|
this.editors = {
|
|
'date' : new YAHOO.ext.grid.DateEditor(),
|
|
'string' : new YAHOO.ext.grid.TextEditor(),
|
|
'number' : new YAHOO.ext.grid.NumberEditor(),
|
|
'boolean' : new YAHOO.ext.grid.SelectEditor(this.bselect)
|
|
};
|
|
this.customEditors = customEditors || {};
|
|
this.renderCellDelegate = this.renderCell.createDelegate(this);
|
|
};
|
|
|
|
YAHOO.extendX(YAHOO.ext.grid.PropsColumnModel, YAHOO.ext.grid.DefaultColumnModel, {
|
|
isCellEditable : function(colIndex, rowIndex){
|
|
return colIndex == 1;
|
|
},
|
|
|
|
getRenderer : function(col){
|
|
if(col == 1){
|
|
return this.renderCellDelegate;
|
|
}
|
|
return YAHOO.ext.grid.DefaultColumnModel.defaultRenderer;
|
|
},
|
|
|
|
renderCell : function(val, rowIndex, colIndex){
|
|
if(val instanceof Date){
|
|
return this.renderDate(val);
|
|
}else if(typeof val == 'boolean'){
|
|
return this.renderBool(val);
|
|
}else{
|
|
return val;
|
|
}
|
|
},
|
|
|
|
getCellEditor : function(colIndex, rowIndex){
|
|
var propName = this.dataModel.getPropertyName(rowIndex);
|
|
if(this.customEditors[propName]){
|
|
return this.customEditors[propName];
|
|
}
|
|
var val = this.dataModel.getValueAt(rowIndex, colIndex);
|
|
if(val instanceof Date){
|
|
return this.editors['date'];
|
|
}else if(typeof val == 'number'){
|
|
return this.editors['number'];
|
|
}else if(typeof val == 'boolean'){
|
|
return this.editors['boolean'];
|
|
}else{
|
|
return this.editors['string'];
|
|
}
|
|
},
|
|
|
|
getCellEditor : function(colIndex, rowIndex){
|
|
var val = this.dataModel.getValueAt(rowIndex, colIndex);
|
|
if(val instanceof Date){
|
|
return this.editors['date'];
|
|
}else if(typeof val == 'number'){
|
|
return this.editors['number'];
|
|
}else if(typeof val == 'boolean'){
|
|
return this.editors['boolean'];
|
|
}else{
|
|
return this.editors['string'];
|
|
}
|
|
}
|
|
});
|
|
|
|
YAHOO.ext.grid.PropsColumnModel.prototype.renderDate = function(dateVal){
|
|
return dateVal.dateFormat('m/j/Y');
|
|
};
|
|
|
|
YAHOO.ext.grid.PropsColumnModel.prototype.renderBool = function(bVal){
|
|
return bVal ? 'true' : 'false';
|
|
};
|
|
|
|
YAHOO.ext.grid.PropsGrid = function(container, propNames){
|
|
var dm = new YAHOO.ext.grid.PropsDataModel(propNames);
|
|
var cm =new YAHOO.ext.grid.PropsColumnModel(dm);
|
|
dm.sort(cm, 0, 'ASC');
|
|
YAHOO.ext.grid.PropsGrid.superclass.constructor.call(this, container, dm, cm);
|
|
this.container.addClass('yprops-grid');
|
|
this.lastEditRow = null;
|
|
this.on('cellclick', this.onCellClick, this, true);
|
|
this.on('beforeedit', this.beforeEdit, this, true);
|
|
this.on('columnresize', this.onColumnResize, this, true);
|
|
};
|
|
YAHOO.extendX(YAHOO.ext.grid.PropsGrid, YAHOO.ext.grid.EditorGrid, {
|
|
onCellClick : function(grid, rowIndex, colIndex, e){
|
|
if(colIndex == 0){
|
|
this.startEditing(rowIndex, 1);
|
|
}
|
|
},
|
|
|
|
render : function(){
|
|
YAHOO.ext.grid.PropsGrid.superclass.render.call(this);
|
|
this.getView().fitColumnsToContainer();
|
|
},
|
|
|
|
autoSize : function(){
|
|
YAHOO.ext.grid.PropsGrid.superclass.autoSize.call(this);
|
|
this.getView().fitColumnsToContainer();
|
|
},
|
|
|
|
onColumnResize : function(){
|
|
this.colModel.setColumnWidth(1, this.getView().wrap.clientWidth - this.colModel.getColumnWidth(0));
|
|
},
|
|
|
|
beforeEdit : function(grid, rowIndex, colIndex){
|
|
if(this.lastEditRow && rowIndex != this.lastEditRow.rowIndex){
|
|
YAHOO.util.Dom.removeClass(this.lastEditRow, 'ygrid-prop-edting');
|
|
}
|
|
this.lastEditRow = this.getRow(rowIndex);
|
|
YAHOO.util.Dom.addClass(this.lastEditRow, 'ygrid-prop-edting');
|
|
},
|
|
|
|
setSource : function(source){
|
|
this.dataModel.setSource(source);
|
|
},
|
|
|
|
getSource : function(){
|
|
return this.dataModel.getSource();
|
|
}
|
|
}); |