@@ -318,44 +318,41 @@ function jqLiteRemoveData(element, name) {
318
318
}
319
319
}
320
320
321
- function jqLiteExpandoStore ( element , key , value ) {
321
+
322
+ function jqLiteExpandoStore ( element , createIfNecessary ) {
322
323
var expandoId = element . ng339 ,
323
324
expandoStore = expandoId && jqCache [ expandoId ] ;
324
325
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 } ;
333
329
}
330
+
331
+ return expandoStore ;
334
332
}
335
333
334
+
336
335
function jqLiteData ( element , key , value ) {
337
336
if ( jqLiteAcceptsData ( element ) ) {
338
- var data = jqLiteExpandoStore ( element , 'data' ) ,
339
- isSetter = isDefined ( value ) ,
340
- keyDefined = ! isSetter && isDefined ( key ) ,
341
- isSimpleGetter = keyDefined && ! isObject ( key ) ;
342
337
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 ;
346
343
347
- if ( isSetter ) {
344
+ if ( isSimpleSetter ) { // data('key', value)
348
345
data [ key ] = value ;
349
346
} 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
353
352
return data && data [ key ] ;
354
- } else {
353
+ } else { // mass-setter: data({key1: val1, key2: val2})
355
354
extend ( data , key ) ;
356
355
}
357
- } else {
358
- return data ;
359
356
}
360
357
}
361
358
}
@@ -727,12 +724,13 @@ forEach({
727
724
return ;
728
725
}
729
726
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 ;
733
730
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
+ }
736
734
737
735
// http://jsperf.com/string-indexof-vs-split
738
736
var types = type . indexOf ( ' ' ) ? type . split ( ' ' ) : [ type ] ;
@@ -896,7 +894,9 @@ forEach({
896
894
897
895
var dummyEvent , eventFnsCopy , handlerArgs ;
898
896
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 ] ;
900
900
901
901
if ( eventFns ) {
902
902
0 commit comments