Tareas

Bugs encontrados y cómo se arreglaron
  1. El botón «x» borraba la tarea equivocada. del(i) hacía tasks.splice(i+1,1), así que eliminaba la tarea siguiente a la pulsada y, si se pulsaba en la última, no borraba ninguna.
    Arreglo: tasks.splice(i,1), que borra exactamente la tarea del índice i.
  2. El contador mostraba las tareas completadas como si fueran pendientes. Se calculaba tasks.filter(t=>t.done).length y se etiquetaba «pendientes», así que marcaba una tarea y el número bajaba en lugar de subir.
    Arreglo: tasks.filter(t=>!t.done).length+' pendientes', es decir, se cuentan las tareas sin terminar.
  3. Al añadir una tarea no se validaba ni se limpiaba el campo. Se aceptaba texto vacío (creando tareas en blanco) y el <input> conservaba su valor, de modo que cada nueva pulsación de «Añadir» repetía la misma tarea.
    Arreglo: se recorta el texto con trim(), se ignora el alta si queda vacío, se limpia el campo tras añadir y se devuelve el foco al <input> (además, la tecla Intro añade la tarea).
  4. El texto de la tarea se insertaba como HTML. li.innerHTML=...+t.text+... ejecutaba cualquier etiqueta escrita por el usuario.
    Arreglo: la lista se construye con createElement y el texto se asigna con textContent, de modo que se muestra literalmente y nunca se interpreta como HTML.