annotate default/node_modules/jquery/src/data/Data.js @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 define( [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 "../core",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 "../core/camelCase",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 "../var/rnothtmlwhite",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 "./var/acceptData"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 ], function( jQuery, camelCase, rnothtmlwhite, acceptData ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 "use strict";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 function Data() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 this.expando = jQuery.expando + Data.uid++;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 Data.uid = 1;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 Data.prototype = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 cache: function( owner ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 // Check if the owner object already has a cache
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 var value = owner[ this.expando ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 // If not, create one
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 if ( !value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 value = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 // We can accept data for non-element nodes in modern browsers,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 // but we should not, see #8335.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 // Always return an empty object.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 if ( acceptData( owner ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 // If it is a node unlikely to be stringify-ed or looped over
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 // use plain assignment
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 if ( owner.nodeType ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 owner[ this.expando ] = value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 // Otherwise secure it in a non-enumerable property
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 // configurable must be true to allow the property to be
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 // deleted when data is removed
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 Object.defineProperty( owner, this.expando, {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 value: value,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 configurable: true
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 return value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 set: function( owner, data, value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 var prop,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 cache = this.cache( owner );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 // Handle: [ owner, key, value ] args
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 // Always use camelCase key (gh-2257)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 if ( typeof data === "string" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 cache[ camelCase( data ) ] = value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 // Handle: [ owner, { properties } ] args
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 // Copy the properties one-by-one to the cache object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 for ( prop in data ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 cache[ camelCase( prop ) ] = data[ prop ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 return cache;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70 get: function( owner, key ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 return key === undefined ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 this.cache( owner ) :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 // Always use camelCase key (gh-2257)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 access: function( owner, key, value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 // In cases where either:
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 //
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 // 1. No key was specified
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 // 2. A string key was specified, but no value provided
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 //
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 // Take the "read" path and allow the get method to determine
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 // which value to return, respectively either:
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 //
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 // 1. The entire cache object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 // 2. The data stored at the key
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 //
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 if ( key === undefined ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 ( ( key && typeof key === "string" ) && value === undefined ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 return this.get( owner, key );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 // When the key is not a string, or both a key and value
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 // are specified, set or extend (existing objects) with either:
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 //
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 // 1. An object of properties
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100 // 2. A key and value
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 //
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 this.set( owner, key, value );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 // Since the "set" path can have two possible entry points
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 // return the expected data based on which path was taken[*]
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 return value !== undefined ? value : key;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108 remove: function( owner, key ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109 var i,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110 cache = owner[ this.expando ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112 if ( cache === undefined ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116 if ( key !== undefined ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 // Support array or space separated string of keys
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119 if ( Array.isArray( key ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121 // If key is an array of keys...
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 // We always set camelCase keys, so remove that.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 key = key.map( camelCase );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 key = camelCase( key );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127 // If a key with the spaces exists, use it.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128 // Otherwise, create an array by matching non-whitespace
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129 key = key in cache ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 [ key ] :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131 ( key.match( rnothtmlwhite ) || [] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134 i = key.length;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136 while ( i-- ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137 delete cache[ key[ i ] ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141 // Remove the expando if there's no more data
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
142 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
143
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
144 // Support: Chrome <=35 - 45
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
145 // Webkit & Blink performance suffers when deleting properties
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
146 // from DOM nodes, so set to undefined instead
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
147 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
148 if ( owner.nodeType ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
149 owner[ this.expando ] = undefined;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
150 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
151 delete owner[ this.expando ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
152 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
153 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
154 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
155 hasData: function( owner ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
156 var cache = owner[ this.expando ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
157 return cache !== undefined && !jQuery.isEmptyObject( cache );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
158 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
159 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
160
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
161 return Data;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
162 } );