root / trunk / web / dojo / dijit / _Widget.js @ 9
History | View | Annotate | Download (9.31 KB)
| 1 | 9 | andrej.cim | /*
|
|---|---|---|---|
| 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 | } |