@internetarchive/bookreader 5.0.0-12-fixsorting-8 → 5.0.0-121
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 +670 -1190
- 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-template.js +1 -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 +199 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +811 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +437 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/styles/annotator.css +4 -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 +3 -0
- package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +14 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
- package/BookReader/hypothesis/build/styles/sidebar.css +4 -0
- package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css +4 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
- package/BookReader/hypothesis/package.json +126 -0
- package/BookReader/ia-bookreader.js +1886 -0
- package/BookReader/{BookReader.js.LICENSE.txt → ia-bookreader.js.LICENSE.txt} +26 -20
- package/BookReader/ia-bookreader.js.map +1 -0
- package/BookReader/icons/1up.svg +1 -12
- package/BookReader/icons/2up.svg +1 -15
- package/BookReader/icons/advance.svg +3 -26
- 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 -17
- package/BookReader/icons/fullscreen_exit.svg +1 -17
- package/BookReader/icons/hamburger.svg +1 -15
- package/BookReader/icons/left-arrow.svg +1 -12
- package/BookReader/icons/magnify-minus.svg +1 -16
- package/BookReader/icons/magnify-plus.svg +1 -17
- package/BookReader/icons/magnify.svg +1 -15
- package/BookReader/icons/pause.svg +1 -23
- package/BookReader/icons/play.svg +1 -22
- package/BookReader/icons/playback-speed.svg +1 -34
- package/BookReader/icons/read-aloud.svg +1 -22
- package/BookReader/icons/review.svg +3 -22
- package/BookReader/icons/slider-toggle.svg +1 -0
- package/BookReader/icons/thumbnails.svg +1 -17
- package/BookReader/icons/voice.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -22
- package/BookReader/images/BRicons.svg +5 -94
- package/BookReader/images/books_graphic.svg +1 -177
- package/BookReader/images/hypothesis.ico +0 -0
- package/BookReader/images/icon_book.svg +1 -12
- package/BookReader/images/icon_bookmark.svg +1 -12
- package/BookReader/images/icon_experiment.svg +1 -0
- package/BookReader/images/icon_gear.svg +1 -14
- package/BookReader/images/icon_hamburger.svg +1 -20
- package/BookReader/images/icon_home.svg +1 -21
- package/BookReader/images/icon_info.svg +1 -11
- package/BookReader/images/icon_one_page.svg +1 -8
- package/BookReader/images/icon_pause.svg +1 -1
- package/BookReader/images/icon_play.svg +1 -1
- package/BookReader/images/icon_playback-rate.svg +1 -15
- package/BookReader/images/icon_search_button.svg +1 -8
- package/BookReader/images/icon_share.svg +1 -9
- package/BookReader/images/icon_skip-ahead.svg +1 -6
- package/BookReader/images/icon_skip-back.svg +2 -13
- package/BookReader/images/icon_speaker.svg +1 -18
- package/BookReader/images/icon_speaker_open.svg +1 -10
- package/BookReader/images/icon_thumbnails.svg +1 -12
- package/BookReader/images/icon_toc.svg +1 -5
- package/BookReader/images/icon_two_pages.svg +1 -9
- package/BookReader/images/marker_chap-off.svg +1 -11
- package/BookReader/images/marker_chap-on.svg +1 -11
- package/BookReader/images/marker_srch-on.svg +1 -11
- 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 -172
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -165
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +19 -301
- 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 -74
- 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 -368
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +2 -1385
- 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 -1080
- 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 +3 -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 +2 -9193
- 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 -269
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
- 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 +17 -4
- package/dist/esm/ia-bookreader.js +3 -0
- package/dist/esm/ia-bookreader.js.LICENSE.txt +17 -0
- package/dist/esm/ia-bookreader.js.map +1 -0
- package/dist/esm/plugins/plugin.archive_analytics.js +2 -0
- package/dist/esm/plugins/plugin.archive_analytics.js.map +1 -0
- package/dist/esm/plugins/plugin.autoplay.js +2 -0
- package/dist/esm/plugins/plugin.autoplay.js.map +1 -0
- package/dist/esm/plugins/plugin.chapters.js +2 -0
- package/dist/esm/plugins/plugin.chapters.js.map +1 -0
- package/dist/esm/plugins/plugin.experiments.js +2 -0
- package/dist/esm/plugins/plugin.experiments.js.map +1 -0
- package/dist/esm/plugins/plugin.iframe.js +2 -0
- package/dist/esm/plugins/plugin.iframe.js.map +1 -0
- package/dist/esm/plugins/plugin.iiif.js +2 -0
- package/dist/esm/plugins/plugin.iiif.js.map +1 -0
- package/dist/esm/plugins/plugin.resume.js +2 -0
- package/dist/esm/plugins/plugin.resume.js.map +1 -0
- package/dist/esm/plugins/plugin.search.js +2 -0
- package/dist/esm/plugins/plugin.search.js.map +1 -0
- package/dist/esm/plugins/plugin.text_selection.js +2 -0
- package/dist/esm/plugins/plugin.text_selection.js.map +1 -0
- package/dist/esm/plugins/plugin.translate.js +2 -0
- package/dist/esm/plugins/plugin.translate.js.map +1 -0
- package/dist/esm/plugins/plugin.tts.js +2 -0
- package/dist/esm/plugins/plugin.tts.js.map +1 -0
- package/dist/esm/plugins/plugin.url.js +2 -0
- package/dist/esm/plugins/plugin.url.js.map +1 -0
- package/dist/esm/plugins/plugin.vendor-fullscreen.js +2 -0
- package/dist/esm/plugins/plugin.vendor-fullscreen.js.map +1 -0
- package/jsconfig.json +18 -0
- package/package.json +113 -71
- 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 +786 -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 +204 -84
- 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 +105 -18
- package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/src/BookReader/utils/ScrollClassAdder.js +31 -0
- package/src/BookReader/utils/SelectionObserver.js +72 -0
- package/src/BookReader/utils/classes.js +1 -1
- package/src/BookReader/utils.js +136 -12
- package/src/BookReader.js +732 -1231
- 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 +174 -42
- package/src/css/_BRsearch.scss +69 -30
- package/src/css/_BRtoolbar.scss +5 -5
- package/src/css/_TextSelection.scss +249 -25
- 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 +686 -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 +323 -205
- package/src/plugins/plugin.experiments.js +375 -0
- package/src/plugins/plugin.iframe.js +36 -37
- package/src/plugins/plugin.iiif.js +147 -0
- package/src/plugins/plugin.resume.js +54 -51
- package/src/plugins/plugin.text_selection.js +464 -219
- package/src/plugins/plugin.vendor-fullscreen.js +5 -5
- package/src/plugins/search/plugin.search.js +347 -397
- 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 +51 -69
- package/src/plugins/translate/TranslationManager.js +164 -0
- package/src/plugins/translate/plugin.translate.js +559 -0
- package/src/plugins/tts/AbstractTTSEngine.js +78 -49
- package/src/plugins/tts/FestivalTTSEngine.js +20 -30
- package/src/plugins/tts/PageChunk.js +117 -23
- package/src/plugins/tts/PageChunkIterator.js +11 -17
- package/src/plugins/tts/WebTTSEngine.js +132 -92
- package/src/plugins/tts/plugin.tts.js +341 -351
- package/src/plugins/tts/utils.js +76 -67
- package/src/plugins/url/UrlPlugin.js +213 -0
- package/src/plugins/{plugin.url.js → url/plugin.url.js} +54 -18
- package/src/util/TextSelectionManager.js +1471 -0
- package/src/util/browserSniffing.js +42 -1
- package/src/util/cache.js +20 -0
- package/src/util/docCookies.js +21 -2
- package/src/util/dom.js +88 -0
- package/src/util/generators.js +89 -0
- package/src/util/lit.js +15 -0
- package/src/util/strings.js +11 -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.js +0 -21613
- package/BookReader/BookReader.js.map +0 -1
- package/BookReader/bookreader-component-bundle.js +0 -14497
- 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 -108
- package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
- package/BookReader/plugins/plugin.menu_toggle.js +0 -369
- package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
- package/BookReader/plugins/plugin.mobile_nav.js +0 -335
- 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 -499
- 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 -459
- 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/assets/icon_sort_ascending.js +0 -5
- package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
- package/src/BookNavigator/assets/icon_sort_neutral.js +0 -5
- package/src/BookNavigator/assets/icon_volumes.js +0 -11
- 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/BookNavigator/volumes/volumes-provider.js +0 -83
- package/src/BookNavigator/volumes/volumes.js +0 -178
- 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 -33
- 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 -139
- 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/sharing/sharing-provider.test.js +0 -40
- package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
- package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +0 -141
- package/tests/karma/BookNavigator/volumes/volumes.test.js +0 -98
- 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
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[623];export const __webpack_esm_modules__={6869:(e,n,t)=>{t.d(n,{S:()=>i});class i{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},5473:(e,n,t)=>{t.d(n,{c:()=>r}),t(3792),t(7495),t(2953);var i=t(6869);function o(e,n,t){return(n=function(e){var n=function(e){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var t=n.call(e,"string");if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof n?n:n+""}(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}const a=window.BookReader;class r extends i.S{constructor(){super(...arguments),o(this,"options",{enabled:!0,debug:!1}),o(this,"_prevFragment",null)}init(){this.options.enabled&&this.br.bind(a.eventNames.fragmentChange,()=>this.sendFragmentChange())}sendFragmentChange(){if(!window.archive_analytics)return;const e=this._prevFragment,n=this.br.paramsFromCurrent(),t=this.br.fragmentFromParams(n);if(e!=t){var i;const e={bookreader:"user_changed_view",itemid:this.br.bookId,cache_bust:Math.random(),offsite:1,details:0};try{e.offsite=window.top.location.hostname.match(/\.archive.org$/)?0:1,e.details=!e.offsite&&window.top.location.pathname.match(/^\/details\//)?1:0}catch(e){}window.archive_analytics.send_ping(e,null,"augment_for_ao_site");const n=null!==(i=this.br.options.lendingInfo)&&void 0!==i&&i.loanId?{loanId:this.br.options.lendingInfo.loanId}:{};window.archive_analytics.send_event("BookReader","UserChangedView",window.location.pathname,n),this._prevFragment=t}}sendEvent(e,n,t,i){this.options.enabled&&(this.options.debug&&console.log("archiveAnalyticsSendEvent",arguments,window.archive_analytics),window.archive_analytics&&(i=i||{},"number"==typeof t&&(i.ev=t),window.archive_analytics.send_event(e,n,null,i)))}}null==a||a.registerPlugin("archiveAnalytics",r)}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});const n=e(5473).c;export{n as ArchiveAnalyticsPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.archive_analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.archive_analytics.js","mappings":"6GAMO,MAAMA,EAIXC,WAAAA,CAAYC,GAEVC,KAAKD,GAAKA,EAEVC,KAAKC,OACP,CAMAC,KAAAA,CAAMD,GACJD,KAAKC,QAAUE,OAAOC,OAAO,CAAC,EAAGJ,KAAKC,QAASA,EACjD,CAGAI,IAAAA,GAAQ,CAORC,uBAAAA,CAAwBC,GACxB,CAOAC,iBAAAA,CAAkBC,GAClB,CAGAC,uBAAAA,GAA2B,CAK3BC,YAAAA,CAAaC,GAAU,E,ieC/CzB,MAAMC,EAAmEC,OAAOD,WAGzE,MAAME,UAA+BlB,EAAAA,EAAiBC,WAAAA,GAAAkB,SAAAC,WAAAC,EAAAlB,KAAA,UACjD,CACRmB,SAAS,EAETC,OAAO,IAGTF,EAAAlB,KAAA,gBACgB,KAAI,CAGpBK,IAAAA,GACML,KAAKC,QAAQkB,SACfnB,KAAKD,GAAGsB,KAAKR,EAAWS,WAAWC,eAAgB,IAAMvB,KAAKwB,qBAElE,CAGAA,kBAAAA,GACE,IAAKV,OAAOW,kBACV,OAGF,MAAMC,EAAe1B,KAAK2B,cAEpBC,EAAS5B,KAAKD,GAAG8B,oBACjBC,EAAc9B,KAAKD,GAAGgC,mBAAmBH,GAE/C,GAAIF,GAAgBI,EAAa,KAAAE,EAC/B,MAAMC,EAAS,CACbC,WAAY,oBACZC,OAAQnC,KAAKD,GAAGqC,OAChBC,WAAYC,KAAKC,SAGnBN,QAAiB,EACjBA,QAAiB,GACjB,IACEA,EAAOO,QAAU1B,OAAO2B,IAAIC,SAASC,SAASC,MAAM,kBAChD,EACA,EACJX,EAAOY,SACJZ,EAAOO,SAAW1B,OAAO2B,IAAIC,SAASI,SAASF,MAAM,gBAClD,EACA,CACR,CAAE,MAAOG,GAAK,CAIdjC,OAAOW,kBAAkBuB,UAAUf,EAAQ,KAAM,uBAGjD,MAAMgB,EAAmD,QAA3BjB,EAAAhC,KAAKD,GAAGE,QAAQiD,mBAAW,IAAAlB,GAA3BA,EAA6BmB,OACvD,CAAEA,OAAQnD,KAAKD,GAAGE,QAAQiD,YAAYC,QACtC,CAAC,EACLrC,OAAOW,kBAAkB2B,WAAW,aAAc,kBAAmBtC,OAAO4B,SAASI,SAAUG,GAE/FjD,KAAK2B,cAAgBG,CACvB,CACF,CASAuB,SAAAA,CAAUC,EAAUC,EAAQC,EAAOP,GAC5BjD,KAAKC,QAAQkB,UAEdnB,KAAKC,QAAQmB,OACfqC,QAAQC,IAAI,4BAA6BzC,UAAWH,OAAOW,mBAGxDX,OAAOW,oBAEZwB,EAAwBA,GAAyB,CAAC,EAC5B,iBAAVO,IACVP,EAAsBU,GAAKH,GAE7B1C,OAAOW,kBAAkB2B,WAAWE,EAAUC,EAAQ,KAAMN,IAC9D,EAGFpC,SAAAA,EAAY+C,eAAe,mBAAoB7C,E","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.archive_analytics.js"],"sourcesContent":["// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","// @ts-check\nimport { BookReaderPlugin } from \"../BookReaderPlugin.js\";\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n\nexport class ArchiveAnalyticsPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** Provide a means of debugging, cause otherwise it's impossible to test locally */\n debug: false,\n }\n\n /** @type {string} */\n _prevFragment = null;\n\n /** @override */\n init() {\n if (this.options.enabled) {\n this.br.bind(BookReader.eventNames.fragmentChange, () => this.sendFragmentChange());\n }\n }\n\n /** @private */\n sendFragmentChange() {\n if (!window.archive_analytics) {\n return;\n }\n\n const prevFragment = this._prevFragment;\n\n const params = this.br.paramsFromCurrent();\n const newFragment = this.br.fragmentFromParams(params);\n\n if (prevFragment != newFragment) {\n const values = {\n bookreader: \"user_changed_view\",\n itemid: this.br.bookId,\n cache_bust: Math.random(),\n };\n // EEK! offsite embedding and /details/ page books look the same in analytics, otherwise!\n values.offsite = 1;\n values.details = 0;\n try {\n values.offsite = window.top.location.hostname.match(/\\.archive.org$/)\n ? 0\n : 1;\n values.details =\n !values.offsite && window.top.location.pathname.match(/^\\/details\\//)\n ? 1\n : 0;\n } catch (e) { }\n // avoids embed cross site exceptions -- but on (+) side, means it is and keeps marked offite!\n\n // Send bookreader ping\n window.archive_analytics.send_ping(values, null, \"augment_for_ao_site\");\n\n // Also send tracking event ping\n const additionalEventParams = this.br.options.lendingInfo?.loanId\n ? { loanId: this.br.options.lendingInfo.loanId }\n : {};\n window.archive_analytics.send_event('BookReader', 'UserChangedView', window.location.pathname, additionalEventParams);\n\n this._prevFragment = newFragment;\n }\n }\n\n /**\n * Sends a tracking \"Event\". See https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#events\n * @param {string} category\n * @param {string} action\n * @param {number} [value] (must be an int)\n * @param {Object} [additionalEventParams]\n */\n sendEvent(category, action, value, additionalEventParams) {\n if (!this.options.enabled) return;\n\n if (this.options.debug) {\n console.log(\"archiveAnalyticsSendEvent\", arguments, window.archive_analytics);\n }\n\n if (!window.archive_analytics) return;\n\n additionalEventParams = additionalEventParams || {};\n if (typeof (value) == 'number') {\n additionalEventParams.ev = value;\n }\n window.archive_analytics.send_event(category, action, null, additionalEventParams);\n }\n}\n\nBookReader?.registerPlugin('archiveAnalytics', ArchiveAnalyticsPlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","BookReader","window","ArchiveAnalyticsPlugin","super","arguments","_defineProperty","enabled","debug","bind","eventNames","fragmentChange","sendFragmentChange","archive_analytics","prevFragment","_prevFragment","params","paramsFromCurrent","newFragment","fragmentFromParams","_this$br$options$lend","values","bookreader","itemid","bookId","cache_bust","Math","random","offsite","top","location","hostname","match","details","pathname","e","send_ping","additionalEventParams","lendingInfo","loanId","send_event","sendEvent","category","action","value","console","log","ev","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[393];export const __webpack_esm_modules__={6869:(t,e,i)=>{i.d(e,{S:()=>s});class s{constructor(t){this.br=t,this.options}setup(t){this.options=Object.assign({},this.options,t)}init(){}_configurePageContainer(t){}_configureToolbar(t){}_bindNavigationHandlers(){}extendNavBar(t){}}},9423:(t,e,i)=>{i.d(e,{L:()=>p}),i(3792),i(7495),i(2953),i(8408);var s=i(5312),o=i(9880),r=i(6869);function n(t,e,i){return(e=function(t){var e=function(t){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}class p extends r.S{constructor(){super(...arguments),n(this,"options",{enabled:!0,flipSpeed:1500,flipDelay:5e3,urlParams:!0}),n(this,"timer",null)}init(){if(this.options.enabled&&(this.br.bind(s.q.stop,()=>this.stop()),this.options.urlParams)){const t=new URLSearchParams(window.location.search);t.get("flipSpeed")&&(this.options.flipSpeed=(0,o.Ve)(t.get("flipSpeed"))||this.options.flipSpeed),t.get("flipDelay")&&(this.options.flipDelay=(0,o.Ve)(t.get("flipDelay"))||this.options.flipDelay),"1"===t.get("autoflip")&&this.toggle()}}_bindNavigationHandlers(){if(!this.options.enabled)return;const t=this.br.$(".BRicon");t.filter(".play").on("click",()=>(this.toggle(),!1)),t.filter(".pause").on("click",()=>(this.toggle(),!1))}toggle(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(!this.options.enabled)return;Object.assign(this.options,t),this.br.trigger(s.q.stop);let e=!1;this.br.constMode2up!=this.br.mode&&(e=!0,this.br.switchMode(this.br.constMode2up)),null==this.timer?("rl"==this.br.pageProgression&&e||this.br.next({triggerStop:!1,flipSpeed:this.options.flipSpeed}),this.br.$(".play").hide(),this.br.$(".pause").show(),this.timer=setInterval(()=>{this.br.animating||(Math.max(this.br.twoPage.currentIndexL,this.br.twoPage.currentIndexR)>=this.br.book.getNumLeafs()-1?this.br.prev({triggerStop:!1,flipSpeed:this.options.flipSpeed}):this.br.next({triggerStop:!1,flipSpeed:this.options.flipSpeed}))},(0,o.Ve)(this.options.flipDelay))):this.stop()}stop(){this.options.enabled&&null!=this.timer&&(clearInterval(this.timer),this.br.$(".pause").hide(),this.br.$(".play").show(),this.timer=null)}}const l=window.BookReader;null==l||l.registerPlugin("autoplay",p)}};import{__webpack_require__ as t}from"../ia-bookreader.js";t.C({__webpack_esm_ids__,__webpack_esm_modules__});const e=t(9423).L;export{e as AutoplayPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.autoplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.autoplay.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.autoplay.js"],"sourcesContent":["// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","// @ts-check\nimport { EVENTS } from \"../BookReader/events.js\";\nimport { parseAnimationSpeed } from \"../BookReader/utils.js\";\nimport { BookReaderPlugin } from \"../BookReaderPlugin.js\";\n\n/**\n * Plugin which adds an autoplay feature. Useful for kiosk situations.\n */\nexport class AutoplayPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /**\n * @type {number | 'fast' | 'slow'}\n * How quickly the flip animation should run.\n **/\n flipSpeed: 1500,\n /** How long to pause on each page between flips */\n flipDelay: 5000,\n /** Allow controlling the autoflip/speed/delay from the url */\n urlParams: true,\n }\n\n timer = null;\n\n /** @override */\n init() {\n if (!this.options.enabled) return;\n\n this.br.bind(EVENTS.stop, () => this.stop());\n\n if (this.options.urlParams) {\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.get('flipSpeed')) {\n this.options.flipSpeed = parseAnimationSpeed(urlParams.get('flipSpeed')) || this.options.flipSpeed;\n }\n if (urlParams.get('flipDelay')) {\n this.options.flipDelay = parseAnimationSpeed(urlParams.get('flipDelay')) || this.options.flipDelay;\n }\n if (urlParams.get('autoflip') === '1') {\n this.toggle();\n }\n }\n }\n\n /** @override */\n _bindNavigationHandlers() {\n if (!this.options.enabled) return;\n\n const jIcons = this.br.$('.BRicon');\n\n jIcons.filter('.play').on('click', () => {\n this.toggle();\n return false;\n });\n\n jIcons.filter('.pause').on('click', () => {\n this.toggle();\n return false;\n });\n }\n\n /**\n * Starts autoplay mode\n * @param {object} overrides\n * @param {number} overrides.flipSpeed\n * @param {number} overrides.flipDelay\n */\n toggle(overrides = null) {\n if (!this.options.enabled) return;\n\n Object.assign(this.options, overrides);\n this.br.trigger(EVENTS.stop);\n\n let bComingFrom1up = false;\n if (this.br.constMode2up != this.br.mode) {\n bComingFrom1up = true;\n this.br.switchMode(this.br.constMode2up);\n }\n\n if (null == this.timer) {\n // $$$ Draw events currently cause layout problems when they occur during animation.\n // There is a specific problem when changing from 1-up immediately to autoplay in RTL so\n // we workaround for now by not triggering immediate animation in that case.\n // See https://bugs.launchpad.net/gnubook/+bug/328327\n if (('rl' == this.br.pageProgression) && bComingFrom1up) {\n // don't flip immediately -- wait until timer fires\n } else {\n // flip immediately\n this.br.next({ triggerStop: false, flipSpeed: this.options.flipSpeed });\n }\n\n this.br.$('.play').hide();\n this.br.$('.pause').show();\n this.timer = setInterval(() => {\n if (this.br.animating) return;\n\n if (Math.max(this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR) >= this.br.book.getNumLeafs() - 1) {\n this.br.prev({ triggerStop: false, flipSpeed: this.options.flipSpeed }); // $$$ really what we want?\n } else {\n this.br.next({ triggerStop: false, flipSpeed: this.options.flipSpeed });\n }\n }, parseAnimationSpeed(this.options.flipDelay));\n } else {\n this.stop();\n }\n }\n\n /**\n * Stop autoplay mode, allowing animations to finish\n */\n stop() {\n if (!this.options.enabled) return;\n\n if (null != this.timer) {\n clearInterval(this.timer);\n this.br.$('.pause').hide();\n this.br.$('.play').show();\n this.timer = null;\n }\n }\n}\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\nBookReader?.registerPlugin('autoplay', AutoplayPlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","AutoplayPlugin","super","arguments","_defineProperty","enabled","flipSpeed","flipDelay","urlParams","bind","EVENTS","stop","URLSearchParams","window","location","search","get","parseAnimationSpeed","toggle","jIcons","$","filter","on","overrides","length","undefined","trigger","bComingFrom1up","constMode2up","mode","switchMode","timer","pageProgression","next","triggerStop","hide","show","setInterval","animating","Math","max","twoPage","currentIndexL","currentIndexR","book","getNumLeafs","prev","clearInterval","BookReader","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"@internetarchive/icon-toc/icon-toc.js";export const __webpack_esm_ids__=[858];export const __webpack_esm_modules__={706:(e,t,r)=>{var n=r(350).PROPER,i=r(9039),o=r(7452);e.exports=function(e){return i(function(){return!!o[e]()||"
"!=="
"[e]()||n&&o[e].name!==e})}},3802:(e,t,r)=>{var n=r(9504),i=r(7750),o=r(655),s=r(7452),a=n("".replace),c=RegExp("^["+s+"]+"),l=RegExp("(^|[^"+s+"])["+s+"]+$"),d=function(e){return function(t){var r=o(i(t));return 1&e&&(r=a(r,c,"")),2&e&&(r=a(r,l,"$1")),r}};e.exports={start:d(1),end:d(2),Bq:d(3)}},7452:e=>{e.exports="\t\n\v\f\r \u2028\u2029\ufeff"},2762:(e,t,r)=>{var n=r(6518),i=r(3802).Bq;n({target:"String",proto:!0,forced:r(706)("trim")},{trim:function(){return i(this)}})},6869:(e,t,r)=>{r.d(t,{S:()=>n});class n{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},113:(e,t,r)=>{r.d(t,{F:()=>R,g:()=>O}),r(9463),r(3792),r(4490),r(3362),r(7495),r(2953),r(8408);var n,i,o,s,a,c,l=r(7597),d=r(6054),p=r(6248),u=r(6106),h=r(6869),f=r(8965),m=r(9880),y=r(3583),b=r(1669);function v(){v=function(){return e};var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(r){t.forEach(function(t){t.kind===r&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var r=e.prototype;["method","field"].forEach(function(n){t.forEach(function(t){var i=t.placement;if(t.kind===n&&("static"===i||"prototype"===i)){var o="static"===i?e:r;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var r=t.descriptor;if("field"===t.kind){var n=t.initializer;r={enumerable:r.enumerable,writable:r.writable,configurable:r.configurable,value:void 0===n?void 0:n.call(e)}}Object.defineProperty(e,t.key,r)},decorateClass:function(e,t){var r=[],n=[],i={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,i)},this),e.forEach(function(e){if(!w(e))return r.push(e);var t=this.decorateElement(e,i);r.push(t.element),r.push.apply(r,t.extras),n.push.apply(n,t.finishers)},this),!t)return{elements:r,finishers:n};var o=this.decorateConstructor(r,t);return n.push.apply(n,o.finishers),o.finishers=n,o},addElementPlacement:function(e,t,r){var n=t[e.placement];if(!r&&-1!==n.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");n.push(e.key)},decorateElement:function(e,t){for(var r=[],n=[],i=e.decorators,o=i.length-1;o>=0;o--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),c=this.toElementFinisherExtras((0,i[o])(a)||a);e=c.element,this.addElementPlacement(e,t),c.finisher&&n.push(c.finisher);var l=c.extras;if(l){for(var d=0;d<l.length;d++)this.addElementPlacement(l[d],t);r.push.apply(r,l)}}return{element:e,finishers:n,extras:r}},decorateConstructor:function(e,t){for(var r=[],n=t.length-1;n>=0;n--){var i=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[n])(i)||i);if(void 0!==o.finisher&&r.push(o.finisher),void 0!==o.elements){e=o.elements;for(var s=0;s<e.length-1;s++)for(var a=s+1;a<e.length;a++)if(e[s].key===e[a].key&&e[s].placement===e[a].placement)throw new TypeError("Duplicated element ("+e[s].key+")")}}return{elements:e,finishers:r}},fromElementDescriptor:function(e){var t={kind:e.kind,key:e.key,placement:e.placement,descriptor:e.descriptor};return Object.defineProperty(t,Symbol.toStringTag,{value:"Descriptor",configurable:!0}),"field"===e.kind&&(t.initializer=e.initializer),t},toElementDescriptors:function(e){if(void 0!==e)return(t=e,function(e){if(Array.isArray(e))return e}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return P(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?P(e,t):void 0}}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map(function(e){var t=this.toElementDescriptor(e);return this.disallowProperty(e,"finisher","An element descriptor"),this.disallowProperty(e,"extras","An element descriptor"),t},this);var t},toElementDescriptor:function(e){var t=e.kind+"";if("method"!==t&&"field"!==t)throw new TypeError('An element descriptor\'s .kind property must be either "method" or "field", but a decorator created an element descriptor with .kind "'+t+'"');var r=T(e.key),n=e.placement+"";if("static"!==n&&"prototype"!==n&&"own"!==n)throw new TypeError('An element descriptor\'s .placement property must be one of "static", "prototype" or "own", but a decorator created an element descriptor with .placement "'+n+'"');var i=e.descriptor;this.disallowProperty(e,"elements","An element descriptor");var o={kind:t,key:r,placement:n,descriptor:Object.assign({},i)};return"field"!==t?this.disallowProperty(e,"initializer","A method descriptor"):(this.disallowProperty(i,"get","The property descriptor of a field descriptor"),this.disallowProperty(i,"set","The property descriptor of a field descriptor"),this.disallowProperty(i,"value","The property descriptor of a field descriptor"),o.initializer=e.initializer),o},toElementFinisherExtras:function(e){return{element:this.toElementDescriptor(e),finisher:E(e,"finisher"),extras:this.toElementDescriptors(e.extras)}},fromClassDescriptor:function(e){var t={kind:"class",elements:e.map(this.fromElementDescriptor,this)};return Object.defineProperty(t,Symbol.toStringTag,{value:"Descriptor",configurable:!0}),t},toClassDescriptor:function(e){var t=e.kind+"";if("class"!==t)throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator created a class descriptor with .kind "'+t+'"');this.disallowProperty(e,"key","A class descriptor"),this.disallowProperty(e,"placement","A class descriptor"),this.disallowProperty(e,"descriptor","A class descriptor"),this.disallowProperty(e,"initializer","A class descriptor"),this.disallowProperty(e,"extras","A class descriptor");var r=E(e,"finisher");return{elements:this.toElementDescriptors(e.elements),finisher:r}},runClassFinishers:function(e,t){for(var r=0;r<t.length;r++){var n=(0,t[r])(e);if(void 0!==n){if("function"!=typeof n)throw new TypeError("Finishers must return a constructor.");e=n}}return e},disallowProperty:function(e,t,r){if(void 0!==e[t])throw new TypeError(r+" can't have a ."+t+" property.")}};return e}function g(e){var t,r=T(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var n={kind:"field"===e.kind?"field":"method",key:r,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(n.decorators=e.decorators),"field"===e.kind&&(n.initializer=e.value),n}function k(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function w(e){return e.decorators&&e.decorators.length}function _(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function E(e,t){var r=e[t];if(void 0!==r&&"function"!=typeof r)throw new TypeError("Expected '"+t+"' to be a function");return r}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function x(){return x="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=C(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(arguments.length<3?e:r):i.value}},x.apply(null,arguments)}function C(e){return C=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},C(e)}function I(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function j(e,t,r){return(t=T(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function T(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}const A=window.BookReader;class O extends h.S{constructor(){super(...arguments),j(this,"options",{enabled:!0,openLibraryHost:"https://openlibrary.org",openLibraryId:"",internetArchiveId:"",olHost:"https://openlibrary.org",bookId:"{{bookId}}"}),j(this,"_tocEntries",void 0),j(this,"_chaptersPanel",void 0)}setup(e){super.setup(e),this.options.internetArchiveId=this.options.internetArchiveId||this.options.bookId,this.options.openLibraryHost=this.options.openLibraryHost||this.options.olHost}async init(){var e;if(!this.options.enabled||"embed"===this.br.ui)return;let t=null;if(null!==(e=this.br.options.table_of_contents)&&void 0!==e&&e.length)t=this.br.options.table_of_contents;else{var r;const e=await this.getOpenLibraryRecord();null!=e&&null!==(r=e.table_of_contents)&&void 0!==r&&r.length&&(t=e.table_of_contents)}t&&(this._tocEntries=t.map(e=>Object.assign({},e,{pageIndex:"number"==typeof e.page_index?e.page_index:"number"==typeof e.leaf?this.br.book.leafNumToIndex(e.leaf):e.pagenum?this.br.book.getPageIndex(e.pagenum):void 0})),this.br.shell||await(0,m.Fg)(window,"BookReader:PostInit"),this._render(),this.br.bind(A.eventNames.pageChanged,()=>this._updateCurrent()))}_render(){this.br.shell.menuProviders.chapters={id:"chapters",icon:(0,l.qy)(n||(n=I(['<ia-icon-toc aria-hidden="true" role="presentation" style="width: var(--iconWidth); height: var(--iconHeight);"></ia-icon-toc>']))),label:"Table of Contents",component:(0,l.qy)(i||(i=I(['<br-chapters-panel\n .contents="','"\n .jumpToPage="','"\n @connected="','"\n />'])),this._tocEntries,e=>{this._updateCurrent(e),this.br.jumpToIndex(e,{ariaLive:!0})},e=>{this._chaptersPanel=e.target,this._updateCurrent()})},this.br.shell.addMenuShortcut("chapters"),this.br.shell.updateMenuContents(),this._tocEntries.forEach((e,t)=>this._renderMarker(e,t))}_renderMarker(e,t){if(null==e.pageIndex)return;const r=[e.label,e.title].filter(e=>e).join(" ")||"Chapter ".concat(t+1),n=A.util.cssPercentage(e.pageIndex,this.br.book.getNumLeafs()-1);b("<div></div>").append(b("<div />").text(r).append(b('<div class="BRchapterPage" />').text(this.br.book.getPageName(e.pageIndex)))).addClass("BRchapter").css({left:n}).appendTo(this.br.$(".BRnavline")).on("mouseenter",e=>{const t=e.currentTarget,r=t.querySelector("div"),n=r.getBoundingClientRect(),i=t.getBoundingClientRect(),o=2*parseInt(getComputedStyle(r).paddingLeft);n.x-o<0&&r.style.setProperty("transform","translateX(-".concat(i.left-o,"px)")),this.br.$(".BRsearch,.BRchapter").removeClass("front"),b(e.target).addClass("front")}).on("mouseleave",e=>b(e.target).removeClass("front")).on("click",()=>{this._updateCurrent(e.pageIndex),this.br.jumpToIndex(e.pageIndex,{ariaLive:!0})}),this.br.$(".BRchapter, .BRsearch").each((e,t)=>{const r=b(t);r.on("mouseenter",()=>r.addClass("front")).on("mouseleave",()=>r.removeClass("front"))})}async getOpenLibraryRecord(){const e=(0,f.gT)(this.options.openLibraryHost,this.br.options.vars);if(this.options.openLibraryId){const t=(0,f.gT)(this.options.openLibraryId,this.br.options.vars);return await b.ajax({url:"".concat(e,"/books/").concat(t,".json")})}if(this.options.internetArchiveId){var t;const r=(0,f.gT)(this.options.internetArchiveId,this.br.options.vars),n="".concat(e,"/query.json?type=/type/edition&*=&");let i=await b.ajax({url:n+new URLSearchParams({ocaid:r,limit:"1"})});return i&&i.length||(i=await b.ajax({url:n+new URLSearchParams({source_records:"ia:".concat(r),limit:"1"})})),null===(t=i)||void 0===t?void 0:t[0]}return null}_updateCurrent(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:2==this.br.mode?Math.max(...this.br.displayedIndices):this.br.firstIndex;const t=this._tocEntries.filter(e=>null!=e.pageIndex).reverse(),r=t[t.findIndex(t=>t.pageIndex<=e)];this._chaptersPanel&&(this._chaptersPanel.currentChapter=r)}}null==A||A.registerPlugin("chapters",O);let R=(S=[(0,d.EM)("br-chapters-panel")],D=l.WF,B=v(),L=function(e,t){class r extends t{constructor(t){super(),e(this),this.contents=t}}return{F:r,d:[{kind:"field",decorators:[(0,d.MZ)({type:Array})],key:"contents",value:()=>[]},{kind:"field",decorators:[(0,d.MZ)({type:Object})],key:"currentChapter",value:()=>({})},{kind:"field",key:"jumpToPage",value:()=>()=>{}},{kind:"method",key:"render",value:function(){return(0,l.qy)(o||(o=I(["\n <ol>\n ","\n </ol>\n "])),this.contents.map(e=>this.renderTOCEntry(e)))}},{kind:"method",key:"renderTOCEntry",value:function(e){const t=[e.label,e.title].filter(e=>e).join(" "),r=null!=e.pageIndex;return(0,l.qy)(s||(s=I(['\n <li\n class="\n BRtable-contents-el\n ',"\n ",'\n "\n style="','"\n data-event-click-tracking="','"\n @click="','"\n >\n ',"\n ","\n </li>"])),r?"clickable":"",e==this.currentChapter?"current":"",(0,u.W)({marginLeft:10*(e.level-1)+"px"}),(0,p.J)(r?"BRTOCPanel|GoToChapter":void 0),()=>this.jumpToPage(e.pageIndex),t,e.pagenum?(0,l.qy)(a||(a=I(['\n <br />\n <span class="BRTOCElementPage">Page ',"</span>\n "])),e.pagenum):l.s6)}},{kind:"method",key:"connectedCallback",value:function(){var e,t,n,i,o;(e=r,t="connectedCallback",n=this,o=x(C(1&(i=3)?e.prototype:e),t,n),2&i&&"function"==typeof o?function(e){return o.apply(n,e)}:o)([]),this.dispatchEvent(new CustomEvent("connected"))}},{kind:"method",key:"updated",value:function(e){if(e.has("currentChapter")){const e=this.shadowRoot.querySelector("li.current");e&&(0,y.N)(e,{block:"nearest",behavior:"smooth"})}}},{kind:"get",static:!0,key:"styles",value:function(){return(0,l.AH)(c||(c=I(["\n ol {\n padding: 0;\n margin: 0;\n margin-right: 5px;\n }\n li {\n padding: 10px;\n overflow: hidden;\n border-radius: 4px;\n }\n li.clickable {\n font-weight: normal;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n\n li.clickable:not(.current):hover {\n background-color: rgba(255,255,255, 0.05);\n }\n\n li.current {\n background-color: rgba(255,255,255,0.9);\n color: #333;\n }\n\n .BRTOCElementPage {\n font-size: 0.85em;\n opacity: .8;\n }"])))}}]}}(function(e){B.initializeInstanceElements(e,z.elements)},D),z=B.decorateClass(function(e){for(var t=[],r=function(e){return"method"===e.kind&&e.key===o.key&&e.placement===o.placement},n=0;n<e.length;n++){var i,o=e[n];if("method"===o.kind&&(i=t.find(r)))if(_(o.descriptor)||_(i.descriptor)){if(w(o)||w(i))throw new ReferenceError("Duplicated methods ("+o.key+") can't be decorated.");i.descriptor=o.descriptor}else{if(w(o)){if(w(i))throw new ReferenceError("Decorators can't be placed on different accessors with for the same property ("+o.key+").");i.decorators=o.decorators}k(o,i)}else t.push(o)}return t}(L.d.map(g)),S),B.initializeClassElements(L.F,z.elements),B.runClassFinishers(L.F,z.finishers));var S,D,B,L,z},8965:(e,t,r)=>{function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function i(e){const t=e.match(/\S+/g);return t?t.length:0}function o(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s;return null==e?void 0:e.replace(/\{\{([^}]*?)\}\}/g,(e,o)=>{if(!o)return e;const s=function(e){if(Array.isArray(e))return e}(l=o.split("|").map(e=>e.trim()))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||function(e,t){if(e){if("string"==typeof e)return n(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}(l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),a=s[0],c=n(s).slice(1);var l;if(!(a in r)&&!(a in t))return e;const d=a in r?r[a]:a in t?t[a]:null;return c.map(e=>i[e]).reduce((e,t)=>t(e),d&&d.toString())})}r.d(t,{gT:()=>o,rj:()=>i}),r(9463),r(3792),r(2712),r(7495),r(5440),r(2762),r(2953);const s={urlencode:encodeURIComponent}}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});var t=e(113);const r=t.F,n=t.g;export{r as BRChaptersPanel,n as ChaptersPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.chapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.chapters.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/whitespaces.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.chapters.js","webpack://@internetarchive/bookreader/./src/util/strings.js"],"sourcesContent":["'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","// @ts-check\nimport { css, html, LitElement, nothing } from \"lit\";\nimport { customElement, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport '@internetarchive/icon-toc/icon-toc.js';\nimport { BookReaderPlugin } from \"../BookReaderPlugin.js\";\nimport { applyVariables } from \"../util/strings.js\";\nimport { promisifyEvent } from \"../BookReader/utils.js\";\nimport { singleScrollIntoView } from \"../util/dom.js\";\n/** @typedef {import('@/src/BookReader/BookModel.js').PageIndex} PageIndex */\n/** @typedef {import('@/src/BookReader/BookModel.js').PageString} PageString */\n/** @typedef {import('@/src/BookReader/BookModel.js').LeafNum} LeafNum */\n\n// @ts-ignore\nconst BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);\n\n/**\n * Plugin for chapter markers in BookReader. Fetches from openlibrary.org\n * Could be forked, or extended to alter behavior\n */\nexport class ChaptersPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n\n /**\n * The Open Library host to fetch/query Open Library.\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n openLibraryHost: 'https://openlibrary.org',\n\n /**\n * The Open Library edition to fetch the table of contents from.\n * E.g. 'OL12345M'\n *\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n openLibraryId: '',\n\n /**\n * The Internet Archive identifier to fetch the Open Library table\n * of contents from.\n * E.g. 'goody'\n *\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n internetArchiveId: '',\n\n /**\n * @deprecated\n * Old name for openLibraryHost\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n olHost: 'https://openlibrary.org',\n\n /**\n * @deprecated\n * Old name for internetArchiveId\n * @type {import('@/src/util/strings.js').StringWithVars}\n */\n bookId: '{{bookId}}',\n }\n\n /** @type {TocEntry[]} */\n _tocEntries;\n\n /** @type {BRChaptersPanel} */\n _chaptersPanel;\n\n /** @override */\n setup(options) {\n super.setup(options);\n this.options.internetArchiveId = this.options.internetArchiveId || this.options.bookId;\n this.options.openLibraryHost = this.options.openLibraryHost || this.options.olHost;\n }\n\n /** @override Extend to call Open Library for TOC */\n async init() {\n if (!this.options.enabled || this.br.ui === 'embed') {\n return;\n }\n\n let rawTableOfContents = null;\n // Prefer explicit TOC if specified\n if (this.br.options.table_of_contents?.length) {\n rawTableOfContents = this.br.options.table_of_contents;\n } else {\n // Otherwise fetch from OL\n const olEdition = await this.getOpenLibraryRecord();\n if (olEdition?.table_of_contents?.length) {\n rawTableOfContents = olEdition.table_of_contents;\n }\n }\n\n if (rawTableOfContents) {\n this._tocEntries = rawTableOfContents\n .map(rawTOCEntry => (Object.assign({}, rawTOCEntry, {\n pageIndex: (\n typeof rawTOCEntry.page_index === 'number' ? rawTOCEntry.page_index :\n typeof(rawTOCEntry.leaf) == 'number' ? this.br.book.leafNumToIndex(rawTOCEntry.leaf) :\n rawTOCEntry.pagenum ? this.br.book.getPageIndex(rawTOCEntry.pagenum) :\n undefined\n ),\n })));\n if (!this.br.shell) {\n await promisifyEvent(window, 'BookReader:PostInit');\n }\n this._render();\n this.br.bind(BookReader.eventNames.pageChanged, () => this._updateCurrent());\n }\n }\n\n /**\n * Update the table of contents based on array of TOC entries.\n */\n _render() {\n this.br.shell.menuProviders['chapters'] = {\n id: 'chapters',\n icon: html`<ia-icon-toc aria-hidden=\"true\" role=\"presentation\" style=\"width: var(--iconWidth); height: var(--iconHeight);\"></ia-icon-toc>`,\n label: 'Table of Contents',\n component: html`<br-chapters-panel\n .contents=\"${this._tocEntries}\"\n .jumpToPage=\"${(pageIndex) => {\n this._updateCurrent(pageIndex);\n this.br.jumpToIndex(pageIndex, { ariaLive: true });\n }}\"\n @connected=\"${(e) => {\n this._chaptersPanel = e.target;\n this._updateCurrent();\n }}\"\n />`,\n };\n this.br.shell.addMenuShortcut('chapters');\n this.br.shell.updateMenuContents();\n this._tocEntries.forEach((tocEntry, i) => this._renderMarker(tocEntry, i));\n }\n\n /**\n * @param {TocEntry} tocEntry\n * @param {number} entryIndex\n */\n _renderMarker(tocEntry, entryIndex) {\n if (tocEntry.pageIndex == undefined) return;\n\n //creates a string with non-void tocEntry.label and tocEntry.title\n const chapterStr = [tocEntry.label, tocEntry.title]\n .filter(x => x)\n .join(' ') || `Chapter ${entryIndex + 1}`;\n\n const percentThrough = BookReader.util.cssPercentage(tocEntry.pageIndex, this.br.book.getNumLeafs() - 1);\n $(`<div></div>`)\n .append(\n $('<div />')\n .text(chapterStr)\n .append(\n $('<div class=\"BRchapterPage\" />')\n .text(this.br.book.getPageName(tocEntry.pageIndex)),\n ),\n )\n .addClass('BRchapter')\n .css({ left: percentThrough })\n .appendTo(this.br.$('.BRnavline'))\n .on(\"mouseenter\", event => {\n // remove hover effect from other markers then turn on just for this\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('div');\n const tooltipOffset = tooltip.getBoundingClientRect();\n const targetOffset = marker.getBoundingClientRect();\n const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;\n if (tooltipOffset.x - boxSizeAdjust < 0) {\n tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);\n }\n this.br.$('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n })\n .on(\"mouseleave\", event => $(event.target).removeClass('front'))\n .on('click', () => {\n this._updateCurrent(tocEntry.pageIndex);\n this.br.jumpToIndex(tocEntry.pageIndex, { ariaLive: true });\n });\n\n this.br.$('.BRchapter, .BRsearch').each((i, el) => {\n const $el = $(el);\n $el\n .on(\"mouseenter\", () => $el.addClass('front'))\n .on(\"mouseleave\", () => $el.removeClass('front'));\n });\n }\n\n /**\n * This makes a call to OL API and calls the given callback function with the\n * response from the API.\n */\n async getOpenLibraryRecord() {\n const olHost = applyVariables(this.options.openLibraryHost, this.br.options.vars);\n\n if (this.options.openLibraryId) {\n const openLibraryId = applyVariables(this.options.openLibraryId, this.br.options.vars);\n return await $.ajax({ url: `${olHost}/books/${openLibraryId}.json` });\n }\n\n if (this.options.internetArchiveId) {\n const ocaid = applyVariables(this.options.internetArchiveId, this.br.options.vars);\n\n // Try looking up by ocaid first, then by source_record\n const baseQueryUrl = `${olHost}/query.json?type=/type/edition&*=&`;\n\n let data = await $.ajax({\n url: baseQueryUrl + new URLSearchParams({ ocaid, limit: '1' }),\n });\n\n if (!data || !data.length) {\n // try source_records\n data = await $.ajax({\n url: baseQueryUrl + new URLSearchParams({ source_records: `ia:${ocaid}`, limit: '1' }),\n });\n }\n\n return data?.[0];\n }\n\n return null;\n }\n\n /**\n * @private\n * Highlights the current chapter based on current page\n * @param {PageIndex} curIndex\n */\n _updateCurrent(\n curIndex = (this.br.mode == 2 ? Math.max(...this.br.displayedIndices) : this.br.firstIndex),\n ) {\n const tocEntriesIndexed = this._tocEntries.filter((el) => el.pageIndex != undefined).reverse();\n const currChapter = tocEntriesIndexed[\n // subtract one so that 2up shows the right label\n tocEntriesIndexed.findIndex((chapter) => chapter.pageIndex <= curIndex)\n ];\n if (this._chaptersPanel) {\n this._chaptersPanel.currentChapter = currChapter;\n }\n }\n}\nBookReader?.registerPlugin('chapters', ChaptersPlugin);\n\n/**\n * @typedef {Object} TocEntry\n * Table of contents entry as defined by Open Library, with some extra values for internal use\n * @property {number} [level]\n * @property {string} [label]\n * @property {string} [title]\n * @property {PageString} [pagenum]\n * @property {LeafNum} [leaf]\n * @property {number} [pageIndex] - Added\n *\n * @example {\n * \"pagenum\": \"17\",\n * \"level\": 1,\n * \"label\": \"CHAPTER I\",\n * \"title\": \"THE COUNTRY AND THE MISSION\"\n * }\n */\n\n@customElement('br-chapters-panel')\nexport class BRChaptersPanel extends LitElement {\n /** @type {TocEntry[]} */\n @property({ type: Array })\n contents = [];\n\n /** @type {TocEntry?} */\n @property({ type: Object })\n currentChapter = {};\n\n /** @type {(pageIndex: PageIndex) => void} */\n jumpToPage = () => {};\n\n /**\n * @param {TocEntry[]} contents\n */\n constructor(contents) {\n super();\n this.contents = contents;\n }\n\n render() {\n return html`\n <ol>\n ${this.contents.map(tocEntry => this.renderTOCEntry(tocEntry))}\n </ol>\n `;\n }\n\n /**\n * @param {TocEntry} tocEntry\n */\n renderTOCEntry(tocEntry) {\n const chapterTitle = [tocEntry.label, tocEntry.title]\n .filter(x => x)\n .join(' ');\n const clickable = tocEntry.pageIndex != undefined;\n // note the click-tracking won't work...\n return html`\n <li\n class=\"\n BRtable-contents-el\n ${clickable ? 'clickable' : ''}\n ${tocEntry == this.currentChapter ? 'current' : ''}\n \"\n style=\"${styleMap({marginLeft: (tocEntry.level - 1) * 10 + 'px'})}\"\n data-event-click-tracking=\"${ifDefined(clickable ? \"BRTOCPanel|GoToChapter\" : undefined)}\"\n @click=\"${() => this.jumpToPage(tocEntry.pageIndex)}\"\n >\n ${chapterTitle}\n ${tocEntry.pagenum ? html`\n <br />\n <span class=\"BRTOCElementPage\">Page ${tocEntry.pagenum}</span>\n ` : nothing}\n </li>`;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.dispatchEvent(new CustomEvent('connected'));\n }\n\n updated(changedProperties) {\n if (changedProperties.has('currentChapter')) {\n const currentEl = this.shadowRoot.querySelector('li.current');\n if (currentEl) {\n singleScrollIntoView(currentEl, {\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n }\n }\n\n static get styles() {\n return css`\n ol {\n padding: 0;\n margin: 0;\n margin-right: 5px;\n }\n li {\n padding: 10px;\n overflow: hidden;\n border-radius: 4px;\n }\n li.clickable {\n font-weight: normal;\n cursor: pointer;\n transition: background-color 0.2s;\n }\n\n li.clickable:not(.current):hover {\n background-color: rgba(255,255,255, 0.05);\n }\n\n li.current {\n background-color: rgba(255,255,255,0.9);\n color: #333;\n }\n\n .BRTOCElementPage {\n font-size: 0.85em;\n opacity: .8;\n }`;\n }\n}\n","/**\n * @typedef {String} StringWithVars\n * A template string with {{foo}} style variables\n * Also supports filters, like {{bookPath|urlencode}} (See APPLY_FILTERS for the\n * supported list of filters)\n **/\n\n/**\n * Count whitespace-delimited words in a string.\n * @param {string} text\n * @return {number}\n */\nexport function countWords(text) {\n const matches = text.match(/\\S+/g);\n return matches ? matches.length : 0;\n}\n\n/**\n * @param {StringWithVars|String} template\n * @param { {[varName: string]: { toString: () => string} } } vars\n * @param { {[varName: string]: { toString: () => string} } } [overrides]\n * @returns {StringWithVars|string}\n */\nexport function applyVariables(template, vars, overrides = {}, possibleFilters = APPLY_FILTERS) {\n return template?.replace(/\\{\\{([^}]*?)\\}\\}/g, ($0, $1) => {\n if (!$1) return $0;\n /** @type {string} */\n const expression = $1;\n const [varName, ...filterNames] = expression.split('|').map(x => x.trim());\n const defined = varName in overrides || varName in vars;\n\n // If it's not defined, don't expand it at all\n if (!defined) return $0;\n\n const value = varName in overrides ? overrides[varName]\n : varName in vars ? vars[varName] : null;\n const filters = filterNames.map(n => possibleFilters[n]);\n return filters.reduce((acc, cur) => cur(acc), value && value.toString());\n });\n}\n\n/** @type { {[filterName: String]:( string => string)} } */\nexport const APPLY_FILTERS = {\n urlencode: encodeURIComponent,\n};\n"],"names":["PROPER_FUNCTION_NAME","__webpack_require__","fails","whitespaces","module","exports","METHOD_NAME","name","uncurryThis","requireObjectCoercible","toString","replace","ltrim","RegExp","rtrim","createMethod","TYPE","$this","string","start","end","Bq","$","$trim","target","proto","forced","forcedStringTrimMethod","trim","this","BookReaderPlugin","constructor","br","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","BookReader","window","ChaptersPlugin","super","arguments","_defineProperty","enabled","openLibraryHost","openLibraryId","internetArchiveId","olHost","bookId","_this$br$options$tabl","ui","rawTableOfContents","table_of_contents","length","_olEdition$table_of_c","olEdition","getOpenLibraryRecord","_tocEntries","map","rawTOCEntry","pageIndex","page_index","leaf","book","leafNumToIndex","pagenum","getPageIndex","undefined","shell","promisifyEvent","_render","bind","eventNames","pageChanged","_updateCurrent","menuProviders","id","icon","html","_templateObject","_taggedTemplateLiteral","label","component","_templateObject2","jumpToIndex","ariaLive","e","_chaptersPanel","addMenuShortcut","updateMenuContents","forEach","tocEntry","i","_renderMarker","entryIndex","chapterStr","title","filter","x","join","concat","percentThrough","util","cssPercentage","getNumLeafs","append","text","getPageName","addClass","css","left","appendTo","on","event","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","style","setProperty","removeClass","each","el","$el","applyVariables","vars","ajax","url","_data","ocaid","baseQueryUrl","data","URLSearchParams","limit","source_records","curIndex","mode","Math","max","displayedIndices","firstIndex","tocEntriesIndexed","reverse","currChapter","findIndex","chapter","currentChapter","registerPlugin","BRChaptersPanel","customElement","LitElement","_initialize","_LitElement","contents","F","d","kind","decorators","property","type","Array","key","value","_templateObject3","renderTOCEntry","chapterTitle","clickable","_templateObject4","styleMap","marginLeft","level","ifDefined","jumpToPage","_templateObject5","nothing","dispatchEvent","CustomEvent","changedProperties","has","currentEl","shadowRoot","singleScrollIntoView","block","behavior","static","_templateObject6","countWords","matches","match","template","overrides","possibleFilters","APPLY_FILTERS","$0","$1","_expression$split$map2","split","varName","filterNames","_arrayLikeToArray","slice","n","reduce","acc","cur","urlencode","encodeURIComponent"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[830];export const __webpack_esm_modules__={3921:(e,t,n)=>{var i=n(6518),r=n(2652),o=n(4659);i({target:"Object",stat:!0},{fromEntries:function(e){var t={};return r(e,function(e,n){o(t,e,n)},{AS_ENTRIES:!0}),t}})},6869:(e,t,n)=>{n.d(t,{S:()=>i});class i{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},4680:(e,t,n)=>{n.d(t,{B5:()=>j,cr:()=>M,qL:()=>D}),n(9463),n(4423),n(3792),n(3921),n(3362),n(7495),n(5440),n(2953);var i,r,o,s,a,l,c,d,p=n(7597),h=n(6869),u=n(6054),f=n(9880);function m(e,t,n,i){var r=y();if(i)for(var o=0;o<i.length;o++)r=i[o](r);var s=t(function(e){r.initializeInstanceElements(e,a.elements)},n),a=r.decorateClass(function(e){for(var t=[],n=function(e){return"method"===e.kind&&e.key===o.key&&e.placement===o.placement},i=0;i<e.length;i++){var r,o=e[i];if("method"===o.kind&&(r=t.find(n)))if(k(o.descriptor)||k(r.descriptor)){if(v(o)||v(r))throw new ReferenceError("Duplicated methods ("+o.key+") can't be decorated.");r.descriptor=o.descriptor}else{if(v(o)){if(v(r))throw new ReferenceError("Decorators can't be placed on different accessors with for the same property ("+o.key+").");r.decorators=o.decorators}g(o,r)}else t.push(o)}return t}(s.d.map(b)),e);return r.initializeClassElements(s.F,a.elements),r.runClassFinishers(s.F,a.finishers)}function y(){y=function(){return e};var e={elementsDefinitionOrder:[["method"],["field"]],initializeInstanceElements:function(e,t){["method","field"].forEach(function(n){t.forEach(function(t){t.kind===n&&"own"===t.placement&&this.defineClassElement(e,t)},this)},this)},initializeClassElements:function(e,t){var n=e.prototype;["method","field"].forEach(function(i){t.forEach(function(t){var r=t.placement;if(t.kind===i&&("static"===r||"prototype"===r)){var o="static"===r?e:n;this.defineClassElement(o,t)}},this)},this)},defineClassElement:function(e,t){var n=t.descriptor;if("field"===t.kind){var i=t.initializer;n={enumerable:n.enumerable,writable:n.writable,configurable:n.configurable,value:void 0===i?void 0:i.call(e)}}Object.defineProperty(e,t.key,n)},decorateClass:function(e,t){var n=[],i=[],r={static:[],prototype:[],own:[]};if(e.forEach(function(e){this.addElementPlacement(e,r)},this),e.forEach(function(e){if(!v(e))return n.push(e);var t=this.decorateElement(e,r);n.push(t.element),n.push.apply(n,t.extras),i.push.apply(i,t.finishers)},this),!t)return{elements:n,finishers:i};var o=this.decorateConstructor(n,t);return i.push.apply(i,o.finishers),o.finishers=i,o},addElementPlacement:function(e,t,n){var i=t[e.placement];if(!n&&-1!==i.indexOf(e.key))throw new TypeError("Duplicated element ("+e.key+")");i.push(e.key)},decorateElement:function(e,t){for(var n=[],i=[],r=e.decorators,o=r.length-1;o>=0;o--){var s=t[e.placement];s.splice(s.indexOf(e.key),1);var a=this.fromElementDescriptor(e),l=this.toElementFinisherExtras((0,r[o])(a)||a);e=l.element,this.addElementPlacement(e,t),l.finisher&&i.push(l.finisher);var c=l.extras;if(c){for(var d=0;d<c.length;d++)this.addElementPlacement(c[d],t);n.push.apply(n,c)}}return{element:e,finishers:i,extras:n}},decorateConstructor:function(e,t){for(var n=[],i=t.length-1;i>=0;i--){var r=this.fromClassDescriptor(e),o=this.toClassDescriptor((0,t[i])(r)||r);if(void 0!==o.finisher&&n.push(o.finisher),void 0!==o.elements){e=o.elements;for(var s=0;s<e.length-1;s++)for(var a=s+1;a<e.length;a++)if(e[s].key===e[a].key&&e[s].placement===e[a].placement)throw new TypeError("Duplicated element ("+e[s].key+")")}}return{elements:e,finishers:n}},fromElementDescriptor:function(e){var t={kind:e.kind,key:e.key,placement:e.placement,descriptor:e.descriptor};return Object.defineProperty(t,Symbol.toStringTag,{value:"Descriptor",configurable:!0}),"field"===e.kind&&(t.initializer=e.initializer),t},toElementDescriptors:function(e){if(void 0!==e)return(t=e,function(e){if(Array.isArray(e))return e}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return E(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?E(e,t):void 0}}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map(function(e){var t=this.toElementDescriptor(e);return this.disallowProperty(e,"finisher","An element descriptor"),this.disallowProperty(e,"extras","An element descriptor"),t},this);var t},toElementDescriptor:function(e){var t=e.kind+"";if("method"!==t&&"field"!==t)throw new TypeError('An element descriptor\'s .kind property must be either "method" or "field", but a decorator created an element descriptor with .kind "'+t+'"');var n=A(e.key),i=e.placement+"";if("static"!==i&&"prototype"!==i&&"own"!==i)throw new TypeError('An element descriptor\'s .placement property must be one of "static", "prototype" or "own", but a decorator created an element descriptor with .placement "'+i+'"');var r=e.descriptor;this.disallowProperty(e,"elements","An element descriptor");var o={kind:t,key:n,placement:i,descriptor:Object.assign({},r)};return"field"!==t?this.disallowProperty(e,"initializer","A method descriptor"):(this.disallowProperty(r,"get","The property descriptor of a field descriptor"),this.disallowProperty(r,"set","The property descriptor of a field descriptor"),this.disallowProperty(r,"value","The property descriptor of a field descriptor"),o.initializer=e.initializer),o},toElementFinisherExtras:function(e){return{element:this.toElementDescriptor(e),finisher:w(e,"finisher"),extras:this.toElementDescriptors(e.extras)}},fromClassDescriptor:function(e){var t={kind:"class",elements:e.map(this.fromElementDescriptor,this)};return Object.defineProperty(t,Symbol.toStringTag,{value:"Descriptor",configurable:!0}),t},toClassDescriptor:function(e){var t=e.kind+"";if("class"!==t)throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator created a class descriptor with .kind "'+t+'"');this.disallowProperty(e,"key","A class descriptor"),this.disallowProperty(e,"placement","A class descriptor"),this.disallowProperty(e,"descriptor","A class descriptor"),this.disallowProperty(e,"initializer","A class descriptor"),this.disallowProperty(e,"extras","A class descriptor");var n=w(e,"finisher");return{elements:this.toElementDescriptors(e.elements),finisher:n}},runClassFinishers:function(e,t){for(var n=0;n<t.length;n++){var i=(0,t[n])(e);if(void 0!==i){if("function"!=typeof i)throw new TypeError("Finishers must return a constructor.");e=i}}return e},disallowProperty:function(e,t,n){if(void 0!==e[t])throw new TypeError(n+" can't have a ."+t+" property.")}};return e}function b(e){var t,n=A(e.key);"method"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:"get"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:"set"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:"field"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var i={kind:"field"===e.kind?"field":"method",key:n,placement:e.static?"static":"field"===e.kind?"own":"prototype",descriptor:t};return e.decorators&&(i.decorators=e.decorators),"field"===e.kind&&(i.initializer=e.value),i}function g(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function v(e){return e.decorators&&e.decorators.length}function k(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function w(e,t){var n=e[t];if(void 0!==n&&"function"!=typeof n)throw new TypeError("Expected '"+t+"' to be a function");return n}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=Array(t);n<t;n++)i[n]=e[n];return i}function x(e,t,n,i){var r=_(P(1&i?e.prototype:e),t,n);return 2&i&&"function"==typeof r?function(e){return r.apply(n,e)}:r}function _(){return _="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var i=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=P(e)););return e}(e,t);if(i){var r=Object.getOwnPropertyDescriptor(i,t);return r.get?r.get.call(arguments.length<3?e:n):r.value}},_.apply(null,arguments)}function P(e){return P=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},P(e)}function S(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function C(e,t,n){return(t=A(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function A(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}const T=window.BookReader;class O{constructor(){C(this,"name",void 0),C(this,"title",void 0),C(this,"description",void 0),C(this,"icon",void 0),C(this,"enabled",void 0),C(this,"learnMore",void 0),C(this,"br",void 0),C(this,"assetRoot","/BookReader/"),C(this,"enabledLoading",!1)}buildAssetPath(e){return"".concat(this.assetRoot).concat(e)}async enable(e){e.manual}async disable(){}}class M extends h.S{constructor(){super(...arguments),C(this,"options",{enabled:!0,localStorageKey:"BrExperiments",availableExperiments:["translate","copyLinkToHighlight"],autoEnabledExperiments:[]}),C(this,"allExperiments",[new class extends O{constructor(){super(...arguments),C(this,"name","copyLinkToHighlight"),C(this,"title","Copy Link to Highlight"),C(this,"description","Shareable link to a text selection"),C(this,"icon",null),C(this,"enabled",!1)}async enable(e){let t=e.manual;void 0!==t&&t&&(this.br.plugins.textSelection.textSelectionManager.selectMenu.copyLinkToHighlightEnabled=!0)}async disable(){this.br.plugins.textSelection.textSelectionManager.selectMenu.copyLinkToHighlightEnabled=!1}},new class extends O{constructor(){super(...arguments),C(this,"name","annotateHighlight"),C(this,"title","Highlight and annotate"),C(this,"description","Create private highlights and annotations for this book"),C(this,"icon",null),C(this,"enabled",!1)}async enable(e){let t=e.manual;void 0!==t&&t&&(this.br.plugins.textSelection.textSelectionManager.selectMenu.highlightAnnotationEnabled=!0)}async disable(){(0,f.yy)(0).then(()=>{window.location.reload()})}},new class extends O{constructor(){super(...arguments),C(this,"name","translate"),C(this,"title","Translate Plugin"),C(this,"description","Translate books directly in your browser."),C(this,"learnMore","https://mozilla.github.io/translations/"),C(this,"icon","images/translate.svg"),C(this,"enabled",!1)}async enable(e){e.manual,T.PLUGINS.translate||(await L(this.buildAssetPath("plugins/plugin.translate.js")),this.br.initializePlugin("translate"))}async disable(){(0,f.yy)(0).then(()=>{window.location.reload()})}},new class extends O{constructor(){super(...arguments),C(this,"name","hypothesis"),C(this,"title","Hypothes.is"),C(this,"description","Create public, collaborative, or fully private annotations on books and the web."),C(this,"learnMore","https://web.hypothes.is/about/"),C(this,"icon","images/hypothesis.ico"),C(this,"enabled",!1)}async enable(e){let t=e.manual,n=void 0!==t&&t;const i=document.createElement("script");return i.type="application/json",i.className="js-hypothesis-config",i.textContent=JSON.stringify({openSidebar:n,assetRoot:this.buildAssetPath("hypothesis/")}),document.head.appendChild(i),L(this.buildAssetPath("hypothesis/build/boot.js"))}async disable(){(0,f.yy)(0).then(()=>{window.location.reload()})}}]),C(this,"_panel",void 0)}async init(){if(this.options.enabled){for(const e of this.allExperiments)e.assetRoot=this.br.options.imagesBaseURL.replace(/images\/$/,""),e.icon&&(e.icon=e.buildAssetPath(e.icon)),e.br=this.br,!e.enabled&&this.options.autoEnabledExperiments.includes(e.name)&&(e.enabled=!0,await e.enable({manual:!1}));this._loadExperimentStates(),await Promise.resolve(),this._render()}}isEnabled(e){const t=this.allExperiments.find(t=>t.name===e);return null==t?void 0:t.enabled}_loadExperimentStates(){const e=JSON.parse(localStorage.getItem(this.options.localStorageKey)||"{}");this.allExperiments.forEach(t=>{void 0!==e[t.name]&&(t.enabled=e[t.name],t.enabled&&t.enable({manual:!1}))})}_saveExperimentStates(){const e=Object.fromEntries(this.allExperiments.map(e=>[e.name,e.enabled]));localStorage.setItem(this.options.localStorageKey,JSON.stringify(e))}async _toggleExperiment(e,t){var n;e.enabledLoading=!0,null===(n=this.br.plugins.archiveAnalytics)||void 0===n||n.sendEvent("BRExperiment-".concat(e.name),t?"Enable":"Disable"),this._panel.requestUpdate(),t?await e.enable({manual:!0}):await e.disable(),e.enabledLoading=!1,e.enabled=t,this._panel.requestUpdate()}_render(){this.br.shell.menuProviders.experiments={id:"experiments",icon:(0,p.qy)(i||(i=S(['\n <img src="','/icon_experiment.svg" alt="" width="26"/>\n '])),this.br.options.imagesBaseURL),label:"Experiments",component:(0,p.qy)(r||(r=S(['<br-experiments-panel\n .experiments="','"\n @connected="','"\n @toggle="','"\n />'])),this.allExperiments.filter(e=>this.options.availableExperiments.includes(e.name)),e=>this._panel=e.target,async e=>{await this._toggleExperiment(e.detail.experiment,e.detail.enabled),this._saveExperimentStates()})},this.br.shell.updateMenuContents()}}null==T||T.registerPlugin("experiments",M);let j=m([(0,u.EM)("br-experiments-panel")],function(e,t){class n extends t{constructor(){super(...arguments),e(this)}}return{F:n,d:[{kind:"field",decorators:[(0,u.MZ)({type:Array})],key:"experiments",value:()=>[]},{kind:"method",key:"render",value:function(){return(0,p.qy)(o||(o=S(['\n <div style="padding: 10px">\n ',"\n </div>\n "])),this.experiments.map(e=>(0,p.qy)(s||(s=S(['\n <br-experiment-toggle\n .icon="','"\n .title="','"\n .description="','"\n .enabled="','"\n .loading="','"\n .learnMore="','"\n @toggle="','"\n ></br-experiment-toggle>\n '])),e.icon,e.title,e.description,e.enabled,e.enabledLoading,e.learnMore,t=>this._dispatchToggle(e,t.detail.enabled))))}},{kind:"method",key:"_dispatchToggle",value:async function(e,t){this.dispatchEvent(new CustomEvent("toggle",{detail:{experiment:e,enabled:t}}))}},{kind:"method",key:"connectedCallback",value:function(){x(n,"connectedCallback",this,3)([]),this.dispatchEvent(new CustomEvent("connected"))}}]}},p.WF),D=m([(0,u.EM)("br-experiment-toggle")],function(e,t){class n extends t{constructor(){super(...arguments),e(this)}}return{F:n,d:[{kind:"field",decorators:[(0,u.MZ)({type:String})],key:"icon",value:()=>""},{kind:"field",decorators:[(0,u.MZ)({type:String})],key:"title",value:()=>""},{kind:"field",decorators:[(0,u.MZ)({type:String})],key:"description",value:()=>""},{kind:"field",decorators:[(0,u.MZ)({type:Boolean})],key:"enabled",value:()=>!1},{kind:"field",decorators:[(0,u.MZ)({type:Boolean})],key:"loading",value:()=>!1},{kind:"field",decorators:[(0,u.MZ)({type:String})],key:"learnMore",value:()=>""},{kind:"field",decorators:[(0,u.wk)()],key:"_longLoading",value:()=>!1},{kind:"method",key:"update",value:function(e){x(n,"update",this,3)([e]),e.has("loading")&&(this.loading?(0,f.yy)(500).then(()=>{this.loading&&(this._longLoading=!0,this.requestUpdate())}):this._longLoading=!1)}},{kind:"method",key:"render",value:function(){return(0,p.qy)(a||(a=S(['\n <div class="experiment-card" style="margin-bottom: 10px;">\n <div style="display: flex; align-items: center; gap: 10px;">\n ','\n <div style="flex-grow: 1; font-weight: bold;">','</div>\n </div>\n <p style="opacity: 0.9">\n ',"\n ",'\n </p>\n <div style="display: flex">\n <div style="flex-grow: 1;"></div>\n <button @click="','" .disabled="','">\n ',"\n </button>\n </div>\n </div>\n "])),this.icon?(0,p.qy)(l||(l=S(['<img src="','" style="width: 20px; height: 20px;" alt="" />'])),this.icon):"",this.title,this.description,this.learnMore?(0,p.qy)(c||(c=S(['<a href="','" target="_blank">Learn more</a>.'])),this.learnMore):"",this._dispatchToggle,this.loading,this._longLoading?"Loading…":this.enabled?"Disable":"Enable")}},{kind:"get",static:!0,key:"styles",value:function(){return(0,p.AH)(d||(d=S(["\n .experiment-card {\n border-radius: 8px;\n background-color: #fff2;\n padding: 10px;\n display: flex;\n flex-direction: column;\n }\n\n .experiment-card p {\n margin: 6px 0;\n }\n "])))}},{kind:"method",key:"_dispatchToggle",value:function(){this.dispatchEvent(new CustomEvent("toggle",{detail:{enabled:!this.enabled}}))}}]}},p.WF);async function L(e){return new Promise((t,n)=>{const i=document.createElement("script");i.src=e,i.onload=()=>t(),i.onerror=()=>n(new Error("Failed to load script: ".concat(e))),document.head.appendChild(i)})}}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});var t=e(4680);const n=t.qL,i=t.B5,r=t.cr;export{n as BrExperimentToggle,i as BrExperimentsPanel,r as ExperimentsPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.experiments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.experiments.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.experiments.js"],"sourcesContent":["'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://tc39.es/ecma262/#sec-object.fromentries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","// @ts-check\nimport { css, html, LitElement } from 'lit';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { sleep } from '../BookReader/utils.js';\n\n// @ts-ignore\nconst BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);\n\n/** @typedef {'copyLinkToHighlight' | 'annotateHighlight' | 'translate' | 'hypothesis'} ExperimentName */\n\nclass ExperimentModel {\n /** @type {ExperimentName} */\n name;\n /** @type {string} */\n title;\n /** @type {string} */\n description;\n /** @type {string} */\n icon;\n /** @type {boolean} */\n enabled;\n /** @type {string} */\n learnMore;\n\n /** @type {import(\"@/src/BookReader.js\").default} */\n br;\n\n assetRoot = '/BookReader/';\n\n enabledLoading = false;\n\n /**\n * @param {string} path\n */\n buildAssetPath(path) {\n return `${this.assetRoot}${path}`;\n }\n\n /**\n * @param {object} param0\n * @param {boolean} param0.manual Whether the experiment was enabled manually\n */\n async enable({ manual }) { }\n async disable() { }\n}\n\nexport class ExperimentsPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n\n /** Where the state of this plugin is saved in localStorage */\n localStorageKey: 'BrExperiments',\n\n /** @type {ExperimentName[]} Experiments shown in the experiments panel */\n availableExperiments: ['translate', 'copyLinkToHighlight'],\n\n /** @type {ExperimentName[]} Experiments enabled by default */\n autoEnabledExperiments: [],\n }\n\n /** @type {ExperimentModel[]} */\n allExperiments = [\n new class extends ExperimentModel {\n name = 'copyLinkToHighlight';\n title = 'Copy Link to Highlight';\n description = 'Shareable link to a text selection';\n icon = null;\n enabled = false;\n async enable ({ manual = false }) {\n if (manual) {\n this.br.plugins.textSelection.textSelectionManager.selectMenu.copyLinkToHighlightEnabled = true;\n }\n }\n async disable() {\n this.br.plugins.textSelection.textSelectionManager.selectMenu.copyLinkToHighlightEnabled = false;\n }\n }(),\n new class extends ExperimentModel {\n name = 'annotateHighlight';\n title = 'Highlight and annotate';\n description = 'Create private highlights and annotations for this book';\n icon = null;\n enabled = false;\n async enable ({ manual = false }) {\n if (manual) {\n this.br.plugins.textSelection.textSelectionManager.selectMenu.highlightAnnotationEnabled = true;\n }\n }\n async disable() {\n sleep(0).then(() => {\n window.location.reload();\n });\n }\n }(),\n new class extends ExperimentModel {\n name = 'translate';\n title = 'Translate Plugin';\n description = \"Translate books directly in your browser.\";\n learnMore = 'https://mozilla.github.io/translations/';\n icon = 'images/translate.svg';\n enabled = false;\n async enable({ manual = false}) {\n if (BookReader.PLUGINS.translate) return;\n\n await importAsScript(this.buildAssetPath('plugins/plugin.translate.js'));\n this.br.initializePlugin('translate');\n }\n async disable() {\n // need to reload to remove translate plugin script\n // Sleep so that the event loop can finish processing before the reload\n sleep(0).then(() => {\n window.location.reload();\n });\n }\n }(),\n new class extends ExperimentModel {\n name = 'hypothesis';\n title = 'Hypothes.is';\n description = 'Create public, collaborative, or fully private annotations on books and the web.';\n learnMore = 'https://web.hypothes.is/about/';\n icon = 'images/hypothesis.ico';\n enabled = false;\n\n async enable({ manual = false }) {\n // Hypothesis configs ; see https://h.readthedocs.io/projects/client/en/latest/publishers/config.html\n const configScript = document.createElement('script');\n configScript.type = 'application/json';\n configScript.className = 'js-hypothesis-config';\n configScript.textContent = JSON.stringify({\n // Open the sidebar if this is the first time enabling\n openSidebar: manual,\n assetRoot: this.buildAssetPath('hypothesis/'),\n });\n\n document.head.appendChild(configScript);\n return importAsScript(this.buildAssetPath('hypothesis/build/boot.js'));\n // For testing\n // return importAsScript('http://localhost:3001/hypothesis');\n }\n\n async disable() {\n // need to reload to remove the Hypothesis script\n // Sleep so that the event loop can finish processing before the reload\n sleep(0).then(() => {\n window.location.reload();\n });\n }\n }(),\n ]\n\n /** @type {BrExperimentsPanel} */\n _panel;\n\n async init() {\n if (!this.options.enabled) {\n return;\n }\n\n for (const experiment of this.allExperiments) {\n // TODO: imagesBaseURL should be replaced with assetRoot everywhere\n experiment.assetRoot = this.br.options.imagesBaseURL.replace(/images\\/$/, '');\n if (experiment.icon) {\n experiment.icon = experiment.buildAssetPath(experiment.icon);\n }\n\n experiment.br = this.br;\n\n // Enable any experiments that should be automatically enabled\n if (!experiment.enabled && this.options.autoEnabledExperiments.includes(experiment.name)) {\n experiment.enabled = true;\n await experiment.enable({ manual: false });\n }\n }\n\n this._loadExperimentStates();\n await Promise.resolve();\n this._render();\n }\n\n /**\n * @param {ExperimentName} experimentName\n */\n isEnabled(experimentName) {\n const experiment = this.allExperiments.find(exp => exp.name === experimentName);\n return experiment?.enabled;\n }\n\n _loadExperimentStates() {\n const savedStates = JSON.parse(localStorage.getItem(this.options.localStorageKey) || '{}');\n this.allExperiments.forEach(experiment => {\n if (savedStates[experiment.name] !== undefined) {\n experiment.enabled = savedStates[experiment.name];\n if (experiment.enabled) {\n experiment.enable({ manual: false });\n }\n }\n });\n }\n\n _saveExperimentStates() {\n const states = Object.fromEntries(\n this.allExperiments.map(experiment => [experiment.name, experiment.enabled]),\n );\n localStorage.setItem(this.options.localStorageKey, JSON.stringify(states));\n }\n\n /**\n * @param {ExperimentModel} experiment\n * @param {boolean} enabled\n */\n async _toggleExperiment(experiment, enabled) {\n experiment.enabledLoading = true;\n this.br.plugins.archiveAnalytics?.sendEvent(`BRExperiment-${experiment.name}`, enabled ? 'Enable' : 'Disable');\n this._panel.requestUpdate();\n\n if (enabled) {\n await experiment.enable({ manual: true });\n } else {\n await experiment.disable();\n }\n experiment.enabledLoading = false;\n experiment.enabled = enabled;\n this._panel.requestUpdate();\n }\n\n _render() {\n this.br.shell.menuProviders['experiments'] = {\n id: 'experiments',\n icon: html`\n <img src=\"${this.br.options.imagesBaseURL}/icon_experiment.svg\" alt=\"\" width=\"26\"/>\n `,\n label: 'Experiments',\n component: html`<br-experiments-panel\n .experiments=\"${this.allExperiments.filter(experiment => this.options.availableExperiments.includes(experiment.name))}\"\n @connected=\"${e => this._panel = e.target}\"\n @toggle=\"${async e => {\n await this._toggleExperiment(e.detail.experiment, e.detail.enabled);\n this._saveExperimentStates();\n }}\"\n />`,\n };\n this.br.shell.updateMenuContents();\n }\n}\nBookReader?.registerPlugin('experiments', ExperimentsPlugin);\n\n@customElement('br-experiments-panel')\nexport class BrExperimentsPanel extends LitElement {\n\n /** @type {ExperimentModel[]} */\n @property({ type: Array }) experiments = [];\n\n render() {\n return html`\n <div style=\"padding: 10px\">\n ${this.experiments.map(\n experiment => html`\n <br-experiment-toggle\n .icon=\"${experiment.icon}\"\n .title=\"${experiment.title}\"\n .description=\"${experiment.description}\"\n .enabled=\"${experiment.enabled}\"\n .loading=\"${experiment.enabledLoading}\"\n .learnMore=\"${experiment.learnMore}\"\n @toggle=\"${e => this._dispatchToggle(experiment, e.detail.enabled)}\"\n ></br-experiment-toggle>\n `,\n )}\n </div>\n `;\n }\n\n /**\n * @param {ExperimentModel} experiment\n * @param {boolean} enabled\n */\n async _dispatchToggle(experiment, enabled) {\n this.dispatchEvent(new CustomEvent('toggle', {\n detail: { experiment, enabled },\n }));\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.dispatchEvent(new CustomEvent('connected'));\n }\n}\n\n@customElement('br-experiment-toggle')\nexport class BrExperimentToggle extends LitElement {\n @property({ type: String }) icon = '';\n @property({ type: String }) title = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) enabled = false;\n @property({ type: Boolean }) loading = false;\n @property({ type: String }) learnMore = '';\n\n /**\n * We want to disable the button immediately if loading, but only display\n * the loading indicator after 200ms.\n */\n @state() _longLoading = false;\n\n /** @override */\n update(changedProperties) {\n super.update(changedProperties);\n if (changedProperties.has('loading')) {\n if (this.loading) {\n sleep(500).then(() => {\n if (this.loading) {\n this._longLoading = true;\n this.requestUpdate();\n }\n });\n } else {\n this._longLoading = false;\n }\n }\n }\n\n render() {\n return html`\n <div class=\"experiment-card\" style=\"margin-bottom: 10px;\">\n <div style=\"display: flex; align-items: center; gap: 10px;\">\n ${this.icon ? html`<img src=\"${this.icon}\" style=\"width: 20px; height: 20px;\" alt=\"\" />` : ''}\n <div style=\"flex-grow: 1; font-weight: bold;\">${this.title}</div>\n </div>\n <p style=\"opacity: 0.9\">\n ${this.description}\n ${this.learnMore ? html`<a href=\"${this.learnMore}\" target=\"_blank\">Learn more</a>.` : ''}\n </p>\n <div style=\"display: flex\">\n <div style=\"flex-grow: 1;\"></div>\n <button @click=\"${this._dispatchToggle}\" .disabled=\"${this.loading}\">\n ${this._longLoading ? 'Loading…' : this.enabled ? 'Disable' : 'Enable'}\n </button>\n </div>\n </div>\n `;\n }\n\n static get styles() {\n return css`\n .experiment-card {\n border-radius: 8px;\n background-color: #fff2;\n padding: 10px;\n display: flex;\n flex-direction: column;\n }\n\n .experiment-card p {\n margin: 6px 0;\n }\n `;\n }\n\n _dispatchToggle() {\n this.dispatchEvent(new CustomEvent('toggle', { detail: { enabled: !this.enabled } }));\n }\n}\n\n/**\n * @param {string} url\n */\nasync function importAsScript(url) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = url;\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(`Failed to load script: ${url}`));\n document.head.appendChild(script);\n });\n}\n"],"names":["$","__webpack_require__","iterate","createProperty","target","stat","fromEntries","iterable","obj","k","v","AS_ENTRIES","BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","BookReader","window","ExperimentModel","_defineProperty","buildAssetPath","path","concat","assetRoot","enable","_ref","manual","disable","ExperimentsPlugin","super","arguments","enabled","localStorageKey","availableExperiments","autoEnabledExperiments","_ref2","_ref2$manual","plugins","textSelection","textSelectionManager","selectMenu","copyLinkToHighlightEnabled","_ref3","_ref3$manual","highlightAnnotationEnabled","sleep","then","location","reload","_ref4","PLUGINS","translate","importAsScript","initializePlugin","_ref5","_ref5$manual","configScript","document","createElement","type","className","textContent","JSON","stringify","openSidebar","head","appendChild","experiment","allExperiments","imagesBaseURL","replace","icon","includes","name","_loadExperimentStates","Promise","resolve","_render","isEnabled","experimentName","find","exp","savedStates","parse","localStorage","getItem","forEach","undefined","_saveExperimentStates","states","map","setItem","_toggleExperiment","_this$br$plugins$arch","enabledLoading","archiveAnalytics","sendEvent","_panel","requestUpdate","shell","menuProviders","id","html","_templateObject","_taggedTemplateLiteral","label","component","_templateObject2","filter","e","async","detail","updateMenuContents","registerPlugin","BrExperimentsPanel","_decorate","customElement","_initialize","_LitElement","F","d","kind","decorators","property","Array","key","value","_templateObject3","experiments","_templateObject4","title","description","learnMore","_dispatchToggle","dispatchEvent","CustomEvent","_superPropGet","LitElement","BrExperimentToggle","_initialize2","_LitElement2","String","Boolean","state","changedProperties","has","loading","_longLoading","_templateObject5","_templateObject6","_templateObject7","static","css","_templateObject8","url","reject","script","src","onload","onerror","Error"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[240];export const __webpack_esm_modules__={6869:(e,t,r)=>{r.d(t,{S:()=>a});class a{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},4842:(e,t,r)=>{r.d(t,{c:()=>i}),r(3792),r(2953);var a=r(5312),o=r(6869);const n="bookReaderFragmentChange";class i extends o.S{constructor(){var e,t,r;super(...arguments),e=this,r={enabled:!0},(t=function(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}(t="options"))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}init(){this.options.enabled&&window.parent&&(this.br.bind(a.q.fragmentChange,()=>{const e=this.br.fragmentFromParams(this.br.paramsFromCurrent());window.parent.postMessage({type:n,fragment:e},"*")}),window.addEventListener("message",e=>{e.data&&e.data.type===n&&this.br.updateFromParams(this.br.paramsFromFragment(e.data.fragment))}))}}const s=window.BookReader;null==s||s.registerPlugin("iframe",i)}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});const t=e(4842).c;export{t as IframePlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.iframe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.iframe.js","mappings":"6GAMO,MAAMA,EAIXC,WAAAA,CAAYC,GAEVC,KAAKD,GAAKA,EAEVC,KAAKC,OACP,CAMAC,KAAAA,CAAMD,GACJD,KAAKC,QAAUE,OAAOC,OAAO,CAAC,EAAGJ,KAAKC,QAASA,EACjD,CAGAI,IAAAA,GAAQ,CAORC,uBAAAA,CAAwBC,GACxB,CAOAC,iBAAAA,CAAkBC,GAClB,CAGAC,uBAAAA,GAA2B,CAK3BC,YAAAA,CAAaC,GAAU,E,0EC9CzB,MAAMC,EAA+B,2BAS9B,MAAMC,UAAqBjB,EAAAA,EAAiBC,WAAAA,G,UAAAiB,SAAAC,W,EAAAhB,K,EACvC,CACRiB,SAAS,I,kSAFsC,c,uFAGhD,CAGDZ,IAAAA,GAEOL,KAAKC,QAAQgB,SAAYC,OAAOC,SAIrCnB,KAAKD,GAAGqB,KAAKC,EAAAA,EAAOC,eAAgB,KAClC,MAAMC,EAAWvB,KAAKD,GAAGyB,mBAAmBxB,KAAKD,GAAG0B,qBAEpDP,OAAOC,OAAOO,YACZ,CAAEC,KAAMd,EAA8BU,YACtC,OAIJL,OAAOU,iBAAiB,UAAWC,IAE5BA,EAAMC,MAAQD,EAAMC,KAAKH,OAASd,GAIvCb,KAAKD,GAAGgC,iBAAiB/B,KAAKD,GAAGiC,mBAAmBH,EAAMC,KAAKP,aAEnE,EAGF,MAAMU,EAAmEf,OAAOe,WAChFA,SAAAA,EAAYC,eAAe,SAAUpB,E","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.iframe.js"],"sourcesContent":["// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","// @ts-check\nimport { EVENTS } from '../BookReader/events.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\n\nconst MESSAGE_TYPE_FRAGMENT_CHANGE = 'bookReaderFragmentChange';\n\n/**\n * Plugin for two-way communication between a BookReader in an IFrame and the\n * parent web page. Using window.postMessage() and event listeners, the\n * plugin notifies the parent window when pages change, and the parent\n * window can also explicitly request a page change by sending its own\n * message.\n */\nexport class IframePlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n }\n\n /** @override */\n init() {\n // Not enabled, or not embedded, abort\n if (!this.options.enabled || !window.parent) {\n return;\n }\n\n this.br.bind(EVENTS.fragmentChange, () => {\n const fragment = this.br.fragmentFromParams(this.br.paramsFromCurrent());\n\n window.parent.postMessage(\n { type: MESSAGE_TYPE_FRAGMENT_CHANGE, fragment },\n '*',\n );\n });\n\n window.addEventListener('message', event => {\n // Not a recognized message type, abort\n if (!event.data || event.data.type !== MESSAGE_TYPE_FRAGMENT_CHANGE) {\n return;\n }\n\n this.br.updateFromParams(this.br.paramsFromFragment(event.data.fragment));\n });\n }\n}\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\nBookReader?.registerPlugin('iframe', IframePlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","MESSAGE_TYPE_FRAGMENT_CHANGE","IframePlugin","super","arguments","enabled","window","parent","bind","EVENTS","fragmentChange","fragment","fragmentFromParams","paramsFromCurrent","postMessage","type","addEventListener","event","data","updateFromParams","paramsFromFragment","BookReader","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[69];export const __webpack_esm_modules__={6869:(t,e,i)=>{i.d(e,{S:()=>o});class o{constructor(t){this.br=t,this.options}setup(t){this.options=Object.assign({},this.options,t)}init(){}_configurePageContainer(t){}_configureToolbar(t){}_bindNavigationHandlers(){}extendNavBar(t){}}},331:(t,e,i)=>{i.d(e,{b:()=>s}),i(3792),i(2953);var o=i(6869);const n=window.BookReader;class s extends o.S{constructor(){var t,e,i;super(...arguments),t=this,i={enabled:!0,manifest:null},(e=function(t){var e=function(t){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,"string");if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}(e="options"))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i}setup(t){super.setup(t),this.manifest=this.options.manifest,this.options.enabled&&Object.assign(this.br.options,this.load())}load(){if("http://iiif.io/api/presentation/2/context.json"==this.manifest["@context"]){const t=this.manifest;return this.manifestToBookReaderV2(t)}if("http://iiif.io/api/presentation/3/context.json"==this.manifest["@context"]){const t=this.manifest;return this.manifestToBookReaderV3(t)}throw new Error("Unsupported IIIF context "+this.manifest["@context"])}manifestToBookReaderV3(t){const e={bookTitle:a(t.label),pageProgression:"right-to-left"==t.viewingDirection?"rl":"lr",metadata:(t.metadata||[]).map(t=>({label:a(t.label),value:a(t.value)})),data:[],getPageURI(e,i,o){const n=Math.floor(100/i),s=t.items[e].items[0].items[0].body,a=(s instanceof Array?s[0]:s).service[0].id;return"".concat(a,"/full/pct:").concat(n,"/0/default.jpg")}};"top-to-bottom"!=t.viewingDirection&&"bottom-to-top"!=t.viewingDirection||console.warn("Unsupported viewingDirection",t.viewingDirection);let i=[];return t.items.forEach((o,n)=>{const s=t.items[n].items[0].items[0].body,r={uri:(s instanceof Array?s[0]:s).service[0].id,width:o.width,height:o.height,pageNum:a(o.label)};i.push(r),n%2==0&&(e.data.push(i),i=[])}),i.length>0&&e.data.push(i),e}manifestToBookReaderV2(t){var e;const i={bookTitle:t.label,metadata:t.metadata,thumbnail:null===(e=t.thumbnail)||void 0===e?void 0:e["@id"],data:[],getPageURI(e,i,o){const n=Math.floor(100/i),s=t.sequences[0].canvases[e].images[0].resource.service["@id"];return"".concat(s,"/full/pct:").concat(n,"/0/default.jpg")}};let o=[];return t.sequences[0].canvases.forEach((t,e)=>{const n={uri:t.images[0].resource.service["@id"],width:t.width,height:t.height,pageNum:t.label};o.push(n),e%2==0&&(i.data.push(o),o=[])}),o.length>0&&i.data.push(o),i}}function a(t){const e=Object.keys(t)[0];return(t[navigator.language]||t[e])[0]}null==n||n.registerPlugin("iiif",s)}};import{__webpack_require__ as t}from"../ia-bookreader.js";t.C({__webpack_esm_ids__,__webpack_esm_modules__});const e=t(331).b;export{e as IiifPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.iiif.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.iiif.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.iiif.js"],"sourcesContent":["// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","// @ts-check\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n/**\n * @extends BookReaderPlugin<IiifPlugin['options']>\n */\nexport class IiifPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {import('@iiif/presentation-3').Manifest | import('@iiif/presentation-2').Manifest | null} */\n manifest: null,\n }\n\n /**\n * @param {IiifPlugin['options']} options\n */\n setup(options) {\n super.setup(options);\n this.manifest = this.options.manifest;\n\n if (this.options.enabled) {\n Object.assign(this.br.options, this.load());\n }\n }\n\n load() {\n if (this.manifest[\"@context\"] == \"http://iiif.io/api/presentation/2/context.json\") {\n const manifest = /** @type {import('@iiif/presentation-2').Manifest} */(this.manifest);\n return this.manifestToBookReaderV2(manifest);\n } else if (this.manifest[\"@context\"] == \"http://iiif.io/api/presentation/3/context.json\") {\n const manifest = /** @type {import('@iiif/presentation-3').Manifest} */(this.manifest);\n return this.manifestToBookReaderV3(manifest);\n } else {\n throw new Error(\"Unsupported IIIF context \" + this.manifest[\"@context\"]);\n }\n }\n\n /**\n * @param {import('@iiif/presentation-3').Manifest} manifest\n */\n manifestToBookReaderV3(manifest) {\n /** @type {import('../BookReader/options.js').BookReaderOptions} */\n const book = {\n bookTitle: resolveInternationalString(manifest.label),\n pageProgression: manifest.viewingDirection == \"right-to-left\" ? \"rl\" : \"lr\",\n // numLeafs: manifest.items.length,\n metadata: (manifest.metadata || []).map((metadata) => {\n return {\n label: resolveInternationalString(metadata.label),\n value: resolveInternationalString(metadata.value),\n };\n }),\n data: [],\n /**\n * @this {import('../BookReader.js').default}\n */\n getPageURI(pageIndex, reduce, rotate) {\n const percent = Math.floor(100 * 1 / reduce);\n const bodyArr = manifest.items[pageIndex].items[0].items[0].body;\n const body = bodyArr instanceof Array ? bodyArr[0] : bodyArr;\n const uri = body.service[0].id;\n return `${uri}/full/pct:${percent}/0/default.jpg`;\n },\n };\n\n if (manifest.viewingDirection == \"top-to-bottom\" || manifest.viewingDirection == \"bottom-to-top\") {\n console.warn(\"Unsupported viewingDirection\", manifest.viewingDirection);\n }\n\n let spread = [];\n manifest.items.forEach((item, index) => {\n const bodyArr = manifest.items[index].items[0].items[0].body;\n const body = bodyArr instanceof Array ? bodyArr[0] : bodyArr;\n const uri = body.service[0].id;\n /** @type {import('../BookReader/options.js').PageData} */\n const pageData = {\n uri,\n width: item.width,\n height: item.height,\n pageNum: resolveInternationalString(item.label),\n };\n spread.push(pageData);\n if (index % 2 == 0) {\n book.data.push(spread);\n spread = [];\n }\n });\n if (spread.length > 0) {\n book.data.push(spread);\n }\n return book;\n }\n\n /**\n * @param {import('@iiif/presentation-2').Manifest} manifest\n */\n manifestToBookReaderV2(manifest) {\n /** @type {import('../BookReader/options.js').BookReaderOptions} */\n const book = {\n bookTitle: manifest.label,\n metadata: manifest.metadata,\n thumbnail: manifest.thumbnail?.['@id'],\n // numLeafs: manifest.sequences[0].canvases.length,\n data: [],\n /**\n * @this {import('../BookReader.js').default}\n */\n getPageURI(pageIndex, reduce, rotate) {\n const percent = Math.floor(100 * 1 / reduce);\n const uri = manifest.sequences[0].canvases[pageIndex].images[0].resource.service['@id'];\n return `${uri}/full/pct:${percent}/0/default.jpg`;\n },\n };\n\n let spread = [];\n manifest.sequences[0].canvases.forEach((canvas, index) => {\n /** @type {import('../BookReader/options.js').PageData} */\n const pageData = {\n uri: canvas.images[0].resource.service['@id'],\n width: canvas.width,\n height: canvas.height,\n pageNum: canvas.label,\n };\n spread.push(pageData);\n if (index % 2 == 0) {\n book.data.push(spread);\n spread = [];\n }\n });\n if (spread.length > 0) {\n book.data.push(spread);\n }\n return book;\n }\n}\n\n/**\n * @param {import('@iiif/presentation-3').InternationalString} internationalString\n */\nfunction resolveInternationalString(internationalString) {\n const anyLang = Object.keys(internationalString)[0];\n return (internationalString[navigator.language] || internationalString[anyLang])[0];\n}\n\nBookReader?.registerPlugin('iiif', IiifPlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","BookReader","window","IiifPlugin","super","arguments","enabled","manifest","load","manifestToBookReaderV2","manifestToBookReaderV3","Error","book","bookTitle","resolveInternationalString","label","pageProgression","viewingDirection","metadata","map","value","data","getPageURI","pageIndex","reduce","rotate","percent","Math","floor","bodyArr","items","body","uri","Array","service","id","concat","console","warn","spread","forEach","item","index","pageData","width","height","pageNum","push","length","_manifest$thumbnail","thumbnail","sequences","canvases","images","resource","canvas","internationalString","anyLang","keys","navigator","language","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const __webpack_esm_ids__=[555];export const __webpack_esm_modules__={6869:(e,o,t)=>{t.d(o,{S:()=>n});class n{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},2784:(e,o,t)=>{t.d(o,{V:()=>l});var n={};t.r(n),t.d(n,{areCookiesBlocked:()=>a,getItem:()=>c,removeItem:()=>m,setItem:()=>u}),t(3792),t(7495),t(2953);var r=t(5312),i=t(6869);function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;try{return e.cookie,!1}catch(e){return!0}}t(4864),t(5440);const s=a();function c(e){return s||!e?null:decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null}function u(e,o,t,n,r,i){return!s&&(document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(o)+(t?"; expires=".concat(t.toUTCString()):"")+(r?"; domain=".concat(r):"")+(n?"; path=".concat(n):"")+(i?"; secure":""),!0)}function m(e,o,t){return!s&&!!hasItem(e)&&(document.cookie=encodeURIComponent(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT"+(t?"; domain=".concat(t):"")+(o?"; path=".concat(o):""),!0)}var d;BookReader.docCookies=n;class l extends i.S{constructor(){var e,o,t;super(...arguments),e=this,t={enabled:!0,cookiePath:null},(o=function(e){var o=function(e){if("object"!=typeof e||!e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var t=o.call(e,"string");if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof o?o:o+""}(o="options"))in e?Object.defineProperty(e,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[o]=t}init(){this.options.enabled&&this.br.bind(r.q.fragmentChange,()=>{const e=this.br.paramsFromCurrent();this.updateResumeValue(e.index)})}getResumeValue(){const e=BookReader.docCookies.getItem("br-resume");return null!==e?parseInt(e):null}getCookiePath(e){return e.match(".+?(?=/page/|/mode/|$)")[0]}updateResumeValue(e,o){const t=new Date(+new Date+12096e5),n=this.options.cookiePath||this.getCookiePath(window.location.pathname);BookReader.docCookies.setItem(o||"br-resume",e,t,n,null,!1)}}null===(d=BookReader)||void 0===d||d.registerPlugin("resume",l)}};import{__webpack_require__ as e}from"../ia-bookreader.js";e.C({__webpack_esm_ids__,__webpack_esm_modules__});const o=e(2784).V;export{o as ResumePlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.resume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.resume.js","mappings":"6GAMO,MAAMA,EAIXC,WAAAA,CAAYC,GAEVC,KAAKD,GAAKA,EAEVC,KAAKC,OACP,CAMAC,KAAAA,CAAMD,GACJD,KAAKC,QAAUE,OAAOC,OAAO,CAAC,EAAGJ,KAAKC,QAASA,EACjD,CAGAI,IAAAA,GAAQ,CAORC,uBAAAA,CAAwBC,GACxB,CAOAC,iBAAAA,CAAkBC,GAClB,CAGAC,uBAAAA,GAA2B,CAK3BC,YAAAA,CAAaC,GAAU,E,gLClClB,SAASC,IAAkC,IAAhBC,EAAGC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGG,SACtC,IAEE,OADAJ,EAAIK,QACG,CACT,CAAE,MAAOC,GACP,OAAO,CACT,CACF,C,gBAEA,MAAMC,EAAkBR,IASjB,SAASS,EAAQC,GACtB,OAAIF,IAAoBE,EAAa,KAE9BC,mBAELN,SAASC,OAAOM,QAAQ,IAAIC,OAAO,mBAAqBC,mBAAmBJ,GAAME,QAAQ,cAAe,QAAU,+BAAgC,QAAU,IAChK,CAcO,SAASG,EAAQL,EAAMM,EAAQC,EAAMC,EAAOC,EAASC,GAC1D,OAAIZ,IAEJH,SAASC,OAASQ,mBAAmBJ,GAAQ,IAAMI,mBAAmBE,IACnEC,EAAI,aAAAI,OAAgBJ,EAAKK,eAAkB,KAC3CH,EAAO,YAAAE,OAAeF,GAAY,KAClCD,EAAK,UAAAG,OAAaH,GAAU,KAC5BE,EAAO,WAAgB,KAEnB,EACT,CAWO,SAASG,EAAWb,EAAMQ,EAAOC,GACtC,OAAIX,KAECgB,QAAQd,KAEbL,SAASC,OAASQ,mBAAmBJ,GAAK,4CACvCS,EAAO,YAAAE,OAAeF,GAAY,KAClCD,EAAK,UAAAG,OAAaH,GAAU,KAExB,EACT,C,MC9EAO,WAAWC,WAAaA,EAKjB,MAAMC,UAAqB3C,EAAAA,EAAiBC,WAAAA,G,UAAA2C,SAAA1B,W,EAAAf,K,EACvC,CACR0C,SAAS,EAETC,WAAY,O,kSAJmC,c,uFAKhD,CAGDtC,IAAAA,GACML,KAAKC,QAAQyC,SACf1C,KAAKD,GAAG6C,KAAKC,EAAAA,EAAOC,eAAgB,KAClC,MAAMC,EAAS/C,KAAKD,GAAGiD,oBACvBhD,KAAKiD,kBAAkBF,EAAOG,QAGpC,CAQAC,cAAAA,GACE,MAAMC,EAAMd,WAAWC,WAAWjB,QAAQ,aAC1C,OAAY,OAAR8B,EAAqBC,SAASD,GACtB,IACd,CAUAE,aAAAA,CAAcC,GACZ,OAAOA,EAAYC,MAAM,0BAA0B,EACrD,CASAP,iBAAAA,CAAkBC,EAAOO,GACvB,MAAMC,EAAM,IAAIC,MAAM,IAAIA,KAAO,SAG3BC,EAAO5D,KAAKC,QAAQ0C,YACrB3C,KAAKsD,cAAcO,OAAOC,SAASC,UACxCzB,WAAWC,WAAWX,QAAQ6B,GAAc,YAAaP,EAAOQ,EAAKE,EAAM,MAAM,EACnF,EAGQ,QAAVI,EAAA1B,kBAAU,IAAA0B,GAAVA,EAAYC,eAAe,SAAUzB,E","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/util/docCookies.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.resume.js"],"sourcesContent":["// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","/**\n * Helper module use to get, set and remove item from cookie\n *\n * See more:\n * https://developer.mozilla.org/en-US/docs/Web/API/document.cookie\n * https://developer.mozilla.org/User:fusionchess\n * https://github.com/madmurphy/cookies.js\n * This framework is released under the GNU Public License, version 3 or later.\n * http://www.gnu.org/licenses/gpl-3.0-standalone.html\n */\n\n/**\n * Check to see if the browser has cookies enabled.\n * Accessing document.cookies errors if eg iframe with sandbox enabled.\n * @returns {boolean}\n */\nexport function areCookiesBlocked(doc = document) {\n try {\n doc.cookie;\n return false;\n } catch (e) {\n return true;\n }\n}\n\nconst COOKIES_BLOCKED = areCookiesBlocked();\n\n/**\n * Get specific key's value stored in cookie\n *\n * @param {string} sKey\n *\n * @returns {string|null}\n */\nexport function getItem(sKey) {\n if (COOKIES_BLOCKED || !sKey) return null;\n\n return decodeURIComponent(\n // eslint-disable-next-line no-useless-escape\n document.cookie.replace(new RegExp('(?:(?:^|.*;)\\\\s*' + encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'), '$1')) || null;\n}\n\n/**\n * Set specific key's value in cookie\n *\n * @param {string} sKey cookie name\n * @param {string} sValue cookie value\n * @param {string} [vEnd] expire|max-age\n * @param {string} [sPath] path of current item\n * @param {string} [sDomain] domain name\n * @param {boolean} [bSecure]\n *\n * @returns {boolean}\n */\nexport function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {\n if (COOKIES_BLOCKED) return false;\n\n document.cookie = encodeURIComponent(sKey) + '=' + encodeURIComponent(sValue)\n + (vEnd ? `; expires=${vEnd.toUTCString()}` : '')\n + (sDomain ? `; domain=${sDomain}` : '')\n + (sPath ? `; path=${sPath}` : '')\n + (bSecure ? `; secure` : '');\n\n return true;\n}\n\n/**\n * BROKEN Remove specific key's value from cookie\n * @fixme hasItem isn't even implemented! This will always error.\n * @param {string} sKey cookie name\n * @param {string} [sPath] path of current item\n * @param {string} [sDomain]\n *\n * @returns {boolean}\n */\nexport function removeItem(sKey, sPath, sDomain) {\n if (COOKIES_BLOCKED) return false;\n // eslint-disable-next-line\n if (!hasItem(sKey)) return false;\n\n document.cookie = encodeURIComponent(sKey) + `=; expires=Thu, 01 Jan 1970 00:00:00 GMT`\n + (sDomain ? `; domain=${sDomain}` : '')\n + (sPath ? `; path=${sPath}` : '');\n\n return true;\n}\n","import { EVENTS } from '../BookReader/events.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport * as docCookies from '../util/docCookies.js';\n\n/* global BookReader */\n\n/** @deprecated Exposed for backward compatibility */\nBookReader.docCookies = docCookies;\n\n/**\n * Plugin to remember the current page number in a cookie\n */\nexport class ResumePlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {string|null} eg '/', '/details/id' */\n cookiePath: null,\n }\n\n /** @override */\n init() {\n if (this.options.enabled) {\n this.br.bind(EVENTS.fragmentChange, () => {\n const params = this.br.paramsFromCurrent();\n this.updateResumeValue(params.index);\n });\n }\n }\n\n /**\n * Gets page resume value, for remembering reader's page\n * Can be overridden for different implementation\n *\n * @return {number|null}\n */\n getResumeValue() {\n const val = BookReader.docCookies.getItem('br-resume');\n if (val !== null) return parseInt(val);\n else return null;\n }\n\n /**\n * Return cookie path using pathname up to /page/... or /mode/...\n * using window.location.pathname for urlPathPart:\n * - matches encoding\n * - ignores querystring part\n * - ignores fragment part (after #)\n * @param {string} urlPathPart - window.location.pathname\n */\n getCookiePath(urlPathPart) {\n return urlPathPart.match('.+?(?=/page/|/mode/|$)')[0];\n }\n\n /**\n * Sets page resume value, for remembering reader's page\n * Can be overridden for different implementation\n *\n * @param {Number} index leaf index\n * @param {string} [cookieName]\n */\n updateResumeValue(index, cookieName) {\n const ttl = new Date(+new Date + 12096e5); // 2 weeks\n // For multiple files in item, leave cookiePath blank\n // It's likely we can remove cookiePath using getCookiePath()\n const path = this.options.cookiePath\n || this.getCookiePath(window.location.pathname);\n BookReader.docCookies.setItem(cookieName || 'br-resume', index, ttl, path, null, false);\n }\n}\n\nBookReader?.registerPlugin('resume', ResumePlugin);\n"],"names":["BookReaderPlugin","constructor","br","this","options","setup","Object","assign","init","_configurePageContainer","pageContainer","_configureToolbar","$toolbarElement","_bindNavigationHandlers","extendNavBar","$navBar","areCookiesBlocked","doc","arguments","length","undefined","document","cookie","e","COOKIES_BLOCKED","getItem","sKey","decodeURIComponent","replace","RegExp","encodeURIComponent","setItem","sValue","vEnd","sPath","sDomain","bSecure","concat","toUTCString","removeItem","hasItem","BookReader","docCookies","ResumePlugin","super","enabled","cookiePath","bind","EVENTS","fragmentChange","params","paramsFromCurrent","updateResumeValue","index","getResumeValue","val","parseInt","getCookiePath","urlPathPart","match","cookieName","ttl","Date","path","window","location","pathname","_BookReader","registerPlugin"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{default as e}from"iso-language-codes";export const __webpack_esm_ids__=[924];export const __webpack_esm_modules__={706:(e,t,r)=>{var n=r(350).PROPER,s=r(9039),a=r(7452);e.exports=function(e){return s(function(){return!!a[e]()||"
"!=="
"[e]()||n&&a[e].name!==e})}},3802:(e,t,r)=>{var n=r(9504),s=r(7750),a=r(655),i=r(7452),o=n("".replace),c=RegExp("^["+i+"]+"),h=RegExp("(^|[^"+i+"])["+i+"]+$"),l=function(e){return function(t){var r=a(s(t));return 1&e&&(r=o(r,c,"")),2&e&&(r=o(r,h,"$1")),r}};e.exports={start:l(1),end:l(2),Bq:l(3)}},7452:e=>{e.exports="\t\n\v\f\r \u2028\u2029\ufeff"},2762:(e,t,r)=>{var n=r(6518),s=r(3802).Bq;n({target:"String",proto:!0,forced:r(706)("trim")},{trim:function(){return s(this)}})},6869:(e,t,r)=>{r.d(t,{S:()=>n});class n{constructor(e){this.br=e,this.options}setup(e){this.options=Object.assign({},this.options,e)}init(){}_configurePageContainer(e){}_configureToolbar(e){}_bindNavigationHandlers(){}extendNavBar(e){}}},631:(e,t,r)=>{r.d(t,{u:()=>v}),r(9463),r(3792),r(3362),r(7495),r(5440),r(2953);var n=r(9880),s=r(1391),a=r(1669);const i=class{constructor(e){let t=e.br,r=e.searchCancelledCallback,n=void 0===r?()=>{}:r;this.br=t,this.matches=[],this.cacheDOMElements(),this.cancelSearch=n}init(){this.bindEvents()}cacheDOMElements(){this.dom={},this.dom.toolbarSearch=this.buildToolbarSearch()}setQuery(e){this.br.$('[name="query"]').val(e)}emptyMatches(){this.matches=[]}removeResultPins(){this.br.$(".BRnavpos .BRsearch").remove()}clearSearchFieldAndResults(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.br.plugins.search.removeSearchResults(),this.removeResultPins(),this.emptyMatches(),this.setQuery(""),this.teardownSearchNavigation(),e&&this.br.trigger("SearchResultsCleared")}toggleSidebar(){this.br.trigger("ToggleSearchMenu")}renderSearchNavigation(){const e="BRsearch-navigation";a(".BRnav.BRnavMain").before('\n <div class="'.concat(e,'">\n <button class="toggle-sidebar">\n <h4>\n <span class="icon icon-search"></span> Results\n </h4>\n </button>\n <div class="pagination">\n <button class="prev" title="Previous result"><span class="icon icon-chevron hflip"></span></button>\n <span data-id="resultsCount">').concat(this.resultsPosition(),'</span>\n <button class="next" title="Next result"><span class="icon icon-chevron"></button>\n </div>\n <button class="clear" title="Clear search results">\n <span class="icon icon-close"></span>\n </button>\n </div>\n ')),this.dom.searchNavigation=a(".".concat(e))}resultsPosition(){let e="".concat(this.matches.length," result").concat(1===this.matches.length?"":"s");return~this.currentMatchIndex&&(e="".concat(this.currentMatchIndex+1," / ").concat(this.matches.length)),e}bindSearchNavigationEvents(){if(!this.dom.searchNavigation)return;const e="searchNavigation";this.dom.searchNavigation.on("click.".concat(e),".clear",this.clearSearchFieldAndResults.bind(this)).on("click.".concat(e),".prev",this.showPrevResult.bind(this)).on("click.".concat(e),".next",this.showNextResult.bind(this)).on("click.".concat(e),".toggle-sidebar",this.toggleSidebar.bind(this)).on("click.".concat(e),!1)}showPrevResult(){0!==this.currentMatchIndex&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((e,t,r)=>t[0]>r)+1),this.br.$(".BRnavline .BRsearch").eq(--this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}showNextResult(){this.currentMatchIndex+1!==this.matches.length&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((e,t,r)=>e[e.length-1]>r)-1),this.br.$(".BRnavline .BRsearch").eq(++this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}getClosestMatchIndex(e){const t=this.matches.map(e=>e.par[0].page),r=this.br.currentIndex()+1,n=(t,r)=>{if(1===t.length)return t[0];const s=t.slice(0,t.length/2),a=t.slice(t.length/2);return n(e(s,a,r)?s:a,r)},s=n(t,r);return this.matches.indexOf(this.matches.find(e=>e.par[0].page===s))}updateResultsPosition(){this.dom.searchNavigation&&this.dom.searchNavigation.find("[data-id=resultsCount]").text(this.resultsPosition())}updateSearchNavigationButtons(){this.dom.searchNavigation&&(this.dom.searchNavigation.find(".prev").attr("disabled",!this.currentMatchIndex),this.dom.searchNavigation.find(".next").attr("disabled",this.currentMatchIndex+1===this.matches.length))}teardownSearchNavigation(){this.dom.searchNavigation||(this.dom.searchNavigation=a(".BRsearch-navigation")),this.dom.searchNavigation.length&&(this.dom.searchNavigation.off(".searchNavigation").remove(),this.dom.searchNavigation=null,this.br.resize())}setCurrentMatchIndex(){let e;this.br.mode!==this.br.constModeThumb?(e=this.br.mode===this.br.constMode2up?this.find2upMatchingSearchResult():this.find1upMatchingSearchResult(),this.currentMatchIndex=this.matches.indexOf(e)):this.currentMatchIndex=-1}find1upMatchingSearchResult(){return this.matches.find(e=>this.br.currentIndex()===e.par[0].page-1)}find2upMatchingSearchResult(){return this.matches.find(e=>this.br._isIndexDisplayed(e.par[0].page-1))}updateSearchNavigation(){this.matches.length&&(this.setCurrentMatchIndex(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}togglePinsFor(e){const t=e?"visible":"hidden";this.br.refs.$BRfooter.find(".BRsearch").css({visibility:t})}buildToolbarSearch(){const e=document.createElement("span");return e.classList.add("BRtoolbarSection","BRtoolbarSectionSearch"),e.innerHTML='\n <form class="BRbooksearch desktop">\n <input type="search" name="query" class="BRsearchInput" value="" placeholder="Search inside"/>\n <button type="submit" class="BRsearchSubmit">\n <img src="'.concat(this.br.options.imagesBaseURL,'icon_search_button.svg" />\n </button>\n </form>\n '),e}renderPins(e){e.forEach(e=>{const t=this.br.book.leafNumToIndex(e.par[0].page),r=this.br.constructor.util.cssPercentage(t,this.br.book.getNumLeafs()-1);let n=e.html;if(n.length>200){const t=Math.max(0,n.indexOf("<mark>")-100);0!=t&&(n="…"+e.html.substring(t).replace(/^\S+/,""))}a("<div>").addClass("BRsearch").css({left:r}).attr("title","Search result").append('\n <div class="BRquery">\n <main>'.concat(n,"</main>\n <footer>Page ").concat(e.displayPageNumber,"</footer>\n </div>\n ")).appendTo(this.br.$(".BRnavline")).on("mouseenter",e=>{const t=e.currentTarget,r=t.querySelector(".BRquery"),n=r.getBoundingClientRect(),s=t.getBoundingClientRect(),i=2*parseInt(getComputedStyle(r).paddingLeft);n.x-i<0&&r.style.setProperty("transform","translateX(-".concat(s.left-i,"px)")),a(".BRsearch,.BRchapter").removeClass("front"),a(e.target).addClass("front")}).on("mouseleave",e=>a(e.target).removeClass("front")).on("click",()=>{this.br.plugins.search.jumpToMatch(e.matchIndex)})})}toggleSearchPending(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]?this.br.showProgressPopup("Search results will appear below...",()=>this.progressPopupClosed()):this.br.removeProgressPopup()}progressPopupClosed(){this.toggleSearchPending(),this.cancelSearch()}renderErrorModal(){const e="".concat(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?"":"The text may still be processing. ","Please try again.");this.renderModalMessage("\n Sorry, there was an error with your search.\n <br />\n ".concat(e,"\n ")),this.delayModalRemovalFor(4e3)}renderBookNotIndexedModal(){this.renderModalMessage("\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n "),this.delayModalRemovalFor(5e3)}renderResultsEmptyModal(){this.renderModalMessage("No matches were found."),this.delayModalRemovalFor(2e3)}renderModalMessage(e){const t=document.createElement("div");t.classList.add("BRprogresspopup","search_modal"),t.innerHTML=e,this.br.refs.$br[0].append(t)}delayModalRemovalFor(e){setTimeout(this.br.removeProgressPopup.bind(this.br),e)}submitHandler(e){e.preventDefault();const t=e.target.querySelector('[name="query"]').value;return!!t.length&&(this.br.search(t),this.emptyMatches(),this.toggleSearchPending(!0),!1)}handleSearchCallback(e,t){let r=t.results,n=t.options;this.matches=r.matches,this.setCurrentMatchIndex(),this.teardownSearchNavigation(),this.renderSearchNavigation(),this.bindSearchNavigationEvents(),this.renderPins(r.matches),this.toggleSearchPending(!1),n.goToFirstResult?a(document).one("BookReader:pageChanged",()=>{this.br.resize()}):this.br.resize()}handleSearchStarted(){this.emptyMatches(),this.br.plugins.search.removeSearchHilites(),this.removeResultPins(),this.toggleSearchPending(!0),this.teardownSearchNavigation(),this.setQuery(this.br.plugins.search.searchTerm)}handleSearchCallbackError(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.toggleSearchPending(!1);const r=null==t||null===(e=t.detail)||void 0===e||null===(e=e.props)||void 0===e||null===(e=e.results)||void 0===e?void 0:e.indexed;this.renderErrorModal(r)}handleSearchCallbackBookNotIndexed(){this.toggleSearchPending(!1),this.renderBookNotIndexedModal()}handleSearchCallbackEmpty(){this.toggleSearchPending(!1),this.renderResultsEmptyModal()}bindEvents(){const e="BookReader:";window.addEventListener("".concat(e,"SearchCallbackError"),this.handleSearchCallbackError.bind(this)),a(document).on("".concat(e,"SearchCallback"),this.handleSearchCallback.bind(this)).on("".concat(e,"SearchStarted"),this.handleSearchStarted.bind(this)).on("".concat(e,"SearchCallbackBookNotIndexed"),this.handleSearchCallbackBookNotIndexed.bind(this)).on("".concat(e,"SearchCallbackEmpty"),this.handleSearchCallbackEmpty.bind(this)).on("".concat(e,"pageChanged"),this.updateSearchNavigation.bind(this)),this.dom.toolbarSearch.querySelector("form").addEventListener("submit",this.submitHandler.bind(this))}};function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,s,a,i,o=[],c=!0,h=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){h=!0,s=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(h)throw s}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e,t,r){const s=(0,n.Nt)((0,n.Zn)(t)),a=(0,n.Nt)((0,n.Zn)(r)),i=new RegExp("".concat(s,"([^]+?)").concat(a),"g");return(0,n.Zn)(e).replace(i,"<mark>$1</mark>").replace(/(\b)- /g,"$1")}r(4864);var l=r(6869),u=r(8965),d=r(9748),g=r(1669),b=r(1669);function p(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,s,a,i,o=[],c=!0,h=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=a.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){h=!0,s=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(h)throw s}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}const f=window.BookReader;class v extends l.S{constructor(){var e,t,r;super(...arguments),e=this,t="options",r={enabled:!0,preTag:"{{{",postTag:"}}}",searchInsideUrl:"/fulltext/inside.php?"+["q={{query|urlencode}}","pre_tag={{preTag|urlencode}}","post_tag={{postTag|urlencode}}"].join("&"),initialSearchTerm:null,goToFirstResult:!1},(t=function(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r}setup(e){super.setup(e),this.searchTerm="",this.searchResults=null,this.searchInsideUrl=this.options.searchInsideUrl,this.enabled=this.options.enabled,this.searchXHR=null,this._searchBoxesByIndex={},this.enabled?this.searchView=new i({br:this.br,searchCancelledCallback:()=>{this._cancelSearch(),this.br.trigger("SearchCanceled",{term:this.searchTerm,instance:this.br})}}):this.searchView=null}init(){var e;super.init(),this.enabled&&(this.searchView.init(),this.options.initialSearchTerm?this.search(this.options.initialSearchTerm,{goToFirstResult:this.options.goToFirstResult,suppressFragmentChange:!1}):"search"===(null===(e=this.br.urlPlugin)||void 0===e?void 0:e.getUrlParam("focus"))&&this.searchView.toggleSidebar())}_configureToolbar(e){if(this.enabled)return this.searchView.dom.toolbarSearch&&e.find(".BRtoolbarSectionInfo").after(this.searchView.dom.toolbarSearch),e}_configurePageContainer(e){if(this.enabled&&e.page&&e.page.index in this._searchBoxesByIndex){const t=e.page.index,r=this._searchBoxesByIndex[t];(0,s.KL)("searchHiliteLayer",r,e.page,e.$container[0],r.map(e=>"match-index-".concat(e.matchIndex)))}return e}async search(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=g.extend({},{goToFirstResult:!1,disablePopup:!1,suppressFragmentChange:!1,error:null,success:null},t);this.suppressFragmentChange=r.suppressFragmentChange,this.searchCancelled=!1,this.searchTerm=e.replace(/\//g," "),r.suppressFragmentChange||this.br.trigger(f.eventNames.fragmentChange);const n=(0,u.gT)(this.options.searchInsideUrl,this.br.options.vars,{query:e,preTag:this.options.preTag,postTag:this.options.postTag});this.br.trigger("SearchStarted",{term:this.searchTerm,instance:this.br}),(e=>{if(this.searchCancelled)return;const t=e.error||!e.matches.length,n="function"==typeof r.error,s="function"==typeof r.success;t?(console.error("Search Inside Response Error",e.error||"matches.length == 0"),n?r.error.call(this,e,r):this.BRSearchCallbackError(e)):s?r.success.call(this,e,r):this.BRSearchCallback(e,r)})(await b.ajax({url:n,cache:!0,xhrFields:{withCredentials:this.br.protected},beforeSend:e=>{this.searchXHR=e}}))}_cancelSearch(){var e;null===(e=this.searchXHR)||void 0===e||e.abort(),this.searchView.clearSearchFieldAndResults(!1),this.searchTerm="",this.searchXHR=null,this.searchCancelled=!0,this.searchResults=null}cancelSearchRequest(){this.searchCancelled=!0,null!==this.searchXHR&&(this._cancelSearch(),this.searchView.toggleSearchPending(),this.br.trigger("SearchCanceled",{term:this.searchTerm,instance:this.br}))}BRSearchCallback(e,t){const r=(0,d.YH)(this.br.options.bookLanguage);!function(e,t,r,n,s){for(const i of e.matches.entries()){var a=o(i,2);const e=a[0],c=a[1];c.matchIndex=e,c.displayPageNumber=t(c.par[0].page),c.html=h(c.text,r,n),c.lang=s;for(const t of c.par)for(const r of t.boxes)r.matchIndex=e}}(e,e=>this.br.book.getPageNum(this.br.book.leafNumToIndex(e)),this.options.preTag,this.options.postTag,r),this.searchResults=e||null,this.updateSearchHilites(),this.br.removeProgressPopup(),t.goToFirstResult&&this.jumpToMatch(0),this.br.trigger("SearchCallback",{results:e,options:t,instance:this.br})}BRSearchCallbackError(e){this._BRSearchCallbackError(e)}_BRSearchCallbackError(e){this.searchResults=e;const t={term:this.searchTerm,results:e,instance:this.br};if(e.error)this.br.trigger("SearchCallbackError",t);else if(0==e.matches.length){if(!1===e.indexed)return void this.br.trigger("SearchCallbackBookNotIndexed",t);this.br.trigger("SearchCallbackEmpty",t)}}updateSearchHilites(){var e;const t=(null===(e=this.searchResults)||void 0===e?void 0:e.matches)||[],r={};this.removeSearchHilites();for(const e of t)for(const t of e.par[0].boxes){const e=this.br.book.leafNumToIndex(t.page);(r[e]||(r[e]=[])).push(t)}for(const e of Object.entries(r)){var n=p(e,2);const t=n[0],r=n[1],a=parseFloat(t),i=this.br.book.getPage(a),o=this.br.getActivePageContainerElementsForIndex(a);for(const e of o)(0,s.KL)("searchHiliteLayer",r,i,e,r.map(e=>"match-index-".concat(e.matchIndex)))}this._searchBoxesByIndex=r}removeSearchHilites(){b(this.br.getActivePageContainerElements()).find(".searchHiliteLayer").remove()}async jumpToMatch(e){var t;const r=null===(t=this.searchResults)||void 0===t?void 0:t.matches[e],s=this.br.book,a=s.leafNumToIndex(r.par[0].page),i=s.getPage(a),o=Math.abs(this.br.currentIndex()-a)<3;await this.br.requestPage(i),this.br._isIndexDisplayed(a)||(this.suppressFragmentChange=!1,this.br.jumpToIndex(a,{ariaLive:!0,allowUnviewable:!0}));const c=await(0,n.wt)(()=>b("rect.match-index-".concat(r.matchIndex)),{until:e=>e.length>0});c.length&&(c.css("animation","none"),this.br.scrollIntoView(c[0],{block:"center",inline:"center",behavior:o?"smooth":"auto"}),await new Promise(e=>setTimeout(e,100)),c.removeAttr("style"))}removeSearchResults(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.removeSearchHilites(),this.searchTerm=null,this.searchResults=null,e||this.br.trigger(f.eventNames.fragmentChange)}}null==f||f.registerPlugin("search",v)},9748:(t,r,n)=>{n.d(r,{$x:()=>h,ND:()=>c,YH:()=>a,_4:()=>i}),n(4423),n(3792),n(3362),n(2953);const s={"zh-hans":"中文 (Zhōngwén)"};function a(e){if(!e)return null;if(e=e.toLocaleLowerCase(),s[e])return e;const t=o(e,["iso639_1"])||o(e,["iso639_2T"])||o(e,["iso639_2B","name","nativeName"]);return t?t.iso639_1:null}function i(e){if(!e)return null;if(e=e.toLocaleLowerCase(),s[e])return s[e];const t=o(e,["iso639_1"])||o(e,["iso639_2T"])||o(e,["iso639_2B","name","nativeName"]);return null!=t&&t.nativeName?t.nativeName.split(", ")[0]:null}function o(t,r){if(!t)return null;t=t.toLowerCase();for(const s of e)for(const e of r){var n;if(null!==(n=s[e])&&void 0!==n&&n.toLowerCase().split(", ").includes(t))return s}return null}function c(){try{return!!window.localStorage}catch(e){return!1}}const h=-1!=location.toString().indexOf("_debugReadAloud=true")},8965:(e,t,r)=>{function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e){const t=e.match(/\S+/g);return t?t.length:0}function a(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:i;return null==e?void 0:e.replace(/\{\{([^}]*?)\}\}/g,(e,a)=>{if(!a)return e;const i=function(e){if(Array.isArray(e))return e}(h=a.split("|").map(e=>e.trim()))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(h)||function(e,t){if(e){if("string"==typeof e)return n(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}}(h)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),o=i[0],c=n(i).slice(1);var h;if(!(o in r)&&!(o in t))return e;const l=o in r?r[o]:o in t?t[o]:null;return c.map(e=>s[e]).reduce((e,t)=>t(e),l&&l.toString())})}r.d(t,{gT:()=>a,rj:()=>s}),r(9463),r(3792),r(2712),r(7495),r(5440),r(2762),r(2953);const i={urlencode:encodeURIComponent}}};import{__webpack_require__ as t}from"../ia-bookreader.js";t.C({__webpack_esm_ids__,__webpack_esm_modules__});const r=t(631).u;export{r as SearchPlugin};
|
|
2
|
+
//# sourceMappingURL=plugin.search.js.map
|