No ticket: Squeeze data

This commit is contained in:
Richard Gibson 2013-02-26 23:41:57 -05:00
parent 8bc7bdebef
commit 1b6be73721

View File

@ -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(