Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
jquery data: Oops.. forgot to commit the new data module. This is par…
…t of [6010].
- Loading branch information
Showing
1 changed file
with
290 additions
and
0 deletions.
There are no files selected for viewing
290
src/data.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,290 @@ | ||
var expando = "jQuery" + now(), uuid = 0, windowData = {}; | ||
|
||
jQuery.extend({ | ||
cache: {}, | ||
|
||
data: function( elem, name, data ) { | ||
elem = elem == window ? | ||
windowData : | ||
elem; | ||
|
||
var id = elem[ expando ]; | ||
|
||
// Compute a unique ID for the element | ||
if ( !id ) | ||
id = elem[ expando ] = ++uuid; | ||
|
||
// Only generate the data cache if we're | ||
// trying to access or manipulate it | ||
if ( name && !jQuery.cache[ id ] ) | ||
jQuery.cache[ id ] = {}; | ||
|
||
// Prevent overriding the named cache with undefined values | ||
if ( data !== undefined ) | ||
jQuery.cache[ id ][ name ] = data; | ||
|
||
// Return the named cache data, or the ID for the element | ||
return name ? | ||
jQuery.cache[ id ][ name ] : | ||
id; | ||
}, | ||
|
||
removeData: function( elem, name ) { | ||
elem = elem == window ? | ||
windowData : | ||
elem; | ||
|
||
var id = elem[ expando ]; | ||
|
||
// If we want to remove a specific section of the element's data | ||
if ( name ) { | ||
if ( jQuery.cache[ id ] ) { | ||
// Remove the section of cache data | ||
delete jQuery.cache[ id ][ name ]; | ||
|
||
// If we've removed all the data, remove the element's cache | ||
name = ""; | ||
|
||
for ( name in jQuery.cache[ id ] ) | ||
break; | ||
|
||
if ( !name ) | ||
jQuery.removeData( elem ); | ||
} | ||
|
||
// Otherwise, we want to remove all of the element's data | ||
} else { | ||
// Clean up the element expando | ||
try { | ||
delete elem[ expando ]; | ||
} catch(e){ | ||
// IE has trouble directly removing the expando | ||
// but it's ok with using removeAttribute | ||
if ( elem.removeAttribute ) | ||
elem.removeAttribute( expando ); | ||
} | ||
|
||
// Completely remove the data cache | ||
delete jQuery.cache[ id ]; | ||
} | ||
}, | ||
queue: function( elem, type, data ) { | ||
if ( elem ){ | ||
|
||
type = (type || "fx") + "queue"; | ||
|
||
var q = jQuery.data( elem, type ); | ||
|
||
if ( !q || jQuery.isArray(data) ) | ||
q = jQuery.data( elem, type, jQuery.makeArray(data) ); | ||
else if( data ) | ||
q.push( data ); | ||
|
||
} | ||
return q; | ||
}, | ||
|
||
dequeue: function( elem, type ){ | ||
var queue = jQuery.queue( elem, type ), | ||
fn = queue.shift(); | ||
|
||
if( !type || type === "fx" ) | ||
fn = queue[0]; | ||
|
||
if( fn !== undefined ) | ||
fn.call(elem); | ||
} | ||
}); | ||
|
||
jQuery.fn.extend({ | ||
data: function( key, value ){ | ||
var parts = key.split("."); | ||
parts[1] = parts[1] ? "." + parts[1] : ""; | ||
|
||
if ( value === undefined ) { | ||
var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); | ||
|
||
if ( data === undefined && this.length ) | ||
data = jQuery.data( this[0], key ); | ||
|
||
return data === undefined && parts[1] ? | ||
this.data( parts[0] ) : | ||
data; | ||
} else | ||
return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ | ||
jQuery.data( this, key, value ); | ||
}); | ||
}, | ||
|
||
removeData: function( key ){ | ||
return this.each(function(){ | ||
jQuery.removeData( this, key ); | ||
}); | ||
}, | ||
queue: function(type, data){ | ||
if ( typeof type !== "string" ) { | ||
data = type; | ||
type = "fx"; | ||
} | ||
|
||
if ( data === undefined ) | ||
return jQuery.queue( this[0], type ); | ||
|
||
return this.each(function(){ | ||
var queue = jQuery.queue( this, type, data ); | ||
|
||
if( type == "fx" && queue.length == 1 ) | ||
queue[0].call(this); | ||
}); | ||
}, | ||
dequeue: function(type){ | ||
return this.each(function(){ | ||
jQuery.dequeue( this, type ); | ||
}); | ||
} | ||
}); | ||
var expando = "jQuery" + now(), uuid = 0, windowData = {}; | ||
|
||
jQuery.extend({ | ||
cache: {}, | ||
|
||
data: function( elem, name, data ) { | ||
elem = elem == window ? | ||
windowData : | ||
elem; | ||
|
||
var id = elem[ expando ]; | ||
|
||
// Compute a unique ID for the element | ||
if ( !id ) | ||
id = elem[ expando ] = ++uuid; | ||
|
||
// Only generate the data cache if we're | ||
// trying to access or manipulate it | ||
if ( name && !jQuery.cache[ id ] ) | ||
jQuery.cache[ id ] = {}; | ||
|
||
// Prevent overriding the named cache with undefined values | ||
if ( data !== undefined ) | ||
jQuery.cache[ id ][ name ] = data; | ||
|
||
// Return the named cache data, or the ID for the element | ||
return name ? | ||
jQuery.cache[ id ][ name ] : | ||
id; | ||
}, | ||
|
||
removeData: function( elem, name ) { | ||
elem = elem == window ? | ||
windowData : | ||
elem; | ||
|
||
var id = elem[ expando ]; | ||
|
||
// If we want to remove a specific section of the element's data | ||
if ( name ) { | ||
if ( jQuery.cache[ id ] ) { | ||
// Remove the section of cache data | ||
delete jQuery.cache[ id ][ name ]; | ||
|
||
// If we've removed all the data, remove the element's cache | ||
name = ""; | ||
|
||
for ( name in jQuery.cache[ id ] ) | ||
break; | ||
|
||
if ( !name ) | ||
jQuery.removeData( elem ); | ||
} | ||
|
||
// Otherwise, we want to remove all of the element's data | ||
} else { | ||
// Clean up the element expando | ||
try { | ||
delete elem[ expando ]; | ||
} catch(e){ | ||
// IE has trouble directly removing the expando | ||
// but it's ok with using removeAttribute | ||
if ( elem.removeAttribute ) | ||
elem.removeAttribute( expando ); | ||
} | ||
|
||
// Completely remove the data cache | ||
delete jQuery.cache[ id ]; | ||
} | ||
}, | ||
queue: function( elem, type, data ) { | ||
if ( elem ){ | ||
|
||
type = (type || "fx") + "queue"; | ||
|
||
var q = jQuery.data( elem, type ); | ||
|
||
if ( !q || jQuery.isArray(data) ) | ||
q = jQuery.data( elem, type, jQuery.makeArray(data) ); | ||
else if( data ) | ||
q.push( data ); | ||
|
||
} | ||
return q; | ||
}, | ||
|
||
dequeue: function( elem, type ){ | ||
var queue = jQuery.queue( elem, type ), | ||
fn = queue.shift(); | ||
|
||
if( !type || type === "fx" ) | ||
fn = queue[0]; | ||
|
||
if( fn !== undefined ) | ||
fn.call(elem); | ||
} | ||
}); | ||
|
||
jQuery.fn.extend({ | ||
data: function( key, value ){ | ||
var parts = key.split("."); | ||
parts[1] = parts[1] ? "." + parts[1] : ""; | ||
|
||
if ( value === undefined ) { | ||
var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); | ||
|
||
if ( data === undefined && this.length ) | ||
data = jQuery.data( this[0], key ); | ||
|
||
return data === undefined && parts[1] ? | ||
this.data( parts[0] ) : | ||
data; | ||
} else | ||
return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ | ||
jQuery.data( this, key, value ); | ||
}); | ||
}, | ||
|
||
removeData: function( key ){ | ||
return this.each(function(){ | ||
jQuery.removeData( this, key ); | ||
}); | ||
}, | ||
queue: function(type, data){ | ||
if ( typeof type !== "string" ) { | ||
data = type; | ||
type = "fx"; | ||
} | ||
|
||
if ( data === undefined ) | ||
return jQuery.queue( this[0], type ); | ||
|
||
return this.each(function(){ | ||
var queue = jQuery.queue( this, type, data ); | ||
|
||
if( type == "fx" && queue.length == 1 ) | ||
queue[0].call(this); | ||
}); | ||
}, | ||
dequeue: function(type){ | ||
return this.each(function(){ | ||
jQuery.dequeue( this, type ); | ||
}); | ||
} | ||
}); |