Skip to content

Commit b97ec02

Browse files
author
InfinitiesLoop
committed
undo bad merge
1 parent 9f014e2 commit b97ec02

File tree

4 files changed

+251
-132
lines changed

4 files changed

+251
-132
lines changed

src/data.js

Lines changed: 85 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
var windowData = {};
1+
(function( jQuery ) {
2+
3+
var windowData = {},
4+
rbrace = /^(?:\{.*\}|\[.*\])$/;
25

36
jQuery.extend({
47
cache: {},
@@ -13,54 +16,65 @@ jQuery.extend({
1316
// attempt to add expando properties to them.
1417
noData: {
1518
"embed": true,
16-
"object": true,
19+
// Ban all objects except for Flash (which handle expandos)
20+
"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
1721
"applet": true
1822
},
1923

2024
data: function( elem, name, data ) {
21-
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
25+
if ( !jQuery.acceptData( elem ) ) {
2226
return;
2327
}
2428

2529
elem = elem == window ?
2630
windowData :
2731
elem;
2832

29-
var isNode = elem.nodeType,
30-
id = isNode ? elem[ jQuery.expando ] : null,
31-
cache = jQuery.cache, thisCache;
33+
var id = elem[ jQuery.expando ], cache = jQuery.cache, thisCache,
34+
isNode = elem.nodeType,
35+
store;
3236

33-
if ( isNode && !id && typeof name === "string" && data === undefined ) {
37+
if ( !id && typeof name === "string" && data === undefined ) {
3438
return;
3539
}
3640

37-
if ( isNode && !id ) {
38-
// Compute a unique ID for the element
41+
// Get the data from the object directly
42+
if ( !isNode ) {
43+
cache = elem;
44+
id = jQuery.expando;
45+
46+
// Compute a unique ID for the element
47+
} else if ( !id ) {
3948
elem[ jQuery.expando ] = id = ++jQuery.uuid;
4049
}
4150

4251
// Avoid generating a new cache unless none exists and we
4352
// want to manipulate it.
4453
if ( typeof name === "object" ) {
4554
if ( isNode ) {
46-
cache[ id ] = jQuery.extend(true, {}, name);
55+
cache[ id ] = jQuery.extend(cache[ id ], name);
56+
4757
} else {
48-
jQuery.extend(true, elem, name);
58+
store = jQuery.extend(cache[ id ], name);
59+
cache[ id ] = function() {
60+
return store;
61+
};
4962
}
5063

51-
} else if ( isNode && !cache[ id ] ) {
64+
} else if ( !cache[ id ] ) {
5265
if ( isNode ) {
5366
cache[ id ] = {};
67+
5468
} else {
55-
var store = {};
69+
store = {};
5670
cache[ id ] = function() {
5771
return store;
5872
};
5973
}
6074

6175
}
6276

63-
thisCache = isNode ? cache[ id ] : elem;
77+
thisCache = isNode ? cache[ id ] : cache[ id ]();
6478

6579
// Prevent overriding the named cache with undefined values
6680
if ( data !== undefined ) {
@@ -71,7 +85,7 @@ jQuery.extend({
7185
},
7286

7387
removeData: function( elem, name ) {
74-
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
88+
if ( !jQuery.acceptData( elem ) ) {
7589
return;
7690
}
7791

@@ -80,20 +94,27 @@ jQuery.extend({
8094
elem;
8195

8296
var isNode = elem.nodeType,
83-
id = isNode ? elem[ jQuery.expando ] : elem,
84-
cache = jQuery.cache,
85-
thisCache = isNode ? cache[ id ] : id;
97+
id = elem[ jQuery.expando ], cache = jQuery.cache;
98+
if ( id && !isNode ) {
99+
id = id();
100+
}
101+
var thisCache = cache[ id ];
86102

87103
// If we want to remove a specific section of the element's data
88104
if ( name ) {
89105
if ( thisCache ) {
90106
// Remove the section of cache data
91107
delete thisCache[ name ];
108+
109+
// If we've removed all the data, remove the element's cache
110+
if ( jQuery.isEmptyObject(thisCache) ) {
111+
jQuery.removeData( elem );
112+
}
92113
}
93114

94115
// Otherwise, we want to remove all of the element's data
95116
} else {
96-
if ( isNode && jQuery.support.deleteExpando ) {
117+
if ( jQuery.support.deleteExpando || !isNode ) {
97118
delete elem[ jQuery.expando ];
98119

99120
} else if ( elem.removeAttribute ) {
@@ -103,20 +124,28 @@ jQuery.extend({
103124
// Completely remove the data cache
104125
if ( isNode ) {
105126
delete cache[ id ];
106-
} else {
107-
// remove all fields from the object
108-
for ( var n in elem ) {
109-
delete elem[ n ];
110-
}
111127
}
112128
}
129+
},
130+
131+
// A method for determining if a DOM node can handle the data expando
132+
acceptData: function( elem ) {
133+
if ( elem.nodeName ) {
134+
match = jQuery.noData[ elem.nodeName.toLowerCase() ];
135+
136+
if ( match ) {
137+
return !(match === true || elem.getAttribute("classid") !== match);
138+
}
139+
}
140+
141+
return true;
113142
}
114143
});
115144

116145
jQuery.fn.extend({
117146
data: function( key, value ) {
118-
if ( typeof key === "undefined" && this.length ) {
119-
return jQuery.data( this[0] );
147+
if ( typeof key === "undefined" ) {
148+
return this.length ? jQuery.data( this[0] ) : null;
120149

121150
} else if ( typeof key === "object" ) {
122151
return this.each(function() {
@@ -130,16 +159,42 @@ jQuery.fn.extend({
130159
if ( value === undefined ) {
131160
var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
132161

162+
// Try to fetch any internally stored data first
133163
if ( data === undefined && this.length ) {
134164
data = jQuery.data( this[0], key );
165+
166+
// If nothing was found internally, try to fetch any
167+
// data from the HTML5 data-* attribute
168+
if ( data === undefined && this[0].nodeType === 1 ) {
169+
data = this[0].getAttribute( "data-" + key );
170+
171+
if ( typeof data === "string" ) {
172+
try {
173+
data = data === "true" ? true :
174+
data === "false" ? false :
175+
data === "null" ? null :
176+
!jQuery.isNaN( data ) ? parseFloat( data ) :
177+
rbrace.test( data ) ? jQuery.parseJSON( data ) :
178+
data;
179+
} catch( e ) {}
180+
181+
} else {
182+
data = undefined;
183+
}
184+
}
135185
}
186+
136187
return data === undefined && parts[1] ?
137188
this.data( parts[0] ) :
138189
data;
190+
139191
} else {
140-
return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {
192+
return this.each(function() {
193+
var $this = jQuery( this ), args = [ parts[0], value ];
194+
195+
$this.triggerHandler( "setData" + parts[1] + "!", args );
141196
jQuery.data( this, key, value );
142-
jQuery.event.trigger( "changeData" + parts[1] + "!", [parts[0], value], this );
197+
$this.triggerHandler( "changeData" + parts[1] + "!", args );
143198
});
144199
}
145200
},
@@ -150,3 +205,5 @@ jQuery.fn.extend({
150205
});
151206
}
152207
});
208+
209+
})( jQuery );

src/event.js

Lines changed: 9 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -53,33 +53,12 @@ jQuery.event = {
5353
if ( !elemData ) {
5454
return;
5555
}
56-
57-
var container,
58-
events = elemData.events,
56+
57+
var events = elemData.events = elemData.events || {},
5958
eventHandle = elemData.handle;
60-
if ( typeof events === "function" ) {
61-
// on plain objects events is a function that returns
62-
// a container object, which holds the events and handle,
63-
// which prevents this data from being JSON serialized
64-
container = events();
65-
eventHandle = container.handle;
66-
events = container.events;
67-
} else if ( !events ) {
68-
if ( elem.nodeType ) {
69-
elemData.events = events = {};
70-
} else {
71-
// on plain objects, create a function that returns
72-
// a container of the events and handle
73-
events = {};
74-
container = { events: events };
75-
elemData.events = function() {
76-
return container;
77-
}
78-
}
79-
}
8059

8160
if ( !eventHandle ) {
82-
( container || elemData ).handle = eventHandle = function() {
61+
elemData.handle = eventHandle = function() {
8362
// Handle the second event of a trigger and when
8463
// an event is called after a page has unloaded
8564
return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
@@ -175,17 +154,11 @@ jQuery.event = {
175154

176155
var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
177156
elemData = jQuery.data( elem ),
178-
events = elemData && elemData.events,
179-
container;
157+
events = elemData && elemData.events;
180158

181159
if ( !elemData || !events ) {
182160
return;
183161
}
184-
185-
if ( typeof events === "function" ) {
186-
container = events();
187-
events = container.events;
188-
}
189162

190163
// types is actually an event object here
191164
if ( types && types.type ) {
@@ -278,17 +251,15 @@ jQuery.event = {
278251

279252
// Remove the expando if it's no longer used
280253
if ( jQuery.isEmptyObject( events ) ) {
281-
var handle = ( container || elemData ).handle;
254+
var handle = elemData.handle;
282255
if ( handle ) {
283256
handle.elem = null;
284257
}
285258

286259
delete elemData.events;
287-
if ( !container ) {
288-
delete elemData.handle;
289-
}
290-
291-
if ( !container && jQuery.isEmptyObject( elemData ) ) {
260+
delete elemData.handle;
261+
262+
if ( jQuery.isEmptyObject( elemData ) ) {
292263
jQuery.removeData( elem );
293264
}
294265
}
@@ -348,13 +319,7 @@ jQuery.event = {
348319
event.currentTarget = elem;
349320

350321
// Trigger the event, it is assumed that "handle" is a function
351-
var handle;
352-
if ( elem.nodeType ) {
353-
handle = jQuery.data( elem, "handle" );
354-
} else {
355-
var container = jQuery.data( elem, "events" );
356-
handle = typeof container === "function" && container().handle;
357-
}
322+
var handle = jQuery.data( elem, "handle" );
358323
if ( handle ) {
359324
handle.apply( elem, data );
360325
}
@@ -428,9 +393,6 @@ jQuery.event = {
428393
event.namespace = event.namespace || namespace_sort.join(".");
429394

430395
events = jQuery.data(this, "events");
431-
if ( typeof events === "function" ) {
432-
events = events().events;
433-
}
434396
handlers = (events || {})[ event.type ];
435397

436398
if ( events && handlers ) {
@@ -1044,9 +1006,6 @@ function liveHandler( event ) {
10441006
var stop, maxLevel, elems = [], selectors = [],
10451007
related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
10461008
events = jQuery.data( this, "events" );
1047-
if ( typeof events === "function" ) {
1048-
events = events().events;
1049-
}
10501009

10511010
// Make sure we avoid non-left-click bubbling in Firefox (#3861)
10521011
if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {

0 commit comments

Comments
 (0)