Changelog

Registro completo de todas las versiones y modificaciones del visor no oficial de oposiciones del BOE. Los cambios se muestran en orden cronológico descendente, de más reciente a más antiguo.

v3.1 Tooltip con desglose por tipo de convocatoria Abril 2026
feat
  • El tooltip de días con contenido pasa de «X convocatorias» a un desglose completo por tipo: «4 convocatorias · 2 oposición, 1 traslados, 1 concurso»
  • checkDay() ahora clasifica cada epígrafe usando el mismo CHIP_MAP de la aplicación y acumula contadores en un objeto desglose
  • contentDays amplía su estructura de { n, tipo } a { n, tipo, desglose }
  • Los tipos se muestran ordenados de mayor a menor frecuencia
  • Si solo hay un tipo, el tooltip muestra únicamente el total sin desglose
  • renderResults() preserva el desglose calculado en precarga al actualizar el mapa
  • Sin peticiones adicionales — todo se extrae del XML que ya se descargaba
v3.0 Mejoras avanzadas de UX Abril 2026
feat
  • Punto rojo en días con oposición de acceso libre
  • Punto verde en días con libre designación
  • Punto dorado (original) en días mixtos u otros tipos
  • checkDay() analiza epígrafes del XML para clasificar sin peticiones extra
  • contentDays pasa de Map<string, number> a Map<string, {n, tipo}>
feat
  • El buscador ahora coincide también con el nombre del ministerio u organismo
  • Coincide también con el nombre del epígrafe (ej. «libre designación»)
  • Sin cambios en la interfaz, totalmente transparente para el usuario
feat
  • Abrir Web o PDF marca automáticamente la convocatoria como leída
  • Botón para alternar el estado leído/no leído manualmente
  • Ítem leído: opacidad 55% y tachado en el título
  • Estado persistido en boe_leidos en localStorage, separado de favoritos
feat
  • Deslizar hacia abajo desde el tope del panel muestra un indicador animado
  • Al superar el umbral de 70px, invalida la caché del día y recarga desde el BOE
  • Implementado con touchstart / touchend pasivos para no afectar el scroll
feat
  • navigator.vibrate(10) al pulsar el botón de favorito en móvil
  • Sin efecto en navegadores o dispositivos que no soporten la API
feat
  • Sustituye la exportación TSV anterior por un archivo .md estructurado
  • Favoritos agrupados por fecha en orden descendente con tipo, enlace web y PDF
  • Pie con referencia a la fuente oficial boe.es
  • Compatible con cualquier editor de texto, Notion, email o app de mensajería
feat
  • Botón en cada convocatoria usando la Web Share API nativa del sistema
  • Abre el menú de compartir del SO en móvil (WhatsApp, Telegram, correo…)
  • Fallback en escritorio: copia la URL al portapapeles y muestra un toast Enlace copiado
  • Disponible también en el panel de favoritos globales
feat
  • Sustituye el spinner genérico por un skeleton screen que imita la estructura real del contenido
  • 3 departamentos ficticios con chip, líneas de texto y botones animados (skpulse)
  • Entrada escalonada con animation-delay por departamento
feat
  • Footer con badge de versión, año dinámico y declaración de proyecto no oficial
  • Texto legal que cita la API pública del BOE y exime de responsabilidad por errores
  • Enlace a www.boe.es como única fuente con validez legal
  • Enlace a este changelog
refactor
  • Los botones Web, PDF, Compartir y Favorito pasan de columna vertical derecha a fila horizontal bajo el título
  • Reduce la altura del ítem y da más anchura al texto de la convocatoria
fix
  • JSON.stringify(title) en el atributo onclick inyectaba comillas dobles que cerraban el atributo prematuramente
  • Solución: mapa JS pendingMeta poblado en renderResults(); el botón solo pasa el id
  • Elimina favOnclick y cualquier dato serializado en atributos HTML
fix
  • El tooltip usaba ::before, que .day.today ya ocupaba para el borde circular
  • Solución: <span class="day-tip"> real insertado por JS, sin conflicto con pseudo-elementos
  • .card-calendar con overflow: visible para que el tooltip no quede recortado
revert
  • El XML del sumario solo expone título e identificador, no el texto completo
  • Leer el plazo real requeriría una petición HTTP adicional por convocatoria
  • Inviable con el plan gratuito del worker de Cloudflare (100k req/día)
v2.0 Correcciones y mejoras de robustez Abril 2026
fix
  • goToday() cargaba domingos — ahora retrocede al viernes si el día actual es domingo
  • Clave de caché inconsistentefmtYMD unificado en todos los puntos, siempre YYYYMMDD
  • Estado favoritos al arrancarupdateFavsBtn() se llama en el init antes de cualquier render
  • toggleFav relanzaba load() completo — ahora solo actualiza el botón y el ítem en el DOM
  • getAttribute("nombre") podía devolver null — protegido con || "" en checkDay y renderResults
  • Animación sin escalonado — delay añadido via --dept-delay CSS custom property calculado en JS
  • toISOString() desfase de zona horaria — guardado como YYYYMMDD, reconstruido con new Date(y, m, d) local
  • Botón favoritos no refleja estado inicialupdateFavsBtn() en init sincroniza texto y clase active
  • "1 convocatorias" / "1 resultados" — singular/plural corregido en contador de dept y badge total
  • scroll-margin-top fijo — variable CSS --header-h con valor real, ajustado en mobile
  • Sin cachePurge() al arrancar — restaurado, limpia entradas de más de 15 días respetando claves de config
  • pointer-events en días deshabilitados — añadido pointer-events: none en .disabled y .domingo
v1.5 Modo oscuro, favoritos globales y barra de progreso Abril 2026
feat
  • Variables CSS separadas para modo claro y oscuro en body.dark-mode
  • Detección automática de prefers-color-scheme: dark del sistema operativo
  • Botón reubicado al extremo derecho de la cabecera; solo icono en móvil
  • Transición suave 0.3s en background-color, border-color y color
  • Todos los chips, botones y badges usan variables CSS — sin colores hardcodeados
  • Corrección: filter input:focus ya no hace background: #fff fijo
feat
  • Panel modal con todos los favoritos guardados agrupados por fecha en orden descendente
  • Posibilidad de quitar favoritos individualmente desde el panel
  • Metadatos persistidos en boe_favs_meta: título, tipo, fecha, enlaces web y PDF
feat
  • Franja de 2px bajo la cabecera que avanza proporcionalmente durante la precarga del mes
  • Desaparece con transición suave al terminar
feat
  • Columna extra de 22px a la izquierda del calendario con el número de semana ISO de cada fila
  • Cálculo correcto del número de semana según estándar ISO 8601
feat
  • Al pasar el ratón sobre un día con punto muestra «X convocatorias» sin tener que clicar
  • Implementado con <span class="day-tip"> (no pseudo-elementos) para evitar conflictos
feat
  • Descarga un archivo .tsv con columnas Fecha, Título, Tipo, Enlace Web, Enlace PDF
  • Sustituida posteriormente por Markdown en v3.0
v1.0 Primera versión funcional Abril 2026
feat
  • Calendario mensual navegable con botones anterior / siguiente / Hoy
  • Domingos deshabilitados; sábados activos (el BOE publica en sábado)
  • Precarga en paralelo (Promise.allSettled) de todos los días hábiles del mes
  • Punto dorado bajo los días con convocatorias publicadas
  • Día actual resaltado con borde circular
  • Día seleccionado resaltado en azul BOE
feat
  • Peticiones al worker de Cloudflare que actúa de proxy con CORS a la API pública del BOE
  • Parseo del XML del sumario — solo se extrae la sección 2B (Oposiciones y concursos)
  • Resultados organizados por departamento y epígrafe con acordeón colapsable
  • Chips de color por tipo de convocatoria: Oposición, Libre designación, Traslados, Concurso, Personal laboral, Docente
  • Botones Web y PDF con enlace directo a boe.es
  • Animación escalonada de entrada de departamentos (fadeUp)
feat
  • Cada día consultado se guarda en localStorage con timestamp
  • Expiración configurable (CACHE_DAYS = 15) — entradas antiguas se limpian al arrancar
  • Días ya visitados se cargan instantáneamente sin petición de red
  • Valor especial "EMPTY" para días festivos sin publicación
feat
  • Buscador por palabra clave en tiempo real persistido en boe_filtro
  • Sistema de favoritos con estrella por convocatoria, persistido en boe_favs
  • Modo «Solo favoritos» para ver únicamente las convocatorias guardadas del día
  • Persistencia del último día seleccionado en boe_selected (formato YYYYMMDD)
  • AbortController para cancelar peticiones al cambiar de día rápidamente
feat
  • Cabecera sticky con color azul BOE #003087, franja dorada y tipografía IBM Plex Sans
  • Pastilla BOE en IBM Plex Mono
  • Scroll suave al seleccionar un día (scrollIntoView)
  • Adaptación responsive completa para móvil (<480px)
  • Sanitización XSS de todos los textos procedentes del XML
v0.1 Prototipo inicial — Prueba de concepto Abril 2026
inicial
  • Verificación de que la URL boe.es/boe/dias/YYYY/MM/DD/index.php?s=2B es predecible y estable
  • Identificación de la API de datos abiertos del BOE (/datosabiertos/api/boe/sumario/YYYYMMDD)
  • Primer calendario funcional con grid de 7 columnas
  • Consulta directa al BOE mediante proxy CORS público (allorigins.win)
  • Parseo básico del XML filtrando la sección 2B
  • Worker propio en Cloudflare para evitar dependencia de proxies públicos
  • Filtro de texto básico con persistencia en localStorage
  • Botón Hoy y navegación entre meses