Skip to content
This repository was archived by the owner on Apr 23, 2026. It is now read-only.

2.9.14: Dual-language reader with translation book split view

Choose a tag to compare

@ShiroiKuma0 ShiroiKuma0 released this 19 Apr 05:52

2.9.14

Dual-Language Reader (Translation Book)

A split-screen mode for reading a book alongside its translation in another language.

Features

  • Split-screen view — opens a secondary ッツ reader panel below the primary book
  • Draggable divider — drag the divider bar up/down to adjust the split ratio (20%–80%), ratio persisted per book
  • Translation book toggle — dedicated button on the audio toolbar (between progress slider and menu) to show/hide the secondary panel
  • Menu integration — "Set translation book" / "Change translation book" menu items with book title display and "Tap to change" subtitle
  • Automatic title formatting — translation book is renamed to "Primary ⇨ Translation" format (e.g. "Erfolg ⇨ Success") in both the ッツ reader book list and the app's reader history
  • Sort order preserved — translation book's lastBookOpen is set to 0 so the primary book always appears first in book lists
  • Per-book persistence — translation book URL, title, and split ratio saved per primary book via Hive, restored on reopen
  • Reading position persistence — auto-bookmark enabled in the secondary reader, so translation book position is saved independently
  • Dictionary isolation — text selection in the translation book does not trigger dictionary lookups

Reader Margin Fix

  • Removed hardcoded Tailwind padding (py-8, px-4, md:px-8) from the ッツ reader's book container via CSS injection, eliminating the ~5% margins on all sides in both primary and secondary readers

Technical Notes

  • Secondary WebView shares the same ッツ reader server (same port), so imported books are available in both panels
  • Book URL detection handles SPA navigation (/b?id=) by converting to direct-loadable format (/b.html?id=) before saving
  • Book title extracted from ッツ reader's formatPageTitle output ("Title | ッツ Ebook Reader""Title")
  • CSS margin fix uses ID-checked style injection in both onLoadStop and onTitleChanged to survive SPA navigation
  • IndexedDB title rename guarded by check to prevent re-renaming on subsequent opens