@internetarchive/bookreader 5.0.0-11-multiple-files → 5.0.0-110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BookReader/474.js +2 -0
- package/BookReader/474.js.map +1 -0
- package/BookReader/BookReader.css +616 -1467
- package/BookReader/BookReader.js +2 -21564
- package/BookReader/BookReader.js.LICENSE.txt +20 -20
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/bergamot-translator-worker.js +2966 -0
- package/BookReader/bergamot-translator-worker.wasm +0 -0
- package/BookReader/hypothesis/LICENSE +50 -0
- package/BookReader/hypothesis/README.md +55 -0
- package/BookReader/hypothesis/build/boot.js +1 -0
- package/BookReader/hypothesis/build/manifest.json +20 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
- package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/highlights.css +2 -0
- package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
- package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
- package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
- package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
- package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
- package/BookReader/hypothesis/package.json +126 -0
- package/BookReader/ia-bookreader-bundle.js +1907 -0
- package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
- package/BookReader/ia-bookreader-bundle.js.map +1 -0
- package/BookReader/icons/1up.svg +1 -12
- package/BookReader/icons/2up.svg +1 -15
- package/BookReader/icons/advance.svg +3 -26
- package/BookReader/icons/chevron-right.svg +1 -1
- package/BookReader/icons/close-circle-dark.svg +1 -0
- package/BookReader/icons/close-circle.svg +1 -1
- package/BookReader/icons/fullscreen.svg +1 -17
- package/BookReader/icons/fullscreen_exit.svg +1 -17
- package/BookReader/icons/hamburger.svg +1 -15
- package/BookReader/icons/left-arrow.svg +1 -12
- package/BookReader/icons/magnify-minus.svg +1 -16
- package/BookReader/icons/magnify-plus.svg +1 -17
- package/BookReader/icons/magnify.svg +1 -15
- package/BookReader/icons/pause.svg +1 -23
- package/BookReader/icons/play.svg +1 -22
- package/BookReader/icons/playback-speed.svg +1 -34
- package/BookReader/icons/read-aloud.svg +1 -22
- package/BookReader/icons/review.svg +3 -22
- package/BookReader/icons/slider-toggle.svg +1 -0
- package/BookReader/icons/thumbnails.svg +1 -17
- package/BookReader/icons/voice.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -22
- package/BookReader/images/BRicons.svg +5 -94
- package/BookReader/images/books_graphic.svg +1 -177
- package/BookReader/images/hypothesis.ico +0 -0
- package/BookReader/images/icon_book.svg +1 -12
- package/BookReader/images/icon_bookmark.svg +1 -12
- package/BookReader/images/icon_experiment.svg +1 -0
- package/BookReader/images/icon_gear.svg +1 -14
- package/BookReader/images/icon_hamburger.svg +1 -20
- package/BookReader/images/icon_home.svg +1 -21
- package/BookReader/images/icon_info.svg +1 -11
- package/BookReader/images/icon_one_page.svg +1 -8
- package/BookReader/images/icon_pause.svg +1 -1
- package/BookReader/images/icon_play.svg +1 -1
- package/BookReader/images/icon_playback-rate.svg +1 -15
- package/BookReader/images/icon_search_button.svg +1 -8
- package/BookReader/images/icon_share.svg +1 -9
- package/BookReader/images/icon_skip-ahead.svg +1 -6
- package/BookReader/images/icon_skip-back.svg +2 -13
- package/BookReader/images/icon_speaker.svg +1 -18
- package/BookReader/images/icon_speaker_open.svg +1 -10
- package/BookReader/images/icon_thumbnails.svg +1 -12
- package/BookReader/images/icon_toc.svg +1 -5
- package/BookReader/images/icon_two_pages.svg +1 -9
- package/BookReader/images/marker_chap-off.svg +1 -11
- package/BookReader/images/marker_chap-on.svg +1 -11
- package/BookReader/images/marker_srch-on.svg +1 -11
- package/BookReader/images/translate.svg +1 -0
- package/BookReader/images/unviewable_page.png +0 -0
- package/BookReader/jquery-3.js +2 -0
- package/BookReader/jquery-3.js.LICENSE.txt +24 -0
- package/BookReader/plugins/plugin.archive_analytics.js +1 -172
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -165
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +19 -301
- package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.chapters.js.map +1 -1
- package/BookReader/plugins/plugin.experiments.js +3 -0
- package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.experiments.js.map +1 -0
- package/BookReader/plugins/plugin.iframe.js +1 -74
- package/BookReader/plugins/plugin.iframe.js.map +1 -1
- package/BookReader/plugins/plugin.iiif.js +2 -0
- package/BookReader/plugins/plugin.iiif.js.map +1 -0
- package/BookReader/plugins/plugin.resume.js +1 -368
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +2 -1420
- package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +2 -1080
- package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.translate.js +137 -0
- package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.translate.js.map +1 -0
- package/BookReader/plugins/plugin.tts.js +2 -9193
- package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +1 -269
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
- package/BookReader/plugins/translator-worker.js +2 -0
- package/BookReader/plugins/translator-worker.js.map +1 -0
- package/BookReader/silence.mp3 +0 -0
- package/BookReader/translator-worker.js +475 -0
- package/BookReader/webcomponents-bundle.js +3 -0
- package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
- package/BookReader/webcomponents-bundle.js.map +1 -0
- package/README.md +14 -3
- package/jsconfig.json +19 -0
- package/package.json +92 -70
- package/src/BookReader/BookModel.js +92 -46
- package/src/BookReader/DragScrollable.js +233 -0
- package/src/BookReader/ImageCache.js +49 -16
- package/src/BookReader/Mode1Up.js +66 -356
- package/src/BookReader/Mode1UpLit.js +392 -0
- package/src/BookReader/Mode2Up.js +87 -1315
- package/src/BookReader/Mode2UpLit.js +788 -0
- package/src/BookReader/ModeAbstract.js +43 -0
- package/src/BookReader/ModeCoordinateSpace.js +29 -0
- package/src/BookReader/ModeSmoothZoom.js +312 -0
- package/src/BookReader/ModeThumb.js +30 -16
- package/src/BookReader/Navbar/Navbar.js +201 -76
- package/src/BookReader/PageContainer.js +120 -23
- package/src/BookReader/ReduceSet.js +3 -3
- package/src/BookReader/Toolbar/Toolbar.js +19 -41
- package/src/BookReader/events.js +3 -3
- package/src/BookReader/options.js +94 -17
- package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/src/BookReader/utils/ScrollClassAdder.js +31 -0
- package/src/BookReader/utils/SelectionObserver.js +45 -0
- package/src/BookReader/utils/classes.js +1 -1
- package/src/BookReader/utils.js +141 -13
- package/src/BookReader.js +711 -1241
- package/src/BookReaderPlugin.js +52 -0
- package/src/assets/icons/close-circle-dark.svg +1 -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 -17
- 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 +33 -27
- package/src/css/_BRnav.scss +74 -70
- package/src/css/_BRpages.scss +171 -42
- package/src/css/_BRsearch.scss +69 -235
- package/src/css/_BRtoolbar.scss +5 -5
- package/src/css/_TextSelection.scss +129 -24
- package/src/css/_colorbox.scss +2 -2
- package/src/css/_controls.scss +24 -7
- package/src/css/_icons.scss +14 -1
- package/src/{BookNavigator/assets → css}/button-base.js +10 -3
- 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 +29 -25
- 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 +44 -32
- package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
- package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +5 -10
- 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 +310 -201
- package/src/plugins/plugin.experiments.js +321 -0
- package/src/plugins/plugin.iframe.js +1 -1
- package/src/plugins/plugin.iiif.js +141 -0
- package/src/plugins/plugin.resume.js +53 -50
- package/src/plugins/plugin.text_selection.js +522 -219
- package/src/plugins/plugin.vendor-fullscreen.js +7 -7
- package/src/plugins/search/plugin.search.js +380 -360
- package/src/{BookNavigator → plugins}/search/search-provider.js +94 -32
- package/src/{BookNavigator → plugins}/search/search-results.js +108 -90
- package/src/plugins/search/utils.js +50 -0
- package/src/plugins/search/view.js +79 -210
- 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 +21 -31
- package/src/plugins/tts/PageChunk.js +33 -21
- package/src/plugins/tts/PageChunkIterator.js +11 -17
- package/src/plugins/tts/WebTTSEngine.js +131 -91
- package/src/plugins/tts/plugin.tts.js +345 -350
- package/src/plugins/tts/utils.js +77 -49
- package/src/plugins/url/UrlPlugin.js +191 -0
- package/src/plugins/{plugin.url.js → url/plugin.url.js} +47 -18
- package/src/util/TextSelectionManager.js +282 -0
- package/src/util/browserSniffing.js +33 -1
- package/src/util/cache.js +20 -0
- package/src/util/docCookies.js +21 -2
- package/src/util/lit.js +15 -0
- package/src/util/strings.js +1 -0
- package/.babelrc +0 -12
- package/.dependabot/config.yml +0 -6
- package/.eslintrc.js +0 -49
- 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 -28
- package/.github/workflows/npm-publish.yml +0 -47
- package/.testcaferc.json +0 -5
- package/BookReader/bookreader-component-bundle.js +0 -14330
- package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
- package/BookReader/bookreader-component-bundle.js.map +0 -1
- package/BookReader/icons/sort-ascending.svg +0 -1
- package/BookReader/icons/sort-descending.svg +0 -1
- package/BookReader/jquery-1.10.1.js +0 -108
- package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
- package/BookReader/plugins/plugin.menu_toggle.js +0 -369
- package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
- package/BookReader/plugins/plugin.mobile_nav.js +0 -335
- package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
- package/BookReaderDemo/BookReaderDemo.css +0 -41
- package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
- package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
- package/BookReaderDemo/BookReaderJSSimple.js +0 -55
- package/BookReaderDemo/IIIFBookReader.js +0 -207
- package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
- package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
- package/BookReaderDemo/demo-advanced.html +0 -33
- package/BookReaderDemo/demo-autoplay.html +0 -38
- package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
- package/BookReaderDemo/demo-embed.html +0 -26
- package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
- package/BookReaderDemo/demo-fullscreen.html +0 -33
- package/BookReaderDemo/demo-iiif.html +0 -34
- package/BookReaderDemo/demo-iiif.js +0 -26
- package/BookReaderDemo/demo-internetarchive.html +0 -74
- package/BookReaderDemo/demo-multiple.html +0 -43
- package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
- package/BookReaderDemo/demo-preview-pages.html +0 -1092
- package/BookReaderDemo/demo-simple.html +0 -34
- package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
- package/BookReaderDemo/immersion-1up.html +0 -64
- package/BookReaderDemo/immersion-mode.html +0 -35
- package/BookReaderDemo/toggle_controls.html +0 -53
- package/BookReaderDemo/view_mode.html +0 -39
- package/BookReaderDemo/viewmode-cycle.html +0 -41
- package/CHANGELOG.md +0 -476
- 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 -451
- package/src/BookNavigator/assets/book-loader.js +0 -27
- package/src/BookNavigator/assets/icon_checkmark.js +0 -6
- package/src/BookNavigator/assets/icon_close.js +0 -3
- package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
- package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
- package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
- package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
- package/src/BookNavigator/downloads/downloads-provider.js +0 -66
- package/src/BookNavigator/search/a-search-result.js +0 -55
- package/src/BookNavigator/volumes/volumes-provider.js +0 -75
- package/src/BookNavigator/volumes/volumes.js +0 -161
- package/src/BookReader/DebugConsole.js +0 -54
- package/src/BookReaderComponent/BookReaderComponent.js +0 -112
- package/src/ItemNavigator/ItemNavigator.js +0 -372
- package/src/ItemNavigator/providers/sharing.js +0 -29
- package/src/assets/icons/sort-ascending.svg +0 -1
- package/src/assets/icons/sort-descending.svg +0 -1
- 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 -258
- 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-results.test.js +0 -240
- package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
- package/tests/karma/BookNavigator/volumes.test.js +0 -133
- 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 -166
- package/tests/plugins/search/plugin.search.view.test.js +0 -106
- package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
- package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
- package/tests/plugins/tts/PageChunk.test.js +0 -57
- package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
- package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
- package/tests/plugins/tts/utils.test.js +0 -133
- package/tests/util/browserSniffing.test.js +0 -56
- package/tests/util/docCookies.test.js +0 -15
- package/tests/util/strings.test.js +0 -63
- package/tests/utils.js +0 -42
- package/webpack.config.js +0 -86
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://@internetarchive/bookreader/./src/plugins/search/plugin.search.js","webpack://@internetarchive/bookreader/./src/plugins/search/view.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/inherit-if-required.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.assign.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.regexp.constructor.js"],"names":["jQuery","extend","BookReader","defaultOptions","server","bookId","subPrefix","bookPath","enableSearch","searchInsideUrl","initialSearchTerm","prototype","setup","super_","options","call","searchTerm","searchResults","goToFirstResult","searchView","SearchView","br","selector","init","search","suppressFragmentChange","buildMobileDrawerElement","$el","dom","mobileSearch","find","after","buildToolbarElement","toolbarSearch","term","overrides","disablePopup","error","success","replace","trigger","eventNames","fragmentChange","serverPath","baseUrl","path","subPrefixWithSlash","length","lastIndexOf","substr","urlParams","item_id","doc","q","paramStr","$","param","url","processSearchResults","searchInsideResults","responseHasError","matches","hasCustomError","hasCustomSuccess","BRSearchCallbackError","BRSearchCallback","ajax","dataType","then","results","updateSearchHilites","removeProgressPopup","_searchPluginGoToResult","par","page","instance","_BRSearchCallbackError","basePayload","payload","Object","assign","indexed","constMode2up","mode","updateSearchHilites2UP","updateSearchHilites1UP","forEach","match","boxes","box","pageIndex","leafNumToIndex","pageIsInView","inArray","displayedIndices","div","document","createElement","prop","appendTo","_models","book","getPage","highlight","width","_modes","mode1Up","physicalInchesToDisplayPixels","r","l","ppi","height","b","t","left","top","css","remove","isViewable","addClass","refs","$brTwoPageView","setHilightCss2UP","removeSearchHilites","makeUnviewableAtEnd","fetch","URLSearchParams","id","subprefix","leafNum","json","resp","value","makeViewable","jumpToIndex","removeSearchResults","searchHighlightVisible","visiblePages","twoPage","currentIndexL","currentIndexR","constMode1up","currentIndex","some","params","console","warn","matcher","RegExp","cacheDOMElements","bindEvents","searchTray","renderSearchTray","querySelector","resultsCount","searchField","searchPending","buildMobileDrawer","buildToolbarSearch","bool","classList","contains","toggle","innerText","toggleResultsCount","query","val","innerHTML","removeResultPins","emptyMatches","setQuery","teardownSearchNavigation","setAttribute","before","resultsPosition","searchNavigation","positionMessage","currentMatchIndex","namespace","on","clearSearchFieldAndResults","bind","showPrevResult","showNextResult","toggleSidebar","constModeThumb","switchMode","getClosestMatchIndex","start","end","comparator","eq","click","updateResultsPosition","updateSearchNavigationButtons","comparisonFn","matchPages","map","m","currentPage","closestTo","pool","slice","closestPage","indexOf","text","attr","off","resize","matchingSearchResult","find2upMatchingSearchResult","find1upMatchingSearchResult","_isIndexDisplayed","setCurrentMatchIndex","items","join","pinsVisibleState","$BRfooter","visibility","imagesBaseURL","appendChild","add","queryString","pageNumber","getPageNum","uiStringSearch","uiStringPage","percentThrough","constructor","util","cssPercentage","getNumLeafs","queryStringWithB","queryStringWithBTruncated","append","data","hover","event","marker","currentTarget","tooltip","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","x","style","setProperty","removeClass","target","showProgressPopup","renderModalMessage","delayModalRemovalFor","messageHTML","modal","el","timeoutMS","setTimeout","$mmenu","open","close","e","preventDefault","blur","toggleSearchPending","renderSearchNavigation","bindSearchNavigationEvents","renderMatches","renderPins","updateResultsCount","one","is_visible","navigationIsVisible","togglePinsFor","toggleSearchTray","renderErrorModal","renderBookNotIndexedModal","renderResultsEmptyModal","handleSearchCallback","handleNavToggledCallback","handleSearchStarted","handleSearchCallbackError","handleSearchCallbackBookNotIndexed","handleSearchCallbackEmpty","updateSearchNavigation","addEventListener","submitHandler","dataset","closeMobileMenu"],"mappings":"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","file":"plugins/plugin.search.js","sourcesContent":["/* global BookReader */\n/**\n * Plugin for Archive.org book search\n * NOTE: This script must be loaded AFTER `plugin.mobile_nav.js`\n * as it mutates mobile nav drawer\n *\n * Events fired at various points throughout search processing are published\n * on the document DOM element. These can be subscribed to using jQuery's event\n * binding method `$.fn.on`. All of the events are prefixed with a BookReader\n * namespace. The events are:\n *\n * @event BookReader:SearchStarted - When a search form is submitted, immediately\n * before an AJAX call is made to request search results\n * @event BookReader:SearchCallback - When the search AJAX call is returned and at\n * least one result is returned. The event callback receives an object\n * with the `results`, plugin `options`, and the BookReader `instance`\n * @event BookReader:SearchCallbackError - When the AJAX request returns an error.\n * Receives the `results` and `instance`\n * @event BookReader:SearchCallbackNotIndexed - When a message is received that\n * the book has not had OCR text indexed yet. Receives `instance`\n * @event BookReader:SearchCallbackEmpty - When no results found. Receives\n * `instance`\n */\nimport SearchView from './view.js';\n\njQuery.extend(BookReader.defaultOptions, {\n server: 'ia600609.us.archive.org',\n bookId: '',\n subPrefix: '',\n bookPath: '',\n enableSearch: true,\n searchInsideUrl: '/fulltext/inside.php',\n initialSearchTerm: null,\n});\n\n/** @override */\nBookReader.prototype.setup = (function (super_) {\n return function (options) {\n super_.call(this, options);\n\n this.searchTerm = '';\n this.searchResults = null;\n this.searchInsideUrl = options.searchInsideUrl;\n this.enableSearch = options.enableSearch;\n this.goToFirstResult = false;\n\n // Base server used by some api calls\n this.bookId = options.bookId;\n this.server = options.server;\n this.subPrefix = options.subPrefix;\n this.bookPath = options.bookPath;\n\n if (this.searchView) { return; }\n this.searchView = new SearchView({\n br: this,\n selector: '#BRsearch_tray',\n });\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function (super_) {\n return function () {\n super_.call(this);\n\n if (this.options.enableSearch && this.options.initialSearchTerm) {\n this.search(\n this.options.initialSearchTerm,\n { goToFirstResult: this.goToFirstResult, suppressFragmentChange: true }\n );\n }\n };\n})(BookReader.prototype.init);\n\n/** @override */\nBookReader.prototype.buildMobileDrawerElement = (function (super_) {\n return function () {\n const $el = super_.call(this);\n if (!this.enableSearch) { return; }\n if (this.searchView.dom.mobileSearch) {\n $el.find('.BRmobileMenu__moreInfoRow').after(this.searchView.dom.mobileSearch);\n }\n return $el;\n };\n})(BookReader.prototype.buildMobileDrawerElement);\n\n/** @override */\nBookReader.prototype.buildToolbarElement = (function (super_) {\n return function () {\n const $el = super_.call(this);\n if (!this.enableSearch) { return; }\n if (this.searchView.dom.toolbarSearch) {\n $el.find('.BRtoolbarSectionInfo').after(this.searchView.dom.toolbarSearch);\n }\n return $el;\n };\n})(BookReader.prototype.buildToolbarElement);\n\n/**\n * @typedef {object} SearchOptions\n * @property {boolean} goToFirstResult\n * @property {boolean} disablePopup\n * @property {(null|function)} error - @deprecated at v.5.0\n * @property {(null|function)} success - @deprecated at v.5.0\n */\n\n/**\n * Submits search request\n *\n * @param {string} term\n * @param {SearchOptions} overrides\n */\nBookReader.prototype.search = function(term = '', overrides = {}) {\n /** @type {SearchOptions} */\n const defaultOptions = {\n goToFirstResult: false, /* jump to the first result (default=false) */\n disablePopup: false, /* don't show the modal progress (default=false) */\n suppressFragmentChange: false, /* don't change the URL on initial load */\n error: null, /* optional error handler (default=null) */\n success: null, /* optional success handler (default=null) */\n\n };\n const options = jQuery.extend({}, defaultOptions, overrides);\n this.suppressFragmentChange = options.suppressFragmentChange;\n\n // strip slashes, since this goes in the url\n this.searchTerm = term.replace(/\\//g, ' ');\n\n if (!options.suppressFragmentChange) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n\n // Add quotes to the term. This is to compenstate for the backends default OR query\n // term = term.replace(/['\"]+/g, '');\n // term = '\"' + term + '\"';\n\n // Remove the port and userdir\n const serverPath = this.server.replace(/:.+/, '');\n const baseUrl = `https://${serverPath}${this.searchInsideUrl}?`;\n\n // Remove subPrefix from end of path\n let path = this.bookPath;\n const subPrefixWithSlash = `/${this.subPrefix}`;\n if (this.bookPath.length - this.bookPath.lastIndexOf(subPrefixWithSlash) == subPrefixWithSlash.length) {\n path = this.bookPath.substr(0, this.bookPath.length - subPrefixWithSlash.length);\n }\n\n const urlParams = {\n item_id: this.bookId,\n doc: this.subPrefix,\n path,\n q: term,\n };\n\n // NOTE that the API does not expect / (slashes) to be encoded. (%2F) won't work\n const paramStr = $.param(urlParams).replace(/%2F/g, '/');\n\n const url = `${baseUrl}${paramStr}`;\n\n const processSearchResults = (searchInsideResults) => {\n const responseHasError = searchInsideResults.error || !searchInsideResults.matches.length;\n const hasCustomError = typeof options.error === 'function';\n const hasCustomSuccess = typeof options.success === 'function';\n\n if (responseHasError) {\n hasCustomError\n ? options.error.call(this, searchInsideResults, options)\n : this.BRSearchCallbackError(searchInsideResults, options);\n } else {\n hasCustomSuccess\n ? options.success.call(this, searchInsideResults, options)\n : this.BRSearchCallback(searchInsideResults, options);\n }\n };\n\n this.trigger('SearchStarted', { term: this.searchTerm });\n return $.ajax({\n url: url,\n dataType: 'jsonp'\n }).then(processSearchResults);\n};\n\n/**\n * @typedef {object} SearchInsideMatchBox\n * @property {number} page\n * @property {number} r\n * @property {number} l\n * @property {number} b\n * @property {number} t\n * @property {HTMLDivElement} [div]\n */\n\n/**\n * @typedef {object} SearchInsideMatch\n * @property {string} text\n * @property {Array<{ page: number, boxes: SearchInsideMatchBox[] }>} par\n */\n\n/**\n * @typedef {object} SearchInsideResults\n * @property {string} error\n * @property {SearchInsideMatch[]} matches\n * @property {boolean} indexed\n */\n\n/**\n * Search Results return handler\n * @callback\n * @param {SearchInsideResults} results\n * @param {object} options\n * @param {boolean} options.goToFirstResult\n */\nBookReader.prototype.BRSearchCallback = function(results, options) {\n this.searchResults = results;\n\n this.updateSearchHilites();\n this.removeProgressPopup();\n if (options.goToFirstResult) {\n this._searchPluginGoToResult(results.matches[0].par[0].page);\n }\n this.trigger('SearchCallback', { results, options, instance: this });\n}\n\n/**\n * Main search results error handler\n * @callback\n * @param {SearchInsideResults} results\n */\nBookReader.prototype.BRSearchCallbackError = function(results) {\n this._BRSearchCallbackError(results);\n};\n\n/**\n * @private draws search results error\n * @callback\n * @param {SearchInsideResults} results\n * @param {jQuery} $el\n * @param {boolean} fade\n */\nBookReader.prototype._BRSearchCallbackError = function(results) {\n this.searchResults = results;\n const basePayload = {\n term: this.searchTerm,\n instance: this,\n };\n if (results.error) {\n const payload = Object.assign({}, basePayload, { results });\n this.trigger('SearchCallbackError', payload);\n } else if (0 == results.matches.length) {\n if (false === results.indexed) {\n this.trigger('SearchCallbackBookNotIndexed', basePayload);\n return;\n }\n this.trigger('SearchCallbackEmpty', basePayload);\n }\n};\n\n/**\n * updates search on-page highlights controller\n */\nBookReader.prototype.updateSearchHilites = function() {\n if (this.constMode2up == this.mode) {\n this.updateSearchHilites2UP();\n return;\n }\n this.updateSearchHilites1UP();\n};\n\n/**\n * update search on-page highlights in 1up mode\n */\nBookReader.prototype.updateSearchHilites1UP = function() {\n const results = this.searchResults;\n if (null == results) return;\n results.matches.forEach(match => {\n match.par[0].boxes.forEach(box => {\n const pageIndex = this.leafNumToIndex(box.page);\n const pageIsInView = jQuery.inArray(pageIndex, this.displayedIndices) >= 0;\n if (pageIsInView) {\n if (!box.div) {\n //create a div for the search highlight, and stash it in the box object\n box.div = document.createElement('div');\n $(box.div).prop('className', 'BookReaderSearchHilite').appendTo(this.$(`.pagediv${pageIndex}`));\n }\n const page = this._models.book.getPage(pageIndex);\n const highlight = {\n width: this._modes.mode1Up.physicalInchesToDisplayPixels((box.r - box.l) / page.ppi),\n height: this._modes.mode1Up.physicalInchesToDisplayPixels((box.b - box.t) / page.ppi),\n left: this._modes.mode1Up.physicalInchesToDisplayPixels(box.l / page.ppi),\n top: this._modes.mode1Up.physicalInchesToDisplayPixels(box.t / page.ppi),\n };\n $(box.div).css(highlight);\n } else {\n if (box.div) {\n $(box.div).remove();\n box.div = null;\n }\n }\n });\n });\n};\n\n/**\n * update search on-page highlights in 2up mode\n */\nBookReader.prototype.updateSearchHilites2UP = function() {\n const results = this.searchResults;\n\n if (results === null) return;\n\n const { matches } = results;\n matches.forEach((match) => {\n match.par[0].boxes.forEach(box => {\n const pageIndex = this.leafNumToIndex(match.par[0].page);\n const pageIsInView = jQuery.inArray(pageIndex, this.displayedIndices) >= 0;\n const { isViewable } = this._models.book.getPage(pageIndex);\n\n if (pageIsInView && isViewable) {\n if (!box.div) {\n //create a div for the search highlight, and stash it in the box object\n box.div = document.createElement('div');\n $(box.div).addClass('BookReaderSearchHilite')\n .appendTo(this.refs.$brTwoPageView);\n }\n this.setHilightCss2UP(box.div, pageIndex, box.l, box.r, box.t, box.b);\n } else {\n // clear stale reference\n if (box.div) {\n $(box.div).remove();\n box.div = null;\n }\n }\n });\n });\n};\n\n/**\n * remove search highlights\n */\nBookReader.prototype.removeSearchHilites = function() {\n const results = this.searchResults;\n if (null == results || !results.matches) { return; }\n results.matches.forEach(match => {\n match.par[0].boxes.forEach(box => {\n if (null != box.div) {\n $(box.div).remove();\n box.div = null;\n }\n });\n });\n};\n\n/**\n * @private\n * Goes to the page specified. If the page is not viewable, tries to load the page\n * FIXME Most of this logic is IA specific, and should be less integrated into here\n * or at least more configurable.\n * @param {PageIndex} pageIndex\n */\nBookReader.prototype._searchPluginGoToResult = async function (pageIndex) {\n const { book } = this._models;\n const page = book.getPage(pageIndex);\n let makeUnviewableAtEnd = false;\n if (!page.isViewable) {\n const resp = await fetch('/services/bookreader/request_page?' + new URLSearchParams({\n id: this.options.bookId,\n subprefix: this.options.subPrefix,\n leafNum: page.leafNum,\n })).then(r => r.json());\n\n for (const leafNum of resp.value) {\n book.getPage(book.leafNumToIndex(leafNum)).makeViewable();\n }\n\n // not able to show page; make the page viewable anyways so that it can\n // actually open. On IA, it has a fallback to a special error page.\n if (!resp.value.length) {\n book.getPage(pageIndex).makeViewable();\n makeUnviewableAtEnd = true;\n }\n }\n /* this updates the URL */\n this.suppressFragmentChange = false;\n this.jumpToIndex(pageIndex);\n\n // Reset it to unviewable if it wasn't resolved\n if (makeUnviewableAtEnd) {\n book.getPage(pageIndex).makeViewable(false);\n }\n};\n\n/**\n * Removes all search pins\n */\nBookReader.prototype.removeSearchResults = function(suppressFragmentChange = false) {\n this.removeSearchHilites(); //be sure to set all box.divs to null\n this.searchTerm = null;\n this.searchResults = null;\n if (!suppressFragmentChange) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n};\n\n/**\n * Returns true if a search highlight is currently being displayed\n * @returns {boolean}\n */\nBookReader.prototype.searchHighlightVisible = function() {\n const results = this.searchResults;\n let visiblePages = [];\n if (null == results) return false;\n\n if (this.constMode2up == this.mode) {\n visiblePages = [this.twoPage.currentIndexL, this.twoPage.currentIndexR];\n } else if (this.constMode1up == this.mode) {\n visiblePages = [this.currentIndex()];\n } else {\n return false;\n }\n\n results.matches.some(match => {\n return match.par[0].boxes.some(box => {\n const pageIndex = this.leafNumToIndex(box.page);\n if (jQuery.inArray(pageIndex, visiblePages) >= 0) {\n return true;\n }\n });\n });\n\n return false;\n};\n","class SearchView {\n /**\n * @param {object} params\n * @param {string} params.selector A selector for the element that the search tray will be rendered in\n * @param {string} params.query An existing query string\n * @param {object} params.br The BookReader instance\n *\n * @event BookReader:SearchResultsCleared - when the search results nav gets cleared\n * @event BookReader:ToggleSearchMenu - when search results menu should toggle\n */\n constructor(params) {\n if (!params.selector) {\n console.warn('BookReader::Search - SearchView must be passed a valid CSS selector');\n return;\n }\n\n this.br = params.br;\n\n // Search results are returned as a text blob with the hits wrapped in\n // triple mustaches. Hits occasionally include text beyond the search\n // term, so everything within the staches is captured and wrapped.\n this.matcher = new RegExp('{{{(.+?)}}}', 'g');\n this.matches = [];\n this.cacheDOMElements(params.selector);\n this.bindEvents();\n }\n\n /**\n * @param {string} selector A selector for the element that the search tray will be rendered in\n */\n cacheDOMElements(selector) {\n this.dom = {};\n\n // The parent search tray in mobile menu\n this.dom.searchTray = this.renderSearchTray(selector);\n // Container for rendered search results\n this.dom.results = this.dom.searchTray.querySelector('[data-id=\"results\"]');\n // Element used to display number of results\n this.dom.resultsCount = this.dom.searchTray.querySelector('[data-id=\"results_count\"]');\n // Search input within the mobile search tray\n this.dom.searchField = this.dom.searchTray.querySelector('[name=\"query\"]');\n // Waiting indicator displayed while waiting for a search request\n this.dom.searchPending = this.dom.searchTray.querySelector('[data-id=\"searchPending\"]');\n // The element added to the mobile menu that is animated into view when\n // the \"search\" nav item is clicked\n this.dom.mobileSearch = this.buildMobileDrawer();\n // Search input within the top toolbar. Will be removed once the mobile menu is replaced.\n this.dom.toolbarSearch = this.buildToolbarSearch();\n }\n\n /**\n * @param {boolean} bool\n */\n toggleSearchTray(bool = this.dom.searchTray.classList.contains('hidden')) {\n this.dom.searchTray.classList.toggle('hidden', !bool);\n }\n\n /**\n * @param {boolean} bool\n */\n toggleResultsCount(bool) {\n this.dom.resultsCount.classList.toggle('visible', bool);\n }\n\n /**\n * @param {SearchInsideResults} results\n */\n updateResultsCount(results) {\n this.dom.resultsCount.innerText = `(${results} result${results != 1 ? 's' : ''})`;\n this.toggleResultsCount(true);\n }\n\n /**\n * @param {string} query\n */\n setQuery(query) {\n this.br.$('[name=\"query\"]').val(query);\n }\n\n emptyMatches() {\n this.dom.results.innerHTML = '';\n this.matches = [];\n }\n\n removeResultPins() {\n this.br.$('.BRnavpos .BRsearch').remove();\n }\n\n clearSearchFieldAndResults() {\n this.br.removeSearchResults();\n this.toggleResultsCount(false);\n this.removeResultPins();\n this.emptyMatches();\n this.setQuery('');\n this.teardownSearchNavigation();\n this.br.trigger('SearchResultsCleared');\n }\n\n toggleSidebar() {\n this.br.trigger('ToggleSearchMenu');\n }\n /**\n * @param {string} selector The ID attribute to be used for the search tray\n */\n renderSearchTray(selector) {\n const searchTray = document.createElement('div');\n searchTray.setAttribute('id', selector.replace(/^#/, ''));\n searchTray.innerHTML = `\n <header>\n <div>\n <h3>Search inside</h3>\n <p data-id=\"results_count\"></p>\n </div>\n <a href=\"#\" class=\"close\"></a>\n </header>\n <form action=\"\" method=\"get\">\n <fieldset>\n <input name=\"all_files\" id=\"all_files\" type=\"checkbox\" />\n <label class=\"checkbox\" for=\"all_files\">Search all files</label>\n <input type=\"search\" name=\"query\" placeholder=\"Enter a search term\" />\n </fieldset>\n </form>\n <div data-id=\"searchPending\" id=\"search_pending\">\n <p>Your search results will appear below</p>\n <div class=\"loader tc mt20\"></div>\n </div>\n <ul data-id=\"results\"></ul>\n `;\n return searchTray;\n }\n\n renderSearchNavigation() {\n const selector = 'BRsearch-navigation';\n $('.BRnav').before(`\n <div class=\"${selector}\">\n <button class=\"toggle-sidebar\">\n <h4>\n <span class=\"icon icon-search\"></span> Results\n </h4>\n </button>\n <div class=\"pagination\">\n <button class=\"prev\" title=\"Previous result\"><span class=\"icon icon-chevron hflip\"></span></button>\n <span data-id=\"resultsCount\">${this.resultsPosition()}</span>\n <button class=\"next\" title=\"Next result\"><span class=\"icon icon-chevron\"></button>\n </div>\n <button class=\"clear\" title=\"Clear search results\">\n <span class=\"icon icon-close\"></span>\n </button>\n </div>\n `);\n this.dom.searchNavigation = $(`.${selector}`);\n }\n\n resultsPosition() {\n let positionMessage = `${this.matches.length} result${this.matches.length === 1 ? '' : 's'}`;\n if (~this.currentMatchIndex) {\n positionMessage = `${this.currentMatchIndex + 1} / ${this.matches.length}`;\n }\n return positionMessage;\n }\n\n bindSearchNavigationEvents() {\n if (!this.dom.searchNavigation) { return; }\n const namespace = 'searchNavigation';\n\n this.dom.searchNavigation\n .on(`click.${namespace}`, '.clear', this.clearSearchFieldAndResults.bind(this))\n .on(`click.${namespace}`, '.prev', this.showPrevResult.bind(this))\n .on(`click.${namespace}`, '.next', this.showNextResult.bind(this))\n .on(`click.${namespace}`, '.toggle-sidebar', this.toggleSidebar.bind(this))\n .on(`click.${namespace}`, false);\n }\n\n showPrevResult() {\n if (this.currentMatchIndex === 0) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => end[0] > comparator) + 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(--this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n showNextResult() {\n if (this.currentMatchIndex + 1 === this.matches.length) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => start[start.length - 1] > comparator) - 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(++this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * Obtains closest match based on the logical comparison function passed in.\n * When the comparison function returns true, the starting (left) half of the\n * matches array is used in the binary split, else the ending (right) half is\n * used. A recursive call is made to perform the same split and comparison\n * on the winning half of the matches. This is traditionally known as binary\n * search (https://en.wikipedia.org/wiki/Binary_search_algorithm), and in\n * most cases (medium to large search result arrays) should outperform\n * traversing the array from start to finish. In the case of small arrays,\n * the speed difference is negligible.\n *\n * @param {function} comparisonFn\n * @return {number} matchIndex\n */\n getClosestMatchIndex(comparisonFn) {\n const matchPages = this.matches.map((m) => m.par[0].page);\n const currentPage = this.br.currentIndex() + 1;\n const closestTo = (pool, comparator) => {\n if (pool.length === 1) { return pool[0]; }\n const start = pool.slice(0, pool.length / 2);\n const end = pool.slice(pool.length / 2);\n return closestTo((comparisonFn(start, end, comparator) ? start : end), comparator);\n }\n\n const closestPage = closestTo(matchPages, currentPage);\n return this.matches.indexOf(this.matches.find((m) => m.par[0].page === closestPage));\n }\n\n updateResultsPosition() {\n this.dom.searchNavigation.find('[data-id=resultsCount]').text(this.resultsPosition());\n }\n\n updateSearchNavigationButtons() {\n this.dom.searchNavigation.find('.prev').attr('disabled', !this.currentMatchIndex);\n this.dom.searchNavigation.find('.next').attr('disabled', this.currentMatchIndex + 1 === this.matches.length);\n }\n\n teardownSearchNavigation() {\n if (!this.dom.searchNavigation) {\n this.dom.searchNavigation = $('.BRsearch-navigation');\n }\n if (!this.dom.searchNavigation.length) { return; }\n\n this.dom.searchNavigation.off('.searchNavigation').remove();\n this.dom.searchNavigation = null;\n this.br.resize();\n }\n\n setCurrentMatchIndex() {\n let matchingSearchResult;\n if (this.br.mode === this.br.constModeThumb) {\n this.currentMatchIndex = -1;\n return;\n }\n if (this.br.mode === this.br.constMode2up) {\n matchingSearchResult = this.find2upMatchingSearchResult();\n }\n else {\n matchingSearchResult = this.find1upMatchingSearchResult();\n }\n this.currentMatchIndex = this.matches.indexOf(matchingSearchResult);\n }\n\n find1upMatchingSearchResult() {\n return this.matches.find((m) => this.br.currentIndex() === m.par[0].page - 1);\n }\n\n find2upMatchingSearchResult() {\n return this.matches.find((m) => this.br._isIndexDisplayed(m.par[0].page - 1));\n }\n\n updateSearchNavigation() {\n if (!this.matches.length) { return; }\n\n this.setCurrentMatchIndex();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * @param {array} matches\n */\n renderMatches(matches) {\n const items = matches.map((match) => `\n <li data-page=\"${match.par[0].page}\" data-page-index=\"${this.br.leafNumToIndex(match.par[0].page)}\">\n <h4>Page ${match.par[0].page}</h4>\n <p>${match.text.replace(this.matcher, '<mark>$1</mark>')}</p>\n </li>\n `);\n this.dom.results.innerHTML = items.join('');\n }\n\n /**\n * @param {boolean} bool\n */\n togglePinsFor(bool) {\n const pinsVisibleState = bool ? 'visible' : 'hidden';\n this.br.refs.$BRfooter.find('.BRsearch').css({ visibility: pinsVisibleState });\n }\n\n buildMobileDrawer() {\n const mobileSearch = document.createElement('li');\n mobileSearch.innerHTML = `\n <span>\n <span class=\"DrawerIconWrapper\">\n <img class=\"DrawerIcon\" src=\"${this.br.imagesBaseURL}icon_search_button.svg\" />\n </span>\n Search\n </span>\n <div data-id=\"search_slot\">\n </div>\n `;\n mobileSearch.querySelector('[data-id=\"search_slot\"]').appendChild(this.dom.searchTray);\n mobileSearch.classList.add('BRmobileMenu__search');\n return mobileSearch;\n }\n\n buildToolbarSearch() {\n const toolbarSearch = document.createElement('span');\n toolbarSearch.classList.add('BRtoolbarSection', 'BRtoolbarSectionSearch');\n toolbarSearch.innerHTML = `\n <form class=\"BRbooksearch desktop\">\n <input type=\"search\" name=\"query\" class=\"BRsearchInput\" value=\"\" placeholder=\"Search inside\"/>\n <button type=\"submit\" class=\"BRsearchSubmit\">\n <img src=\"${this.br.imagesBaseURL}icon_search_button.svg\" />\n </button>\n </form>\n `;\n return toolbarSearch;\n }\n\n /**\n * @param {array} matches\n */\n renderPins(matches) {\n matches.forEach((match) => {\n const queryString = match.text;\n const pageIndex = this.br.leafNumToIndex(match.par[0].page);\n const pageNumber = this.br.getPageNum(pageIndex);\n const uiStringSearch = \"Search result\"; // i18n\n const uiStringPage = \"Page\"; // i18n\n\n const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.getNumLeafs() - 1);\n\n const queryStringWithB = queryString.replace(this.matcher, '<b>$1</b>');\n\n let queryStringWithBTruncated = '';\n\n if (queryString.length > 100) {\n queryStringWithBTruncated = queryString\n .replace(/^(.{100}[^\\s]*).*/, \"$1\")\n .replace(this.matcher, '<b>$1</b>')\n + '...';\n }\n\n // draw marker\n $('<div>')\n .addClass('BRsearch')\n .css({\n left: percentThrough,\n })\n .attr('title', uiStringSearch)\n .append(`\n <div class=\"BRquery\">\n <div>${queryStringWithBTruncated || queryStringWithB}</div>\n <div>${uiStringPage} ${pageNumber}</div>\n </div>\n `)\n .data({ pageIndex })\n .appendTo(this.br.$('.BRnavline'))\n .hover(\n (event) => {\n // remove from other markers then turn on just for this\n // XXX should be done when nav slider moves\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('.BRquery');\n const tooltipOffset = tooltip.getBoundingClientRect();\n const targetOffset = marker.getBoundingClientRect();\n const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;\n if (tooltipOffset.x - boxSizeAdjust < 0) {\n tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);\n }\n $('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n },\n (event) => $(event.target).removeClass('front'))\n .click(function (event) {\n // closures are nested and deep, using an arrow function breaks references.\n // Todo: update to arrow function & clean up closures\n // to remove `bind` dependency\n this.br._searchPluginGoToResult(+$(event.target).data('pageIndex'));\n this.br.updateSearchHilites();\n }.bind(this));\n });\n }\n\n /**\n * @param {boolean} bool\n */\n toggleSearchPending(bool) {\n this.dom.searchPending.classList.toggle('visible', bool);\n if (bool) {\n this.br.showProgressPopup(\"Search results will appear below...\");\n }\n else {\n this.br.removeProgressPopup();\n }\n }\n\n renderErrorModal() {\n this.renderModalMessage(`\n Sorry, there was an error with your search.\n <br />\n The text may still be processing.\n `);\n this.delayModalRemovalFor(4000);\n }\n\n renderBookNotIndexedModal() {\n this.renderModalMessage(`\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n `);\n this.delayModalRemovalFor(5000);\n }\n\n renderResultsEmptyModal() {\n this.renderModalMessage('No matches were found.');\n this.delayModalRemovalFor(2000);\n }\n\n /**\n * @param {string} messageHTML The innerHTML string used to popupate the modal contents\n */\n renderModalMessage(messageHTML) {\n const modal = document.createElement('div');\n modal.classList.add('BRprogresspopup', 'search_modal');\n modal.innerHTML = messageHTML;\n document.querySelector(this.br.el).append(modal);\n }\n\n /**\n * @param {number} timeoutMS\n */\n delayModalRemovalFor(timeoutMS) {\n setTimeout(this.br.removeProgressPopup.bind(this.br), timeoutMS);\n }\n\n openMobileMenu() {\n this.br.refs.$mmenu.data('mmenu').open();\n }\n\n closeMobileMenu() {\n this.br.refs.$mmenu.data('mmenu').close();\n }\n\n /**\n * @param {Event} e\n */\n submitHandler(e) {\n e.preventDefault();\n const query = e.target.querySelector('[name=\"query\"]').value;\n if (!query.length) { return false; }\n this.br.search(query);\n this.dom.searchField.blur();\n this.emptyMatches();\n this.toggleSearchPending(true);\n return false;\n }\n\n /**\n * @param {Event} e\n * @param {object} properties\n * @param {object} properties.results\n * @param {object} properties.options\n */\n handleSearchCallback(e, { results, options }) {\n this.matches = results.matches;\n this.setCurrentMatchIndex();\n this.teardownSearchNavigation();\n this.renderSearchNavigation();\n this.bindSearchNavigationEvents();\n this.renderMatches(results.matches);\n this.renderPins(results.matches);\n this.updateResultsCount(results.matches.length);\n this.toggleSearchPending(false);\n if (options.goToFirstResult) {\n $(document).one('BookReader:pageChanged', () => {\n this.br.resize();\n });\n } else {\n this.br.resize();\n }\n }\n\n /**\n * @param {Event} e\n */\n handleNavToggledCallback(e) {\n const is_visible = this.br.navigationIsVisible();\n this.togglePinsFor(is_visible);\n this.toggleSearchTray(is_visible ? !!this.dom.results.querySelector('li') : false);\n }\n\n handleSearchStarted() {\n this.emptyMatches();\n this.br.removeSearchHilites();\n this.removeResultPins();\n this.toggleSearchPending(true);\n this.teardownSearchNavigation();\n this.setQuery(this.br.searchTerm);\n }\n\n handleSearchCallbackError() {\n this.toggleSearchPending(false);\n this.renderErrorModal();\n }\n\n handleSearchCallbackBookNotIndexed() {\n this.toggleSearchPending(false);\n this.renderBookNotIndexedModal();\n }\n\n handleSearchCallbackEmpty() {\n this.toggleSearchPending(false);\n this.renderResultsEmptyModal();\n }\n\n bindEvents() {\n const namespace = 'BookReader:';\n\n $(document).on(`${namespace}SearchCallback`, this.handleSearchCallback.bind(this))\n .on(`${namespace}navToggled`, this.handleNavToggledCallback.bind(this))\n .on(`${namespace}SearchStarted`, this.handleSearchStarted.bind(this))\n .on(`${namespace}SearchCallbackError`, this.handleSearchCallbackError.bind(this))\n .on(`${namespace}SearchCallbackBookNotIndexed`, this.handleSearchCallbackBookNotIndexed.bind(this))\n .on(`${namespace}SearchCallbackEmpty`, this.handleSearchCallbackEmpty.bind(this))\n .on(`${namespace}pageChanged`, this.updateSearchNavigation.bind(this));\n\n this.dom.searchTray.addEventListener('submit', this.submitHandler.bind(this));\n this.dom.toolbarSearch.querySelector('form').addEventListener('submit', this.submitHandler.bind(this));\n this.dom.searchField.addEventListener('search', () => {\n if (this.dom.searchField.value) { return; }\n this.clearSearchFieldAndResults();\n });\n\n $(this.dom.results).on('click', 'li', (e) => {\n this.br._searchPluginGoToResult(+e.currentTarget.dataset.pageIndex);\n this.br.updateSearchHilites();\n this.closeMobileMenu();\n });\n }\n}\n\nexport default SearchView;\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\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 DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isRegExp = require('../internals/is-regexp');\nvar getFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar FORCED = DESCRIPTORS && isForced('RegExp', (!CORRECT_NEW || UNSUPPORTED_Y || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n})));\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (FORCED) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = this instanceof RegExpWrapper;\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var sticky;\n\n if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) {\n return pattern;\n }\n\n if (CORRECT_NEW) {\n if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source;\n } else if (pattern instanceof RegExpWrapper) {\n if (flagsAreUndefined) flags = getFlags.call(pattern);\n pattern = pattern.source;\n }\n\n if (UNSUPPORTED_Y) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n var result = inheritIfRequired(\n CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags),\n thisIsRegExp ? this : RegExpPrototype,\n RegExpWrapper\n );\n\n if (UNSUPPORTED_Y && sticky) {\n var state = enforceInternalState(result);\n state.sticky = true;\n }\n\n return result;\n };\n var proxy = function (key) {\n key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n configurable: true,\n get: function () { return NativeRegExp[key]; },\n set: function (it) { NativeRegExp[key] = it; }\n });\n };\n var keys = getOwnPropertyNames(NativeRegExp);\n var index = 0;\n while (keys.length > index) proxy(keys[index++]);\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"plugins/plugin.search.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/search/view.js","webpack://@internetarchive/bookreader/./src/plugins/search/utils.js","webpack://@internetarchive/bookreader/./src/plugins/search/plugin.search.js","webpack://@internetarchive/bookreader/./node_modules/iso-language-codes/dist/index.mjs","webpack://@internetarchive/bookreader/./src/plugins/tts/utils.js","webpack://@internetarchive/bookreader/./src/util/strings.js"],"sourcesContent":["'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","// @ts-check\n/** @typedef {import('@/src/BookReader.js').default} BookReader */\n\nclass SearchView {\n /**\n * @param {object} params\n * @param {BookReader} params.br The BookReader instance\n * @param {function} params.searchCancelledCallback callback when a user wants to cancel search\n *\n * @event BookReader:SearchResultsCleared - when the search results nav gets cleared\n * @event BookReader:ToggleSearchMenu - when search results menu should toggle\n */\n constructor({ br, searchCancelledCallback = () => {} }) {\n /** @type {BookReader} */\n this.br = br;\n this.matches = [];\n this.cacheDOMElements();\n this.cancelSearch = searchCancelledCallback;\n }\n\n init() {\n this.bindEvents();\n }\n\n cacheDOMElements() {\n this.dom = {};\n // Search input within the top toolbar. Will be removed once the mobile menu is replaced.\n this.dom.toolbarSearch = this.buildToolbarSearch();\n }\n\n /**\n * @param {string} query\n */\n setQuery(query) {\n this.br.$('[name=\"query\"]').val(query);\n }\n\n emptyMatches() {\n this.matches = [];\n }\n\n removeResultPins() {\n this.br.$('.BRnavpos .BRsearch').remove();\n }\n\n clearSearchFieldAndResults(dispatchEventWhenComplete = true) {\n this.br.plugins.search.removeSearchResults();\n this.removeResultPins();\n this.emptyMatches();\n this.setQuery('');\n this.teardownSearchNavigation();\n if (dispatchEventWhenComplete) {\n this.br.trigger('SearchResultsCleared');\n }\n }\n\n toggleSidebar() {\n this.br.trigger('ToggleSearchMenu');\n }\n\n renderSearchNavigation() {\n const selector = 'BRsearch-navigation';\n $('.BRnav.BRnavMain').before(`\n <div class=\"${selector}\">\n <button class=\"toggle-sidebar\">\n <h4>\n <span class=\"icon icon-search\"></span> Results\n </h4>\n </button>\n <div class=\"pagination\">\n <button class=\"prev\" title=\"Previous result\"><span class=\"icon icon-chevron hflip\"></span></button>\n <span data-id=\"resultsCount\">${this.resultsPosition()}</span>\n <button class=\"next\" title=\"Next result\"><span class=\"icon icon-chevron\"></button>\n </div>\n <button class=\"clear\" title=\"Clear search results\">\n <span class=\"icon icon-close\"></span>\n </button>\n </div>\n `);\n this.dom.searchNavigation = $(`.${selector}`);\n }\n\n resultsPosition() {\n let positionMessage = `${this.matches.length} result${this.matches.length === 1 ? '' : 's'}`;\n if (~this.currentMatchIndex) {\n positionMessage = `${this.currentMatchIndex + 1} / ${this.matches.length}`;\n }\n return positionMessage;\n }\n\n bindSearchNavigationEvents() {\n if (!this.dom.searchNavigation) { return; }\n const namespace = 'searchNavigation';\n\n this.dom.searchNavigation\n .on(`click.${namespace}`, '.clear', this.clearSearchFieldAndResults.bind(this))\n .on(`click.${namespace}`, '.prev', this.showPrevResult.bind(this))\n .on(`click.${namespace}`, '.next', this.showNextResult.bind(this))\n .on(`click.${namespace}`, '.toggle-sidebar', this.toggleSidebar.bind(this))\n .on(`click.${namespace}`, false);\n }\n\n showPrevResult() {\n if (this.currentMatchIndex === 0) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => end[0] > comparator) + 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(--this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n showNextResult() {\n if (this.currentMatchIndex + 1 === this.matches.length) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => start[start.length - 1] > comparator) - 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(++this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * Obtains closest match based on the logical comparison function passed in.\n * When the comparison function returns true, the starting (left) half of the\n * matches array is used in the binary split, else the ending (right) half is\n * used. A recursive call is made to perform the same split and comparison\n * on the winning half of the matches. This is traditionally known as binary\n * search (https://en.wikipedia.org/wiki/Binary_search_algorithm), and in\n * most cases (medium to large search result arrays) should outperform\n * traversing the array from start to finish. In the case of small arrays,\n * the speed difference is negligible.\n *\n * @param {function} comparisonFn\n * @return {number} matchIndex\n */\n getClosestMatchIndex(comparisonFn) {\n const matchPages = this.matches.map((m) => m.par[0].page);\n const currentPage = this.br.currentIndex() + 1;\n const closestTo = (pool, comparator) => {\n if (pool.length === 1) { return pool[0]; }\n const start = pool.slice(0, pool.length / 2);\n const end = pool.slice(pool.length / 2);\n return closestTo((comparisonFn(start, end, comparator) ? start : end), comparator);\n };\n\n const closestPage = closestTo(matchPages, currentPage);\n return this.matches.indexOf(this.matches.find((m) => m.par[0].page === closestPage));\n }\n\n updateResultsPosition() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('[data-id=resultsCount]').text(this.resultsPosition());\n }\n\n updateSearchNavigationButtons() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('.prev').attr('disabled', !this.currentMatchIndex);\n this.dom.searchNavigation.find('.next').attr('disabled', this.currentMatchIndex + 1 === this.matches.length);\n }\n\n teardownSearchNavigation() {\n if (!this.dom.searchNavigation) {\n this.dom.searchNavigation = $('.BRsearch-navigation');\n }\n if (!this.dom.searchNavigation.length) { return; }\n\n this.dom.searchNavigation.off('.searchNavigation').remove();\n this.dom.searchNavigation = null;\n this.br.resize();\n }\n\n setCurrentMatchIndex() {\n let matchingSearchResult;\n if (this.br.mode === this.br.constModeThumb) {\n this.currentMatchIndex = -1;\n return;\n }\n if (this.br.mode === this.br.constMode2up) {\n matchingSearchResult = this.find2upMatchingSearchResult();\n }\n else {\n matchingSearchResult = this.find1upMatchingSearchResult();\n }\n this.currentMatchIndex = this.matches.indexOf(matchingSearchResult);\n }\n\n find1upMatchingSearchResult() {\n return this.matches.find((m) => this.br.currentIndex() === m.par[0].page - 1);\n }\n\n find2upMatchingSearchResult() {\n return this.matches.find((m) => this.br._isIndexDisplayed(m.par[0].page - 1));\n }\n\n updateSearchNavigation() {\n if (!this.matches.length) { return; }\n\n this.setCurrentMatchIndex();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * @param {boolean} bool\n */\n togglePinsFor(bool) {\n const pinsVisibleState = bool ? 'visible' : 'hidden';\n this.br.refs.$BRfooter.find('.BRsearch').css({ visibility: pinsVisibleState });\n }\n\n buildToolbarSearch() {\n const toolbarSearch = document.createElement('span');\n toolbarSearch.classList.add('BRtoolbarSection', 'BRtoolbarSectionSearch');\n toolbarSearch.innerHTML = `\n <form class=\"BRbooksearch desktop\">\n <input type=\"search\" name=\"query\" class=\"BRsearchInput\" value=\"\" placeholder=\"Search inside\"/>\n <button type=\"submit\" class=\"BRsearchSubmit\">\n <img src=\"${this.br.options.imagesBaseURL}icon_search_button.svg\" />\n </button>\n </form>\n `;\n return toolbarSearch;\n }\n\n /**\n * @param {array} matches\n */\n renderPins(matches) {\n matches.forEach((match) => {\n const pageIndex = this.br.book.leafNumToIndex(match.par[0].page);\n const uiStringSearch = \"Search result\"; // i18n\n const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.book.getNumLeafs() - 1);\n\n let html = match.html;\n if (html.length > 200) {\n const start = Math.max(0, html.indexOf('<mark>') - 100);\n if (start != 0) {\n html = '…' + match.html\n .substring(start)\n // Make sure at word boundary though\n .replace(/^\\S+/, '');\n }\n }\n // draw marker\n $('<div>')\n .addClass('BRsearch')\n .css({\n left: percentThrough,\n })\n .attr('title', uiStringSearch)\n .append(`\n <div class=\"BRquery\">\n <main>${html}</main>\n <footer>Page ${match.displayPageNumber}</footer>\n </div>\n `)\n .appendTo(this.br.$('.BRnavline'))\n .on(\"mouseenter\", (event) => {\n // remove from other markers then turn on just for this\n // XXX should be done when nav slider moves\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('.BRquery');\n const tooltipOffset = tooltip.getBoundingClientRect();\n const targetOffset = marker.getBoundingClientRect();\n const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;\n if (tooltipOffset.x - boxSizeAdjust < 0) {\n tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);\n }\n $('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n })\n .on(\"mouseleave\", (event) => $(event.target).removeClass('front'))\n .on(\"click\", () => { this.br.plugins.search.jumpToMatch(match.matchIndex); });\n });\n }\n\n /**\n * @param {boolean} show\n */\n toggleSearchPending(show = false) {\n if (show) {\n this.br.showProgressPopup(\"Search results will appear below...\", () => this.progressPopupClosed());\n }\n else {\n this.br.removeProgressPopup();\n }\n }\n\n /**\n * Primary callback when user cancels search popup\n */\n progressPopupClosed() {\n this.toggleSearchPending();\n this.cancelSearch();\n }\n\n renderErrorModal(textIsProcessing = false) {\n const errorDetails = `${!textIsProcessing ? 'The text may still be processing. ' : ''}Please try again.`;\n this.renderModalMessage(`\n Sorry, there was an error with your search.\n <br />\n ${errorDetails}\n `);\n this.delayModalRemovalFor(4000);\n }\n\n renderBookNotIndexedModal() {\n this.renderModalMessage(`\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n `);\n this.delayModalRemovalFor(5000);\n }\n\n renderResultsEmptyModal() {\n this.renderModalMessage('No matches were found.');\n this.delayModalRemovalFor(2000);\n }\n\n /**\n * @param {string} messageHTML The innerHTML string used to popupate the modal contents\n */\n renderModalMessage(messageHTML) {\n const modal = document.createElement('div');\n modal.classList.add('BRprogresspopup', 'search_modal');\n modal.innerHTML = messageHTML;\n document.querySelector(this.br.el).append(modal);\n }\n\n /**\n * @param {number} timeoutMS\n */\n delayModalRemovalFor(timeoutMS) {\n setTimeout(this.br.removeProgressPopup.bind(this.br), timeoutMS);\n }\n\n /**\n * @param {Event} e\n */\n submitHandler(e) {\n e.preventDefault();\n const query = e.target.querySelector('[name=\"query\"]').value;\n if (!query.length) { return false; }\n this.br.search(query);\n this.emptyMatches();\n this.toggleSearchPending(true);\n return false;\n }\n\n /**\n * @param {Event} e\n * @param {object} properties\n * @param {object} properties.results\n * @param {object} properties.options\n */\n handleSearchCallback(e, { results, options }) {\n this.matches = results.matches;\n this.setCurrentMatchIndex();\n this.teardownSearchNavigation();\n this.renderSearchNavigation();\n this.bindSearchNavigationEvents();\n this.renderPins(results.matches);\n this.toggleSearchPending(false);\n if (options.goToFirstResult) {\n $(document).one('BookReader:pageChanged', () => {\n this.br.resize();\n });\n } else {\n this.br.resize();\n }\n }\n\n handleSearchStarted() {\n this.emptyMatches();\n this.br.plugins.search.removeSearchHilites();\n this.removeResultPins();\n this.toggleSearchPending(true);\n this.teardownSearchNavigation();\n this.setQuery(this.br.plugins.search.searchTerm);\n }\n\n /**\n * Event listener for: `BookReader:SearchCallbackError`\n * @param {CustomEvent} event\n */\n handleSearchCallbackError(event = {}) {\n this.toggleSearchPending(false);\n const isIndexed = event?.detail?.props?.results?.indexed;\n this.renderErrorModal(isIndexed);\n }\n\n handleSearchCallbackBookNotIndexed() {\n this.toggleSearchPending(false);\n this.renderBookNotIndexedModal();\n }\n\n handleSearchCallbackEmpty() {\n this.toggleSearchPending(false);\n this.renderResultsEmptyModal();\n }\n\n bindEvents() {\n const namespace = 'BookReader:';\n\n window.addEventListener(`${namespace}SearchCallbackError`, this.handleSearchCallbackError.bind(this));\n $(document).on(`${namespace}SearchCallback`, this.handleSearchCallback.bind(this))\n .on(`${namespace}SearchStarted`, this.handleSearchStarted.bind(this))\n .on(`${namespace}SearchCallbackBookNotIndexed`, this.handleSearchCallbackBookNotIndexed.bind(this))\n .on(`${namespace}SearchCallbackEmpty`, this.handleSearchCallbackEmpty.bind(this))\n .on(`${namespace}pageChanged`, this.updateSearchNavigation.bind(this));\n\n this.dom.toolbarSearch.querySelector('form').addEventListener('submit', this.submitHandler.bind(this));\n }\n}\n\nexport default SearchView;\n","// @ts-check\nimport { escapeHTML, escapeRegExp } from '../../BookReader/utils.js';\n/** @typedef {import('@/src/plugins/search/plugin.search.js').SearchInsideResults} SearchInsideResults */\n/** @typedef {import('@/src/plugins/search/plugin.search.js').LeafNum} LeafNum */\n/** @typedef {import('@/src/plugins/search/plugin.search.js').PageNumString} PageNumString */\n\n/**\n * @param {string} match\n * @param {string} preTag\n * @param {string} postTag\n * @returns {string}\n */\nexport function renderMatch(match, preTag, postTag) {\n // Search results are returned as a text blob with the hits wrapped in\n // triple mustaches. Hits occasionally include text beyond the search\n // term, so everything within the staches is captured and wrapped.\n const preTagRe = escapeRegExp(escapeHTML(preTag));\n const postTagRe = escapeRegExp(escapeHTML(postTag));\n // [^] matches any character, including line breaks\n const regex = new RegExp(`${preTagRe}([^]+?)${postTagRe}`, 'g');\n return escapeHTML(match)\n .replace(regex, '<mark>$1</mark>')\n // Fix trailing hyphens. This over-corrects but is net useful.\n .replace(/(\\b)- /g, '$1');\n}\n\n/**\n * Attach some fields to search inside results\n * @param {SearchInsideResults} results\n * @param {(pageNum: LeafNum) => PageNumString} displayPageNumberFn\n * @param {string} preTag\n * @param {string} postTag\n * @param {string | null} bookLanguage The ISO 639-1 language code of the book\n */\nexport function marshallSearchResults(results, displayPageNumberFn, preTag, postTag, bookLanguage) {\n // Attach matchIndex to a few things to make it easier to identify\n // an active/selected match\n\n for (const [index, match] of results.matches.entries()) {\n match.matchIndex = index;\n match.displayPageNumber = displayPageNumberFn(match.par[0].page);\n match.html = renderMatch(match.text, preTag, postTag);\n match.lang = bookLanguage;\n for (const par of match.par) {\n for (const box of par.boxes) {\n box.matchIndex = index;\n }\n }\n }\n}\n","// @ts-check\n/**\n * Plugin for Archive.org book search\n * Events fired at various points throughout search processing are published\n * on the document DOM element. These can be subscribed to using jQuery's event\n * binding method `$.fn.on`. All of the events are prefixed with a BookReader\n * namespace. The events are:\n *\n * @event BookReader:SearchStarted - When a search form is submitted, immediately\n * before an AJAX call is made to request search results\n * @event BookReader:SearchCallback - When the search AJAX call is returned and at\n * least one result is returned. The event callback receives an object\n * with the `results`, plugin `options`, and the BookReader `instance`\n * @event BookReader:SearchCallbackError - When the AJAX request returns an error.\n * Receives the `results` and `instance`\n * @event BookReader:SearchCallbackNotIndexed - When a message is received that\n * the book has not had OCR text indexed yet. Receives `instance`\n * @event BookReader:SearchCallbackEmpty - When no results found. Receives\n * `instance`\n * @event BookReader:SearchCanceled - When no results found. Receives\n * `instance`\n */\nimport { poll } from '../../BookReader/utils.js';\nimport { renderBoxesInPageContainerLayer } from '../../BookReader/PageContainer.js';\nimport SearchView from './view.js';\nimport { marshallSearchResults } from './utils.js';\nimport { BookReaderPlugin } from '../../BookReaderPlugin.js';\nimport { applyVariables } from '../../util/strings.js';\nimport { toISO6391 } from '../tts/utils.js';\n/** @typedef {import('../../BookReader/PageContainer').PageContainer} PageContainer */\n/** @typedef {import('../../BookReader/BookModel').PageIndex} PageIndex */\n/** @typedef {import('../../BookReader/BookModel').LeafNum} LeafNum */\n/** @typedef {import('../../BookReader/BookModel').PageNumString} PageNumString */\n\n// @ts-ignore\nconst BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);\n\nexport class SearchPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n preTag: '{{{',\n postTag: '}}}',\n /**\n * @type {import('@/src/util/strings.js').StringWithVars}\n * Provides the variables: `query`, `preTag`, and `postTag` (from these options)\n */\n searchInsideUrl: '/fulltext/inside.php?' + [\n 'q={{query|urlencode}}',\n 'pre_tag={{preTag|urlencode}}',\n 'post_tag={{postTag|urlencode}}',\n ].join('&'),\n /** @type {string} */\n initialSearchTerm: null,\n goToFirstResult: false,\n }\n\n /**\n * @override\n * @param {Partial<SearchPlugin['options']>} options\n **/\n setup(options) {\n super.setup(options);\n\n this.searchTerm = '';\n /** @type {SearchInsideResults | null} */\n this.searchResults = null;\n this.searchInsideUrl = this.options.searchInsideUrl;\n this.enabled = this.options.enabled;\n this.searchXHR = null;\n\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n this._searchBoxesByIndex = {};\n\n if (this.enabled) {\n this.searchView = new SearchView({\n br: this.br,\n searchCancelledCallback: () => {\n this._cancelSearch();\n this.br.trigger('SearchCanceled', { term: this.searchTerm, instance: this.br });\n },\n });\n } else {\n this.searchView = null;\n }\n }\n\n /** @override */\n init() {\n super.init();\n\n if (!this.enabled) return;\n\n this.searchView.init();\n if (this.options.initialSearchTerm) {\n /**\n * this.search() take two parameter\n * 1. this.options.initialSearchTerm - search term\n * 2. {\n * goToFirstResult: this.options.goToFirstResult,\n * suppressFragmentChange: false // always want to change fragment in URL\n * }\n */\n this.search(\n this.options.initialSearchTerm,\n { goToFirstResult: this.options.goToFirstResult, suppressFragmentChange: false },\n );\n }\n }\n\n /**\n * @override\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n if (!this.enabled) { return; }\n if (this.searchView.dom.toolbarSearch) {\n $toolbarElement.find('.BRtoolbarSectionInfo').after(this.searchView.dom.toolbarSearch);\n }\n return $toolbarElement;\n }\n\n /**\n * @override\n * @param {import (\"@/src/BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n if (this.enabled && pageContainer.page && pageContainer.page.index in this._searchBoxesByIndex) {\n const pageIndex = pageContainer.page.index;\n const boxes = this._searchBoxesByIndex[pageIndex];\n renderBoxesInPageContainerLayer(\n 'searchHiliteLayer',\n boxes,\n pageContainer.page,\n pageContainer.$container[0],\n boxes.map(b => `match-index-${b.matchIndex}`),\n );\n }\n return pageContainer;\n }\n\n /**\n * Submits search request\n *\n * @param {string} term\n * @param {Partial<SearchOptions>} overrides\n */\n async search(term = '', overrides = {}) {\n /** @type {SearchOptions} */\n const defaultOptions = {\n goToFirstResult: false, /* jump to the first result (default=false) */\n disablePopup: false, /* don't show the modal progress (default=false) */\n suppressFragmentChange: false, /* don't change the URL on initial load */\n error: null, /* optional error handler (default=null) */\n success: null, /* optional success handler (default=null) */\n\n };\n const options = jQuery.extend({}, defaultOptions, overrides);\n this.suppressFragmentChange = options.suppressFragmentChange;\n this.searchCancelled = false;\n\n // strip slashes, since this goes in the url\n this.searchTerm = term.replace(/\\//g, ' ');\n\n if (!options.suppressFragmentChange) {\n this.br.trigger(BookReader.eventNames.fragmentChange);\n }\n\n // Add quotes to the term. This is to compenstate for the backends default OR query\n // term = term.replace(/['\"]+/g, '');\n // term = '\"' + term + '\"';\n\n const url = applyVariables(this.options.searchInsideUrl, this.br.options.vars, {\n query: term,\n preTag: this.options.preTag,\n postTag: this.options.postTag,\n });\n\n const callSearchResultsCallback = (searchInsideResults) => {\n if (this.searchCancelled) {\n return;\n }\n const responseHasError = searchInsideResults.error || !searchInsideResults.matches.length;\n const hasCustomError = typeof options.error === 'function';\n const hasCustomSuccess = typeof options.success === 'function';\n\n if (responseHasError) {\n console.error('Search Inside Response Error', searchInsideResults.error || 'matches.length == 0');\n hasCustomError\n ? options.error.call(this, searchInsideResults, options)\n : this.BRSearchCallbackError(searchInsideResults);\n } else {\n hasCustomSuccess\n ? options.success.call(this, searchInsideResults, options)\n : this.BRSearchCallback(searchInsideResults, options);\n }\n };\n\n this.br.trigger('SearchStarted', { term: this.searchTerm, instance: this.br });\n callSearchResultsCallback(await $.ajax({\n url: url,\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n beforeSend: xhr => { this.searchXHR = xhr; },\n }));\n }\n\n /**\n * cancels AJAX Call\n * emits custom event\n */\n _cancelSearch() {\n this.searchXHR?.abort();\n this.searchView.clearSearchFieldAndResults(false);\n this.searchTerm = '';\n this.searchXHR = null;\n this.searchCancelled = true;\n this.searchResults = null;\n }\n\n /**\n * External function to cancel search\n * checks for term & xhr in flight before running\n */\n cancelSearchRequest() {\n this.searchCancelled = true;\n if (this.searchXHR !== null) {\n this._cancelSearch();\n this.searchView.toggleSearchPending();\n this.br.trigger('SearchCanceled', { term: this.searchTerm, instance: this.br });\n }\n }\n\n /**\n * Search Results return handler\n * @param {SearchInsideResults} results\n * @param {object} options\n * @param {boolean} options.goToFirstResult\n */\n BRSearchCallback(results, options) {\n const bookLangCode = toISO6391(this.br.options.bookLanguage);\n marshallSearchResults(\n results,\n pageNum => this.br.book.getPageNum(this.br.book.leafNumToIndex(pageNum)),\n this.options.preTag,\n this.options.postTag,\n bookLangCode,\n );\n this.searchResults = results || null;\n\n this.updateSearchHilites();\n this.br.removeProgressPopup();\n if (options.goToFirstResult) {\n this.jumpToMatch(0);\n }\n this.br.trigger('SearchCallback', { results, options, instance: this.br });\n }\n\n /**\n * Main search results error handler\n * @param {SearchInsideResults} results\n */\n BRSearchCallbackError(results) {\n this._BRSearchCallbackError(results);\n }\n\n /**\n * @private draws search results error\n * @param {SearchInsideResults} results\n */\n _BRSearchCallbackError(results) {\n this.searchResults = results;\n const payload = {\n term: this.searchTerm,\n results,\n instance: this.br,\n };\n if (results.error) {\n this.br.trigger('SearchCallbackError', payload);\n } else if (0 == results.matches.length) {\n if (false === results.indexed) {\n this.br.trigger('SearchCallbackBookNotIndexed', payload);\n return;\n }\n this.br.trigger('SearchCallbackEmpty', payload);\n }\n }\n\n /**\n * updates search on-page highlights controller\n */\n updateSearchHilites() {\n /** @type {SearchInsideMatch[]} */\n const matches = this.searchResults?.matches || [];\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n const boxesByIndex = {};\n\n // Clear any existing svg layers\n this.removeSearchHilites();\n\n // Group by pageIndex\n for (const match of matches) {\n for (const box of match.par[0].boxes) {\n const pageIndex = this.br.book.leafNumToIndex(box.page);\n const pageBoxes = boxesByIndex[pageIndex] || (boxesByIndex[pageIndex] = []);\n pageBoxes.push(box);\n }\n }\n\n // update any already created pages\n for (const [pageIndexString, boxes] of Object.entries(boxesByIndex)) {\n const pageIndex = parseFloat(pageIndexString);\n const page = this.br.book.getPage(pageIndex);\n const pageContainers = this.br.getActivePageContainerElementsForIndex(pageIndex);\n for (const container of pageContainers) {\n renderBoxesInPageContainerLayer('searchHiliteLayer', boxes, page, container, boxes.map(b => `match-index-${b.matchIndex}`));\n }\n }\n\n this._searchBoxesByIndex = boxesByIndex;\n }\n\n /**\n * remove search highlights\n */\n removeSearchHilites() {\n $(this.br.getActivePageContainerElements()).find('.searchHiliteLayer').remove();\n }\n\n /**\n * Goes to the page specified. If the page is not viewable, tries to load the page\n * FIXME Most of this logic is IA specific, and should be less integrated into here\n * or at least more configurable.\n * @param {number} matchIndex\n */\n async jumpToMatch(matchIndex) {\n const match = this.searchResults?.matches[matchIndex];\n const book = this.br.book;\n const pageIndex = book.leafNumToIndex(match.par[0].page);\n const page = book.getPage(pageIndex);\n const onNearbyPage = Math.abs(this.br.currentIndex() - pageIndex) < 3;\n let makeUnviewableAtEnd = false;\n if (!page.isViewable) {\n const resp = await fetch('/services/bookreader/request_page?' + new URLSearchParams({\n id: this.br.options.bookId,\n subprefix: this.br.options.subPrefix,\n leafNum: page.leafNum,\n })).then(r => r.json());\n\n for (const leafNum of resp.value) {\n book.getPage(book.leafNumToIndex(leafNum)).makeViewable();\n }\n\n // not able to show page; make the page viewable anyways so that it can\n // actually open. On IA, it has a fallback to a special error page.\n if (!resp.value.length) {\n book.getPage(pageIndex).makeViewable();\n makeUnviewableAtEnd = true;\n }\n\n // Trigger an update of book\n this.br._modes.mode1Up.mode1UpLit.updatePages();\n if (this.br.activeMode == this.br._modes.mode1Up) {\n await this.br._modes.mode1Up.mode1UpLit.updateComplete;\n }\n }\n /* this updates the URL */\n if (!this.br._isIndexDisplayed(pageIndex)) {\n this.suppressFragmentChange = false;\n this.br.jumpToIndex(pageIndex, { ariaLive: true });\n }\n\n // Reset it to unviewable if it wasn't resolved\n if (makeUnviewableAtEnd) {\n book.getPage(pageIndex).makeViewable(false);\n }\n\n // Scroll/flash in the ui\n const $boxes = await poll(() => $(`rect.match-index-${match.matchIndex}`), { until: result => result.length > 0 });\n if ($boxes.length) {\n $boxes.css('animation', 'none');\n $boxes[0].scrollIntoView({\n // Only vertically center the highlight if we're in 1up or in full screen. In\n // 2up, if we're not fullscreen, the whole body gets scrolled around to try to\n // center the highlight 🙄 See:\n // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move/11041376\n // Note: nearest doesn't quite work great, because the ReadAloud toolbar is now\n // full-width, and covers up the last line of the highlight.\n block: this.br.constMode1up == this.br.mode || this.br.isFullscreenActive ? 'center' : 'nearest',\n inline: 'center',\n behavior: onNearbyPage ? 'smooth' : 'auto',\n });\n // wait for animation to start\n await new Promise(resolve => setTimeout(resolve, 100));\n $boxes.removeAttr(\"style\");\n }\n }\n\n /**\n * Removes all search pins\n */\n removeSearchResults(suppressFragmentChange = false) {\n this.removeSearchHilites(); //be sure to set all box.divs to null\n this.searchTerm = null;\n this.searchResults = null;\n if (!suppressFragmentChange) {\n this.br.trigger(BookReader.eventNames.fragmentChange);\n }\n }\n}\nBookReader?.registerPlugin('search', SearchPlugin);\n\n/**\n * @typedef {object} SearchOptions\n * @property {boolean} goToFirstResult\n * @property {boolean} disablePopup\n * @property {boolean} suppressFragmentChange\n * @property {(null|function)} error (deprecated)\n * @property {(null|function)} success (deprecated)\n */\n\n/**\n * @typedef {object} SearchInsideMatchBox\n * @property {number} page\n * @property {number} r\n * @property {number} l\n * @property {number} b\n * @property {number} t\n * @property {HTMLDivElement} [div]\n * @property {number} matchIndex This is a fake field! not part of the API response. The index of the match that contains this box in total search results matches.\n */\n\n/**\n * @typedef {object} SearchInsideMatch\n * @property {number} matchIndex This is a fake field! Not part of the API response. It is added by the JS.\n * @property {string} displayPageNumber (fake field) The page number as it should be displayed in the UI.\n * @property {string} html (computed field) The html-escaped raw html to display in the UI.\n * @property {string} text\n * @property {string} lang (fake field) The ISO 639-1 language code of the book\n * @property {Array<{ page: number, boxes: SearchInsideMatchBox[] }>} par\n */\n\n/**\n * @typedef {object} SearchInsideResults\n * @property {string} q\n * @property {string} error\n * @property {SearchInsideMatch[]} matches\n * @property {boolean} indexed\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","/**\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":["PROPER_FUNCTION_NAME","fails","whitespaces","module","exports","METHOD_NAME","name","$","$trim","target","proto","forced","forcedStringTrimMethod","trim","this","BookReaderPlugin","br","_classCallCheck","options","key","value","Object","assign","pageContainer","$toolbarElement","$navBar","SearchView","_ref","_ref$searchCancelledC","searchCancelledCallback","matches","cacheDOMElements","cancelSearch","bindEvents","dom","toolbarSearch","buildToolbarSearch","query","val","remove","dispatchEventWhenComplete","arguments","length","undefined","plugins","search","removeSearchResults","removeResultPins","emptyMatches","setQuery","teardownSearchNavigation","trigger","selector","before","concat","resultsPosition","searchNavigation","positionMessage","currentMatchIndex","namespace","on","clearSearchFieldAndResults","bind","showPrevResult","showNextResult","toggleSidebar","mode","constModeThumb","switchMode","constMode1up","getClosestMatchIndex","start","end","comparator","eq","click","updateResultsPosition","updateSearchNavigationButtons","comparisonFn","matchPages","map","m","par","page","currentPage","currentIndex","closestTo","pool","slice","closestPage","indexOf","find","text","attr","off","resize","matchingSearchResult","constMode2up","find2upMatchingSearchResult","find1upMatchingSearchResult","_this","_this2","_isIndexDisplayed","setCurrentMatchIndex","bool","pinsVisibleState","refs","$BRfooter","css","visibility","document","createElement","classList","add","innerHTML","imagesBaseURL","_this3","forEach","match","pageIndex","book","leafNumToIndex","percentThrough","constructor","util","cssPercentage","getNumLeafs","html","Math","max","substring","replace","addClass","left","append","displayPageNumber","appendTo","event","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","x","style","setProperty","removeClass","jumpToMatch","matchIndex","_this4","showProgressPopup","progressPopupClosed","removeProgressPopup","toggleSearchPending","errorDetails","renderModalMessage","delayModalRemovalFor","messageHTML","modal","el","timeoutMS","setTimeout","e","preventDefault","_ref2","_this5","results","renderSearchNavigation","bindSearchNavigationEvents","renderPins","goToFirstResult","one","removeSearchHilites","searchTerm","_event$detail","isIndexed","detail","props","indexed","renderErrorModal","renderBookNotIndexedModal","renderResultsEmptyModal","window","addEventListener","handleSearchCallbackError","handleSearchCallback","handleSearchStarted","handleSearchCallbackBookNotIndexed","handleSearchCallbackEmpty","updateSearchNavigation","submitHandler","renderMatch","preTag","postTag","preTagRe","escapeRegExp","escapeHTML","postTagRe","regex","RegExp","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","create","_regeneratorDefine2","f","p","y","G","v","a","d","l","TypeError","call","done","return","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","defineProperty","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","apply","_next","_throw","_defineProperties","_toPropertyKey","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_superPropGet","_get","_getPrototypeOf","get","hasOwnProperty","_superPropBase","getOwnPropertyDescriptor","_setPrototypeOf","_typeof","toPrimitive","String","_toPrimitive","BookReader","SearchPlugin","_BookReaderPlugin","_len","args","Array","_key","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_callSuper","enabled","searchInsideUrl","join","initialSearchTerm","_inherits","searchResults","searchXHR","_searchBoxesByIndex","searchView","_cancelSearch","term","instance","init","suppressFragmentChange","after","index","boxes","renderBoxesInPageContainerLayer","$container","b","_search","_callee","overrides","defaultOptions","url","callSearchResultsCallback","_t","_args","_context","disablePopup","error","success","jQuery","extend","searchCancelled","eventNames","fragmentChange","applyVariables","vars","searchInsideResults","responseHasError","hasCustomError","hasCustomSuccess","console","BRSearchCallbackError","BRSearchCallback","ajax","cache","xhrFields","withCredentials","protected","beforeSend","xhr","_this$searchXHR","abort","bookLangCode","toISO6391","bookLanguage","displayPageNumberFn","_step","_iterator","_createForOfIteratorHelper","entries","s","_step$value","_slicedToArray","lang","_step2","_iterator2","_step3","_iterator3","err","marshallSearchResults","pageNum","getPageNum","updateSearchHilites","_BRSearchCallbackError","payload","_this$searchResults","boxesByIndex","box","push","_i","_Object$entries","_Object$entries$_i","pageIndexString","parseFloat","getPage","getActivePageContainerElementsForIndex","container","getActivePageContainerElements","_jumpToMatch","_callee2","_this$searchResults2","onNearbyPage","makeUnviewableAtEnd","resp","_iterator4","_step4","leafNum","$boxes","_context2","abs","isViewable","fetch","URLSearchParams","id","bookId","subprefix","subPrefix","json","makeViewable","_modes","mode1Up","mode1UpLit","updatePages","activeMode","updateComplete","jumpToIndex","ariaLive","poll","until","result","scrollIntoView","block","isFullscreenActive","inline","behavior","removeAttr","_x","registerPlugin","codes","by639_1","by639_2T","by639_2B","row","code","nativeName","iso639_1","iso639_2T","iso639_2B","src_default","isArray","_arrayLikeToArray","toString","from","test","_unsupportedIterableToArray","_n","F","next","approximateWordCount","isAndroid","userAgent","navigator","specialLangs","language","toLocaleLowerCase","codeObj","findLanguage","toNativeName","split","fields","toLowerCase","langs","_lang$codeType","includes","hasLocalStorage","localStorage","DEBUG_READ_ALOUD","location","template","possibleFilters","APPLY_FILTERS","$0","$1","_expression$split$map2","varName","filterNames","reduce","acc","cur","urlencode","encodeURIComponent"],"sourceRoot":""}
|