OSDN Git Service

Version 0.6.47, fix for IE5 & Opera7.x.
[pettanr/clientJs.git] / 0.6.x / js / ui / 05_XUI_Gesture.js
index 2f93f52..1c7dc77 100644 (file)
@@ -4,8 +4,6 @@
  *  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
@@ -39,7 +37,7 @@ X.UI = X.UI || {};
                        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
@@ -95,14 +93,14 @@ X.UI = X.UI || {};
                                        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
@@ -138,13 +136,9 @@ X.UI = X.UI || {};
                                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
@@ -163,8 +157,6 @@ X.UI = X.UI || {};
                                active = hammer.activeGesture;\r
                        };\r
                        \r
-                       console.log( '3 : ' + type + ' .............. ' + last_move_event.type )\r
-                       \r
                        // ----------------------------------------------------------------------------------------------------------------\r
                        // ret = Detection.detect( e );\r
 \r
@@ -210,21 +202,20 @@ X.UI = X.UI || {};
                                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
@@ -264,19 +255,20 @@ X.UI = X.UI || {};
 \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
@@ -290,7 +282,7 @@ X.UI = X.UI || {};
                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
@@ -362,20 +354,20 @@ X.UI = X.UI || {};
                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
@@ -604,7 +596,9 @@ X.UI = X.UI || {};
                 */\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
@@ -614,14 +608,34 @@ X.UI = X.UI || {};
                        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
@@ -742,8 +756,8 @@ X.UI = X.UI || {};
        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
@@ -772,14 +786,14 @@ X.UI = X.UI || {};
                                        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
@@ -793,8 +807,8 @@ X.UI = X.UI || {};
        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
@@ -812,12 +826,12 @@ X.UI = X.UI || {};
 \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
@@ -831,8 +845,8 @@ X.UI = X.UI || {};
        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
@@ -847,15 +861,15 @@ X.UI = X.UI || {};
                                // 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
@@ -873,8 +887,8 @@ X.UI = X.UI || {};
        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
@@ -897,7 +911,7 @@ X.UI = X.UI || {};
                        // 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
@@ -932,22 +946,22 @@ X.UI = X.UI || {};
 \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
@@ -960,7 +974,7 @@ X.UI = X.UI || {};
 \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
@@ -975,8 +989,8 @@ X.UI = X.UI || {};
        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
@@ -992,7 +1006,7 @@ X.UI = X.UI || {};
                        // 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
@@ -1021,26 +1035,26 @@ X.UI = X.UI || {};
 \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