96 lines
No EOL
2.8 KiB
JavaScript
96 lines
No EOL
2.8 KiB
JavaScript
/*
|
|
* YUI Extensions 0.33 RC2
|
|
* Copyright(c) 2006, Jack Slocum.
|
|
*/
|
|
|
|
/**
|
|
* @class YAHOO.ext.grid.CellEditor
|
|
* Base class for all EditorGrid editors
|
|
*/
|
|
YAHOO.ext.grid.CellEditor = function(element){
|
|
this.colIndex = null;
|
|
this.rowIndex = null;
|
|
this.grid = null;
|
|
this.editing = false;
|
|
this.originalValue = null;
|
|
this.element = getEl(element, true);
|
|
this.element.addClass('ygrid-editor');
|
|
this.element.dom.tabIndex = 1;
|
|
this.initialized = false;
|
|
this.callback = null;
|
|
};
|
|
|
|
YAHOO.ext.grid.CellEditor.prototype = {
|
|
init : function(grid, bodyElement, callback){
|
|
// there's no way for the grid to know if multiple columns
|
|
// share the same editor so it will try to initialize the
|
|
// same one over and over
|
|
if(this.initialized) return;
|
|
this.initialized = true;
|
|
this.callback = callback;
|
|
this.grid = grid;
|
|
bodyElement.appendChild(this.element.dom);
|
|
this.initEvents();
|
|
},
|
|
|
|
initEvents : function(){
|
|
var stopOnEnter = function(e){
|
|
if(e.browserEvent.keyCode == e.RETURN){
|
|
this.stopEditing(true);
|
|
}else if(e.browserEvent.keyCode == e.ESC){
|
|
this.setValue(this.originalValue);
|
|
this.stopEditing(true);
|
|
}
|
|
}
|
|
this.element.mon('keydown', stopOnEnter, this, true);
|
|
this.element.on('blur', this.stopEditing, this, true);
|
|
},
|
|
|
|
startEditing : function(value, row, cell){
|
|
this.originalValue = value;
|
|
this.rowIndex = row.rowIndex;
|
|
this.colIndex = cell.columnIndex;
|
|
this.cell = cell;
|
|
this.setValue(value);
|
|
var cellbox = getEl(cell, true).getBox();
|
|
this.fitToCell(cellbox);
|
|
this.editing = true;
|
|
this.show();
|
|
},
|
|
|
|
stopEditing : function(focusCell){
|
|
if(this.editing){
|
|
this.editing = false;
|
|
var newValue = this.getValue();
|
|
this.hide();
|
|
//if(focusCell){try{this.cell.focus();}catch(e){}}; // try to give the cell focus so keyboard nav still works
|
|
if(this.originalValue != newValue){
|
|
this.callback(newValue, this.rowIndex, this.colIndex);
|
|
}
|
|
}
|
|
},
|
|
|
|
setValue : function(value){
|
|
this.element.dom.value = value;
|
|
},
|
|
|
|
getValue : function(){
|
|
return this.element.dom.value;
|
|
},
|
|
|
|
fitToCell : function(box){
|
|
this.element.setBox(box, true);
|
|
},
|
|
|
|
show : function(){
|
|
this.element.show();
|
|
this.element.focus();
|
|
},
|
|
|
|
hide : function(){
|
|
try{
|
|
this.element.dom.blur();
|
|
}catch(e){}
|
|
this.element.hide();
|
|
}
|
|
}; |