* Jorik Tangelder <j.tangelder@gmail.com>, MIT license\r
**/\r
\r
-X.UI = X.UI || {};\r
-\r
( function( Math, window, document, undefined ){\r
\r
var ELEENT_LIST = [],\r
numTouches = 0,// count the total touches on the screen\r
pointerType, i, l, touches, ret, active, gesture, startEv,\r
deltaTime, deltaX, deltaY, velocity;\r
- console.log( '1 : ' + type + ' .............. ' + e.type )\r
+\r
if( !type ) return;\r
\r
if( e.pointerType ){\r
POINTERS[ i ] && ( touches[ touches.length ] = POINTERS[ i ] );\r
};\r
numTouches = touches.length;\r
- }\r
+ } else\r
// touch\r
- else if ( type & TOUCH ){ //sourceEventType.match(/touch/)) {\r
+ if ( type & TOUCH ){ //sourceEventType.match(/touch/)) {\r
touches = Hammer.DO_TOUCHES_FIX && type & END ? [] : e.touches;\r
numTouches = touches.length;\r
- }\r
+ } else\r
// mouse\r
- else if( !touch_triggered ){\r
+ if( !touch_triggered ){\r
numTouches = ( type & END ) ? 0 : 1;\r
touches = numTouches === 0 ? [] : [{\r
identifier : 1,\r
pointerType : type & POINTER_TYPE_MASK\r
};\r
\r
- console.log( '2 : ' + type + ' .............. ' + last_move_event.type )\r
-\r
if( type & START ){\r
- console.log( '2a : ' + type + ' .............. ' + last_move_event.type )\r
if( !this.enabled ) return;\r
// already busy with a Hammer.gesture detection on an element\r
- console.log( '2b : ' + type + ' .............. ' + last_move_event.type )\r
if( Detection.current ) return;\r
Detection.current = {\r
hammer : this, // reference to HammerInstance we're working for\r
active = hammer.activeGesture;\r
};\r
\r
- console.log( '3 : ' + type + ' .............. ' + last_move_event.type )\r
- \r
// ----------------------------------------------------------------------------------------------------------------\r
// ret = Detection.detect( e );\r
\r
startEvent : startEv\r
});\r
\r
-\r
+ // store as previous event event\r
+ Detection.current.lastEvent = e;\r
+ \r
// call Hammer.gesture handlers\r
for( i = 0, l = gestures.length; i < l; ++i ){\r
gesture = gestures[ i ];\r
if( Detection.stopped ) break;\r
- if( active[ gesture.name ] ) console.log( gesture.name );\r
+ //if( active[ gesture.name ] ) console.log( gesture.name );\r
// only when the instance options have enabled this gesture\r
active[ gesture.name ] &&\r
// if a handler returns false, we stop with the detection\r
( ret |= ( gesture.handler.call( gesture, e, hammer ) || X.Callback.NONE ) );\r
};\r
\r
- // store as previous event event\r
- Detection.current.lastEvent = e;\r
-\r
// endevent, but not the last touch, so dont stop\r
type & END && numTouches === 0 && Detection.stopDetect();\r
\r
\r
// Register all gestures inside Gestures\r
for( name in Gestures ){\r
- Gestures.hasOwnProperty( name ) && Detection.register( Gestures[ name ] );\r
+ //Gestures.hasOwnProperty( name ) && \r
+ Detection.register( Gestures[ name ] );\r
};\r
\r
if( navigator.pointerEnabled || navigator.msPointerEnabled ){\r
- Hammer.EVENT_TYPES_START = [ X.View.Event._POINTER_DOWN ];\r
- types = [ X.View.Event._POINTER_MOVE, X.View.Event._POINTER_UP, X.View.Event._POINTER_CANCEL ];\r
+ Hammer.EVENT_TYPES_START = [ X.UI.Event._POINTER_DOWN ];\r
+ types = [ X.UI.Event._POINTER_MOVE, X.UI.Event._POINTER_UP, X.UI.Event._POINTER_CANCEL ];\r
} else\r
if( window.ontouchstart !== void 0 ){\r
- Hammer.EVENT_TYPES_START = [ X.View.Event._TOUCH_START ];\r
- types = [ X.View.Event._TOUCH_MOVE, X.View.Event._MOUSE_MOVE, X.View.Event._TOUCH_END, X.View.Event._TOUCH_CANCEL ];\r
+ Hammer.EVENT_TYPES_START = [ X.UI.Event._TOUCH_START ];\r
+ types = [ X.UI.Event._TOUCH_MOVE, X.UI.Event._MOUSE_MOVE, X.UI.Event._TOUCH_END, X.UI.Event._TOUCH_CANCEL ];\r
} else {\r
- Hammer.EVENT_TYPES_START = [ X.View.Event._MOUSE_DOWN ];\r
- types = [ X.View.Event._MOUSE_MOVE, X.View.Event._MOUSE_UP, X.View.Event._MOUSE_CANCEL ];\r
+ Hammer.EVENT_TYPES_START = [ X.UI.Event._MOUSE_DOWN ];\r
+ types = [ X.UI.Event._MOUSE_MOVE, X.UI.Event._MOUSE_UP, X.UI.Event._MOUSE_CANCEL ];\r
};\r
\r
// Add touch events on the document\r
if( !this.types[ type ] ) return;\r
var e = Utils.extend( {}, gesture );\r
e.type = type;\r
- console.log( 'trigger : ' + type )\r
+ console.log( 'trigger : ' + type );\r
return this.uinode.dispatch( e );\r
};\r
\r
EVENT_TYPE_MASK = START | MOVE | END,\r
POINTER_TYPE_MASK = POINTER | TOUCH | MOUSE | PEN,\r
IdToGestureID = {};\r
- IdToGestureID[ X.View.Event._POINTER_DOWN ] = START;\r
- IdToGestureID[ X.View.Event._POINTER_MOVE ] = MOVE;\r
- IdToGestureID[ X.View.Event._POINTER_UP ] = END;\r
- IdToGestureID[ X.View.Event._POINTER_CANCEL ] = END;\r
+ IdToGestureID[ X.UI.Event._POINTER_DOWN ] = START;\r
+ IdToGestureID[ X.UI.Event._POINTER_MOVE ] = MOVE;\r
+ IdToGestureID[ X.UI.Event._POINTER_UP ] = END;\r
+ IdToGestureID[ X.UI.Event._POINTER_CANCEL ] = END;\r
\r
- IdToGestureID[ X.View.Event._TOUCH_START ] = START;\r
- IdToGestureID[ X.View.Event._TOUCH_MOVE ] = MOVE;\r
- IdToGestureID[ X.View.Event._TOUCH_END ] = END;\r
- IdToGestureID[ X.View.Event._TOUCH_CANCEL ] = END;\r
+ IdToGestureID[ X.UI.Event._TOUCH_START ] = START;\r
+ IdToGestureID[ X.UI.Event._TOUCH_MOVE ] = MOVE;\r
+ IdToGestureID[ X.UI.Event._TOUCH_END ] = END;\r
+ IdToGestureID[ X.UI.Event._TOUCH_CANCEL ] = END;\r
\r
- IdToGestureID[ X.View.Event._MOUSE_DOWN ] = START;\r
- IdToGestureID[ X.View.Event._MOUSE_MOVE ] = MOVE;\r
- IdToGestureID[ X.View.Event._MOUSE_UP ] = END;\r
- IdToGestureID[ X.View.Event._MOUSE_CANCEL ] = END;\r
+ IdToGestureID[ X.UI.Event._MOUSE_DOWN ] = START;\r
+ IdToGestureID[ X.UI.Event._MOUSE_MOVE ] = MOVE;\r
+ IdToGestureID[ X.UI.Event._MOUSE_UP ] = END;\r
+ IdToGestureID[ X.UI.Event._MOUSE_CANCEL ] = END;\r
\r
Utils = {\r
\r
*/\r
register : function( gesture ){\r
// add an enable gesture options if there is no given\r
- var options = gesture.defaults || {};\r
+ var options = gesture.defaults || {},\r
+ list = Detection.gestures,\r
+ _index, i = 0, l = list.length, index;\r
if( options[ gesture.name ] === undefined ) options[ gesture.name ] = true;\r
\r
// extend Hammer default options with the Hammer.gesture options\r
gesture.index = gesture.index || 1000;\r
\r
// add Hammer.gesture to the list\r
- Detection.gestures.push( gesture );\r
+ //Detection.gestures.push( gesture );\r
\r
// sort the list by index\r
- Detection.gestures.sort( function( a, b ){\r
- return\r
- a.index < b.index ? -1 :\r
- a.index > b.index ? 1 : 0;\r
- });\r
+ //Detection.gestures.sort( function( a, b ){\r
+ // return\r
+ // a.index < b.index ? -1 :\r
+ // a.index > b.index ? 1 : 0;\r
+ //});\r
+ if( l === 0 ){\r
+ list[ 0 ] = gesture;\r
+ return;\r
+ };\r
+ _index = gesture.index;\r
+ for( i = 0; i < l; ++i ){\r
+ index = list[ i ].index;\r
+ if( i === 0 && _index < index ){\r
+ list.unshift( gesture );\r
+ return;\r
+ } else\r
+ if( i === l - 1 ){\r
+ list[ l ] = gesture;\r
+ return;\r
+ } else\r
+ if( index <= _index && _index < list[ i + 1 ].index ){\r
+ list.splice( i, 0, gesture );\r
+ return;\r
+ };\r
+ };\r
}\r
};\r
\r
Gestures.Hold = {\r
name : 'hold',\r
index : 10,\r
- startID : X.View.Event.HOLD,\r
- endID : X.View.Event.HOLD_END,\r
+ startID : X.UI.Event.HOLD,\r
+ endID : X.UI.Event.HOLD_END,\r
defaults : {\r
hold_timeout : 500,\r
hold_threshold : 1\r
this.timerID && X.Timer.remove( this.timerID );\r
if( Gestures.Hold.holding === true ){\r
Gestures.Hold.holding = false;\r
- return hammer.trigger( X.View.Event.HOLD_END, e );\r
+ return hammer.trigger( X.UI.Event.HOLD_END, e );\r
};\r
break;\r
};\r
},\r
_onTimer : function( e, hammer ){\r
if( Detection.current.name === 'hold' ){\r
- hammer.trigger( X.View.Event.HOLD, e );\r
+ hammer.trigger( X.UI.Event.HOLD, e );\r
Gestures.Hold.holding = true;\r
};\r
}\r
Gestures.Tap = {\r
name : 'tap',\r
index : 100,\r
- startID : X.View.Event.TAP,\r
- endID : X.View.Event.DOUBLE_TAP,\r
+ startID : X.UI.Event.TAP,\r
+ endID : X.UI.Event.DOUBLE_TAP,\r
defaults : {\r
tap_max_touchtime : 250,\r
tap_max_distance : 10,\r
\r
// check if double tap\r
if( prev && prev.name === 'tap' && ( e.timeStamp - prev.lastEvent.timeStamp ) < hammer.options.doubletap_interval && e.distance < hammer.options.doubletap_distance ){\r
- return hammer.trigger( X.View.Event.DOUBLE_TAP, e );\r
+ return hammer.trigger( X.UI.Event.DOUBLE_TAP, e );\r
} else\r
// do a single tap\r
if( hammer.options.tap_always ){\r
Detection.current.name = 'tap';\r
- return hammer.trigger( X.View.Event.TAP, e );\r
+ return hammer.trigger( X.UI.Event.TAP, e );\r
};\r
};\r
}\r
Gestures.Swipe = {\r
name : 'swipe',\r
index : 40,\r
- startID : X.View.Event.SWIP,\r
- endID : X.View.Event.SWIP_DOWN,\r
+ startID : X.UI.Event.SWIP,\r
+ endID : X.UI.Event.SWIP_DOWN,\r
defaults : {\r
// set 0 for unlimited, but this can conflict with transform\r
swipe_max_touches : 1,\r
// or we can be already in dragging\r
if( hammer.options.swipe_velocity < e.velocityX || hammer.options.swipe_velocity < e.velocityY ){\r
// trigger swipe events\r
- hammer.trigger( X.View.Event.SWIP, e );\r
+ hammer.trigger( X.UI.Event.SWIP, e );\r
hammer.trigger(\r
e.direction === Hammer.DIRECTION_UP ?\r
- X.View.Event.SWIP_UP :\r
+ X.UI.Event.SWIP_UP :\r
e.direction === Hammer.DIRECTION_DOWN ?\r
- X.View.Event.SWIP_DOWN :\r
+ X.UI.Event.SWIP_DOWN :\r
e.direction === Hammer.DIRECTION_LEFT ?\r
- X.View.Event.SWIP_LEFT :\r
- X.View.Event.SWIP_RIGHT,\r
+ X.UI.Event.SWIP_LEFT :\r
+ X.UI.Event.SWIP_RIGHT,\r
e\r
);\r
};\r
Gestures.Drag = {\r
name : 'drag',\r
index : 50,\r
- startID : X.View.Event.DRAG,\r
- endID : X.View.Event.DRAG_DOWN,\r
+ startID : X.UI.Event.DRAG,\r
+ endID : X.UI.Event.DRAG_DOWN,\r
defaults : {\r
drag_min_distance : 10,\r
// set 0 for unlimited, but this can conflict with transform\r
// current gesture isnt drag, but dragged is true\r
// this means an other gesture is busy. now call dragend\r
if( Detection.current.name !== this.name && this.triggered ){\r
- hammer.trigger( X.View.Event.DRAG_END, e );\r
+ hammer.trigger( X.UI.Event.DRAG_END, e );\r
this.triggered = false;\r
return;\r
};\r
\r
// first time, trigger dragstart event\r
if( !this.triggered ){\r
- hammer.trigger( X.View.Event.DRAG_START, e );\r
+ hammer.trigger( X.UI.Event.DRAG_START, e );\r
this.triggered = true;\r
};\r
\r
// trigger normal event\r
- hammer.trigger( X.View.Event.DRAG, e );\r
+ hammer.trigger( X.UI.Event.DRAG, e );\r
\r
// direction event, like dragdown\r
hammer.trigger(\r
e.direction === Hammer.DIRECTION_UP ?\r
- X.View.Event.DRAG_UP :\r
+ X.UI.Event.DRAG_UP :\r
e.direction === Hammer.DIRECTION_DOWN ?\r
- X.View.Event.DRAG_DOWN :\r
+ X.UI.Event.DRAG_DOWN :\r
e.direction === Hammer.DIRECTION_LEFT ?\r
- X.View.Event.DRAG_LEFT :\r
- X.View.Event.DRAG_RIGHT,\r
+ X.UI.Event.DRAG_LEFT :\r
+ X.UI.Event.DRAG_RIGHT,\r
e\r
);\r
\r
\r
case END:\r
// trigger dragend\r
- this.triggered && hammer.trigger( X.View.Event.DRAG_END, e );\r
+ this.triggered && hammer.trigger( X.UI.Event.DRAG_END, e );\r
this.triggered = false;\r
break;\r
}\r
Gestures.Transform = {\r
name : 'transform',\r
index : 45,\r
- startID : X.View.Event.TRANSFORM,\r
- endID : X.View.Event.ROTATE,\r
+ startID : X.UI.Event.TRANSFORM,\r
+ endID : X.UI.Event.ROTATE,\r
defaults : {\r
// factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1\r
transform_min_scale : 0.01,\r
// current gesture isnt drag, but dragged is true\r
// this means an other gesture is busy. now call dragend\r
if( Detection.current.name !== this.name && this.triggered ){\r
- hammer.trigger( X.View.Event.TRANSFORM_END, e );\r
+ hammer.trigger( X.UI.Event.TRANSFORM_END, e );\r
this.triggered = false;\r
return;\r
};\r
\r
// first time, trigger dragstart event\r
if( !this.triggered ){\r
- hammer.trigger( X.View.Event.TRANSFORM_START, e );\r
+ hammer.trigger( X.UI.Event.TRANSFORM_START, e );\r
this.triggered = true;\r
};\r
\r
- hammer.trigger( X.View.Event.TRANSFORM, e );\r
+ hammer.trigger( X.UI.Event.TRANSFORM, e );\r
// basic transform event\r
\r
// trigger rotate event\r
- hammer.options.transform_min_rotation < rotation_threshold && hammer.trigger( X.View.Event.ROTATE, e );\r
+ hammer.options.transform_min_rotation < rotation_threshold && hammer.trigger( X.UI.Event.ROTATE, e );\r
\r
// trigger pinch event\r
if( scale_threshold > hammer.options.transform_min_scale ){\r
- hammer.trigger( X.View.Event.PINCH, e );\r
- hammer.trigger( e.scale < 1 ? X.View.Event.PINCH_IN : X.View.Event.PINCH_OUT, e );\r
+ hammer.trigger( X.UI.Event.PINCH, e );\r
+ hammer.trigger( e.scale < 1 ? X.UI.Event.PINCH_IN : X.UI.Event.PINCH_OUT, e );\r
};\r
break;\r
\r
case END:\r
// trigger dragend\r
- this.triggered && hammer.trigger( X.View.Event.TRANSFORM_END, e );\r
+ this.triggered && hammer.trigger( X.UI.Event.TRANSFORM_END, e );\r
this.triggered = false;\r
break;\r
};\r