@@ -7,6 +7,9 @@ let Events = []
7
7
function isNode ( val ) { return val instanceof window . Node }
8
8
function isNodeList ( val ) { return val instanceof window . NodeList || val instanceof NodeList || val instanceof window . HTMLCollection || val instanceof Array }
9
9
10
+ function splitString ( val ) { console . log ( val ) ; val = val . trim ( ) ; return val . length ? val . replace ( / \s + / , ' ' ) . split ( ' ' ) : [ ] }
11
+ function joinArray ( val ) { return val . length ? val . join ( ' ' ) : '' }
12
+
10
13
class NodeList {
11
14
constructor ( args ) {
12
15
var nodes = args
@@ -141,16 +144,18 @@ class NodeList {
141
144
toggleClass ( classes , value ) {
142
145
var method = ( value === undefined || value === null ) ? 'toggle' : value ? 'add' : 'remove'
143
146
if ( typeof classes === 'string' ) {
144
- classes = classes . trim ( ) . replace ( / \s + / , ' ' ) . split ( ' ' )
147
+ classes = splitString ( classes )
145
148
}
146
149
this . each ( el => {
147
- var list = el . className . trim ( ) . replace ( / \s + / , ' ' ) . split ( ' ' )
150
+ var list = splitString ( el . className )
148
151
classes . forEach ( c => {
149
152
var hasClass = ~ list . indexOf ( c )
150
153
if ( ! hasClass && method !== 'remove' ) list . push ( c )
151
154
if ( hasClass && method !== 'add' ) { list = list . filter ( el => ( el !== c ) ) }
152
155
} )
153
- el . className = list . join ( ' ' )
156
+ list = joinArray ( list )
157
+ if ( ! list ) el . removeAttribute ( 'class' )
158
+ else el . className = list
154
159
} )
155
160
return this
156
161
}
@@ -205,7 +210,7 @@ class NodeList {
205
210
206
211
// event handlers
207
212
on ( events , selector , callback ) {
208
- if ( typeof events === 'string' ) { events = events . trim ( ) . replace ( / \s + / , ' ' ) . split ( ' ' ) }
213
+ if ( typeof events === 'string' ) { events = splitString ( events ) }
209
214
if ( ! this || ! this . length ) return this
210
215
if ( callback === undefined ) {
211
216
callback = selector
@@ -243,48 +248,16 @@ class NodeList {
243
248
callback = events
244
249
events = null
245
250
}
246
- if ( typeof events === 'string' && callback instanceof Function ) {
247
- this . each ( el => {
248
- events . split ( ' ' ) . forEach ( event => {
249
- Events . forEach ( ( e , i ) => {
250
- if ( Events [ i ] && Events [ i ] . el === el && Events [ i ] . event === event && Events [ i ] . callback === callback ) {
251
- Events [ i ] . el . removeEventListener ( Events [ i ] . event , Events [ i ] . callback )
252
- delete Events [ i ]
253
- }
254
- } )
255
- } )
256
- } )
257
- } else if ( typeof events === 'string' ) {
258
- this . each ( el => {
259
- events . split ( ' ' ) . forEach ( event => {
260
- Events . forEach ( ( e , i ) => {
261
- if ( Events [ i ] && Events [ i ] . el === el && Events [ i ] . event === event ) {
262
- Events [ i ] . el . removeEventListener ( Events [ i ] . event , Events [ i ] . callback )
263
- delete Events [ i ]
264
- }
265
- } )
266
- } )
267
- } )
268
- } else if ( callback instanceof Function ) {
269
- this . each ( el => {
270
- Events . forEach ( e => {
271
- if ( Events [ e ] && Events [ e ] . el === el && Events [ e ] . callback === callback ) {
272
- Events [ e ] . el . removeEventListener ( Events [ e ] . event , Events [ e ] . callback )
273
- delete Events [ e ]
274
- }
275
- } )
276
- } )
277
- } else {
278
- this . each ( el => {
279
- Events . forEach ( e => {
280
- if ( Events [ e ] && Events [ e ] . el === el ) {
281
- Events [ e ] . el . removeEventListener ( Events [ e ] . event , Events [ e ] . callback )
282
- delete Events [ e ]
283
- }
284
- } )
251
+ events = events instanceof Array ? events : typeof events === 'string' ? splitString ( events ) : null
252
+ this . each ( el => {
253
+ Events = Events . filter ( e => {
254
+ if ( e && e . el === el && ( ! callback || callback === e . callback ) && ( ! events || ~ events . indexOf ( e . event ) ) ) {
255
+ e . el . removeEventListener ( e . event , e . callback )
256
+ return false
257
+ }
258
+ return true
285
259
} )
286
- }
287
- Events = Events . filter ( el => ( el !== undefined ) )
260
+ } )
288
261
return this
289
262
}
290
263
onBlur ( callback ) {
0 commit comments