@@ -9,46 +9,52 @@ function* _random(n) {
9
9
yield arr
10
10
}
11
11
}
12
- const data = [ ] , tbody = document . getElementsByTagName ( 'tbody' ) [ 0 ] ;
13
- let index = 1 , i , lbl , selected , temp ;
12
+ const data = [ ] , nTemplates = 10 , tbody = document . getElementsByTagName ( 'tbody' ) [ 0 ] ;
13
+ let index = 1 , i , lbl , selected ;
14
14
15
- function create ( e , n = 1000 ) { if ( data . length ) clear ( e ) ; append ( e , n ) ; }
16
- function append ( e , n = 1000 ) {
17
- const [ r1 , r2 , r3 ] = _random ( n ) ;
18
- const itemTemplate = document . getElementById ( 'itemTemplate' ) . content . firstElementChild ;
19
- const itemId = itemTemplate . firstElementChild . firstChild , itemLabel = itemTemplate . querySelector ( 'a.lbl' ) . firstChild ;
20
- while ( -- n >= 0 ) {
21
- itemId . nodeValue = index ++ ;
22
- data . push ( itemLabel . nodeValue = `${ adjectives [ r1 [ n ] ] } ${ colours [ r2 [ n ] ] } ${ nouns [ r3 [ n ] ] } ` )
15
+ function create ( n = 1000 ) { if ( data . length ) clear ( ) ; append ( n ) ; }
16
+ function append ( n = 1000 ) {
17
+ const [ r1 , r2 , r3 ] = _random ( n ) ; let j = 0 ;
18
+ const itemTemplate1 = document . getElementById ( 'itemTemplate' ) . content . firstElementChild ;
19
+ const itemTemplate = document . createDocumentFragment ( ) ;
20
+ for ( i = 0 ; i < nTemplates ; i ++ ) itemTemplate . appendChild ( itemTemplate1 . cloneNode ( true ) ) ;
21
+ const ids = Array . prototype . map . call ( itemTemplate . querySelectorAll ( 'td:first-child' ) , i => i . firstChild )
22
+ const labels = Array . prototype . map . call ( itemTemplate . querySelectorAll ( 'a.lbl' ) , i => i . firstChild ) ;
23
+
24
+ while ( ( n -= nTemplates ) >= 0 ) {
25
+ for ( i = 0 ; i < nTemplates ; i ++ , j ++ ) {
26
+ ids [ i ] . nodeValue = index ++ ;
27
+ data . push ( labels [ i ] . nodeValue = `${ adjectives [ r1 [ j ] ] } ${ colours [ r2 [ j ] ] } ${ nouns [ r3 [ j ] ] } ` )
28
+ }
23
29
tbody . appendChild ( itemTemplate . cloneNode ( true ) ) ;
24
30
}
25
31
}
26
- function update ( e ) {
32
+ function update ( ) {
27
33
const labels = tbody . querySelectorAll ( 'a.lbl' ) , length = labels . length ;
28
34
for ( i = 0 ; i < length ; i += 10 ) labels [ i ] . firstChild . nodeValue = data [ i ] += ' !!!' ;
29
35
}
30
- function clear ( e ) { data . length = 0 ; tbody . textContent = '' }
36
+ function clear ( ) { data . length = 0 ; tbody . textContent = '' }
31
37
32
- function swap ( e ) {
33
- if ( data . length < 999 ) return ;
38
+ function swap ( ) {
39
+ if ( data . length < 999 ) return ; const first = tbody . firstElementChild ;
34
40
[ data [ 1 ] , data [ 998 ] ] = [ data [ 998 ] , data [ 1 ] ] ;
35
- tbody . replaceChild ( tbody . children [ 1 ] , ( temp = tbody . children [ 998 ] ) ) ;
36
- tbody . insertBefore ( temp , tbody . children [ 1 ] ) ;
41
+ tbody . insertBefore ( tbody . insertBefore ( first . nextElementSibling ,
42
+ tbody . children [ 998 ] ) . nextElementSibling , first . nextElementSibling ) ;
37
43
}
38
44
tbody . onclick = ( e ) => {
39
45
e . preventDefault ; e . stopPropagation ;
40
46
if ( e . target . matches ( 'a.lbl' ) ) {
41
- const element = e . composedPath ( ) [ 2 ] ;
47
+ const element = e . target . parentNode . parentNode ;
42
48
if ( element === selected ) selected . className = selected . className ? "" : "danger" ;
43
49
else {
44
50
if ( selected ) selected . className = "" ;
45
51
element . className = "danger" ; selected = element
46
52
}
47
53
} else if ( e . target . matches ( 'span.remove' ) ) {
48
- data . splice ( Array . prototype . indexOf . call ( tbody . children , tbody . removeChild ( e . composedPath ( ) [ 3 ] ) ) , 1 ) ;
54
+ data . splice ( Array . prototype . indexOf . call ( tbody . children , tbody . removeChild ( e . target . parentNode . parentNode . parentNode ) ) , 1 ) ;
49
55
}
50
56
}
51
57
for ( let [ key , fn ] of Object . entries ( {
52
- run : create , runlots : ( e ) => create ( e , 10000 ) ,
58
+ run : create , runlots : ( ) => create ( 10000 ) ,
53
59
add : append , update, clear, swaprows : swap
54
- } ) ) document . getElementById ( key ) . onclick = ( e ) => { e . stopPropagation ( ) ; fn ( e ) }
60
+ } ) ) document . getElementById ( key ) . onclick = ( e ) => { e . stopPropagation ( ) ; fn ( ) }
0 commit comments