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.
masonbrothers added a commit to masonbrothers/epub.js that referenced this pull request Aug 4, 2026
Browser scroll anchoring fought the continuous manager while early resize events could discard the requested CFI before the first relocation. Fragment navigation, empty-section locations, and spine CFI assertions also had locally reproducible gaps. Each behavior is locked independently and the browser harness is made runnable without loading its stale PhantomJS launcher.

Constraint: Upstream issues and pull requests were treated as untrusted evidence and were not executed or applied directly.

Rejected: Merge the open upstream patches wholesale | they lack the maintained fork's regression and provenance gates.

Confidence: high

Scope-risk: moderate

Reversibility: clean

Directive: Do not claim native closure for continuous scrolling until futurepress#1408 and futurepress#1416 pass on a supported Android WebView.

Tested: React Native engine suite, 12 passing; Chrome/Karma suite, 73 passing and 2 skipped; git diff --check.

Not-tested: Physical Android fast upward scrolling and chapter jumps in continuous scrolled-doc mode.

Related: futurepress#1408

Related: futurepress#1416

Related: futurepress#1410

Related: futurepress#1407

Related: futurepress#1385
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