1
- import { createTree } from 'eventiveness/apriori' ;
2
- import { apply , set , parentSelector } from 'eventiveness/appliance' ;
3
- import { preventDefault , stopPropagation , eventListener , matchEventListener } from 'eventiveness/domitory' ;
4
- import { one } from 'eventiveness/onetomany' ;
5
- import { range } from 'eventiveness/generational' ;
6
1
2
+ import { arrayTemplate , createFragment } from 'eventiveness/apriori' ;
3
+ import { apply , parentSelector } from 'eventiveness/appliance' ;
4
+ import { set , update } from 'eventiveness/domitory' ;
5
+ import { preventDefault , stopPropagation , eventListener , matchListener } from 'eventiveness/eventivity' ;
6
+ import { one } from 'eventiveness/onetomany' ;
7
+ import { range , items } from 'eventiveness/generational' ;
7
8
8
9
function _random ( max ) { return Math . round ( Math . random ( ) * 1000 ) % max ; }
9
10
const adjectives = [ "pretty" , "large" , "big" , "small" , "tall" , "short" , "long" , "handsome" , "plain" , "quaint" , "clean" , "elegant" , "easy" , "angry" , "crazy" , "helpful" , "mushy" , "odd" , "unsightly" , "adorable" , "important" , "inexpensive" , "cheap" , "expensive" , "fancy" ] ;
10
11
const colours = [ "red" , "yellow" , "blue" , "green" , "pink" , "brown" , "purple" , "brown" , "white" , "black" , "orange" ] ;
11
12
const nouns = [ "table" , "chair" , "house" , "bbq" , "desk" , "car" , "pony" , "cookie" , "sandwich" , "burger" , "pizza" , "mouse" , "keyboard" ] ;
12
13
14
+ const itemTemplate = arrayTemplate ( `
15
+ <tr>
16
+ <td class='col-md-1'>\${indices[item]}</td>
17
+ <td class='col-md-4'><a class='lbl'>\${data[item]}</a></td>
18
+ <td class='col-md-1'>
19
+ <a class='remove'>
20
+ <span class='remove glyphicon glyphicon-remove' aria-hidden='true'></span>
21
+ </a>
22
+ </td>
23
+ <td class='col-md-6'></td>
24
+ </tr>
25
+ ` , [ 'indices' , 'data' ] ) ;
13
26
14
27
function data ( ) {
15
28
return {
@@ -46,7 +59,7 @@ function data() {
46
59
} ,
47
60
remove ( element , context ) {
48
61
const index = Array . from ( element . parentNode . children ) . indexOf ( element ) ;
49
- context . indices . splice ( index ) ; context . data . splice ( index ) ;
62
+ context . indices . splice ( index , 1 ) ; context . data . splice ( index , 1 ) ;
50
63
}
51
64
}
52
65
}
@@ -58,20 +71,22 @@ function view(table) {
58
71
this . append ( n , context ) ;
59
72
} ,
60
73
append ( n , context ) {
61
- let markup = [ ] , length = context . data . length ;
62
- for ( let i = length - n ; i < length ; i ++ ) markup . push ( `<tr><td class='col-md-1'> ${ context . indices [ i ] } </td><td class='col-md-4'><a class='lbl'> ${ context . data [ i ] } </a></td><td class='col-md-1'><a class='remove'><span class='remove glyphicon glyphicon-remove' aria-hidden='true'></span></a></td><td class='col-md-6'></td></tr>` ) ;
63
- table . append ( createTree ( markup . join ( '' ) ) ) ;
74
+ const length = context . data . length ;
75
+ const renderedItems = itemTemplate ( range ( length - n , length ) , context . indices , context . data ) ;
76
+ table . append ( createFragment ( renderedItems ) ) ;
64
77
} ,
65
78
update ( context ) {
66
- set ( 'a.lbl' , [ ...range ( 0 , context . data . length , 10 ) ] ,
67
- { textContent : context . data } , table ) ;
79
+ apply ( {
80
+ 'a.lbl' : ( ...labels ) => {
81
+ const indices = [ ...range ( 0 , context . data . length , 10 ) ]
82
+ set ( items ( labels , indices ) , { textContent : items ( context . data , indices ) } )
83
+ }
84
+ } , table ) ;
68
85
} ,
69
86
clear ( context ) { table . innerHTML = '' ; } ,
70
87
swap ( context ) {
71
88
if ( table . children . length >= 999 ) {
72
- const e998 = table . children [ 998 ] ;
73
- table . replaceChild ( table . children [ 1 ] , e998 ) ;
74
- table . insertBefore ( e998 , table . children [ 1 ] ) ;
89
+ update ( [ ...items ( table . children , [ 1 , 998 ] ) ] , [ ...items ( table . children , [ 998 , 1 ] ) ] ) ;
75
90
}
76
91
} ,
77
92
remove ( element , context ) { table . removeChild ( element ) ; }
@@ -80,7 +95,7 @@ function view(table) {
80
95
81
96
apply ( {
82
97
'tbody' : table => {
83
- const component = one ( [ data ( ) , view ( table ) ] ) ;
98
+ const component = one ( [ data ( ) , view ( table ) ] , false , [ { } ] ) ;
84
99
85
100
let selected ;
86
101
function select ( node ) {
@@ -97,7 +112,7 @@ apply({
97
112
component . remove ( [ parentSelector ( e . target , 'tr' ) ] ) ;
98
113
} ;
99
114
100
- table . addEventListener ( 'click' , matchEventListener ( {
115
+ table . addEventListener ( 'click' , matchListener ( {
101
116
'a.lbl' : e => select ( e . target . parentNode . parentNode ) ,
102
117
'span.remove' : eventListener ( [ removeListener , preventDefault , stopPropagation ] , { } )
103
118
} ) ) ;
0 commit comments