root / trunk / web / dojo / dojox / form / FilePickerTextBox.js @ 9
History | View | Annotate | Download (7.16 KB)
1 |
/*
|
---|---|
2 |
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
3 |
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
4 |
see: http://dojotoolkit.org/license for details
|
5 |
*/
|
6 |
|
7 |
|
8 |
if(!dojo._hasResource["dojox.form.FilePickerTextBox"]){ |
9 |
dojo._hasResource["dojox.form.FilePickerTextBox"]=true; |
10 |
dojo.provide("dojox.form.FilePickerTextBox");
|
11 |
dojo.require("dojo.window");
|
12 |
dojo.require("dijit.form.ValidationTextBox");
|
13 |
dojo.require("dijit._HasDropDown");
|
14 |
dojo.require("dojox.widget.FilePicker");
|
15 |
dojo.declare("dojox.form.FilePickerTextBox",[dijit.form.ValidationTextBox,dijit._HasDropDown],{baseClass:"dojoxFilePickerTextBox",templateString:dojo.cache("dojox.form","resources/FilePickerTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\twaiRole=\"combobox\" tabIndex=\"-1\"\n\t><div style=\"overflow:hidden;\"\n\t\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton'\n\t\t\tdojoAttachPoint=\"downArrowNode,_buttonNode,_popupStateNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitArrowButtonInner\"> </div\n\t\t\t><div class=\"dijitArrowButtonChar\">▼</div\n\t\t></div\n\t\t><div class=\"dijitReset dijitValidationIcon\"><br></div\n\t\t><div class=\"dijitReset dijitValidationIconText\">Χ</div\n\t\t><div class=\"dijitReset dijitInputField\"\n\t\t\t><input type=\"text\" autocomplete=\"off\" ${!nameAttrSetting} class='dijitReset'\n\t\t\t\tdojoAttachEvent='onkeypress:_onKey' \n\t\t\t\tdojoAttachPoint='textbox,focusNode' waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t\t/></div\n\t></div\n></div>\n"),searchDelay:500,valueItem:null,numPanes:2.25,postMixInProperties:function(){ |
16 |
this.inherited(arguments); |
17 |
this.dropDown=new dojox.widget.FilePicker(this.constraints); |
18 |
},postCreate:function(){ |
19 |
this.inherited(arguments); |
20 |
this.connect(this.dropDown,"onChange",this._onWidgetChange); |
21 |
this.connect(this.focusNode,"onblur","_focusBlur"); |
22 |
this.connect(this.focusNode,"onfocus","_focusFocus"); |
23 |
this.connect(this.focusNode,"ondblclick",function(){ |
24 |
dijit.selectInputText(this.focusNode);
|
25 |
}); |
26 |
},_setValueAttr:function(_1,_2,_3){ |
27 |
if(!this._searchInProgress){ |
28 |
this.inherited(arguments); |
29 |
_1=_1||"";
|
30 |
var _4=this.dropDown.attr("pathValue")||""; |
31 |
if(_1!==_4){
|
32 |
this._skip=true; |
33 |
var fx=dojo.hitch(this,"_setBlurValue"); |
34 |
this.dropDown._setPathValueAttr(_1,!_3,this._settingBlurValue?fx:null); |
35 |
} |
36 |
} |
37 |
},_onWidgetChange:function(_5){ |
38 |
if(!_5&&this.focusNode.value){ |
39 |
this._hasValidPath=false; |
40 |
this.focusNode.value=""; |
41 |
}else{
|
42 |
this.valueItem=_5;
|
43 |
var _6=this.dropDown._getPathValueAttr(_5); |
44 |
if(_6){
|
45 |
this._hasValidPath=true; |
46 |
} |
47 |
if(!this._skip){ |
48 |
this._setValueAttr(_6,undefined,true); |
49 |
} |
50 |
delete this._skip; |
51 |
} |
52 |
this.validate();
|
53 |
},startup:function(){ |
54 |
if(!this.dropDown._started){ |
55 |
this.dropDown.startup();
|
56 |
} |
57 |
this.inherited(arguments); |
58 |
},openDropDown:function(){ |
59 |
this.dropDown.domNode.style.width="0px"; |
60 |
if(!("minPaneWidth" in (this.constraints||{}))){ |
61 |
this.dropDown.attr("minPaneWidth",(this.domNode.offsetWidth/this.numPanes)); |
62 |
} |
63 |
this.inherited(arguments); |
64 |
},toggleDropDown:function(){ |
65 |
this.inherited(arguments); |
66 |
if(this._opened){ |
67 |
this.dropDown.attr("pathValue",this.get("value")); |
68 |
} |
69 |
},_focusBlur:function(e){ |
70 |
if(e.explicitOriginalTarget==this.focusNode&&!this._allowBlur){ |
71 |
window.setTimeout(dojo.hitch(this,function(){ |
72 |
if(!this._allowBlur){ |
73 |
this.focus();
|
74 |
} |
75 |
}),1);
|
76 |
}else{
|
77 |
if(this._menuFocus){ |
78 |
this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":false}); |
79 |
delete this._menuFocus; |
80 |
} |
81 |
} |
82 |
},_focusFocus:function(e){ |
83 |
if(this._menuFocus){ |
84 |
this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":false}); |
85 |
} |
86 |
delete this._menuFocus; |
87 |
var _7=dijit.getFocus(this); |
88 |
if(_7&&_7.node){
|
89 |
_7=dijit.byNode(_7.node); |
90 |
if(_7){
|
91 |
this._menuFocus=_7.domNode;
|
92 |
} |
93 |
} |
94 |
if(this._menuFocus){ |
95 |
this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":true}); |
96 |
} |
97 |
delete this._allowBlur; |
98 |
},_onBlur:function(){ |
99 |
this._allowBlur=true; |
100 |
delete this.dropDown._savedFocus; |
101 |
this.inherited(arguments); |
102 |
},_setBlurValue:function(){ |
103 |
if(this.dropDown&&!this._settingBlurValue){ |
104 |
this._settingBlurValue=true; |
105 |
this.set("value",this.focusNode.value); |
106 |
}else{
|
107 |
delete this._settingBlurValue; |
108 |
this.inherited(arguments); |
109 |
} |
110 |
},parse:function(_8,_9){ |
111 |
if(this._hasValidPath||this._hasSelection){ |
112 |
return _8;
|
113 |
} |
114 |
var dd=this.dropDown,_a=dd.topDir,_b=dd.pathSeparator; |
115 |
var _c=dd.attr("pathValue"); |
116 |
var _d=function(v){ |
117 |
if(_a.length&&v.indexOf(_a)===0){ |
118 |
v=v.substring(_a.length); |
119 |
} |
120 |
if(_b&&v[v.length-1]==_b){ |
121 |
v=v.substring(0,v.length-1); |
122 |
} |
123 |
return v;
|
124 |
}; |
125 |
_c=_d(_c); |
126 |
var _e=_d(_8);
|
127 |
if(_e==_c){
|
128 |
return _8;
|
129 |
} |
130 |
return undefined; |
131 |
},_startSearchFromInput:function(){ |
132 |
var dd=this.dropDown,fn=this.focusNode; |
133 |
var _f=fn.value,_10=_f,_11=dd.topDir;
|
134 |
if(this._hasSelection){ |
135 |
dijit.selectInputText(fn,_10.length); |
136 |
} |
137 |
this._hasSelection=false; |
138 |
if(_11.length&&_f.indexOf(_11)===0){ |
139 |
_f=_f.substring(_11.length); |
140 |
} |
141 |
var _12=_f.split(dd.pathSeparator);
|
142 |
var _13=dojo.hitch(this,function(idx){ |
143 |
var dir=_12[idx];
|
144 |
var _14=dd.getChildren()[idx];
|
145 |
var _15;
|
146 |
this._searchInProgress=true; |
147 |
var _16=dojo.hitch(this,function(){ |
148 |
delete this._searchInProgress; |
149 |
}); |
150 |
if((dir||_14)&&!this._opened){ |
151 |
this.toggleDropDown();
|
152 |
} |
153 |
if(dir&&_14){
|
154 |
var fx=dojo.hitch(this,function(){ |
155 |
if(_15){
|
156 |
this.disconnect(_15);
|
157 |
} |
158 |
delete _15;
|
159 |
var _17=_14._menu.getChildren();
|
160 |
var _18=dojo.filter(_17,function(i){ |
161 |
return i.label==dir;
|
162 |
})[0];
|
163 |
var _19=dojo.filter(_17,function(i){ |
164 |
return (i.label.indexOf(dir)===0); |
165 |
})[0];
|
166 |
if(_18&&((_12.length>idx+1&&_18.children)||(!_18.children))){ |
167 |
idx++; |
168 |
_14._menu.onItemClick(_18,{type:"internal",stopPropagation:function(){ |
169 |
},preventDefault:function(){ |
170 |
}}); |
171 |
if(_12[idx]){
|
172 |
_13(idx); |
173 |
}else{
|
174 |
_16(); |
175 |
} |
176 |
}else{
|
177 |
_14._setSelected(null);
|
178 |
if(_19&&_12.length===idx+1){ |
179 |
dd._setInProgress=true;
|
180 |
dd._removeAfter(_14); |
181 |
delete dd._setInProgress;
|
182 |
var _1a=_19.label;
|
183 |
if(_19.children){
|
184 |
_1a+=dd.pathSeparator; |
185 |
} |
186 |
_1a=_1a.substring(dir.length); |
187 |
window.setTimeout(function(){
|
188 |
dojo.window.scrollIntoView(_19.domNode); |
189 |
},1);
|
190 |
fn.value=_10+_1a; |
191 |
dijit.selectInputText(fn,_10.length); |
192 |
this._hasSelection=true; |
193 |
try{
|
194 |
_19.focusNode.focus(); |
195 |
} |
196 |
catch(e){
|
197 |
} |
198 |
}else{
|
199 |
if(this._menuFocus){ |
200 |
this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":false,"Focus":false}); |
201 |
} |
202 |
delete this._menuFocus; |
203 |
} |
204 |
_16(); |
205 |
} |
206 |
}); |
207 |
if(!_14.isLoaded){
|
208 |
_15=this.connect(_14,"onLoad",fx); |
209 |
}else{
|
210 |
fx(); |
211 |
} |
212 |
}else{
|
213 |
if(_14){
|
214 |
_14._setSelected(null);
|
215 |
dd._setInProgress=true;
|
216 |
dd._removeAfter(_14); |
217 |
delete dd._setInProgress;
|
218 |
} |
219 |
_16(); |
220 |
} |
221 |
}); |
222 |
_13(0);
|
223 |
},_onKey:function(e){ |
224 |
if(this.disabled||this.readOnly){ |
225 |
return;
|
226 |
} |
227 |
var dk=dojo.keys;
|
228 |
var c=e.charOrCode;
|
229 |
if(c==dk.DOWN_ARROW){
|
230 |
this._allowBlur=true; |
231 |
} |
232 |
if(c==dk.ENTER&&this._opened){ |
233 |
this.dropDown.onExecute();
|
234 |
dijit.selectInputText(this.focusNode,this.focusNode.value.length); |
235 |
this._hasSelection=false; |
236 |
dojo.stopEvent(e); |
237 |
return;
|
238 |
} |
239 |
if((c==dk.RIGHT_ARROW||c==dk.LEFT_ARROW||c==dk.TAB)&&this._hasSelection){ |
240 |
this._startSearchFromInput();
|
241 |
dojo.stopEvent(e); |
242 |
return;
|
243 |
} |
244 |
this.inherited(arguments); |
245 |
var _1b=false; |
246 |
if((c==dk.BACKSPACE||c==dk.DELETE)&&this._hasSelection){ |
247 |
this._hasSelection=false; |
248 |
}else{
|
249 |
if(c==dk.BACKSPACE||c==dk.DELETE||c==" "){ |
250 |
_1b=true;
|
251 |
}else{
|
252 |
_1b=e.keyChar!=="";
|
253 |
} |
254 |
} |
255 |
if(this._searchTimer){ |
256 |
window.clearTimeout(this._searchTimer);
|
257 |
} |
258 |
delete this._searchTimer; |
259 |
if(_1b){
|
260 |
this._hasValidPath=false; |
261 |
this._hasSelection=false; |
262 |
this._searchTimer=window.setTimeout(dojo.hitch(this,"_startSearchFromInput"),this.searchDelay+1); |
263 |
} |
264 |
}}); |
265 |
} |