scrollview-base-min.js revision d8d2286d8330892bb02eb2bf0735322f559ef5ef
YUI.add("scrollview-base",function(b){var g=b.ClassNameManager.getClassName,u="scrollview",t={vertical:g(u,"vert"),horizontal:g(u,"horiz")},y="scrollEnd",j="flick",a=j,i="ui",m="left",p="top",f="px",n="scrollY",o="scrollX",d="bounce",s="x",r="y",v="boundingBox",l="contentBox",x="",q="0s",h=b.UA.ie,c=b.Transition,e=c.useNative,k=function(B,A,z){return Math.min(Math.max(B,A),z);};function w(){w.superclass.constructor.apply(this,arguments);}b.ScrollView=b.extend(w,b.Widget,{initializer:function(){var z=this;z._cb=z.get(l);z._bb=z.get(v);},_uiSizeCB:function(){},_onTransEnd:function(z){this.fire(y);},bindUI:function(){var A=this,z=A._cb,E=A._bb,D=A._afterScrollChange,C=A._afterDimChange,B=A.get(a);E.on("gesturemovestart",b.bind(A._onGestureMoveStart,A));if(h){A._fixIESelect(E,z);}if(B){z.on("flick",b.bind(A._flick,A),B);}this.after({"scrollYChange":D,"scrollXChange":D,"heightChange":C,"widthChange":C});if(!h){this.after("renderedChange",function(F){this._uiDimensionsChange();});}},syncUI:function(){this._uiDimensionsChange();this.scrollTo(this.get(o),this.get(n));},scrollTo:function(J,I,D,G){var C=this._cb,E=(J!==null),B=(I!==null),A=(E)?J*-1:0,z=(B)?I*-1:0,F,H=w._TRANSITION,K=this._transEndCB;D=D||0;G=G||w.EASING;if(E){this.set(o,J,{src:i});}if(B){this.set(n,I,{src:i});}if(e){C.setStyle(H.DURATION,q).setStyle(H.PROPERTY,x);}if(D!==0){F={easing:G,duration:D/1000};if(e){F.transform=this._transform(A,z);}else{if(E){F.left=A+f;}if(B){F.top=z+f;}}if(!K){K=this._transEndCB=b.bind(this._onTransEnd,this);}C.transition(F,K);}else{if(e){C.setStyle("transform",this._transform(A,z));}else{if(E){C.setStyle(m,A+f);}if(B){C.setStyle(p,z+f);}}}},_transform:function(z,A){return(this._forceHWTransforms)?"translate("+z+"px,"+A+"px) translateZ(0px)":"translate("+z+"px,"+A+"px)";},_moveTo:function(A,z,B){if(e){A.setStyle("transform",this._transform(z,B));}else{A.setStyle(m,z+f);A.setStyle(p,B+f);}},_forceHWTransforms:b.UA.webkit,_prevent:{start:false,move:true,end:false},_onGestureMoveStart:function(A){var z=this,B=z._bb;if(z._prevent.start){A.preventDefault();}z._killTimer();z._hm=B.on("gesturemove",b.bind(z._onGestureMove,z));z._hme=B.on("gesturemoveend",b.bind(z._onGestureMoveEnd,z));z._startY=A.clientY+z.get(n);z._startX=A.clientX+z.get(o);z._startClientY=z._endClientY=A.clientY;z._startClientX=z._endClientX=A.clientX;z._isDragging=false;z._flicking=false;z._snapToEdge=false;},_onGestureMove:function(A){var z=this;if(z._prevent.move){A.preventDefault();}z._isDragging=true;z._endClientY=A.clientY;z._endClientX=A.clientX;if(z._scrollsVertical){z.set(n,-(A.clientY-z._startY));}if(z._scrollsHorizontal){z.set(o,-(A.clientX-z._startX));}},_onGestureMoveEnd:function(H){if(this._prevent.end){H.preventDefault();}var O=this,D=O._minScrollY,z=O._maxScrollY,E=O._minScrollX,B=O._maxScrollX,G=O._scrollsVertical,P=O._scrollsHorizontal,C=G?O._startClientY:O._startClientX,M=G?O._endClientY:O._endClientX,A=C-M,F=Math.abs(A),J=O._bb,N,L,K,I;O._hm.detach();O._hme.detach();O._scrolledHalfway=O._snapToEdge=O._isDragging=false;O.lastScrolledAmt=A;if((P&&F>J.get("offsetWidth")/2)||(G&&F>J.get("offsetHeight")/2)){O._scrolledHalfway=true;O._scrolledForward=A>0;}if(G){I=O.get(n);L=k(I,D,z);}if(P){K=O.get(o);N=k(K,E,B);}if(N!==K||L!==I){this._snapToEdge=true;if(G){O.set(n,L);}if(P){O.set(o,N);}}if(O._snapToEdge){return;}O.fire(y,{onGestureMoveEnd:true});return;},_afterScrollChange:function(A){var z=A.duration,C=A.easing,B=A.newVal;if(A.src!==i){if(A.attrName==o){this._uiScrollTo(B,null,z,C);}else{this._uiScrollTo(null,B,z,C);}}},_uiScrollTo:function(z,C,A,B){A=A||this._snapToEdge?400:0;B=B||this._snapToEdge?w.SNAP_EASING:null;this.scrollTo(z,C,A,B);},_afterDimChange:function(){this._uiDimensionsChange();},_getScrollDims:function(){var E,F=this.get(o),D=this.get(n),z=this.get(l),C=this.get(v),B,A=w._TRANSITION;if(e){z.setStyle(A.DURATION,q);z.setStyle(A.PROPERTY,x);}B=this._forceHWTransforms;this._forceHWTransforms=false;this._moveTo(z,0,0);E=[C.get("scrollWidth"),C.get("scrollHeight")];this._moveTo(z,-1*F,-1*D);this._forceHWTransforms=B;return E;},_uiDimensionsChange:function(){var A=this,F=A._bb,E=w.CLASS_NAMES,D=F.get("offsetWidth"),z=F.get("offsetHeight"),G=this._getScrollDims(),B=G[0],C=G[1];if(z&&C>z){A._scrollsVertical=true;A._maxScrollY=C-z;A._minScrollY=0;A._scrollHeight=C;F.addClass(E.vertical);}else{A._scrollsVertical=false;delete A._maxScrollY;delete A._minScrollY;delete A._scrollHeight;F.removeClass(E.vertical);}if(D&&B>D){A._scrollsHorizontal=true;A._maxScrollX=B-D;A._minScrollX=0;A._scrollWidth=B;F.addClass(E.horizontal);}else{A._scrollsHorizontal=false;delete A._maxScrollX;delete A._minScrollX;delete A._scrollWidth;F.removeClass(E.horizontal);}},_flick:function(B){var A=B.flick,z=this;z._currentVelocity=A.velocity;z._flicking=true;z._cDecel=z.get("deceleration");z._cBounce=z.get("bounce");z._pastYEdge=false;z._pastXEdge=false;z._flickFrame();z.fire(j);},_flickFrame:function(){var I=this,L,A,D,z,B,E,J=I._scrollsVertical,G=I._scrollsHorizontal,F=I._cDecel,K=I._cBounce,H=I._currentVelocity,C=w.FRAME_STEP;if(J){A=I._maxScrollY;D=I._minScrollY;L=I.get(n)-(H*C);}if(G){B=I._maxScrollX;E=I._minScrollX;z=I.get(o)-(H*C);}H=I._currentVelocity=(H*F);if(Math.abs(H).toFixed(4)<=0.015){I._flicking=false;I._killTimer(!(I._pastYEdge||I._pastXEdge));if(J){if(L<D){I._snapToEdge=true;I.set(n,D);}else{if(L>A){I._snapToEdge=true;I.set(n,A);}}}if(G){if(z<E){I._snapToEdge=true;I.set(o,E);}else{if(z>B){I._snapToEdge=true;I.set(o,B);}}}return;}if(J){if(L<D||L>A){I._pastYEdge=true;I._currentVelocity*=K;}I.set(n,L);}if(G){if(z<E||z>B){I._pastXEdge=true;I._currentVelocity*=K;}I.set(o,z);}if(!I._flickTimer){I._flickTimer=b.later(C,I,"_flickFrame",null,true);}},_killTimer:function(A){var z=this;if(z._flickTimer){z._flickTimer.cancel();z._flickTimer=null;}if(A){z.fire(y);}},_setScroll:function(F,E){var B=this._cachedBounce||this.get(d),A=w.BOUNCE_RANGE,D=(E==s)?this._maxScrollX:this._maxScrollY,C=B?-A:0,z=B?D+A:D;if(!B||!this._isDragging){if(F<C){F=C;}else{if(F>z){F=z;
}}}return F;},_setScrollX:function(z){return this._setScroll(z,s);},_setScrollY:function(z){return this._setScroll(z,r);}},{NAME:"scrollview",ATTRS:{scrollY:{value:0,setter:"_setScrollY"},scrollX:{value:0,setter:"_setScrollX"},deceleration:{value:0.93},bounce:{value:0.1},flick:{value:{minDistance:10,minVelocity:0.3}}},CLASS_NAMES:t,UI_SRC:i,BOUNCE_RANGE:150,FRAME_STEP:30,EASING:"cubic-bezier(0, 0.1, 0, 1.0)",SNAP_EASING:"ease-out",_TRANSITION:{DURATION:c._VENDOR_PREFIX+"TransitionDuration",PROPERTY:c._VENDOR_PREFIX+"TransitionProperty"}});},"@VERSION@",{requires:["widget","event-gestures","transition"],skinnable:true});