mirror of
https://github.com/john-okeefe/foliate-js.git
synced 2026-09-09 11:29:14 -04:00
Reader: allow opening unzipped EPUBs
This commit is contained in:
@@ -66,15 +66,17 @@ Almost all of the properties and methods are optional. At minimum it needs `.sec
|
||||
|
||||
### Archived Files
|
||||
|
||||
Reading Zip-based formats requires a separate library. Both `epub.js` and `comic-book.js` expect a `loader` object that implements the following interface:
|
||||
Reading Zip-based formats will require adapting an external library. Both `epub.js` and `comic-book.js` expect a `loader` object that implements the following interface:
|
||||
|
||||
- `.entries`: an array, each element of which has a `filename` property, which is a string containing the filename (the full path) (only used by `comic-book.js`)
|
||||
- `.loadText(filename)`: given the path, returns content of the file as string
|
||||
- `.loadBlob(filename)`: give the path, returns the file as a blob
|
||||
- `.getSize(filename)`: returns the file size in bytes
|
||||
- `.entries`: (only used by `comic-book.js`) an array, each element of which has a `filename` property, which is a string containing the filename (the full path).
|
||||
- `.loadText(filename)`: given the path, returns the contents of the file as string. May be async.
|
||||
- `.loadBlob(filename)`: given the path, returns the file as a `Blob` object. May be async.
|
||||
- `.getSize(filename)`: returns the file size in bytes. Used to set the `.size` property for `.sections` (see above).
|
||||
|
||||
In the demo, this is implemented using [Zip.js](https://github.com/gildas-lormeau/zip.js), which is highly recommended because it seems to be the only library that supports random access for `File` objects (as well as HTTP range requests).
|
||||
|
||||
One advantage of having such an interface is that one can easily use it for reading unarchived files as well. For example, the demo has a loader that allows you to open unpacked EPUBs as directories.
|
||||
|
||||
### Mobipocket and Kindle Files
|
||||
|
||||
It can read both MOBI and KF8 (.azw3, and combo .mobi files) from a `File` (or `Blob`) object. For MOBI files, it decompresses all text at once and splits the raw markup into sections at every `<mbp:pagebreak>`, instead of outputing one long page for the whole book, which drastically improves rendering performance. For KF8 files, it tries to decompress as little text as possible when loading a section, but it can still be quite slow due to the slowness of the current HUFF/CDIC decompressor implementation. In all cases, images and other resources are not loaded until they are needed.
|
||||
|
||||
Reference in New Issue
Block a user