]> source.dussan.org Git - jquery-ui.git/commitdiff
Drag synchronously added option - Let the automated tests being done.
authorEduardo Lundgren <eduardolundgren@gmail.com>
Fri, 30 May 2008 23:34:46 +0000 (23:34 +0000)
committerEduardo Lundgren <eduardolundgren@gmail.com>
Fri, 30 May 2008 23:34:46 +0000 (23:34 +0000)
ui/tests/jquery.useraction.js

index 6a94b3944dbc80d902d42d3a3d5b4eb5473f2362..b3b2d508e74f807dae4108ad057a0315db0a27d7 100644 (file)
@@ -10,7 +10,7 @@
  */
 
 ;(function($) {
-       
+
 $.fn.extend({
        userAction: function(type) {
                var args = arguments, opts = {}, a1 = args[1], a2 = args[2];
@@ -39,9 +39,14 @@ $.userAction = function(el, type, options) {
        this.options = $.extend({}, $.userAction.defaults, options || {});
        this.target =  $(this.options.target || el)[0];
        
-       var self = this, o = this.options, c = o.center, center = this.findCenter(
-               c && c.length ? c : [0, 0]
-       );
+       var self = this, o = this.options, c = o.center;
+       
+       if (!o.x || !o.y) {
+               var center = this.findCenter(
+                       c && c.length ? c : [0, 0]
+               )
+       }
+       
        // if x and y not set, get the center of the element
        o.x = o.x || center.x; o.y = o.y || center.y;
        
@@ -61,13 +66,19 @@ $.userAction = function(el, type, options) {
        
        // Simulating drag and drop event
        if (/^drag$/i.test(type)) {
-               var t = this.target, queue = $.data(t, StringPool.DATA_QUEUE),
-                       data = [options.dx || options.x, options.dy || options.y];
+               var self = this, t = this.target, queue = $.data(t, StringPool.DATA_QUEUE),
+                       data = [options.dx || options.x, options.dy || options.y, this];
+               
+               var fire = function() {
+                       self.drag(options.dx || options.x, options.dy || options.y);
+               };
+               
+               if (/^sync$/i.test(o.speed)) {
+                       fire(); return;
+               }
                
                if (!queue) {
-                        $.data(t, StringPool.DATA_QUEUE, [data]);
-                        this.drag(options.dx || options.x, options.dy || options.y);
-                        return;
+                        $.data(t, StringPool.DATA_QUEUE, [data]); fire(); return;
                }
                // queuing drags...
                if (queue && queue.length) {
@@ -110,6 +121,19 @@ $.userAction = function(el, type, options) {
 
 $.extend($.userAction.prototype, {
        
+       down: function(target) {
+               $(target).userAction(StringPool.MOUSEOVER).userAction(StringPool.MOUSEDOWN)
+                       .userAction(StringPool.MOUSEMOVE);
+       },
+       
+       up: function(target) {
+               $(target).userAction(StringPool.MOUSEUP).userAction(StringPool.MOUSEOUT);
+       },
+       
+       move: function(target, x, y, after) {
+               $(target).userAction(StringPool.MOUSEMOVE, { x: x, y: y, after: after });
+       },
+       
        drag: function(dx, dy) {
                // drag helper function, thanks Richard Worth's testmouse api.
                var self = this, o = this.options, center = this.findCenter(), 
@@ -118,16 +142,34 @@ $.extend($.userAction.prototype, {
                        speed = o.speed || StringPool.SLOW, 
                        easing = o.easing || StringPool.SWING;
                
+               var complete = function() {
+                       // fire complete or after cb
+                       if (o.after||o.complete) (o.after||o.complete).apply(self.target, [o, self]);
+               };
+               
+               // drag synchronously
+               if (/^sync$/i.test(o.speed)) {
+                       self.down(target);
+                       
+                       for (var dt = 1; dt <= dx; dt++) {
+                               var x = center.x + (dt <= Math.abs(dx) ? dt : 0), 
+                                               y = center.y + (dt <= Math.abs(dy) ? dt : 0);
+                               
+                               this.move(target, x, y, o.drag);
+                       }
+                       self.up(target);
+                       complete();
+                       return;
+               }
+               
+               // drag asynchronously - animated
                fake = fake.size() ? fake : 
                        $(StringPool.FAKE_CURSOR_DIV)
                                .css({ position: StringPool.ABSOLUTE }).appendTo(document.body);
                
                fake            
-                       .animate({ left: center.x, top: center.y }, speed, easing, function() {
-                               target
-                                       .userAction(StringPool.MOUSEOVER)
-                                       .userAction(StringPool.MOUSEDOWN)
-                                       .userAction(StringPool.MOUSEMOVE);
+                       .animate({ left: center.x, top: center.y }, speed, easing, function(){
+                               self.down(target);
                        })
                        .animate({ left: center.x + (dx||0), top: center.y + (dy||0) }, {
                                speed: speed,
@@ -135,21 +177,27 @@ $.extend($.userAction.prototype, {
                                step: function(i, anim) {
                                        lastx = anim.prop == StringPool.LEFT ? i : lastx; 
                                        lasty = anim.prop == StringPool.TOP ? i : lasty;
-                                       target.userAction(StringPool.MOUSEMOVE, { x: lastx, y: lasty, after: o.drag || o.after });
+                                       self.move(target, lastx, lasty, o.drag);
                                },
                                complete: function() {
-                                       target.userAction(StringPool.MOUSEUP).userAction(StringPool.MOUSEOUT);
+                                       
+                                       self.up(target);
                                        
                                        // remove fake cursor
                                        $(this).remove();
                                        
+                                       complete();
+                                       
                                        // trigger drag queue
                                        var queue = $.data(self.target, StringPool.DATA_QUEUE); 
-                                       
                                        if (queue) queue.shift();
                                        
-                                       if (queue && queue[0]) self.drag(queue[0][0], queue[0][1]);
-                                       else $.removeData(self.target, StringPool.DATA_QUEUE); 
+                                       if (queue && queue[0]) {
+                                               // trigger drag on correct instance
+                                               queue[0][2].drag(queue[0][0], queue[0][1]);
+                                       }
+                                       else 
+                                               $.removeData(self.target, StringPool.DATA_QUEUE); 
                                }
                        });
        },