-
Notifications
You must be signed in to change notification settings - Fork 0
4 Quarta Etapa
Nesta aula, vamos discutir e nos aprofundar no javascript usando nosso primeiro if
e manipulando classes de tags
do HTML
dinamicamente. Ao fim deste documento, você tera visto sobre:
- Uso da função
remove
, específico de elementos doHTML
- Planejamento da funcionalidade de edição da nota
- Criação da nossa primeira regra usando
CSS
e como usá-la dinamicamente no projeto
Como foi sugerido como lição de casa no nosso encontro anterior, colocamos um eventListner
no botão entendido como o botão de apagar a nota. Deixando o código assim:
const botaoApagar = blocoNota.querySelector('.apagar')
botaoApagar.addEventListener('click', () => {
console.log('botao apagar clicado')
})
E podemos verificar que a mensagem é realmente exibida no console!
Mas o botão ainda não está cumprindo seu propósito, né?! Precisamos excluir a estrutura da nota do nosso site. Para isso, vamos usar uma habilidade que todos os elementos que mapeamos do HTML
possuem, o de se auto excluirem do html! Olha como podemos implementar isso:
const botaoApagar = blocoNota.querySelector('.apagar')
botaoApagar.addEventListener('click', () => {
blocoNota.remove()
})
Viu como é fácil?
Já sabemos que a tag textarea
é sempre editável, ou seja, posso clicar nela e começar a escrever ou apagar a qualquer momento. Não é isso que encontramos no nosso projeto final, gostaríamos de salvar essa nota, momentaneamente, para que eu não consiga sem querer apagar o que eu escrevi.
Pensando nisso, podemos discutir estratégias de como contornar esse desafio. Uma das estratégias seria: se eu não posso fazer com que o textarea
deixe de ser editável, vou coletar tudo que escrevi ali e colocar em uma nova tag
para exibir o texto, depois basta esconder o textarea
. Tudo isso, claro, atrelado ao clique do botão de editar.
Podemos começar criando um novo espaço para o texto a ser salvo. Vamos aproveitar e colocar um nome na nova tag, class='area-futura-nota'
:
blocoNota.innerHTML = `
<div class="cabecalho">
<button class="editar">🖊️</button>
<button class="apagar">🗑️</button>
</div>
<div class="area-nota">
<p class="area-futura-nota"></p>
<textarea class="texto-nota"></textarea>
</div>
`
Ok, agora precisamos transportar as anotações da nossa nota do textarea
para a tag p
recém criada. Para isso, vamos primeiro pegar o que escrevemos na nota e exibir no console:
const textoPrincipal = blocoNota.querySelector('.texto-nota')
botaoEditar.addEventListener('click', () => {
console.log(textoPrincipal.value)
})
Dpois disso, podemos atualizar nosso eventListener
do botão editar com a seguinte cara:
botaoEditar.addEventListener('click', () => {
if (textoPrincipal.value !== '') {
console.log(textoPrincipal.value)
} else {
console.log('nota vazia, não preciso salvá-la')
}
})
Agora sim, vamos finalizar a ação de transportar o texto da textarea
para o p
:
const areaFuturaNota = blocoNota.querySelector('.area-futura-nota')
botaoEditar.addEventListener('click', () => {
if (textoPrincipal.value !== '') {
areaFuturaNota.innerHTML = textoPrincipal.value
} else {
console.log('nota vazia, não preciso salvá-la')
}
Até o momento, transportamos a nota de um lugar para o outro, mas ainda estou vendo o textarea
e o projeto final mostra apenas o texto não editável.
Para resolvermos isso, vamos pela primeira vez alterar o arquivo style.css, adicionando as seguintes linhas:
.esconde {
display: none;
}
O CSS cuida do estilo, do visual, do nosso site. E ele funciona relacionando identificadores nas tags do HTML
a um conjunto de regras de estilo. No caso das linhas anteriores, o estilo a ser alterado é de ser invisível ou não no nosso site. Interessante né?!
Para vermos isso acontecendo, podemos colocar a classe esconde
no nosso botão de adicionar notas, por exemplo:
<button id="adicionar" class='esconde'>
Adicionar Nota!
</button>
Mas não queremos esconder nosso botão, queremos esconder o textarea
então alteramos o nosso código javascript:
botaoEditar.addEventListener('click', () => {
if (textoPrincipal.value !== '') {
areaFuturaNota.innerHTML = textoPrincipal.value
areaFuturaNota.classList.toggle('esconde')
} else {
console.log('nota vazia, não preciso salvá-la')
}
})
A nova linha no código adiciona ou retira o nome de uma classe de uma tag. Ou seja, ao clicar novamente no botão de editar, podemos alterar a nossa nota salva.
Agora precisamos ocultar o espaço da tag p
enquanto estamos na edição da nota, para não vermos o texto da nossa nota duplicado. Para isso, iniciamos a tag com a classe que a oculta na visualização e adicionamos o mesmo raciocínio do toggle
usado na área de texto da nossa nota:
blocoNota.innerHTML = `
<div class="cabecalho">
<button class="editar">🖊️</button>
<button class="apagar">🗑️</button>
</div>
<div class="area-nota">
<p class="area-futura-nota esconde"></p>
<textarea class="texto-nota"></textarea>
</div>
`
botaoEditar.addEventListener('click', () => {
if (textoPrincipal.value !== '') {
areaFuturaNota.innerHTML = textoPrincipal.value
textoPrincipal.classList.toggle('esconde')
areaFuturaNota.classList.toggle('esconde')
} else {
console.log('nota vazia, não preciso salvá-la')
}
})
- https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/p
- https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/class
- https://developer.mozilla.org/pt-BR/docs/Web/API/Console/log
- https://developer.mozilla.org/en-US/docs/Web/API/Element/remove
- https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/toggle