aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRick Waldron <waldron.rick@gmail.com>2012-12-31 16:20:35 -0500
committerRick Waldron <waldron.rick@gmail.com>2012-12-31 16:23:20 -0500
commitb9cdc4136b688963d1dc4befb169be02a0216ba9 (patch)
treede7ba1926b318d4cdbd4491c1ab92fc44abc103e /src
parentd1de3000c6d50c298de14fb1ae3381d75c303723 (diff)
downloadjquery-b9cdc4136b688963d1dc4befb169be02a0216ba9.tar.gz
jquery-b9cdc4136b688963d1dc4befb169be02a0216ba9.zip
Updates to data.js re-write to pass events and manipulation (full pass in local test runs)
Signed-off-by: Rick Waldron <waldron.rick@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/data.js17
-rw-r--r--src/event.js4
-rw-r--r--src/manipulation.js60
3 files changed, 43 insertions, 38 deletions
diff --git a/src/data.js b/src/data.js
index b8e7b1de5..6e1465b3b 100644
--- a/src/data.js
+++ b/src/data.js
@@ -1,4 +1,4 @@
-var user, priv,
+var user, priv, data_user, data_priv,
rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
rmultiDash = /([A-Z])/g;
@@ -131,13 +131,14 @@ Data.prototype = {
// This will be used by remove() in manipulation to sever
// remaining references to node objects. One day we'll replace the dual
// arrays with a WeakMap and this won't be an issue.
-// function data_discard( owner ) {
- // user.discard( owner );
- // priv.discard( owner );
-// }
+function data_discard( owner ) {
+ user.discard( owner );
+ priv.discard( owner );
+}
-user = new Data();
-priv = new Data();
+// These may used throughout the jQuery core codebase
+user = data_user = new Data();
+priv = data_priv = new Data();
jQuery.extend({
@@ -198,7 +199,7 @@ jQuery.fn.extend({
dataAttr( elem, name, data[ name ] );
}
}
- priv.set( elem, { hasDataAttrs: true });
+ priv.set( elem, "hasDataAttrs", true );
}
}
diff --git a/src/event.js b/src/event.js
index 733e563c2..4e7f7424c 100644
--- a/src/event.js
+++ b/src/event.js
@@ -16,7 +16,7 @@ jQuery.event = {
t = 0;
// Don't attach events to noData or text/comment nodes (allow plain objects tho)
- if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+ if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = data_priv.get( elem )) ) {
return;
}
@@ -124,7 +124,7 @@ jQuery.event = {
var tns, type, origType, namespaces, origCount,
j, events, special, eventType, handleObj,
t = 0,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+ elemData = data_priv.hasData( elem ) && data_priv.get( elem );
if ( !elemData || !(events = elemData.events) ) {
return;
diff --git a/src/manipulation.js b/src/manipulation.js
index 9aea16f9d..a121ccbc7 100644
--- a/src/manipulation.js
+++ b/src/manipulation.js
@@ -327,7 +327,7 @@ jQuery.fn.extend({
for ( i = 0; i < hasScripts; i++ ) {
node = scripts[ i ];
if ( rscriptType.test( node.type || "" ) &&
- !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+ !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
if ( node.src ) {
// Hope ajax is available...
@@ -514,20 +514,16 @@ jQuery.extend({
},
cleanData: function( elems, /* internal */ acceptData ) {
- var id, data, elem, type,
+ var data, elem, type,
l = elems.length,
i = 0,
- internalKey = jQuery.expando,
- cache = jQuery.cache,
special = jQuery.event.special;
for ( ; i < l; i++ ) {
elem = elems[ i ];
if ( acceptData || jQuery.acceptData( elem ) ) {
-
- id = elem[ internalKey ];
- data = id && cache[ id ];
+ data = data_priv.access( elem );
if ( data ) {
for ( type in data.events ) {
@@ -539,14 +535,12 @@ jQuery.extend({
jQuery.removeEvent( elem, type, data.handle );
}
}
-
- // Remove cache only if it was not already removed by jQuery.event.remove
- if ( cache[ id ] ) {
- delete cache[ id ];
- delete elem[ internalKey ];
- }
}
}
+
+ // Discard any remaining `private` and `user` data
+ // (Splices the data objects out of the internal cache arrays)
+ data_discard( elem );
}
}
});
@@ -580,35 +574,45 @@ function setGlobalEval( elems, refElements ) {
i = 0;
for ( ; i < l; i++ ) {
- jQuery._data( elems[ i ], "globalEval", !refElements || jQuery._data( refElements[ i ], "globalEval" ) );
+ data_priv.set(
+ elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
+ );
}
}
function cloneCopyEvent( src, dest ) {
+ var i, l, type, pOld, pCur, uOld, uCur, events;
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+ if ( dest.nodeType !== 1 ) {
return;
}
- var i, l, type,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
+ // 1. Copy private data: events, handlers, etc.
+ if ( data_priv.hasData( src ) ) {
+ pOld = data_priv.access( src );
+ pCur = jQuery.extend( {}, pOld );
+ events = pOld.events;
- if ( events ) {
- delete curData.handle;
- curData.events = {};
+ data_priv.set( dest, pCur );
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
+ if ( events ) {
+ delete pCur.handle;
+ pCur.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
}
}
}
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
+ // 2. Copy user data
+ if ( data_user.hasData( src ) ) {
+ uOld = data_user.access( src );
+ uCur = jQuery.extend( {}, uOld );
+
+ data_user.set( dest, uCur );
}
}