Repository navigation
Releases
Open Reader 1.1.4 - la burbuja es del comentario, no del resaltado
Open Reader 1.1.4
La burbuja de comentario vuelve a significar lo que debe: hay un comentario
escrito.
Qué cambió
En la 1.1.0 hice que toda anotación tuviera burbuja para que no pareciera
que se habían perdido notas. El efecto secundario: al resaltar un pasaje
aparecía una burbuja numerada sin que hubiera nada escrito detrás.
Ahora:
| Lo que haces | Lo que se ve |
|---|---|
| Resaltas un pasaje | solo la banda de color sobre el texto |
| Escribes un comentario | burbuja numerada al canto (1…9, «9+») |
| Pegas un post-it | pestaña triangular de color, sin número |
La numeración cuenta solo comentarios, así que dos resaltados sin nota no
consumen los números 1 y 2.
Reglas cubiertas por tests
tests/markers.test.ts incluye ahora el caso explícito «un resaltado sin
comentario no deja marca en el canto», además de los que ya había: numeración,
orden de lectura, pestañas sin número, apilado y filtrado por página visible.
Comprobado a tres tamaños
| Tamaño | Resaltar | + nota | Post-it |
|---|---|---|---|
| 390 × 844 | 0 burbujas | 1 burbuja «1» | pestaña |
| 1440 × 900 | 0 burbujas | 1 burbuja | 1 pestaña |
| 834 × 1112 | mismo componente, misma regla |
54 tests en verde.
Open Reader 1.1.3 - borrar comentarios con confirmacion
Open Reader 1.1.3
Borrar un comentario desde el propio comentario, con confirmación.
Qué cambió
Al abrir un comentario (tocando su burbuja) el diálogo ahora tiene tres botones:
[ Eliminar ] [ Cancelar ] [ Guardar ]
Eliminar no borra de golpe: cambia el pie del diálogo a la confirmación
Se borra el comentario y su resaltado. No se puede deshacer.
[ Cancelar ] [ Sí, eliminar ]
Mientras confirma, el botón de guardar desaparece, para que no se pulse por
inercia. Cancelar vuelve al estado normal sin tocar nada.
Se borran el comentario y su resaltado, que es lo mismo que hace la papelera
de la lista de notas.
Comprobado en tres tamaños
| Tamaño | Diálogo | Botones | Resultado |
|---|---|---|---|
| 390 × 844 (celular) | 359 px, cabe entero | una fila | borra y el contador baja de 3 a 2 |
| 834 × 1112 (tablet) | 560 px, cabe entero | una fila | igual |
| 1440 × 900 (computador) | 560 px | una fila | igual |
También probado el camino de cancelación: tras Eliminar → Cancelar el
diálogo sigue abierto y no se borra nada.
Y en producción (v1.1.3) el ciclo completo: abrir burbuja → Eliminar → confirmar
→ la burbuja desaparece y el contador de notas se apaga.
54 tests en verde, 19 de ellos sobre las marcas del borde.
Open Reader 1.1.2 - solo las notas de la pagina abierta
Open Reader 1.1.2
Arreglo de las marcas del borde: aparecían las de todo el capítulo, no solo
las de la página abierta.
Qué pasaba
El paginador no recorta el texto: maqueta el capítulo entero en columnas y
desplaza el iframe a la izquierda para enseñar una sola. Las marcas
conservan su coordenada dentro del capítulo, así que al calcular su altura
entraban todas, también las de páginas que no estabas viendo, y se amontonaban
al canto.
Cómo se arregló
La ventana visible se calcula con la posición real del iframe:
ventana = [hoja.izquierda - iframe.izquierda, hoja.derecha - iframe.izquierda]
Una marca solo se dibuja si su left cae dentro de esa rebanada. La lógica está
en core/markers.ts (visibleAnchors) y cubierta con tests: conserva las de la
página abierta, descarta las de otra columna y las de secciones que ya no están
cargadas, y no filtra nada si la ventana no se conoce.
Comprobado
Con un EPUB de un capítulo de 120 párrafos (varias páginas):
| Página | Marcas | Cuál |
|---|---|---|
| 7 % | 1 | «Párrafo 5» |
| 11 % (antes de crear una nota) | 0 | — |
| 11 % (después) | 1 | «Párrafo 10» |
Es decir: cada página enseña exactamente su marca, ni una más.
También probado un PDF de 6 páginas a 390 px: abre, pagina y no se rompe.
50 tests en verde (19 sobre marcas).
Nota de despliegue
El servidor de casa (192.168.1.100) estaba apagado o sin red al publicar esta
versión: el código y la etiqueta están en GitHub, pero el sitio puede tardar en
recibirla hasta que vuelva a estar encendido.
Open Reader 1.1.1 - por que no salian las notas
Open Reader 1.1.1
Segundo arreglo de raíz sobre las marcas del borde. La 1.1.0 quitó una causa,
pero quedaban dos filtros por índice que seguían escondiendo notas.
Los dos fallos
- Al pintar. Antes de dibujar cada resaltado se comprobaba
anotación.index === sección visible. El motor reporta el índice de la
primera sección de la página; si tu nota estaba en la segunda, nunca se
dibujaba: ni banda sobre el texto ni burbuja. Ahora se entregan todas las
notas al motor y es él quien decide en qué documento va cada CFI. - Marcas viejas al cambiar de capítulo. Las alturas se actualizaban solo
cuando se pintaba una marca nueva, así que al pasar a un capítulo sin notas
seguían visibles las burbujas del anterior. Ahora se recalculan también en
cada cambio de página.
Comprobado
- Capítulo con notas → 5 burbujas y 2 pestañas.
- Capítulo sin notas → 0 marcas (antes quedaban las 7 del anterior).
- Volver al capítulo con notas → 5 y 2 otra vez, sin duplicados.
- Tres tamaños (1440×900, 834×1112, 390×844): 0 solapes, sin desbordes.
- 50 tests en verde, 15 de ellos sobre estas reglas.
Open Reader 1.1.0 - marcas fiables y TDD
Open Reader 1.1.0
Arreglo de fondo de las marcas del borde: las burbujas de comentario y las
pestañas de post-it no salían de forma fiable.
Qué estaba mal
La posición de cada marca se calculaba resolviendo su CFI contra el DOM después
de pintar la página. Si el motor todavía no había expuesto el contenido, la
resolución fallaba en silencio: no se dibujaba nada y no había ningún error
a la vista. Por eso «no se veía nada» aunque las notas existieran.
Cómo se arregló
- Las alturas salen ahora de los rectángulos que el propio motor entrega al
pintar cada marca (draw-annotation). Si una marca se pintó, tiene altura:
no hay carrera posible con el DOM ni CFIs que resolver. - Toda anotación tiene marca, no solo las que llevan texto. Antes, un
comentario sin escribir no generaba burbuja y parecía que se había perdido. - Las marcas se apilan si caen en el mismo renglón o chocan contra el borde:
nunca una encima de otra. - La lógica vive en
core/markers.ts, sin React, y está cubierta por
15 tests nuevos (tests/markers.test.ts): numeración del 1 al 9 y «9+»,
orden de lectura, post-it que no gasta número, apilado, filtrado por capítulo
y marcadores de página excluidos.
Comprobado a tres tamaños
| Tamaño | Resultado |
|---|---|
| 1440 × 900 | 6 marcas, sin solapes, sin desbordes |
| 834 × 1112 | 6 marcas, sin solapes, sin desbordes |
| 390 × 844 | 6 marcas, sin solapes, sin desbordes; tocar burbuja abre el comentario y tocar pestaña abre las opciones |
Total del proyecto: 50 tests en verde.
Open Reader 1.0.3 - tactil afinado y contador del margen
Open Reader 1.0.3
Pasada de control en computador, tablet y celular. Tres cosas que no estaban
bien en pantalla pequeña:
Marcadores al tactil
- La burbuja de comentario y la pestaña del post-it ahora tienen una zona de
toque más grande que su dibujo (unos 9 px alrededor). Antes medían ~24 px y
en el dedo se fallaba. - Si un post-it cae en el mismo renglón que un comentario, su pestaña baja
una línea para no quedar tapada por la burbuja. - La pestaña del post-it usa un amarillo y un morado más saturados: sobre el
papel claro se perdía.
Contador del margen
Con el margen plegado, el botón ahora muestra el icono y cuántas notas hay en
el capítulo («6»). Antes era un icono suelto y no se sabía si había algo
dentro.
Revisado a tres tamaños
| Tamaño | Qué se probó |
|---|---|
| 1440 × 900 (computador) | estantería, barra de anotar en una fila, burbujas, pestañas, panel |
| 1194 × 834 (tablet) | lo mismo + margen plegado con contador, sin desbordes |
| 390 × 844 (celular) | barra en dos filas, burbujas al canto, pestañas sin taparse, panel lateral como cajón, diálogo de nota a 359 px |
En los tres: sin desplazamiento horizontal, sin controles cortados y con la
misma lectura de marcas.
Open Reader 1.0.2 - post-it, marcadores y burbujas
Open Reader 1.0.2
Tres ajustes de la capa de marcas, a raíz de probarlo en la tablet.
Post-it: pestaña triangular, sin tapar el texto
Antes el post-it pintaba una banda de color sobre el renglón y se confundía con
un resaltado. Ahora no pinta nada sobre la página: se ve como un
triangulito de color asomando por el canto, a la altura del pasaje. El texto
queda limpio y el marcador no estorba.
Marcadores de página: ya no sombrean
Era un fallo: al marcar una página, el marcador se dibujaba como si fuera un
resaltado y, como su ancla es un punto, cubría la hoja entera. Ahora los
marcadores no se dibujan en el libro: solo viven en su pestaña y en el botón.
Comentarios: burbuja cerrada con número
El marcador es una burbuja de diálogo (rectángulo redondeado con su colita
apuntando al texto) y el número dentro: 1…9 y «9+». Nada de texto a la vista:
el comentario solo se abre si lo tocas.
Además, el margen arranca plegado, así que al abrir un libro no aparecen las
tarjetas abiertas: solo las burbujas y las pestañas en el canto. Se despliega con
el botón del margen cuando quieras leerlos en columna.
Detalles
- Las pestañas de post-it se colocan un poco más abajo para no chocar con una
burbuja de comentario en el mismo renglón. - Mismo comportamiento en computador y en móvil.
- Sin cambios de datos: todo lo guardado se lee igual.
Open Reader 1.0.1 - post-it y nota, cada uno lo suyo
Open Reader 1.0.1
Parche sobre la 1.0.0 que separa dos cosas que estaban mezcladas: nota y
post-it.
Post-it
- Pegar un post-it ya no abre el diálogo de nota: eliges amarillo o morado en
la barra y queda pegado al instante. No hace falta escribir nada. - En la página se ve como una tira de color sobre el renglón con su
pestaña asomando por el borde de la hoja, a la altura del pasaje. - Tocando la pestaña (o el texto marcado) salen las opciones, con Borrar.
- Volver a tocar el mismo color lo quita.
- Los post-it aparecen en la pestaña Notas del libro con su etiqueta y su
color.
Nota
Sigue siendo otra cosa: texto escrito sobre un pasaje, con su diálogo. Si una
anotación tiene texto, se muestra como burbuja numerada (1…9, «9+») en el
borde; si es un post-it sin texto, como pestaña de color.
Resto
- El resaltado normal sigue igual (velo suave al 30 %), así que marcar no tapa la
página. - Sin cambios en datos: todo lo guardado en la 1.0.0 se lee igual.
Open Reader 1.0.0 - primera version oficial
Open Reader 1.0.0
Primera versión oficial. Un lector de libros que vive entero en el navegador:
sin cuentas, sin servidor y sin subir tus archivos a ningún sitio.
Sitio: https://open-reader.eridu.top
Qué abre
EPUB, MOBI, AZW3, FB2, CBZ y PDF, con motor propio basado en foliate-js
(vendorizado y parcheado para PDF, fixed-layout y anotaciones).
Lo que trae
Lectura
- Dos personalidades visuales: Papel (por defecto) e Industrial.
- Tipografías de lectura (Descanso, Editorial, Legible, la del libro), tamaño,
interlineado, ancho de columna, justificado y partición de palabras. - Paginado o scroll; zoom de página en PDF.
- Pantalla completa, atajos de teclado y zonas de toque en los márgenes vacíos
para pasar página. - Pantalla siempre encendida mientras lees (Screen Wake Lock), con su ojito en
la barra.
Anotar
- Resaltado en cinco colores y cuatro estilos: subrayado, ondulado y tachado.
- Notas al margen con «me gusta», y post-its amarillos y morados.
- Burbujas de comentario pegadas al pasaje, numeradas 1…9 y «9+», como en
Google Docs: se ven en móvil y en escritorio. - Citas con tarjeta PNG descargable.
- Marcadores de página, búsqueda en todo el libro e índice navegable.
Tus datos
- Todo se guarda en el dispositivo (IndexedDB y localStorage). Nada viaja.
- Exportación
.eridu(copia completa) e importación. - Exportación de notas a Markdown.
App
- PWA instalable y funcional sin conexión.
- Español, inglés y chino continental, con detección automática del idioma.
- Responsive real: portátil, tablet y celular.
- Botón «Buscar actualización» en la portada y en el lector, porque un service
worker puede dejar el móvil semanas en la versión vieja.
Arquitectura
El visor es el conjunto de sus plugins: cada función (índice, búsqueda, notas,
resaltados, citas, marcadores, ajustes, pantalla encendida) es una carpeta en
src/features/ que declara qué aporta —botón, pestaña, margen, capa sobre la
página, diálogo o atajo— y se registra en una lista. Añadir una función es un
archivo y una línea.
core/ lógica sin React (libros, almacenamiento, anotaciones, CFI)
i18n/ es · en · zh
viewer/ motor, estado de la sesión y contrato de plugins
features/ una carpeta por función
screens/ estantería y pantalla de lectura
ui/ controles y diálogo reutilizables
Detalles en docs/ARCHITECTURE.md.
Privacidad y seguridad
- Sin cuentas, sin analítica propia, sin peticiones a servidores de terceros.
- CSP estricta:
script-src 'self',frame-ancestors 'none',
object-src 'none',connect-src 'self'. Un EPUB no puede ejecutar código. - Los libros se abren en un documento aislado; tus notas no salen del navegador.
Límites conocidos
- Sin DRM: los libros protegidos de tiendas no abren.
- Las notas son locales por navegador; el
.eridues el puente entre equipos. - En PDF, la selección depende de la capa de texto del archivo: un escaneo sin
OCR no se puede resaltar, y la búsqueda no está disponible. - El menú nativo de selección de Android/iOS no se puede ocultar desde la web:
por eso las opciones van en una barra fija arriba y no junto al texto.
Gracias
A foliate-js (MIT), PDF.js (Apache-2.0) y las fuentes libres que usa el lector.