-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
120 lines (93 loc) · 4.29 KB
/
Copy pathapp.js
File metadata and controls
120 lines (93 loc) · 4.29 KB
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// Formulario
const form = document.querySelector('form')
// Input del formulario
const inp = document.querySelector('form input')
// El contenedor de los items
const contItems = document.querySelector('.items')
// Constante que guarda el botón para eliminar los items
const eliminarTodo = document.querySelector('.eliminar-todo')
// Logo de GitHub
const github = document.querySelector('i.bi-github')
// Una variable que guarda el valor del input al enviar el formulario
let inpValue
// Si se toca el logo de GitHub que se abra el repositorio en una ventana nueva
github.addEventListener('click', () => window.open('https://github.com/fedeperin/todo-javascript'))
// Si se toca el botón para eliminar todo...
eliminarTodo.addEventListener('click', () => {
contItems.style.paddingLeft = '100vw'
setTimeout(() => {
contItems.textContent = ''
contItems.style.paddingLeft = '10px'
}, 500)
})
// Cuando se envía el formulario...
form.addEventListener('submit', e => {
// Prevengo que por defecto se recargue la página y se procese el formulario
e.preventDefault()
// Cambio el contenido de la variable inpValue al valor de la variable y le agrego el .trim() para que elimine los espacios al principo y al final del input, y si el input está relleno con puros espacios, que no parezca nada
inpValue = inp.value.trim()
// Si el input está vacío o está relleno con solo espacios, que no se ejecúte el resto
if(inpValue == '') return
// Ejecuto la función para agregar un item, pasandole el parámetro inpValue (que es el valor del input)
agregarItem(inpValue)
// Cuando se envió el formulario, que el valor del input vuelva a ''
inp.value = ''
// Cuando se envió el formulario, que el elemento seleccionado sea el input
inp.select()
})
// Función para agregar un nuevo item
function agregarItem(contenido) {
// Que se cree un nuevo item
const item = document.createElement('div')
// La parte del texto del item
const texto = document.createElement('p')
// La parte de los íconos del item
const iconos = document.createElement('div')
// El ícono para eleminar el item
const cerrarIcon = document.createElement('i')
// El ícono para tachar el ítem
const tacharIcon = document.createElement('p')
// Agregarle las clases de Bootstrap Icons
cerrarIcon.classList.add('bi')
cerrarIcon.classList.add('bi-x')
// Agregarle al item la clase item
item.classList.add('item')
// Agregarle a la sección de los íconos la clase iconos
iconos.classList.add('iconos')
// A la seccion del texto, que se le agregue el contenido del parámetro que se le pasó a la funcion
texto.textContent = contenido
// Que al ícono para tachar que se le agregue el '-'
tacharIcon.textContent = '-'
// Que se le agregue a la sección de los íconos los íconos
iconos.appendChild(tacharIcon)
iconos.appendChild(cerrarIcon)
// Que se le agregue al item la sección del texto y la de los íconos
item.appendChild(texto)
item.appendChild(iconos)
// Que se le agregue al contenedor de los items, el nuevo item
contItems.appendChild(item)
// Si se presiona el ícono para eliminar el ítem...
cerrarIcon.addEventListener('click', () => {
// Que al eliminarse el item, que su opacidad baje a cero con una transición
item.style.opacity = '0'
// Que después del intervalo en el que llega al final del recorrido que se elimine (intervalo aclarado en la propiedad transition del item en el CSS)
setTimeout(() => {
item.style.display = 'none'
}, 500)
})
// Sí se toca el ícono para tachar...
tacharIcon.addEventListener('click', () => {
// Que si tiene la clase tachado, que se la saque, si no la tiene que se la ponga
texto.classList.toggle('tachado')
// Sí el contenido de el ícono es un - que se lo cambie a un + y viceversa
// También si el elemento está tachado, que su opacidad sea 0.5, si no que sea 1
if(tacharIcon.textContent == '-') {
tacharIcon.textContent = '+'
item.style.opacity = '0.5'
} else if(tacharIcon.textContent == '+') {
tacharIcon.textContent = '-'
item.style.opacity = '1'
}
})
}
// FIN 🤯