- Introduced a modal to display keyboard shortcuts with a toggle button (`?`) in the interface.
- Added support for toggling shortcuts list visibility via `?` and `Escape` keys.
- Enabled navigation with additional shortcuts: `n/p`, `Home/End`, `m`, and `Space/Shift+Space` for improved usability.
- Modified keypress handling to accommodate new shortcuts while preventing default browser scroll actions where necessary.
- Updated styles to ensure proper positioning and accessibility of the shortcut list.
- Introduced a continuous reading mode ("scroll"), allowing users to read without pagination.
- Implemented a toggle in the UI to switch between "paged" and "continuous" modes, with preferences saved in `localStorage`.
- Enhanced keyboard navigation by throttling repeated actions and ignoring irrelevant keypresses during form interactions.
- Integrated `IntersectionObserver` to handle lazy-loading of images and dynamically extending rendered content in continuous mode.
- Updated tests to validate both reading modes, ensuring proper state management and observer handling.
- Adjusted animations and transitions for smoother visual feedback in both modes, respecting users' motion-reduction preferences.
- Added logic to construct `DATABASE_URL` from `DB_*` variables to prevent accidental fallback to SQLite during Docker Compose deployments.
- Updated `DATABASES` configuration to use `dj_database_url.parse` instead of deprecated `config`.
- Disabled health checks for services that do not expose a web port to avoid unnecessary probes.
- Removed unused `libmariadb-dev` and `pkg-config` dependencies from the `Dockerfile`.
- Moved `nginx.conf` from `cbreader/settings/` to `compose/` for better organization of deployment-specific files.
- Updated `docker-compose.yml` to reference the new path for Nginx configuration.
- Added Vitest configuration (`vitest.config.mjs`) for frontend unit testing with a `jsdom` environment.
- Migrated and rewrote key frontend tests (`api.test.js`, `comiclist.test.js`, `comicreader.test.js`, `historytable.test.js`, `router.test.js`, `store.test.js`) to Vitest, improving maintainability.
- Removed `tsconfig.json` and related TypeScript loaders from `webpack` configurations (`webpack.dev.js`, `webpack.prod.js`).
- Adjusted `eslint.config.mjs` to support Vitest tests.
- Updated `package-lock.json` to include Vitest, test utilities (`jsdom`, `@vue/test-utils`), and other associated packages.
- Updated Nginx configuration for better compression on assets (`gzip` adjustments).
- Enhanced `entrypoint.sh` to include first-run library indexing (`--if-empty` argument).
- Simplified the `scan_comics` command with a dedicated test for empty database scans.
This transition improves testing workflows and backend/frontend synergy while removing unused TypeScript dependencies.
- Added a new `scan_directory` task to enable folder scans as asynchronous tasks while maintaining compatibility with the immediate backend.
- Introduced the `reconcile` function, replacing `generate_directory` for improved separation of concerns between database writes and read operations.
- Established a unique constraint on `Directory` (`one_directory_name_per_parent`) to prevent duplicate directories under the same parent.
- Added a "Scan" button to the frontend for re-reading folders from disk, along with new task invocation endpoints in the API.
- Updated tests across modules to validate the new `scan_directory` task, unique constraints, and database indexing logic.
- Improved cleanup logic for stale files, directories, and thumbnails to handle concurrent operations efficiently.
- Simplified `scan_comics` management command by removing user dependency and aligning it with the new `reconcile` function.
- Enhanced frontend components (`TheComicReader`, `TheComicList`, and others) to include lifecycle method cleanups, prevent memory leaks, and handle task-based scans.
- Runtime majors: vue-router 5, reveal.js 6, fontawesome 7. Checked against the
code that uses them: no change needed for reveal.js (the default export is
still a callable factory and every method/option used is still present) or
fontawesome (all seven registered icons still resolve).
- frontend/src/router/index.js: guards return the redirect instead of calling the
deprecated next() callback, which works on vue-router 4 and 5.
- Add frontend/eslint.config.mjs because eslint 10 requires a flat config; the
lint script now runs eslint directly instead of vue-cli-service.
- Drop tooling nothing in the webpack configs uses (@vue/cli-*, jshint,
html-webpack-plugin, webpack-bundle-analyzer, @babel/core) and delete the dead
vue.config.js. npm audit 35 -> 5 (all dev-only), --omit=dev is 0.
- frontend/src/views/UserView.vue: the $route watcher no longer declares unused
params.
- Delete empty modules (comic/views.py, comic/urls.py, comic/forms.py), the
empty mypy.ini, .readthedocs.yaml (no docs/ directory, pins Python 3.8) and
setup.py (distutils is gone in Python 3.12+ and it still listed the deleted
comic_auth; packaging is handled by pyproject.toml).
- Untrack the base64 PDF blob 'data' and the manual-only test_comics fixtures;
the suite builds archives in tmp_path via comic/tests/factories.py. UnRAR.exe
stays on disk for manual rarfile testing but is not in git.
- Drop unused dependencies: django-bootstrap4, django-sri, drf-extensions,
mysqlclient, setuptools.
- build-test.ps1 no longer uses poetry.
- Ignore .venv/, .mypy_cache/, .ruff_cache/.
- Introduced `CookieJWTAuthentication` for authentication via HttpOnly cookies, enabling browser-initiated requests without `Authorization` headers.
- Added authentication views (`CookieTokenObtainPairView`, `CookieTokenRefreshView`, `CookieTokenBlacklistView`) to replace default SimpleJWT views.
- Updated Vuex store and frontend logic to handle sessions using HttpOnly cookies instead of localStorage.
- Enhanced backend and frontend configurations (Django settings, router, Vuex, and API service) to fully support cookie-based authentication.
- Updated authentication tests to ensure correct cookie handling and authentication flows.
- Removed `flake8` and `flake8-annotations` from dependencies, replaced by `ruff` for linting.
- Introduced cleaner type hinting and modern Python annotations (PEP 604 style) across multiple modules.
- Moved archive processing to a dedicated helper (`comic.archives`) for improved maintainability.
- Updated and simplified logic for archive file retrieval, directory cleaning, and user access validation.
- Improved error handling and added support for user classification restrictions in API responses.
- Removed `flake8` and `flake8-annotations` from dependencies, replaced by `ruff` for linting.
- Introduced cleaner type hinting and modern Python annotations (PEP 604 style) across multiple modules.
- Moved archive processing to a dedicated helper (`comic.archives`) for improved maintainability.
- Updated and simplified logic for archive file retrieval, directory cleaning, and user access validation.
- Improved error handling and added support for user classification restrictions in API responses.
- Restructured `Dockerfile` to include a dedicated frontend build stage and improved runtime configurations.
- Added new health checks and adjusted environment variables for better container management.
- Updated cron job configurations to leverage `/opt/venv` and align with new paths.
- Refined `docker-compose` files for multi-service setups, including better volume and environment variable handling.
- Migrated `cbwebreader-cron` service setup and improved restart policies across the board.
- Enhanced `.gitea` CI workflow to use updated tools (`uv`), streamline buildx processes, and ensure proper version extraction from metadata.
- Skip page count assignment for corrupt or incompatible archives in comic processing.
- Update `Dockerfile` to append crontab entries to `/etc/crontab` instead of `/etc/cron.daily/cbreader`.
- Modify crontab entry to use the virtual environment's Python binary and include the `root` user for execution.
Upgrade various Python package dependencies in `uv.lock`. Includes updates to critical packages such as Django (6.0.5 → 6.1.2), DRF (3.17.1 → 3.18.3), and others. Also adds new packages: `jsonschema`, `jsonschema-specifications`, and `importlib-resources`.
Introduce navigation guards for authentication and admin access within routes. Replace localStorage usage with secure token storage via httpOnly cookies, and add token blacklisting upon logout. Enhance token refresh mechanism and session expiration handling to improve security and user experience.
This commit removes the frontend component ThePdfReader.vue and replaces its functionality with a backend implementation based on pymupdf. Also includes package updates, refactors PDF archive handling, and adjusts security settings to support development on localhost.
* frontend rewrite with vie initial commit
* got ComicCard.vue working nice.
* got TheComicList.vue working.
* added router and basic config
* getting jwt stuff working.
* login with jwt now working.
* implemented browse api call
* implemented browse api recievers
* jwt token is now updating automatically.
* removed code for jwt testing.
* enabled browsing
* breadcrumbs working
* adding django webpack loader
* linking up navigation
* fixes for ComicCard.vue stying
* added thumbnail view
* added thumbnail generation and handling.
* detached breadcrumbs
* fix breadcrumbs
* added first stages of reader
* reader view is working.
* reader is now working with keyboard shortcuts
* implemented setting read page.
* implemented pagination on comic reader.
* hide elements that shouldn't be shown.
* fixed the ComicCard.vue to use as little space as possible.
* fix navbar browse link
* added RecentView.vue and added manual option for breadcrumbs
* updated rest api to handle recent comics.
* most functionality of recent comics done
* modified comicstatus relation to use uuid relation and implemented mark read and unread for batches.
* added functions to TheRecentTable.vue
* added feed link to TheRecentTable.vue
* fixes for comicstatus updates.
* added constraints to comicstatus
* update to python packages.
* some changes for django 4, also removed django-recaptcha2 as it doesnt support django 4.
* some fixes and updates to ComicCard.vue
* cleaned up generate_directory. fixed bug where pages not visible on first call.
* cleaned up generate_directory. fixed bug where pages not visible on first call.
* cleaned up generate_directory. fixed bug where pages not visible on first call.
* cleaned up generate_directory.
* added silk stubs
* fix for re-requesting thumbnail after getting it already.
* fix for removing stale comics.
adding leeway to access token.
* mark read and unread
* added filtering to comic list.
* stored filtering state.
* stored filtering state.
* added next functionality to login.
* cleanup LoginView.vue
* bump font-awesome.
* working on AccountView.vue
* fixed form submission on LoginView.vue
* account page should now be working.
* hide users option if not superuser.
* added pdf support
* make pdf resize.
* added touch controls to pdf reader
* added touch controls to comic reader
* beginnings of routing between issues.
* fixes for navigating pages.
* fixes for navigating pages.
* fixes for navigating pages.
* renamed HomeView.vue to BrowseView.vue
* stubs for users page added. api ready
* users page further functinality
* fix for notification
* fix for notification
* moved messages to parent.
* form to add users
* added error handling
* removed console logging
* classification in base directory should be lowest
* renamed usermisc to classification to be more consistent with what it does.
* renamed usermisc to classification to be more consistent with what it does.
* added functionality to change classification of directories.
* merged rss_id api into account api.
* merged breadcrumbs api into browse api.
* clears some warnings from console.
* fixed read/unread rendering.
* added build script and starting lint
* fixing lint errors
* fixing lint errors
* fixing lint errors
* fixing lint errors
* fixing lint errors
* fixing lint errors
* fixing lint errors
* fixing lint errors
* fixing navigation bugs
* cleanup and fixes
* fixed generated tooltips over calling.
* fixed classifications.
* initial setup now working
* fix navbar branding
* fix favicon
* added beta build script.
* fixes to get ready for production
* optimisations for loading new comics.
* added loading indicators to TheComicList.vue
* lint fixes
* made two methods static. may use them elsewhere.
* fix for scanning files.
* version updates.
* fixes for production
* fixes for production
Co-authored-by: Peter Dwyer <peter.dwyer@clanwilliamhealth.com>
* added django-sri and updated templates.
* updated requirements.txt
* datatables with integrity
* fixed recent comics not showing when related comicstatus doesnt exist.
* fixed classifications on recent comcis.
* fixed classifications on recent comcis.
* fixed classifications on recent comcis.
* fixed classifications on recent comcis.
* fixed classifications on recent comcis.
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fixes for pymupdy 1.18.13
* fix for pdf's not switching properly
* fix for comics's not switching properly
* fix for comics's not switching properly
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.
* update to Dockerfile to make the build much smaller.