Version 1.2.0
was released on 25 March 2020.
This release includes the following (notable) new features, improvements and bug fixes:
- Configurable keyboard shortcuts (including new commands, for example "goto toolbar", "boomark", "goto navigation panel"): editor user interface with auto-capture (i.e. automatic detection key events) or fine-grain user selection (i.e. choice of modifier keys + main action key from a list of predefined options), as well as alternative configuration method for advanced users: raw config file (JSON format)
- There is now a keyboard-accessible (tab / shift-tab) hidden link at the beginning of publication documents in order to redirect focus (notably, screen reader cursor) to the currently-linked reading location (for example TOC heading, bookmark destination, etc.)
- Fixed accessibility-related keyboard focus issues: hyperlinks inside publication documents (notably: visual temporary outlining of link target), TOC heading links and bookmark destinations (landing point above the main frame now with clearer label, tested with several screen readers, which do not navigate into the frame's keyboard focus consistently).
- Fix for keyboard-accessible cover images in the bookshelf (local library and remote publication catalogs), and for some UI elements which were not labelled correctly (e.g. the "delete" cross icon in OPDS catalogs)
- Preliminary support for AudioBooks (Packaged Readium Web Pub Manifest format): separation of publication types in the local bookshelf, handling of time bookmarks, display of audio metadata (duration, number of tracks), support for audiobooks without TOC Table Of Contents (instead: audio files in reading order, with "chapter" description label / title), application of ReadiumCSS styling (font size and family, color theme) etc. TODOs: https://github.com/readium/readium-desktop/issues?q=is%3Aissue+is%3Aopen+label%3Aaudiobooks
- Spanish translation (in addition to existing English, French and German)
- Bookmarks list in the navigation panel are now ordered (as per the linear reading progression of the publication)
- Bookmarking now supports text selection (automatically sets the bookmark description / label), and multiple bookmarks per page spread can be created
- In the "goto page" feature (navigation panel), the nearest preceding EPUB pagebreak is shown to provide information about the current reading context
- The bottom interactive "reading progress" bar now correctly handles mouse clicks offset (percentage progression into individual spine items, text and audiobooks)
- Fixed significant performance issues in publication documents, which were due to how Chromium renders HTML (including Readium CSS), and prioritizes paint requests for large documents textures (e.g. GPU 2D/3D accelerated selections/annotations, but also weird edge cases with night and sepia modes)
- OPDS browsing improvments, notably: support for facets (to be continued)
- Fixed bug due to HTTP response logging (there was no safeguard for the error case of offline / network down conditions)
- Various low-level code refactorings, in order to scale architecture for future updates / feature additions
- Fixed memory leak: publication ZIP was not deallocated (filesystem handle freed) when the last reader window closed
- Latest updates available for NPM packages / library dependencies, including Electron version 8 (Chromium version 80)
(previous v1.1.0 changelog)
Git commit diff since v1.1.0
:
https://github.com/readium/readium-desktop/compare/v1.1.0...v1.2.0
=> 70 GitHub Pull Requests or high-level Git commits.
Here is the complete list of commits, ordered by descending date:
- (_) chore(release): version bump 1.2.0 [skip ci]
- (_) chore(release): changelog update
- (_) chore(NPM): package updates, including Electron 8.2.0 (slightly newer Chromium + bugfixes + feature update)
- (_) fix(minor): code typo, function name (PR #981) [skip ci]
- (_) fix(dev): devtools context menu now ensures focus on web inspector window (same strategy used in r2-navigator-js for the "inspect element" at x,y coordinates in embedded webview)
- (_) chore(NPM): package updates (including r2-navigator-js), minor fix to HTML templates for reader and library windows (prompted by WebPack plugin update)
- (_) chore(release): changelog update [skip ci]
- (_) fix(audiobooks): the list view was not displaying all publications (grid view did), follow-up to PR #974
- (_) fix(GUI): bottom interactive progress bar now correctly handles mouse clicks offset (percentage progression into individual spine items, text and audiobooks)
- (_) chore(release): added draft version 1.2.0 changelog [skip ci]
- (_) chore(NPM): package updates, including latest r2-shared-js
- (_) feat(audiobooks): separation of "reading" vs. "listening" in local bookshelf display (PR #974 Fixes #941)
- (_) feat(audiobooks): publication info modal popup dialog now displays duration and number of tracks (PR #973 Fixes #940)
- (_) fix(bookmarks): ordered list, better add/remove logic, name derived from audio timestamp / percent progression, or selected text (PR #977)
- (_) hotfix(typo): fixed linting error from previous commit (async/await)
- (_) hotfix(regression): introduction of strict linting for async/await promises broke runtime due to waiting for browser windows to finish loading, see edrlab#975 (comment)
- (_) chore(NPM): updated package, reset lockfile
- (_) fix(audiobooks): remove unnecessary ReadiumCSS UI (PR #976 Fixes #944)
- (_) chore(dev): reinstate
no-floating-promises
intslint.json
, removeqs
andquery-string
NPM packages (PR #975 Fixes #698 Fixes #554) - (_) chore(npm): package dependency updates, mainly file-loader (WebPack) which now defaults to MD4 hash (see https://github.com/webpack-contrib/file-loader/blob/master/CHANGELOG.md#600-2020-03-17 )
- (_) chore(NPM): [skip ci] minor version update in secondary package.json (Yargs)
- (_) feat(l10n): Spanish translation (PR #971 + PR #957)
- (_) feat(a11y): nearest preceding EPUB pagebreak shown next to "goto page" input field (PR #965)
- (_) chore(NPM): package updates, including r2-navigator-js with fixes for epub pagebreak and text selection / current reading location
- (_) fix(audiobooks): no TOC => fallback on readingOrder with titles (Fixes #949)
- (_) chore(NPM): package updates, including important r2-navigator-js fixes and improvements (a11y, audiobooks, performance)
- (_) hotfix(a11y): Page Up / Down reversal (see comment edrlab#155 (comment) ) [skip ci]
- (_) fix(a11y): publication image cover link with clearer announcement (title + authors label) (Fixes #968)
- (_) chore(NPM): minor package updates, including Electron
- (_) fix(a11y): keyboard shortcuts editor was not resetting its state correctly (event capture), reader window initialization needed state sync at launch, keyboard shortcuts were not reloaded dynamically (required window content refresh), toast notifications in keyboard editor were too aggressive / annoying, renamed shortcuts labels / IDs (consistency), added reader window close shortcut, added alternative shortcuts to left/right arrow keys (which are reserved in several screen readers)
- (_) chore(NPM): package updates, including improved R2 navigator (keyboard and screen reader support)
- (_) fix(a11y): bookmark links in navigation panel now behave exactly like TOC links, in that the menu is closed and the focus is redirected to the content frame (caveat: screen readers still read from the beginning of the HTML file)
- (_) fix(a11y): NVDA screen reader was struggling with anchor links in the reader window (top toolbar region). CTRL-T keyboard shortcut focus-move is now announced correctly.
- (_) fix(a11y): window title was not updated by Helmet in DOM head (lib now replaced with document.title setter)consistently set title in LibraryLayout (e.g. search or tag keyword), removed unecessary intermediary DOM divs, eliminated unused 'title' state in reader, updated NPM packages
- (_) fix(lint): extraneous spaces
- (_) hotfix(a11y): Follow-up to PR #958 fix for keyboard handler in editor
- (_) fix(a11y): toolbar and main content quick-access keyboard shortcut landmark labels, see edrlab#155 (comment)
- (_) chore: replaced hard-coded Thorium string with APP_NAME compile-time var
- (_) fix(a11y): added missing title label for delete cross SVG icon on OPDS feed in catalog view (library window)
- (_) feat(a11y): configurable keyboard shortcuts, also fixes duplicate cover image tab stop, updates NPM packages (PR #958 Fixes #155 Fixes #838)
- (_) chore(NPM): package updates, notably UUID breaking API change (PR #963)
- (_) hotfix(ui/l10n): inconsistent usage of ':' colon separator, with prefix/suffix space (note that current convention is US/UK, future fix will address localization issues)
- (_) hotfix(a11y): title attribute on
i
element was unnecessarily hiding text content (language code + human-readable name) - (_) hotfix(ui): comma ',' suffix was added at end of publishers / contributors list (now is separator between list items)
- (_) hotfix: regression in PR #513 where R2 navigator was using the localhost/127.0.0.1 URL instead of the special domain / custom protocol for isolating publication origins
- (_) hotfix(CI): Octokit/rest API breaking change for Travis/AppVeyor automated build updates to GitHub (see https://github.com/octokit/rest.js/commit/c1d6c6a37ef4967753515c435f79bcedfcba29bf )
- (_) chore(NPM): package update for PouchDB LevelDB adapter (minor), locked tslint to v5 (deprecated anyway, must migrate to jslint with different default linting rules), major Octokit/rest package update (should be fine, will check build log for GitHub release uploads)
- (_) chore(NPM): minor package updates, and includes r2-shared-js which fixes a decodeURIComponent bug
- (_) hotfix: download queue was growing indefinitely, download totalSize could be unknown (missing HTTP header content-length) resulting in NaN progress value
- (_) hotfix: LCP regression due to downloader .part file extension deducted from URL and breaking EPUB vs. AudioBook detection
- (_) chore(l10n): cleanup pass on locales resources (removed unused translated string), using the tooling npm run i18n-sort, i18n-scan, i18n-check, and i18n-typed
- (_) fix: packaged application launch had blank window (Fixes #948)
- (_) feat(audio): first pass / iteration, support for audiobooks (reading location save/restore, bookmarks, ReadiumCSS theming, but missing metadata display, library category, etc.) (PR #938)
- (_) chore(dev): NPM package updates (most minor), includes Electron v8 (requires recompiled LCP lib), includes latest R2 components which add support for navigator publication session (audiobooks in separate PR) (PR #937)
- (_) dev: removed unused streamer file (PR #928)
- (_) dev: refactor LCP action/reducer for publication file lock (PR #929)
- (_) fix(ui): the "about" modal popup box had a dialog overlay with infinite spinner (PR #932 Fixes #931)
- (_) chore(dev): API code shared between Electron main and renderer processes (PR #925 Fixes #924)
- (_) fix: refactor - split reader and library renderer process bundles (PR #916 Fixes #921)
- (_) feat(OPDS): facets and additional metadata, UX/UI will be improved in future commit, for example breadcrumb (PR #881 Fixes #851 Fixes #613)
- (_) chore(dev): async/await translator setLocale with i18next promise (PR #907)
- (_) fix: HTTP response logging did not have safeguards for error case (Fixes #889)
- (_) chore(dev): disable unused code - "net" and "update" Redux state + Sagas (PR #912)
- (_) fix(l10n): UI header locale was not refreshed when switching language, library and reader app launch now centralized (needs further work, first pass) (PR #903 Fixes #882 Fixes #897)
- (_) chore(NPM): package dependencies updates
- (_) chore(dev): version bump 1.1.2-alpha.1 for CI builds
- (_) chore(doc): removed the beta statement in the info text [skip ci]
- (_) chore(release): 1.1.1 hotfix version bump [skip ci]
- (_) fix: publication ZIP is deallocated (filesystem handle freed) when last reader window closes (PR #885 Fixes #884)
- (_) chore(ci): version bump 1.1.1-alpha.1
Developer Notes:
- The standard-changelog utility (
npx standard-changelog --first-release
) somehow only generates a limited number of commits, so we use a one-liner command line / shell script instead: git --no-pager log --decorate=short --pretty=oneline v1.1.0...v1.2.0 | cut -d " " -f 1- | sed -En '/^([0-9a-zA-Z]+)[[:space:]]([^:]+):(.+)$/!p;s//\1 __\2:__\3/p' | sed -En 's/^(.+)$/* \1/p' | sed -En '/PR[[:space:]]*#([0-9]+)/!p;s//PR [#\1](https:\/\/github.com\/readium\/readium-desktop\/pull\/\1)/gp' | sed -En '/\(#([0-9]+)/!p;s//(PR [#\1](https:\/\/github.com\/readium\/readium-desktop\/pull\/\1)/gp' | sed -En '/(Fixes|See|Fix|Fixed)[[:space:]]*#([0-9]+)/!p;s//\1 [#\2](https:\/\/github.com\/readium\/readium-desktop\/issues\/\2)/gp' | sed -En '/^.[[:space:]]([0-9a-zA-Z]+)[[:space:]]/!p;s//* [(_)](https:\/\/github.com\/readium\/readium-desktop\/commit\/\1) /p' | sed -En '/[[:space:]]#([0-9]+)/!p;s// [#\1](https:\/\/github.com\/readium\/readium-desktop\/issues\/\1)/gp'
- ...append
| pbcopy
on MacOS to copy the result into the clipboard. - ...append
| wc -l
to verify that the result actually matches the number of Git commits.