//>>built define("dojox/mobile/scrollable",["dojo/_base/kernel","dojo/_base/connect","dojo/_base/event","dojo/_base/lang","dojo/_base/window","dojo/dom-class","dojo/dom-construct","dojo/dom-style","./sniff"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9){ var dm=_4.getObject("dojox.mobile",true); var _a=function(_b,_c){ this.fixedHeaderHeight=0; this.fixedFooterHeight=0; this.isLocalFooter=false; this.scrollBar=true; this.scrollDir="v"; this.weight=0.6; this.fadeScrollBar=true; this.disableFlashScrollBar=false; this.threshold=4; this.constraint=true; this.touchNode=null; this.isNested=false; this.dirLock=false; this.height=""; this.androidWorkaroud=true; this.init=function(_d){ if(_d){ for(var p in _d){ if(_d.hasOwnProperty(p)){ this[p]=((p=="domNode"||p=="containerNode")&&typeof _d[p]=="string")?_5.doc.getElementById(_d[p]):_d[p]; } } } this.touchNode=this.touchNode||this.containerNode; this._v=(this.scrollDir.indexOf("v")!=-1); this._h=(this.scrollDir.indexOf("h")!=-1); this._f=(this.scrollDir=="f"); this._ch=[]; this._ch.push(_2.connect(this.touchNode,_9("touch")?"touchstart":"onmousedown",this,"onTouchStart")); if(_9("webkit")){ this._ch.push(_2.connect(this.domNode,"webkitAnimationEnd",this,"onFlickAnimationEnd")); this._ch.push(_2.connect(this.domNode,"webkitAnimationStart",this,"onFlickAnimationStart")); this._aw=this.androidWorkaroud&&_9("android")>=2.2&&_9("android")<3; if(this._aw){ this._ch.push(_2.connect(_5.global,"onresize",this,"onScreenSizeChanged")); this._ch.push(_2.connect(_5.global,"onfocus",this,function(e){ if(this.containerNode.style.webkitTransform){ this.stopAnimation(); this.toTopLeft(); } })); this._sz=this.getScreenSize(); } for(var i=0;i<3;i++){ this.setKeyframes(null,null,i); } } if(_9("iphone")){ _8.set(this.containerNode,"webkitTransform","translate3d(0,0,0)"); } this._speed={x:0,y:0}; this._appFooterHeight=0; if(this.isTopLevel()&&!this.noResize){ this.resize(); } var _e=this; setTimeout(function(){ _e.flashScrollBar(); },600); }; this.isTopLevel=function(){ return true; }; this.cleanup=function(){ if(this._ch){ for(var i=0;i0){ _5.body().scrollTop=st; } } }else{ if(this._cPos){ _8.set(c,{top:this._cPos.y+"px",left:this._cPos.x+"px"}); this._cPos=null; } var _11=this.domNode.getElementsByTagName("*"); for(var i=0;i<_11.length;i++){ _11[i].blur&&_11[i].blur(); } dm.resizeAll&&dm.resizeAll(); } }; this.onScreenSizeChanged=function(e){ var sz=this.getScreenSize(); if(sz.w*sz.h>this._sz.w*this._sz.h){ this._sz=sz; } this.disableScroll(this.isKeyboardShown()); }; this.toTransform=function(e){ var c=this.containerNode; if(c.offsetTop===0&&c.offsetLeft===0||!c._webkitTransform){ return; } _8.set(c,{webkitTransform:c._webkitTransform,top:"0px",left:"0px"}); c._webkitTransform=null; }; this.toTopLeft=function(){ var c=this.containerNode; if(!c.style.webkitTransform){ return; } c._webkitTransform=c.style.webkitTransform; var pos=this.getPos(); _8.set(c,{webkitTransform:"",top:pos.y+"px",left:pos.x+"px"}); }; this.resize=function(e){ this._appFooterHeight=(this.fixedFooterHeight&&!this.isLocalFooter)?this.fixedFooterHeight:0; if(this.isLocalHeader){ this.containerNode.style.marginTop=this.fixedHeaderHeight+"px"; } var top=0; for(var n=this.domNode;n&&n.tagName!="BODY";n=n.offsetParent){ n=this.findDisp(n); if(!n){ break; } top+=n.offsetTop; } var h,_12=this.getScreenSize().h,dh=_12-top-this._appFooterHeight; if(this.height==="inherit"){ if(this.domNode.offsetParent){ h=this.domNode.offsetParent.offsetHeight+"px"; } }else{ if(this.height==="auto"){ var _13=this.domNode.offsetParent; if(_13){ this.domNode.style.height="0px"; var _14=_13.getBoundingClientRect(),_15=this.domNode.getBoundingClientRect(),_16=_14.bottom-this._appFooterHeight; if(_15.bottom>=_16){ dh=_12-(_15.top-_14.top)-this._appFooterHeight; }else{ dh=_16-_15.bottom; } } var _17=Math.max(this.domNode.scrollHeight,this.containerNode.scrollHeight); h=(_17?Math.min(_17,dh):dh)+"px"; }else{ if(this.height){ h=this.height; } } } if(!h){ h=dh+"px"; } if(h.charAt(0)!=="-"&&h!=="default"){ this.domNode.style.height=h; } this.onTouchEnd(); }; this.onFlickAnimationStart=function(e){ _3.stop(e); }; this.onFlickAnimationEnd=function(e){ var an=e&&e.animationName; if(an&&an.indexOf("scrollableViewScroll2")===-1){ if(an.indexOf("scrollableViewScroll0")!==-1){ _6.remove(this._scrollBarNodeV,"mblScrollableScrollTo0"); }else{ if(an.indexOf("scrollableViewScroll1")!==-1){ _6.remove(this._scrollBarNodeH,"mblScrollableScrollTo1"); }else{ if(this._scrollBarNodeV){ this._scrollBarNodeV.className=""; } if(this._scrollBarNodeH){ this._scrollBarNodeH.className=""; } } } return; } if(e&&e.srcElement){ _3.stop(e); } this.stopAnimation(); if(this._bounce){ var _18=this; var _19=_18._bounce; setTimeout(function(){ _18.slideTo(_19,0.3,"ease-out"); },0); _18._bounce=undefined; }else{ this.hideScrollBar(); this.removeCover(); if(this._aw){ this.toTopLeft(); } } }; this.isFormElement=function(_1a){ if(_1a&&_1a.nodeType!==1){ _1a=_1a.parentNode; } if(!_1a||_1a.nodeType!==1){ return false; } var t=_1a.tagName; return (t==="SELECT"||t==="INPUT"||t==="TEXTAREA"||t==="BUTTON"); }; this.onTouchStart=function(e){ if(this.disableTouchScroll){ return; } if(this._conn&&(new Date()).getTime()-this.startTime<500){ return; } if(!this._conn){ this._conn=[]; this._conn.push(_2.connect(_5.doc,_9("touch")?"touchmove":"onmousemove",this,"onTouchMove")); this._conn.push(_2.connect(_5.doc,_9("touch")?"touchend":"onmouseup",this,"onTouchEnd")); } this._aborted=false; if(_6.contains(this.containerNode,"mblScrollableScrollTo2")){ this.abort(); }else{ if(this._scrollBarNodeV){ this._scrollBarNodeV.className=""; } if(this._scrollBarNodeH){ this._scrollBarNodeH.className=""; } } if(this._aw){ this.toTransform(e); } this.touchStartX=e.touches?e.touches[0].pageX:e.clientX; this.touchStartY=e.touches?e.touches[0].pageY:e.clientY; this.startTime=(new Date()).getTime(); this.startPos=this.getPos(); this._dim=this.getDim(); this._time=[0]; this._posX=[this.touchStartX]; this._posY=[this.touchStartY]; this._locked=false; if(!this.isFormElement(e.target)&&!this.isNested){ _3.stop(e); } }; this.onTouchMove=function(e){ if(this._locked){ return; } var x=e.touches?e.touches[0].pageX:e.clientX; var y=e.touches?e.touches[0].pageY:e.clientY; var dx=x-this.touchStartX; var dy=y-this.touchStartY; var to={x:this.startPos.x+dx,y:this.startPos.y+dy}; var dim=this._dim; dx=Math.abs(dx); dy=Math.abs(dy); if(this._time.length==1){ if(this.dirLock){ if(this._v&&!this._h&&dx>=this.threshold&&dx>=dy||(this._h||this._f)&&!this._v&&dy>=this.threshold&&dy>=dx){ this._locked=true; return; } } if(this._v&&Math.abs(dy)0){ to.y=Math.round(to.y*_1b); }else{ if(to.y<-dim.o.h){ if(dim.c.h0){ to.x=Math.round(to.x*_1b); }else{ if(to.x<-dim.o.w){ if(dim.c.w=2){ var d0,d1; if(this._v&&!this._h){ d0=this._posY[n-1]-this._posY[n-2]; d1=y-this._posY[n-1]; }else{ if(!this._v&&this._h){ d0=this._posX[n-1]-this._posX[n-2]; d1=x-this._posX[n-1]; } } if(d0*d1<0){ this._time=[this._time[n-1]]; this._posX=[this._posX[n-1]]; this._posY=[this._posY[n-1]]; n=1; } } if(n==max){ this._time.shift(); this._posX.shift(); this._posY.shift(); } this._time.push((new Date()).getTime()-this.startTime); this._posX.push(x); this._posY.push(y); }; this.onTouchEnd=function(e){ if(this._locked){ return; } var _1c=this._speed={x:0,y:0}; var dim=this._dim; var pos=this.getPos(); var to={}; if(e){ if(!this._conn){ return; } for(var i=0;i0){ if(pos.y>0){ _20=0.3; to.y=0; }else{ to.y=Math.min(to.y,20); _21="linear"; _22.y=0; } }else{ if(-_1c.y>dim.o.h-(-pos.y)){ if(pos.y<-dim.o.h){ _20=0.3; to.y=dim.c.h<=dim.d.h?0:-dim.o.h; }else{ to.y=Math.max(to.y,-dim.o.h-20); _21="linear"; _22.y=-dim.o.h; } } } } if((this._h||this._f)&&this.constraint){ if(to.x>0){ if(pos.x>0){ _20=0.3; to.x=0; }else{ to.x=Math.min(to.x,20); _21="linear"; _22.x=0; } }else{ if(-_1c.x>dim.o.w-(-pos.x)){ if(pos.x<-dim.o.w){ _20=0.3; to.x=dim.c.w<=dim.d.w?0:-dim.o.w; }else{ to.x=Math.max(to.x,-dim.o.w-20); _21="linear"; _22.x=-dim.o.w; } } } } this._bounce=(_22.x!==undefined||_22.y!==undefined)?_22:undefined; if(_20===undefined){ var _23,_24; if(this._v&&this._h){ _24=Math.sqrt(_1c.x+_1c.x+_1c.y*_1c.y); _23=Math.sqrt(Math.pow(to.y-pos.y,2)+Math.pow(to.x-pos.x,2)); }else{ if(this._v){ _24=_1c.y; _23=to.y-pos.y; }else{ if(this._h){ _24=_1c.x; _23=to.x-pos.x; } } } if(_23===0&&!e){ return; } _20=_24!==0?Math.abs(_23/_24):0.01; } this.slideTo(to,_20,_21); }; this.adjustDestination=function(to,pos){ }; this.abort=function(){ this.scrollTo(this.getPos()); this.stopAnimation(); this._aborted=true; }; this.stopAnimation=function(){ _6.remove(this.containerNode,"mblScrollableScrollTo2"); if(_9("android")){ _8.set(this.containerNode,"webkitAnimationDuration","0s"); } if(this._scrollBarV){ this._scrollBarV.className=""; } if(this._scrollBarH){ this._scrollBarH.className=""; } }; this.getSpeed=function(){ var x=0,y=0,n=this._time.length; if(n>=2&&(new Date()).getTime()-this.startTime-this._time[n-1]<500){ var dy=this._posY[n-(n>3?2:1)]-this._posY[(n-6)>=0?n-6:0]; var dx=this._posX[n-(n>3?2:1)]-this._posX[(n-6)>=0?n-6:0]; var dt=this._time[n-(n>3?2:1)]-this._time[(n-6)>=0?n-6:0]; y=this.calcSpeed(dy,dt); x=this.calcSpeed(dx,dt); } return {x:x,y:y}; }; this.calcSpeed=function(d,t){ return Math.round(d/t*100)*4; }; this.scrollTo=function(to,_25,_26){ var s=(_26||this.containerNode).style; if(_9("webkit")){ s.webkitTransform=this.makeTranslateStr(to); }else{ if(this._v){ s.top=to.y+"px"; } if(this._h||this._f){ s.left=to.x+"px"; } } if(!_25){ this.scrollScrollBarTo(this.calcScrollBarPos(to)); } }; this.slideTo=function(to,_27,_28){ this._runSlideAnimation(this.getPos(),to,_27,_28,this.containerNode,2); this.slideScrollBarTo(to,_27,_28); }; this.makeTranslateStr=function(to){ var y=this._v&&typeof to.y=="number"?to.y+"px":"0px"; var x=(this._h||this._f)&&typeof to.x=="number"?to.x+"px":"0px"; return dm.hasTranslate3d?"translate3d("+x+","+y+",0px)":"translate("+x+","+y+")"; }; this.getPos=function(){ if(_9("webkit")){ var m=_5.doc.defaultView.getComputedStyle(this.containerNode,"")["-webkit-transform"]; if(m&&m.indexOf("matrix")===0){ var arr=m.split(/[,\s\)]+/); return {y:arr[5]-0,x:arr[4]-0}; } return {x:0,y:0}; }else{ var y=parseInt(this.containerNode.style.top)||0; return {y:y,x:this.containerNode.offsetLeft}; } }; this.getDim=function(){ var d={}; d.c={h:this.containerNode.offsetHeight,w:this.containerNode.offsetWidth}; d.v={h:this.domNode.offsetHeight+this._appFooterHeight,w:this.domNode.offsetWidth}; d.d={h:d.v.h-this.fixedHeaderHeight-this.fixedFooterHeight,w:d.v.w}; d.o={h:d.c.h-d.v.h+this.fixedHeaderHeight+this.fixedFooterHeight,w:d.c.w-d.v.w}; return d; }; this.showScrollBar=function(){ if(!this.scrollBar){ return; } var dim=this._dim; if(this.scrollDir=="v"&&dim.c.h<=dim.d.h){ return; } if(this.scrollDir=="h"&&dim.c.w<=dim.d.w){ return; } if(this._v&&this._h&&dim.c.h<=dim.d.h&&dim.c.w<=dim.d.w){ return; } var _29=function(_2a,dir){ var bar=_2a["_scrollBarNode"+dir]; if(!bar){ var _2b=_7.create("div",null,_2a.domNode); var _2c={position:"absolute",overflow:"hidden"}; if(dir=="V"){ _2c.right="2px"; _2c.width="5px"; }else{ _2c.bottom=(_2a.isLocalFooter?_2a.fixedFooterHeight:0)+2+"px"; _2c.height="5px"; } _8.set(_2b,_2c); _2b.className="mblScrollBarWrapper"; _2a["_scrollBarWrapper"+dir]=_2b; bar=_7.create("div",null,_2b); _8.set(bar,{opacity:0.6,position:"absolute",backgroundColor:"#606060",fontSize:"1px",webkitBorderRadius:"2px",MozBorderRadius:"2px",webkitTransformOrigin:"0 0",zIndex:2147483647}); _8.set(bar,dir=="V"?{width:"5px"}:{height:"5px"}); _2a["_scrollBarNode"+dir]=bar; } return bar; }; if(this._v&&!this._scrollBarV){ this._scrollBarV=_29(this,"V"); } if(this._h&&!this._scrollBarH){ this._scrollBarH=_29(this,"H"); } this.resetScrollBar(); }; this.hideScrollBar=function(){ var _2d; if(this.fadeScrollBar&&_9("webkit")){ if(!dm._fadeRule){ var _2e=_7.create("style",null,_5.doc.getElementsByTagName("head")[0]); _2e.textContent=".mblScrollableFadeScrollBar{"+" -webkit-animation-duration: 1s;"+" -webkit-animation-name: scrollableViewFadeScrollBar;}"+"@-webkit-keyframes scrollableViewFadeScrollBar{"+" from { opacity: 0.6; }"+" to { opacity: 0; }}"; dm._fadeRule=_2e.sheet.cssRules[1]; } _2d=dm._fadeRule; } if(!this.scrollBar){ return; } var f=function(bar,_2f){ _8.set(bar,{opacity:0,webkitAnimationDuration:""}); if(_2f._aw){ bar.style.webkitTransform=""; }else{ bar.className="mblScrollableFadeScrollBar"; } }; if(this._scrollBarV){ f(this._scrollBarV,this); this._scrollBarV=null; } if(this._scrollBarH){ f(this._scrollBarH,this); this._scrollBarH=null; } }; this.calcScrollBarPos=function(to){ var pos={}; var dim=this._dim; var f=function(_30,_31,t,d,c){ var y=Math.round((d-_31-8)/(d-c)*t); if(y<-_31+5){ y=-_31+5; } if(y>_30-5){ y=_30-5; } return y; }; if(typeof to.y=="number"&&this._scrollBarV){ pos.y=f(this._scrollBarWrapperV.offsetHeight,this._scrollBarV.offsetHeight,to.y,dim.d.h,dim.c.h); } if(typeof to.x=="number"&&this._scrollBarH){ pos.x=f(this._scrollBarWrapperH.offsetWidth,this._scrollBarH.offsetWidth,to.x,dim.d.w,dim.c.w); } return pos; }; this.scrollScrollBarTo=function(to){ if(!this.scrollBar){ return; } if(this._v&&this._scrollBarV&&typeof to.y=="number"){ if(_9("webkit")){ this._scrollBarV.style.webkitTransform=this.makeTranslateStr({y:to.y}); }else{ this._scrollBarV.style.top=to.y+"px"; } } if(this._h&&this._scrollBarH&&typeof to.x=="number"){ if(_9("webkit")){ this._scrollBarH.style.webkitTransform=this.makeTranslateStr({x:to.x}); }else{ this._scrollBarH.style.left=to.x+"px"; } } }; this.slideScrollBarTo=function(to,_32,_33){ if(!this.scrollBar){ return; } var _34=this.calcScrollBarPos(this.getPos()); var _35=this.calcScrollBarPos(to); if(this._v&&this._scrollBarV){ this._runSlideAnimation({y:_34.y},{y:_35.y},_32,_33,this._scrollBarV,0); } if(this._h&&this._scrollBarH){ this._runSlideAnimation({x:_34.x},{x:_35.x},_32,_33,this._scrollBarH,1); } }; this._runSlideAnimation=function(_36,to,_37,_38,_39,idx){ if(_9("webkit")){ this.setKeyframes(_36,to,idx); _8.set(_39,{webkitAnimationDuration:_37+"s",webkitAnimationTimingFunction:_38}); _6.add(_39,"mblScrollableScrollTo"+idx); if(idx==2){ this.scrollTo(to,true,_39); }else{ this.scrollScrollBarTo(to); } }else{ if(_b.fx&&_b.fx.easing&&_37){ var s=_b.fx.slideTo({node:_39,duration:_37*1000,left:to.x,top:to.y,easing:(_38=="ease-out")?_b.fx.easing.quadOut:_b.fx.easing.linear}).play(); if(idx==2){ _2.connect(s,"onEnd",this,"onFlickAnimationEnd"); } }else{ if(idx==2){ this.scrollTo(to,false,_39); this.onFlickAnimationEnd(); }else{ this.scrollScrollBarTo(to); } } } }; this.resetScrollBar=function(){ var f=function(_3a,bar,d,c,hd,v){ if(!bar){ return; } var _3b={}; _3b[v?"top":"left"]=hd+4+"px"; var t=(d-8)<=0?1:d-8; _3b[v?"height":"width"]=t+"px"; _8.set(_3a,_3b); var l=Math.round(d*d/c); l=Math.min(Math.max(l-8,5),t); bar.style[v?"height":"width"]=l+"px"; _8.set(bar,{"opacity":0.6}); }; var dim=this.getDim(); f(this._scrollBarWrapperV,this._scrollBarV,dim.d.h,dim.c.h,this.fixedHeaderHeight,true); f(this._scrollBarWrapperH,this._scrollBarH,dim.d.w,dim.c.w,0); this.createMask(); }; this.createMask=function(){ if(!_9("webkit")){ return; } var ctx; if(this._scrollBarWrapperV){ var h=this._scrollBarWrapperV.offsetHeight; ctx=_5.doc.getCSSCanvasContext("2d","scrollBarMaskV",5,h); ctx.fillStyle="rgba(0,0,0,0.5)"; ctx.fillRect(1,0,3,2); ctx.fillRect(0,1,5,1); ctx.fillRect(0,h-2,5,1); ctx.fillRect(1,h-1,3,2); ctx.fillStyle="rgb(0,0,0)"; ctx.fillRect(0,2,5,h-4); this._scrollBarWrapperV.style.webkitMaskImage="-webkit-canvas(scrollBarMaskV)"; } if(this._scrollBarWrapperH){ var w=this._scrollBarWrapperH.offsetWidth; ctx=_5.doc.getCSSCanvasContext("2d","scrollBarMaskH",w,5); ctx.fillStyle="rgba(0,0,0,0.5)"; ctx.fillRect(0,1,2,3); ctx.fillRect(1,0,1,5); ctx.fillRect(w-2,0,1,5); ctx.fillRect(w-1,1,2,3); ctx.fillStyle="rgb(0,0,0)"; ctx.fillRect(2,0,w-4,5); this._scrollBarWrapperH.style.webkitMaskImage="-webkit-canvas(scrollBarMaskH)"; } }; this.flashScrollBar=function(){ if(this.disableFlashScrollBar||!this.domNode){ return; } this._dim=this.getDim(); if(this._dim.d.h<=0){ return; } this.showScrollBar(); var _3c=this; setTimeout(function(){ _3c.hideScrollBar(); },300); }; this.addCover=function(){ if(!_9("touch")&&!this.noCover){ if(!this._cover){ this._cover=_7.create("div",null,_5.doc.body); _8.set(this._cover,{backgroundColor:"#ffff00",opacity:0,position:"absolute",top:"0px",left:"0px",width:"100%",height:"100%",zIndex:2147483647}); this._ch.push(_2.connect(this._cover,_9("touch")?"touchstart":"onmousedown",this,"onTouchEnd")); }else{ this._cover.style.display=""; } this.setSelectable(this._cover,false); this.setSelectable(this.domNode,false); } }; this.removeCover=function(){ if(!_9("touch")&&this._cover){ this._cover.style.display="none"; this.setSelectable(this._cover,true); this.setSelectable(this.domNode,true); } }; this.setKeyframes=function(_3d,to,idx){ if(!dm._rule){ dm._rule=[]; } if(!dm._rule[idx]){ var _3e=_7.create("style",null,_5.doc.getElementsByTagName("head")[0]); _3e.textContent=".mblScrollableScrollTo"+idx+"{-webkit-animation-name: scrollableViewScroll"+idx+";}"+"@-webkit-keyframes scrollableViewScroll"+idx+"{}"; dm._rule[idx]=_3e.sheet.cssRules[1]; } var _3f=dm._rule[idx]; if(_3f){ if(_3d){ _3f.deleteRule("from"); _3f.insertRule("from { -webkit-transform: "+this.makeTranslateStr(_3d)+"; }"); } if(to){ if(to.x===undefined){ to.x=_3d.x; } if(to.y===undefined){ to.y=_3d.y; } _3f.deleteRule("to"); _3f.insertRule("to { -webkit-transform: "+this.makeTranslateStr(to)+"; }"); } } }; this.setSelectable=function(_40,_41){ _40.style.KhtmlUserSelect=_41?"auto":"none"; _40.style.MozUserSelect=_41?"":"none"; _40.onselectstart=_41?null:function(){ return false; }; if(_9("ie")){ _40.unselectable=_41?"":"on"; var _42=_40.getElementsByTagName("*"); for(var i=0;i<_42.length;i++){ _42[i].unselectable=_41?"":"on"; } } }; if(_9("webkit")){ var _43=_5.doc.createElement("div"); _43.style.webkitTransform="translate3d(0px,1px,0px)"; _5.doc.documentElement.appendChild(_43); var v=_5.doc.defaultView.getComputedStyle(_43,"")["-webkit-transform"]; dm.hasTranslate3d=v&&v.indexOf("matrix")===0; _5.doc.documentElement.removeChild(_43); } }; dm.scrollable=_a; return _a; });