]> source.dussan.org Git - jquery.git/commitdiff
No ticket: keep jquery.min.js.gz under 32K
authorRichard Gibson <richard.gibson@gmail.com>
Tue, 12 Feb 2013 05:45:35 +0000 (00:45 -0500)
committerRichard Gibson <richard.gibson@gmail.com>
Tue, 12 Feb 2013 05:45:35 +0000 (00:45 -0500)
src/data.js

index e471df4eaa45b3814be7054cad5f8dfcaeb8333b..5861c5cb47020bf193af83d5e45e4c5e57ebce85 100644 (file)
@@ -6,9 +6,8 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ){
                return;
        }
 
-       var thisCache, ret,
+       var ret, thisCache,
                internalKey = jQuery.expando,
-               getByName = typeof name === "string",
 
                // We have to handle DOM nodes and JS objects differently because IE6-7
                // can't GC object references properly across the DOM-JS boundary
@@ -24,7 +23,7 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ){
 
        // Avoid doing any more work than we need to when trying to get data on an
        // object that has no data at all
-       if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+       if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
                return;
        }
 
@@ -32,20 +31,16 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ){
                // Only DOM nodes need a new unique ID for each element since their data
                // ends up in the global cache
                if ( isNode ) {
-                       elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
+                       id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;
                } else {
                        id = internalKey;
                }
        }
 
        if ( !cache[ id ] ) {
-               cache[ id ] = {};
-
-               // Avoids exposing jQuery metadata on plain JS objects when the object
+               // Avoid exposing jQuery metadata on plain JS objects when the object
                // is serialized using JSON.stringify
-               if ( !isNode ) {
-                       cache[ id ].toJSON = jQuery.noop;
-               }
+               cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
        }
 
        // An object can be passed to jQuery.data instead of a key/value pair; this gets
@@ -77,7 +72,7 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ){
 
        // Check for both converted-to-camel and non-converted data property names
        // If a data property was specified
-       if ( getByName ) {
+       if ( typeof name === "string" ) {
 
                // First Try to find as-is property data
                ret = thisCache[ name ];
@@ -100,7 +95,7 @@ function internalRemoveData( elem, name, pvt ) {
                return;
        }
 
-       var i, l, thisCache,
+       var thisCache, i,
                isNode = elem.nodeType,
 
                // See jQuery.data for more information
@@ -145,13 +140,14 @@ function internalRemoveData( elem, name, pvt ) {
                                name = name.concat( jQuery.map( name, jQuery.camelCase ) );
                        }
 
-                       for ( i = 0, l = name.length; i < l; i++ ) {
+                       i = name.length;
+                       while ( i-- ) {
                                delete thisCache[ name[i] ];
                        }
 
                        // If there is no data left in the cache, we want to continue
                        // and let the cache object itself get destroyed
-                       if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+                       if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
                                return;
                        }
                }
@@ -192,10 +188,10 @@ jQuery.extend({
        // The following elements throw uncatchable exceptions if you
        // attempt to add expando properties to them.
        noData: {
+               "applet": true,
                "embed": true,
                // Ban all objects except for Flash (which handle expandos)
-               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-               "applet": true
+               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        },
 
        hasData: function( elem ) {
@@ -237,9 +233,12 @@ jQuery.extend({
 jQuery.fn.extend({
        data: function( key, value ) {
                var attrs, name,
-                       elem = this[0],
+                       data = null,
                        i = 0,
-                       data = null;
+                       elem = this[0];
+
+               // Special expections of .data basically thwart jQuery.access,
+               // so implement the relevant behavior ourselves
 
                // Gets all values
                if ( key === undefined ) {
@@ -251,7 +250,7 @@ jQuery.fn.extend({
                                        for ( ; i < attrs.length; i++ ) {
                                                name = attrs[i].name;
 
-                                               if ( !name.indexOf( "data-" ) ) {
+                                               if ( name.indexOf("data-") === 0 ) {
                                                        name = jQuery.camelCase( name.slice(5) );
 
                                                        dataAttr( elem, name, data[ name ] );
@@ -271,17 +270,16 @@ jQuery.fn.extend({
                        });
                }
 
-               return jQuery.access( this, function( value ) {
-
-                       if ( value === undefined ) {
-                               // Try to fetch any internally stored data first
-                               return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
-                       }
+               return arguments.length > 1 ?
 
+                       // Sets one value
                        this.each(function() {
                                jQuery.data( this, key, value );
-                       });
-               }, null, value, arguments.length > 1, null, true );
+                       }) :
+
+                       // Gets one value
+                       // Try to fetch any internally stored data first
+                       elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
        },
 
        removeData: function( key ) {