Bug Tracker

Ticket #3539: queue[5917].diff

File queue[5917].diff, 8.5 KB (added by flesler, 12 years ago)
  • Makefile

     
    99PLUG_DIR = ../plugins
    1010
    1111BASE_FILES = ${SRC_DIR}/core.js\
     12        ${SRC_DIR}/data.js\
    1213        ${SRC_DIR}/selector.js\
    1314        ${SRC_DIR}/event.js\
    1415        ${SRC_DIR}/ajax.js\
  • src/core.js

     
    457457                return this.add( this.prevObject );
    458458        },
    459459
    460         data: function( key, value ){
    461                 var parts = key.split(".");
    462                 parts[1] = parts[1] ? "." + parts[1] : "";
    463 
    464                 if ( value === undefined ) {
    465                         var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
    466 
    467                         if ( data === undefined && this.length )
    468                                 data = jQuery.data( this[0], key );
    469 
    470                         return data === undefined && parts[1] ?
    471                                 this.data( parts[0] ) :
    472                                 data;
    473                 } else
    474                         return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
    475                                 jQuery.data( this, key, value );
    476                         });
    477         },
    478 
    479         removeData: function( key ){
    480                 return this.each(function(){
    481                         jQuery.removeData( this, key );
    482                 });
    483         },
    484 
    485460        domManip: function( args, table, reverse, callback ) {
    486461                var clone = this.length > 1, elems;
    487462
     
    595570        return target;
    596571};
    597572
    598 var expando = "jQuery" + now(), uuid = 0, windowData = {},
    599         // exclude the following css properties to add px
    600         exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
     573// exclude the following css properties to add px
     574var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
    601575        // cache defaultView
    602576        defaultView = document.defaultView || {};
    603577
     
    659633                return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
    660634        },
    661635
    662         cache: {},
    663 
    664         data: function( elem, name, data ) {
    665                 elem = elem == window ?
    666                         windowData :
    667                         elem;
    668 
    669                 var id = elem[ expando ];
    670 
    671                 // Compute a unique ID for the element
    672                 if ( !id )
    673                         id = elem[ expando ] = ++uuid;
    674 
    675                 // Only generate the data cache if we're
    676                 // trying to access or manipulate it
    677                 if ( name && !jQuery.cache[ id ] )
    678                         jQuery.cache[ id ] = {};
    679 
    680                 // Prevent overriding the named cache with undefined values
    681                 if ( data !== undefined )
    682                         jQuery.cache[ id ][ name ] = data;
    683 
    684                 // Return the named cache data, or the ID for the element
    685                 return name ?
    686                         jQuery.cache[ id ][ name ] :
    687                         id;
    688         },
    689 
    690         removeData: function( elem, name ) {
    691                 elem = elem == window ?
    692                         windowData :
    693                         elem;
    694 
    695                 var id = elem[ expando ];
    696 
    697                 // If we want to remove a specific section of the element's data
    698                 if ( name ) {
    699                         if ( jQuery.cache[ id ] ) {
    700                                 // Remove the section of cache data
    701                                 delete jQuery.cache[ id ][ name ];
    702 
    703                                 // If we've removed all the data, remove the element's cache
    704                                 name = "";
    705 
    706                                 for ( name in jQuery.cache[ id ] )
    707                                         break;
    708 
    709                                 if ( !name )
    710                                         jQuery.removeData( elem );
    711                         }
    712 
    713                 // Otherwise, we want to remove all of the element's data
    714                 } else {
    715                         // Clean up the element expando
    716                         try {
    717                                 delete elem[ expando ];
    718                         } catch(e){
    719                                 // IE has trouble directly removing the expando
    720                                 // but it's ok with using removeAttribute
    721                                 if ( elem.removeAttribute )
    722                                         elem.removeAttribute( expando );
    723                         }
    724 
    725                         // Completely remove the data cache
    726                         delete jQuery.cache[ id ];
    727                 }
    728         },
    729 
    730636        // args is for internal usage only
    731637        each: function( object, callback, args ) {
    732638                var name, i = 0, length = object.length;
  • src/data.js

     
     1var expando = "jQuery" + now(), uuid = 0, windowData = {};
     2
     3jQuery.extend({
     4        cache: {},
     5
     6        data: function( elem, name, data ) {
     7                elem = elem == window ?
     8                        windowData :
     9                        elem;
     10
     11                var id = elem[ expando ];
     12
     13                // Compute a unique ID for the element
     14                if ( !id )
     15                        id = elem[ expando ] = ++uuid;
     16
     17                // Only generate the data cache if we're
     18                // trying to access or manipulate it
     19                if ( name && !jQuery.cache[ id ] )
     20                        jQuery.cache[ id ] = {};
     21
     22                // Prevent overriding the named cache with undefined values
     23                if ( data !== undefined )
     24                        jQuery.cache[ id ][ name ] = data;
     25
     26                // Return the named cache data, or the ID for the element
     27                return name ?
     28                        jQuery.cache[ id ][ name ] :
     29                        id;
     30        },
     31
     32        removeData: function( elem, name ) {
     33                elem = elem == window ?
     34                        windowData :
     35                        elem;
     36
     37                var id = elem[ expando ];
     38
     39                // If we want to remove a specific section of the element's data
     40                if ( name ) {
     41                        if ( jQuery.cache[ id ] ) {
     42                                // Remove the section of cache data
     43                                delete jQuery.cache[ id ][ name ];
     44
     45                                // If we've removed all the data, remove the element's cache
     46                                name = "";
     47
     48                                for ( name in jQuery.cache[ id ] )
     49                                        break;
     50
     51                                if ( !name )
     52                                        jQuery.removeData( elem );
     53                        }
     54
     55                // Otherwise, we want to remove all of the element's data
     56                } else {
     57                        // Clean up the element expando
     58                        try {
     59                                delete elem[ expando ];
     60                        } catch(e){
     61                                // IE has trouble directly removing the expando
     62                                // but it's ok with using removeAttribute
     63                                if ( elem.removeAttribute )
     64                                        elem.removeAttribute( expando );
     65                        }
     66
     67                        // Completely remove the data cache
     68                        delete jQuery.cache[ id ];
     69                }
     70        },
     71        queue: function( elem, type, data ) {
     72                if ( elem ){
     73       
     74                        type = (type || "fx") + "queue";
     75       
     76                        var q = jQuery.data( elem, type );
     77       
     78                        if ( !q || jQuery.isArray(data) )
     79                                q = jQuery.data( elem, type, jQuery.makeArray(data) );
     80                        else if( data )
     81                                q.push( data );
     82       
     83                }
     84                return q;
     85        },
     86
     87        dequeue: function( elem, type ){
     88                return jQuery.queue( elem, type ).shift();
     89        }
     90});
     91
     92jQuery.fn.extend({
     93        data: function( key, value ){
     94                var parts = key.split(".");
     95                parts[1] = parts[1] ? "." + parts[1] : "";
     96
     97                if ( value === undefined ) {
     98                        var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
     99
     100                        if ( data === undefined && this.length )
     101                                data = jQuery.data( this[0], key );
     102
     103                        return data === undefined && parts[1] ?
     104                                this.data( parts[0] ) :
     105                                data;
     106                } else
     107                        return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
     108                                jQuery.data( this, key, value );
     109                        });
     110        },
     111
     112        removeData: function( key ){
     113                return this.each(function(){
     114                        jQuery.removeData( this, key );
     115                });
     116        },
     117        queue: function(type, data){
     118                if ( typeof type != "string" ) {
     119                        data = type;
     120                        type = "fx";
     121                }
     122
     123                if ( data === undefined )
     124                        return jQuery.queue( this[0], type );
     125
     126                return this.each(function(){
     127                        var queue = jQuery.queue( this, type, data );
     128                       
     129                         if( type == "fx" && queue.length == 1 )
     130                                queue[0].call(this);
     131                });
     132        },
     133        dequeue: function(type){
     134                return jQuery.dequeue( this[0], type );
     135        }
     136});
  • src/fx.js

     
    111111                });
    112112        },
    113113
    114         queue: function(type, fn){
    115                 if ( jQuery.isFunction(type) || jQuery.isArray(type) ) {
    116                         fn = type;
    117                         type = "fx";
    118                 }
    119 
    120                 if ( !type || (typeof type == "string" && !fn) )
    121                         return queue( this[0], type );
    122 
     114        nextAnim:function(){
    123115                return this.each(function(){
    124                         if ( jQuery.isArray(fn) )
    125                                 queue(this, type, fn);
    126                         else {
    127                                 queue(this, type).push( fn );
    128 
    129                                 if ( queue(this, type).length == 1 )
    130                                         fn.call(this);
    131                         }
     116                        var queue = jQuery.queue( this );
     117                       
     118                        queue.shift()
     119                       
     120                        if( queue.length )
     121                                queue[0].call( this );
    132122                });
    133123        },
    134 
     124       
    135125        stop: function(clearQueue, gotoEnd){
    136126                var timers = jQuery.timers;
    137127
     
    151141
    152142                // start the next in the queue if the last step wasn't forced
    153143                if (!gotoEnd)
    154                         this.dequeue();
     144                        this.nextAnim();
    155145
    156146                return this;
    157147        }
     
    171161        };
    172162});
    173163
    174 var queue = function( elem, type, array ) {
    175         if ( elem ){
    176 
    177                 type = type || "fx";
    178 
    179                 var q = jQuery.data( elem, type + "queue" );
    180 
    181                 if ( !q || array )
    182                         q = jQuery.data( elem, type + "queue", jQuery.makeArray(array) );
    183 
    184         }
    185         return q;
    186 };
    187 
    188 jQuery.fn.dequeue = function(type){
    189         type = type || "fx";
    190 
    191         return this.each(function(){
    192                 var q = queue(this, type);
    193 
    194                 q.shift();
    195 
    196                 if ( q.length )
    197                         q[0].call( this );
    198         });
    199 };
    200 
    201164jQuery.extend({
    202165
    203166        speed: function(speed, easing, fn) {
     
    215178                opt.old = opt.complete;
    216179                opt.complete = function(){
    217180                        if ( opt.queue !== false )
    218                                 jQuery(this).dequeue();
     181                                jQuery(this).nextAnim();
    219182                        if ( jQuery.isFunction( opt.old ) )
    220183                                opt.old.call( this );
    221184                };