Introduction
            The udraggable plugin allows you to make elements
            draggable with a single line of code and to use a declarative syntax
            to define the constraints of the dragging behaviour.
            $('#star').udraggable({});
            See the examples page for more
            complex scenarios.
            The plugin is dual-licensed under the MIT and GPL licences.
            Caveats
            This plugin is much simpler and therefore much less capable than
            jQueryUI's draggable widget.  It aims to provide a minimum useful
            subset rather than attempting to clone the full range of behaviours
            supported by jQueryUI.  However some of the limitations can be
            worked around quite simply.
            Positioning: The plugin will give best results
            when the draggable elements and their parent container elements are
            both positioned using either absolute or
            relative positioning.
            Scrolling: Dragging (or 'swiping') is used to
            scroll on touch devices.  This can lead to conflict when some user
            interactions are intended to scroll and some are intended to drag
            specific elements.  The jquery.event.ue plugin effectively disables
            scrolling on touch devices.  This can work fine if the web
            application fills the full screen and uses touch/mouse events to
            adjust element positioning to achieve scrolling.  This page and the
            associated example pages use an experimental modified version of the
            plugin which supports both scrolling and dragging (test by dragging
            the star above).
            Auto-scrolling: If you drag an element outside
            the current viewport, the jQueryUI draggable can automatically
            scroll the page to bring the element back into view.  This plugin
            does not support auto-scrolling.  You can use the drag
            option to supply your own function to adjust the scroll position.
            Selection: When dragging an element, the
            click-drag-release sequence can have the side-effect of selecting
            text in the vicinity.  To avoid the visual flash, you can set the
            CSS property "user-select: none".  Alternatively, the
            experimental version of the jquery.event.ue plugin (linked above)
            also seems to fix this issue.
            Reference Documentation
            
            Options
            When the udraggable function is called, you can
            provide option name/value pairs as an object literal like this:
            $(selector).udraggable({opt1: value1, opt2: value2});
            
              
                | Name | 
                Description | 
              
              
                axis | 
                
                   A string value: either "x" or "y".
                  The drag operation will be constrained to the specified axis. 
                 | 
              
              
                containment | 
                
                   This option is used to specify an area within which the drag
                  operation should be contained.  Acceptable values are
                  the string "parent" or an array of pixel offset
                  values defining a rectangle: [left, top, right, bottom]. 
                  "parent" refers to the 'offset parent' - the
                  closest ancestor element that is positioned. 
                  The draggable element is assumed to be positioned relative
                  to its offset parent element (see "caveats" above) and if the
                  array of offsets is used, the values are relative to the
                  offset parent.  Note: it does make sense in
                  some circumstances for the 'top' and 'left' values to be
                  negative numbers.   |  
              
                delay | 
                
                   A delay value in milliseconds before the drag operation
                  will commence.  This is one way to reduce the chance of a drag
                  operation being triggered accidentally by tapping or clicking
                  on an element (see also distance). 
                 | 
              
              
                drag | 
                
                   This option allows you to specify a callback function
                  that will be invoked as the element is dragged.  The function
                  will be passed an event object and a ui
                  object.  Your function will be called after the
                  position of the element has been adjusted. 
                 | 
              
              
                distance | 
                
                   A distance value in pixels that the pointer must be moved
                  before the drag operation will commence.  This is one way to
                  reduce the chance of a drag operation being triggered
                  accidentally by tapping or clicking on an element (see also
                  delay). 
                 | 
              
              
                getStartPosition | 
                
                   You can use this option to replace the code that calculates
                  the initial position of the element before the drag begins.
                  The default implementation simply reads the top
                  and left CSS properties. 
                  The function you provide will be passed the target element
                  in a jQuery wrapper. 
                  Note: this option is not supported by the jQueryUI
                  draggable. 
                 | 
              
              
                grid | 
                
                   An array of two integers ([x, y]) specifying
                  the pixel size of a grid that should be used to constrain the
                  drag and give it a snap-to-grid behaviour. 
                 | 
              
              
                handle | 
                
                   Optional selector for a child element to be used as a drag
                  handle.  A drag will not start unless the initial mousedown /
                  touchstart event occurs on the selected element(s). 
                 | 
              
              
                longPress | 
                
                   Specify a boolean true value if the drag
                  should require a "long press" to start (i.e. press and hold
                  before starting the drag). 
                  Note: this option is not supported by the jQueryUI
                  draggable. 
                 | 
              
              
                positionElement | 
                
                   You can use this option to replace the code that positions
                  the element at each step of the drag. The default
                  implementation positions the element by adjusting its
                  top and left CSS properties. 
                  The function you provide will be passed 4 arguments: 
                  
                    $el — the element to be positioned
                    (jQuery wrapped) 
                    dragging — boolean indicating whether a
                    drag is in process, this value will be false for the final
                    update in a drag 
                    x — the new x (left) position 
                    y — the new y (top) position 
                   
                  Note: this option is not supported by the jQueryUI
                  draggable. 
                 | 
              
              
                start | 
                
                   This option allows you to specify a callback function that
                  will be called once when the drag operation begins (i.e.: after
                  the delay and/or distance constraints
                  have been met.  The function will be passed an event
                  object and a ui
                  object. 
                 | 
              
              
                stop | 
                
                   This option allows you to specify a callback function that
                  will be called once when the drag operation completes.  The function
                  will be passed an event object and a ui
                  object. 
                 | 
              
            
            When the callback functions (start, drag,
            stop) are called, they will be passed two arguments.  The
            first is an event object as provided by jquery.event.ue and the second
            is an object containing the following properties:
            
              
                | Property | 
                Description | 
              
              
                helper | 
                a jQuery object containing the dragged element | 
              
              
                offset | 
                an object specifying the current top
                and left offsets of the dragged element. | 
              
              
                originalPosition | 
                an object specifying the top and left
                offsets of the dragged element before the drag operation began. | 
              
              
                position | 
                an object specifying the current top
                and left offsets of the dragged element. | 
              
            
            Methods
            After the widget has been initialised, you can reference it
            again using the same selector and call a method like this:
            $(selector).udraggable('method-name', args);
            
              
                | Name | 
                Description | 
              
              
                destroy | 
                
                   This method will completely remove the
                  udraggable behaviour from the target
                  element.  The element position will be left unchanged. 
                 | 
              
              
                disable | 
                
                   This method will temporarily disable the
                  udraggable behaviour on the target element.  A
                  later call to the enable method will restore the
                  behaviour with the original options. 
                 | 
              
              
                enable | 
                
                   This method will restore the udraggable
                  behaviour on a target element that was turned off with the
                  disable method. 
                 | 
              
              
                option | 
                
                   This method allows you to get or set option values after
                  the udraggable behaviour has been applied to an
                  object. 
                  If called with no arguments, the current option names and
                  values will be returned as an object. 
                  If called with two arguments, the first is assumed to be
                  the name of the option you wish to change and the second is
                  the new value for that option. 
                  If called with a single argument, it is assumed to be an
                  object containing all the names and values of options you
                  wish to change. 
                 | 
              
            
            Examples
            
              - Example 1 - Options
 
              - Various examples demonstrating a range of different option
              settings to change drag constraints.
 
              - Example 2 - Methods
 
              - Examples demonstrating method calls to alter the
              udraggable behaviour after initial setup.
 
              - Example 3 - TKS-Web
 
              - The TKS-Web application is a web-based timesheeting system
              that uses jquery.udraggable.js to facilitate dragging and
              resizing activities on a calendar-style week view.
 
            
            
            Copyright © 2013-2017 Grant McLean