@@ -318,44 +318,41 @@ function jqLiteRemoveData(element, name) {
318318 }
319319}
320320
321- function jqLiteExpandoStore ( element , key , value ) {
321+
322+ function jqLiteExpandoStore ( element , createIfNecessary ) {
322323 var expandoId = element . ng339 ,
323324 expandoStore = expandoId && jqCache [ expandoId ] ;
324325
325- if ( isDefined ( value ) ) {
326- if ( ! expandoStore ) {
327- element . ng339 = expandoId = jqNextId ( ) ;
328- expandoStore = jqCache [ expandoId ] = { } ;
329- }
330- expandoStore [ key ] = value ;
331- } else {
332- return key ? expandoStore && expandoStore [ key ] : expandoStore ;
326+ if ( createIfNecessary && ! expandoStore ) {
327+ element . ng339 = expandoId = jqNextId ( ) ;
328+ expandoStore = jqCache [ expandoId ] = { events : { } , data : { } , handle : undefined } ;
333329 }
330+
331+ return expandoStore ;
334332}
335333
334+
336335function jqLiteData ( element , key , value ) {
337336 if ( jqLiteAcceptsData ( element ) ) {
338- var data = jqLiteExpandoStore ( element , 'data' ) ,
339- isSetter = isDefined ( value ) ,
340- keyDefined = ! isSetter && isDefined ( key ) ,
341- isSimpleGetter = keyDefined && ! isObject ( key ) ;
342337
343- if ( ! data && ! isSimpleGetter ) {
344- jqLiteExpandoStore ( element , 'data' , data = { } ) ;
345- }
338+ var isSimpleSetter = isDefined ( value ) ;
339+ var isSimpleGetter = ! isSimpleSetter && key && ! isObject ( key ) ;
340+ var massGetter = ! key ;
341+ var expandoStore = jqLiteExpandoStore ( element , ! isSimpleGetter ) ;
342+ var data = expandoStore && expandoStore . data ;
346343
347- if ( isSetter ) {
344+ if ( isSimpleSetter ) { // data('key', value)
348345 data [ key ] = value ;
349346 } else {
350- if ( keyDefined ) {
351- if ( isSimpleGetter ) {
352- // don't create data in this case.
347+ if ( massGetter ) { // data()
348+ return data ;
349+ } else {
350+ if ( isSimpleGetter ) { // data('key')
351+ // don't force creation of expandoStore if it doesn't exist yet
353352 return data && data [ key ] ;
354- } else {
353+ } else { // mass-setter: data({key1: val1, key2: val2})
355354 extend ( data , key ) ;
356355 }
357- } else {
358- return data ;
359356 }
360357 }
361358 }
@@ -727,12 +724,13 @@ forEach({
727724 return ;
728725 }
729726
730- var expandoStore = jqLiteExpandoStore ( element ) ;
731- var events = expandoStore && expandoStore . events ;
732- var handle = expandoStore && expandoStore . handle ;
727+ var expandoStore = jqLiteExpandoStore ( element , true ) ;
728+ var events = expandoStore . events ;
729+ var handle = expandoStore . handle ;
733730
734- if ( ! events ) jqLiteExpandoStore ( element , 'events' , events = { } ) ;
735- if ( ! handle ) jqLiteExpandoStore ( element , 'handle' , handle = createEventHandler ( element , events ) ) ;
731+ if ( ! handle ) {
732+ handle = expandoStore . handle = createEventHandler ( element , events ) ;
733+ }
736734
737735 // http://jsperf.com/string-indexof-vs-split
738736 var types = type . indexOf ( ' ' ) ? type . split ( ' ' ) : [ type ] ;
@@ -896,7 +894,9 @@ forEach({
896894
897895 var dummyEvent , eventFnsCopy , handlerArgs ;
898896 var eventName = event . type || event ;
899- var eventFns = ( jqLiteExpandoStore ( element , 'events' ) || { } ) [ eventName ] ;
897+ var expandoStore = jqLiteExpandoStore ( element ) ;
898+ var events = expandoStore && expandoStore . events ;
899+ var eventFns = events && events [ eventName ] ;
900900
901901 if ( eventFns ) {
902902
0 commit comments