]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojox/grid/_data/editors.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / grid / _data / editors.js
diff --git a/static/dojo-release-1.1.1/dojox/grid/_data/editors.js b/static/dojo-release-1.1.1/dojox/grid/_data/editors.js
new file mode 100644 (file)
index 0000000..48f76cc
--- /dev/null
@@ -0,0 +1,239 @@
+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
+
+}