@@ -4,6 +4,7 @@ let TODOS = [
4
4
// {id: 3, title: 'Finish this project', done: false}
5
5
] ;
6
6
let FILTER = 'all' ;
7
+ let EDITING_ID = null ;
7
8
8
9
function makePlural ( word , count ) {
9
10
if ( count === 1 ) {
@@ -25,24 +26,45 @@ function update() {
25
26
filteredTodos = TODOS . filter ( todo => todo . done ) ;
26
27
}
27
28
filteredTodos . forEach ( ( { id, title, done} ) => {
28
- $li = document . createElement ( 'li' ) ;
29
+ const $li = document . createElement ( 'li' ) ;
29
30
$li . dataset . id = id ;
30
- $toggle = document . createElement ( 'input' ) ;
31
+ $li . addEventListener ( 'dblclick' , onStartEditing . bind ( null , id ) ) ;
32
+ if ( EDITING_ID === id ) {
33
+ $li . classList . add ( 'editing' ) ;
34
+ }
35
+ $todoList . appendChild ( $li ) ;
36
+
37
+ // Toggle button
38
+ const $toggle = document . createElement ( 'input' ) ;
31
39
$toggle . setAttribute ( 'class' , 'toggle' ) ;
32
40
$toggle . setAttribute ( 'type' , 'checkbox' ) ;
33
41
if ( done ) {
34
42
$toggle . setAttribute ( 'checked' , 'checked' ) ;
35
43
}
36
44
$toggle . addEventListener ( 'change' , onToggleTodo . bind ( null , id ) ) ;
37
45
$li . appendChild ( $toggle ) ;
38
- $label = document . createElement ( 'label' ) ;
46
+
47
+ // Label
48
+ const $label = document . createElement ( 'label' ) ;
39
49
$label . innerHTML = title ;
40
50
$li . appendChild ( $label ) ;
41
- $button = document . createElement ( 'button' ) ;
51
+
52
+ // Delete button
53
+ const $button = document . createElement ( 'button' ) ;
42
54
$button . setAttribute ( 'class' , 'destroy' ) ;
43
55
$button . addEventListener ( 'click' , onDeleteTodo . bind ( null , id ) ) ;
44
56
$li . appendChild ( $button ) ;
45
- $todoList . appendChild ( $li ) ;
57
+
58
+ // Input field
59
+ if ( EDITING_ID === id ) {
60
+ const $input = document . createElement ( 'input' ) ;
61
+ $input . setAttribute ( 'class' , 'edit' ) ;
62
+ $input . addEventListener ( 'change' , onCommitEditing . bind ( null , id ) ) ;
63
+ $input . addEventListener ( 'blur' , onCancelEditing . bind ( null , id ) ) ;
64
+ $li . appendChild ( $input ) ;
65
+ $input . value = title ;
66
+ $input . focus ( ) ;
67
+ }
46
68
} ) ;
47
69
if ( TODOS . length === 0 ) {
48
70
document . querySelector ( '.main' ) . style . display = 'none' ;
@@ -85,6 +107,23 @@ function onClearCompleted() {
85
107
update ( ) ;
86
108
}
87
109
110
+ function onStartEditing ( id ) {
111
+ EDITING_ID = id ;
112
+ update ( ) ;
113
+ }
114
+
115
+ function onCommitEditing ( id , e ) {
116
+ const item = TODOS . find ( todo => todo . id === id ) ;
117
+ item . title = e . target . value . trim ( ) ;
118
+ EDITING_ID = null ;
119
+ update ( ) ;
120
+ }
121
+
122
+ function onCancelEditing ( id ) {
123
+ EDITING_ID = null ;
124
+ update ( ) ;
125
+ }
126
+
88
127
const $newTodo = document . querySelector ( '.new-todo' ) ;
89
128
$newTodo . addEventListener ( 'change' , onNewTodo ) ;
90
129
const $filterAll = document . querySelectorAll ( '.filters a' ) [ 0 ] ;
0 commit comments