<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="./css/bootstrap.css"> <!-- Mis estilos van después del bootstrap --> <link rel="stylesheet" href="css/estilos.css"> </head> <body> <!-- Utilizamos el card de w3school ¡copiado!--> <div class="d-flex "> <div class="card" style="width:400px"> <div class="card-body"> <h4 id="user_name" class="card-title">Jane Doe</h4> <p id="user_info" class="card-text">Some example text some example text. Jane Doe is an architect and engineer</p> <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#myModal"> Añadir tarea </button> <button class="btn btn-info " data-bs-toggle="collapse" data-bs-target="#demo">Ver tareas <span id="num_tareas" class="badge bg-danger">-</span></button> </div> <img id="user_image" class="card-img-bottom" src="../bootstrap4/img_avatar6.png" alt="Card image" style="width:100%"> </div> <div id="demo" class="collapse"> <!--Utilizo la tabla para que quede más o menos bonito--> <table class="table table-striped m-4"> <thead> <tr> <th>Tareas pendientes</th> <!-- Tengo el id para borrar todas las tareas--> <th> <button type="button" class="btn btn-danger" id="borrar_tareas"> Eliminar todas </button></th> </tr> </thead> <tbody id="lista_tareas"> </tbody> </table> </div> </div> <!-- Utilizamos el Modal de w3school ¡copiado1 --> <div class="modal fade" id="myModal"> <div class="modal-dialog modal-xl modal-dialog-centered"> <div class="modal-content"> <!-- Modal Header --> <div class="modal-header"> <h4 class="modal-title">Tarea nueva</h4> <button type="button" class="btn-close" data-bs-dismiss="modal"></button> </div> <!-- El input tiene un id porque necesito el valor --> <div class="modal-body"> <input id="tarea" class="form-control " type="text" placeholder="Introduzca la tarea"> </div> <!-- El boton de nueva tarea tiene un id por la misma razón --> <div class="modal-footer"> <button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button> <button type="button" class="btn btn-success" id="nueva_tarea">Añadir tarea</button> </div> </div> </div> </div> <!-- Aquí los scripts --> <script src="./js/bootstrap.bundle.js"></script> <script src="./js/script.js"></script> </body> </html>
// Todas las acciones las hago cuando se ha cargado la página window.onload = function () { // recojo todos los elementos con los que voy a trabajar let modal = document.getElementById("myModal"); let nueva_tarea = document.getElementById("nueva_tarea"); let tarea = document.getElementById("tarea"); let lista_tareas = document.getElementById("lista_tareas"); let num_tareas = document.getElementById("num_tareas"); let borrar_tareas = document.getElementById("borrar_tareas"); // Cuando pulsen borrar_tareas elimino todas las tareas // Cómo? Obtener tareas->Modificar tareas->guardar tareas->pintar tareas borrar_tareas.addEventListener("click", () => { // borrar tareas localStorage.setItem("tareas", "[]"); // pintar tareas pintaTareas(); }); // Cuando pulsen nueva_tarea añado la tarea a la lista nueva_tarea.addEventListener("click", () => { // obtener tareas let tareas = getTareas(); // modificar taras tareas.push(tarea.value); // guardar tareas setTareas(tareas); // Oculto el modal bootstrap.Modal.getInstance(modal).hide(); // pintar tareas pintaTareas(); }) // Obtengo los datos de la api fetch("https://randomuser.me/api") .then(response => response.json()) .then(resultado => { // Aqui 'resultado' tiene ya el json convertido a variable, la podemos usar console.log(resultado); // Llamo a una función con el usuario devuelto pintaUsuario(resultado.results[0]); }); // pinto las tareas al iniciar la página para que si refresco me pinte lo que hay pintaTareas(); function pintaTareas() { // Recupera las tareas let tareas = getTareas(); // Modifica el número del badge num_tareas.innerHTML = tareas.length; // Si no tengo tareas no muestro el botón if (tareas.length==0){ borrar_tareas.classList.add("d-none") }else{ borrar_tareas.classList.remove("d-none") } // Crea los elementos de la tabla de tareas, lo hago con map // A cada botón le pongo el indice de la tarea que quiero borrar // Cómo? con el segundo parámetro del map // lo guardo en un atributo especial del html que es el data- // En el dataset tendré un atributo idtarea que valdrá el índice de la tarea que quiero borrar lista_tareas.innerHTML = tareas.map((x, i) => "<tr><td>" + x + `</td><td><button data-idtarea="${i}" type="button" class="btn btn-danger btn-sm borrar_tarea"> Borrar </button></td></tr>`).join(""); // A cada botón le añado el evento de borrar for (let boton of document.getElementsByClassName("borrar_tarea")) { boton.addEventListener("click", function () { // Obtengo la tarea let tareas = getTareas(); // Modifico las tareas: yo en dataset.idtarea tengo el id de la tarea que quiero eliminar tareas = tareas.filter((x, i) => i != this.dataset.idtarea); // Guardo las tareas setTareas(tareas); // Pinto las tareas pintaTareas(); }) } } } function getTareas() { // Recupero las tareas del storage y las parseo del JSON let tareas = localStorage["tareas"] || "[]"; tareas = JSON.parse(tareas); return tareas; } function setTareas(tareas) { // Lo guardo en el localstorage localStorage["tareas"] = JSON.stringify(tareas); } function pintaUsuario(usuario) { // Ponemos los datos en el card let nombre = document.getElementById("user_name"); let email = document.getElementById("user_info"); let foto = document.getElementById("user_image"); // nombre.innerHTML = Object.values(usuario.name).join(" "); nombre.innerHTML = usuario.name.title + " " + usuario.name.first + " " + usuario.name.last; email.innerHTML = usuario.email; foto.src = usuario.picture.large; }