-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
82 lines (63 loc) · 2.24 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
const todos = [
'Сделать проектную работу',
'Полить цветы',
'Пройти туториал по Реакту',
'Сделать фронт для своего проекта',
'Погулять с собакой',
'Разобраться в замыканиях',
'Решить задачу на Codewars',
];
const todosListElement = document.querySelector('.todos__list');
const todosFormElement = document.querySelector('.todos__form');
const todosSubmitBtn = todosFormElement.querySelector('.todos__submit-btn');
const todosInputElement = document.querySelector('.todos__input');
const todosTemplateElement = document.querySelector('.todo-template');
let editedElement = null;
function addTodoListeners(todo) {
todo.querySelector('.todo__btn_type_delete').addEventListener('click', handleDelete);
todo.querySelector('.todo__btn_type_edit').addEventListener('click', handleEdit);
todo.querySelector('.todo__btn_type_duplicate').addEventListener('click', handleDuplicate);
}
function handleDelete(evt) {
const todo = evt.currentTarget.parentNode;
todo.remove();
}
function setTodoToForm(todo) {
const text = todo.querySelector('.todo__text').textContent;
todosInputElement.value = text;
todosSubmitBtn.textContent = 'Сохранить';
}
function resetTodoForm() {
editedElement = null;
todosInputElement.value = '';
todosSubmitBtn.textContent = 'Добавить';
}
function handleEdit(evt) {
const todo = evt.currentTarget.parentNode;
editedElement = todo;
setTodoToForm(todo);
}
function handleDuplicate(evt) {
const todo = evt.currentTarget.parentNode;
const duplicate = todo.cloneNode(true);
addTodoListeners(duplicate);
todo.after(duplicate);
}
function addTodo(text) {
const todo = todosTemplateElement.content.cloneNode(true);
todo.querySelector('.todo__text').textContent = text;
addTodoListeners(todo);
todosListElement.prepend(todo);
}
function handleFormSubmit (evt) {
evt.preventDefault();
const text = todosInputElement.value;
if (editedElement) {
editedElement.querySelector('.todo__text').textContent = text;
} else {
addTodo(text);
}
resetTodoForm();
}
todos.forEach(addTodo);
todosFormElement.addEventListener('submit', handleFormSubmit);