Advertisement
campos20

script.js

Nov 16th, 2020
1,198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function adicionarTarefa(evt) {
  2.   // Evita que a pagina seja recarregada ao enviar o formulario
  3.   evt.preventDefault();
  4.  
  5.   // Obtem os valores dos inputs
  6.   let descricao = document.getElementById("descricao-input");
  7.  
  8.   let data = document.getElementById("data-input");
  9.  
  10.   let feito = document.getElementById("feito-input");
  11.  
  12.   // Cria a nova tarefa e adiciona a lista
  13.   let novaTarefa = {
  14.     descricao: descricao.value,
  15.     data: data.value,
  16.     feito: feito.checked,
  17.   };
  18.   tarefas.push(novaTarefa);
  19.  
  20.   popularTabela();
  21. }
  22.  
  23. function removeElemento(index) {
  24.   // Remove o elemento na posicao index
  25.   tarefas.splice(index, 1);
  26.  
  27.   // Apos a remocao, limpa a tabela e preenche novamente
  28.   popularTabela();
  29. }
  30.  
  31. function editarElemento(index) {
  32.   // Exibe os campos de edicao
  33.   // Remove o elemento invisivel da lista de classes do formulario
  34.   formularioEdicao.classList.remove("invisivel");
  35.  
  36.   let item = tarefas[index];
  37.  
  38.   // Armazena o indice da edicao para fazer referencia mais tarde
  39.   indiceDaEdicao = index;
  40.  
  41.   // Pega o elemento de descricao da edicao
  42.   let descricaoInput = document.getElementById("descricao-input-edit");
  43.  
  44.   // Coloca o valor da descricao da tarefa atual no campo de descricao
  45.   descricaoInput.value = item.descricao;
  46.  
  47.   // O mesmo para data
  48.   let dataInput = document.getElementById("data-input-edit");
  49.   dataInput.value = item.data;
  50.  
  51.   // E para o feito
  52.   let feitoInput = document.getElementById("feito-input-edit");
  53.   feitoInput.checked = item.feito;
  54. }
  55.  
  56. function salvarEdicao(evt) {
  57.   // Evita atualizacao
  58.   evt.preventDefault();
  59.  
  60.   // Pega o elemento de descricao da edicao
  61.   let descricaoInput = document.getElementById("descricao-input-edit");
  62.   let dataInput = document.getElementById("data-input-edit");
  63.   let feitoInput = document.getElementById("feito-input-edit");
  64.  
  65.   let novaDescricao = descricaoInput.value;
  66.   let novaData = dataInput.value;
  67.   let novoFeito = feitoInput.checked;
  68.  
  69.   let novaTarefa = {
  70.     descricao: novaDescricao,
  71.     data: novaData,
  72.     feito: novoFeito,
  73.   };
  74.  
  75.   // Troca o valor anterior pelo editado
  76.   tarefas[indiceDaEdicao] = novaTarefa;
  77.  
  78.   // Renderiza a tabela apos a edicao
  79.   popularTabela();
  80.  
  81.   // Apos edicao, esconde os campos de entrada novamente
  82.   formularioEdicao.classList.add("invisivel");
  83. }
  84.  
  85. function formataData(data) {
  86.   let dataSeparada = data.split("-");
  87.  
  88.   let ano = dataSeparada[0];
  89.   let mes = dataSeparada[1];
  90.   let dia = dataSeparada[2];
  91.  
  92.   let dataFormatada = dia + "/" + mes + "/" + ano;
  93.  
  94.   return dataFormatada;
  95. }
  96.  
  97. function popularTabela() {
  98.   // Referencia ao corpo da tabela
  99.   let conteudo = document.getElementById("conteudo");
  100.  
  101.   // Limpa a tabela antes de popular
  102.   conteudo.innerHTML = "";
  103.  
  104.   // Grava os elementos na memoria
  105.   localStorage.setItem("tarefas", JSON.stringify(tarefas));
  106.  
  107.   // Popula a tabela
  108.   for (let i = 0; i < tarefas.length; i++) {
  109.     let tarefa = tarefas[i];
  110.  
  111.     let linha = document.createElement("tr");
  112.     conteudo.appendChild(linha);
  113.  
  114.     let posicao = document.createElement("th");
  115.     linha.appendChild(posicao);
  116.     posicao.innerText = i + 1;
  117.  
  118.     let descricao = document.createElement("td");
  119.     linha.appendChild(descricao);
  120.     descricao.innerText = tarefa.descricao;
  121.  
  122.     let data = document.createElement("td");
  123.     linha.appendChild(data);
  124.     data.innerText = formataData(tarefa.data);
  125.  
  126.     let feito = document.createElement("td");
  127.     linha.appendChild(feito);
  128.  
  129.     let input = document.createElement("input");
  130.     input.type = "checkbox";
  131.     input.checked = tarefa.feito;
  132.     feito.appendChild(input);
  133.  
  134.     let acoes = document.createElement("td");
  135.     linha.appendChild(acoes);
  136.  
  137.     let button = document.createElement("button");
  138.     button.className = "btn btn-danger";
  139.     button.innerHTML = '<i class="fas fa-trash-alt"></i>';
  140.     button.onclick = function () {
  141.       removeElemento(i);
  142.     };
  143.     acoes.appendChild(button);
  144.  
  145.     let botaoEdicao = document.createElement("button");
  146.     botaoEdicao.className = "btn btn-info";
  147.     botaoEdicao.innerHTML = '<i class="fas fa-edit"></i>';
  148.     botaoEdicao.onclick = function () {
  149.       editarElemento(i);
  150.     };
  151.     acoes.appendChild(botaoEdicao);
  152.   }
  153. }
  154.  
  155. // Adiciona a funcao criada ao formulario
  156. let formulario = document.getElementById("formulario");
  157. formulario.onsubmit = adicionarTarefa;
  158.  
  159. let formularioEdicao = document.getElementById("formulario-edit");
  160. formularioEdicao.onsubmit = salvarEdicao;
  161. let indiceDaEdicao = null;
  162.  
  163. let botaoCancelarEdicao = document.getElementById("cancelar-edicao");
  164. botaoCancelarEdicao.onclick = function () {
  165.   formularioEdicao.classList.add("invisivel");
  166. };
  167.  
  168. // Lista de tarefas a fazer recuperada da memoria do navegador
  169. let tabelaSalva = localStorage.getItem("tarefas");
  170.  
  171. // Quando utilizamos o ||, pegamos a primeira opcao, se existir, ou a segunda opcao
  172. let tarefas = JSON.parse(tabelaSalva) || [];
  173.  
  174. // Popula a tabela inicialmente
  175. popularTabela();
  176.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement