Giter Club home page Giter Club logo

cefet-web-todo's Introduction

Lista de Tarefas para Procrastinar 📓

Gerencie aquelas tarefas que você quer não fazer.

Resultado final da atividade

Atividade

Você deve fazer um sistema para cadastrar novas atividades que você não quer fazer. Fazendo isso, você vai treinar usar objetos em JavaScript e criar elementos HTML dinamicamente.

Exercício 0: Representar tarefas

No arquivo tarefas.js, crie um vetor de objetos chamado tarefas em que cada item representa uma tarefa. Você pode criar objetos ad-hoc ou usar algum tipo de "forma" (função construtora ou classe).

Cada tarefa deve ser descrita pelas propriedades:

  1. nome: texto da tarefa
  2. categoria: texto com nome da categoria, podendo ser "lazer", "compras" ou "estudos"
  3. realizada: booleano indicando se já foi cumprida

Já coloque duas tarefas hard-coded no vetor tarefas, porque elas serão úteis no exercício seguinte.

2 tarefas de exemplo...
  1. 'Comprar leite', compras', false
  2. 'Escutar chimbinha', 'lazer', true

Exercício 1: Carregar tarefas existentes

Agora você deve percorrer o vetor tarefas e, para cada uma, criar dinamicamente os elementos HTML referentes a ela e adicioná-los à página (#lista-tarefas).

Há 2 abordagens:

  • (a) criar uma função insereTarefaNaPagina (no singular) que, recebe por parâmetro 01 objeto com uma tarefa e insere 01 elemento HTML <li> na lista de tarefas (i.e., ul#lista-tarefas)
  • (b) se estiver usando classes, criar um método adicionaNaPagina(containerEl)

O <li> que representa a tarefa deve ter uma classe item-tarefa para que ele seja devidamente estilizado. Se a tarefa está realizada como true, você deve colocar a classe marcado no <li class="item-tarefa">...</li>, além da item-tarefa.

Em relação à categoria, adicione ao <li class="item-tarefa"> uma outra classe CSS com o nome categoria-NOME, em que NOME pode ser lazer, compras ou estudos.

Depois de criar a função, chame-a para cada objeto que está no vetor tarefas. Logo antes de popular o elemento HTML da lista com as tarefas, não se esqueça de remover todos os filhos que estiverem lá.

Exercício 2: Incluir uma nova tarefa

Quando o usuário clicar no botão #incluir-nova-tarefa, (a) crie um novo objeto representando a nova tarefa, (b) coloque-a ao final do vetor tarefas e, então, (c) chame a função que a insere na página passando o objeto da nova tarefa como argumento.

Ao final dessa função, você deve limpar o campo onde o usuário digitou a tarefa (i.e., nova-tarefa-nome).

Opcionalmente, você pode "devolver o foco" para esse mesmo controle.

Puxar o foco para um campo...

Isso é uma boa prática de Usabilidade que torna a página mais agradável quando o usuário vai digitar mais que 1 tarefa - assim que ele inclui uma, ele já está pronto para digitar a próxima.

Todo elemento HTML que pode "ter o foco" tem um método focus() que podemos chamar assim:

// pede o elemento para "roubar o foco" - mover o cursor para dentro dele
elemento.focus()

Opcional 3: Filtrar por categoria

Faça com que, quando o usuário alterar o valor de #filtro-de-categoria, que os elementos HTML sejam atualizados para esmaecer aquelas que não possuem a categoria escolhida.

Há uma classe .retido-no-filtro que você pode injetar a esses elementos, se quiser.

Opcional 4: Pressionar "Enter" inclui a tarefa

Além do clique no botão, faça com que o pressionar da tecla "Enter", quando o foco estiver no campo de texto (i.e., nova-tarefa-nome), também insira a nova tarefa no vetor e na página.

Para isso, você pode usar o evento keyup do controle e, dentro da callback, perguntar qual e.key foi pressionada. Se e.key === 'Enter', você pode chamar a mesma função que registrou para o clique do botão.

Opcional 5: Concluir uma tarefa

Faça com que um click em uma .item-tarefa coloque/remova a classe marcado e a defina como realizada (true/false).

FAQ

  1. Como posso criar novos elementos HTML na página?
  2. Como posso criar um objeto?
  • Slides sobre objetos ad-hoc. Exemplo:
    // forma literal
    let novoLivro = {
      titulo: 'O Pistoleiro',
      autor: 'Stephen King'
    };
    // usando operador 'new'
    let novoCarro = new Object();
    novoCarro.nome = 'Ka';
    novoCarro.marca = 'Ford';
  • Slides sobre função construtora. Exemplo:
    function Livro(titulo, autor) {
      this.titulo = titulo
      this.autor = autor
    }
    let novoLivro = new Livro('...', '...')
  • Slides sobre classes. Exemplo:
    class Livro {
      constructor(titulo, autor) {
        this.titulo = titulo
        this.autor = autor
      }
    
      metodo1() {
    
      }
    }
    let novoLivro = new Livro('...', '...')
  1. Como inserir um elemento ao final de um vetor?
    const frutas = ['laranja', 'maçã'];
    frutas.push('kiwi');
    console.log(frutas);
    // laranja, maçã, kiwi
  2. Como colocar/tirar uma classe em um elemento HTML?
    ovelhaEl.classList.add('raca-de-ovelha');
    ovelhaEl.classList.remove('raca-de-ovelha');
    ovelhaEl.classList.toggle('invisivel');

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.