@internetarchive/bookreader 5.0.0-11 → 5.0.0-111
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 +649 -1225
- package/BookReader/BookReader.js +1 -1
- package/BookReader/BookReader.js.LICENSE.txt +20 -20
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/bergamot-translator-worker.js +2966 -0
- package/BookReader/bergamot-translator-worker.wasm +0 -0
- package/BookReader/hypothesis/LICENSE +50 -0
- package/BookReader/hypothesis/README.md +55 -0
- package/BookReader/hypothesis/build/boot.js +1 -0
- package/BookReader/hypothesis/build/manifest.json +20 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
- package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/highlights.css +2 -0
- package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
- package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
- package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
- package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
- package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
- package/BookReader/hypothesis/package.json +126 -0
- package/BookReader/ia-bookreader-bundle.js +1904 -0
- package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
- package/BookReader/ia-bookreader-bundle.js.map +1 -0
- package/BookReader/icons/1up.svg +1 -1
- package/BookReader/icons/2up.svg +1 -1
- package/BookReader/icons/advance.svg +1 -1
- package/BookReader/icons/chevron-right.svg +1 -1
- package/BookReader/icons/close-circle-dark.svg +1 -1
- package/BookReader/icons/close-circle.svg +1 -1
- package/BookReader/icons/fullscreen.svg +1 -1
- package/BookReader/icons/fullscreen_exit.svg +1 -1
- package/BookReader/icons/hamburger.svg +1 -1
- package/BookReader/icons/left-arrow.svg +1 -1
- package/BookReader/icons/magnify-minus.svg +1 -1
- package/BookReader/icons/magnify-plus.svg +1 -1
- package/BookReader/icons/magnify.svg +1 -1
- package/BookReader/icons/pause.svg +1 -1
- package/BookReader/icons/play.svg +1 -1
- package/BookReader/icons/playback-speed.svg +1 -1
- package/BookReader/icons/read-aloud.svg +1 -1
- package/BookReader/icons/review.svg +1 -1
- package/BookReader/icons/slider-toggle.svg +1 -0
- package/BookReader/icons/thumbnails.svg +1 -1
- package/BookReader/icons/voice.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -1
- package/BookReader/images/BRicons.svg +3 -3
- package/BookReader/images/books_graphic.svg +1 -1
- package/BookReader/images/hypothesis.ico +0 -0
- package/BookReader/images/icon_book.svg +1 -1
- package/BookReader/images/icon_bookmark.svg +1 -1
- package/BookReader/images/icon_experiment.svg +1 -0
- package/BookReader/images/icon_gear.svg +1 -1
- package/BookReader/images/icon_hamburger.svg +1 -1
- package/BookReader/images/icon_home.svg +1 -1
- package/BookReader/images/icon_info.svg +1 -1
- package/BookReader/images/icon_one_page.svg +1 -1
- package/BookReader/images/icon_pause.svg +1 -1
- package/BookReader/images/icon_play.svg +1 -1
- package/BookReader/images/icon_playback-rate.svg +1 -1
- package/BookReader/images/icon_search_button.svg +1 -1
- package/BookReader/images/icon_share.svg +1 -1
- package/BookReader/images/icon_skip-ahead.svg +1 -1
- package/BookReader/images/icon_skip-back.svg +1 -1
- package/BookReader/images/icon_speaker.svg +1 -1
- package/BookReader/images/icon_speaker_open.svg +1 -1
- package/BookReader/images/icon_thumbnails.svg +1 -1
- package/BookReader/images/icon_toc.svg +1 -1
- package/BookReader/images/icon_two_pages.svg +1 -1
- package/BookReader/images/marker_chap-off.svg +1 -1
- package/BookReader/images/marker_chap-on.svg +1 -1
- package/BookReader/images/marker_srch-on.svg +1 -1
- package/BookReader/images/translate.svg +1 -0
- package/BookReader/images/unviewable_page.png +0 -0
- package/BookReader/jquery-3.js +2 -0
- package/BookReader/jquery-3.js.LICENSE.txt +24 -0
- package/BookReader/plugins/plugin.archive_analytics.js +1 -1
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -1
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +22 -1
- package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.chapters.js.map +1 -1
- package/BookReader/plugins/plugin.experiments.js +3 -0
- package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.experiments.js.map +1 -0
- package/BookReader/plugins/plugin.iframe.js +1 -1
- package/BookReader/plugins/plugin.iframe.js.map +1 -1
- package/BookReader/plugins/plugin.iiif.js +2 -0
- package/BookReader/plugins/plugin.iiif.js.map +1 -0
- package/BookReader/plugins/plugin.resume.js +1 -1
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +2 -1
- package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +24 -1
- package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.translate.js +159 -0
- package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.translate.js.map +1 -0
- package/BookReader/plugins/plugin.tts.js +1 -1
- package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +2 -1
- package/BookReader/plugins/plugin.url.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
- package/BookReader/plugins/translator-worker.js +2 -0
- package/BookReader/plugins/translator-worker.js.map +1 -0
- package/BookReader/silence.mp3 +0 -0
- package/BookReader/translator-worker.js +475 -0
- package/BookReader/webcomponents-bundle.js +3 -0
- package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
- package/BookReader/webcomponents-bundle.js.map +1 -0
- package/README.md +14 -3
- package/jsconfig.json +19 -0
- package/package.json +93 -70
- package/src/BookReader/BookModel.js +92 -46
- package/src/BookReader/DragScrollable.js +233 -0
- package/src/BookReader/ImageCache.js +49 -16
- package/src/BookReader/Mode1Up.js +66 -365
- package/src/BookReader/Mode1UpLit.js +392 -0
- package/src/BookReader/Mode2Up.js +87 -1315
- package/src/BookReader/Mode2UpLit.js +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 +201 -76
- package/src/BookReader/PageContainer.js +120 -23
- package/src/BookReader/ReduceSet.js +2 -2
- package/src/BookReader/Toolbar/Toolbar.js +18 -40
- package/src/BookReader/events.js +3 -3
- package/src/BookReader/options.js +94 -17
- package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/src/BookReader/utils/ScrollClassAdder.js +31 -0
- package/src/BookReader/utils/SelectionObserver.js +53 -0
- package/src/BookReader/utils/classes.js +1 -1
- package/src/BookReader/utils.js +136 -12
- package/src/BookReader.js +695 -1228
- package/src/BookReaderPlugin.js +52 -0
- package/src/assets/icons/magnify-minus.svg +3 -7
- package/src/assets/icons/magnify-plus.svg +3 -7
- package/src/assets/icons/slider-toggle.svg +1 -0
- package/src/assets/icons/voice.svg +1 -0
- package/src/assets/images/hypothesis.ico +0 -0
- package/src/assets/images/icon_experiment.svg +1 -0
- package/src/assets/images/translate.svg +1 -0
- package/src/assets/images/unviewable_page.png +0 -0
- package/src/assets/silence.mp3 +0 -0
- package/src/css/BookReader.scss +1 -5
- package/src/css/_BRBookmarks.scss +1 -1
- package/src/css/_BRComponent.scss +1 -1
- package/src/css/_BRicon.scss +8 -2
- package/src/css/_BRmain.scss +16 -3
- package/src/css/_BRnav.scss +74 -70
- package/src/css/_BRpages.scss +171 -42
- package/src/css/_BRsearch.scss +69 -30
- package/src/css/_BRtoolbar.scss +5 -5
- package/src/css/_TextSelection.scss +188 -24
- package/src/css/_colorbox.scss +2 -2
- package/src/css/_controls.scss +24 -7
- package/src/css/_icons.scss +8 -1
- package/src/{BookNavigator/assets → css}/button-base.js +2 -2
- package/src/css/icon_checkmark.js +9 -0
- package/src/css/sharedStyles.js +15 -0
- package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
- package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +25 -5
- package/src/ia-bookreader/ia-bookreader.js +666 -0
- package/src/ia-bookreader/sharing.js +27 -0
- package/src/ia-bookreader/viewable-files.js +98 -0
- package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
- package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
- package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
- package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
- package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +43 -31
- package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
- package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
- package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
- package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
- package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
- package/src/plugins/plugin.archive_analytics.js +84 -78
- package/src/plugins/plugin.autoplay.js +99 -104
- package/src/plugins/plugin.chapters.js +319 -205
- package/src/plugins/plugin.experiments.js +339 -0
- package/src/plugins/plugin.iframe.js +1 -1
- package/src/plugins/plugin.iiif.js +141 -0
- package/src/plugins/plugin.resume.js +54 -51
- package/src/plugins/plugin.text_selection.js +539 -219
- package/src/plugins/plugin.vendor-fullscreen.js +5 -5
- package/src/plugins/search/plugin.search.js +374 -392
- package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
- package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
- package/src/plugins/search/utils.js +50 -0
- package/src/plugins/search/view.js +50 -68
- package/src/plugins/translate/TranslationManager.js +164 -0
- package/src/plugins/translate/plugin.translate.js +512 -0
- package/src/plugins/tts/AbstractTTSEngine.js +78 -49
- package/src/plugins/tts/FestivalTTSEngine.js +20 -30
- package/src/plugins/tts/PageChunk.js +33 -21
- package/src/plugins/tts/PageChunkIterator.js +11 -17
- package/src/plugins/tts/WebTTSEngine.js +131 -91
- package/src/plugins/tts/plugin.tts.js +345 -350
- package/src/plugins/tts/utils.js +77 -49
- package/src/plugins/url/UrlPlugin.js +211 -0
- package/src/plugins/{plugin.url.js → url/plugin.url.js} +105 -20
- package/src/util/TextSelectionManager.js +532 -0
- package/src/util/browserSniffing.js +33 -1
- package/src/util/cache.js +20 -0
- package/src/util/docCookies.js +21 -2
- package/src/util/lit.js +15 -0
- package/src/util/strings.js +1 -0
- package/.babelrc +0 -12
- package/.dependabot/config.yml +0 -6
- package/.eslintrc.js +0 -50
- package/.gitattributes +0 -2
- package/.github/ISSUE_TEMPLATE/bug.md +0 -32
- package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
- package/.github/workflows/node.js.yml +0 -37
- package/.github/workflows/npm-publish.yml +0 -47
- package/.testcaferc.json +0 -5
- package/BookReader/bookreader-component-bundle.js +0 -1450
- package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
- package/BookReader/bookreader-component-bundle.js.map +0 -1
- package/BookReader/jquery-1.10.1.js +0 -2
- package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
- package/BookReader/plugins/plugin.menu_toggle.js +0 -2
- package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
- package/BookReader/plugins/plugin.mobile_nav.js +0 -2
- package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
- package/BookReaderDemo/BookReaderDemo.css +0 -41
- package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
- package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
- package/BookReaderDemo/BookReaderJSSimple.js +0 -55
- package/BookReaderDemo/IIIFBookReader.js +0 -207
- package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
- package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
- package/BookReaderDemo/demo-advanced.html +0 -33
- package/BookReaderDemo/demo-autoplay.html +0 -38
- package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
- package/BookReaderDemo/demo-embed.html +0 -26
- package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
- package/BookReaderDemo/demo-fullscreen.html +0 -33
- package/BookReaderDemo/demo-iiif.html +0 -34
- package/BookReaderDemo/demo-iiif.js +0 -26
- package/BookReaderDemo/demo-internetarchive.html +0 -74
- package/BookReaderDemo/demo-multiple.html +0 -43
- package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
- package/BookReaderDemo/demo-preview-pages.html +0 -1092
- package/BookReaderDemo/demo-simple.html +0 -34
- package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
- package/BookReaderDemo/immersion-1up.html +0 -64
- package/BookReaderDemo/immersion-mode.html +0 -35
- package/BookReaderDemo/toggle_controls.html +0 -53
- package/BookReaderDemo/view_mode.html +0 -39
- package/BookReaderDemo/viewmode-cycle.html +0 -41
- package/CHANGELOG.md +0 -495
- package/CONTRIBUTING.md +0 -7
- package/codecov.yml +0 -17
- package/index.html +0 -31
- package/karma.conf.js +0 -23
- package/screenshot.png +0 -0
- package/scripts/postversion.js +0 -10
- package/scripts/preversion.js +0 -14
- package/scripts/version.js +0 -26
- package/src/BookNavigator/BookModel.js +0 -14
- package/src/BookNavigator/BookNavigator.js +0 -446
- package/src/BookNavigator/assets/book-loader.js +0 -27
- package/src/BookNavigator/assets/icon_checkmark.js +0 -6
- package/src/BookNavigator/assets/icon_close.js +0 -3
- package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
- package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
- package/src/BookNavigator/downloads/downloads-provider.js +0 -66
- package/src/BookNavigator/search/a-search-result.js +0 -55
- package/src/BookReader/DebugConsole.js +0 -54
- package/src/BookReaderComponent/BookReaderComponent.js +0 -112
- package/src/ItemNavigator/ItemNavigator.js +0 -376
- package/src/ItemNavigator/providers/sharing.js +0 -29
- package/src/css/_MobileNav.scss +0 -194
- package/src/dragscrollable-br.js +0 -261
- package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
- package/src/plugins/plugin.mobile_nav.js +0 -287
- package/tests/BookReader/BookModel.test.js +0 -312
- package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
- package/tests/BookReader/DebugConsole.test.js +0 -25
- package/tests/BookReader/ImageCache.test.js +0 -150
- package/tests/BookReader/Mode1Up.test.js +0 -164
- package/tests/BookReader/Mode2Up.test.js +0 -247
- package/tests/BookReader/Navbar/Navbar.test.js +0 -169
- package/tests/BookReader/PageContainer.test.js +0 -115
- package/tests/BookReader/ReduceSet.test.js +0 -38
- package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
- package/tests/BookReader/utils/classes.test.js +0 -88
- package/tests/BookReader/utils.test.js +0 -109
- package/tests/BookReader.options.test.js +0 -39
- package/tests/BookReader.test.js +0 -301
- package/tests/e2e/README.md +0 -75
- package/tests/e2e/autoplay.test.js +0 -13
- package/tests/e2e/base.test.js +0 -35
- package/tests/e2e/helpers/base.js +0 -263
- package/tests/e2e/helpers/debug.js +0 -13
- package/tests/e2e/helpers/desktopSearch.js +0 -72
- package/tests/e2e/helpers/mobileSearch.js +0 -85
- package/tests/e2e/helpers/mockSearch.js +0 -93
- package/tests/e2e/helpers/rightToLeft.js +0 -29
- package/tests/e2e/ia-production/ia-prod-base.js +0 -17
- package/tests/e2e/models/BookReader.js +0 -11
- package/tests/e2e/models/Navigation.js +0 -56
- package/tests/e2e/rightToLeft.test.js +0 -20
- package/tests/e2e/viewmode.test.js +0 -37
- package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
- package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
- package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
- package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
- package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
- package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
- package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
- package/tests/plugins/plugin.archive_analytics.test.js +0 -23
- package/tests/plugins/plugin.autoplay.test.js +0 -52
- package/tests/plugins/plugin.chapters.test.js +0 -130
- package/tests/plugins/plugin.iframe.test.js +0 -42
- package/tests/plugins/plugin.mobile_nav.test.js +0 -66
- package/tests/plugins/plugin.resume.test.js +0 -98
- package/tests/plugins/plugin.text_selection.test.js +0 -203
- package/tests/plugins/plugin.url.test.js +0 -129
- package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
- package/tests/plugins/search/plugin.search.test.js +0 -173
- package/tests/plugins/search/plugin.search.view.test.js +0 -106
- package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
- package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
- package/tests/plugins/tts/PageChunk.test.js +0 -57
- package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
- package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
- package/tests/plugins/tts/utils.test.js +0 -133
- package/tests/util/browserSniffing.test.js +0 -56
- package/tests/util/docCookies.test.js +0 -15
- package/tests/util/strings.test.js +0 -63
- package/tests/utils.js +0 -42
- package/webpack.config.js +0 -86
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://@internetarchive/bookreader/./src/util/strings.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.text_selection.js","webpack://@internetarchive/bookreader/./src/util/browserSniffing.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/function-bind.js","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.object.assign.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.reflect.construct.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.reflect.get.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js"],"names":["applyVariables","template","vars","overrides","possibleFilters","APPLY_FILTERS","replace","$0","$1","split","map","x","trim","varName","filterNames","value","n","reduce","acc","cur","toString","urlencode","encodeURIComponent","BookReader","window","DEFAULT_OPTIONS","enabled","fullDjvuXmlUrl","singlePageDjvuXmlUrl","Cache","maxSize","this","entries","entry","length","shift","push","TextSelectionPlugin","options","optionVariables","avoidTspans","isFirefox","pointerEventsOnParagraph","isSafari","djvuPagesPromise","svgParagraphElement","svgWordElement","insertNewlines","pageTextCache","maxWordRendered","$","ajax","type","url","dataType","error","e","then","res","xmlMap","parseXML","find","index","cachedEntry","response","pageIndex","xmlDoc","result","add","XMLpagesArr","$container","addEventListener","event","selection","document","getSelection","clipboardData","setData","preventDefault","svg","classList","remove","on","target","is","stopPropagation","one","off","textSelectingMode","removeAllRanges","defaultMode","$svg","each","i","s","interceptCopy","getPageText","XMLpage","XMLwidth","attr","XMLheight","totalWords","console","log","createElementNS","setAttribute","append","css","paragraph","words","paragSvg","style","pointerEvents","wordHeightArr","currWord","parseFloat","left","bottom","right","wordHeight","wordTspan","textContent","appendChild","nextWord","leftNext","spaceTspan","createTextNode","sort","paragWordHeight","Math","floor","stopPageFlip","BookreaderWithTextSelection","Object","assign","plugins","textSelection","textSelectionPlugin","init","pageContainer","lastPageIndex","getNumLeafs","mode","constModeThumb","createTextLayer","isChrome","userAgent","navigator","vendor","test","aFunction","isObject","slice","factories","construct","C","argsLength","args","list","Function","join","module","exports","bind","that","fn","partArgs","call","arguments","boundFunction","concat","apply","prototype","fails","whitespaces","METHOD_NAME","name","requireObjectCoercible","whitespace","ltrim","RegExp","rtrim","createMethod","TYPE","$this","string","String","start","end","stat","forced","toObject","nativeGetPrototypeOf","CORRECT_PROTOTYPE_GETTER","sham","getPrototypeOf","it","getBuiltIn","anObject","create","nativeConstruct","NEW_TARGET_BUG","F","ARGS_BUG","FORCED","Target","newTarget","$args","proto","instance","has","getOwnPropertyDescriptorModule","get","propertyKey","descriptor","receiver","f","undefined","$trim","forcedStringTrimMethod"],"mappings":"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","file":"plugins/plugin.text_selection.js","sourcesContent":["/**\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 * @param {StringWithVars|String} template\n * @param { {[varName: string]: { toString: () => string} } } vars\n * @param { {[varName: string]: { toString: () => string} } } [overrides]\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","//@ts-check\nimport { isFirefox, isSafari } from '../util/browserSniffing.js';\nimport { applyVariables } from '../util/strings.js';\n/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\nexport const DEFAULT_OPTIONS = {\n enabled: true,\n /** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */\n fullDjvuXmlUrl: null,\n /** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */\n singlePageDjvuXmlUrl: null,\n};\n/** @typedef {typeof DEFAULT_OPTIONS} TextSelectionPluginOptions */\n\n/**\n * @template T\n */\nexport class Cache {\n constructor(maxSize = 10) {\n this.maxSize = maxSize;\n /** @type {T[]} */\n this.entries = [];\n }\n\n /**\n * @param {T} entry\n */\n add(entry) {\n if (this.entries.length >= this.maxSize) {\n this.entries.shift();\n }\n this.entries.push(entry);\n }\n}\n\nexport class TextSelectionPlugin {\n\n constructor(options = DEFAULT_OPTIONS, optionVariables, avoidTspans = isFirefox(), pointerEventsOnParagraph = isSafari()) {\n this.options = options;\n this.optionVariables = optionVariables;\n /**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */\n this.djvuPagesPromise = null;\n // Using text elements instead of tspans for words because Firefox does not allow svg tspan stretch.\n // Tspans are necessary on Chrome because they prevent newline character after every word when copying\n this.svgParagraphElement = \"text\";\n this.svgWordElement = \"tspan\";\n this.insertNewlines = avoidTspans;\n // Safari has a bug where `pointer-events` doesn't work on `<tspans>`. So\n // there we will set `pointer-events: all` on the paragraph element. We don't\n // do this everywhere, because it's a worse experience. Thanks Safari :/\n this.pointerEventsOnParagraph = pointerEventsOnParagraph;\n if (avoidTspans) {\n this.svgParagraphElement = \"g\";\n this.svgWordElement = \"text\";\n }\n\n /** @type {Cache<{index: number, response: any}>} */\n this.pageTextCache = new Cache();\n\n /**\n * Sometimes there are too many words on a page, and the browser becomes near\n * unusable. For now don't render text layer for pages with too many words.\n */\n this.maxWordRendered = 2500;\n }\n\n init() {\n // Only fetch the full djvu xml if the single page url isn't there\n if (this.options.singlePageDjvuXmlUrl) return;\n this.djvuPagesPromise = $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.fullDjvuXmlUrl, this.optionVariables),\n dataType: \"html\",\n error: (e) => undefined\n }).then((res) => {\n try {\n const xmlMap = $.parseXML(res);\n return xmlMap && $(xmlMap).find(\"OBJECT\");\n } catch (e) {\n return undefined;\n }\n });\n }\n\n /**\n * @param {number} index\n * @returns {Promise<HTMLElement|undefined>}\n */\n async getPageText(index) {\n if (this.options.singlePageDjvuXmlUrl) {\n const cachedEntry = this.pageTextCache.entries.find(x => x.index == index);\n if (cachedEntry) {\n return cachedEntry.response;\n }\n return $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.singlePageDjvuXmlUrl, this.optionVariables, { pageIndex: index }),\n dataType: \"html\",\n error: (e) => undefined,\n }).then((res) => {\n try {\n const xmlDoc = $.parseXML(res);\n const result = xmlDoc && $(xmlDoc).find(\"OBJECT\")[0];\n this.pageTextCache.add({ index, response: result });\n return result;\n } catch (e) {\n return undefined;\n }\n });\n } else {\n const XMLpagesArr = await this.djvuPagesPromise;\n if (XMLpagesArr) return XMLpagesArr[index];\n }\n }\n\n /**\n * Intercept copied text to remove any styling applied to it\n * @param {JQuery} $container\n */\n interceptCopy($container) {\n $container[0].addEventListener('copy', (event) => {\n const selection = document.getSelection();\n event.clipboardData.setData('text/plain', selection.toString());\n event.preventDefault();\n });\n }\n\n /**\n * Applies mouse events when in default mode\n * @param {SVGElement} svg\n */\n defaultMode(svg) {\n svg.classList.remove(\"selectingSVG\");\n $(svg).on(\"mousedown.textSelectPluginHandler\", (event) => {\n if (!$(event.target).is(\".BRwordElement\")) return;\n event.stopPropagation();\n svg.classList.add(\"selectingSVG\");\n $(svg).one(\"mouseup.textSelectPluginHandler\", (event) => {\n if (window.getSelection().toString() != \"\") {\n event.stopPropagation();\n $(svg).off(\".textSelectPluginHandler\");\n this.textSelectingMode(svg);\n }\n else svg.classList.remove(\"selectingSVG\");\n });\n });\n }\n\n /**\n * Applies mouse events when in textSelecting mode\n * @param {SVGElement} svg\n */\n textSelectingMode(svg) {\n $(svg).on('mousedown.textSelectPluginHandler', (event) => {\n if (!$(event.target).is(\".BRwordElement\")) {\n if (window.getSelection().toString() != \"\") window.getSelection().removeAllRanges();\n }\n event.stopPropagation();\n });\n $(svg).on('mouseup.textSelectPluginHandler', (event) => {\n event.stopPropagation();\n if (window.getSelection().toString() == \"\") {\n $(svg).off(\".textSelectPluginHandler\");\n this.defaultMode(svg); }\n });\n }\n\n /**\n * Initializes text selection modes if there is an svg on the page\n * @param {JQuery} $container\n */\n stopPageFlip($container) {\n /** @type {JQuery<SVGElement>} */\n const $svg = $container.find('svg.textSelectionSVG');\n if (!$svg.length) return;\n $svg.each((i, s) => this.defaultMode(s));\n this.interceptCopy($container);\n }\n\n /**\n * @param {number} pageIndex\n * @param {JQuery} $container\n */\n async createTextLayer(pageIndex, $container) {\n const $svgLayers = $container.find('.textSelectionSVG');\n if ($svgLayers.length) return;\n const XMLpage = await this.getPageText(pageIndex);\n if (!XMLpage) return;\n const XMLwidth = $(XMLpage).attr(\"width\");\n const XMLheight = $(XMLpage).attr(\"height\");\n\n const totalWords = $(XMLpage).find(\"WORD\").length;\n if (totalWords > this.maxWordRendered) {\n console.log(`Page ${pageIndex} has too many words (${totalWords} > ${this.maxWordRendered}). Not rendering text layer.`);\n return;\n }\n\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svg.setAttribute(\"viewBox\", `0 0 ${XMLwidth} ${XMLheight}`);\n $container.append(svg);\n svg.setAttribute('class', 'textSelectionSVG');\n svg.setAttribute('preserveAspectRatio', 'none');\n $(svg).css({\n \"width\": \"100%\",\n \"position\": \"absolute\",\n \"height\": \"100%\",\n \"top\": \"0\",\n \"left\": \"0\",\n });\n\n $(XMLpage).find(\"PARAGRAPH\").each((i, paragraph) => {\n // Adding text element for each paragraph in the page\n const words = $(paragraph).find(\"WORD\");\n if (!words.length) return;\n const paragSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", this.svgParagraphElement);\n paragSvg.setAttribute(\"class\", \"BRparagElement\");\n if (this.pointerEventsOnParagraph) {\n paragSvg.style.pointerEvents = \"all\";\n }\n\n const wordHeightArr = [];\n\n for (let i = 0; i < words.length; i++) {\n // Adding tspan for each word in paragraph\n const currWord = words[i];\n // eslint-disable-next-line no-unused-vars\n const [left, bottom, right, top] = $(currWord).attr(\"coords\").split(',').map(parseFloat);\n const wordHeight = bottom - top;\n wordHeightArr.push(wordHeight);\n\n const wordTspan = document.createElementNS(\"http://www.w3.org/2000/svg\", this.svgWordElement);\n wordTspan.setAttribute(\"class\", \"BRwordElement\");\n wordTspan.setAttribute(\"x\", left.toString());\n wordTspan.setAttribute(\"y\", bottom.toString());\n wordTspan.setAttribute(\"textLength\", (right - left).toString());\n wordTspan.setAttribute(\"lengthAdjust\", \"spacingAndGlyphs\");\n wordTspan.textContent = currWord.textContent;\n paragSvg.appendChild(wordTspan);\n\n // Adding spaces after words except at the end of the paragraph\n // TODO: assumes left-to-right text\n if (i < words.length - 1) {\n const nextWord = words[i + 1];\n // eslint-disable-next-line no-unused-vars\n const [leftNext, bottomNext, rightNext, topNext] = $(nextWord).attr(\"coords\").split(',').map(parseFloat);\n const spaceTspan = document.createElementNS(\"http://www.w3.org/2000/svg\", this.svgWordElement);\n spaceTspan.setAttribute(\"class\", \"BRwordElement\");\n spaceTspan.setAttribute(\"x\", right.toString());\n spaceTspan.setAttribute(\"y\", bottom.toString());\n if ((leftNext - right) > 0) spaceTspan.setAttribute(\"textLength\", (leftNext - right).toString());\n spaceTspan.setAttribute(\"lengthAdjust\", \"spacingAndGlyphs\");\n spaceTspan.textContent = \" \";\n paragSvg.appendChild(spaceTspan);\n }\n\n // Adds newline at the end of paragraph on Firefox\n if ((i == words.length - 1 && (this.insertNewlines))) {\n paragSvg.appendChild(document.createTextNode(\"\\n\"));\n }\n }\n\n wordHeightArr.sort();\n const paragWordHeight = wordHeightArr[Math.floor(wordHeightArr.length * 0.85)];\n paragSvg.setAttribute(\"font-size\", paragWordHeight.toString());\n svg.appendChild(paragSvg);\n });\n this.stopPageFlip($container);\n }\n}\n\nexport class BookreaderWithTextSelection extends BookReader {\n init() {\n const options = Object.assign({}, DEFAULT_OPTIONS, this.options.plugins.textSelection);\n if (options.enabled) {\n this.textSelectionPlugin = new TextSelectionPlugin(options, this.options.vars);\n // Write this back; this way the plugin is the source of truth, and BR just\n // contains a reference to it.\n this.options.plugins.textSelection = options;\n this.textSelectionPlugin.init();\n }\n super.init();\n }\n\n /**\n * @param {number} index\n */\n _createPageContainer(index) {\n const pageContainer = super._createPageContainer(index);\n // Disable if thumb mode; it's too janky\n // index can be -1 for \"pre-cover\" region\n // Added checking of lastPageIndex to avoid loop around index value\n const lastPageIndex = this.getNumLeafs() - 1;\n if (this.mode !== this.constModeThumb && (index >= 0 && index <= lastPageIndex)) {\n this.textSelectionPlugin?.createTextLayer(index, pageContainer.$container);\n }\n return pageContainer;\n }\n}\nwindow.BookReader = BookreaderWithTextSelection;\nexport default BookreaderWithTextSelection;\n","\n/**\n * Checks whether the current browser is a Chrome/Chromium browser\n * Code from https://stackoverflow.com/a/4565120/2317712\n * @param {string} [userAgent]\n * @param {string} [vendor]\n * @return {boolean}\n */\nexport function isChrome(userAgent = navigator.userAgent, vendor = navigator.vendor) {\n return /chrome/i.test(userAgent) && /google inc/i.test(vendor);\n}\n\n/**\n * Checks whether the current browser is firefox\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isFirefox(userAgent = navigator.userAgent) {\n return /firefox/i.test(userAgent);\n}\n\n/**\n * Checks whether the current browser is safari\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent#Browser_Name\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isSafari(userAgent = navigator.userAgent) {\n return /safari/i.test(userAgent) && !/chrome|chromium/i.test(userAgent);\n}\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var 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]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\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","// 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","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar bind = require('../internals/function-bind');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar has = require('../internals/has');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var descriptor, prototype;\n if (anObject(target) === receiver) return target[propertyKey];\n if (descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey)) return has(descriptor, 'value')\n ? descriptor.value\n : descriptor.get === undefined\n ? undefined\n : descriptor.get.call(receiver);\n if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n get: get\n});\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"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"plugins/plugin.text_selection.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./node_modules/@internetarchive/icon-share/index.js","webpack://@internetarchive/bookreader/./node_modules/@internetarchive/icon-share/icon-share.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match-all.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.raw.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/esnext.string.match-all.js","webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.text_selection.js","webpack://@internetarchive/bookreader/./node_modules/iso-language-codes/dist/index.mjs","webpack://@internetarchive/bookreader/./src/plugins/tts/utils.js","webpack://@internetarchive/bookreader/./src/BookReader/utils/SelectionObserver.js","webpack://@internetarchive/bookreader/./src/util/TextSelectionManager.js","webpack://@internetarchive/bookreader/./src/util/cache.js","webpack://@internetarchive/bookreader/./src/util/strings.js"],"sourcesContent":["import { html } from 'lit';\n\nexport default html`\n<svg\n viewBox=\"0 0 100 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <g class=\"fill-color\">\n <path d=\"M70.6784759,10 L70.6784759,21.3240186 C64.5020053,21.66334 58.9104278,22.5826126 53.9037433,24.0818363 C48.8970588,25.5810601 44.8495989,27.4085163 41.7613636,29.5642049 C38.6731283,31.7198935 35.9982175,34.0552229 33.736631,36.5701929 C31.4750446,39.085163 29.8217469,41.5657574 28.776738,44.011976 C27.7317291,46.4581947 26.9173351,48.6848525 26.3335561,50.6919494 C25.7497772,52.6990464 25.4088681,54.3324462 25.3108289,55.592149 L25.2372995,57.4085163 C29.0296346,54.1661122 33.1751337,51.5524507 37.6737968,49.5675316 C42.1724599,47.5826126 46.2934492,46.3118208 50.0367647,45.7551564 C53.7800802,45.1984919 57.2571301,44.8713684 60.4679144,44.7737858 C63.6786988,44.6762031 66.1831551,44.7726769 67.9812834,45.0632069 L70.6784759,45.499002 L70.6784759,57.4051896 L100,33.3765802 L70.6784759,10 Z M76.4438503,62.4883566 L82.8609626,57.1157685 C82.9099822,57.0669772 82.9946524,57.0303837 83.1149733,57.005988 C83.2352941,56.9815924 83.4536542,56.9571967 83.7700535,56.9328011 C84.0864528,56.9084054 84.3905971,56.9449989 84.6824866,57.0425815 C84.9743761,57.1401641 85.217246,57.2854291 85.4110963,57.4783766 C85.6049465,57.671324 85.7263815,57.8409847 85.7754011,57.9873586 L85.8489305,58.2035928 L85.8489305,90 L0,90 L0,17.910845 L43.1784759,17.910845 C43.2765152,17.9596363 43.410205,18.0317143 43.5795455,18.1270792 C43.7488859,18.222444 43.9438503,18.4519849 44.1644385,18.8157019 C44.3850267,19.1794189 44.469697,19.5542249 44.4184492,19.9401198 C44.4184492,20.2794411 44.3092692,20.582169 44.0909091,20.8483034 C43.872549,21.1144378 43.6664439,21.3206919 43.4725936,21.4670659 L43.1818182,21.6134398 C40.557041,23.06609 38.2954545,24.396762 36.3970588,25.6054558 L30.7820856,29.8170326 L11.5274064,29.8170326 L11.5274064,78.1669993 L74.1811497,78.1669993 L74.1811497,65.5355955 C74.1811497,65.1009093 74.3995098,64.6407186 74.8362299,64.1550233 L76.4438503,62.4883566 Z\" id=\"Shape\"></path>\n </g>\n</svg>\n`;\n","import icon from './index.js';\nimport { css, LitElement } from 'lit';\n\nclass IAIconShare extends LitElement {\n static get styles() {\n return css`\n :host {\n width: var(--iconWidth, 'auto');\n height: var(--iconHeight, 'auto');\n }\n\n .fill-color {\n fill: var(--iconFillColor);\n }\n\n .stroke-color {\n stroke: var(--iconStrokeColor);\n }\n `;\n }\n\n render() {\n return icon;\n }\n}\n\ncustomElements.define('ia-icon-share', IAIconShare);\n\nexport default IAIconShare;\n","'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';\n/* eslint-disable es/no-string-prototype-matchall -- safe */\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar isRegExp = require('../internals/is-regexp');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar getMethod = require('../internals/get-method');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar InternalStateModule = require('../internals/internal-state');\nvar IS_PURE = require('../internals/is-pure');\n\nvar MATCH_ALL = wellKnownSymbol('matchAll');\nvar REGEXP_STRING = 'RegExp String';\nvar REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);\nvar RegExpPrototype = RegExp.prototype;\nvar $TypeError = TypeError;\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar nativeMatchAll = uncurryThis(''.matchAll);\n\nvar WORKS_WITH_NON_GLOBAL_REGEX = !!nativeMatchAll && !fails(function () {\n nativeMatchAll('a', /./);\n});\n\nvar $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {\n setInternalState(this, {\n type: REGEXP_STRING_ITERATOR,\n regexp: regexp,\n string: string,\n global: $global,\n unicode: fullUnicode,\n done: false\n });\n}, REGEXP_STRING, function next() {\n var state = getInternalState(this);\n if (state.done) return createIterResultObject(undefined, true);\n var R = state.regexp;\n var S = state.string;\n var match = regExpExec(R, S);\n if (match === null) {\n state.done = true;\n return createIterResultObject(undefined, true);\n }\n if (state.global) {\n if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);\n return createIterResultObject(match, false);\n }\n state.done = true;\n return createIterResultObject(match, false);\n});\n\nvar $matchAll = function (string) {\n var R = anObject(this);\n var S = toString(string);\n var C = speciesConstructor(R, RegExp);\n var flags = toString(getRegExpFlags(R));\n var matcher, $global, fullUnicode;\n matcher = new C(C === RegExp ? R.source : R, flags);\n $global = !!~stringIndexOf(flags, 'g');\n fullUnicode = !!~stringIndexOf(flags, 'u') || !!~stringIndexOf(flags, 'v');\n matcher.lastIndex = toLength(R.lastIndex);\n return new $RegExpStringIterator(matcher, S, $global, fullUnicode);\n};\n\n// `String.prototype.matchAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.matchall\n$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {\n matchAll: function matchAll(regexp) {\n var O = requireObjectCoercible(this);\n var flags, S, matcher, rx;\n if (isObject(regexp)) {\n if (isRegExp(regexp)) {\n flags = toString(requireObjectCoercible(getRegExpFlags(regexp)));\n if (!~stringIndexOf(flags, 'g')) throw new $TypeError('`.matchAll` does not allow non-global regexes');\n }\n if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);\n matcher = getMethod(regexp, MATCH_ALL);\n if (matcher === undefined && IS_PURE && classof(regexp) === 'RegExp') matcher = $matchAll;\n if (matcher) return call(matcher, regexp, O);\n } else if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);\n S = toString(O);\n rx = new RegExp(regexp, 'g');\n return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);\n }\n});\n\nIS_PURE || MATCH_ALL in RegExpPrototype || defineBuiltIn(RegExpPrototype, MATCH_ALL, $matchAll);\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toObject = require('../internals/to-object');\nvar toString = require('../internals/to-string');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar push = uncurryThis([].push);\nvar join = uncurryThis([].join);\n\n// `String.raw` method\n// https://tc39.es/ecma262/#sec-string.raw\n$({ target: 'String', stat: true }, {\n raw: function raw(template) {\n var rawTemplate = toIndexedObject(toObject(template).raw);\n var literalSegments = lengthOfArrayLike(rawTemplate);\n if (!literalSegments) return '';\n var argumentsLength = arguments.length;\n var elements = [];\n var i = 0;\n while (true) {\n push(elements, toString(rawTemplate[i++]));\n if (i === literalSegments) return join(elements, '');\n if (i < argumentsLength) push(elements, toString(arguments[i]));\n }\n }\n});\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","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.string.match-all');\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 { createDIVPageLayer } from '../BookReader/PageContainer.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport { applyVariables } from '../util/strings.js';\nimport { Cache } from '../util/cache.js';\nimport { toISO6391 } from './tts/utils.js';\nimport { TextSelectionManager } from '../util/TextSelectionManager.js';\n/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */\n/** @typedef {import('../BookReader/PageContainer.js').PageContainer} PageContainer */\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n\nexport class TextSelectionPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */\n fullDjvuXmlUrl: null,\n /** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */\n singlePageDjvuXmlUrl: null,\n /** Whether to fetch the XML as a jsonp */\n jsonp: false,\n /** Mox words that can be selected when the text layer is protected */\n maxProtectedWords: 200,\n }\n\n /**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */\n djvuPagesPromise = null;\n\n /** @type {Cache<{index: number, response: any}>} */\n pageTextCache = new Cache();\n\n /**\n * Sometimes there are too many words on a page, and the browser becomes near\n * unusable. For now don't render text layer for pages with too many words.\n */\n maxWordRendered = 2500;\n\n /**\n * @param {import('../BookReader.js').default} br\n */\n constructor(br) {\n super(br);\n // In the future this should be in the ocr file\n // since a book being right to left doesn't mean the ocr is right to left. But for\n // now we do make that assumption.\n /** Whether the book is right-to-left */\n this.rtl = this.br.pageProgression === 'rl';\n this.textSelectionManager = new TextSelectionManager('.BRtextLayer', this.br, {selectionElement: ['.BRwordElement', '.BRspace']}, this.options.maxProtectedWords);\n }\n\n /** @override */\n init() {\n if (!this.options.enabled) return;\n\n this.br.on('pageVisible', (_, {pageContainerEl}) => {\n if (pageContainerEl.querySelector('.BRtextLayer')) {\n this.br.trigger('textLayerVisible', {pageContainerEl});\n }\n });\n\n this.loadData();\n this.textSelectionManager.init();\n }\n\n enableSelectionMenu() {\n this.textSelectionManager.selectionMenuEnabled = true;\n this.textSelectionManager.renderSelectionMenu();\n }\n\n /**\n * @override\n * @param {PageContainer} pageContainer\n * @returns {PageContainer}\n */\n _configurePageContainer(pageContainer) {\n // Disable if thumb mode; it's too janky\n // .page can be null for \"pre-cover\" region\n if (this.br.mode !== this.br.constModeThumb && pageContainer.page) {\n this.createTextLayer(pageContainer);\n }\n return pageContainer;\n }\n\n loadData() {\n // Only fetch the full djvu xml if the single page url isn't there\n if (this.options.singlePageDjvuXmlUrl) return;\n this.djvuPagesPromise = $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.fullDjvuXmlUrl, this.br.options.vars),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n }).then((res) => {\n try {\n const xmlMap = $.parseXML(res);\n return xmlMap && $(xmlMap).find(\"OBJECT\");\n } catch (e) {\n return undefined;\n }\n });\n }\n\n /**\n * @param {number} index\n * @returns {Promise<HTMLElement|undefined>}\n */\n async getPageText(index) {\n if (this.options.singlePageDjvuXmlUrl) {\n const cachedEntry = this.pageTextCache.entries.find(x => x.index == index);\n if (cachedEntry) {\n return cachedEntry.response;\n }\n const res = await $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.singlePageDjvuXmlUrl, this.br.options.vars, { pageIndex: index }),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n });\n try {\n const xmlDoc = $.parseXML(res);\n const result = xmlDoc && $(xmlDoc).find(\"OBJECT\")[0];\n this.pageTextCache.add({ index, response: result });\n return result;\n } catch (e) {\n return undefined;\n }\n } else {\n const XMLpagesArr = await this.djvuPagesPromise;\n if (XMLpagesArr) return XMLpagesArr[index];\n }\n }\n\n /**\n * @param {PageContainer} pageContainer\n */\n async createTextLayer(pageContainer) {\n const pageIndex = pageContainer.page.index;\n const $container = pageContainer.$container;\n const $textLayers = $container.find('.BRtextLayer');\n if ($textLayers.length) return;\n const XMLpage = await this.getPageText(pageIndex);\n if (!XMLpage) return;\n // Seeing some 0 left and 0 top coordinates in OCR, remove it entirely to prevent odd rendering\n // eg https://archive.org/details/illustratedbooko00robe/page/n11/mode/2up\n $(XMLpage).find(\"WORD\").filter((_, ele) => {\n const [left, , , top] = ele.getAttribute('coords').split(\",\").map(parseFloat);\n if (left == 0 && top == 0) {\n console.error(\"Found invalid ocr word coordinates\");\n return true;\n }\n }).remove();\n recursivelyAddCoords(XMLpage);\n\n const totalWords = $(XMLpage).find(\"WORD\").length;\n if (totalWords > this.maxWordRendered) {\n console.log(`Page ${pageIndex} has too many words (${totalWords} > ${this.maxWordRendered}). Not rendering text layer.`);\n return;\n }\n\n const textLayer = createDIVPageLayer(pageContainer.page, 'BRtextLayer');\n // Have to wait to make sure the page container is actually rendered,\n // otherwise width/height are unset after a mode change.\n await Promise.resolve();\n const ratioW = parseFloat(pageContainer.$container[0].style.width) / pageContainer.page.width;\n const ratioH = parseFloat(pageContainer.$container[0].style.height) / pageContainer.page.height;\n textLayer.style.transform = `scale(${ratioW}, ${ratioH})`;\n const bookLangCode = toISO6391(this.br.options.bookLanguage);\n if (bookLangCode) {\n textLayer.setAttribute(\"lang\", bookLangCode);\n }\n textLayer.setAttribute(\"dir\", this.rtl ? \"rtl\" : \"ltr\");\n\n const ocrParagraphs = $(XMLpage).find(\"PARAGRAPH[coords]\").toArray();\n const paragEls = ocrParagraphs.map(p => {\n const el = this.renderParagraph(p);\n textLayer.appendChild(el);\n return el;\n });\n\n // Fix up paragraph positions\n const paragraphRects = determineRealRects(textLayer, '.BRparagraphElement');\n let yAdded = 0;\n for (const [ocrParagraph, paragEl] of zip(ocrParagraphs, paragEls)) {\n const ocrParagBounds = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const realRect = paragraphRects.get(paragEl);\n const [ocrLeft, , ocrRight, ocrTop] = ocrParagBounds;\n const newStartMargin = this.rtl ? (realRect.right - ocrRight) : (ocrLeft - realRect.left);\n const newTop = ocrTop - (realRect.top + yAdded);\n\n paragEl.style[this.rtl ? 'marginRight' : 'marginLeft'] = `${newStartMargin}px`;\n paragEl.style.marginTop = `${newTop}px`;\n yAdded += newTop;\n textLayer.appendChild(paragEl);\n textLayer.appendChild(document.createTextNode('\\n'));\n }\n $container.append(textLayer);\n this.textSelectionManager.stopPageFlip($container);\n this.br.trigger('textLayerRendered', {\n pageIndex,\n pageContainer,\n });\n\n // Check if page is visible\n if ($container.hasClass('BRpage-visible')) {\n this.br.trigger('textLayerVisible', {pageContainerEl: $container[0]});\n }\n }\n\n /**\n * @param {HTMLElement} ocrParagraph\n * @returns {HTMLParagraphElement}\n */\n renderParagraph(ocrParagraph) {\n const paragEl = document.createElement('p');\n paragEl.classList.add('BRparagraphElement');\n if (ocrParagraph.getAttribute(\"x-role\")) {\n paragEl.classList.add('ocr-role-header-footer');\n paragEl.ariaHidden = \"true\";\n }\n const [paragLeft, paragBottom, paragRight, paragTop] = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const wordHeightArr = [];\n const lines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n if (!lines.length) return paragEl;\n\n\n for (const [prevLine, line, nextLine] of lookAroundWindow(genMap(lines, augmentLine))) {\n const isLastLineOfParagraph = line.ocrElement == lines[lines.length - 1];\n const lineEl = document.createElement('span');\n lineEl.classList.add('BRlineElement');\n\n for (const [wordIndex, currWord] of line.words.entries()) {\n const [, bottom, right, top] = $(currWord).attr(\"coords\").split(',').map(parseFloat);\n const wordHeight = bottom - top;\n wordHeightArr.push(wordHeight);\n\n if (wordIndex == 0 && prevLine?.lastWord.textContent.trim().endsWith('-')) {\n // ideally prefer the next line to determine the left position,\n // since the previous line could be the first line of the paragraph\n // and hence have an incorrectly indented first word.\n // E.g. https://archive.org/details/driitaleofdaring00bachuoft/page/360/mode/2up\n const [newLeft, , , ] = $((nextLine || prevLine).firstWord).attr(\"coords\").split(',').map(parseFloat);\n $(currWord).attr(\"coords\", `${newLeft},${bottom},${right},${top}`);\n }\n\n const wordEl = document.createElement('span');\n wordEl.setAttribute(\"class\", \"BRwordElement\");\n wordEl.textContent = currWord.textContent.trim();\n\n if (wordIndex > 0) {\n const space = document.createElement('span');\n space.classList.add('BRspace');\n space.textContent = ' ';\n // Hack to make screen readers (eg NVDA) read spaces correctly;\n // otherwise they ignore elements with just whitespace.\n space.setAttribute('aria-label', '\\u00A0');\n lineEl.append(space);\n\n // Edge ignores empty elements (like BRspace), so add another\n // space to ensure Edge's ReadAloud works correctly.\n lineEl.appendChild(document.createTextNode(' '));\n }\n\n lineEl.appendChild(wordEl);\n }\n\n const hasHyphen = line.lastWord.textContent.trim().endsWith('-');\n const lastWordEl = lineEl.children[lineEl.children.length - 1];\n if (hasHyphen && !isLastLineOfParagraph) {\n lastWordEl.textContent = lastWordEl.textContent.trim().slice(0, -1);\n lastWordEl.classList.add('BRwordElement--hyphen');\n }\n\n paragEl.appendChild(lineEl);\n if (!isLastLineOfParagraph && !hasHyphen) {\n // Edge does not correctly have spaces between the lines.\n paragEl.appendChild(document.createTextNode(' '));\n }\n }\n\n wordHeightArr.sort((a, b) => a - b);\n const paragWordHeight = wordHeightArr[Math.floor(wordHeightArr.length * 0.85)] + 4;\n paragEl.style.left = `${paragLeft}px`;\n paragEl.style.top = `${paragTop}px`;\n paragEl.style.width = `${paragRight - paragLeft}px`;\n paragEl.style.height = `${paragBottom - paragTop}px`;\n paragEl.style.fontSize = `${paragWordHeight}px`;\n\n // Fix up sizes - stretch/crush words as necessary using letter spacing\n let wordRects = determineRealRects(paragEl, '.BRwordElement');\n const ocrWords = $(ocrParagraph).find(\"WORD\").toArray();\n const wordEls = paragEl.querySelectorAll('.BRwordElement');\n for (const [ocrWord, wordEl] of zip(ocrWords, wordEls)) {\n const realRect = wordRects.get(wordEl);\n const [left, , right ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n let ocrWidth = right - left;\n // Some books (eg theworksofplato01platiala) have a space _inside_ the <WORD>\n // element. That makes it impossible to determine the correct positining\n // of everything, but to avoid the BRspace's being width 0, which makes selection\n // janky on Chrome Android, assume the space is the same width as one of the\n // letters.\n if (ocrWord.textContent.endsWith(' ')) {\n ocrWidth = ocrWidth * (ocrWord.textContent.length - 1) / ocrWord.textContent.length;\n }\n const diff = ocrWidth - realRect.width;\n wordEl.style.letterSpacing = `${diff / (ocrWord.textContent.length - 1)}px`;\n }\n\n // Stretch/crush lines as necessary using line spacing\n // Recompute rects after letter spacing\n wordRects = determineRealRects(paragEl, '.BRwordElement');\n const spaceRects = determineRealRects(paragEl, '.BRspace');\n\n const ocrLines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n const lineEls = Array.from(paragEl.querySelectorAll('.BRlineElement'));\n\n let ySoFar = paragTop;\n for (const [ocrLine, lineEl] of zip(ocrLines, lineEls)) {\n // shift words using marginLeft to align with the correct x position\n const words = $(ocrLine).find(\"WORD\").toArray();\n // const ocrLineLeft = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[0])));\n let xSoFar = this.rtl ? paragRight : paragLeft;\n for (const [ocrWord, wordEl] of zip(words, lineEl.querySelectorAll('.BRwordElement'))) {\n // start of line, need to compute the offset relative to the OCR words\n const wordRect = wordRects.get(wordEl);\n const [ocrLeft, , ocrRight ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n const diff = (this.rtl ? -(ocrRight - xSoFar) : ocrLeft - xSoFar);\n\n if (wordEl.previousElementSibling) {\n const space = wordEl.previousElementSibling;\n space.style.letterSpacing = `${diff - spaceRects.get(space).width}px`;\n } else {\n wordEl.style[this.rtl ? 'paddingRight' : 'paddingLeft'] = `${diff}px`;\n }\n if (this.rtl) xSoFar -= diff + wordRect.width;\n else xSoFar += diff + wordRect.width;\n }\n // And also fix y position\n const ocrLineTop = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[3])));\n const diff = ocrLineTop - ySoFar;\n if (lineEl.previousElementSibling) {\n lineEl.previousElementSibling.style.lineHeight = `${diff}px`;\n ySoFar += diff;\n }\n }\n\n // The last line will have a line height subtracting from the paragraph height\n lineEls[lineEls.length - 1].style.lineHeight = `${paragBottom - ySoFar}px`;\n\n // Edge does not include a newline for some reason when copying/pasting the <p> els\n paragEl.appendChild(document.createElement('br'));\n return paragEl;\n }\n}\n\nBookReader?.registerPlugin('textSelection', TextSelectionPlugin);\n\n\n/**\n * @param {HTMLElement} parentEl\n * @param {string} selector\n * @returns {Map<Element, Rect>}\n */\nfunction determineRealRects(parentEl, selector) {\n const initals = {\n position: parentEl.style.position,\n visibility: parentEl.style.visibility,\n top: parentEl.style.top,\n left: parentEl.style.left,\n transform: parentEl.style.transform,\n };\n parentEl.style.position = 'absolute';\n parentEl.style.visibility = 'hidden';\n parentEl.style.top = '0';\n parentEl.style.left = '0';\n parentEl.style.transform = 'none';\n document.body.appendChild(parentEl);\n const rects = new Map(\n Array.from(parentEl.querySelectorAll(selector))\n .map(wordEl => {\n const origRect = wordEl.getBoundingClientRect();\n return [wordEl, new Rect(\n origRect.left + window.scrollX,\n origRect.top + window.scrollY,\n origRect.width,\n origRect.height,\n )];\n }),\n );\n document.body.removeChild(parentEl);\n Object.assign(parentEl.style, initals);\n return rects;\n}\n\n/**\n * @param {HTMLElement} line\n */\nfunction augmentLine(line) {\n const words = $(line).find(\"WORD\").toArray();\n return {\n ocrElement: line,\n words,\n firstWord: words[0],\n lastWord: words[words.length - 1],\n };\n}\n\n/**\n * @template T\n * Get the i-th element of an iterable\n * @param {Iterable<T>} iterable\n * @param {number} index\n */\nexport function genAt(iterable, index) {\n let i = 0;\n for (const x of iterable) {\n if (i == index) return x;\n i++;\n }\n return undefined;\n}\n\n/**\n * @template T\n * Generator version of filter\n * @param {Iterable<T>} iterable\n * @param {function(T): boolean} fn\n */\nexport function* genFilter(iterable, fn) {\n for (const x of iterable) {\n if (fn(x)) yield x;\n }\n}\n\n/**\n * @template TFrom, TTo\n * Generator version of map\n * @param {Iterable<TFrom>} gen\n * @param {function(TFrom): TTo} fn\n * @returns {Iterable<TTo>}\n */\nexport function* genMap(gen, fn) {\n for (const x of gen) yield fn(x);\n}\n\n/**\n * @template T\n * Generator that provides a sliding window of 3 elements,\n * prev, current, and next.\n * @param {Iterable<T>} gen\n * @returns {Iterable<[T | undefined, T, T | undefined]>}\n */\nexport function* lookAroundWindow(gen) {\n let prev = undefined;\n let cur = undefined;\n let next = undefined;\n for (const x of gen) {\n if (typeof cur !== 'undefined') {\n next = x;\n yield [prev, cur, next];\n }\n prev = cur;\n cur = x;\n next = undefined;\n }\n\n if (typeof cur !== 'undefined') {\n yield [prev, cur, next];\n }\n}\n\n/**\n * @template T1, T2\n * Lazy zip implementation to avoid importing lodash\n * Expects iterators to be of the same length\n * @param {Iterable<T1>} gen1\n * @param {Iterable<T2>} gen2\n * @returns {Iterable<[T1, T2]>}\n */\nexport function* zip(gen1, gen2) {\n const it1 = gen1[Symbol.iterator]();\n const it2 = gen2[Symbol.iterator]();\n while (true) {\n const r1 = it1.next();\n const r2 = it2.next();\n if (r1.done && r2.done) {\n return;\n }\n if (r1.done || r2.done) {\n throw new Error('zip: one of the iterators is done');\n }\n yield [r1.value, r2.value];\n }\n}\n\n/**\n * [left, bottom, right, top]\n * @param {Array<[number, number, number, number]>} bounds\n * @returns {[number, number, number, number]}\n */\nfunction determineBounds(bounds) {\n let leftMost = Infinity;\n let bottomMost = -Infinity;\n let rightMost = -Infinity;\n let topMost = Infinity;\n\n for (const [left, bottom, right, top] of bounds) {\n leftMost = Math.min(leftMost, left);\n bottomMost = Math.max(bottomMost, bottom);\n rightMost = Math.max(rightMost, right);\n topMost = Math.min(topMost, top);\n }\n\n return [leftMost, bottomMost, rightMost, topMost];\n}\n\n/**\n * Recursively traverses the XML tree and adds coords\n * which are the bounding box of all child coords\n * @param {Element} xmlEl\n */\nfunction recursivelyAddCoords(xmlEl) {\n if ($(xmlEl).attr('coords') || !xmlEl.children) {\n return;\n }\n\n const children = $(xmlEl).children().toArray();\n if (children.length === 0) {\n return;\n }\n\n for (const child of children) {\n recursivelyAddCoords(child);\n }\n\n const childCoords = [];\n\n for (const child of children) {\n if (!$(child).attr('coords')) continue;\n childCoords.push($(child).attr('coords').split(',').map(parseFloat));\n }\n\n const boundingCoords = determineBounds(childCoords);\n if (Math.abs(boundingCoords[0]) != Infinity) {\n $(xmlEl).attr('coords', boundingCoords.join(','));\n }\n}\n\n/**\n * Basically a polyfill for the native DOMRect class\n */\nclass Rect {\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n constructor(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n get right() { return this.x + this.width; }\n get bottom() { return this.y + this.height; }\n get top() { return this.y; }\n get left() { return this.x; }\n}\n\n/**\n * Depth traverse the DOM tree starting at `start`, and ending at `end`.\n * @param {Node} start\n * @param {Node} end\n * @returns {Generator<Node>}\n */\nexport function* walkBetweenNodes(start, end) {\n let done = false;\n\n /**\n * @param {Node} node\n */\n function* walk(node, {children = true, parents = true, siblings = true} = {}) {\n if (node === end) {\n done = true;\n yield node;\n return;\n }\n\n // yield self\n yield node;\n\n // First iterate children (depth-first traversal)\n if (children && node.firstChild) {\n yield* walk(node.firstChild, {children: true, parents: false, siblings: true});\n if (done) return;\n }\n\n // Then iterate siblings\n if (siblings) {\n for (let sib = node.nextSibling; sib; sib = sib.nextSibling) {\n yield* walk(sib, {children: true, parents: false, siblings: false});\n if (done) return;\n }\n }\n\n // Finally, move up the tree\n if (parents && node.parentNode) {\n yield* walk(node.parentNode, {children: false, parents: true, siblings: true});\n if (done) return;\n }\n }\n\n yield* walk(start);\n}\n","// src/data.ts\nvar data_default = [\n [\"Serbian\", \"\\u0441\\u0440\\u043F\\u0441\\u043A\\u0438 \\u0458\\u0435\\u0437\\u0438\\u043A\", \"sr\", \"srp\", \"srp\"],\n [\"Romanian, Moldavian, Moldovan\", \"Rom\\xE2n\\u0103\", \"ro\", \"ron\", \"rum\"],\n [\"Sichuan Yi, Nuosu\", \"\\uA188\\uA320\\uA4BF Nuosuhxop\", \"ii\", \"iii\", \"iii\"],\n [\"Tahitian\", \"Reo Tahiti\", \"ty\", \"tah\", \"tah\"],\n [\"Tagalog\", \"Wikang Tagalog\", \"tl\", \"tgl\", \"tgl\"],\n [\"Yiddish\", \"\\u05D9\\u05D9\\u05B4\\u05D3\\u05D9\\u05E9\", \"yi\", \"yid\", \"yid\"],\n [\"Akan\", \"Akan\", \"ak\", \"aka\", \"aka\"],\n [\"Malay\", \"Bahasa Melayu, \\u0628\\u0647\\u0627\\u0633 \\u0645\\u0644\\u0627\\u064A\\u0648\", \"ms\", \"msa\", \"may\"],\n [\"Arabic\", \"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064A\\u0629\", \"ar\", \"ara\", \"ara\"],\n [\"Norwegian\", \"Norsk\", \"no\", \"nor\", \"nor\"],\n [\"Ojibwa\", \"\\u140A\\u14C2\\u1511\\u14C8\\u142F\\u14A7\\u140E\\u14D0\", \"oj\", \"oji\", \"oji\"],\n [\"Fulah\", \"Fulfulde, Pulaar, Pular\", \"ff\", \"ful\", \"ful\"],\n [\"Persian\", \"\\u0641\\u0627\\u0631\\u0633\\u06CC\", \"fa\", \"fas\", \"per\"],\n [\"Albanian\", \"Shqip\", \"sq\", \"sqi\", \"alb\"],\n [\"Aymara\", \"aymar aru\", \"ay\", \"aym\", \"aym\"],\n [\"Azerbaijani\", \"az\\u0259rbaycan dili\", \"az\", \"aze\", \"aze\"],\n [\"Chinese\", \"\\u4E2D\\u6587 (Zh\\u014Dngw\\xE9n), \\u6C49\\u8BED, \\u6F22\\u8A9E\", \"zh\", \"zho\", \"chi\"],\n [\"Cree\", \"\\u14C0\\u1426\\u1403\\u152D\\u140D\\u140F\\u1423\", \"cr\", \"cre\", \"cre\"],\n [\"Estonian\", \"eesti, eesti keel\", \"et\", \"est\", \"est\"],\n [\"Guaran\\xED\", \"Ava\\xF1e'\\u1EBD\", \"gn\", \"grn\", \"grn\"],\n [\"Inupiaq\", \"I\\xF1upiaq, I\\xF1upiatun\", \"ik\", \"ipk\", \"ipk\"],\n [\"Inuktitut\", \"\\u1403\\u14C4\\u1483\\u144E\\u1450\\u1466\", \"iu\", \"iku\", \"iku\"],\n [\"Kanuri\", \"Kanuri\", \"kr\", \"kau\", \"kau\"],\n [\"Komi\", \"\\u043A\\u043E\\u043C\\u0438 \\u043A\\u044B\\u0432\", \"kv\", \"kom\", \"kom\"],\n [\"Kongo\", \"Kikongo\", \"kg\", \"kon\", \"kon\"],\n [\"Kurdish\", \"Kurd\\xEE, \\u0623\\u06C7\\u0632\\u0628\\u06D0\\u0643\", \"ku\", \"kur\", \"kur\"],\n [\"Latvian\", \"latvie\\u0161u valoda\", \"lv\", \"lav\", \"lav\"],\n [\"Malagasy\", \"fiteny malagasy\", \"mg\", \"mlg\", \"mlg\"],\n [\"Mongolian\", \"\\u041C\\u043E\\u043D\\u0433\\u043E\\u043B \\u0445\\u044D\\u043B\", \"mn\", \"mon\", \"mon\"],\n [\"Oromo\", \"Afaan Oromoo\", \"om\", \"orm\", \"orm\"],\n [\"Pashto, Pushto\", \"\\u067E\\u069A\\u062A\\u0648\", \"ps\", \"pus\", \"pus\"],\n [\"Quechua\", \"Runa Simi, Kichwa\", \"qu\", \"que\", \"que\"],\n [\"Sardinian\", \"sardu\", \"sc\", \"srd\", \"srd\"],\n [\"Swahili\", \"Kiswahili\", \"sw\", \"swa\", \"swa\"],\n [\"Uzbek\", \"O\\u02BBzbek, \\u040E\\u0437\\u0431\\u0435\\u043A, \", \"uz\", \"uzb\", \"uzb\"],\n [\"Zhuang, Chuang\", \"Sa\\u026F cue\\u014B\\u0185, Saw cuengh\", \"za\", \"zha\", \"zha\"],\n [\"Bislama\", \"Bislama\", \"bi\", \"bis\", \"bis\"],\n [\"Norwegian Bokm\\xE5l\", \"Norsk Bokm\\xE5l\", \"nb\", \"nob\", \"nob\"],\n [\"Norwegian Nynorsk\", \"Norsk Nynorsk\", \"nn\", \"nno\", \"nno\"],\n [\"Indonesian\", \"Bahasa Indonesia\", \"id\", \"ind\", \"ind\"],\n [\"Twi\", \"Twi\", \"tw\", \"twi\", \"twi\"],\n [\"Esperanto\", \"Esperanto\", \"eo\", \"epo\", \"epo\"],\n [\"Interlingua\", \"Interlingua\", \"ia\", \"ina\", \"ina\"],\n [\"Interlingue\", \"Originally called Occidental; then Interlingue after WWII\", \"ie\", \"ile\", \"ile\"],\n [\"Ido\", \"Ido\", \"io\", \"ido\", \"ido\"],\n [\"Volap\\xFCk\", \"Volap\\xFCk\", \"vo\", \"vol\", \"vol\"],\n [\"Bihari languages\", \"\\u092D\\u094B\\u091C\\u092A\\u0941\\u0930\\u0940\", \"bh\", \"bih\", \"bih\"],\n [\"Hebrew (modern)\", \"\\u05E2\\u05D1\\u05E8\\u05D9\\u05EA\", \"he\", \"heb\", \"heb\"],\n [\"Sanskrit\", \"\\u0938\\u0902\\u0938\\u094D\\u0915\\u0943\\u0924\\u092E\\u094D\", \"sa\", \"san\", \"san\"],\n [\"Church Slavic, Church Slavonic, Old Church Slavonic, Old Slavonic, Old Bulgarian\", \"\\u0469\\u0437\\u044B\\u043A\\u044A \\u0441\\u043B\\u043E\\u0432\\u0463\\u043D\\u044C\\u0441\\u043A\\u044A\", \"cu\", \"chu\", \"chu\"],\n [\"Pali\", \"\\u092A\\u093E\\u0934\\u093F\", \"pi\", \"pli\", \"pli\"],\n [\"Avestan\", \"avesta\", \"ae\", \"ave\", \"ave\"],\n [\"Latin\", \"latine, lingua latina\", \"la\", \"lat\", \"lat\"],\n [\"Armenian\", \"\\u0540\\u0561\\u0575\\u0565\\u0580\\u0565\\u0576\", \"hy\", \"hye\", \"arm\"],\n [\"Swati\", \"SiSwati\", \"ss\", \"ssw\", \"ssw\"],\n [\"Tibetan\", \"\\u0F56\\u0F7C\\u0F51\\u0F0B\\u0F61\\u0F72\\u0F42\", \"bo\", \"bod\", \"tib\"],\n [\"South Ndebele\", \"isiNdebele\", \"nr\", \"nbl\", \"nbl\"],\n [\"Slovene\", \"Slovenski Jezik, Sloven\\u0161\\u010Dina\", \"sl\", \"slv\", \"slv\"],\n [\"Oriya\", \"\\u0B13\\u0B21\\u0B3C\\u0B3F\\u0B06\", \"or\", \"ori\", \"ori\"],\n [\"North Ndebele\", \"isiNdebele\", \"nd\", \"nde\", \"nde\"],\n [\"Nauru\", \"Dorerin Naoero\", \"na\", \"nau\", \"nau\"],\n [\"Maori\", \"te reo M\\u0101ori\", \"mi\", \"mri\", \"mao\"],\n [\"Marathi\", \"\\u092E\\u0930\\u093E\\u0920\\u0940\", \"mr\", \"mar\", \"mar\"],\n [\"Luba-Katanga\", \"Kiluba\", \"lu\", \"lub\", \"lub\"],\n [\"Rundi\", \"Ikirundi\", \"rn\", \"run\", \"run\"],\n [\"Central Khmer\", \"\\u1781\\u17D2\\u1798\\u17C2\\u179A, \\u1781\\u17C1\\u1798\\u179A\\u1797\\u17B6\\u179F\\u17B6, \\u1797\\u17B6\\u179F\\u17B6\\u1781\\u17D2\\u1798\\u17C2\\u179A\", \"km\", \"khm\", \"khm\"],\n [\"Western Frisian\", \"Frysk\", \"fy\", \"fry\", \"fry\"],\n [\"Bengali\", \"\\u09AC\\u09BE\\u0982\\u09B2\\u09BE\", \"bn\", \"ben\", \"ben\"],\n [\"Avaric\", \"\\u0430\\u0432\\u0430\\u0440 \\u043C\\u0430\\u0446\\u04C0, \\u043C\\u0430\\u0433\\u04C0\\u0430\\u0440\\u0443\\u043B \\u043C\\u0430\\u0446\\u04C0\", \"av\", \"ava\", \"ava\"],\n [\"Abkhazian\", \"\\u0430\\u04A7\\u0441\\u0443\\u0430 \\u0431\\u044B\\u0437\\u0448\\u04D9\\u0430, \\u0430\\u04A7\\u0441\\u0448\\u04D9\\u0430\", \"ab\", \"abk\", \"abk\"],\n [\"Afar\", \"Afaraf\", \"aa\", \"aar\", \"aar\"],\n [\"Afrikaans\", \"Afrikaans\", \"af\", \"afr\", \"afr\"],\n [\"Amharic\", \"\\u12A0\\u121B\\u122D\\u129B\", \"am\", \"amh\", \"amh\"],\n [\"Aragonese\", \"aragon\\xE9s\", \"an\", \"arg\", \"arg\"],\n [\"Assamese\", \"\\u0985\\u09B8\\u09AE\\u09C0\\u09AF\\u09BC\\u09BE\", \"as\", \"asm\", \"asm\"],\n [\"Bambara\", \"bamanankan\", \"bm\", \"bam\", \"bam\"],\n [\"Bashkir\", \"\\u0431\\u0430\\u0448\\u04A1\\u043E\\u0440\\u0442 \\u0442\\u0435\\u043B\\u0435\", \"ba\", \"bak\", \"bak\"],\n [\"Basque\", \"euskara, euskera\", \"eu\", \"eus\", \"baq\"],\n [\"Belarusian\", \"\\u0431\\u0435\\u043B\\u0430\\u0440\\u0443\\u0441\\u043A\\u0430\\u044F \\u043C\\u043E\\u0432\\u0430\", \"be\", \"bel\", \"bel\"],\n [\"Bosnian\", \"bosanski jezik\", \"bs\", \"bos\", \"bos\"],\n [\"Breton\", \"brezhoneg\", \"br\", \"bre\", \"bre\"],\n [\"Bulgarian\", \"\\u0431\\u044A\\u043B\\u0433\\u0430\\u0440\\u0441\\u043A\\u0438 \\u0435\\u0437\\u0438\\u043A\", \"bg\", \"bul\", \"bul\"],\n [\"Burmese\", \"\\u1017\\u1019\\u102C\\u1005\\u102C\", \"my\", \"mya\", \"bur\"],\n [\"Catalan, Valencian\", \"catal\\xE0, valenci\\xE0\", \"ca\", \"cat\", \"cat\"],\n [\"Chamorro\", \"Chamoru\", \"ch\", \"cha\", \"cha\"],\n [\"Chechen\", \"\\u043D\\u043E\\u0445\\u0447\\u0438\\u0439\\u043D \\u043C\\u043E\\u0442\\u0442\", \"ce\", \"che\", \"che\"],\n [\"Chichewa, Chewa, Nyanja\", \"chiChe\\u0175a, chinyanja\", \"ny\", \"nya\", \"nya\"],\n [\"Chuvash\", \"\\u0447\\u04D1\\u0432\\u0430\\u0448 \\u0447\\u04D7\\u043B\\u0445\\u0438\", \"cv\", \"chv\", \"chv\"],\n [\"Cornish\", \"Kernewek\", \"kw\", \"cor\", \"cor\"],\n [\"Corsican\", \"corsu, lingua corsa\", \"co\", \"cos\", \"cos\"],\n [\"Croatian\", \"hrvatski jezik\", \"hr\", \"hrv\", \"hrv\"],\n [\"Czech\", \"\\u010De\\u0161tina, \\u010Desk\\xFD jazyk\", \"cs\", \"ces\", \"cze\"],\n [\"Danish\", \"dansk\", \"da\", \"dan\", \"dan\"],\n [\"Divehi, Dhivehi, Maldivian\", \"\\u078B\\u07A8\\u0788\\u07AC\\u0780\\u07A8\", \"dv\", \"div\", \"div\"],\n [\"Dutch, Flemish\", \"Nederlands, Vlaams\", \"nl\", \"nld\", \"dut\"],\n [\"Dzongkha\", \"\\u0F62\\u0FAB\\u0F7C\\u0F44\\u0F0B\\u0F41\", \"dz\", \"dzo\", \"dzo\"],\n [\"English\", \"English\", \"en\", \"eng\", \"eng\"],\n [\"Ewe\", \"E\\u028Begbe\", \"ee\", \"ewe\", \"ewe\"],\n [\"Faroese\", \"f\\xF8royskt\", \"fo\", \"fao\", \"fao\"],\n [\"Fijian\", \"vosa Vakaviti\", \"fj\", \"fij\", \"fij\"],\n [\"Finnish\", \"suomi, suomen kieli\", \"fi\", \"fin\", \"fin\"],\n [\"French\", \"fran\\xE7ais, langue fran\\xE7aise\", \"fr\", \"fra\", \"fre\"],\n [\"Galician\", \"Galego\", \"gl\", \"glg\", \"glg\"],\n [\"Georgian\", \"\\u10E5\\u10D0\\u10E0\\u10D7\\u10E3\\u10DA\\u10D8\", \"ka\", \"kat\", \"geo\"],\n [\"German\", \"Deutsch\", \"de\", \"deu\", \"ger\"],\n [\"Greek (modern)\", \"\\u03B5\\u03BB\\u03BB\\u03B7\\u03BD\\u03B9\\u03BA\\u03AC\", \"el\", \"ell\", \"gre\"],\n [\"Gujarati\", \"\\u0A97\\u0AC1\\u0A9C\\u0AB0\\u0ABE\\u0AA4\\u0AC0\", \"gu\", \"guj\", \"guj\"],\n [\"Haitian, Haitian Creole\", \"Krey\\xF2l ayisyen\", \"ht\", \"hat\", \"hat\"],\n [\"Hausa\", \"(Hausa) \\u0647\\u064E\\u0648\\u064F\\u0633\\u064E\", \"ha\", \"hau\", \"hau\"],\n [\"Herero\", \"Otjiherero\", \"hz\", \"her\", \"her\"],\n [\"Hindi\", \"\\u0939\\u093F\\u0928\\u094D\\u0926\\u0940, \\u0939\\u093F\\u0902\\u0926\\u0940\", \"hi\", \"hin\", \"hin\"],\n [\"Hiri Motu\", \"Hiri Motu\", \"ho\", \"hmo\", \"hmo\"],\n [\"Hungarian\", \"magyar\", \"hu\", \"hun\", \"hun\"],\n [\"Irish\", \"Gaeilge\", \"ga\", \"gle\", \"gle\"],\n [\"Igbo\", \"As\\u1EE5s\\u1EE5 Igbo\", \"ig\", \"ibo\", \"ibo\"],\n [\"Icelandic\", \"\\xCDslenska\", \"is\", \"isl\", \"ice\"],\n [\"Italian\", \"Italiano\", \"it\", \"ita\", \"ita\"],\n [\"Japanese\", \"\\u65E5\\u672C\\u8A9E (\\u306B\\u307B\\u3093\\u3054)\", \"ja\", \"jpn\", \"jpn\"],\n [\"Javanese\", \"\\uA9A7\\uA9B1\\uA997\\uA9AE, Basa Jawa\", \"jv\", \"jav\", \"jav\"],\n [\"Kalaallisut, Greenlandic\", \"kalaallisut, kalaallit oqaasii\", \"kl\", \"kal\", \"kal\"],\n [\"Kannada\", \"\\u0C95\\u0CA8\\u0CCD\\u0CA8\\u0CA1\", \"kn\", \"kan\", \"kan\"],\n [\"Kashmiri\", \"\\u0915\\u0936\\u094D\\u092E\\u0940\\u0930\\u0940, \\u0643\\u0634\\u0645\\u064A\\u0631\\u064A\", \"ks\", \"kas\", \"kas\"],\n [\"Kazakh\", \"\\u049B\\u0430\\u0437\\u0430\\u049B \\u0442\\u0456\\u043B\\u0456\", \"kk\", \"kaz\", \"kaz\"],\n [\"Kikuyu, Gikuyu\", \"G\\u0129k\\u0169y\\u0169\", \"ki\", \"kik\", \"kik\"],\n [\"Kinyarwanda\", \"Ikinyarwanda\", \"rw\", \"kin\", \"kin\"],\n [\"Kirghiz, Kyrgyz\", \"\\u041A\\u044B\\u0440\\u0433\\u044B\\u0437\\u0447\\u0430, \\u041A\\u044B\\u0440\\u0433\\u044B\\u0437 \\u0442\\u0438\\u043B\\u0438\", \"ky\", \"kir\", \"kir\"],\n [\"Korean\", \"\\uD55C\\uAD6D\\uC5B4\", \"ko\", \"kor\", \"kor\"],\n [\"Kuanyama, Kwanyama\", \"Kuanyama\", \"kj\", \"kua\", \"kua\"],\n [\"Luxembourgish, Letzeburgesch\", \"L\\xEBtzebuergesch\", \"lb\", \"ltz\", \"ltz\"],\n [\"Ganda\", \"Luganda\", \"lg\", \"lug\", \"lug\"],\n [\"Limburgan, Limburger, Limburgish\", \"Limburgs\", \"li\", \"lim\", \"lim\"],\n [\"Lingala\", \"Ling\\xE1la\", \"ln\", \"lin\", \"lin\"],\n [\"Lao\", \"\\u0E9E\\u0EB2\\u0EAA\\u0EB2\\u0EA5\\u0EB2\\u0EA7\", \"lo\", \"lao\", \"lao\"],\n [\"Lithuanian\", \"lietuvi\\u0173 kalba\", \"lt\", \"lit\", \"lit\"],\n [\"Manx\", \"Gaelg, Gailck\", \"gv\", \"glv\", \"glv\"],\n [\"Macedonian\", \"\\u043C\\u0430\\u043A\\u0435\\u0434\\u043E\\u043D\\u0441\\u043A\\u0438 \\u0458\\u0430\\u0437\\u0438\\u043A\", \"mk\", \"mkd\", \"mac\"],\n [\"Malayalam\", \"\\u0D2E\\u0D32\\u0D2F\\u0D3E\\u0D33\\u0D02\", \"ml\", \"mal\", \"mal\"],\n [\"Maltese\", \"Malti\", \"mt\", \"mlt\", \"mlt\"],\n [\"Marshallese\", \"Kajin M\\u0327aje\\u013C\", \"mh\", \"mah\", \"mah\"],\n [\"Navajo, Navaho\", \"Din\\xE9 bizaad\", \"nv\", \"nav\", \"nav\"],\n [\"Nepali\", \"\\u0928\\u0947\\u092A\\u093E\\u0932\\u0940\", \"ne\", \"nep\", \"nep\"],\n [\"Ndonga\", \"Owambo\", \"ng\", \"ndo\", \"ndo\"],\n [\"Occitan\", \"occitan, lenga d'\\xF2c\", \"oc\", \"oci\", \"oci\"],\n [\"Ossetian, Ossetic\", \"\\u0438\\u0440\\u043E\\u043D \\xE6\\u0432\\u0437\\u0430\\u0433\", \"os\", \"oss\", \"oss\"],\n [\"Panjabi, Punjabi\", \"\\u0A2A\\u0A70\\u0A1C\\u0A3E\\u0A2C\\u0A40\", \"pa\", \"pan\", \"pan\"],\n [\"Polish\", \"j\\u0119zyk polski, polszczyzna\", \"pl\", \"pol\", \"pol\"],\n [\"Portuguese\", \"Portugu\\xEAs\", \"pt\", \"por\", \"por\"],\n [\"Romansh\", \"Rumantsch Grischun\", \"rm\", \"roh\", \"roh\"],\n [\"Russian\", \"\\u0440\\u0443\\u0441\\u0441\\u043A\\u0438\\u0439\", \"ru\", \"rus\", \"rus\"],\n [\"Sindhi\", \"\\u0938\\u093F\\u0928\\u094D\\u0927\\u0940, \\u0633\\u0646\\u068C\\u064A\\u060C \\u0633\\u0646\\u062F\\u06BE\\u06CC\", \"sd\", \"snd\", \"snd\"],\n [\"Northern Sami\", \"Davvis\\xE1megiella\", \"se\", \"sme\", \"sme\"],\n [\"Samoan\", \"gagana fa'a Samoa\", \"sm\", \"smo\", \"smo\"],\n [\"Sango\", \"y\\xE2ng\\xE2 t\\xEE s\\xE4ng\\xF6\", \"sg\", \"sag\", \"sag\"],\n [\"Gaelic, Scottish Gaelic\", \"G\\xE0idhlig\", \"gd\", \"gla\", \"gla\"],\n [\"Shona\", \"chiShona\", \"sn\", \"sna\", \"sna\"],\n [\"Sinhala, Sinhalese\", \"\\u0DC3\\u0DD2\\u0D82\\u0DC4\\u0DBD\", \"si\", \"sin\", \"sin\"],\n [\"Slovak\", \"Sloven\\u010Dina, Slovensk\\xFD Jazyk\", \"sk\", \"slk\", \"slo\"],\n [\"Somali\", \"Soomaaliga, af Soomaali\", \"so\", \"som\", \"som\"],\n [\"Southern Sotho\", \"Sesotho\", \"st\", \"sot\", \"sot\"],\n [\"Spanish, Castilian\", \"Espa\\xF1ol\", \"es\", \"spa\", \"spa\"],\n [\"Sundanese\", \"Basa Sunda\", \"su\", \"sun\", \"sun\"],\n [\"Swedish\", \"Svenska\", \"sv\", \"swe\", \"swe\"],\n [\"Tamil\", \"\\u0BA4\\u0BAE\\u0BBF\\u0BB4\\u0BCD\", \"ta\", \"tam\", \"tam\"],\n [\"Telugu\", \"\\u0C24\\u0C46\\u0C32\\u0C41\\u0C17\\u0C41\", \"te\", \"tel\", \"tel\"],\n [\"Tajik\", \"\\u0442\\u043E\\u04B7\\u0438\\u043A\\u04E3, to\\xE7ik\\u012B, \\u062A\\u0627\\u062C\\u06CC\\u06A9\\u06CC\", \"tg\", \"tgk\", \"tgk\"],\n [\"Thai\", \"\\u0E44\\u0E17\\u0E22\", \"th\", \"tha\", \"tha\"],\n [\"Tigrinya\", \"\\u1275\\u130D\\u122D\\u129B\", \"ti\", \"tir\", \"tir\"],\n [\"Turkmen\", \"T\\xFCrkmen, \\u0422\\u04AF\\u0440\\u043A\\u043C\\u0435\\u043D\", \"tk\", \"tuk\", \"tuk\"],\n [\"Tswana\", \"Setswana\", \"tn\", \"tsn\", \"tsn\"],\n [\"Tongan (Tonga Islands)\", \"Faka Tonga\", \"to\", \"ton\", \"ton\"],\n [\"Turkish\", \"T\\xFCrk\\xE7e\", \"tr\", \"tur\", \"tur\"],\n [\"Tsonga\", \"Xitsonga\", \"ts\", \"tso\", \"tso\"],\n [\"Tatar\", \"\\u0442\\u0430\\u0442\\u0430\\u0440 \\u0442\\u0435\\u043B\\u0435, tatar tele\", \"tt\", \"tat\", \"tat\"],\n [\"Uighur, Uyghur\", \"\\u0626\\u06C7\\u064A\\u063A\\u06C7\\u0631\\u0686\\u06D5, Uyghurche\", \"ug\", \"uig\", \"uig\"],\n [\"Ukrainian\", \"\\u0423\\u043A\\u0440\\u0430\\u0457\\u043D\\u0441\\u044C\\u043A\\u0430\", \"uk\", \"ukr\", \"ukr\"],\n [\"Urdu\", \"\\u0627\\u0631\\u062F\\u0648\", \"ur\", \"urd\", \"urd\"],\n [\"Venda\", \"Tshiven\\u1E13a\", \"ve\", \"ven\", \"ven\"],\n [\"Vietnamese\", \"Ti\\u1EBFng Vi\\u1EC7t\", \"vi\", \"vie\", \"vie\"],\n [\"Walloon\", \"Walon\", \"wa\", \"wln\", \"wln\"],\n [\"Welsh\", \"Cymraeg\", \"cy\", \"cym\", \"wel\"],\n [\"Wolof\", \"Wollof\", \"wo\", \"wol\", \"wol\"],\n [\"Xhosa\", \"isiXhosa\", \"xh\", \"xho\", \"xho\"],\n [\"Yoruba\", \"Yor\\xF9b\\xE1\", \"yo\", \"yor\", \"yor\"],\n [\"Zulu\", \"isiZulu\", \"zu\", \"zul\", \"zul\"]\n];\n\n// src/index.ts\nvar codes = [];\nvar by639_1 = {};\nvar by639_2T = {};\nvar by639_2B = {};\ndata_default.forEach((row) => {\n var code = {\n name: row[0],\n nativeName: row[1],\n iso639_1: row[2],\n iso639_2T: row[3],\n iso639_2B: row[4]\n };\n by639_1[row[2]] = by639_2T[row[3]] = by639_2B[row[4]] = code;\n codes.push(code);\n});\nvar src_default = codes;\nexport {\n by639_1,\n by639_2B,\n by639_2T,\n codes,\n src_default as default\n};\n//# sourceMappingURL=index.mjs.map","// @ts-check\nimport langs from 'iso-language-codes';\n\n/**\n * Use regex to approximate word count in a string\n * @param {string} text\n * @return {number}\n */\nexport function approximateWordCount(text) {\n const m = text.match(/\\S+/g);\n return m ? m.length : 0;\n}\n\n/**\n * Checks whether the current browser is on android\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isAndroid(userAgent = navigator.userAgent) {\n return /android/i.test(userAgent);\n}\n\n/** @type {{[lang: string]: string}} */\n// Handle odd one-off language pairs that might show up over time\nconst specialLangs = {\n \"zh-hans\": \"中文 (Zhōngwén)\",\n};\n\n/**\n * @typedef {string} ISO6391\n * Language code in ISO 639-1 format. e.g. en, fr, zh\n **/\n\n/**\n * @param {string} language in some format\n * @return {ISO6391?}\n */\nexport function toISO6391(language) {\n if (!language) return null;\n language = language.toLocaleLowerCase();\n if (specialLangs[language]) {\n return language;\n }\n const codeObj = (\n findLanguage(language, ['iso639_1']) ||\n findLanguage(language, ['iso639_2T']) ||\n findLanguage(language, ['iso639_2B', 'name', 'nativeName'])\n );\n if (codeObj) return codeObj.iso639_1;\n return null;\n}\n\n/**\n *\n * @param {string} language\n * @returns {string}\n */\nexport function toNativeName(language) {\n if (!language) return null;\n language = language.toLocaleLowerCase();\n if (specialLangs[language]) {\n return specialLangs[language];\n }\n const codeObj = (\n findLanguage(language, ['iso639_1']) ||\n findLanguage(language, ['iso639_2T']) ||\n findLanguage(language, ['iso639_2B', 'name', 'nativeName'])\n );\n if (codeObj?.nativeName) return codeObj.nativeName.split(\", \")[0];\n return null;\n}\n\n/** @typedef {import('iso-language-codes').Code} Code */\n\n/**\n * @param {string} language\n * @param {Array<'iso639_1' | 'iso639_2T' | 'iso639_2B' | 'nativeName' | 'name'>} fields\n * @returns {Code | null}\n */\nfunction findLanguage(language, fields) {\n if (!language) return null;\n language = language.toLowerCase();\n for (const lang of langs) {\n for (const codeType of fields) {\n if (lang[codeType]?.toLowerCase().split(\", \").includes(language)) {\n return lang;\n }\n }\n }\n return null;\n}\n\n/**\n * Checks whether the current browser supports localStorage or\n * if the current context has access to it.\n * @return {boolean}\n */\nexport function hasLocalStorage() {\n try {\n return !!window.localStorage;\n } catch (e) {\n // Will throw in sandboxed iframe\n // DOMException: Window.localStorage getter: Forbidden in a sandboxed document without the 'allow-same-origin' flag.\n return false;\n }\n}\n\nexport const DEBUG_READ_ALOUD = location.toString().indexOf('_debugReadAloud=true') != -1;\n\nexport async function checkIfFiresPause() {\n // Pick some random text so that if it accidentally speaks, it's not too annoying\n const u = new SpeechSynthesisUtterance(\"Loading\");\n let calledPause = false;\n u.addEventListener('pause', () => calledPause = true);\n speechSynthesis.speak(u);\n await new Promise(res => setTimeout(res, 10));\n speechSynthesis.pause();\n return calledPause;\n}\n","// @ts-check\nexport class SelectionObserver {\n selecting = false;\n startedInSelector = false;\n /** @type {HTMLElement} */\n target = null;\n /** @type {Node} */\n lastKnownFocusNode = null;\n\n /**\n * @param {string} selector\n * @param {function('started' | 'cleared' | 'focusChanged', HTMLElement): any} handler\n */\n constructor(selector, handler) {\n this.selector = selector;\n this.handler = handler;\n }\n\n attach() {\n // We can't just use selectstart, because safari on iOS just\n // randomly decides when to fire it 😤\n // document.addEventListener(\"selectstart\", this._onSelectStart);\n // This has to be on document :/\n document.addEventListener(\"selectionchange\", this._onSelectionChange);\n }\n\n detach() {\n document.removeEventListener(\"selectionchange\", this._onSelectionChange);\n }\n\n _onSelectionChange = () => {\n const sel = window.getSelection();\n\n if (!this.selecting && sel.toString()) {\n const target = $(sel.anchorNode).closest(this.selector)[0];\n if (!target) return;\n this.target = target;\n this.selecting = true;\n this.lastKnownFocusNode = sel.focusNode;\n this.handler('started', this.target);\n }\n\n if (this.selecting && (this.lastKnownFocusNode != sel.focusNode || sel.toString() && !sel.isCollapsed)) {\n this.lastKnownFocusNode = sel.focusNode;\n this.handler('focusChanged', this.target);\n }\n\n if (this.selecting && (sel.isCollapsed || !sel.toString() || !$(sel.anchorNode).closest(this.selector)[0])) {\n this.selecting = false;\n this.handler('cleared', this.target);\n }\n };\n}\n","// @ts-check\nimport { SelectionObserver } from \"../BookReader/utils/SelectionObserver.js\";\nimport { html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport '@internetarchive/icon-share';\n\nexport class TextSelectionManager {\n options = {\n // Current Translation plugin implementation does not have words, will limit to one BRlineElement for now\n maxProtectedWords: 200,\n }\n\n /** @type {BRSelectMenu} */\n selectMenu;\n /** @type {boolean} */\n selectionMenuEnabled = false;\n\n /**\n * @param {string} layer Selector for the text layer to manage\n * @param {import('../BookReader.js').default} br\n * @param {Object} options\n * @param {string[]} options.selectionElement CSS selector for elements that count as \"words\" for selection limiting\n * @param {number} [maxWords] Maximum number of words allowed to be selected\n */\n constructor (layer, br, { selectionElement }, maxWords) {\n /** @type {string} */\n this.layer = layer;\n /** @type {import('../BookReader.js').default} */\n this.br = br;\n /** @type {string[]} */\n this.selectionElement = selectionElement;\n this.selectionObserver = new SelectionObserver(this.layer, this._onSelectionChange);\n this.options.maxProtectedWords = maxWords ? maxWords : 200;\n\n this.selectMenu = new BRSelectMenu(br);\n this.selectMenu.className = \"br-select-menu__root\";\n }\n\n init() {\n this.attach();\n new SelectionObserver(this.layer, (selectEvent) => {\n // Track how often selection is used\n if (selectEvent == 'started') {\n this.br.plugins.archiveAnalytics?.sendEvent('BookReader', 'SelectStart');\n\n // Set a class on the page to avoid hiding it when zooming/etc\n this.br.refs.$br.find('.BRpagecontainer--hasSelection').removeClass('BRpagecontainer--hasSelection');\n $(window.getSelection().anchorNode).closest('.BRpagecontainer').addClass('BRpagecontainer--hasSelection');\n this.selectMenu.showMenu();\n\n }\n\n if (selectEvent == 'focusChanged') {\n // hide the button as user changes their selection\n if (this.mouseIsDown) {\n this.selectMenu.hideMenu();\n } else if (window.getSelection().toString()) {\n this.selectMenu.showMenu();\n }\n }\n\n if (selectEvent == 'cleared') {\n this.selectMenu.hideMenu();\n }\n }).attach();\n }\n\n // Need attach + detach methods to toggle w/ Translation plugin\n attach() {\n this.selectionObserver.attach();\n if (this.selectionMenuEnabled) {\n this.renderSelectionMenu();\n }\n if (this.br.protected) {\n document.addEventListener('selectionchange', this._limitSelection);\n // Prevent right clicking when selected text\n $(document.body).on('contextmenu dragstart copy', (e) => {\n const selection = document.getSelection();\n if (selection?.toString()) {\n const intersectsTextLayer = $(this.layer)\n .toArray()\n .some(el => selection.containsNode(el, true));\n if (intersectsTextLayer) {\n e.preventDefault();\n return false;\n }\n }\n });\n }\n }\n\n detach() {\n this.selectionObserver.detach();\n if (this.br.protected) {\n document.removeEventListener('selectionchange', this._limitSelection);\n }\n }\n\n renderSelectionMenu() {\n if (document.querySelector('.br-select-menu__option')) return;\n document.body.append(this.selectMenu);\n }\n /**\n * @param {'started' | 'cleared' | 'focusChanged'} type\n * @param {HTMLElement} target\n */\n _onSelectionChange = (type, target) => {\n if (type === 'started') {\n this.textSelectingMode(target);\n } else if (type === 'cleared') {\n this.defaultMode(target);\n } else if (type === 'focusChanged') {\n // do nothing, just wait for the mouseup to trigger the styling change\n } else {\n throw new Error(`Unknown type ${type}`);\n }\n }\n\n /**\n * Intercept copied text to remove any styling applied to it\n * @param {JQuery} $container\n */\n interceptCopy ($container) {\n $container[0].addEventListener('copy', (event) => {\n const selection = document.getSelection();\n event.clipboardData.setData('text/plain', selection.toString());\n event.preventDefault();\n });\n }\n\n /**\n * Initializes text selection modes if there is a text layer on the page\n * @param {JQuery} $container\n */\n stopPageFlip($container) {\n /** @type {JQuery<HTMLElement>} */\n const $textLayer = $container.find(this.layer);\n if (!$textLayer.length) return;\n $textLayer.each((i, s) => this.defaultMode(s));\n if (!this.br.protected) {\n this.interceptCopy($container);\n }\n }\n\n /**\n * Applies mouse events when in default mode\n * @param {HTMLElement} textLayer\n */\n defaultMode (textLayer) {\n const $pageContainer = $(textLayer).closest('.BRpagecontainer');\n textLayer.style.pointerEvents = \"none\";\n $pageContainer.find(\"img\").css(\"pointer-events\", \"auto\");\n\n $(textLayer).off(\".textSelectPluginHandler\");\n const startedMouseDown = this.mouseIsDown;\n let skipNextMouseup = this.mouseIsDown;\n if (startedMouseDown) {\n textLayer.style.pointerEvents = \"auto\";\n }\n\n // Need to stop propagation to prevent DragScrollable from\n // blocking selection\n $(textLayer).on(\"mousedown.textSelectPluginHandler\", (event) => {\n this.mouseIsDown = true;\n this.selectMenu.hideMenu();\n if ($(event.target).is(this.selectionElement.join(\", \"))) {\n event.stopPropagation();\n }\n });\n\n $(textLayer).on(\"mouseup.textSelectPluginHandler\", (event) => {\n this.mouseIsDown = false;\n this.selectMenu.hideMenu();\n textLayer.style.pointerEvents = \"none\";\n if (skipNextMouseup) {\n skipNextMouseup = false;\n event.stopPropagation();\n }\n });\n }\n\n /**\n * This mode is active while there is a selection on the given textLayer\n * @param {HTMLElement} textLayer\n */\n textSelectingMode(textLayer) {\n const $pageContainer = $(textLayer).closest('.BRpagecontainer');\n // Make text layer consume all events\n textLayer.style.pointerEvents = \"all\";\n // Block img from getting long-press to save while selecting\n $pageContainer.find(\"img\").css(\"pointer-events\", \"none\");\n\n $(textLayer).off(\".textSelectPluginHandler\");\n\n $(textLayer).on(\"mousedown.textSelectPluginHandler\", (event) => {\n if (event.which != 1) return;\n this.mouseIsDown = true;\n event.stopPropagation();\n this.selectMenu.hideMenu();\n });\n\n // Prevent page flip on click\n $(textLayer).on('mouseup.textSelectPluginHandler', (event) => {\n this.mouseIsDown = false;\n if (event.which != 1) return;\n event.stopPropagation();\n this.selectMenu.showMenu();\n });\n }\n\n _limitSelection = () => {\n const selection = window.getSelection();\n if (!selection.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n\n // Check if range.startContainer is inside the sub-tree of .BRContainer\n const startInBr = !!range.startContainer.parentElement.closest('.BRcontainer');\n const endInBr = !!range.endContainer.parentElement.closest('.BRcontainer');\n if (!startInBr && !endInBr) return;\n if (!startInBr || !endInBr) {\n // weird case, just clear the selection\n selection.removeAllRanges();\n return;\n }\n\n // Find the last allowed word in the selection\n const lastAllowedWord = genAt(\n genFilter(\n walkBetweenNodes(range.startContainer, range.endContainer),\n (node) => node.classList?.contains(\n this.selectionElement[0].replace(\".\", \"\"),\n ),\n ),\n this.options.maxProtectedWords - 1,\n );\n\n if (!lastAllowedWord || range.endContainer.parentNode == lastAllowedWord) return;\n\n const newRange = document.createRange();\n newRange.setStart(range.startContainer, range.startOffset);\n newRange.setEnd(lastAllowedWord.firstChild, lastAllowedWord.textContent.length);\n\n selection.removeAllRanges();\n selection.addRange(newRange);\n };\n}\n\n/**\n * Builds a TextFragment string from a given text selection.\n * Note does not include the fragment directive `:~:` or # symbol\n * See https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment/Text_fragments\n * @param {Selection} selection currently selected text, eg `document.getSelection()`\n * @param {HTMLElement[]} contextElements elements providing context for the selection\n * @returns {string}\n */\nexport function createTextFragmentUrlParam(selection, contextElements) {\n // TODO: Can import something that handles this more gracefully? see -\n // https://web.dev/articles/text-fragments#:~:text=In%20its%20simplest%20form%2C%20the%20syntax%20of,percent%2Dencoded%20text%20I%20want%20to%20link%20to.\n\n // :~:text=[prefix-,]textStart[,textEnd][,-suffix]\n const highlightedText = selection.toString().replace(/[\\s]+/g, \" \").trim().split(\" \");\n const direction = selection.direction;\n const startNode = direction == 'backward' ? selection.focusNode : selection.anchorNode;\n const endNode = direction == 'backward' ? selection.anchorNode : selection.focusNode;\n // If text selection begins or ends with a space, we look for the next eligible word to serve as the start or end word\n const startWord = startNode.textContent.replace(/[\\s]+/g, \"\") ? startNode.textContent : highlightedText[0];\n const endWord = endNode.textContent.replace(/[\\s]+/g, \"\") ? endNode.textContent : highlightedText[highlightedText.length - 1];\n\n const textStartRe = RegExp.escape(startWord);\n const textEndRe = RegExp.escape(endWord);\n\n // 's' regex modifier ensures the `.` also captures newline characters\n // Need to use lookahead/lookbehind assertions to allow for overlapping quotes (i.e. multiple \"Holmes\" on the same page)\n const startPhraseMatchRe = new RegExp(String.raw`(?<=(${textStartRe}).*?)(${textEndRe})`, \"gis\");\n const endPhraseMatchRe = new RegExp(String.raw`(${textStartRe})(?=.*?(${textEndRe}))`, \"gis\");\n\n // Duplicated spaces in pageLayer.textContent for some reason\n const selectionContext = contextElements\n .map((el) => el.textContent)\n .join(' ')\n .replace(/\\s+/g, \" \");\n const startPhraseFoundMatches = selectionContext.matchAll(startPhraseMatchRe).toArray();\n const endPhraseFoundMatches = selectionContext.matchAll(endPhraseMatchRe).toArray();\n if (startPhraseFoundMatches.length == 1 && endPhraseFoundMatches.length == 1) {\n // If `startWord...endWord` quote is unambiguous and only occurs once, no prefix-/-suffix is needed for the URL param\n return `text=${encodeURIComponent(startWord)},${encodeURIComponent(endWord)}`;\n }\n\n // Need to add some additional context to `startWord...endWord` by including surrounding words before and after the keywords\n const preStartRange = document.createRange();\n preStartRange.setStart(contextElements[0].firstElementChild, 0);\n preStartRange.setEnd(startNode, 0);\n\n const postEndRange = document.createRange();\n postEndRange.setStart(endNode, endNode.textContent.length);\n const lastWordOfPageEl = getLastMostElement(contextElements[contextElements.length - 1]);\n postEndRange.setEnd(lastWordOfPageEl, Math.max(0, lastWordOfPageEl.textContent.length - 1));\n\n // prefixes/suffixes cannot contain paragraph breaks, words that are from more than one line break away should not be included\n const prefix = getLastWords(3, preStartRange.toString())\n .replace(/[ ]+/g, \" \")\n .trim()\n .replace(/^[^\\n]*\\n/gm, \"\");\n const suffix = getFirstWords(3, postEndRange.toString())\n .replace(/[ ]+/g, \" \")\n .trim()\n .replace(/\\n[^\\n]*$/gm, \"\");\n\n // Partially selected words need to be captured completely\n // Guarantee that all whitespace is replaced with just one space and that the first/last word of the highlight is not a space\n const fullHighlight = selection.toString().replace(/\\s+/g, \" \").trim().split(/\\s/g);\n // Capture start/end words that may be partially highlighted\n if (startNode.textContent.trim().length != 0) {\n if (!startNode.textContent.includes(fullHighlight[0])) {\n fullHighlight.unshift(startNode.textContent);\n } else {\n fullHighlight[0] = startNode.textContent;\n }\n }\n if (endNode.textContent.trim().length != 0) {\n if (!endNode.textContent.includes(fullHighlight[fullHighlight.length - 1])) {\n fullHighlight.push(endNode.textContent);\n }\n fullHighlight[fullHighlight.length - 1] = endNode.textContent;\n }\n\n let quote = [fullHighlight.join(\" \")];\n if (fullHighlight.length > 6) {\n quote = [fullHighlight.slice(0, 3).join(\" \"), fullHighlight.slice(-3).join(\" \")];\n }\n\n const textFragmentArr = [];\n if (prefix) textFragmentArr.push(`${prefix}-`);\n textFragmentArr.push(...quote);\n if (suffix) textFragmentArr.push(`-${suffix}`);\n\n return `text=${textFragmentArr.map(encodeURIComponent).join(',')}`;\n}\n\n/**\n * @template T\n * Get the i-th element of an iterable\n * @param {Iterable<T>} iterable\n * @param {number} index\n */\nexport function genAt(iterable, index) {\n let i = 0;\n for (const x of iterable) {\n if (i == index) {\n return x;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * @template T\n * Generator version of filter\n * @param {Iterable<T>} iterable\n * @param {function(T): boolean} fn\n */\nexport function* genFilter(iterable, fn) {\n for (const x of iterable) {\n if (fn(x)) yield x;\n }\n}\n\n/**\n * Depth traverse the DOM tree starting at `start`, and ending at `end`.\n * @param {Node} start\n * @param {Node} end\n * @returns {Generator<Node>}\n */\nexport function* walkBetweenNodes(start, end) {\n let done = false;\n\n /**\n * @param {Node} node\n */\n function* walk(node, {children = true, parents = true, siblings = true} = {}) {\n if (node === end) {\n done = true;\n yield node;\n return;\n }\n\n // yield self\n yield node;\n\n // First iterate children (depth-first traversal)\n if (children && node.firstChild) {\n yield* walk(node.firstChild, {children: true, parents: false, siblings: true});\n if (done) return;\n }\n\n // Then iterate siblings\n if (siblings) {\n for (let sib = node.nextSibling; sib; sib = sib.nextSibling) {\n yield* walk(sib, {children: true, parents: false, siblings: false});\n if (done) return;\n }\n }\n\n // Finally, move up the tree\n if (parents && node.parentNode) {\n yield* walk(node.parentNode, {children: false, parents: true, siblings: true});\n if (done) return;\n }\n }\n\n yield* walk(start);\n}\n\n@customElement('br-select-menu')\nclass BRSelectMenu extends LitElement {\n /** @type {import('../BookReader.js').default} */\n br;\n\n constructor(br) {\n super();\n this.br = br;\n }\n\n /** @override */\n createRenderRoot() {\n // Disable shadow DOM; that would require a huge rejiggering of CSS\n return this;\n }\n\n render() {\n return html`\n <button @click=${this.handleCopyLinkToHighlight} class=\"br-select-menu__option\">\n <ia-icon-share class=\"br-select-menu__icon\" aria-hidden=\"true\"></ia-icon-share>\n <span class=\"br-select-menu__label\">Copy Link to Highlight</span>\n </button>\n `;\n }\n\n /**\n * @param {MouseEvent} e\n */\n handleCopyLinkToHighlight(e) {\n e.preventDefault();\n\n const currentParams = this.br.readQueryString();\n const currentSelection = window.getSelection();\n /** @type {HTMLElement} */\n const textLayer = currentSelection.anchorNode.parentElement.closest('.BRtextLayer');\n const textFragmentUrlParam = createTextFragmentUrlParam(currentSelection, Array.from(document.querySelectorAll('.BRpage-visible')));\n\n // Note: Have to do a param construction to avoid url-encoding of commas in the text fragment param\n let linkToHighlightParams = currentParams;\n if (currentParams.includes('text=')) {\n linkToHighlightParams = currentParams.replace(/(text=)[\\w\\W\\d%]+/, textFragmentUrlParam);\n } else {\n const sep = linkToHighlightParams ? '&' : '?';\n linkToHighlightParams += `${sep}${textFragmentUrlParam}`;\n }\n\n const currentUrl = window.location;\n // TODO - updateResumeValue + getCookiePath in plugin.resume.js overrides the adjustedUrlPageNumPath, check how to workaround this\n // TODO - won't work with hash mode\n const adjustedUrlPageNumPath = currentUrl.pathname.toString().replace(/(?<=\\/page\\/)\\d+(?=\\/)/, textLayer.parentElement.getAttribute('data-page-num'));\n\n const linkToHighlight = `${currentUrl.origin}${adjustedUrlPageNumPath}${linkToHighlightParams}${currentUrl?.hash || ''}`;\n navigator.clipboard.writeText(linkToHighlight);\n }\n\n showMenu() {\n if (this.br.plugins.translate?.userToggleTranslate) return;\n const currentSelection = window.getSelection();\n const start = currentSelection.anchorNode.parentElement;\n const end = currentSelection.focusNode.parentElement; // will always be a text node\n const height = 30;\n const width = 60;\n const startBoundingRect = start.getBoundingClientRect();\n const endBoundingRect = end.getBoundingClientRect();\n let hlButtonTop = startBoundingRect.top - height;\n let hlButtonLeft = startBoundingRect.left - width;\n if (currentSelection.direction == 'backward') {\n hlButtonTop = endBoundingRect.top - height;\n hlButtonLeft = endBoundingRect.left - width;\n }\n this.style.top = `${hlButtonTop}px`;\n this.style.left = `${hlButtonLeft}px`;\n this.style.zIndex = '1';\n this.style.position = 'absolute';\n this.style.display = 'block';\n }\n\n hideMenu = () => {\n this.style.display = 'none';\n return;\n }\n}\n\n/**\n * @param {number} numWords\n * @param {string} text\n * @return {string}\n */\nexport function getFirstWords(numWords, text) {\n text = text.trim();\n const re = new RegExp(String.raw`^(\\S+(\\s+|$)){1,${numWords}}`);\n const m = text.match(re);\n return m ? m[0].trim() : \"\";\n}\n\n/**\n * @param {number} numWords\n * @param {string} text\n * @return {string}\n */\nexport function getLastWords(numWords, text) {\n text = text.trim();\n const re = new RegExp(String.raw`((^|\\s+)\\S+){1,${numWords}}\\s*?$`);\n const m = text.match(re);\n return m ? m[0].trim() : \"\";\n}\n\n/**\n * @param {HTMLElement | Element} parent\n * @returns {Node}\n */\nexport function getLastMostElement(parent) {\n while (parent.lastElementChild) {\n parent = parent.lastElementChild;\n }\n return parent;\n}\n","/**\n * @template T\n */\nexport class Cache {\n constructor(maxSize = 10) {\n this.maxSize = maxSize;\n /** @type {T[]} */\n this.entries = [];\n }\n\n /**\n * @param {T} entry\n */\n add(entry) {\n if (this.entries.length >= this.maxSize) {\n this.entries.shift();\n }\n this.entries.push(entry);\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 * @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":["IAIconShare","styles","render","customElements","define","PROPER_FUNCTION_NAME","fails","whitespaces","module","exports","METHOD_NAME","name","$","call","uncurryThis","createIteratorConstructor","createIterResultObject","requireObjectCoercible","toLength","toString","anObject","isObject","classof","isRegExp","getRegExpFlags","getMethod","defineBuiltIn","wellKnownSymbol","speciesConstructor","advanceStringIndex","regExpExec","InternalStateModule","IS_PURE","MATCH_ALL","REGEXP_STRING","REGEXP_STRING_ITERATOR","setInternalState","set","getInternalState","getterFor","RegExpPrototype","RegExp","prototype","$TypeError","TypeError","stringIndexOf","indexOf","nativeMatchAll","matchAll","WORKS_WITH_NON_GLOBAL_REGEX","$RegExpStringIterator","regexp","string","$global","fullUnicode","this","type","global","unicode","done","state","undefined","R","S","match","lastIndex","$matchAll","matcher","C","flags","source","target","proto","forced","rx","O","toIndexedObject","toObject","lengthOfArrayLike","push","join","stat","raw","template","rawTemplate","literalSegments","argumentsLength","arguments","length","elements","i","$trim","forcedStringTrimMethod","trim","BookReaderPlugin","br","_classCallCheck","options","key","value","Object","assign","pageContainer","$toolbarElement","$navBar","_marked2","_regenerator","m","genMap","_marked3","lookAroundWindow","_marked4","zip","_toConsumableArray","r","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","Symbol","iterator","from","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_createForOfIteratorHelper","e","t","_n","F","s","n","f","o","a","u","next","return","_slicedToArray","_arrayWithHoles","l","_iterableToArrayLimit","_nonIterableRest","slice","constructor","test","toStringTag","c","Generator","create","_regeneratorDefine2","p","y","G","v","d","bind","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","w","defineProperty","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","apply","_next","_throw","_defineProperties","_toPropertyKey","_createClass","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_getPrototypeOf","_setPrototypeOf","_defineProperty","_typeof","toPrimitive","String","_toPrimitive","BookReader","window","TextSelectionPlugin","_BookReaderPlugin","_this","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","enabled","fullDjvuXmlUrl","singlePageDjvuXmlUrl","jsonp","maxProtectedWords","Cache","rtl","pageProgression","textSelectionManager","TextSelectionManager","selectionElement","_inherits","_this2","on","_","_ref","pageContainerEl","querySelector","trigger","loadData","init","selectionMenuEnabled","renderSelectionMenu","mode","constModeThumb","page","createTextLayer","djvuPagesPromise","ajax","url","applyVariables","vars","dataType","cache","xhrFields","withCredentials","protected","error","res","xmlMap","parseXML","find","_getPageText","_callee","index","cachedEntry","xmlDoc","result","XMLpagesArr","_context","pageTextCache","entries","x","response","pageIndex","add","_x","_createTextLayer","_callee2","$container","XMLpage","totalWords","textLayer","ratioW","ratioH","bookLangCode","ocrParagraphs","paragEls","paragraphRects","yAdded","_iterator","_step","_step$value","ocrParagraph","paragEl","ocrParagBounds","realRect","_ocrParagBounds","ocrLeft","ocrRight","ocrTop","newStartMargin","newTop","_this3","_context2","getPageText","filter","ele","_ele$getAttribute$spl2","getAttribute","split","map","parseFloat","left","top","console","remove","recursivelyAddCoords","maxWordRendered","log","concat","createDIVPageLayer","style","width","height","transform","toISO6391","bookLanguage","setAttribute","toArray","el","renderParagraph","appendChild","determineRealRects","attr","get","right","marginTop","document","createTextNode","err","append","stopPageFlip","hasClass","_x2","createElement","classList","ariaHidden","_$$attr$split$map2","paragLeft","paragBottom","paragRight","paragTop","wordHeightArr","lines","_step2","_iterator2","augmentLine","_step2$value","prevLine","line","nextLine","isLastLineOfParagraph","ocrElement","lineEl","_step5","_iterator5","words","_step5$value","wordIndex","currWord","_$$attr$split$map4","bottom","wordHeight","lastWord","textContent","endsWith","newLeft","firstWord","wordEl","space","hasHyphen","lastWordEl","children","sort","b","paragWordHeight","Math","floor","fontSize","_step3","wordRects","_iterator3","querySelectorAll","_step3$value","ocrWord","_$$attr$split$map8","ocrWidth","diff","letterSpacing","_step4","spaceRects","ocrLines","lineEls","ySoFar","_iterator4","_step6","_step4$value","ocrLine","xSoFar","_iterator6","_step6$value","wordRect","_$$attr$split$map0","previousElementSibling","min","lineHeight","parentEl","selector","initals","position","visibility","body","rects","Map","origRect","getBoundingClientRect","Rect","scrollX","scrollY","removeChild","gen","fn","_iterator9","_step9","_t3","_context4","prev","cur","_iterator0","_step0","_t4","_context5","gen1","gen2","it1","it2","r1","r2","_context6","Error","xmlEl","_step10","_iterator10","_step11","childCoords","_iterator11","child","boundingCoords","bounds","_step1","leftMost","Infinity","bottomMost","rightMost","topMost","_iterator1","_step1$value","max","determineBounds","abs","registerPlugin","codes","by639_1","by639_2T","by639_2B","forEach","row","code","nativeName","iso639_1","iso639_2T","iso639_2B","src_default","approximateWordCount","text","isAndroid","userAgent","navigator","specialLangs","language","toLocaleLowerCase","codeObj","findLanguage","toNativeName","fields","toLowerCase","langs","lang","_lang$codeType","includes","hasLocalStorage","localStorage","DEBUG_READ_ALOUD","location","SelectionObserver","handler","sel","getSelection","selecting","anchorNode","closest","lastKnownFocusNode","focusNode","isCollapsed","addEventListener","_onSelectionChange","removeEventListener","_marked","genFilter","walkBetweenNodes","_taggedTemplateLiteral","freeze","defineProperties","layer","maxWords","textSelectingMode","defaultMode","selection","rangeCount","range","getRangeAt","startInBr","startContainer","parentElement","endInBr","endContainer","lastAllowedWord","iterable","genAt","node","_node$classList","contains","replace","parentNode","newRange","createRange","setStart","startOffset","setEnd","firstChild","removeAllRanges","addRange","selectionObserver","selectMenu","BRSelectMenu","className","attach","selectEvent","_this2$br$plugins$arc","plugins","archiveAnalytics","sendEvent","refs","$br","removeClass","addClass","showMenu","mouseIsDown","hideMenu","_limitSelection","some","containsNode","preventDefault","detach","event","clipboardData","setData","_this4","$textLayer","each","interceptCopy","_this5","$pageContainer","pointerEvents","css","off","startedMouseDown","skipNextMouseup","is","stopPropagation","_this6","which","createTextFragmentUrlParam","contextElements","highlightedText","direction","startNode","endNode","startWord","endWord","textStartRe","escape","textEndRe","startPhraseMatchRe","_templateObject","endPhraseMatchRe","_templateObject2","selectionContext","startPhraseFoundMatches","endPhraseFoundMatches","encodeURIComponent","preStartRange","firstElementChild","postEndRange","lastWordOfPageEl","parent","lastElementChild","getLastMostElement","prefix","numWords","re","_templateObject5","getLastWords","suffix","_templateObject4","getFirstWords","fullHighlight","unshift","quote","textFragmentArr","_t","start","end","walk","_context3","_ref2","_ref2$children","_ref2$parents","parents","_ref2$siblings","siblings","sib","_regeneratorValues","nextSibling","_initialize","customElement","LitElement","_LitElement2","_this7","_callSuper","kind","html","_templateObject3","handleCopyLinkToHighlight","currentParams","readQueryString","currentSelection","textFragmentUrlParam","linkToHighlightParams","currentUrl","adjustedUrlPageNumPath","pathname","linkToHighlight","origin","hash","clipboard","writeText","_this$br$plugins$tran","translate","userToggleTranslate","startBoundingRect","endBoundingRect","hlButtonTop","hlButtonLeft","zIndex","display","_this8","maxSize","entry","shift","overrides","possibleFilters","APPLY_FILTERS","$0","$1","_expression$split$map2","varName","filterNames","reduce","acc","urlencode"],"sourceRoot":""}
|