@internetarchive/bookreader 5.0.0-11 → 5.0.0-110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BookReader/474.js +2 -0
- package/BookReader/474.js.map +1 -0
- package/BookReader/BookReader.css +604 -1239
- package/BookReader/BookReader.js +1 -1
- package/BookReader/BookReader.js.LICENSE.txt +20 -20
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/bergamot-translator-worker.js +2966 -0
- package/BookReader/bergamot-translator-worker.wasm +0 -0
- package/BookReader/hypothesis/LICENSE +50 -0
- package/BookReader/hypothesis/README.md +55 -0
- package/BookReader/hypothesis/build/boot.js +1 -0
- package/BookReader/hypothesis/build/manifest.json +20 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
- package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/highlights.css +2 -0
- package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
- package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
- package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
- package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
- package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
- package/BookReader/hypothesis/package.json +126 -0
- package/BookReader/ia-bookreader-bundle.js +1907 -0
- package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
- package/BookReader/ia-bookreader-bundle.js.map +1 -0
- package/BookReader/icons/1up.svg +1 -1
- package/BookReader/icons/2up.svg +1 -1
- package/BookReader/icons/advance.svg +1 -1
- package/BookReader/icons/chevron-right.svg +1 -1
- package/BookReader/icons/close-circle-dark.svg +1 -1
- package/BookReader/icons/close-circle.svg +1 -1
- package/BookReader/icons/fullscreen.svg +1 -1
- package/BookReader/icons/fullscreen_exit.svg +1 -1
- package/BookReader/icons/hamburger.svg +1 -1
- package/BookReader/icons/left-arrow.svg +1 -1
- package/BookReader/icons/magnify-minus.svg +1 -1
- package/BookReader/icons/magnify-plus.svg +1 -1
- package/BookReader/icons/magnify.svg +1 -1
- package/BookReader/icons/pause.svg +1 -1
- package/BookReader/icons/play.svg +1 -1
- package/BookReader/icons/playback-speed.svg +1 -1
- package/BookReader/icons/read-aloud.svg +1 -1
- package/BookReader/icons/review.svg +1 -1
- package/BookReader/icons/slider-toggle.svg +1 -0
- package/BookReader/icons/thumbnails.svg +1 -1
- package/BookReader/icons/voice.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -1
- package/BookReader/images/BRicons.svg +3 -3
- package/BookReader/images/books_graphic.svg +1 -1
- package/BookReader/images/hypothesis.ico +0 -0
- package/BookReader/images/icon_book.svg +1 -1
- package/BookReader/images/icon_bookmark.svg +1 -1
- package/BookReader/images/icon_experiment.svg +1 -0
- package/BookReader/images/icon_gear.svg +1 -1
- package/BookReader/images/icon_hamburger.svg +1 -1
- package/BookReader/images/icon_home.svg +1 -1
- package/BookReader/images/icon_info.svg +1 -1
- package/BookReader/images/icon_one_page.svg +1 -1
- package/BookReader/images/icon_pause.svg +1 -1
- package/BookReader/images/icon_play.svg +1 -1
- package/BookReader/images/icon_playback-rate.svg +1 -1
- package/BookReader/images/icon_search_button.svg +1 -1
- package/BookReader/images/icon_share.svg +1 -1
- package/BookReader/images/icon_skip-ahead.svg +1 -1
- package/BookReader/images/icon_skip-back.svg +1 -1
- package/BookReader/images/icon_speaker.svg +1 -1
- package/BookReader/images/icon_speaker_open.svg +1 -1
- package/BookReader/images/icon_thumbnails.svg +1 -1
- package/BookReader/images/icon_toc.svg +1 -1
- package/BookReader/images/icon_two_pages.svg +1 -1
- package/BookReader/images/marker_chap-off.svg +1 -1
- package/BookReader/images/marker_chap-on.svg +1 -1
- package/BookReader/images/marker_srch-on.svg +1 -1
- package/BookReader/images/translate.svg +1 -0
- package/BookReader/images/unviewable_page.png +0 -0
- package/BookReader/jquery-3.js +2 -0
- package/BookReader/jquery-3.js.LICENSE.txt +24 -0
- package/BookReader/plugins/plugin.archive_analytics.js +1 -1
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -1
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +22 -1
- package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.chapters.js.map +1 -1
- package/BookReader/plugins/plugin.experiments.js +3 -0
- package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.experiments.js.map +1 -0
- package/BookReader/plugins/plugin.iframe.js +1 -1
- package/BookReader/plugins/plugin.iframe.js.map +1 -1
- package/BookReader/plugins/plugin.iiif.js +2 -0
- package/BookReader/plugins/plugin.iiif.js.map +1 -0
- package/BookReader/plugins/plugin.resume.js +1 -1
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +2 -1
- package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +2 -1
- package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.translate.js +137 -0
- package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.translate.js.map +1 -0
- package/BookReader/plugins/plugin.tts.js +1 -1
- package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +1 -1
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
- package/BookReader/plugins/translator-worker.js +2 -0
- package/BookReader/plugins/translator-worker.js.map +1 -0
- package/BookReader/silence.mp3 +0 -0
- package/BookReader/translator-worker.js +475 -0
- package/BookReader/webcomponents-bundle.js +3 -0
- package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
- package/BookReader/webcomponents-bundle.js.map +1 -0
- package/README.md +14 -3
- package/jsconfig.json +19 -0
- package/package.json +92 -70
- package/src/BookReader/BookModel.js +92 -46
- package/src/BookReader/DragScrollable.js +233 -0
- package/src/BookReader/ImageCache.js +49 -16
- package/src/BookReader/Mode1Up.js +66 -365
- package/src/BookReader/Mode1UpLit.js +392 -0
- package/src/BookReader/Mode2Up.js +87 -1315
- package/src/BookReader/Mode2UpLit.js +788 -0
- package/src/BookReader/ModeAbstract.js +43 -0
- package/src/BookReader/ModeCoordinateSpace.js +29 -0
- package/src/BookReader/ModeSmoothZoom.js +312 -0
- package/src/BookReader/ModeThumb.js +29 -15
- package/src/BookReader/Navbar/Navbar.js +201 -76
- package/src/BookReader/PageContainer.js +120 -23
- package/src/BookReader/ReduceSet.js +2 -2
- package/src/BookReader/Toolbar/Toolbar.js +18 -40
- package/src/BookReader/events.js +3 -3
- package/src/BookReader/options.js +94 -17
- package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/src/BookReader/utils/ScrollClassAdder.js +31 -0
- package/src/BookReader/utils/SelectionObserver.js +45 -0
- package/src/BookReader/utils/classes.js +1 -1
- package/src/BookReader/utils.js +136 -12
- package/src/BookReader.js +678 -1226
- package/src/BookReaderPlugin.js +52 -0
- package/src/assets/icons/magnify-minus.svg +3 -7
- package/src/assets/icons/magnify-plus.svg +3 -7
- package/src/assets/icons/slider-toggle.svg +1 -0
- package/src/assets/icons/voice.svg +1 -0
- package/src/assets/images/hypothesis.ico +0 -0
- package/src/assets/images/icon_experiment.svg +1 -0
- package/src/assets/images/translate.svg +1 -0
- package/src/assets/images/unviewable_page.png +0 -0
- package/src/assets/silence.mp3 +0 -0
- package/src/css/BookReader.scss +1 -5
- package/src/css/_BRBookmarks.scss +1 -1
- package/src/css/_BRComponent.scss +1 -1
- package/src/css/_BRicon.scss +8 -2
- package/src/css/_BRmain.scss +16 -3
- package/src/css/_BRnav.scss +74 -70
- package/src/css/_BRpages.scss +171 -42
- package/src/css/_BRsearch.scss +69 -30
- package/src/css/_BRtoolbar.scss +5 -5
- package/src/css/_TextSelection.scss +129 -24
- package/src/css/_colorbox.scss +2 -2
- package/src/css/_controls.scss +24 -7
- package/src/css/_icons.scss +8 -1
- package/src/{BookNavigator/assets → css}/button-base.js +2 -2
- package/src/css/icon_checkmark.js +9 -0
- package/src/css/sharedStyles.js +15 -0
- package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
- package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +25 -5
- package/src/ia-bookreader/ia-bookreader.js +666 -0
- package/src/ia-bookreader/sharing.js +27 -0
- package/src/ia-bookreader/viewable-files.js +98 -0
- package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
- package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
- package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
- package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
- package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +43 -31
- package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
- package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
- package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
- package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
- package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
- package/src/plugins/plugin.archive_analytics.js +84 -78
- package/src/plugins/plugin.autoplay.js +99 -104
- package/src/plugins/plugin.chapters.js +314 -205
- package/src/plugins/plugin.experiments.js +321 -0
- package/src/plugins/plugin.iframe.js +1 -1
- package/src/plugins/plugin.iiif.js +141 -0
- package/src/plugins/plugin.resume.js +54 -51
- package/src/plugins/plugin.text_selection.js +522 -219
- package/src/plugins/plugin.vendor-fullscreen.js +5 -5
- package/src/plugins/search/plugin.search.js +374 -392
- package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
- package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
- package/src/plugins/search/utils.js +50 -0
- package/src/plugins/search/view.js +50 -68
- package/src/plugins/translate/TranslationManager.js +164 -0
- package/src/plugins/translate/plugin.translate.js +512 -0
- package/src/plugins/tts/AbstractTTSEngine.js +78 -49
- package/src/plugins/tts/FestivalTTSEngine.js +20 -30
- package/src/plugins/tts/PageChunk.js +33 -21
- package/src/plugins/tts/PageChunkIterator.js +11 -17
- package/src/plugins/tts/WebTTSEngine.js +131 -91
- package/src/plugins/tts/plugin.tts.js +345 -350
- package/src/plugins/tts/utils.js +77 -49
- package/src/plugins/url/UrlPlugin.js +191 -0
- package/src/plugins/{plugin.url.js → url/plugin.url.js} +44 -15
- package/src/util/TextSelectionManager.js +282 -0
- package/src/util/browserSniffing.js +33 -1
- package/src/util/cache.js +20 -0
- package/src/util/docCookies.js +21 -2
- package/src/util/lit.js +15 -0
- package/src/util/strings.js +1 -0
- package/.babelrc +0 -12
- package/.dependabot/config.yml +0 -6
- package/.eslintrc.js +0 -50
- package/.gitattributes +0 -2
- package/.github/ISSUE_TEMPLATE/bug.md +0 -32
- package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
- package/.github/workflows/node.js.yml +0 -37
- package/.github/workflows/npm-publish.yml +0 -47
- package/.testcaferc.json +0 -5
- package/BookReader/bookreader-component-bundle.js +0 -1450
- package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
- package/BookReader/bookreader-component-bundle.js.map +0 -1
- package/BookReader/jquery-1.10.1.js +0 -2
- package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
- package/BookReader/plugins/plugin.menu_toggle.js +0 -2
- package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
- package/BookReader/plugins/plugin.mobile_nav.js +0 -2
- package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
- package/BookReaderDemo/BookReaderDemo.css +0 -41
- package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
- package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
- package/BookReaderDemo/BookReaderJSSimple.js +0 -55
- package/BookReaderDemo/IIIFBookReader.js +0 -207
- package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
- package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
- package/BookReaderDemo/demo-advanced.html +0 -33
- package/BookReaderDemo/demo-autoplay.html +0 -38
- package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
- package/BookReaderDemo/demo-embed.html +0 -26
- package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
- package/BookReaderDemo/demo-fullscreen.html +0 -33
- package/BookReaderDemo/demo-iiif.html +0 -34
- package/BookReaderDemo/demo-iiif.js +0 -26
- package/BookReaderDemo/demo-internetarchive.html +0 -74
- package/BookReaderDemo/demo-multiple.html +0 -43
- package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
- package/BookReaderDemo/demo-preview-pages.html +0 -1092
- package/BookReaderDemo/demo-simple.html +0 -34
- package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
- package/BookReaderDemo/immersion-1up.html +0 -64
- package/BookReaderDemo/immersion-mode.html +0 -35
- package/BookReaderDemo/toggle_controls.html +0 -53
- package/BookReaderDemo/view_mode.html +0 -39
- package/BookReaderDemo/viewmode-cycle.html +0 -41
- package/CHANGELOG.md +0 -495
- package/CONTRIBUTING.md +0 -7
- package/codecov.yml +0 -17
- package/index.html +0 -31
- package/karma.conf.js +0 -23
- package/screenshot.png +0 -0
- package/scripts/postversion.js +0 -10
- package/scripts/preversion.js +0 -14
- package/scripts/version.js +0 -26
- package/src/BookNavigator/BookModel.js +0 -14
- package/src/BookNavigator/BookNavigator.js +0 -446
- package/src/BookNavigator/assets/book-loader.js +0 -27
- package/src/BookNavigator/assets/icon_checkmark.js +0 -6
- package/src/BookNavigator/assets/icon_close.js +0 -3
- package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
- package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
- package/src/BookNavigator/downloads/downloads-provider.js +0 -66
- package/src/BookNavigator/search/a-search-result.js +0 -55
- package/src/BookReader/DebugConsole.js +0 -54
- package/src/BookReaderComponent/BookReaderComponent.js +0 -112
- package/src/ItemNavigator/ItemNavigator.js +0 -376
- package/src/ItemNavigator/providers/sharing.js +0 -29
- package/src/css/_MobileNav.scss +0 -194
- package/src/dragscrollable-br.js +0 -261
- package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
- package/src/plugins/plugin.mobile_nav.js +0 -287
- package/tests/BookReader/BookModel.test.js +0 -312
- package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
- package/tests/BookReader/DebugConsole.test.js +0 -25
- package/tests/BookReader/ImageCache.test.js +0 -150
- package/tests/BookReader/Mode1Up.test.js +0 -164
- package/tests/BookReader/Mode2Up.test.js +0 -247
- package/tests/BookReader/Navbar/Navbar.test.js +0 -169
- package/tests/BookReader/PageContainer.test.js +0 -115
- package/tests/BookReader/ReduceSet.test.js +0 -38
- package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
- package/tests/BookReader/utils/classes.test.js +0 -88
- package/tests/BookReader/utils.test.js +0 -109
- package/tests/BookReader.options.test.js +0 -39
- package/tests/BookReader.test.js +0 -301
- package/tests/e2e/README.md +0 -75
- package/tests/e2e/autoplay.test.js +0 -13
- package/tests/e2e/base.test.js +0 -35
- package/tests/e2e/helpers/base.js +0 -263
- package/tests/e2e/helpers/debug.js +0 -13
- package/tests/e2e/helpers/desktopSearch.js +0 -72
- package/tests/e2e/helpers/mobileSearch.js +0 -85
- package/tests/e2e/helpers/mockSearch.js +0 -93
- package/tests/e2e/helpers/rightToLeft.js +0 -29
- package/tests/e2e/ia-production/ia-prod-base.js +0 -17
- package/tests/e2e/models/BookReader.js +0 -11
- package/tests/e2e/models/Navigation.js +0 -56
- package/tests/e2e/rightToLeft.test.js +0 -20
- package/tests/e2e/viewmode.test.js +0 -37
- package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
- package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
- package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
- package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
- package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
- package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
- package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
- package/tests/plugins/plugin.archive_analytics.test.js +0 -23
- package/tests/plugins/plugin.autoplay.test.js +0 -52
- package/tests/plugins/plugin.chapters.test.js +0 -130
- package/tests/plugins/plugin.iframe.test.js +0 -42
- package/tests/plugins/plugin.mobile_nav.test.js +0 -66
- package/tests/plugins/plugin.resume.test.js +0 -98
- package/tests/plugins/plugin.text_selection.test.js +0 -203
- package/tests/plugins/plugin.url.test.js +0 -129
- package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
- package/tests/plugins/search/plugin.search.test.js +0 -173
- package/tests/plugins/search/plugin.search.view.test.js +0 -106
- package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
- package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
- package/tests/plugins/tts/PageChunk.test.js +0 -57
- package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
- package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
- package/tests/plugins/tts/utils.test.js +0 -133
- package/tests/util/browserSniffing.test.js +0 -56
- package/tests/util/docCookies.test.js +0 -15
- package/tests/util/strings.test.js +0 -63
- package/tests/utils.js +0 -42
- package/webpack.config.js +0 -86
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
 [](https://codecov.io/gh/internetarchive/bookreader)
|
|
4
4
|
|
|
5
|
-
**Disclaimer: BookReader v5 is currently in beta. It
|
|
5
|
+
**Disclaimer: BookReader v5 is currently in beta. It is stable enough for production use and is actively deployed on archive.org. Future updates while in v5 beta may introduce breaking changes to public BookReader APIs, although these will be noted in the CHANGELOG.**
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
@@ -123,7 +123,7 @@ A peek in how to use/extend core functionality:
|
|
|
123
123
|
- plugin.url.js - automatically updates the browser url
|
|
124
124
|
- plugin.resume.js - uses cookies to remember the current page
|
|
125
125
|
- plugin.vendor-fullscreen.js - replaces fullscreen mode with vendor native fullscreen
|
|
126
|
-
- see plugin directory for current plugin files
|
|
126
|
+
- see [plugin directory for current plugin files](https://github.com/internetarchive/bookreader/tree/master/src/plugins)
|
|
127
127
|
|
|
128
128
|
### Embedding BookReader in an iFrame
|
|
129
129
|
|
|
@@ -147,7 +147,18 @@ The Fragment Change message is sent to the parent window when the embedded BookR
|
|
|
147
147
|
|
|
148
148
|
The source JavaScript is written in ES6 (located in the `src/js` directory) and in ES5 (located in `BookReader`). `npm run serve-dev` starts an auto-reloading dev server, that builds js/css that has been edited at `localhost:8000`.
|
|
149
149
|
|
|
150
|
-
|
|
150
|
+
### Developing icons
|
|
151
|
+
To see local icon package changes in bookreader, you'll need to install core-js into the icon package and link into bookreader.
|
|
152
|
+
|
|
153
|
+
Let's use `icon-share` as an example.
|
|
154
|
+
1. Confirm your icon package is working properly in the iaux-icons demo
|
|
155
|
+
2. Navigate to your icon package (`iaux-icons/packages/icon-share`) and run command: `npm install core-js`
|
|
156
|
+
- You shouldn't need to commit any of these core-js changes
|
|
157
|
+
3. From within your icon package directory run command: `npm link`
|
|
158
|
+
- You can use the command `npm ls -g` to confirm your local package now appears in the registry
|
|
159
|
+
4. Navigate to `/bookreader` and run command: `npm link @internetarchive/icon-share`
|
|
160
|
+
- You can use the command `npm ls |grep icon-share` to confirm icon-share is now a link to your local directory
|
|
161
|
+
5. You may now start a local server to see your changes by running command: `npm run serve-dev`
|
|
151
162
|
|
|
152
163
|
## Releases
|
|
153
164
|
|
package/jsconfig.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es6",
|
|
4
|
+
"moduleResolution": "node",
|
|
5
|
+
"experimentalDecorators": true,
|
|
6
|
+
"baseUrl": ".",
|
|
7
|
+
"paths": {
|
|
8
|
+
"@/*": ["./*"]
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"include": [
|
|
12
|
+
"src/**/*.js",
|
|
13
|
+
"tests/**/*.js",
|
|
14
|
+
],
|
|
15
|
+
"exclude": [
|
|
16
|
+
"node_modules",
|
|
17
|
+
"BookReader"
|
|
18
|
+
]
|
|
19
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@internetarchive/bookreader",
|
|
3
|
-
"version": "5.0.0-
|
|
3
|
+
"version": "5.0.0-110",
|
|
4
4
|
"description": "The Internet Archive BookReader.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"BookReader/",
|
|
8
|
+
"src/",
|
|
9
|
+
"jsconfig.json"
|
|
10
|
+
],
|
|
5
11
|
"repository": {
|
|
6
12
|
"type": "git",
|
|
7
13
|
"url": "git+https://github.com/internetarchive/bookreader.git"
|
|
@@ -9,7 +15,7 @@
|
|
|
9
15
|
"publishConfig": {
|
|
10
16
|
"access": "public"
|
|
11
17
|
},
|
|
12
|
-
"module": "src/
|
|
18
|
+
"module": "src/ia-bookreader/ia-bookreader.js",
|
|
13
19
|
"keywords": [
|
|
14
20
|
"online",
|
|
15
21
|
"bookreader",
|
|
@@ -25,92 +31,108 @@
|
|
|
25
31
|
"homepage": "https://github.com/internetarchive/bookreader#readme",
|
|
26
32
|
"private": false,
|
|
27
33
|
"dependencies": {
|
|
28
|
-
"@internetarchive/
|
|
29
|
-
"@internetarchive/ia-
|
|
30
|
-
"@internetarchive/ia-
|
|
31
|
-
"@internetarchive/
|
|
32
|
-
"@internetarchive/icon-
|
|
33
|
-
"@internetarchive/icon-
|
|
34
|
-
"@internetarchive/icon-edit-pencil": "1.1
|
|
35
|
-
"@internetarchive/icon-
|
|
36
|
-
"@internetarchive/icon-magnify-
|
|
37
|
-
"@internetarchive/icon-
|
|
38
|
-
"@internetarchive/
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"@open-wc/testing-karma": "^4.0.9",
|
|
47
|
-
"@types/jest": "26.0.23",
|
|
48
|
-
"babel-loader": "8.2.2",
|
|
49
|
-
"codecov": "3.8.1",
|
|
50
|
-
"concurrently": "6.0.2",
|
|
51
|
-
"core-js": "3.11.0",
|
|
52
|
-
"cpx2": "3.0.0",
|
|
53
|
-
"eslint": "7.25.0",
|
|
54
|
-
"eslint-plugin-testcafe": "0.2.1",
|
|
55
|
-
"http-server": "0.12.3",
|
|
56
|
-
"iso-language-codes": "1.0.8",
|
|
57
|
-
"jest": "26.6.3",
|
|
58
|
-
"jquery": "1.11.3",
|
|
34
|
+
"@internetarchive/bergamot-translator": "^0.4.9-ia.1",
|
|
35
|
+
"@internetarchive/ia-activity-indicator": "0.0.6",
|
|
36
|
+
"@internetarchive/ia-item-navigator": "2.2.2",
|
|
37
|
+
"@internetarchive/icon-bookmark": "^1.4.0",
|
|
38
|
+
"@internetarchive/icon-close": "1.4.0",
|
|
39
|
+
"@internetarchive/icon-dl": "^1.4.0",
|
|
40
|
+
"@internetarchive/icon-edit-pencil": "^1.4.1",
|
|
41
|
+
"@internetarchive/icon-ia-logo": "1.4.0",
|
|
42
|
+
"@internetarchive/icon-magnify-minus": "^1.4.0",
|
|
43
|
+
"@internetarchive/icon-magnify-plus": "^1.4.0",
|
|
44
|
+
"@internetarchive/icon-search": "^1.4.0",
|
|
45
|
+
"@internetarchive/icon-toc": "^1.4.0",
|
|
46
|
+
"@internetarchive/icon-visual-adjustment": "^1.4.0",
|
|
47
|
+
"@internetarchive/modal-manager": "2.0.5",
|
|
48
|
+
"@internetarchive/shared-resize-observer": "^0.2.0",
|
|
49
|
+
"interactjs": "^1.10.18",
|
|
50
|
+
"iso-language-codes": "2.0.0",
|
|
51
|
+
"jquery": "3.6.1",
|
|
59
52
|
"jquery-colorbox": "1.6.4",
|
|
60
53
|
"jquery-ui": "1.12.1",
|
|
61
54
|
"jquery-ui-touch-punch": "0.2.3",
|
|
62
55
|
"jquery.browser": "0.1.0",
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
56
|
+
"lit": "2.8.0",
|
|
57
|
+
"soundmanager2": "2.97.20170602"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@babel/core": "7.29.0",
|
|
61
|
+
"@babel/eslint-parser": "7.28.6",
|
|
62
|
+
"@babel/plugin-proposal-class-properties": "7.18.6",
|
|
63
|
+
"@babel/plugin-proposal-decorators": "7.29.0",
|
|
64
|
+
"@babel/preset-env": "7.29.2",
|
|
65
|
+
"@iiif/presentation-2": "^1.0.4",
|
|
66
|
+
"@iiif/presentation-3": "^2.1.3",
|
|
67
|
+
"@open-wc/testing-helpers": "3.0.1",
|
|
68
|
+
"@types/jest": "30.0.0",
|
|
69
|
+
"@webcomponents/webcomponentsjs": "^2.6.0",
|
|
70
|
+
"babel-loader": "10.1.1",
|
|
71
|
+
"concurrently": "9.0.1",
|
|
72
|
+
"core-js": "3.49.0",
|
|
73
|
+
"cpx2": "8.0.0",
|
|
74
|
+
"eslint": "7.32.0",
|
|
75
|
+
"eslint-plugin-no-jquery": "^2.7.0",
|
|
76
|
+
"eslint-plugin-testcafe": "0.2.1",
|
|
77
|
+
"http-server": "14.1.1",
|
|
78
|
+
"hypothesis": "^1.1627.0",
|
|
79
|
+
"jest": "30.3.0",
|
|
80
|
+
"jest-environment-jsdom": "30.3.0",
|
|
81
|
+
"live-server": "1.2.2",
|
|
82
|
+
"regenerator-runtime": "0.14.1",
|
|
83
|
+
"sass": "1.98.0",
|
|
84
|
+
"sinon": "21.0.3",
|
|
85
|
+
"svgo": "4.0.1",
|
|
86
|
+
"testcafe": "3.7.4",
|
|
87
|
+
"testcafe-browser-provider-browserstack": "1.15.2",
|
|
88
|
+
"webpack": "5.105.4",
|
|
89
|
+
"webpack-cli": "7.0.2"
|
|
75
90
|
},
|
|
76
91
|
"jest": {
|
|
92
|
+
"testEnvironment": "jsdom",
|
|
93
|
+
"transformIgnorePatterns": [
|
|
94
|
+
"node_modules/(?!(sinon|lit-html|lit-element|lit|@lit|@lit-labs|@internetarchive|@open-wc)/)"
|
|
95
|
+
],
|
|
96
|
+
"moduleNameMapper": {
|
|
97
|
+
"^@/(.*)$": "<rootDir>/$1"
|
|
98
|
+
},
|
|
77
99
|
"setupFiles": [
|
|
78
|
-
"./src/jquery-wrapper.js"
|
|
100
|
+
"./src/jquery-wrapper.js",
|
|
101
|
+
"./tests/jest/setup.js"
|
|
79
102
|
],
|
|
80
103
|
"roots": [
|
|
81
104
|
"<rootDir>/src/",
|
|
82
|
-
"<rootDir>/tests/"
|
|
83
|
-
]
|
|
84
|
-
"testPathIgnorePatterns": [
|
|
85
|
-
"<rootDir>/tests/e2e/",
|
|
86
|
-
"<rootDir>/tests/karma/"
|
|
87
|
-
],
|
|
88
|
-
"coverageDirectory": "<rootDir>/coverage-jest"
|
|
105
|
+
"<rootDir>/tests/jest/"
|
|
106
|
+
]
|
|
89
107
|
},
|
|
90
108
|
"scripts": {
|
|
91
|
-
"preversion": "
|
|
109
|
+
"preversion": "node scripts/preversion.js",
|
|
92
110
|
"version": "node scripts/version.js",
|
|
93
111
|
"postversion": "node scripts/postversion.js",
|
|
94
|
-
"build": "npm run clean &&
|
|
112
|
+
"build": "npm run clean && npx concurrently --group npm:build-js npm:build-css npm:build-assets npm:build-hypothesis npm:build-bergamot",
|
|
95
113
|
"build-assets": "npx cpx \"src/assets/**/*\" BookReader && npx svgo -f BookReader/icons && npx svgo -f BookReader/images",
|
|
96
114
|
"build-assets:watch": "npx cpx --watch --verbose \"src/assets/**/*\" BookReader",
|
|
115
|
+
"build-bergamot": "npx cpx \"node_modules/@internetarchive/bergamot-translator/worker/*\" BookReader/",
|
|
116
|
+
"build-bergamot:watch": "npx cpx --watch \"node_modules/@internetarchive/bergamot-translator/worker/*\" BookReader/",
|
|
117
|
+
"build-hypothesis": "npx cpx \"node_modules/hypothesis/**/*\" BookReader/hypothesis",
|
|
118
|
+
"build-hypothesis:watch": "npx cpx --watch --verbose \"node_modules/hypothesis/**/*\" BookReader/hypothesis",
|
|
97
119
|
"build-js": "npx webpack",
|
|
98
120
|
"build-js:watch": "npx webpack --mode=development --watch",
|
|
99
|
-
"build-css": "npx sass --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
|
|
100
|
-
"build-css:watch": "npx sass --watch --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
|
|
121
|
+
"build-css": "npx sass --silence-deprecation=import --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
|
|
122
|
+
"build-css:watch": "npx sass --silence-deprecation=import --watch --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
|
|
101
123
|
"clean": "rm -r BookReader/ || true",
|
|
102
|
-
"lint": "npx eslint src/ tests/ *.js",
|
|
103
|
-
"lint:fix": "npx eslint --fix src/ tests/ *.js",
|
|
104
|
-
"serve": "npx http-server . --port
|
|
105
|
-
"serve-live": "
|
|
106
|
-
"serve-dev": "npm run build-css && npx concurrently --kill-others npm:serve-live npm:build-*:watch",
|
|
107
|
-
"test": "
|
|
108
|
-
"test:
|
|
109
|
-
"test:e2e
|
|
110
|
-
"test
|
|
111
|
-
"test-
|
|
112
|
-
"test-
|
|
113
|
-
"
|
|
114
|
-
"
|
|
124
|
+
"lint": "npx eslint src/ tests/ *.js *.cjs",
|
|
125
|
+
"lint:fix": "npx eslint --fix src/ tests/ *.js *.cjs",
|
|
126
|
+
"serve": "npx http-server . --port=8000",
|
|
127
|
+
"serve-live": "node scripts/live-server.js",
|
|
128
|
+
"serve-dev": "env NODE_ENV='development' npm run build-css && env NODE_ENV='development' npx concurrently --kill-others npm:serve-live npm:build-*:watch",
|
|
129
|
+
"test": "npx jest --coverage --colors",
|
|
130
|
+
"test:watch": "npx jest --watch",
|
|
131
|
+
"test:e2e": "npm run build && npx testcafe",
|
|
132
|
+
"test:e2e:dev": "npx testcafe --live --dev",
|
|
133
|
+
"DOCS:update:test-deps": "If CI succeeds, these should be good to update",
|
|
134
|
+
"update:test-deps": "npm i @babel/eslint-parser@latest @open-wc/testing-helpers@latest @types/jest@latest eslint@7 eslint-plugin-testcafe@latest jest@latest jest-environment-jsdom@latest sinon@latest testcafe@latest",
|
|
135
|
+
"DOCS:update:build-deps": "These can cause strange changes, so do an npm run build + check file size (git diff --stat), and check the site is as expected",
|
|
136
|
+
"update:build-deps": "npm i @babel/core@latest @babel/preset-env@latest @babel/plugin-proposal-class-properties@latest @babel/plugin-proposal-decorators@latest babel-loader@latest core-js@latest regenerator-runtime@latest sass@latest svgo@latest webpack@latest webpack-cli@latest"
|
|
115
137
|
}
|
|
116
138
|
}
|
|
@@ -4,11 +4,6 @@ import { clamp } from './utils.js';
|
|
|
4
4
|
/** @typedef {import('./options.js').PageData} PageData */
|
|
5
5
|
/** @typedef {import('../BookReader.js').default} BookReader */
|
|
6
6
|
|
|
7
|
-
// URI to display when a page is not viewable.
|
|
8
|
-
// TODO Render configurable html for the user instead.
|
|
9
|
-
// FIXME Don't reference files on archive.org
|
|
10
|
-
const UNVIEWABLE_PAGE_URI = '/bookreader/static/preview-default.png';
|
|
11
|
-
|
|
12
7
|
/**
|
|
13
8
|
* Contains information about the Book/Document independent of the way it is
|
|
14
9
|
* being rendering. Nothing here should reference e.g. the mode, zoom, etc.
|
|
@@ -23,42 +18,15 @@ export class BookModel {
|
|
|
23
18
|
this.br = br;
|
|
24
19
|
this.reduceSet = br.reduceSet;
|
|
25
20
|
this.ppi = br.options?.ppi ?? DEFAULT_OPTIONS.ppi;
|
|
21
|
+
/** @type {'lr' | 'rl'} Page progression */
|
|
22
|
+
this.pageProgression = br.options?.pageProgression ?? DEFAULT_OPTIONS.pageProgression;
|
|
26
23
|
|
|
27
24
|
/** @type {{width: number, height: number}} memoize storage */
|
|
28
25
|
this._medianPageSize = null;
|
|
29
|
-
/** @deprecated @type {{width: number, height: number}} memoize storage */
|
|
30
|
-
this._medianPageSizePixels = null;
|
|
31
26
|
/** @type {[PageData[], number]} */
|
|
32
27
|
this._getDataFlattenedCached = null;
|
|
33
28
|
}
|
|
34
29
|
|
|
35
|
-
/**
|
|
36
|
-
* @deprecated Use getMedianPageSizeInches
|
|
37
|
-
* Memoized
|
|
38
|
-
* @return {{width: number, height: number}}
|
|
39
|
-
*/
|
|
40
|
-
getMedianPageSize() {
|
|
41
|
-
if (this._medianPageSizePixels) {
|
|
42
|
-
return this._medianPageSizePixels;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// A little expensive but we just do it once
|
|
46
|
-
const widths = [];
|
|
47
|
-
const heights = [];
|
|
48
|
-
for (let i = 0; i < this.getNumLeafs(); i++) {
|
|
49
|
-
widths.push(this.getPageWidth(i));
|
|
50
|
-
heights.push(this.getPageHeight(i));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
widths.sort();
|
|
54
|
-
heights.sort();
|
|
55
|
-
this._medianPageSizePixels = {
|
|
56
|
-
width: widths[Math.floor(widths.length / 2)],
|
|
57
|
-
height: heights[Math.floor(heights.length / 2)]
|
|
58
|
-
};
|
|
59
|
-
return this._medianPageSizePixels;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
30
|
/** Get median width/height of page in inches. Memoized for performance. */
|
|
63
31
|
getMedianPageSizeInches() {
|
|
64
32
|
if (this._medianPageSize) {
|
|
@@ -72,12 +40,12 @@ export class BookModel {
|
|
|
72
40
|
heights.push(page.heightInches);
|
|
73
41
|
}
|
|
74
42
|
|
|
75
|
-
widths.sort();
|
|
76
|
-
heights.sort();
|
|
43
|
+
widths.sort((a, b) => a - b);
|
|
44
|
+
heights.sort((a, b) => a - b);
|
|
77
45
|
|
|
78
46
|
this._medianPageSize = {
|
|
79
47
|
width: widths[Math.floor(widths.length / 2)],
|
|
80
|
-
height: heights[Math.floor(heights.length / 2)]
|
|
48
|
+
height: heights[Math.floor(heights.length / 2)],
|
|
81
49
|
};
|
|
82
50
|
return this._medianPageSize;
|
|
83
51
|
}
|
|
@@ -187,7 +155,17 @@ export class BookModel {
|
|
|
187
155
|
*/
|
|
188
156
|
// eslint-disable-next-line no-unused-vars
|
|
189
157
|
getPageURI(index, reduce, rotate) {
|
|
190
|
-
|
|
158
|
+
if (!this.getPageProp(index, 'viewable', true)) {
|
|
159
|
+
const uri = this.br.options.unviewablePageURI;
|
|
160
|
+
if (uri.startsWith('.')) {
|
|
161
|
+
// It's a relative path, so make it relative to the images path
|
|
162
|
+
return this.br.options.imagesBaseURL + uri;
|
|
163
|
+
} else {
|
|
164
|
+
return uri;
|
|
165
|
+
}
|
|
166
|
+
} else {
|
|
167
|
+
return this.getPageProp(index, 'uri');
|
|
168
|
+
}
|
|
191
169
|
}
|
|
192
170
|
|
|
193
171
|
/**
|
|
@@ -226,7 +204,7 @@ export class BookModel {
|
|
|
226
204
|
* @return {[PageIndex, PageIndex]} eg [0, 1]
|
|
227
205
|
*/
|
|
228
206
|
getSpreadIndices(pindex) {
|
|
229
|
-
if (this.
|
|
207
|
+
if (this.pageProgression == 'rl') {
|
|
230
208
|
return this.getPageSide(pindex) == 'R' ? [pindex + 1, pindex] : [pindex, pindex - 1];
|
|
231
209
|
} else {
|
|
232
210
|
return this.getPageSide(pindex) == 'L' ? [pindex, pindex + 1] : [pindex - 1, pindex];
|
|
@@ -296,6 +274,7 @@ export class BookModel {
|
|
|
296
274
|
* @param {number} [arg0.end] exclusive
|
|
297
275
|
* @param {boolean} [arg0.combineConsecutiveUnviewables] Yield only first unviewable
|
|
298
276
|
* of a chunk of unviewable pages instead of each page
|
|
277
|
+
* @return {Generator<PageModel>}
|
|
299
278
|
*/
|
|
300
279
|
* pagesIterator({ start = 0, end = Infinity, combineConsecutiveUnviewables = false } = {}) {
|
|
301
280
|
start = Math.max(0, start);
|
|
@@ -379,8 +358,9 @@ export class PageModel {
|
|
|
379
358
|
* @param {PageIndex} index
|
|
380
359
|
*/
|
|
381
360
|
constructor(book, index) {
|
|
382
|
-
//
|
|
383
|
-
|
|
361
|
+
// Values less than 10 cause the UI to not work correctly
|
|
362
|
+
const pagePPI = book._getDataProp(index, 'ppi', book.ppi);
|
|
363
|
+
this.ppi = Math.max(pagePPI < 10 ? book.ppi : pagePPI, 10);
|
|
384
364
|
this.book = book;
|
|
385
365
|
this.index = index;
|
|
386
366
|
this.width = book.getPageWidth(index);
|
|
@@ -437,6 +417,42 @@ export class PageModel {
|
|
|
437
417
|
return this.findNext();
|
|
438
418
|
}
|
|
439
419
|
|
|
420
|
+
/** @type {PageModel | null} */
|
|
421
|
+
get left() {
|
|
422
|
+
return this.book.pageProgression === 'lr' ? this.prev : this.next;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/** @type {PageModel | null} */
|
|
426
|
+
get right() {
|
|
427
|
+
return this.book.pageProgression === 'lr' ? this.next : this.prev;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* @type {{left: PageModel | null, right: PageModel | null}}
|
|
432
|
+
*/
|
|
433
|
+
get spread() {
|
|
434
|
+
return {
|
|
435
|
+
left: this.pageSide === 'L' ? this : this.left,
|
|
436
|
+
right: this.pageSide === 'R' ? this : this.right,
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* @param {number} pages
|
|
442
|
+
*/
|
|
443
|
+
goLeft(pages) {
|
|
444
|
+
const newIndex = this.book.pageProgression === 'lr' ? this.index - pages : this.index + pages;
|
|
445
|
+
return this.book.getPage(newIndex);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* @param {number} pages
|
|
450
|
+
*/
|
|
451
|
+
goRight(pages) {
|
|
452
|
+
const newIndex = this.book.pageProgression === 'lr' ? this.index + pages : this.index - pages;
|
|
453
|
+
return this.book.getPage(newIndex);
|
|
454
|
+
}
|
|
455
|
+
|
|
440
456
|
/**
|
|
441
457
|
* @param {number} reduce
|
|
442
458
|
* @param {number} rotate
|
|
@@ -445,6 +461,15 @@ export class PageModel {
|
|
|
445
461
|
return this.book.getPageURI(this.index, reduce, rotate);
|
|
446
462
|
}
|
|
447
463
|
|
|
464
|
+
/**
|
|
465
|
+
* Return the asserted page number for this page, or, if one is not
|
|
466
|
+
* present, the n-prefixed page index.
|
|
467
|
+
* @returns {PageNumString}
|
|
468
|
+
*/
|
|
469
|
+
getPageNum() {
|
|
470
|
+
return this.book.getPageNum(this.index);
|
|
471
|
+
}
|
|
472
|
+
|
|
448
473
|
/**
|
|
449
474
|
* Returns the srcset with correct URIs or void string if out of range
|
|
450
475
|
* @param {number} reduce
|
|
@@ -468,7 +493,7 @@ export class PageModel {
|
|
|
468
493
|
* @param {object} [arg0]
|
|
469
494
|
* @param {boolean} [arg0.combineConsecutiveUnviewables] Whether to only yield the first page
|
|
470
495
|
* of a series of unviewable pages instead of each page
|
|
471
|
-
* @return {PageModel|
|
|
496
|
+
* @return {PageModel|undefined}
|
|
472
497
|
*/
|
|
473
498
|
findNext({ combineConsecutiveUnviewables = false } = {}) {
|
|
474
499
|
return this.book
|
|
@@ -480,7 +505,7 @@ export class PageModel {
|
|
|
480
505
|
* @param {object} [arg0]
|
|
481
506
|
* @param {boolean} [arg0.combineConsecutiveUnviewables] Whether to only yield the first page
|
|
482
507
|
* of a series of unviewable pages instead of each page
|
|
483
|
-
* @return {PageModel|
|
|
508
|
+
* @return {PageModel|undefined}
|
|
484
509
|
*/
|
|
485
510
|
findPrev({ combineConsecutiveUnviewables = false } = {}) {
|
|
486
511
|
if (this.index == 0) return undefined;
|
|
@@ -498,17 +523,38 @@ export class PageModel {
|
|
|
498
523
|
return new PageModel(this.book, this.index - 1);
|
|
499
524
|
}
|
|
500
525
|
}
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* @param {object} [arg0]
|
|
529
|
+
* @param {boolean} [arg0.combineConsecutiveUnviewables] Whether to only yield the first page
|
|
530
|
+
* of a series of unviewable pages instead of each page
|
|
531
|
+
* @return {PageModel|undefined}
|
|
532
|
+
*/
|
|
533
|
+
findLeft({ combineConsecutiveUnviewables = false } = {}) {
|
|
534
|
+
return this.book.pageProgression === 'lr' ? this.findPrev({ combineConsecutiveUnviewables }) : this.findNext({ combineConsecutiveUnviewables });
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* @param {object} [arg0]
|
|
539
|
+
* @param {boolean} [arg0.combineConsecutiveUnviewables] Whether to only yield the first page
|
|
540
|
+
* of a series of unviewable pages instead of each page
|
|
541
|
+
* @return {PageModel|undefined}
|
|
542
|
+
*/
|
|
543
|
+
findRight({ combineConsecutiveUnviewables = false } = {}) {
|
|
544
|
+
return this.book.pageProgression === 'lr' ? this.findNext({ combineConsecutiveUnviewables }) : this.findPrev({ combineConsecutiveUnviewables });
|
|
545
|
+
}
|
|
501
546
|
}
|
|
502
547
|
|
|
503
548
|
// There are a few main ways we can reference a specific page in a book:
|
|
504
549
|
/**
|
|
505
550
|
* @typedef {string} PageNumString
|
|
506
|
-
*
|
|
507
|
-
*
|
|
551
|
+
* The way page numbers are usually displayed in the UI. Either
|
|
552
|
+
* an asserted page number if the book has one (e.g. '18', or 'A-1'),
|
|
553
|
+
* or the n-prefixed 0-based index (e.g. 'n7')
|
|
508
554
|
*/
|
|
509
555
|
/**
|
|
510
556
|
* @typedef {number} LeafNum
|
|
511
|
-
*
|
|
557
|
+
* Internal number to IA scans. Can be 0 or 1 indexed. Unclear it it's consecutive.
|
|
512
558
|
*/
|
|
513
559
|
/**
|
|
514
560
|
* @typedef {string} PageString
|