Skip to content

Ensure at least one location per section#1407

Open
overhacked wants to merge 1 commit into
futurepress:masterfrom
overhacked:ensure-location-per-node
Open

Ensure at least one location per section#1407
overhacked wants to merge 1 commit into
futurepress:masterfrom
overhacked:ensure-location-per-node

Conversation

@overhacked

Copy link
Copy Markdown

Previously, if a book had no text content in a section, then no location would be generated. In the pathological case of a book with no text content at all (pictures only), no locations are generated for the entire book. An example of this is the Open Circuits EPUB from No Starch Press (2023).

By moving the "empty node" detection after the creation of the initial opening range, the parsing code ensures that a minimum of one location is generated per section.

Previously, if a book had no text content in a section, then no location
would be generated. In the pathological case of a book with no text
content at all (pictures only), no locations are generated for the
entire book. An example of this is the Open Circuits EPUB from No Starch
Press (2023).

By moving the "empty node" detection after the creation of the initial
opening range, the parsing code ensures that a minimum of one location
is generated per section.

Signed-off-by: Ross Williams <ross@ross-williams.net>
@overhacked overhacked force-pushed the ensure-location-per-node branch from e52a375 to f916d38 Compare February 21, 2025 18:52
@overhacked

Copy link
Copy Markdown
Author

Hello! I was wondering if this might be able to be reviewed so I can nudge the maintainer of calibre-web to update their vendored version of epub.js. Thank you!

hiive pushed a commit to hiive/epub.js that referenced this pull request Apr 6, 2026
…urepress#1285, futurepress#1265, futurepress#1339, futurepress#1407

- futurepress#1410: Fix Navigation.get() ID lookup — strip # before tocById lookup
- futurepress#1393: Fix encoded URI substitution — try decodeURIComponent before regex
- futurepress#1285: Parse fallback attribute in manifest items (EPUB spec compliance)
- futurepress#1265: Treat page numbers as strings — fixes non-numeric page labels (Roman numerals)
- futurepress#1339: Fix TypeScript types — currentLocation() returns Location not DisplayedLocation
- futurepress#1407: Ensure at least one location per section — fixes picture-only EPUBs
williamchong added a commit to likecoin/epub.ts that referenced this pull request May 27, 2026
Image-only or whitespace-only sections previously produced zero
locations, skewing Locations.total and every progress percentage after
them. Create the opening range before skipping empty nodes so the
trailing range still emits one location.

Ports futurepress/epub.js#1407, minus its `range === undefined` guard:
that guard suppresses per-node re-anchoring, making a section's trailing
location span back from the previous node as a cross-node range. Keeping
`counter === 0` preserves correct anchoring; covered by a new regression
test.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant