Commit Graph
100 Commits
Author SHA1 Message Date
John Factotum 052123beaf Add an EventTarget for transforming the book
And use it to do paginator-specific CSS replacements.

And use it to catch loading errors in reader.js.

Fixes #14
Closes #18
2025-03-29 15:09:23 +08:00
John Factotum d4696cea4b FB2: only check <binary>s when getting data
Fixes https://github.com/johnfactotum/foliate/issues/1492
2025-03-12 17:28:30 +08:00
John Factotum 34b9079a1b Fix comparing CFIs with different number of !s
Fixes #45
2024-12-21 04:56:43 +08:00
John Factotum 63a5dbf3e3 Don't scroll to anchor if caret's moved by pointer
In Safari, clicking on links triggers `selectionchange`. Since we do not
move the caret when flipping through pages, when you have flipped to the
next or previous pages and click on any link, it would take you back to
the caret instead of activating the link.

Note that the bug occurs in Safari 17 but not in WebKitGTK 2.46.

Not sure if there's a way to fix this and still retain the "set anchor
to caret on click" behavior. But I guess this behavior isn't really that
essential, anyway. So removing it for now.

Fixes #44
2024-12-12 09:35:33 +08:00
John Factotum cc2882ff39 Update README.md
Reflect the changes after 022ea7da87, and
other clarifications.
2024-12-02 18:39:45 +08:00
John Factotum 2e30f3db35 Footnotes: improve superscript detection 2024-12-02 17:57:01 +08:00
John Factotum 6f8eb1b85b Fix missing trailing comma 2024-12-02 09:54:55 +08:00
John Factotum 936c4f78e5 FB2: fix tables
Fixes https://github.com/johnfactotum/foliate/issues/1445
2024-12-02 09:47:58 +08:00
John Factotum b5ae4c22c1 CBZ: remove body margin
Fixes https://github.com/johnfactotum/foliate/issues/1421
2024-11-04 05:37:40 +08:00
John Factotum 24187b79f9 EPUB: fix opf:file-as
Fixes #39
2024-11-03 11:19:14 +08:00
John Factotum 519c0329b2 PDF: improve metadata 2024-10-18 13:42:49 +08:00
John Factotum 022ea7da87 Make <foliate-view> handle opening files directly 2024-10-12 10:48:51 +08:00
John Factotum 76c15569db Fix linguist-vendored attribute 2024-10-12 07:55:17 +08:00
John Factotum ae61c5e85f Make zip.js, fflate, and PDF.js dev dependencies
Previously, zip.js and fflate were built from the main Foliate repo.
And PDF.js files were copied manually. Now they all build here.

Unfortunately, two CSS files still need to be copied manually.
2024-10-12 07:44:33 +08:00
John Factotum b82ec0b294 FXL: add zoom setting
The value of the `zoom` attribute can be either `"fit-page"` (default),
`"fit-width"`, or a number.
2024-10-11 06:41:32 +08:00
John Factotum 7cbc36b489 Media Overlay: fix skipping
- Fix not seeking when skipping to another section when paused
- Fix not playing when skipping when not paused in WebKit
2024-10-07 11:00:57 +08:00
John Factotum fa85f135df EPUB: fix metadata 2024-10-06 11:29:32 +08:00
John Factotum 2e8b4fab0d OPDS: improve metadata 2024-10-06 10:16:46 +08:00
John Factotum e384aaf6dd Media Overlay: add stop() method
And don't remove highlight when pausing
2024-09-30 19:31:14 +08:00
John Factotum bf9adef636 Paginator: react to selection only on input 2024-09-30 19:00:11 +08:00
John Factotum 916dfb13ac View: don't destroy book on close
The book object is not created by the view class so it has no business
destroying it.

Fix bug caused by 1e952102bd where closing
the footnote view destroys the book, when it should not be destroyed,
being still displayed by another view
2024-09-30 18:50:07 +08:00
John Factotum 4cd2ca2eb3 PDF: fix comment 2024-09-28 19:32:14 +08:00
John Factotum 3409674e66 PDF: set isEvalSupported to false
`eval()` would be blocked by CSP and thus not supported
2024-09-28 19:17:12 +08:00
John Factotum 45d67a0db3 PDF: add CMaps and fonts 2024-09-28 17:41:38 +08:00
John Factotum be76724699 PDF: fix text selection 2024-09-28 17:38:59 +08:00
John Factotum ffb4f7b74e Create FUNDING.yml 2024-09-28 06:39:01 +00:00
John Factotum 693341f008 PDF: fix links 2024-09-28 14:29:47 +08:00
John Factotum 1e952102bd PDF: rerender when scale changes
The fixed-layout renderer now accepts an object for the return value of
`load()` (on the `book.sections` items). If it's an object, the `src`
is the URL of the section, and `onZoom`, if present, will be called
when the viewport is zoomed. With this you can scale the page yourself
rather than relying on the renderer's own scaling with CSS transform.

Also upgraded to PDF.js 4.6.82. And now internal links are broken...
Don't know how to fix that yet.
2024-09-28 12:12:59 +08:00
John Factotum ba403301a2 View: add ability to automatically hide cursor
Controlled by the boolean attribute `autohide-cursor`
2024-09-27 10:24:45 +08:00
John Factotum f3afcabd96 Media Overlay: support playback-active-class 2024-09-26 13:23:40 +08:00
John Factotum 357c129b5d Media Overlay: don't seek in canplaythrough
So this is what was causing the `canplaythrough` loop in Chromium and
Firefox.
2024-09-26 12:56:09 +08:00
John Factotum 22189f184e EPUB: fix media overlay playback
For some reason `canplaythrough` is firing more than once
2024-09-26 12:37:06 +08:00
John Factotum e94b85ce09 FB2: don't throw when image has no xlink:href
Fixes #35
2024-09-25 23:15:02 +08:00
John Factotum dcd4ff403e Paginator: fix scrolling to collapsed ranges that contain elements 2024-09-25 22:41:20 +08:00
John Factotum 02a24ea25c Grammar 2024-09-25 22:33:02 +08:00
John Factotum 59a5aa22a0 Paginator: respond to selection change
The view follows caret when using caret browsing (F7). Also allows
selecting across pages. And if you click on or select some text and
resize the window, the caret/selection always stays visible.

Some quirks regarding caret browsing:
- In Chromium, in paginated mode, it scrolls when changing selection
  (https://issues.chromium.org/issues/40889650)
- In WebKitGTK, in scrolled mode, the view doesn't follow the caret
  (which would be a WebKit bug)
2024-09-24 11:54:47 +08:00
John Factotum 329e22227a Paginator: fix offset
What's `margin` doing here?! It's like this since the first commit, but
it makes no sense... I think I added it incorrectly, being misled by
the getBoundingClientRect bug in Firefox...
2024-09-24 11:36:43 +08:00
John Factotum 59bb647057 Paginator: fix visible range in Firefox 2024-09-24 11:34:57 +08:00
John Factotum 4ef87c2ca7 Paginator: fix caret position when navigating
The effect of this is more obvious if you enable caret browsing (F7 in
all browsers). Previously, if you go to a fragment, the caret isn't
moved. Now it works as expected.
2024-09-23 20:33:46 +08:00
John Factotum b8a0d11910 Paginator: fix changing background in Chromium 2024-09-23 16:48:11 +08:00
John Factotum 541bc07b6f EPUB: redo metadata parsing
- Support the `prefix` attribute (for the `property` attr on `<meta>`)
- Localized titles, names (including `sortAs`)
- `belongsTo`, including `calibre:series`
- `altIdentifier`, converted to URN where possible
- Remove `producer`. It's now `contributor` with `role: 'bkp'`.

NOTE: this is a breaking change if you assumed that `title` will always
be a string, `author` will always be an array, etc.
2024-09-18 11:28:08 +08:00
John Factotum e6937eed15 Paginator: fix focus lost when loading new section
Also add method for setting focus on the content window
2024-09-15 13:13:44 +08:00
John Factotum c17b542b5c Paginator: needn't fix tabbing in scrolled mode 2024-09-14 23:18:27 +08:00
John Factotum 3b96ddf3e6 Paginator: fix scroll offset when tabbing 2024-09-14 23:14:04 +08:00
John Factotum b5d0453004 FXL: ignore linear & default to odd pages right
This matches the behavior of other reading systems. See
https://github.com/johnfactotum/foliate/issues/1318#issuecomment-2349375230
2024-09-14 01:21:54 +08:00
John Factotum 327031aca1 Paginator: add scroll event
Unlike `relocate`, which is debounced, a scroll event is useful when you
want to do stuff as soon as it scrolls.
2024-09-12 05:30:58 +08:00
John Factotum 3658b19a86 Quote Image: fix overflow
Note: simply setting `display: none` works in Firefox, but not in WebKit
Chromium.
2024-09-12 05:25:42 +08:00
John Factotum 0b9fac8ff3 Add module for generating quote images 2024-09-11 14:12:27 +08:00
John Factotum ffceb8a4aa Reader: update vendored libraries
Note: these are built from running `npm run build` from the main repo
https://github.com/johnfactotum/foliate
2024-09-11 13:50:39 +08:00
John Factotum 9ff893f3e7 Treat XHTML without xmlns as HTML
The XHTML 1.1 spec says

    The start tag of the root element of the document MUST explicitly
    contain an xmlns declaration for the XHTML namespace

There doesn't seem to be such a requirement in the WHATWG spec. But at
any rate browsers won't render it properly without the XHTML namespace.
2024-07-27 09:46:04 +08:00
John Factotum 660f6bbf1e KF8: fix contributor not exposed in metadata 2024-07-15 00:11:25 +08:00
John Factotum 5cda2125d8 MOBI6: empty string instead of undefined in TOC
Should fix https://github.com/johnfactotum/foliate/issues/1347
2024-07-15 00:08:50 +08:00
John Factotum 92964699af Paginator: make grid columns follow text block
This is a purely internal change, but it might make things easier in the
future if one wants to place stuff on the margins (e.g. to fade the edge
of the iframe when animating, or place prev/next buttons on the sides)
2024-06-22 18:34:19 +08:00
John Factotum 51c02bf594 EPUB: support display-options.xml 2024-06-22 01:42:47 +08:00
John Factotum 37626ba44a PDF: default to odd pages right 2024-06-22 01:40:58 +08:00
John Factotum 8c378d68fc README: fix warning formatting
Also add link to https://github.com/johnfactotum/epub-test
2024-05-17 05:10:55 +00:00
John Factotum 7372c658cf Fix package.json 2024-04-27 16:51:04 +08:00
John Factotum b7ff640943 Paginator: prevent spread in portrait
Or, for vertical writing, in landscape
2024-04-27 16:14:36 +08:00
John Factotum 5600b6c0dc Migrate to ESLint 9 and fix linting issues 2024-04-23 12:59:31 +08:00
John Factotum 04b8789267 Footnotes: reject when failing to show footnote
Now `handle()` could return either undefined or a promise, which you can
catch to handle the case where footnote fails to show.

Also improve footnote extraction.
2024-03-26 16:41:30 +08:00
John Factotum b45e08b10b Paginator: fix unnecessary wrapping in tables
Fixes https://github.com/johnfactotum/foliate/issues/1278
2024-03-25 05:52:49 +08:00
John Factotum b0d7ed481f Paginator: destroy view before removing it 2024-03-23 12:12:39 +08:00
John Factotum 18159a4d07 Don't check document's existence when expanding
`expand()` is only called after `render()`, which assumes that it exists
2024-03-21 20:22:31 +08:00
John Factotum b0a869b7ed Fix page end cut off when starting with page break
Fixes https://github.com/johnfactotum/foliate/issues/1179
2024-03-20 08:44:47 +08:00
John Factotum d9da576611 CBZ: add support for AVIF
Also throw when there are no images to show
2024-01-20 12:09:02 +08:00
John Factotum 35f749dd7c CBZ: add JPEG XL support 2023-12-30 12:21:08 +08:00
John Factotum 1ff2d530c4 Add support for dictd and StarDict dictionaries 2023-12-16 15:04:43 +08:00
John Factotum ad5ec4d0e9 Add OPDS 2023-12-16 14:45:05 +08:00
John Factotum 7d55731faf Footnotes: include links with <length> or <percentage> vertical-align 2023-12-04 03:50:15 +08:00
John Factotum 449842fd0a Fix argument 2023-12-04 03:48:41 +08:00
John Factotum cbe9e0009c Make animation setting an attribute instead of a property 2023-11-28 11:07:56 +08:00
John Factotum 2ea63929c7 Fix broken layout when book has !important styles 2023-11-15 04:33:02 +08:00
John Factotum f75fbba096 Foonotes: get note type
Also rename footnote.js -> footnotes.js
2023-11-12 21:42:21 +08:00
John Factotum 9e80194ba3 Add footnote handler 2023-11-05 23:09:44 +08:00
John Factotum 2a6012d749 Move section marks calculation to view
Also try to fix section mark epsilon
2023-11-02 16:10:40 +08:00
John Factotum 7dcbc6921a Update vendored libraries 2023-11-02 12:26:38 +08:00
John Factotum 4d7d010e29 MOBI6: build TOC from end-of-file TOC
Fixes #16
2023-10-29 19:04:52 +08:00
John Factotum 05329eba6e Fix viewer background not updated when page background changes
Bit of a band-aid fix. Ideally it should have some sort of
"ComputedStyleObserver" but this should fix the most common problem
for now.
2023-10-27 15:13:54 +08:00
John Factotum 0d09ca12a2 EPUB: fix subjects
Also update README
2023-10-24 17:25:46 +08:00
John Factotum 7c3b7447f6 EPUB: add narrator 2023-10-24 16:38:31 +08:00
John Factotum e91ff78534 Fix quotes 2023-10-24 13:38:15 +08:00
John Factotum 6d55d3e6b1 Convert break-*: page to break-*: column
`break-*` is the newer standard that replaced the legacy `page-break-*`
properties.

Note that setting it to `always` or `all` does not work. There seems to
be no way of telling browsers to break in both paged media and multicol.
2023-10-24 13:29:36 +08:00
John Factotum 969f4c1850 EPUB: improve metadata 2023-10-24 13:14:40 +08:00
John Factotum 28873972ef Make highlight opacity and blend mode configurable 2023-10-13 17:42:04 +08:00
John Factotum d44e8d6d64 EPUB: ignore query strings when resolving URLs 2023-10-11 01:49:20 +08:00
John Factotum 96d51e654a Fix page list progress 2023-10-10 22:54:27 +08:00
John Factotum 4f321563c7 PDF: add annotation layer and handle links 2023-10-09 01:56:13 +08:00
John Factotum c401fa7ab4 CFI: wrap fake CFI 2023-10-08 23:22:33 +08:00
John Factotum a63a68eda0 Add PDF support 2023-10-08 21:27:06 +08:00
John Factotum bcfb942935 Fix module path 2023-10-08 20:44:32 +08:00
John Factotum 27a290ff59 Allow processing hrefs in TOC asynchronously 2023-10-08 20:42:47 +08:00
John Factotum 819106c71f FXL: fix getting viewport from SVGs 2023-10-08 20:40:16 +08:00
John Factotum 7a31359cd4 Media Overlay: add volume setting 2023-10-08 10:16:33 +08:00
John Factotum f0aa16113f EPUB: fix media: properties 2023-10-08 05:33:56 +08:00
John Factotum 08c2ba0b24 EPUB: add prev/next for media overlay playback 2023-10-07 01:37:30 +08:00
John Factotum 1ff15bdc26 EPUB: add support for media overlay playback 2023-10-06 01:23:44 +08:00
John Factotum 83cce01797 Make text walker a separate module 2023-10-01 18:19:13 +08:00
John Factotum ecefeb86e1 TTS: split document into ranges of block elements 2023-10-01 01:18:43 +08:00
John Factotum cea9375561 CFI: add ability to ignore nodes
Also test that comment nodes are ignore
2023-09-29 23:58:55 +08:00
John Factotum 87605c5235 TTS: add paused seeking 2023-09-28 23:42:33 +08:00