Initial OpenECOMP Portal commit
[portal.git] / ecomp-portal-FE / client / bower_components / jqTree / src / mouse.widget.coffee
diff --git a/ecomp-portal-FE/client/bower_components/jqTree/src/mouse.widget.coffee b/ecomp-portal-FE/client/bower_components/jqTree/src/mouse.widget.coffee
new file mode 100644 (file)
index 0000000..f76ff7e
--- /dev/null
@@ -0,0 +1,184 @@
+###
+This widget does the same a the mouse widget in jqueryui.
+###
+
+SimpleWidget = require './simple.widget'
+
+
+$ = jQuery
+
+
+class MouseWidget extends SimpleWidget
+    @is_mouse_handled = false
+
+    _init: ->
+        @$el.bind('mousedown.mousewidget', $.proxy(@_mouseDown, this))
+        @$el.bind('touchstart.mousewidget', $.proxy(@_touchStart, this))
+
+        @is_mouse_started = false
+        @mouse_delay = 0
+        @_mouse_delay_timer = null
+        @_is_mouse_delay_met = true
+        @mouse_down_info = null
+
+    _deinit: ->
+        @$el.unbind('mousedown.mousewidget')
+        @$el.unbind('touchstart.mousewidget')
+
+        $document = $(document)
+        $document.unbind('mousemove.mousewidget')
+        $document.unbind('mouseup.mousewidget')
+
+    _mouseDown: (e) ->
+        # Is left mouse button?
+        if e.which != 1
+            return
+
+        result = @_handleMouseDown(
+            e,
+            @_getPositionInfo(e)
+        )
+
+        if result
+            e.preventDefault()
+
+        return result
+
+    _handleMouseDown: (e, position_info) ->
+        # Don't let more than one widget handle mouseStart
+        if MouseWidget.is_mouse_handled
+            return
+
+        # We may have missed mouseup (out of window)
+        if @is_mouse_started
+            @_handleMouseUp(position_info)
+
+        @mouse_down_info = position_info
+
+        if not @_mouseCapture(position_info)
+            return
+
+        @_handleStartMouse()
+
+        @is_mouse_handled = true
+        return true
+
+    _handleStartMouse: ->
+        $document = $(document)
+        $document.bind('mousemove.mousewidget', $.proxy(@_mouseMove, this))
+        $document.bind('touchmove.mousewidget', $.proxy(@_touchMove, this))
+        $document.bind('mouseup.mousewidget', $.proxy(@_mouseUp, this))
+        $document.bind('touchend.mousewidget', $.proxy(@_touchEnd, this))
+
+        if @mouse_delay
+            @_startMouseDelayTimer()
+
+    _startMouseDelayTimer: ->
+        if @_mouse_delay_timer
+            clearTimeout(@_mouse_delay_timer)
+
+        @_mouse_delay_timer = setTimeout(
+            =>
+                @_is_mouse_delay_met = true
+            , @mouse_delay
+        )
+
+        @_is_mouse_delay_met = false
+
+    _mouseMove: (e) ->
+        return @_handleMouseMove(
+            e,
+            @_getPositionInfo(e)
+        )
+
+    _handleMouseMove: (e, position_info) ->
+        if @is_mouse_started
+            @_mouseDrag(position_info)
+            return e.preventDefault()
+
+        if @mouse_delay and not @_is_mouse_delay_met
+            return true
+
+        @is_mouse_started = @_mouseStart(@mouse_down_info) != false
+
+        if @is_mouse_started
+            @_mouseDrag(position_info)
+        else
+            @_handleMouseUp(position_info)
+
+        return not @is_mouse_started
+
+    _getPositionInfo: (e) ->
+        return {
+            page_x: e.pageX,
+            page_y: e.pageY,
+            target: e.target,
+            original_event: e
+        }
+
+    _mouseUp: (e) ->
+        return @_handleMouseUp(
+            @_getPositionInfo(e)
+        )
+
+    _handleMouseUp: (position_info) ->
+        $document = $(document)
+        $document.unbind('mousemove.mousewidget')
+        $document.unbind('touchmove.mousewidget')
+        $document.unbind('mouseup.mousewidget')
+        $document.unbind('touchend.mousewidget')
+
+        if @is_mouse_started
+            @is_mouse_started = false
+            @_mouseStop(position_info)
+
+        return
+
+    _mouseCapture: (position_info) ->
+        return true
+
+    _mouseStart: (position_info) ->
+        null
+
+    _mouseDrag: (position_info) ->
+        null
+
+    _mouseStop: (position_info) ->
+        null
+
+    setMouseDelay: (mouse_delay) ->
+        @mouse_delay = mouse_delay
+
+    _touchStart: (e) ->
+        if e.originalEvent.touches.length > 1
+            return
+
+        touch = e.originalEvent.changedTouches[0]
+
+        return @_handleMouseDown(
+            e,
+            @_getPositionInfo(touch)
+        )
+
+    _touchMove: (e) ->
+        if e.originalEvent.touches.length > 1
+            return
+
+        touch = e.originalEvent.changedTouches[0]
+
+        return @_handleMouseMove(
+            e,
+            @_getPositionInfo(touch)
+        )
+
+    _touchEnd: (e) ->
+        if e.originalEvent.touches.length > 1
+            return
+
+        touch = e.originalEvent.changedTouches[0]
+
+        return @_handleMouseUp(
+            @_getPositionInfo(touch)
+        )
+
+module.exports = MouseWidget