192 lines
4.3 KiB
JavaScript
192 lines
4.3 KiB
JavaScript
//>>built
|
|
define("dijit/focus",["dojo/aspect","dojo/_base/declare","dojo/dom","dojo/dom-attr","dojo/dom-construct","dojo/Evented","dojo/_base/lang","dojo/on","dojo/ready","dojo/_base/sniff","dojo/Stateful","dojo/_base/unload","dojo/_base/window","dojo/window","./a11y","./registry","."],function(_1,_2,_3,_4,_5,_6,_7,on,_8,_9,_a,_b,_c,_d,_e,_f,_10){
|
|
var _11=_2([_a,_6],{curNode:null,activeStack:[],constructor:function(){
|
|
var _12=_7.hitch(this,function(_13){
|
|
if(_3.isDescendant(this.curNode,_13)){
|
|
this.set("curNode",null);
|
|
}
|
|
if(_3.isDescendant(this.prevNode,_13)){
|
|
this.set("prevNode",null);
|
|
}
|
|
});
|
|
_1.before(_5,"empty",_12);
|
|
_1.before(_5,"destroy",_12);
|
|
},registerIframe:function(_14){
|
|
return this.registerWin(_14.contentWindow,_14);
|
|
},registerWin:function(_15,_16){
|
|
var _17=this;
|
|
var _18=function(evt){
|
|
_17._justMouseDowned=true;
|
|
setTimeout(function(){
|
|
_17._justMouseDowned=false;
|
|
},0);
|
|
if(_9("ie")&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){
|
|
return;
|
|
}
|
|
_17._onTouchNode(_16||evt.target||evt.srcElement,"mouse");
|
|
};
|
|
var doc=_9("ie")?_15.document.documentElement:_15.document;
|
|
if(doc){
|
|
if(_9("ie")){
|
|
_15.document.body.attachEvent("onmousedown",_18);
|
|
var _19=function(evt){
|
|
var tag=evt.srcElement.tagName.toLowerCase();
|
|
if(tag=="#document"||tag=="body"){
|
|
return;
|
|
}
|
|
if(_e.isTabNavigable(evt.srcElement)){
|
|
_17._onFocusNode(_16||evt.srcElement);
|
|
}else{
|
|
_17._onTouchNode(_16||evt.srcElement);
|
|
}
|
|
};
|
|
doc.attachEvent("onactivate",_19);
|
|
var _1a=function(evt){
|
|
_17._onBlurNode(_16||evt.srcElement);
|
|
};
|
|
doc.attachEvent("ondeactivate",_1a);
|
|
return {remove:function(){
|
|
_15.document.detachEvent("onmousedown",_18);
|
|
doc.detachEvent("onactivate",_19);
|
|
doc.detachEvent("ondeactivate",_1a);
|
|
doc=null;
|
|
}};
|
|
}else{
|
|
doc.body.addEventListener("mousedown",_18,true);
|
|
doc.body.addEventListener("touchstart",_18,true);
|
|
var _1b=function(evt){
|
|
_17._onFocusNode(_16||evt.target);
|
|
};
|
|
doc.addEventListener("focus",_1b,true);
|
|
var _1c=function(evt){
|
|
_17._onBlurNode(_16||evt.target);
|
|
};
|
|
doc.addEventListener("blur",_1c,true);
|
|
return {remove:function(){
|
|
doc.body.removeEventListener("mousedown",_18,true);
|
|
doc.body.removeEventListener("touchstart",_18,true);
|
|
doc.removeEventListener("focus",_1b,true);
|
|
doc.removeEventListener("blur",_1c,true);
|
|
doc=null;
|
|
}};
|
|
}
|
|
}
|
|
},_onBlurNode:function(){
|
|
this.set("prevNode",this.curNode);
|
|
this.set("curNode",null);
|
|
if(this._justMouseDowned){
|
|
return;
|
|
}
|
|
if(this._clearActiveWidgetsTimer){
|
|
clearTimeout(this._clearActiveWidgetsTimer);
|
|
}
|
|
this._clearActiveWidgetsTimer=setTimeout(_7.hitch(this,function(){
|
|
delete this._clearActiveWidgetsTimer;
|
|
this._setStack([]);
|
|
this.prevNode=null;
|
|
}),100);
|
|
},_onTouchNode:function(_1d,by){
|
|
if(this._clearActiveWidgetsTimer){
|
|
clearTimeout(this._clearActiveWidgetsTimer);
|
|
delete this._clearActiveWidgetsTimer;
|
|
}
|
|
var _1e=[];
|
|
try{
|
|
while(_1d){
|
|
var _1f=_4.get(_1d,"dijitPopupParent");
|
|
if(_1f){
|
|
_1d=_f.byId(_1f).domNode;
|
|
}else{
|
|
if(_1d.tagName&&_1d.tagName.toLowerCase()=="body"){
|
|
if(_1d===_c.body()){
|
|
break;
|
|
}
|
|
_1d=_d.get(_1d.ownerDocument).frameElement;
|
|
}else{
|
|
var id=_1d.getAttribute&&_1d.getAttribute("widgetId"),_20=id&&_f.byId(id);
|
|
if(_20&&!(by=="mouse"&&_20.get("disabled"))){
|
|
_1e.unshift(id);
|
|
}
|
|
_1d=_1d.parentNode;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch(e){
|
|
}
|
|
this._setStack(_1e,by);
|
|
},_onFocusNode:function(_21){
|
|
if(!_21){
|
|
return;
|
|
}
|
|
if(_21.nodeType==9){
|
|
return;
|
|
}
|
|
this._onTouchNode(_21);
|
|
if(_21==this.curNode){
|
|
return;
|
|
}
|
|
this.set("curNode",_21);
|
|
},_setStack:function(_22,by){
|
|
var _23=this.activeStack;
|
|
this.set("activeStack",_22);
|
|
for(var _24=0;_24<Math.min(_23.length,_22.length);_24++){
|
|
if(_23[_24]!=_22[_24]){
|
|
break;
|
|
}
|
|
}
|
|
var _25;
|
|
for(var i=_23.length-1;i>=_24;i--){
|
|
_25=_f.byId(_23[i]);
|
|
if(_25){
|
|
_25._hasBeenBlurred=true;
|
|
_25.set("focused",false);
|
|
if(_25._focusManager==this){
|
|
_25._onBlur(by);
|
|
}
|
|
this.emit("widget-blur",_25,by);
|
|
}
|
|
}
|
|
for(i=_24;i<_22.length;i++){
|
|
_25=_f.byId(_22[i]);
|
|
if(_25){
|
|
_25.set("focused",true);
|
|
if(_25._focusManager==this){
|
|
_25._onFocus(by);
|
|
}
|
|
this.emit("widget-focus",_25,by);
|
|
}
|
|
}
|
|
},focus:function(_26){
|
|
if(_26){
|
|
try{
|
|
_26.focus();
|
|
}
|
|
catch(e){
|
|
}
|
|
}
|
|
}});
|
|
var _27=new _11();
|
|
_8(function(){
|
|
var _28=_27.registerWin(_c.doc.parentWindow||_c.doc.defaultView);
|
|
if(_9("ie")){
|
|
_b.addOnWindowUnload(function(){
|
|
_28.remove();
|
|
_28=null;
|
|
});
|
|
}
|
|
});
|
|
_10.focus=function(_29){
|
|
_27.focus(_29);
|
|
};
|
|
for(var _2a in _27){
|
|
if(!/^_/.test(_2a)){
|
|
_10.focus[_2a]=typeof _27[_2a]=="function"?_7.hitch(_27,_2a):_27[_2a];
|
|
}
|
|
}
|
|
_27.watch(function(_2b,_2c,_2d){
|
|
_10.focus[_2b]=_2d;
|
|
});
|
|
return _27;
|
|
});
|