<!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;
}