123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008 |
- /*
- Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.form.ListInput"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.form.ListInput"] = true;
- dojo.experimental("dojox.form.ListInput");
- dojo.provide("dojox.form.ListInput");
- dojo.require("dijit.form._FormWidget");
- dojo.require("dijit.form.ValidationTextBox");
- dojo.require("dijit.InlineEditBox");
- dojo.requireLocalization("dijit", "common", null, "ROOT,ar,az,bg,ca,cs,da,de,el,es,fi,fr,he,hr,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
- dojo.declare("dojox.form.ListInput",
- [dijit.form._FormValueWidget],
- {
- // summary:
- // An automatic list maker
- // description:
- // you can add value to list with add method.
- // you can only remove by clicking close button
-
- constructor: function(){
- this._items = [];
-
-
- if(!dojo.isArray(this.delimiter)){
- this.delimiter=[this.delimiter];
- }
- var r="("+this.delimiter.join("|")+")?";
- this.regExp="^"+this.regExp+r+"$";
- },
-
- // inputClass: String
- // Class which will be used to create the input box. You can implements yours.
- // It must be a widget, focusNode or domNode must have "onkeydown" event
- // It must have .attr("value") to get value
- // It also must impement an (or more) handler for the "onChange" method
- inputClass: "dojox.form._ListInputInputBox",
-
- // inputHandler: String || Array
- // The widget will connect on all handler to check input value
- // You can use comma separated list
- inputHandler: "onChange",
-
- // inputProperties: String || Object
- // Properties used to create input box
- // If String, it must be a valid JSON
- inputProperties: {
- minWidth:50
- },
-
- // submitOnlyValidValue: Boolean
- // If true, only valid value will be submited with form
- submitOnlyValidValue:true,
-
- // useOnBlur: Boolean
- // If true, onBlur event do a validate (like pressing ENTER)
- useOnBlur:true,
-
- // readOnlyInput: Boolean
- // if false, the list will be editable
- // Can only be set when instanciate
- readOnlyInput: false,
-
- // maxItems: Int
- // Specify max item the list can have
- // null = infiny
- maxItems: null,
-
- // showCloseButtonWhenValid: Boolean
- // if true, a close button will be added on valid item
- showCloseButtonWhenValid: true,
-
- // showCloseButtonWhenInvalid: Boolean
- // if true, a close button will be added on invalid item
- showCloseButtonWhenInvalid: true,
-
- // regExp: [extension protected] String
- // regular expression string used to validate the input
- // Do not specify both regExp and regExpGen
- regExp: ".*", //"[a-zA-Z.-_]+@[a-zA-Z.-_]+.[a-zA-Z]+",
-
- // delimiter: String || Array
- // delimiter for the string. Every match will be splitted
- // The string can contain only one delimiter
- delimiter: ",",
-
- // constraints: dijit.form.ValidationTextBox.__Constraints
- // user-defined object needed to pass parameters to the validator functions
- constraints: {},
- baseClass:"dojoxListInput",
-
- type: "select",
-
- value: "",
-
- templateString: "<div dojoAttachPoint=\"focusNode\" class=\"dijit dijitReset dijitLeft dojoxListInput\"><select dojoAttachpoint=\"_selectNode\" multiple=\"multiple\" class=\"dijitHidden\" ${!nameAttrSetting}></select><ul dojoAttachPoint=\"_listInput\"><li dojoAttachEvent=\"onclick: _onClick\" class=\"dijitInputField dojoxListInputNode dijitHidden\" dojoAttachPoint=\"_inputNode\"></li></ul></div>",
-
- // useAnim: Boolean
- // If true, then item will use an anime to show hide itself
- useAnim: true,
-
- // duration: Integer
- // Animation duration
- duration: 500,
-
- // easingIn: function
- // function used to easing on fadeIn end
- easingIn: null,
-
- // easingOut: function
- // function used to easing on fadeOut end
- easingOut: null,
- // readOnlyItem: Boolean
- // If true, items can be edited
- // Can only be set when instanciate
- readOnlyItem: false,
-
- // useArrowForEdit: Boolean
- // If true, arraow left and right can be used for editing
- // Can only be set when instanciate
- useArrowForEdit: true,
-
- // _items: Array
- // Array of widget.
- // Contain all reference to _ListInputInputItem
- _items: null,
-
- // _lastAddedItem: Widget
- // Contain a reference to the last created item
- _lastAddedItem: null,
-
- // _currentItem: Widget
- // Widget currently in edition
- _currentItem: null,
-
- // _input: Widget
- // Widget use for input box
- _input: null,
-
- // _count: Int
- // Count items
- _count: 0,
-
- postCreate: function(){
- // summary:
- // If closeButton is used, add a class
- this.inherited(arguments);
- this._createInputBox();
- },
-
- _setReadOnlyInputAttr: function(/*Boolean*/value){
- // summary:
- // Change status and if needed, create the inputbox
- // tags:
- // private
- if(!this._started){ return this._createInputBox(); }
- this.readOnlyInput = value;
- this._createInputBox();
- },
-
- _setReadOnlyItemAttr: function(/*Boolean*/value){
- // summary:
- // set read only items
- // tags:
- // private
- if(!this._started){ return; }
- for(var i in this._items){
- this._items[i].set("readOnlyItem", value);
- }
- },
-
- _createInputBox: function(){
- // summary:
- // Create the input box
- // tags:
- // private
- dojo.toggleClass(this._inputNode, "dijitHidden", this.readOnlyInput);
- if(this.readOnlyInput){ return; }
- if(this._input){ return; }
-
- if(this.inputHandler === null){
- console.warn("you must add some handler to connect to input field");
- return false;
- }
- if(dojo.isString(this.inputHandler)){
- this.inputHandler = this.inputHandler.split(",");
- }
- if(dojo.isString(this.inputProperties)){
- this.inputProperties = dojo.fromJson(this.inputProperties);
- }
-
- var input = dojo.getObject(this.inputClass, false);
-
- this.inputProperties.regExp = this.regExpGen(this.constraints);
-
- this._input = new input(this.inputProperties);
- this._input.startup();
- this._inputNode.appendChild(this._input.domNode);
- dojo.forEach(this.inputHandler, function(handler){
- this.connect(this._input,dojo.string.trim(handler),"_onHandler");
- },this);
-
- this.connect(this._input, "onKeyDown", "_inputOnKeyDown");
- this.connect(this._input, "onBlur", "_inputOnBlur");
- },
-
- compare: function(/*Array*/val1,/*Array*/val2){
- // summary:
- // Compare 2 values (as returned by attr('value') for this widget).
- // tags:
- // protected
- val1 = val1.join(",");
- val2 = val2.join(",");
- if(val1 > val2){
- return 1;
- }else if(val1 < val2){
- return -1;
- }else{
- return 0;
- }
- },
-
- add: function(/*String || Array*/values){
- // summary:
- // Create new list element
- if(this._count>=this.maxItems && this.maxItems !== null){return;}
- this._lastValueReported = this._getValues();
-
- if(!dojo.isArray(values)){
- values = [values];
- }
-
- for(var i in values){
- var value=values[i];
- if(value === "" || typeof value != "string"){
- continue;
- }
- this._count++;
- var re = new RegExp(this.regExpGen(this.constraints));
- this._lastAddedItem = new dojox.form._ListInputInputItem({
- "index" : this._items.length,
- readOnlyItem : this.readOnlyItem,
- value : value,
- regExp: this.regExpGen(this.constraints)
- });
- this._lastAddedItem.startup();
-
- this._testItem(this._lastAddedItem,value);
-
- this._lastAddedItem.onClose = dojo.hitch(this,"_onItemClose",this._lastAddedItem);
- this._lastAddedItem.onChange = dojo.hitch(this,"_onItemChange",this._lastAddedItem);
- this._lastAddedItem.onEdit = dojo.hitch(this,"_onItemEdit",this._lastAddedItem);
- this._lastAddedItem.onKeyDown = dojo.hitch(this,"_onItemKeyDown",this._lastAddedItem);
- if(this.useAnim){
- dojo.style(this._lastAddedItem.domNode, {opacity:0, display:""});
- }
- this._placeItem(this._lastAddedItem.domNode);
-
- if(this.useAnim){
- var anim = dojo.fadeIn({
- node : this._lastAddedItem.domNode,
- duration : this.duration,
- easing : this.easingIn
- }).play();
- }
-
- this._items[this._lastAddedItem.index] = this._lastAddedItem;
-
- if(this._onChangeActive && this.intermediateChanges){ this.onChange(value); }
-
- if(this._count>=this.maxItems && this.maxItems !== null){
- break;
- }
- }
-
- this._updateValues();
- if(this._lastValueReported.length==0){
- this._lastValueReported = this.value;
- }
-
- if(!this.readOnlyInput){
- this._input.set("value", "");
- }
-
- if(this._onChangeActive){ this.onChange(this.value); }
-
- this._setReadOnlyWhenMaxItemsReached();
- },
-
- _setReadOnlyWhenMaxItemsReached: function(){
- // summary:
- // set input to readonly when max is reached
- // tags:
- // private
- this.set("readOnlyInput",(this._count>=this.maxItems && this.maxItems !== null));
- },
-
- _setSelectNode: function(){
- // summary:
- // put all item in the select (for a submit)
- // tags:
- // private
- this._selectNode.options.length = 0;
-
- var values=this.submitOnlyValidValue?this.get("MatchedValue"):this.value;
-
- if(!dojo.isArray(values)){
- return;
- }
- dojo.forEach(values,function(item){
- this._selectNode.options[this._selectNode.options.length]=new Option(item,item,true,true);
- },this);
- },
-
- _placeItem: function(/*domNode*/node){
- // summary:
- // Place item in the list
- // tags:
- // private
- dojo.place(node,this._inputNode,"before");
- },
-
- _getCursorPos: function(/*domNode*/node){
- // summary:
- // get current cursor pos
- // tags:
- // private
- if(typeof node.selectionStart != 'undefined'){
- return node.selectionStart;
- }
-
- // IE Support
- try{ node.focus(); }catch(e){}
- var range = node.createTextRange();
- range.moveToBookmark(dojo.doc.selection.createRange().getBookmark());
- range.moveEnd('character', node.value.length);
- try{
- return node.value.length - range.text.length;
- }finally{ range=null; }
- },
-
- _onItemClose: function(/*dijit._Widget*/ item){
- // summary:
- // Destroy a list element when close button is clicked
- // tags:
- // private
- if(this.disabled){ return; }
-
- if(this.useAnim){
- var anim = dojo.fadeOut({
- node : item.domNode,
- duration : this.duration,
- easing : this.easingOut,
- onEnd : dojo.hitch(this, "_destroyItem", item)
- }).play();
- }else{
- this._destroyItem(item);
- }
- },
-
- _onItemKeyDown: function(/*dijit._Widget*/ item, /*Event*/ e){
- // summary:
- // Call when item get a keypress
- // tags:
- // private
- if(this.readOnlyItem || !this.useArrowForEdit){ return; }
-
- if(e.keyCode == dojo.keys.LEFT_ARROW && this._getCursorPos(e.target)==0){
- this._editBefore(item);
- }else if(e.keyCode == dojo.keys.RIGHT_ARROW && this._getCursorPos(e.target)==e.target.value.length){
- this._editAfter(item);
- }
- },
-
- _editBefore: function(/*widget*/item) {
- // summary:
- // move trough items
- // tags:
- // private
- this._currentItem = this._getPreviousItem(item);
- if(this._currentItem !== null){
- this._currentItem.edit();
- }
- },
- _editAfter: function(/*widget*/item) {
- // summary:
- // move trough items
- // tags:
- // private
- this._currentItem = this._getNextItem(item);
- if(this._currentItem !== null){
- this._currentItem.edit();
- }
-
- if(!this.readOnlyInput){
- if(this._currentItem === null){
- //no more item ?
- //so edit input (if available)
- this._focusInput();
- }
- }
- },
-
- _onItemChange: function(/*dijit._Widget*/ item, /*String*/ value){
- // summary:
- // Call when item value change
- // tags:
- // private
- value = value || item.get("value");
-
- //revalidate content
- this._testItem(item,value);
-
- //update value
- this._updateValues();
- },
-
- _onItemEdit: function(/*dijit._Widget*/ item){
- // summary:
- // Call when item is edited
- // tags:
- // private
- dojo.removeClass(item.domNode,["dijitError", this.baseClass + "Match", this.baseClass + "Mismatch"]);
- },
-
- _testItem: function(/*Object*/item,/*String*/value){
- // summary:
- // Change class of item (match, mismatch)
- // tags:
- // private
- var re = new RegExp(this.regExpGen(this.constraints));
- var match = value.match(re);
-
- dojo.removeClass(item.domNode, this.baseClass + (!match ? "Match" : "Mismatch"));
- dojo.addClass(item.domNode, this.baseClass + (match ? "Match" : "Mismatch"));
- dojo.toggleClass(item.domNode, "dijitError", !match);
-
- if((this.showCloseButtonWhenValid && match) ||
- (this.showCloseButtonWhenInvalid && !match)){
- dojo.addClass(item.domNode,this.baseClass+"Closable");
- }else {
- dojo.removeClass(item.domNode,this.baseClass+"Closable");
- }
- },
-
- _getValueAttr: function(){
- // summary:
- // get all value in then list and return an array
- // tags:
- // private
- return this.value;
- },
-
- _setValueAttr: function(/*Array || String*/ newValue){
- // summary:
- // Hook so attr('value', value) works.
- // description:
- // Sets the value of the widget.
- // If the value has changed, then fire onChange event, unless priorityChange
- // is specified as null (or false?)
- this._destroyAllItems();
-
- this.add(this._parseValue(newValue));
- },
-
- _parseValue: function(/*String*/newValue){
- // summary:
- // search for delemiters and split if needed
- // tags:
- // private
- if(typeof newValue == "string"){
- if(dojo.isString(this.delimiter)){
- this.delimiter = [this.delimiter];
- }
- var re = new RegExp("^.*("+this.delimiter.join("|")+").*");
- if(newValue.match(re)){
- re = new RegExp(this.delimiter.join("|"));
- return newValue.split(re);
- }
- }
- return newValue;
- },
-
- regExpGen: function(/*dijit.form.ValidationTextBox.__Constraints*/constraints){
- // summary:
- // Overridable function used to generate regExp when dependent on constraints.
- // Do not specify both regExp and regExpGen.
- // tags:
- // extension protected
- return this.regExp; // String
- },
-
- _setDisabledAttr: function(/*Boolean*/ value){
- // summary:
- // also enable/disable editable items
- // tags:
- // private
- if(!this.readOnlyItem){
- for(var i in this._items){
- this._items[i].set("disabled", value);
- }
- }
-
- if(!this.readOnlyInput){
- this._input.set("disabled", value);
- }
- this.inherited(arguments);
- },
-
- _onHandler: function(/*String*/value){
- // summary:
- // When handlers of input are fired, this method check input value and (if needed) modify it
- // tags:
- // private
- var parsedValue = this._parseValue(value);
- if(dojo.isArray(parsedValue)){
- this.add(parsedValue);
- }
- },
-
- _onClick: function(/*event*/e){
- // summary:
- // give focus to inputbox
- // tags:
- // private
- this._focusInput();
- },
-
- _focusInput: function(){
- // summary:
- // give focus to input
- // tags:
- // private
- if(!this.readOnlyInput && this._input.focus){
- this._input.focus();
- }
- },
- _inputOnKeyDown: function(/*event*/e){
- // summary:
- // Used to add keybord interactivity
- // tags:
- // private
- this._currentItem = null;
- var val = this._input.get("value");
-
- if(e.keyCode == dojo.keys.BACKSPACE && val == "" && this.get("lastItem")){
- this._destroyItem(this.get("lastItem"));
- }else if(e.keyCode == dojo.keys.ENTER && val != ""){
- this.add(val);
- }else if(e.keyCode == dojo.keys.LEFT_ARROW && this._getCursorPos(this._input.focusNode) == 0 &&
- !this.readOnlyItem && this.useArrowForEdit){
- this._editBefore();
- }
- },
-
- _inputOnBlur: function(){
- // summary:
- // Remove focus class and act like pressing ENTER key
- // tags:
- // private
- var val = this._input.get('value');
- if(this.useOnBlur && val != ""){
- this.add(val);
- }
- },
-
- _getMatchedValueAttr: function(){
- // summary:
- // get value that match regexp in then list and return an array
- // tags:
- // private
- return this._getValues(dojo.hitch(this,this._matchValidator));
- },
-
- _getMismatchedValueAttr: function(){
- // summary:
- // get value that mismatch regexp in then list and return an array
- // tags:
- // private
- return this._getValues(dojo.hitch(this,this._mismatchValidator));
- },
-
- _getValues: function(/*function*/validator){
- // summary:
- // return values with comparator constraint
- // tags:
- // private
- var value = [];
- validator = validator||this._nullValidator;
- for(var i in this._items){
- var item = this._items[i];
- if(item === null){
- continue;
- }
- var itemValue = item.get("value");
- if(validator(itemValue)){
- value.push(itemValue);
- }
- }
- return value;
- },
-
- _nullValidator: function(/*String*/itemValue){
- // summary:
- // return true or false
- // tags:
- // private
- return true;
- },
- _matchValidator: function(/*String*/itemValue){
- // summary:
- // return true or false
- // tags:
- // private
- var re = new RegExp(this.regExpGen(this.constraints));
- return itemValue.match(re);
- },
- _mismatchValidator: function(/*String*/itemValue){
- // summary:
- // return true or false
- // tags:
- // private
- var re = new RegExp(this.regExpGen(this.constraints));
- return !(itemValue.match(re));
- },
-
- _getLastItemAttr: function(){
- // summary:
- // return the last item in list
- // tags:
- // private
- return this._getSomeItem();
- },
- _getSomeItem: function(/*dijit._Widget*/ item,/*String*/ position){
- // summary:
- // return the item before the one in params
- // tags:
- // private
- item=item||false;
- position=position||"last";
-
- var lastItem = null;
- var stop=-1;
- for(var i in this._items){
- if(this._items[i] === null){ continue; }
-
- if(position=="before" && this._items[i] === item){
- break;
- }
-
- lastItem = this._items[i];
-
- if(position=="first" ||stop==0){
- stop=1;
- break;
- }
- if(position=="after" && this._items[i] === item){
- stop=0;
- }
- }
- if(position=="after" && stop==0){
- lastItem = null;
- }
- return lastItem;
- },
- _getPreviousItem: function(/*dijit._Widget*/ item){
- // summary:
- // return the item before the one in params
- // tags:
- // private
- return this._getSomeItem(item,"before");
- },
- _getNextItem: function(/*dijit._Widget*/ item){
- // summary:
- // return the item before the one in params
- // tags:
- // private
- return this._getSomeItem(item,"after");
- },
-
- _destroyItem: function(/*dijit._Widget*/ item, /*Boolean?*/ updateValue){
- // summary:
- // destroy an item
- // tags:
- // private
- this._items[item.index] = null;
- item.destroy();
- this._count--;
- if(updateValue!==false){
- this._updateValues();
- this._setReadOnlyWhenMaxItemsReached();
- }
- },
-
- _updateValues: function(){
- // summary:
- // update this.value and the select node
- // tags:
- // private
- this.value = this._getValues();
- this._setSelectNode();
- },
-
- _destroyAllItems: function(){
- // summary:
- // destroy all items
- // tags:
- // private
- for(var i in this._items){
- if(this._items[i]==null){ continue; }
- this._destroyItem(this._items[i],false);
- }
- this._items = [];
- this._count = 0;
- this.value = null;
- this._setSelectNode();
- this._setReadOnlyWhenMaxItemsReached();
- },
-
- destroy: function(){
- // summary:
- // Destroy all widget
- this._destroyAllItems();
- this._lastAddedItem = null;
-
- if(!this._input){
- this._input.destroy();
- }
-
- this.inherited(arguments);
- }
- });
- dojo.declare("dojox.form._ListInputInputItem",
- [dijit._Widget, dijit._Templated],
- {
- // summary:
- // Item created by ListInputInput when delimiter is found
- // description:
- // Simple <li> with close button added to ListInputInput when delimiter is found
-
- templateString: "<li class=\"dijit dijitReset dijitLeft dojoxListInputItem\" dojoAttachEvent=\"onclick: onClick\" ><span dojoAttachPoint=\"labelNode\"></span></li>",
-
- // closeButtonNode: domNode
- // ref to the close button node
- closeButtonNode: null,
-
- // readOnlyItem: Boolean
- // if true, item is editable
- readOnlyItem: true,
-
- baseClass:"dojoxListInputItem",
-
- // value: String
- // value of item
- value: "",
-
- // regExp: [extension protected] String
- // regular expression string used to validate the input
- // Do not specify both regExp and regExpGen
- regExp: ".*",
-
- // _editBox: Widget
- // inline edit box
- _editBox: null,
-
- // _handleKeyDown: handle
- // handle for the keyDown connect
- _handleKeyDown: null,
-
- attributeMap: {
- value: { node: "labelNode", type: "innerHTML" }
- },
-
- postMixInProperties: function(){
- var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
- dojo.mixin(this, _nlsResources);
- this.inherited(arguments);
- },
-
- postCreate: function(){
- // summary:
- // Create the close button if needed
- this.inherited(arguments);
-
- this.closeButtonNode = dojo.create("span",{
- "class" : "dijitButtonNode dijitDialogCloseIcon",
- title : this.itemClose,
- onclick: dojo.hitch(this, "onClose"),
- onmouseenter: dojo.hitch(this, "_onCloseEnter"),
- onmouseleave: dojo.hitch(this, "_onCloseLeave")
- }, this.domNode);
-
- dojo.create("span",{
- "class" : "closeText",
- title : this.itemClose,
- innerHTML : "x"
- }, this.closeButtonNode);
- },
-
- startup: function(){
- // summary:
- // add the edit box
- this.inherited(arguments);
- this._createInlineEditBox();
- },
-
- _setReadOnlyItemAttr: function(/*Boolean*/value){
- // summary:
- // change the readonly state
- // tags:
- // private
- this.readOnlyItem = value;
- if(!value){
- this._createInlineEditBox();
- }else if(this._editBox){
- this._editBox.set("disabled", true);
- }
- },
-
- _createInlineEditBox: function(){
- // summary:
- // create the inline editbox if needed
- // tags:
- // private
- if(this.readOnlyItem){ return; }
- if(!this._started){ return; }
- if(this._editBox){
- this._editBox.set("disabled",false);
- return;
- }
- this._editBox = new dijit.InlineEditBox({
- value:this.value,
- editor: "dijit.form.ValidationTextBox",
- editorParams:{
- regExp:this.regExp
- }
- },this.labelNode);
- this.connect(this._editBox,"edit","_onEdit");
- this.connect(this._editBox,"onChange","_onCloseEdit");
- this.connect(this._editBox,"onCancel","_onCloseEdit");
- },
-
- edit: function(){
- // summary:
- // enter inline editbox in edit mode
- if(!this.readOnlyItem){
- this._editBox.edit();
- }
- },
-
- _onCloseEdit: function(/*String*/value){
- // summary:
- // call when inline editor close himself
- // tags:
- // private
- dojo.removeClass(this.closeButtonNode,this.baseClass + "Edited");
- dojo.disconnect(this._handleKeyDown);
- this.onChange(value);
- },
-
- _onEdit: function(){
- // summary:
- // call when inline editor start editing
- // tags:
- // private
- dojo.addClass(this.closeButtonNode,this.baseClass + "Edited");
- this._handleKeyDown = dojo.connect(this._editBox.editWidget,"_onKeyPress",this,"onKeyDown");
- this.onEdit();
- },
-
- _setDisabledAttr: function(/*Boolean*/value){
- // summary:
- // disable inline edit box
- // tags:
- // private
- if(!this.readOnlyItem){
- this._editBox.set("disabled", value);
- }
- },
-
- _getValueAttr: function(){
- // summary:
- // return value
- // tags:
- // private
- return (!this.readOnlyItem && this._started ? this._editBox.get("value") : this.value);
- },
-
- destroy: function(){
- // summary:
- // Destroy the inline editbox
- if(this._editBox){
- this._editBox.destroy();
- }
- this.inherited(arguments);
- },
-
- _onCloseEnter: function(){
- // summary:
- // Called when user hovers over close icon
- // tags:
- // private
- dojo.addClass(this.closeButtonNode, "dijitDialogCloseIcon-hover");
- },
- _onCloseLeave: function(){
- // summary:
- // Called when user stops hovering over close icon
- // tags:
- // private
- dojo.removeClass(this.closeButtonNode, "dijitDialogCloseIcon-hover");
- },
-
- onClose: function(){
- // summary:
- // callback when close button is clicked
- },
-
- onEdit: function(){
- // summary:
- // callback when widget come in edition
- },
-
- onClick: function(){
- // summary:
- // callback when widget is click
- },
-
- onChange: function(/*String*/value){
- // summary:
- // callback when widget change its content
- },
-
-
- onKeyDown: function(/*String*/value){
- // summary:
- // callback when widget get a KeyDown
- }
- });
- dojo.declare("dojox.form._ListInputInputBox",
- [dijit.form.ValidationTextBox],
- {
- // summary:
- // auto-sized text box
- // description:
- // Auto sized textbox based on dijit.form.TextBox
-
- // minWidth: Integer
- // Min width of the input box
- minWidth:50,
-
- // intermediateChanges: Boolean
- // Fires onChange for each value change or only on demand
- // Force to true in order to get onChanged called
- intermediateChanges:true,
-
- // regExp: [extension protected] String
- // regular expression string used to validate the input
- // Do not specify both regExp and regExpGen
- regExp: ".*",
-
- // _sizer: DomNode
- // Used to get size of textbox content
- _sizer:null,
-
- onChange: function(/*string*/value){
- // summary:
- // compute content width
- this.inherited(arguments);
- if(this._sizer === null){
- this._sizer = dojo.create("div",{
- style : {
- position : "absolute",
- left : "-10000px",
- top : "-10000px"
- }
- },dojo.body());
- }
- this._sizer.innerHTML = value;
- var w = dojo.contentBox(this._sizer).w + this.minWidth;
- dojo.contentBox(this.domNode,{ w : w });
- },
-
- destroy: function(){
- // summary:
- // destroy the widget
- dojo.destroy(this._sizer);
- this.inherited(arguments);
- }
- });
- }
|