@@ -3,55 +3,49 @@ const colours = ['red', 'yellow', 'blue', 'green', 'pink', 'brown', 'purple', 'b
3
3
const nouns = [ 'table' , 'chair' , 'house' , 'bbq' , 'desk' , 'car' , 'pony' , 'cookie' , 'sandwich' , 'burger' , 'pizza' , 'mouse' , 'keyboard' ] ;
4
4
5
5
const pick = dict => dict [ Math . round ( Math . random ( ) * 1000 ) % dict . length ] ;
6
- const label = ( ) => `${ pick ( adjectives ) } ${ pick ( colours ) } ${ pick ( nouns ) } ` ;
6
+ const label = ( ) => `${ pick ( adjectives ) } ${ pick ( colours ) } ${ pick ( nouns ) } ` ;
7
7
const labelOf = r => r . firstChild . nextSibling . firstChild . firstChild ;
8
8
9
- const [ [ table ] , [ tbody ] , [ trow ] , buttons ] = 'table,tbody,#trow,button'
10
- . split ( ',' ) . map ( s => document . querySelectorAll ( s ) ) ;
11
- const { children : rows } = tbody ;
9
+ let ID = 1 , SEL , TMPL , SIZE ;
10
+ const [ [ TABLE ] , [ TBODY ] , [ TROW ] , BUTTONS ] = 'table,tbody,#trow,button'
11
+ . split ( ',' ) . map ( s => document . querySelectorAll ( s ) ) , ROWS = TBODY . children ;
12
12
13
13
const { cloneNode, insertBefore} = Node . prototype ;
14
14
const clone = n => cloneNode . call ( n , true ) ;
15
- const insert = insertBefore . bind ( tbody ) ;
16
-
17
- let ID = 1 , SEL , TMPL , SIZE ;
18
-
15
+ const insert = insertBefore . bind ( TBODY ) ;
19
16
const create = ( count , add ) => {
20
17
if ( SIZE !== count )
21
- TMPL = clone ( trow . content ) , [ ...Array ( ( SIZE = count ) / 50 - 1 ) ]
18
+ TMPL = clone ( TROW . content ) , [ ...Array ( ( SIZE = count ) / 50 - 1 ) ]
22
19
. forEach ( ( ) => TMPL . appendChild ( clone ( TMPL . firstChild ) ) ) ;
23
- ! add && ( clear ( ) , tbody . remove ( ) ) ;
20
+ ! add && ( clear ( ) , TBODY . remove ( ) ) ;
24
21
while ( count ) {
25
- for ( let r of TMPL . children )
22
+ for ( const r of TMPL . children )
26
23
( r . $id ??= r . firstChild . firstChild ) . nodeValue = ID ++ ,
27
24
( r . $label ??= labelOf ( r ) ) . nodeValue = label ( ) , count -- ;
28
25
insert ( clone ( TMPL ) , null ) ;
29
26
}
30
- ! add && table . appendChild ( tbody ) ;
27
+ ! add && TABLE . appendChild ( TBODY ) ;
31
28
} ;
29
+ const clear = ( ) => ( TBODY . textContent = '' , SEL = null ) ;
32
30
33
- const clear = ( ) => ( tbody . textContent = '' , SEL = null ) ;
34
-
35
- buttons . forEach ( function ( b ) { b . onclick = this [ b . id ] ; } , {
31
+ BUTTONS . forEach ( function ( b ) { b . onclick = this [ b . id ] ; } , {
36
32
run ( ) { create ( 1000 ) ; } ,
37
33
runlots ( ) { create ( 10000 ) ; } ,
38
34
add ( ) { create ( 1000 , true ) ; } ,
39
35
clear,
40
36
update ( ) {
41
- for ( let i = 0 ; i < rows . length ; i += 10 )
42
- labelOf ( rows [ i ] ) . nodeValue += ' !!!' ;
37
+ for ( let i = 0 , r ; r = ROWS [ i ] ; i += 10 )
38
+ labelOf ( r ) . nodeValue += ' !!!' ;
43
39
} ,
44
40
swaprows ( ) {
45
- const [ , r1 , r2 ] = rows , r998 = rows [ 998 ] ;
41
+ const [ , r1 , r2 ] = ROWS , r998 = ROWS [ 998 ] ;
46
42
r998 && ( insert ( r1 , r998 ) , insert ( r998 , r2 ) ) ;
47
43
}
48
44
} ) ;
49
45
50
- tbody . onclick = e => {
51
- const t = e . target , r = t . closest ( 'tr' ) ;
52
- const td2 = r ?. firstChild . nextSibling , td3 = td2 ?. nextSibling ;
46
+ TBODY . onclick = e => {
47
+ const t = e . target , n = t . tagName , r = t . closest ( 'TR' ) ;
53
48
e . stopPropagation ( ) ;
54
- t === td2 ?. firstChild ?
55
- ( SEL && ( SEL . className = '' ) , ( SEL = r ) . className = 'danger' ) :
56
- ( t === td3 ?. firstChild || t === td3 ?. firstChild . firstChild ) && r . remove ( ) ;
49
+ ( n == 'SPAN' || n == 'A' && t . firstElementChild ) ? r . remove ( ) :
50
+ n == 'A' && ( SEL && ( SEL . className = '' ) , ( SEL = r ) . className = 'danger' ) ;
57
51
} ;
0 commit comments