aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.js
diff options
context:
space:
mode:
authorRichard Gibson <richard.gibson@gmail.com>2013-02-12 00:45:35 -0500
committerRichard Gibson <richard.gibson@gmail.com>2013-02-12 00:45:35 -0500
commit941d2e055bdc6e7694e12381a97c4ddf81c8d9b4 (patch)
tree5f0a634b473cc59a11680bfd2e294508e6ae2a7d /src/data.js
parent03ab9b9f9061df1cf38fd6466c2241dfb2ae9cdc (diff)
downloadjquery-941d2e055bdc6e7694e12381a97c4ddf81c8d9b4.tar.gz
jquery-941d2e055bdc6e7694e12381a97c4ddf81c8d9b4.zip
No ticket: keep jquery.min.js.gz under 32K
Diffstat (limited to 'src/data.js')
-rw-r--r--src/data.js52
1 files changed, 25 insertions, 27 deletions
diff --git a/src/data.js b/src/data.js
index e471df4ea..5861c5cb4 100644
--- a/src/data.js
+++ b/src/data.js
@@ -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 ) {