From 2f01fe57a8d37767827d6db42850aef86a767c53 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 15 Nov 2010 10:39:52 +0300 Subject: add dijit/dojo stuff; initial ui mockup --- lib/dijit/_base/focus.js | 299 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 lib/dijit/_base/focus.js (limited to 'lib/dijit/_base/focus.js') diff --git a/lib/dijit/_base/focus.js b/lib/dijit/_base/focus.js new file mode 100644 index 000000000..32be06aa7 --- /dev/null +++ b/lib/dijit/_base/focus.js @@ -0,0 +1,299 @@ +/* + Copyright (c) 2004-2010, 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["dijit._base.focus"]){ +dojo._hasResource["dijit._base.focus"]=true; +dojo.provide("dijit._base.focus"); +dojo.require("dojo.window"); +dojo.require("dijit._base.manager"); +dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){ +return dijit.getBookmark().isCollapsed; +},getBookmark:function(){ +var bm,rg,tg,_1=dojo.doc.selection,cf=dijit._curFocus; +if(dojo.global.getSelection){ +_1=dojo.global.getSelection(); +if(_1){ +if(_1.isCollapsed){ +tg=cf?cf.tagName:""; +if(tg){ +tg=tg.toLowerCase(); +if(tg=="textarea"||(tg=="input"&&(!cf.type||cf.type.toLowerCase()=="text"))){ +_1={start:cf.selectionStart,end:cf.selectionEnd,node:cf,pRange:true}; +return {isCollapsed:(_1.end<=_1.start),mark:_1}; +} +} +bm={isCollapsed:true}; +}else{ +rg=_1.getRangeAt(0); +bm={isCollapsed:false,mark:rg.cloneRange()}; +} +} +}else{ +if(_1){ +tg=cf?cf.tagName:""; +tg=tg.toLowerCase(); +if(cf&&tg&&(tg=="button"||tg=="textarea"||tg=="input")){ +if(_1.type&&_1.type.toLowerCase()=="none"){ +return {isCollapsed:true,mark:null}; +}else{ +rg=_1.createRange(); +return {isCollapsed:rg.text&&rg.text.length?false:true,mark:{range:rg,pRange:true}}; +} +} +bm={}; +try{ +rg=_1.createRange(); +bm.isCollapsed=!(_1.type=="Text"?rg.htmlText.length:rg.length); +} +catch(e){ +bm.isCollapsed=true; +return bm; +} +if(_1.type.toUpperCase()=="CONTROL"){ +if(rg.length){ +bm.mark=[]; +var i=0,_2=rg.length; +while(i<_2){ +bm.mark.push(rg.item(i++)); +} +}else{ +bm.isCollapsed=true; +bm.mark=null; +} +}else{ +bm.mark=rg.getBookmark(); +} +}else{ +console.warn("No idea how to store the current selection for this browser!"); +} +} +return bm; +},moveToBookmark:function(_3){ +var _4=dojo.doc,_5=_3.mark; +if(_5){ +if(dojo.global.getSelection){ +var _6=dojo.global.getSelection(); +if(_6&&_6.removeAllRanges){ +if(_5.pRange){ +var r=_5; +var n=r.node; +n.selectionStart=r.start; +n.selectionEnd=r.end; +}else{ +_6.removeAllRanges(); +_6.addRange(_5); +} +}else{ +console.warn("No idea how to restore selection for this browser!"); +} +}else{ +if(_4.selection&&_5){ +var rg; +if(_5.pRange){ +rg=_5.range; +}else{ +if(dojo.isArray(_5)){ +rg=_4.body.createControlRange(); +dojo.forEach(_5,function(n){ +rg.addElement(n); +}); +}else{ +rg=_4.body.createTextRange(); +rg.moveToBookmark(_5); +} +} +rg.select(); +} +} +} +},getFocus:function(_7,_8){ +var _9=!dijit._curFocus||(_7&&dojo.isDescendant(dijit._curFocus,_7.domNode))?dijit._prevFocus:dijit._curFocus; +return {node:_9,bookmark:(_9==dijit._curFocus)&&dojo.withGlobal(_8||dojo.global,dijit.getBookmark),openedForWindow:_8}; +},focus:function(_a){ +if(!_a){ +return; +} +var _b="node" in _a?_a.node:_a,_c=_a.bookmark,_d=_a.openedForWindow,_e=_c?_c.isCollapsed:false; +if(_b){ +var _f=(_b.tagName.toLowerCase()=="iframe")?_b.contentWindow:_b; +if(_f&&_f.focus){ +try{ +_f.focus(); +} +catch(e){ +} +} +dijit._onFocusNode(_b); +} +if(_c&&dojo.withGlobal(_d||dojo.global,dijit.isCollapsed)&&!_e){ +if(_d){ +_d.focus(); +} +try{ +dojo.withGlobal(_d||dojo.global,dijit.moveToBookmark,null,[_c]); +} +catch(e2){ +} +} +},_activeStack:[],registerIframe:function(_10){ +return dijit.registerWin(_10.contentWindow,_10); +},unregisterIframe:function(_11){ +dijit.unregisterWin(_11); +},registerWin:function(_12,_13){ +var _14=function(evt){ +dijit._justMouseDowned=true; +setTimeout(function(){ +dijit._justMouseDowned=false; +},0); +if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){ +return; +} +dijit._onTouchNode(_13||evt.target||evt.srcElement,"mouse"); +}; +var doc=dojo.isIE?_12.document.documentElement:_12.document; +if(doc){ +if(dojo.isIE){ +doc.attachEvent("onmousedown",_14); +var _15=function(evt){ +if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){ +dijit._onFocusNode(_13||evt.srcElement); +}else{ +dijit._onTouchNode(_13||evt.srcElement); +} +}; +doc.attachEvent("onactivate",_15); +var _16=function(evt){ +dijit._onBlurNode(_13||evt.srcElement); +}; +doc.attachEvent("ondeactivate",_16); +return function(){ +doc.detachEvent("onmousedown",_14); +doc.detachEvent("onactivate",_15); +doc.detachEvent("ondeactivate",_16); +doc=null; +}; +}else{ +doc.addEventListener("mousedown",_14,true); +var _17=function(evt){ +dijit._onFocusNode(_13||evt.target); +}; +doc.addEventListener("focus",_17,true); +var _18=function(evt){ +dijit._onBlurNode(_13||evt.target); +}; +doc.addEventListener("blur",_18,true); +return function(){ +doc.removeEventListener("mousedown",_14,true); +doc.removeEventListener("focus",_17,true); +doc.removeEventListener("blur",_18,true); +doc=null; +}; +} +} +},unregisterWin:function(_19){ +_19&&_19(); +},_onBlurNode:function(_1a){ +dijit._prevFocus=dijit._curFocus; +dijit._curFocus=null; +if(dijit._justMouseDowned){ +return; +} +if(dijit._clearActiveWidgetsTimer){ +clearTimeout(dijit._clearActiveWidgetsTimer); +} +dijit._clearActiveWidgetsTimer=setTimeout(function(){ +delete dijit._clearActiveWidgetsTimer; +dijit._setStack([]); +dijit._prevFocus=null; +},100); +},_onTouchNode:function(_1b,by){ +if(dijit._clearActiveWidgetsTimer){ +clearTimeout(dijit._clearActiveWidgetsTimer); +delete dijit._clearActiveWidgetsTimer; +} +var _1c=[]; +try{ +while(_1b){ +var _1d=dojo.attr(_1b,"dijitPopupParent"); +if(_1d){ +_1b=dijit.byId(_1d).domNode; +}else{ +if(_1b.tagName&&_1b.tagName.toLowerCase()=="body"){ +if(_1b===dojo.body()){ +break; +} +_1b=dojo.window.get(_1b.ownerDocument).frameElement; +}else{ +var id=_1b.getAttribute&&_1b.getAttribute("widgetId"),_1e=id&&dijit.byId(id); +if(_1e&&!(by=="mouse"&&_1e.get("disabled"))){ +_1c.unshift(id); +} +_1b=_1b.parentNode; +} +} +} +} +catch(e){ +} +dijit._setStack(_1c,by); +},_onFocusNode:function(_1f){ +if(!_1f){ +return; +} +if(_1f.nodeType==9){ +return; +} +dijit._onTouchNode(_1f); +if(_1f==dijit._curFocus){ +return; +} +if(dijit._curFocus){ +dijit._prevFocus=dijit._curFocus; +} +dijit._curFocus=_1f; +dojo.publish("focusNode",[_1f]); +},_setStack:function(_20,by){ +var _21=dijit._activeStack; +dijit._activeStack=_20; +for(var _22=0;_22=_22;i--){ +_23=dijit.byId(_21[i]); +if(_23){ +_23._focused=false; +_23._hasBeenBlurred=true; +if(_23._onBlur){ +_23._onBlur(by); +} +dojo.publish("widgetBlur",[_23,by]); +} +} +for(i=_22;i<_20.length;i++){ +_23=dijit.byId(_20[i]); +if(_23){ +_23._focused=true; +if(_23._onFocus){ +_23._onFocus(by); +} +dojo.publish("widgetFocus",[_23,by]); +} +} +}}); +dojo.addOnLoad(function(){ +var _24=dijit.registerWin(window); +if(dojo.isIE){ +dojo.addOnWindowUnload(function(){ +dijit.unregisterWin(_24); +_24=null; +}); +} +}); +} -- cgit v1.2.3