<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Visitantes</title>
<link rel="stylesheet" href="css/estilos.css">
<!-- Latest compiled and minified CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Latest compiled JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container-fluid ">
<div class="row">
<div class="col">
<h1 class="display-3 ">Control de visitantes</h1>
<button id="add" class="btn btn-success ">Añadir visitante</button>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="reutilizar" name="reutilizar" value="something" checked>
<label class="form-check-label" for="reutilizar">Reutilizar números</label>
</div>
</div>
</div>
<div class="row">
<div class="col">
<h1 class="display-4 ">Visitantes</h1>
<div id="visitantes"></div>
</div>
<div class="col">
<h1 class="display-4 ">Histórico</h1>
<div id="historico"></div>
</div>
</div>
</div>
<script src="js/script.js"></script>
</body>
</html>
.numero{
display: inline-block;
border:2px solid blue;
padding: 5px;
min-width: 2em;
font-size: 2em;
text-align: center;
font-weight: bold;
margin: 10px;
}
estado = {}
window.onload = function () {
estado.lista = [];
estado.historico = [];
estado.actual = 1;
estado.limite = 20;
estado.add = document.getElementById("add");
estado.add.addEventListener("click", addVisitante);
estado.visitantes = document.getElementById("visitantes");
estado.historicos = document.getElementById("historico");
estado.reutilizar = document.getElementById("reutilizar");
iniciar();
}
function iniciar() {
pintarLista();
}
function addVisitante() {
if (estado.reutilizar.checked) {
// Buscar el primer elemento libre de la lista
let numero = 1;
while (estado.lista.includes(numero)) {
numero++;
}
estado.lista.push(numero);
estado.lista.sort((a,b)=>a-b)
} else {
estado.lista.push(estado.actual);
estado.actual++;
}
pintarLista();
}
function checkAdd() {
if (estado.lista.length <= estado.limite) {
estado.add.classList.remove("disabled")
} else {
estado.add.classList.add("disabled")
}
}
function pintarLista() {
checkAdd();
pintarDatos(estado.lista, estado.visitantes);
pintarDatos(estado.historico, estado.historicos);
}
function pincharCaja() {
let numero = Number(this.innerHTML);
estado.historico = estado.historico.concat(estado.lista.filter(x => x == numero))
if (estado.historico.length>estado.limite){
estado.historico=estado.historico.slice(-estado.limite);
}
estado.lista = estado.lista.filter(x => x != numero);
pintarLista();
}
function esPrimo(numero){
for(let i=2;i<=Math.sqrt(numero);i++){
if (numero%i==0){
return false;
}
}
return true;
}
function pintarDatos(datos, destino) {
destino.innerHTML = ""
for (let elemento of datos) {
let caja = document.createElement("div");
caja.innerHTML = elemento;
caja.classList.add("numero");
if (esPrimo(elemento)){
caja.classList.add("bg-warning");
}
caja.addEventListener("click", pincharCaja);
destino.append(caja)
}
}