e44a7e37b6
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@151 b3834d28-1941-0410-a4f8-b48e95affb8f
239 lines
6.9 KiB
JavaScript
239 lines
6.9 KiB
JavaScript
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 '<input class="dojoxGrid-input" type="text" value="' + inDatum + '">';
|
|
},
|
|
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 = [ '<select class="dojoxGrid-select">' ];
|
|
for (var i=0, o, v; ((o=this.options[i]) !== undefined)&&((v=this.values[i]) !== undefined); i++){
|
|
h.push("<option", (inDatum==v ? ' selected' : ''), ' value="' + v + '"', ">", o, "</option>");
|
|
}
|
|
h.push('</select>');
|
|
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 '<input class="dojoxGrid-input" type="checkbox"' + (inDatum ? ' checked="checked"' : '') + ' style="width: auto" />';
|
|
},
|
|
doclick: function(e){
|
|
if(e.target.tagName == 'INPUT'){
|
|
this.applyStaticValue(e.rowIndex);
|
|
}
|
|
}
|
|
});
|
|
dojox.grid.editors.bool = dojox.grid.editors.Bool; // back-compat
|
|
|
|
}
|