mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
No ticket: Squeeze data
This commit is contained in:
parent
8bc7bdebef
commit
1b6be73721
84
src/data.js
84
src/data.js
@ -51,13 +51,12 @@ Data.prototype = {
|
|||||||
return unlock;
|
return unlock;
|
||||||
},
|
},
|
||||||
set: function( owner, data, value ) {
|
set: function( owner, data, value ) {
|
||||||
var prop, cache, unlock;
|
var prop,
|
||||||
|
// There may be an unlock assigned to this node,
|
||||||
// There may be an unlock assigned to this node,
|
// if there is no entry for this "owner", create one inline
|
||||||
// if there is no entry for this "owner", create one inline
|
// and set the unlock as though an owner entry had always existed
|
||||||
// and set the unlock as though an owner entry had always existed
|
unlock = this.key( owner ),
|
||||||
unlock = this.key( owner );
|
cache = this.cache[ unlock ];
|
||||||
cache = this.cache[ unlock ];
|
|
||||||
|
|
||||||
// Handle: [ owner, key, value ] args
|
// Handle: [ owner, key, value ] args
|
||||||
if ( typeof data === "string" ) {
|
if ( typeof data === "string" ) {
|
||||||
@ -65,14 +64,13 @@ Data.prototype = {
|
|||||||
|
|
||||||
// Handle: [ owner, { properties } ] args
|
// Handle: [ owner, { properties } ] args
|
||||||
} else {
|
} else {
|
||||||
// [*] In the case where there was actually no "owner" entry and
|
// Support an expectation from the old data system where plain
|
||||||
// this.key( owner ) was called to create one, there will be
|
// objects used to initialize would be set to the cache by
|
||||||
// a corresponding empty plain object in the cache.
|
// reference, instead of having properties and values copied.
|
||||||
//
|
// Note, this will kill the connection between
|
||||||
// Note, this will kill the reference between
|
|
||||||
// "this.cache[ unlock ]" and "cache"
|
// "this.cache[ unlock ]" and "cache"
|
||||||
if ( jQuery.isEmptyObject( cache ) ) {
|
if ( jQuery.isEmptyObject( cache ) ) {
|
||||||
cache = data;
|
this.cache[ unlock ] = data;
|
||||||
// Otherwise, copy the properties one-by-one to the cache object
|
// Otherwise, copy the properties one-by-one to the cache object
|
||||||
} else {
|
} else {
|
||||||
for ( prop in data ) {
|
for ( prop in data ) {
|
||||||
@ -81,12 +79,6 @@ Data.prototype = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// [*] This is required to support an expectation made possible by the old
|
|
||||||
// data system where plain objects used to initialize would be
|
|
||||||
// set to the cache by reference, instead of having properties and
|
|
||||||
// values copied.
|
|
||||||
this.cache[ unlock ] = cache;
|
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
get: function( owner, key ) {
|
get: function( owner, key ) {
|
||||||
@ -129,44 +121,40 @@ Data.prototype = {
|
|||||||
return value !== undefined ? value : key;
|
return value !== undefined ? value : key;
|
||||||
},
|
},
|
||||||
remove: function( owner, key ) {
|
remove: function( owner, key ) {
|
||||||
var i, l, name,
|
var i, name,
|
||||||
unlock = this.key( owner ),
|
unlock = this.key( owner ),
|
||||||
cache = this.cache[ unlock ];
|
cache = this.cache[ unlock ];
|
||||||
|
|
||||||
if ( key === undefined ) {
|
if ( key === undefined ) {
|
||||||
cache = {};
|
this.cache[ unlock ] = {};
|
||||||
} else {
|
} else {
|
||||||
if ( cache ) {
|
// Support array or space separated string of keys
|
||||||
// Support array or space separated string of keys
|
if ( jQuery.isArray( key ) ) {
|
||||||
if ( !Array.isArray( key ) ) {
|
// If "name" is an array of keys...
|
||||||
// Try the string as a key before any manipulation
|
// When data is initially created, via ("key", "val") signature,
|
||||||
if ( key in cache ) {
|
// keys will be converted to camelCase.
|
||||||
name = [ key ];
|
// Since there is no way to tell _how_ a key was added, remove
|
||||||
} else {
|
// both plain key and camelCase key. #12786
|
||||||
// If a key with the spaces exists, use it.
|
// This will only penalize the array argument path.
|
||||||
// Otherwise, create an array by matching non-whitespace
|
name = key.concat( key.map( jQuery.camelCase ) );
|
||||||
name = jQuery.camelCase( key );
|
} else {
|
||||||
name = name in cache ?
|
// Try the string as a key before any manipulation
|
||||||
[ name ] : ( name.match( core_rnotwhite ) || [] );
|
if ( key in cache ) {
|
||||||
}
|
name = [ key ];
|
||||||
} else {
|
} else {
|
||||||
// If "name" is an array of keys...
|
// If a key with the spaces exists, use it.
|
||||||
// When data is initially created, via ("key", "val") signature,
|
// Otherwise, create an array by matching non-whitespace
|
||||||
// keys will be converted to camelCase.
|
name = jQuery.camelCase( key );
|
||||||
// Since there is no way to tell _how_ a key was added, remove
|
name = name in cache ?
|
||||||
// both plain key and camelCase key. #12786
|
[ name ] : ( name.match( core_rnotwhite ) || [] );
|
||||||
// This will only penalize the array argument path.
|
|
||||||
name = key.concat( key.map( jQuery.camelCase ) );
|
|
||||||
}
|
|
||||||
i = 0;
|
|
||||||
l = name.length;
|
|
||||||
|
|
||||||
for ( ; i < l; i++ ) {
|
|
||||||
delete cache[ name[i] ];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i = name.length;
|
||||||
|
while ( i-- ) {
|
||||||
|
delete cache[ name[i] ];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.cache[ unlock ] = cache;
|
|
||||||
},
|
},
|
||||||
hasData: function( owner ) {
|
hasData: function( owner ) {
|
||||||
return !jQuery.isEmptyObject(
|
return !jQuery.isEmptyObject(
|
||||||
|
Loading…
Reference in New Issue
Block a user