if(!dojo._hasResource["dojox.grid._data.editors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojox.grid._data.editors"] = true;
dojo.provide("dojox.grid._data.editors");
dojo.provide("dojox.grid.editors");
dojo.declare("dojox.grid.editors.Base", null, {
// summary:
// base grid editor class. Other grid editors should inherited from this class.
constructor: function(inCell){
this.cell = inCell;
},
//private
_valueProp: "value",
_formatPending: false,
format: function(inDatum, inRowIndex){
// summary:
// formats the cell for editing
// inDatum: anything
// cell data to edit
// inRowIndex: int
// grid row index
// returns: string of html to place in grid cell
},
//protected
needFormatNode: function(inDatum, inRowIndex){
this._formatPending = true;
dojox.grid.whenIdle(this, "_formatNode", inDatum, inRowIndex);
},
cancelFormatNode: function(){
this._formatPending = false;
},
//private
_formatNode: function(inDatum, inRowIndex){
if(this._formatPending){
this._formatPending = false;
// make cell selectable
dojo.setSelectable(this.cell.grid.domNode, true);
this.formatNode(this.getNode(inRowIndex), inDatum, inRowIndex);
}
},
//protected
getNode: function(inRowIndex){
return (this.cell.getNode(inRowIndex) || 0).firstChild || 0;
},
formatNode: function(inNode, inDatum, inRowIndex){
// summary:
// format the editing dom node. Use when editor is a widget.
// inNode: dom node
// dom node for the editor
// inDatum: anything
// cell data to edit
// inRowIndex: int
// grid row index
if(dojo.isIE){
// IE sux bad
dojox.grid.whenIdle(this, "focus", inRowIndex, inNode);
}else{
this.focus(inRowIndex, inNode);
}
},
dispatchEvent: function(m, e){
if(m in this){
return this[m](e);
}
},
//public
getValue: function(inRowIndex){
// summary:
// returns value entered into editor
// inRowIndex: int
// grid row index
// returns:
// value of editor
return this.getNode(inRowIndex)[this._valueProp];
},
setValue: function(inRowIndex, inValue){
// summary:
// set the value of the grid editor
// inRowIndex: int
// grid row index
// inValue: anything
// value of editor
var n = this.getNode(inRowIndex);
if(n){
n[this._valueProp] = inValue
};
},
focus: function(inRowIndex, inNode){
// summary:
// focus the grid editor
// inRowIndex: int
// grid row index
// inNode: dom node
// editor node
dojox.grid.focusSelectNode(inNode || this.getNode(inRowIndex));
},
save: function(inRowIndex){
// summary:
// save editor state
// inRowIndex: int
// grid row index
this.value = this.value || this.getValue(inRowIndex);
//console.log("save", this.value, inCell.index, inRowIndex);
},
restore: function(inRowIndex){
// summary:
// restore editor state
// inRowIndex: int
// grid row index
this.setValue(inRowIndex, this.value);
//console.log("restore", this.value, inCell.index, inRowIndex);
},
//protected
_finish: function(inRowIndex){
// summary:
// called when editing is completed to clean up editor
// inRowIndex: int
// grid row index
dojo.setSelectable(this.cell.grid.domNode, false);
this.cancelFormatNode(this.cell);
},
//public
apply: function(inRowIndex){
// summary:
// apply edit from cell editor
// inRowIndex: int
// grid row index
this.cell.applyEdit(this.getValue(inRowIndex), inRowIndex);
this._finish(inRowIndex);
},
cancel: function(inRowIndex){
// summary:
// cancel cell edit
// inRowIndex: int
// grid row index
this.cell.cancelEdit(inRowIndex);
this._finish(inRowIndex);
}
});
dojox.grid.editors.base = dojox.grid.editors.Base; // back-compat
dojo.declare("dojox.grid.editors.Input", dojox.grid.editors.Base, {
// summary
// grid cell editor that provides a standard text input box
constructor: function(inCell){
this.keyFilter = this.keyFilter || this.cell.keyFilter;
},
// keyFilter: object
// optional regex for disallowing keypresses
keyFilter: null,
format: function(inDatum, inRowIndex){
this.needFormatNode(inDatum, inRowIndex);
return '';
},
formatNode: function(inNode, inDatum, inRowIndex){
this.inherited(arguments);
// FIXME: feels too specific for this interface
this.cell.registerOnBlur(inNode, inRowIndex);
},
doKey: function(e){
if(this.keyFilter){
var key = String.fromCharCode(e.charCode);
if(key.search(this.keyFilter) == -1){
dojo.stopEvent(e);
}
}
},
_finish: function(inRowIndex){
this.inherited(arguments);
var n = this.getNode(inRowIndex);
try{
dojox.grid.fire(n, "blur");
}catch(e){}
}
});
dojox.grid.editors.input = dojox.grid.editors.Input; // back compat
dojo.declare("dojox.grid.editors.Select", dojox.grid.editors.Input, {
// summary:
// grid cell editor that provides a standard select
// options: text of each item
// values: value for each item
// returnIndex: editor returns only the index of the selected option and not the value
constructor: function(inCell){
this.options = this.options || this.cell.options;
this.values = this.values || this.cell.values || this.options;
},
format: function(inDatum, inRowIndex){
this.needFormatNode(inDatum, inRowIndex);
var h = [ '');
return h.join('');
},
getValue: function(inRowIndex){
var n = this.getNode(inRowIndex);
if(n){
var i = n.selectedIndex, o = n.options[i];
return this.cell.returnIndex ? i : o.value || o.innerHTML;
}
}
});
dojox.grid.editors.select = dojox.grid.editors.Select; // back compat
dojo.declare("dojox.grid.editors.AlwaysOn", dojox.grid.editors.Input, {
// summary:
// grid cell editor that is always on, regardless of grid editing state
// alwaysOn: boolean
// flag to use editor to format grid cell regardless of editing state.
alwaysOn: true,
_formatNode: function(inDatum, inRowIndex){
this.formatNode(this.getNode(inRowIndex), inDatum, inRowIndex);
},
applyStaticValue: function(inRowIndex){
var e = this.cell.grid.edit;
e.applyCellEdit(this.getValue(inRowIndex), this.cell, inRowIndex);
e.start(this.cell, inRowIndex, true);
}
});
dojox.grid.editors.alwaysOn = dojox.grid.editors.AlwaysOn; // back-compat
dojo.declare("dojox.grid.editors.Bool", dojox.grid.editors.AlwaysOn, {
// summary:
// grid cell editor that provides a standard checkbox that is always on
_valueProp: "checked",
format: function(inDatum, inRowIndex){
return '';
},
doclick: function(e){
if(e.target.tagName == 'INPUT'){
this.applyStaticValue(e.rowIndex);
}
}
});
dojox.grid.editors.bool = dojox.grid.editors.Bool; // back-compat
}