]> source.dussan.org Git - jquery.git/commitdiff
Updates to data.js re-write to pass events and manipulation (full pass in local test...
authorRick Waldron <waldron.rick@gmail.com>
Mon, 31 Dec 2012 21:20:35 +0000 (16:20 -0500)
committerRick Waldron <waldron.rick@gmail.com>
Mon, 31 Dec 2012 21:23:20 +0000 (16:23 -0500)
Signed-off-by: Rick Waldron <waldron.rick@gmail.com>
src/data.js
src/event.js
src/manipulation.js

index b8e7b1de5d4ab9fc9cad941f93abdace8d395910..6e1465b3b0f9c02f1d8d3e2464c48995a2ab2a56 100644 (file)
@@ -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 );
                                }
                        }
 
index 733e563c28e92b72f596dd71c97c4819bedf62fd..4e7f7424ced32ffb9296a3352421ab1d19b946a8 100644 (file)
@@ -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;
index 9aea16f9df6bf0bf8dc8c58f042a593831f555ff..a121ccbc71e160489521fa90361115b5148a3bc1 100644 (file)
@@ -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 );
        }
 }