Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dijit / _Widget.js @ 13

History | View | Annotate | Download (9.31 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["dijit._Widget"]){
9
dojo._hasResource["dijit._Widget"]=true;
10
dojo.provide("dijit._Widget");
11
dojo.require("dijit._base");
12
dojo.connect(dojo,"_connect",function(_1,_2){
13
if(_1&&dojo.isFunction(_1._onConnect)){
14
_1._onConnect(_2);
15
}
16
});
17
dijit._connectOnUseEventHandler=function(_3){
18
};
19
dijit._lastKeyDownNode=null;
20
if(dojo.isIE){
21
(function(){
22
var _4=function(_5){
23
dijit._lastKeyDownNode=_5.srcElement;
24
};
25
dojo.doc.attachEvent("onkeydown",_4);
26
dojo.addOnWindowUnload(function(){
27
dojo.doc.detachEvent("onkeydown",_4);
28
});
29
})();
30
}else{
31
dojo.doc.addEventListener("keydown",function(_6){
32
dijit._lastKeyDownNode=_6.target;
33
},true);
34
}
35
(function(){
36
var _7={},_8=function(_9){
37
var dc=_9.declaredClass;
38
if(!_7[dc]){
39
var r=[],_a,_b=_9.constructor.prototype;
40
for(var _c in _b){
41
if(dojo.isFunction(_b[_c])&&(_a=_c.match(/^_set([a-zA-Z]*)Attr$/))&&_a[1]){
42
r.push(_a[1].charAt(0).toLowerCase()+_a[1].substr(1));
43
}
44
}
45
_7[dc]=r;
46
}
47
return _7[dc]||[];
48
};
49
dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",srcNodeRef:null,domNode:null,containerNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},_deferredConnects:{onClick:"",onDblClick:"",onKeyDown:"",onKeyPress:"",onKeyUp:"",onMouseMove:"",onMouseDown:"",onMouseOut:"",onMouseOver:"",onMouseLeave:"",onMouseEnter:"",onMouseUp:""},onClick:dijit._connectOnUseEventHandler,onDblClick:dijit._connectOnUseEventHandler,onKeyDown:dijit._connectOnUseEventHandler,onKeyPress:dijit._connectOnUseEventHandler,onKeyUp:dijit._connectOnUseEventHandler,onMouseDown:dijit._connectOnUseEventHandler,onMouseMove:dijit._connectOnUseEventHandler,onMouseOut:dijit._connectOnUseEventHandler,onMouseOver:dijit._connectOnUseEventHandler,onMouseLeave:dijit._connectOnUseEventHandler,onMouseEnter:dijit._connectOnUseEventHandler,onMouseUp:dijit._connectOnUseEventHandler,_blankGif:(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif")).toString(),postscript:function(_d,_e){
50
this.create(_d,_e);
51
},create:function(_f,_10){
52
this.srcNodeRef=dojo.byId(_10);
53
this._connects=[];
54
this._subscribes=[];
55
this._deferredConnects=dojo.clone(this._deferredConnects);
56
for(var _11 in this.attributeMap){
57
delete this._deferredConnects[_11];
58
}
59
for(_11 in this._deferredConnects){
60
if(this[_11]!==dijit._connectOnUseEventHandler){
61
delete this._deferredConnects[_11];
62
}
63
}
64
if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){
65
this.id=this.srcNodeRef.id;
66
}
67
if(_f){
68
this.params=_f;
69
dojo.mixin(this,_f);
70
}
71
this.postMixInProperties();
72
if(!this.id){
73
this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
74
}
75
dijit.registry.add(this);
76
this.buildRendering();
77
if(this.domNode){
78
this._applyAttributes();
79
var _12=this.srcNodeRef;
80
if(_12&&_12.parentNode){
81
_12.parentNode.replaceChild(this.domNode,_12);
82
}
83
for(_11 in this.params){
84
this._onConnect(_11);
85
}
86
}
87
if(this.domNode){
88
this.domNode.setAttribute("widgetId",this.id);
89
}
90
this.postCreate();
91
if(this.srcNodeRef&&!this.srcNodeRef.parentNode){
92
delete this.srcNodeRef;
93
}
94
this._created=true;
95
},_applyAttributes:function(){
96
var _13=function(_14,_15){
97
if((_15.params&&_14 in _15.params)||_15[_14]){
98
_15.set(_14,_15[_14]);
99
}
100
};
101
for(var _16 in this.attributeMap){
102
_13(_16,this);
103
}
104
dojo.forEach(_8(this),function(a){
105
if(!(a in this.attributeMap)){
106
_13(a,this);
107
}
108
},this);
109
},postMixInProperties:function(){
110
},buildRendering:function(){
111
this.domNode=this.srcNodeRef||dojo.create("div");
112
},postCreate:function(){
113
if(this.baseClass){
114
var _17=this.baseClass.split(" ");
115
if(!this.isLeftToRight()){
116
_17=_17.concat(dojo.map(_17,function(_18){
117
return _18+"Rtl";
118
}));
119
}
120
dojo.addClass(this.domNode,_17);
121
}
122
},startup:function(){
123
this._started=true;
124
},destroyRecursive:function(_19){
125
this._beingDestroyed=true;
126
this.destroyDescendants(_19);
127
this.destroy(_19);
128
},destroy:function(_1a){
129
this._beingDestroyed=true;
130
this.uninitialize();
131
var d=dojo,dfe=d.forEach,dun=d.unsubscribe;
132
dfe(this._connects,function(_1b){
133
dfe(_1b,d.disconnect);
134
});
135
dfe(this._subscribes,function(_1c){
136
dun(_1c);
137
});
138
dfe(this._supportingWidgets||[],function(w){
139
if(w.destroyRecursive){
140
w.destroyRecursive();
141
}else{
142
if(w.destroy){
143
w.destroy();
144
}
145
}
146
});
147
this.destroyRendering(_1a);
148
dijit.registry.remove(this.id);
149
this._destroyed=true;
150
},destroyRendering:function(_1d){
151
if(this.bgIframe){
152
this.bgIframe.destroy(_1d);
153
delete this.bgIframe;
154
}
155
if(this.domNode){
156
if(_1d){
157
dojo.removeAttr(this.domNode,"widgetId");
158
}else{
159
dojo.destroy(this.domNode);
160
}
161
delete this.domNode;
162
}
163
if(this.srcNodeRef){
164
if(!_1d){
165
dojo.destroy(this.srcNodeRef);
166
}
167
delete this.srcNodeRef;
168
}
169
},destroyDescendants:function(_1e){
170
dojo.forEach(this.getChildren(),function(_1f){
171
if(_1f.destroyRecursive){
172
_1f.destroyRecursive(_1e);
173
}
174
});
175
},uninitialize:function(){
176
return false;
177
},onFocus:function(){
178
},onBlur:function(){
179
},_onFocus:function(e){
180
this.onFocus();
181
},_onBlur:function(){
182
this.onBlur();
183
},_onConnect:function(_20){
184
if(_20 in this._deferredConnects){
185
var _21=this[this._deferredConnects[_20]||"domNode"];
186
this.connect(_21,_20.toLowerCase(),_20);
187
delete this._deferredConnects[_20];
188
}
189
},_setClassAttr:function(_22){
190
var _23=this[this.attributeMap["class"]||"domNode"];
191
dojo.removeClass(_23,this["class"]);
192
this["class"]=_22;
193
dojo.addClass(_23,_22);
194
},_setStyleAttr:function(_24){
195
var _25=this[this.attributeMap.style||"domNode"];
196
if(dojo.isObject(_24)){
197
dojo.style(_25,_24);
198
}else{
199
if(_25.style.cssText){
200
_25.style.cssText+="; "+_24;
201
}else{
202
_25.style.cssText=_24;
203
}
204
}
205
this.style=_24;
206
},setAttribute:function(_26,_27){
207
dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");
208
this.set(_26,_27);
209
},_attrToDom:function(_28,_29){
210
var _2a=this.attributeMap[_28];
211
dojo.forEach(dojo.isArray(_2a)?_2a:[_2a],function(_2b){
212
var _2c=this[_2b.node||_2b||"domNode"];
213
var _2d=_2b.type||"attribute";
214
switch(_2d){
215
case "attribute":
216
if(dojo.isFunction(_29)){
217
_29=dojo.hitch(this,_29);
218
}
219
var _2e=_2b.attribute?_2b.attribute:(/^on[A-Z][a-zA-Z]*$/.test(_28)?_28.toLowerCase():_28);
220
dojo.attr(_2c,_2e,_29);
221
break;
222
case "innerText":
223
_2c.innerHTML="";
224
_2c.appendChild(dojo.doc.createTextNode(_29));
225
break;
226
case "innerHTML":
227
_2c.innerHTML=_29;
228
break;
229
case "class":
230
dojo.removeClass(_2c,this[_28]);
231
dojo.addClass(_2c,_29);
232
break;
233
}
234
},this);
235
this[_28]=_29;
236
},attr:function(_2f,_30){
237
if(dojo.config.isDebug){
238
var _31=arguments.callee._ach||(arguments.callee._ach={}),_32=(arguments.callee.caller||"unknown caller").toString();
239
if(!_31[_32]){
240
dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_32,"","2.0");
241
_31[_32]=true;
242
}
243
}
244
var _33=arguments.length;
245
if(_33>=2||typeof _2f==="object"){
246
return this.set.apply(this,arguments);
247
}else{
248
return this.get(_2f);
249
}
250
},get:function(_34){
251
var _35=this._getAttrNames(_34);
252
return this[_35.g]?this[_35.g]():this[_34];
253
},set:function(_36,_37){
254
if(typeof _36==="object"){
255
for(var x in _36){
256
this.set(x,_36[x]);
257
}
258
return this;
259
}
260
var _38=this._getAttrNames(_36);
261
if(this[_38.s]){
262
var _39=this[_38.s].apply(this,Array.prototype.slice.call(arguments,1));
263
}else{
264
if(_36 in this.attributeMap){
265
this._attrToDom(_36,_37);
266
}
267
var _3a=this[_36];
268
this[_36]=_37;
269
}
270
return _39||this;
271
},_attrPairNames:{},_getAttrNames:function(_3b){
272
var apn=this._attrPairNames;
273
if(apn[_3b]){
274
return apn[_3b];
275
}
276
var uc=_3b.charAt(0).toUpperCase()+_3b.substr(1);
277
return (apn[_3b]={n:_3b+"Node",s:"_set"+uc+"Attr",g:"_get"+uc+"Attr"});
278
},toString:function(){
279
return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";
280
},getDescendants:function(){
281
return this.containerNode?dojo.query("[widgetId]",this.containerNode).map(dijit.byNode):[];
282
},getChildren:function(){
283
return this.containerNode?dijit.findWidgets(this.containerNode):[];
284
},nodesWithKeyClick:["input","button"],connect:function(obj,_3c,_3d){
285
var d=dojo,dc=d._connect,_3e=[];
286
if(_3c=="ondijitclick"){
287
if(dojo.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){
288
var m=d.hitch(this,_3d);
289
_3e.push(dc(obj,"onkeydown",this,function(e){
290
if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){
291
dijit._lastKeyDownNode=e.target;
292
e.preventDefault();
293
}
294
}),dc(obj,"onkeyup",this,function(e){
295
if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&e.target===dijit._lastKeyDownNode&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){
296
dijit._lastKeyDownNode=null;
297
return m(e);
298
}
299
}));
300
}
301
_3c="onclick";
302
}
303
_3e.push(dc(obj,_3c,this,_3d));
304
this._connects.push(_3e);
305
return _3e;
306
},disconnect:function(_3f){
307
for(var i=0;i<this._connects.length;i++){
308
if(this._connects[i]==_3f){
309
dojo.forEach(_3f,dojo.disconnect);
310
this._connects.splice(i,1);
311
return;
312
}
313
}
314
},subscribe:function(_40,_41){
315
var d=dojo,_42=d.subscribe(_40,this,_41);
316
this._subscribes.push(_42);
317
return _42;
318
},unsubscribe:function(_43){
319
for(var i=0;i<this._subscribes.length;i++){
320
if(this._subscribes[i]==_43){
321
dojo.unsubscribe(_43);
322
this._subscribes.splice(i,1);
323
return;
324
}
325
}
326
},isLeftToRight:function(){
327
return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();
328
},isFocusable:function(){
329
return this.focus&&(dojo.style(this.domNode,"display")!="none");
330
},placeAt:function(_44,_45){
331
if(_44.declaredClass&&_44.addChild){
332
_44.addChild(this,_45);
333
}else{
334
dojo.place(this.domNode,_44,_45);
335
}
336
return this;
337
},_onShow:function(){
338
this.onShow();
339
},onShow:function(){
340
},onHide:function(){
341
},onClose:function(){
342
return true;
343
}});
344
})();
345
}