forked from akai/readest
681e065ac4
* feat: add RSVP speed reading feature Implements Rapid Serial Visual Presentation (RSVP) speed reading mode: - Display words one at a time with ORP (Optimal Recognition Point) highlighting - Adjustable WPM speed (100-1000) with keyboard/button controls - Punctuation pause settings (25-200ms) - Progress tracking with chapter navigation - Context panel showing surrounding text when paused - Keyboard shortcuts (Space, Escape, arrows) and touch gestures - Chapter selector for quick navigation - Respects current theme colors - Persists settings (WPM, pause duration, position) per book New files: - services/rsvp/RSVPController.ts - Main controller with playback logic - services/rsvp/types.ts - TypeScript interfaces - components/rsvp/RSVPOverlay.tsx - Full-screen RSVP reader UI - components/rsvp/RSVPControl.tsx - Integration component - components/rsvp/RSVPStartDialog.tsx - Start position selection Closes #3111 * test(rsvp): add Playwright e2e tests for RSVP feature - Set up Playwright test infrastructure with config - Add comprehensive e2e tests for RSVP speed reading: - Opening RSVP from View menu - Start dialog options - Play/pause toggle - Speed adjustment - Skip navigation - Keyboard shortcuts - Progress bar - Chapter navigation - Accessibility tests - Add test data attributes and ARIA labels to RSVPOverlay - Add test scripts to package.json * refactor: remove test files, unsure of use case for now * chore: remove Playwright e2e test scripts from package.json - Deleted e2e test scripts related to Playwright from package.json as they are no longer needed. - Removed Playwright as a dev dependency to streamline the project. * chore: sync pnpm-lock.yaml after removing @playwright/test * fix: lint errors and timezone-aware date formatting * fix(rsvp): restore correct position when exiting RSVP mode Fix bug where exiting RSVP after changing speed would navigate to wrong position (several pages backwards). The issue was that Range objects become stale if the document re-renders, and the position recovery used global word index instead of per-document index. - Add docWordIndex to track word position within each document - Add docTotalWords to RsvpStopPosition for accurate recovery - Validate Range before using it, recreate from current DOM if stale - Use same word extraction logic as RSVPController for consistency * fix(rsvp): prevent arrow keys from changing chapter dropdown Arrow keys during RSVP mode were inadvertently navigating the chapter dropdown instead of controlling RSVP speed. Fixed by using capture phase for keyboard events and stopping propagation to prevent native elements from receiving the events. * chore: remove playwright-mcp screenshots from repo * chore: update gitignore * fix(i18n): wrap all RSVP overlay strings with translation function Restore missing translation wrappers for all user-facing strings: - Close RSVP button labels and tooltips - Select Chapter dropdown - WPM display - Context panel header - Ready state text - Chapter Progress label - Words count and time remaining - Reading progress slider - Pause/punctuation label - Skip back/forward buttons - Play/Pause button - Speed control buttons * fix(rsvp): use CFI-based position tracking for accurate page positioning - Add CFI generation for each extracted word during RSVP processing - Implement CFI path and character offset comparison for precise position matching - Update startFromCurrentPosition to use CFI matching instead of word index - Add extractFullDocPathWithOffset to handle CFI character offsets - Simplify RSVPControl by removing unused helper functions - Remove word index from RsvpPosition in favor of CFI-only tracking * fix(ViewMenu): re-enable Speed Reading Mode in production environment * refactor(ViewMenu, RSVPController): clean up code formatting and improve readability * refactor(ViewMenu): remove unused IoSpeedometer import * refactor(RSVPController): streamline CFI handling and improve section comparison - Removed redundant logic and re-using CFI util functions for CFI operations * refactor(RsvpPosition): remove legacy wordIndex field for cleaner type definition
49 lines
488 B
Plaintext
49 lines
488 B
Plaintext
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
|
|
# dependencies
|
|
/node_modules
|
|
/.pnp
|
|
.pnp.js
|
|
.yarn/install-state.gz
|
|
|
|
# testing
|
|
/coverage
|
|
|
|
# next.js
|
|
/.next/
|
|
/out/
|
|
|
|
# production
|
|
/build
|
|
|
|
# misc
|
|
.DS_Store
|
|
*.pem
|
|
/certs
|
|
|
|
# debug
|
|
npm-debug.log*
|
|
yarn-debug.log*
|
|
yarn-error.log*
|
|
|
|
# local env files
|
|
.env*.local
|
|
|
|
# vercel
|
|
.vercel
|
|
|
|
# typescript
|
|
*.tsbuildinfo
|
|
next-env.d.ts
|
|
|
|
# Rust build
|
|
target
|
|
|
|
fastlane/report.xml
|
|
|
|
*.koplugin.zip
|
|
|
|
# nix
|
|
result*
|
|
.playwright-mcp/
|