dist/js/mobile-angular-ui.js
function( e ){

				// Stop any throw in progress
				if( o.intercept ){
					o.intercept();
				}
				
				// Reset the distance and direction tracking
				resetVertTracking();
				resetHorTracking();
				
				elem = o.closest( e.target );
					
				if( !elem || elem === docElem || e.touches.length > 1 ){
					return;
				}			

				setPointers( "none" );
				var touchStartE = e,
					scrollT = elem.scrollTop,
					scrollL = elem.scrollLeft,
					height = elem.offsetHeight,
					width = elem.offsetWidth,
					startY = e.touches[ 0 ].pageY,
					startX = e.touches[ 0 ].pageX,
					scrollHeight = elem.scrollHeight,
					scrollWidth = elem.scrollWidth,
				
					// Touchmove handler
					move = function( e ){
					
						var ty = scrollT + startY - e.touches[ 0 ].pageY,
							tx = scrollL + startX - e.touches[ 0 ].pageX,
							down = ty >= ( lastTops.length ? lastTops[ 0 ] : 0 ),
							right = tx >= ( lastLefts.length ? lastLefts[ 0 ] : 0 );
							
						// If there's room to scroll the current container, prevent the default window scroll
						if( ( ty > 0 && ty < scrollHeight - height ) || ( tx > 0 && tx < scrollWidth - width ) ){
							e.preventDefault();
						}
						// This bubbling is dumb. Needs a rethink.
						else {
							changeScrollTarget( touchStartE );
						}
						
						// If down and lastDown are inequal, the y scroll has changed direction. Reset tracking.
						if( lastDown && down !== lastDown ){
							resetVertTracking();
						}
						
						// If right and lastRight are inequal, the x scroll has changed direction. Reset tracking.
						if( lastRight && right !== lastRight ){
							resetHorTracking();
						}
						
						// remember the last direction in which we were headed
						lastDown = down;
						lastRight = right;							
						
						// set the container's scroll
						elem.scrollTop = ty;
						elem.scrollLeft = tx;
					
						lastTops.unshift( ty );
						lastLefts.unshift( tx );
					
						if( lastTops.length > 3 ){
							lastTops.pop();
						}
						if( lastLefts.length > 3 ){
							lastLefts.pop();
						}
					},
				
					// Touchend handler
					end = function( e ){

						// Bring the pointers back
						setPointers( "auto" );
						setTimeout( function(){
							setPointers( "none" );
						}, 450 );
						elem.removeEventListener( "touchmove", move, false );
						elem.removeEventListener( "touchend", end, false );
					};
				
				elem.addEventListener( "touchmove", move, false );
				elem.addEventListener( "touchend", end, false );
			}
function( e ){

				// Stop any throw in progress
				if( o.intercept ){
					o.intercept();
				}
				
				// Reset the distance and direction tracking
				resetVertTracking();
				resetHorTracking();
				
				elem = o.closest( e.target );
					
				if( !elem || elem === docElem || e.touches.length > 1 ){
					return;
				}			

				setPointers( "none" );
				var touchStartE = e,
					scrollT = elem.scrollTop,
					scrollL = elem.scrollLeft,
					height = elem.offsetHeight,
					width = elem.offsetWidth,
					startY = e.touches[ 0 ].pageY,
					startX = e.touches[ 0 ].pageX,
					scrollHeight = elem.scrollHeight,
					scrollWidth = elem.scrollWidth,
				
					// Touchmove handler
					move = function( e ){
					
						var ty = scrollT + startY - e.touches[ 0 ].pageY,
							tx = scrollL + startX - e.touches[ 0 ].pageX,
							down = ty >= ( lastTops.length ? lastTops[ 0 ] : 0 ),
							right = tx >= ( lastLefts.length ? lastLefts[ 0 ] : 0 );
							
						// If there's room to scroll the current container, prevent the default window scroll
						if( ( ty > 0 && ty < scrollHeight - height ) || ( tx > 0 && tx < scrollWidth - width ) ){
							e.preventDefault();
						}
						// This bubbling is dumb. Needs a rethink.
						else {
							changeScrollTarget( touchStartE );
						}
						
						// If down and lastDown are inequal, the y scroll has changed direction. Reset tracking.
						if( lastDown && down !== lastDown ){
							resetVertTracking();
						}
						
						// If right and lastRight are inequal, the x scroll has changed direction. Reset tracking.
						if( lastRight && right !== lastRight ){
							resetHorTracking();
						}
						
						// remember the last direction in which we were headed
						lastDown = down;
						lastRight = right;							
						
						// set the container's scroll
						elem.scrollTop = ty;
						elem.scrollLeft = tx;
					
						lastTops.unshift( ty );
						lastLefts.unshift( tx );
					
						if( lastTops.length > 3 ){
							lastTops.pop();
						}
						if( lastLefts.length > 3 ){
							lastLefts.pop();
						}
					},
				
					// Touchend handler
					end = function( e ){

						// Bring the pointers back
						setPointers( "auto" );
						setTimeout( function(){
							setPointers( "none" );
						}, 450 );
						elem.removeEventListener( "touchmove", move, false );
						elem.removeEventListener( "touchend", end, false );
					};
				
				elem.addEventListener( "touchmove", move, false );
				elem.addEventListener( "touchend", end, false );
			}
function ( e ) { // Stop any throw in progress if ( o . intercept ) { o . intercept ( ) ; } // Reset the distance and direction tracking resetVertTracking ( ) ; resetHorTracking ( ) ; elem = o . closest ( e . target ) ; if ( ! elem || elem === docElem || e . touches . length > 1 ) { return ; } setPointers ( "none" ) ; var touchStartE = e , scrollT = elem . scrollTop , scrollL = elem . scrollLeft , height = elem . offsetHeight , width = elem . offsetWidth , startY = e . touches [ 0 ] . pageY , startX = e . touches [ 0 ] . pageX , scrollHeight = elem . scrollHeight , scrollWidth = elem . scrollWidth , // Touchmove handler move = function ( e ) { var ty = scrollT + startY - e . touches [ 0 ] . pageY , tx = scrollL + startX - e . touches [ 0 ] . pageX , down = ty >= ( lastTops . length ? lastTops [ 0 ] : 0 ) , right = tx >= ( lastLefts . length ? lastLefts [ 0 ] : 0 ) ; // If there's room to scroll the current container, prevent the default window scroll if ( ( ty > 0 && ty < scrollHeight - height ) || ( tx > 0 && tx < scrollWidth - width ) ) { e . preventDefault ( ) ; } // This bubbling is dumb. Needs a rethink. else { changeScrollTarget ( touchStartE ) ; } // If down and lastDown are inequal, the y scroll has changed direction. Reset tracking. if ( lastDown && down !== lastDown ) { resetVertTracking ( ) ; } // If right and lastRight are inequal, the x scroll has changed direction. Reset tracking. if ( lastRight && right !== lastRight ) { resetHorTracking ( ) ; } // remember the last direction in which we were headed lastDown = down ; lastRight = right ; // set the container's scroll elem . scrollTop = ty ; elem . scrollLeft = tx ; lastTops . unshift ( ty ) ; lastLefts . unshift ( tx ) ; if ( lastTops . length > 3 ) { lastTops . pop ( ) ; } if ( lastLefts . length > 3 ) { lastLefts . pop ( ) ; } } , // Touchend handler end = function ( e ) { // Bring the pointers back setPointers ( "auto" ) ; setTimeout ( function ( ) { setPointers ( "none" ) ; } , 450 ) ; elem . removeEventListener ( "touchmove" , move , false ) ; elem . removeEventListener ( "touchend" , end , false ) ; } ; elem . addEventListener ( "touchmove" , move , false ) ; elem . addEventListener ( "touchend" , end , false ) ; }
Fill 'er up! From here down, all logic is associated with touch scroll handling elem references the overthrow element in use
Fill er up! From here down all logic is associated with touch scroll handling elem references the overthrow element in use