r1557 - in trunk: demos/draggable ui

r1557 - in trunk: demos/draggable ui


Author: paul.bakaus
Date: Thu Jan 8 06:03:34 2009
New Revision: 1557
Modified:
trunk/demos/draggable/sortable.html
trunk/ui/ui.draggable.js
Log:
draggable: revert 'invalid/valid' now works with dropping on sortables
(fixes #3556), beautified demo of connectToSortable demonstrating the
reverts on both draggable and sortable
Modified: trunk/demos/draggable/sortable.html
==============================================================================
--- trunk/demos/draggable/sortable.html    (original)
+++ trunk/demos/draggable/sortable.html    Thu Jan 8 06:03:34 2009
@@ -14,10 +14,13 @@
    </style>
    <script type="text/javascript">
    $(function() {
-        $("#sortable").sortable();
+        $("#sortable").sortable({
+            revert: true
+        });
        $("#draggable").draggable({
            connectToSortable: ['#sortable'],
-            helper: 'clone'
+            helper: 'clone',
+            revert: 'invalid'
        });
    });
    </script>
Modified: trunk/ui/ui.draggable.js
==============================================================================
--- trunk/ui/ui.draggable.js    (original)
+++ trunk/ui/ui.draggable.js    Thu Jan 8 06:03:34 2009
@@ -90,8 +90,6 @@
            relative: this._getRelativeOffset() //This is a relative to absolute
position minus the actual position calculation - only used for relative
positioned helper
        });
-
-
        //Generate the original position
        this.originalPosition = this._generatePosition(event);
        this.originalPageX = event.pageX;
@@ -146,7 +144,13 @@
        //If we are using droppables, inform the manager about the drop
        var dropped = false;
        if ($.ui.ddmanager && !this.options.dropBehaviour)
-            var dropped = $.ui.ddmanager.drop(this, event);
+            dropped = $.ui.ddmanager.drop(this, event);
+        
+        //if a drop comes from outside (a sortable)
+        if(this.dropped) {
+            dropped = this.dropped;
+            this.dropped = false;
+        }
        if((this.options.revert == "invalid" && !dropped) ||
(this.options.revert == "valid" && dropped) || this.options.revert === true
|| ($.isFunction(this.options.revert) &&
this.options.revert.call(this.element, dropped))) {
            var self = this;
@@ -452,10 +456,16 @@
        $.each(inst.sortables, function() {
            if(this.instance.isOver) {
+                
                this.instance.isOver = 0;
+                
                inst.cancelHelperRemoval = true; //Don't remove the helper in the
draggable instance
                this.instance.cancelHelperRemoval = false; //Remove it in the sortable
instance (so sortable plugins like revert still work)
-                if(this.shouldRevert) this.instance.options.revert = true; //revert
here
+                
+                //The sortable revert is supported, and we have to set a temporary
dropped variable on the draggable to support revert: 'valid/invalid'
+                if(this.shouldRevert) this.instance.options.revert = true;
+                
+                //Trigger the stop of the sortable
                this.instance._mouseStop(event);
                //Also propagate receive event, since the sortable is actually
receiving a element
@@ -463,9 +473,9 @@
                this.instance.options.helper = this.instance.options._helper;
-                if(inst.options.helper == 'original') {
+                //If the helper has been the original item, restore properties in the
sortable
+                if(inst.options.helper == 'original')
                    this.instance.currentItem.css({ top: 'auto', left: 'auto' });
-                }
            } else {
                this.instance.cancelHelperRemoval = false; //Remove the helper in the
sortable instance
@@ -513,6 +523,7 @@
                    this.instance.offset.parent.top -= inst.offset.parent.top -
this.instance.offset.parent.top;
                    inst._propagate("toSortable", event);
+                    inst.dropped = this.instance.element; //draggable revert needs that
                }
@@ -535,6 +546,7 @@
                    if(this.instance.placeholder) this.instance.placeholder.remove();
                    inst._propagate("fromSortable", event);
+                    inst.dropped = false; //draggable revert needs that
                }
            };