OSDN Git Service

Modify the dependency on path
[bytom/vapor.git] / tools / side_chain_tool / web / node_modules / jquery / src / attributes / classes.js
1 define( [
2         "../core",
3         "../core/stripAndCollapse",
4         "../var/isFunction",
5         "../var/rnothtmlwhite",
6         "../data/var/dataPriv",
7         "../core/init"
8 ], function( jQuery, stripAndCollapse, isFunction, rnothtmlwhite, dataPriv ) {
9
10 "use strict";
11
12 function getClass( elem ) {
13         return elem.getAttribute && elem.getAttribute( "class" ) || "";
14 }
15
16 function classesToArray( value ) {
17         if ( Array.isArray( value ) ) {
18                 return value;
19         }
20         if ( typeof value === "string" ) {
21                 return value.match( rnothtmlwhite ) || [];
22         }
23         return [];
24 }
25
26 jQuery.fn.extend( {
27         addClass: function( value ) {
28                 var classes, elem, cur, curValue, clazz, j, finalValue,
29                         i = 0;
30
31                 if ( isFunction( value ) ) {
32                         return this.each( function( j ) {
33                                 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
34                         } );
35                 }
36
37                 classes = classesToArray( value );
38
39                 if ( classes.length ) {
40                         while ( ( elem = this[ i++ ] ) ) {
41                                 curValue = getClass( elem );
42                                 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
43
44                                 if ( cur ) {
45                                         j = 0;
46                                         while ( ( clazz = classes[ j++ ] ) ) {
47                                                 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
48                                                         cur += clazz + " ";
49                                                 }
50                                         }
51
52                                         // Only assign if different to avoid unneeded rendering.
53                                         finalValue = stripAndCollapse( cur );
54                                         if ( curValue !== finalValue ) {
55                                                 elem.setAttribute( "class", finalValue );
56                                         }
57                                 }
58                         }
59                 }
60
61                 return this;
62         },
63
64         removeClass: function( value ) {
65                 var classes, elem, cur, curValue, clazz, j, finalValue,
66                         i = 0;
67
68                 if ( isFunction( value ) ) {
69                         return this.each( function( j ) {
70                                 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
71                         } );
72                 }
73
74                 if ( !arguments.length ) {
75                         return this.attr( "class", "" );
76                 }
77
78                 classes = classesToArray( value );
79
80                 if ( classes.length ) {
81                         while ( ( elem = this[ i++ ] ) ) {
82                                 curValue = getClass( elem );
83
84                                 // This expression is here for better compressibility (see addClass)
85                                 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
86
87                                 if ( cur ) {
88                                         j = 0;
89                                         while ( ( clazz = classes[ j++ ] ) ) {
90
91                                                 // Remove *all* instances
92                                                 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
93                                                         cur = cur.replace( " " + clazz + " ", " " );
94                                                 }
95                                         }
96
97                                         // Only assign if different to avoid unneeded rendering.
98                                         finalValue = stripAndCollapse( cur );
99                                         if ( curValue !== finalValue ) {
100                                                 elem.setAttribute( "class", finalValue );
101                                         }
102                                 }
103                         }
104                 }
105
106                 return this;
107         },
108
109         toggleClass: function( value, stateVal ) {
110                 var type = typeof value,
111                         isValidValue = type === "string" || Array.isArray( value );
112
113                 if ( typeof stateVal === "boolean" && isValidValue ) {
114                         return stateVal ? this.addClass( value ) : this.removeClass( value );
115                 }
116
117                 if ( isFunction( value ) ) {
118                         return this.each( function( i ) {
119                                 jQuery( this ).toggleClass(
120                                         value.call( this, i, getClass( this ), stateVal ),
121                                         stateVal
122                                 );
123                         } );
124                 }
125
126                 return this.each( function() {
127                         var className, i, self, classNames;
128
129                         if ( isValidValue ) {
130
131                                 // Toggle individual class names
132                                 i = 0;
133                                 self = jQuery( this );
134                                 classNames = classesToArray( value );
135
136                                 while ( ( className = classNames[ i++ ] ) ) {
137
138                                         // Check each className given, space separated list
139                                         if ( self.hasClass( className ) ) {
140                                                 self.removeClass( className );
141                                         } else {
142                                                 self.addClass( className );
143                                         }
144                                 }
145
146                         // Toggle whole class name
147                         } else if ( value === undefined || type === "boolean" ) {
148                                 className = getClass( this );
149                                 if ( className ) {
150
151                                         // Store className if set
152                                         dataPriv.set( this, "__className__", className );
153                                 }
154
155                                 // If the element has a class name or if we're passed `false`,
156                                 // then remove the whole classname (if there was one, the above saved it).
157                                 // Otherwise bring back whatever was previously saved (if anything),
158                                 // falling back to the empty string if nothing was stored.
159                                 if ( this.setAttribute ) {
160                                         this.setAttribute( "class",
161                                                 className || value === false ?
162                                                 "" :
163                                                 dataPriv.get( this, "__className__" ) || ""
164                                         );
165                                 }
166                         }
167                 } );
168         },
169
170         hasClass: function( selector ) {
171                 var className, elem,
172                         i = 0;
173
174                 className = " " + selector + " ";
175                 while ( ( elem = this[ i++ ] ) ) {
176                         if ( elem.nodeType === 1 &&
177                                 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
178                                         return true;
179                         }
180                 }
181
182                 return false;
183         }
184 } );
185
186 } );