design/js/jquery-sortable.js
author ymh <ymh.work@gmail.com>
Fri, 30 Nov 2018 22:05:02 +0100
changeset 187 7c745d8cb321
parent 121 21ac67ebf9e7
permissions -rw-r--r--
Added tag 0.1.0 for changeset 3458941945e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
121
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
     1
/* ===================================================
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
     2
 *  jquery-sortable.js v0.9.13
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
     3
 *  http://johnny.github.com/jquery-sortable/
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
     4
 * ===================================================
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
     5
 *  Copyright (c) 2012 Jonas von Andrian
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
     6
 *  All rights reserved.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
     7
 *
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
     8
 *  Redistribution and use in source and binary forms, with or without
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
     9
 *  modification, are permitted provided that the following conditions are met:
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    10
 *  * Redistributions of source code must retain the above copyright
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    11
 *    notice, this list of conditions and the following disclaimer.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    12
 *  * Redistributions in binary form must reproduce the above copyright
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    13
 *    notice, this list of conditions and the following disclaimer in the
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    14
 *    documentation and/or other materials provided with the distribution.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    15
 *  * The name of the author may not be used to endorse or promote products
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    16
 *    derived from this software without specific prior written permission.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    17
 *
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    18
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    19
 *  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    20
 *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    21
 *  DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    22
 *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    23
 *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    24
 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    25
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    26
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    27
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    28
 * ========================================================== */
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    29
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    30
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    31
!function ( $, window, pluginName, undefined){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    32
  var containerDefaults = {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    33
    // If true, items can be dragged from this container
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    34
    drag: true,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    35
    // If true, items can be droped onto this container
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    36
    drop: true,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    37
    // Exclude items from being draggable, if the
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    38
    // selector matches the item
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    39
    exclude: "",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    40
    // If true, search for nested containers within an item.If you nest containers,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    41
    // either the original selector with which you call the plugin must only match the top containers,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    42
    // or you need to specify a group (see the bootstrap nav example)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    43
    nested: true,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    44
    // If true, the items are assumed to be arranged vertically
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    45
    vertical: true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    46
  }, // end container defaults
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    47
  groupDefaults = {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    48
    // This is executed after the placeholder has been moved.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    49
    // $closestItemOrContainer contains the closest item, the placeholder
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    50
    // has been put at or the closest empty Container, the placeholder has
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    51
    // been appended to.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    52
    afterMove: function ($placeholder, container, $closestItemOrContainer) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    53
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    54
    // The exact css path between the container and its items, e.g. "> tbody"
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    55
    containerPath: "",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    56
    // The css selector of the containers
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    57
    containerSelector: "ol, ul",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    58
    // Distance the mouse has to travel to start dragging
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    59
    distance: 0,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    60
    // Time in milliseconds after mousedown until dragging should start.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    61
    // This option can be used to prevent unwanted drags when clicking on an element.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    62
    delay: 0,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    63
    // The css selector of the drag handle
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    64
    handle: "",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    65
    // The exact css path between the item and its subcontainers.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    66
    // It should only match the immediate items of a container.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    67
    // No item of a subcontainer should be matched. E.g. for ol>div>li the itemPath is "> div"
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    68
    itemPath: "",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    69
    // The css selector of the items
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    70
    itemSelector: "li",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    71
    // The class given to "body" while an item is being dragged
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    72
    bodyClass: "dragging",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    73
    // The class giving to an item while being dragged
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    74
    draggedClass: "dragged",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    75
    // Check if the dragged item may be inside the container.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    76
    // Use with care, since the search for a valid container entails a depth first search
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    77
    // and may be quite expensive.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    78
    isValidTarget: function ($item, container) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    79
      return true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    80
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    81
    // Executed before onDrop if placeholder is detached.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    82
    // This happens if pullPlaceholder is set to false and the drop occurs outside a container.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    83
    onCancel: function ($item, container, _super, event) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    84
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    85
    // Executed at the beginning of a mouse move event.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    86
    // The Placeholder has not been moved yet.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    87
    onDrag: function ($item, position, _super, event) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    88
      $item.css(position)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    89
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    90
    // Called after the drag has been started,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    91
    // that is the mouse button is being held down and
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    92
    // the mouse is moving.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    93
    // The container is the closest initialized container.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    94
    // Therefore it might not be the container, that actually contains the item.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    95
    onDragStart: function ($item, container, _super, event) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    96
      $item.css({
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    97
        height: $item.outerHeight(),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    98
        width: $item.outerWidth()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
    99
      })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   100
      $item.addClass(container.group.options.draggedClass)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   101
      $("body").addClass(container.group.options.bodyClass)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   102
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   103
    // Called when the mouse button is being released
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   104
    onDrop: function ($item, container, _super, event) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   105
      $item.removeClass(container.group.options.draggedClass).removeAttr("style")
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   106
      $("body").removeClass(container.group.options.bodyClass)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   107
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   108
    // Called on mousedown. If falsy value is returned, the dragging will not start.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   109
    // Ignore if element clicked is input, select or textarea
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   110
    onMousedown: function ($item, _super, event) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   111
      if (!event.target.nodeName.match(/^(input|select|textarea)$/i)) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   112
        event.preventDefault()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   113
        return true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   114
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   115
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   116
    // The class of the placeholder (must match placeholder option markup)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   117
    placeholderClass: "placeholder",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   118
    // Template for the placeholder. Can be any valid jQuery input
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   119
    // e.g. a string, a DOM element.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   120
    // The placeholder must have the class "placeholder"
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   121
    placeholder: '<li class="placeholder"></li>',
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   122
    // If true, the position of the placeholder is calculated on every mousemove.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   123
    // If false, it is only calculated when the mouse is above a container.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   124
    pullPlaceholder: true,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   125
    // Specifies serialization of the container group.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   126
    // The pair $parent/$children is either container/items or item/subcontainers.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   127
    serialize: function ($parent, $children, parentIsContainer) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   128
      var result = $.extend({}, $parent.data())
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   129
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   130
      if(parentIsContainer)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   131
        return [$children]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   132
      else if ($children[0]){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   133
        result.children = $children
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   134
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   135
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   136
      delete result.subContainers
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   137
      delete result.sortable
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   138
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   139
      return result
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   140
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   141
    // Set tolerance while dragging. Positive values decrease sensitivity,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   142
    // negative values increase it.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   143
    tolerance: 0
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   144
  }, // end group defaults
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   145
  containerGroups = {},
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   146
  groupCounter = 0,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   147
  emptyBox = {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   148
    left: 0,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   149
    top: 0,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   150
    bottom: 0,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   151
    right:0
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   152
  },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   153
  eventNames = {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   154
    start: "touchstart.sortable mousedown.sortable",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   155
    drop: "touchend.sortable touchcancel.sortable mouseup.sortable",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   156
    drag: "touchmove.sortable mousemove.sortable",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   157
    scroll: "scroll.sortable"
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   158
  },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   159
  subContainerKey = "subContainers"
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   160
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   161
  /*
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   162
   * a is Array [left, right, top, bottom]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   163
   * b is array [left, top]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   164
   */
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   165
  function d(a,b) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   166
    var x = Math.max(0, a[0] - b[0], b[0] - a[1]),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   167
    y = Math.max(0, a[2] - b[1], b[1] - a[3])
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   168
    return x+y;
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   169
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   170
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   171
  function setDimensions(array, dimensions, tolerance, useOffset) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   172
    var i = array.length,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   173
    offsetMethod = useOffset ? "offset" : "position"
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   174
    tolerance = tolerance || 0
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   175
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   176
    while(i--){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   177
      var el = array[i].el ? array[i].el : $(array[i]),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   178
      // use fitting method
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   179
      pos = el[offsetMethod]()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   180
      pos.left += parseInt(el.css('margin-left'), 10)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   181
      pos.top += parseInt(el.css('margin-top'),10)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   182
      dimensions[i] = [
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   183
        pos.left - tolerance,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   184
        pos.left + el.outerWidth() + tolerance,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   185
        pos.top - tolerance,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   186
        pos.top + el.outerHeight() + tolerance
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   187
      ]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   188
    }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   189
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   190
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   191
  function getRelativePosition(pointer, element) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   192
    var offset = element.offset()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   193
    return {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   194
      left: pointer.left - offset.left,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   195
      top: pointer.top - offset.top
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   196
    }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   197
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   198
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   199
  function sortByDistanceDesc(dimensions, pointer, lastPointer) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   200
    pointer = [pointer.left, pointer.top]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   201
    lastPointer = lastPointer && [lastPointer.left, lastPointer.top]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   202
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   203
    var dim,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   204
    i = dimensions.length,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   205
    distances = []
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   206
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   207
    while(i--){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   208
      dim = dimensions[i]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   209
      distances[i] = [i,d(dim,pointer), lastPointer && d(dim, lastPointer)]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   210
    }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   211
    distances = distances.sort(function  (a,b) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   212
      return b[1] - a[1] || b[2] - a[2] || b[0] - a[0]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   213
    })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   214
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   215
    // last entry is the closest
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   216
    return distances
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   217
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   218
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   219
  function ContainerGroup(options) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   220
    this.options = $.extend({}, groupDefaults, options)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   221
    this.containers = []
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   222
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   223
    if(!this.options.rootGroup){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   224
      this.scrollProxy = $.proxy(this.scroll, this)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   225
      this.dragProxy = $.proxy(this.drag, this)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   226
      this.dropProxy = $.proxy(this.drop, this)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   227
      this.placeholder = $(this.options.placeholder)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   228
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   229
      if(!options.isValidTarget)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   230
        this.options.isValidTarget = undefined
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   231
    }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   232
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   233
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   234
  ContainerGroup.get = function  (options) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   235
    if(!containerGroups[options.group]) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   236
      if(options.group === undefined)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   237
        options.group = groupCounter ++
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   238
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   239
      containerGroups[options.group] = new ContainerGroup(options)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   240
    }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   241
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   242
    return containerGroups[options.group]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   243
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   244
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   245
  ContainerGroup.prototype = {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   246
    dragInit: function  (e, itemContainer) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   247
      this.$document = $(itemContainer.el[0].ownerDocument)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   248
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   249
      // get item to drag
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   250
      var closestItem = $(e.target).closest(this.options.itemSelector);
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   251
      // using the length of this item, prevents the plugin from being started if there is no handle being clicked on.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   252
      // this may also be helpful in instantiating multidrag.
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   253
      if (closestItem.length) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   254
        this.item = closestItem;
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   255
        this.itemContainer = itemContainer;
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   256
        if (this.item.is(this.options.exclude) || !this.options.onMousedown(this.item, groupDefaults.onMousedown, e)) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   257
            return;
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   258
        }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   259
        this.setPointer(e);
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   260
        this.toggleListeners('on');
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   261
        this.setupDelayTimer();
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   262
        this.dragInitDone = true;
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   263
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   264
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   265
    drag: function  (e) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   266
      if(!this.dragging){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   267
        if(!this.distanceMet(e) || !this.delayMet)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   268
          return
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   269
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   270
        this.options.onDragStart(this.item, this.itemContainer, groupDefaults.onDragStart, e)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   271
        this.item.before(this.placeholder)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   272
        this.dragging = true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   273
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   274
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   275
      this.setPointer(e)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   276
      // place item under the cursor
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   277
      this.options.onDrag(this.item,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   278
                          getRelativePosition(this.pointer, this.item.offsetParent()),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   279
                          groupDefaults.onDrag,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   280
                          e)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   281
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   282
      var p = this.getPointer(e),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   283
      box = this.sameResultBox,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   284
      t = this.options.tolerance
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   285
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   286
      if(!box || box.top - t > p.top || box.bottom + t < p.top || box.left - t > p.left || box.right + t < p.left)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   287
        if(!this.searchValidTarget()){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   288
          this.placeholder.detach()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   289
          this.lastAppendedItem = undefined
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   290
        }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   291
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   292
    drop: function  (e) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   293
      this.toggleListeners('off')
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   294
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   295
      this.dragInitDone = false
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   296
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   297
      if(this.dragging){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   298
        // processing Drop, check if placeholder is detached
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   299
        if(this.placeholder.closest("html")[0]){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   300
          this.placeholder.before(this.item).detach()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   301
        } else {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   302
          this.options.onCancel(this.item, this.itemContainer, groupDefaults.onCancel, e)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   303
        }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   304
        this.options.onDrop(this.item, this.getContainer(this.item), groupDefaults.onDrop, e)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   305
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   306
        // cleanup
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   307
        this.clearDimensions()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   308
        this.clearOffsetParent()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   309
        this.lastAppendedItem = this.sameResultBox = undefined
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   310
        this.dragging = false
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   311
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   312
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   313
    searchValidTarget: function  (pointer, lastPointer) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   314
      if(!pointer){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   315
        pointer = this.relativePointer || this.pointer
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   316
        lastPointer = this.lastRelativePointer || this.lastPointer
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   317
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   318
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   319
      var distances = sortByDistanceDesc(this.getContainerDimensions(),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   320
                                         pointer,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   321
                                         lastPointer),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   322
      i = distances.length
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   323
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   324
      while(i--){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   325
        var index = distances[i][0],
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   326
        distance = distances[i][1]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   327
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   328
        if(!distance || this.options.pullPlaceholder){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   329
          var container = this.containers[index]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   330
          if(!container.disabled){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   331
            if(!this.$getOffsetParent()){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   332
              var offsetParent = container.getItemOffsetParent()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   333
              pointer = getRelativePosition(pointer, offsetParent)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   334
              lastPointer = getRelativePosition(lastPointer, offsetParent)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   335
            }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   336
            if(container.searchValidTarget(pointer, lastPointer))
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   337
              return true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   338
          }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   339
        }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   340
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   341
      if(this.sameResultBox)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   342
        this.sameResultBox = undefined
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   343
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   344
    movePlaceholder: function  (container, item, method, sameResultBox) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   345
      var lastAppendedItem = this.lastAppendedItem
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   346
      if(!sameResultBox && lastAppendedItem && lastAppendedItem[0] === item[0])
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   347
        return;
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   348
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   349
      item[method](this.placeholder)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   350
      this.lastAppendedItem = item
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   351
      this.sameResultBox = sameResultBox
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   352
      this.options.afterMove(this.placeholder, container, item)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   353
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   354
    getContainerDimensions: function  () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   355
      if(!this.containerDimensions)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   356
        setDimensions(this.containers, this.containerDimensions = [], this.options.tolerance, !this.$getOffsetParent())
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   357
      return this.containerDimensions
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   358
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   359
    getContainer: function  (element) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   360
      return element.closest(this.options.containerSelector).data(pluginName)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   361
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   362
    $getOffsetParent: function  () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   363
      if(this.offsetParent === undefined){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   364
        var i = this.containers.length - 1,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   365
        offsetParent = this.containers[i].getItemOffsetParent()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   366
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   367
        if(!this.options.rootGroup){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   368
          while(i--){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   369
            if(offsetParent[0] != this.containers[i].getItemOffsetParent()[0]){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   370
              // If every container has the same offset parent,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   371
              // use position() which is relative to this parent,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   372
              // otherwise use offset()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   373
              // compare #setDimensions
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   374
              offsetParent = false
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   375
              break;
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   376
            }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   377
          }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   378
        }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   379
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   380
        this.offsetParent = offsetParent
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   381
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   382
      return this.offsetParent
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   383
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   384
    setPointer: function (e) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   385
      var pointer = this.getPointer(e)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   386
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   387
      if(this.$getOffsetParent()){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   388
        var relativePointer = getRelativePosition(pointer, this.$getOffsetParent())
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   389
        this.lastRelativePointer = this.relativePointer
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   390
        this.relativePointer = relativePointer
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   391
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   392
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   393
      this.lastPointer = this.pointer
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   394
      this.pointer = pointer
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   395
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   396
    distanceMet: function (e) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   397
      var currentPointer = this.getPointer(e)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   398
      return (Math.max(
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   399
        Math.abs(this.pointer.left - currentPointer.left),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   400
        Math.abs(this.pointer.top - currentPointer.top)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   401
      ) >= this.options.distance)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   402
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   403
    getPointer: function(e) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   404
      var o = e.originalEvent || e.originalEvent.touches && e.originalEvent.touches[0]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   405
      return {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   406
        left: e.pageX || o.pageX,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   407
        top: e.pageY || o.pageY
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   408
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   409
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   410
    setupDelayTimer: function () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   411
      var that = this
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   412
      this.delayMet = !this.options.delay
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   413
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   414
      // init delay timer if needed
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   415
      if (!this.delayMet) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   416
        clearTimeout(this._mouseDelayTimer);
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   417
        this._mouseDelayTimer = setTimeout(function() {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   418
          that.delayMet = true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   419
        }, this.options.delay)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   420
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   421
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   422
    scroll: function  (e) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   423
      this.clearDimensions()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   424
      this.clearOffsetParent() // TODO is this needed?
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   425
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   426
    toggleListeners: function (method) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   427
      var that = this,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   428
      events = ['drag','drop','scroll']
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   429
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   430
      $.each(events,function  (i,event) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   431
        that.$document[method](eventNames[event], that[event + 'Proxy'])
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   432
      })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   433
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   434
    clearOffsetParent: function () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   435
      this.offsetParent = undefined
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   436
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   437
    // Recursively clear container and item dimensions
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   438
    clearDimensions: function  () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   439
      this.traverse(function(object){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   440
        object._clearDimensions()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   441
      })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   442
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   443
    traverse: function(callback) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   444
      callback(this)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   445
      var i = this.containers.length
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   446
      while(i--){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   447
        this.containers[i].traverse(callback)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   448
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   449
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   450
    _clearDimensions: function(){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   451
      this.containerDimensions = undefined
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   452
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   453
    _destroy: function () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   454
      containerGroups[this.options.group] = undefined
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   455
    }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   456
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   457
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   458
  function Container(element, options) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   459
    this.el = element
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   460
    this.options = $.extend( {}, containerDefaults, options)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   461
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   462
    this.group = ContainerGroup.get(this.options)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   463
    this.rootGroup = this.options.rootGroup || this.group
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   464
    this.handle = this.rootGroup.options.handle || this.rootGroup.options.itemSelector
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   465
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   466
    var itemPath = this.rootGroup.options.itemPath
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   467
    this.target = itemPath ? this.el.find(itemPath) : this.el
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   468
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   469
    this.target.on(eventNames.start, this.handle, $.proxy(this.dragInit, this))
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   470
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   471
    if(this.options.drop)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   472
      this.group.containers.push(this)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   473
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   474
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   475
  Container.prototype = {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   476
    dragInit: function  (e) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   477
      var rootGroup = this.rootGroup
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   478
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   479
      if( !this.disabled &&
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   480
          !rootGroup.dragInitDone &&
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   481
          this.options.drag &&
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   482
          this.isValidDrag(e)) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   483
        rootGroup.dragInit(e, this)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   484
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   485
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   486
    isValidDrag: function(e) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   487
      return e.which == 1 ||
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   488
        e.type == "touchstart" && e.originalEvent.touches.length == 1
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   489
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   490
    searchValidTarget: function  (pointer, lastPointer) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   491
      var distances = sortByDistanceDesc(this.getItemDimensions(),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   492
                                         pointer,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   493
                                         lastPointer),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   494
      i = distances.length,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   495
      rootGroup = this.rootGroup,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   496
      validTarget = !rootGroup.options.isValidTarget ||
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   497
        rootGroup.options.isValidTarget(rootGroup.item, this)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   498
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   499
      if(!i && validTarget){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   500
        rootGroup.movePlaceholder(this, this.target, "append")
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   501
        return true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   502
      } else
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   503
        while(i--){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   504
          var index = distances[i][0],
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   505
          distance = distances[i][1]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   506
          if(!distance && this.hasChildGroup(index)){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   507
            var found = this.getContainerGroup(index).searchValidTarget(pointer, lastPointer)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   508
            if(found)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   509
              return true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   510
          }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   511
          else if(validTarget){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   512
            this.movePlaceholder(index, pointer)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   513
            return true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   514
          }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   515
        }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   516
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   517
    movePlaceholder: function  (index, pointer) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   518
      var item = $(this.items[index]),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   519
      dim = this.itemDimensions[index],
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   520
      method = "after",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   521
      width = item.outerWidth(),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   522
      height = item.outerHeight(),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   523
      offset = item.offset(),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   524
      sameResultBox = {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   525
        left: offset.left,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   526
        right: offset.left + width,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   527
        top: offset.top,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   528
        bottom: offset.top + height
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   529
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   530
      if(this.options.vertical){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   531
        var yCenter = (dim[2] + dim[3]) / 2,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   532
        inUpperHalf = pointer.top <= yCenter
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   533
        if(inUpperHalf){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   534
          method = "before"
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   535
          sameResultBox.bottom -= height / 2
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   536
        } else
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   537
          sameResultBox.top += height / 2
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   538
      } else {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   539
        var xCenter = (dim[0] + dim[1]) / 2,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   540
        inLeftHalf = pointer.left <= xCenter
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   541
        if(inLeftHalf){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   542
          method = "before"
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   543
          sameResultBox.right -= width / 2
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   544
        } else
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   545
          sameResultBox.left += width / 2
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   546
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   547
      if(this.hasChildGroup(index))
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   548
        sameResultBox = emptyBox
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   549
      this.rootGroup.movePlaceholder(this, item, method, sameResultBox)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   550
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   551
    getItemDimensions: function  () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   552
      if(!this.itemDimensions){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   553
        this.items = this.$getChildren(this.el, "item").filter(
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   554
          ":not(." + this.group.options.placeholderClass + ", ." + this.group.options.draggedClass + ")"
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   555
        ).get()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   556
        setDimensions(this.items, this.itemDimensions = [], this.options.tolerance)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   557
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   558
      return this.itemDimensions
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   559
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   560
    getItemOffsetParent: function  () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   561
      var offsetParent,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   562
      el = this.el
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   563
      // Since el might be empty we have to check el itself and
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   564
      // can not do something like el.children().first().offsetParent()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   565
      if(el.css("position") === "relative" || el.css("position") === "absolute"  || el.css("position") === "fixed")
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   566
        offsetParent = el
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   567
      else
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   568
        offsetParent = el.offsetParent()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   569
      return offsetParent
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   570
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   571
    hasChildGroup: function (index) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   572
      return this.options.nested && this.getContainerGroup(index)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   573
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   574
    getContainerGroup: function  (index) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   575
      var childGroup = $.data(this.items[index], subContainerKey)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   576
      if( childGroup === undefined){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   577
        var childContainers = this.$getChildren(this.items[index], "container")
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   578
        childGroup = false
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   579
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   580
        if(childContainers[0]){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   581
          var options = $.extend({}, this.options, {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   582
            rootGroup: this.rootGroup,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   583
            group: groupCounter ++
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   584
          })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   585
          childGroup = childContainers[pluginName](options).data(pluginName).group
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   586
        }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   587
        $.data(this.items[index], subContainerKey, childGroup)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   588
      }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   589
      return childGroup
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   590
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   591
    $getChildren: function (parent, type) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   592
      var options = this.rootGroup.options,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   593
      path = options[type + "Path"],
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   594
      selector = options[type + "Selector"]
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   595
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   596
      parent = $(parent)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   597
      if(path)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   598
        parent = parent.find(path)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   599
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   600
      return parent.children(selector)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   601
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   602
    _serialize: function (parent, isContainer) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   603
      var that = this,
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   604
      childType = isContainer ? "item" : "container",
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   605
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   606
      children = this.$getChildren(parent, childType).not(this.options.exclude).map(function () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   607
        return that._serialize($(this), !isContainer)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   608
      }).get()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   609
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   610
      return this.rootGroup.options.serialize(parent, children, isContainer)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   611
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   612
    traverse: function(callback) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   613
      $.each(this.items || [], function(item){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   614
        var group = $.data(this, subContainerKey)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   615
        if(group)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   616
          group.traverse(callback)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   617
      });
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   618
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   619
      callback(this)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   620
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   621
    _clearDimensions: function  () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   622
      this.itemDimensions = undefined
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   623
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   624
    _destroy: function() {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   625
      var that = this;
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   626
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   627
      this.target.off(eventNames.start, this.handle);
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   628
      this.el.removeData(pluginName)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   629
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   630
      if(this.options.drop)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   631
        this.group.containers = $.grep(this.group.containers, function(val){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   632
          return val != that
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   633
        })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   634
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   635
      $.each(this.items || [], function(){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   636
        $.removeData(this, subContainerKey)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   637
      })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   638
    }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   639
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   640
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   641
  var API = {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   642
    enable: function() {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   643
      this.traverse(function(object){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   644
        object.disabled = false
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   645
      })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   646
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   647
    disable: function (){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   648
      this.traverse(function(object){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   649
        object.disabled = true
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   650
      })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   651
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   652
    serialize: function () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   653
      return this._serialize(this.el, true)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   654
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   655
    refresh: function() {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   656
      this.traverse(function(object){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   657
        object._clearDimensions()
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   658
      })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   659
    },
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   660
    destroy: function () {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   661
      this.traverse(function(object){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   662
        object._destroy();
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   663
      })
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   664
    }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   665
  }
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   666
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   667
  $.extend(Container.prototype, API)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   668
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   669
  /**
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   670
   * jQuery API
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   671
   *
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   672
   * Parameters are
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   673
   *   either options on init
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   674
   *   or a method name followed by arguments to pass to the method
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   675
   */
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   676
  $.fn[pluginName] = function(methodOrOptions) {
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   677
    var args = Array.prototype.slice.call(arguments, 1)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   678
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   679
    return this.map(function(){
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   680
      var $t = $(this),
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   681
      object = $t.data(pluginName)
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   682
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   683
      if(object && API[methodOrOptions])
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   684
        return API[methodOrOptions].apply(object, args) || this
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   685
      else if(!object && (methodOrOptions === undefined ||
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   686
                          typeof methodOrOptions === "object"))
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   687
        $t.data(pluginName, new Container($t, methodOrOptions))
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   688
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   689
      return this
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   690
    });
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   691
  };
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   692
21ac67ebf9e7 all screens are now covered (but not completed)
duong tam kien <tk@deveha.com>
parents:
diff changeset
   693
}(jQuery, window, 'sortable');