diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/grid/cells/dijit.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/grid/cells/dijit.js | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/grid/cells/dijit.js b/js/dojo-1.7.2/dojox/grid/cells/dijit.js new file mode 100644 index 0000000..502c4d2 --- /dev/null +++ b/js/dojo-1.7.2/dojox/grid/cells/dijit.js @@ -0,0 +1,256 @@ +//>>built +define("dojox/grid/cells/dijit", [ + "dojo/_base/kernel", + "../../main", + "dojo/_base/declare", + "dojo/_base/array", + "dojo/_base/lang", + "dojo/_base/json", + "dojo/_base/connect", + "dojo/_base/sniff", + "dojo/dom", + "dojo/dom-attr", + "dojo/dom-construct", + "dojo/dom-geometry", + "dojo/data/ItemFileReadStore", + "dijit/form/DateTextBox", + "dijit/form/TimeTextBox", + "dijit/form/ComboBox", + "dijit/form/CheckBox", + "dijit/form/TextBox", + "dijit/form/NumberSpinner", + "dijit/form/NumberTextBox", + "dijit/form/CurrencyTextBox", + "dijit/form/HorizontalSlider", + "dijit/Editor", + "../util", + "./_base" +], function(dojo, dojox, declare, array, lang, json, connect, has, dom, domAttr, domConstruct, + domGeometry, ItemFileReadStore, DateTextBox, TimeTextBox, ComboBox, CheckBox, TextBox, + NumberSpinner, NumberTextBox, CurrencyTextBox, HorizontalSlider, Editor, util, BaseCell){ + +// TODO: shouldn't it be the test file's job to require these modules, +// if it is using them? Most of these modules aren't referenced by this file. + + var _Widget = declare("dojox.grid.cells._Widget", BaseCell, { + widgetClass: TextBox, + constructor: function(inCell){ + this.widget = null; + if(typeof this.widgetClass == "string"){ + dojo.deprecated("Passing a string to widgetClass is deprecated", "pass the widget class object instead", "2.0"); + this.widgetClass = lang.getObject(this.widgetClass); + } + }, + formatEditing: function(inDatum, inRowIndex){ + this.needFormatNode(inDatum, inRowIndex); + return "<div></div>"; + }, + getValue: function(inRowIndex){ + return this.widget.get('value'); + }, + _unescapeHTML: function(value){ + return (value && value.replace && this.grid.escapeHTMLInData) ? + value.replace(/</g, '<').replace(/&/g, '&') : value; + }, + setValue: function(inRowIndex, inValue){ + if(this.widget&&this.widget.set){ + inValue = this._unescapeHTML(inValue); + //Look for lazy-loading editor and handle it via its deferred. + if(this.widget.onLoadDeferred){ + var self = this; + this.widget.onLoadDeferred.addCallback(function(){ + self.widget.set("value",inValue===null?"":inValue); + }); + }else{ + this.widget.set("value", inValue); + } + }else{ + this.inherited(arguments); + } + }, + getWidgetProps: function(inDatum){ + return lang.mixin( + { + dir: this.dir, + lang: this.lang + }, + this.widgetProps||{}, + { + constraints: lang.mixin({}, this.constraint) || {}, //TODO: really just for ValidationTextBoxes + value: this._unescapeHTML(inDatum) + } + ); + }, + createWidget: function(inNode, inDatum, inRowIndex){ + return new this.widgetClass(this.getWidgetProps(inDatum), inNode); + }, + attachWidget: function(inNode, inDatum, inRowIndex){ + inNode.appendChild(this.widget.domNode); + this.setValue(inRowIndex, inDatum); + }, + formatNode: function(inNode, inDatum, inRowIndex){ + if(!this.widgetClass){ + return inDatum; + } + if(!this.widget){ + this.widget = this.createWidget.apply(this, arguments); + }else{ + this.attachWidget.apply(this, arguments); + } + this.sizeWidget.apply(this, arguments); + this.grid.views.renormalizeRow(inRowIndex); + this.grid.scroller.rowHeightChanged(inRowIndex, true/*fix #11101*/); + this.focus(); + return undefined; + }, + sizeWidget: function(inNode, inDatum, inRowIndex){ + var + p = this.getNode(inRowIndex), + box = dojo.contentBox(p); + dojo.marginBox(this.widget.domNode, {w: box.w}); + }, + focus: function(inRowIndex, inNode){ + if(this.widget){ + setTimeout(lang.hitch(this.widget, function(){ + util.fire(this, "focus"); + }), 0); + } + }, + _finish: function(inRowIndex){ + this.inherited(arguments); + util.removeNode(this.widget.domNode); + if(has("ie")){ + dom.setSelectable(this.widget.domNode, true); + } + } + }); + _Widget.markupFactory = function(node, cell){ + BaseCell.markupFactory(node, cell); + var widgetProps = lang.trim(domAttr.get(node, "widgetProps")||""); + var constraint = lang.trim(domAttr.get(node, "constraint")||""); + var widgetClass = lang.trim(domAttr.get(node, "widgetClass")||""); + if(widgetProps){ + cell.widgetProps = json.fromJson(widgetProps); + } + if(constraint){ + cell.constraint = json.fromJson(constraint); + } + if(widgetClass){ + cell.widgetClass = lang.getObject(widgetClass); + } + }; + + var ComboBox = declare("dojox.grid.cells.ComboBox", _Widget, { + widgetClass: ComboBox, + getWidgetProps: function(inDatum){ + var items=[]; + array.forEach(this.options, function(o){ + items.push({name: o, value: o}); + }); + var store = new ItemFileReadStore({data: {identifier:"name", items: items}}); + return lang.mixin({}, this.widgetProps||{}, { + value: inDatum, + store: store + }); + }, + getValue: function(){ + var e = this.widget; + // make sure to apply the displayed value + e.set('displayedValue', e.get('displayedValue')); + return e.get('value'); + } + }); + ComboBox.markupFactory = function(node, cell){ + _Widget.markupFactory(node, cell); + var options = lang.trim(domAttr.get(node, "options")||""); + if(options){ + var o = options.split(','); + if(o[0] != options){ + cell.options = o; + } + } + }; + + var DateTextBox = declare("dojox.grid.cells.DateTextBox", _Widget, { + widgetClass: DateTextBox, + setValue: function(inRowIndex, inValue){ + if(this.widget){ + this.widget.set('value', new Date(inValue)); + }else{ + this.inherited(arguments); + } + }, + getWidgetProps: function(inDatum){ + return lang.mixin(this.inherited(arguments), { + value: new Date(inDatum) + }); + } + }); + DateTextBox.markupFactory = function(node, cell){ + _Widget.markupFactory(node, cell); + }; + + var CheckBox = declare("dojox.grid.cells.CheckBox", _Widget, { + widgetClass: CheckBox, + getValue: function(){ + return this.widget.checked; + }, + setValue: function(inRowIndex, inValue){ + if(this.widget&&this.widget.attributeMap.checked){ + this.widget.set("checked", inValue); + }else{ + this.inherited(arguments); + } + }, + sizeWidget: function(inNode, inDatum, inRowIndex){ + return; + } + }); + CheckBox.markupFactory = function(node, cell){ + _Widget.markupFactory(node, cell); + }; + + var Editor = declare("dojox.grid.cells.Editor", _Widget, { + widgetClass: Editor, + getWidgetProps: function(inDatum){ + return lang.mixin({}, this.widgetProps||{}, { + height: this.widgetHeight || "100px" + }); + }, + createWidget: function(inNode, inDatum, inRowIndex){ + // widget needs its value set after creation + var widget = new this.widgetClass(this.getWidgetProps(inDatum), inNode); + connect.connect(widget, 'onLoad', lang.hitch(this, 'populateEditor')); + return widget; + }, + formatNode: function(inNode, inDatum, inRowIndex){ + this.content = inDatum; + this.inherited(arguments); + if(has("mozilla")){ + // FIXME: seem to need to reopen the editor and display the toolbar + var e = this.widget; + e.open(); + if(this.widgetToolbar){ + domConstruct.place(e.toolbar.domNode, e.editingArea, "before"); + } + } + }, + populateEditor: function(){ + this.widget.set('value', this.content); + this.widget.placeCursorAtEnd(); + } + }); + Editor.markupFactory = function(node, cell){ + _Widget.markupFactory(node, cell); + var h = lang.trim(domAttr.get(node, "widgetHeight")||""); + if(h){ + if((h != "auto")&&(h.substr(-2) != "em")){ + h = parseInt(h, 10)+"px"; + } + cell.widgetHeight = h; + } + }; + + return dojox.grid.cells.dijit; + +});
\ No newline at end of file |
