@internetarchive/bookreader 5.0.0-18
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/.eslintrc.js +58 -0
- package/.gitattributes +2 -0
- package/.github/ISSUE_TEMPLATE/bug.md +32 -0
- package/.github/ISSUE_TEMPLATE/feature-request.md +30 -0
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +15 -0
- package/.github/dependabot.yml +8 -0
- package/.github/workflows/node.js.yml +37 -0
- package/.github/workflows/npm-publish.yml +47 -0
- package/.testcaferc.json +5 -0
- package/BookReader/BookReader.css +2983 -0
- package/BookReader/BookReader.js +3 -0
- package/BookReader/BookReader.js.LICENSE.txt +117 -0
- package/BookReader/BookReader.js.map +1 -0
- package/BookReader/bookreader-component-bundle.js +1436 -0
- package/BookReader/bookreader-component-bundle.js.LICENSE.txt +27 -0
- package/BookReader/bookreader-component-bundle.js.map +1 -0
- package/BookReader/icons/1up.svg +1 -0
- package/BookReader/icons/2up.svg +1 -0
- package/BookReader/icons/advance.svg +3 -0
- package/BookReader/icons/chevron-right.svg +1 -0
- package/BookReader/icons/close-circle-dark.svg +1 -0
- package/BookReader/icons/close-circle.svg +1 -0
- package/BookReader/icons/fullscreen.svg +1 -0
- package/BookReader/icons/fullscreen_exit.svg +1 -0
- package/BookReader/icons/hamburger.svg +1 -0
- package/BookReader/icons/left-arrow.svg +1 -0
- package/BookReader/icons/magnify-minus.svg +1 -0
- package/BookReader/icons/magnify-plus.svg +1 -0
- package/BookReader/icons/magnify.svg +1 -0
- package/BookReader/icons/pause.svg +1 -0
- package/BookReader/icons/play.svg +1 -0
- package/BookReader/icons/playback-speed.svg +1 -0
- package/BookReader/icons/read-aloud.svg +1 -0
- package/BookReader/icons/review.svg +3 -0
- package/BookReader/icons/thumbnails.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -0
- package/BookReader/images/BRicons.png +0 -0
- package/BookReader/images/BRicons.svg +5 -0
- package/BookReader/images/BRicons_ia.png +0 -0
- package/BookReader/images/back_pages.png +0 -0
- package/BookReader/images/book_bottom_icon.png +0 -0
- package/BookReader/images/book_down_icon.png +0 -0
- package/BookReader/images/book_left_icon.png +0 -0
- package/BookReader/images/book_leftmost_icon.png +0 -0
- package/BookReader/images/book_right_icon.png +0 -0
- package/BookReader/images/book_rightmost_icon.png +0 -0
- package/BookReader/images/book_top_icon.png +0 -0
- package/BookReader/images/book_up_icon.png +0 -0
- package/BookReader/images/books_graphic.svg +1 -0
- package/BookReader/images/booksplit.png +0 -0
- package/BookReader/images/control_pause_icon.png +0 -0
- package/BookReader/images/control_play_icon.png +0 -0
- package/BookReader/images/embed_icon.png +0 -0
- package/BookReader/images/icon-home-ia.png +0 -0
- package/BookReader/images/icon_OL-logo-xs.png +0 -0
- package/BookReader/images/icon_alert-xs.png +0 -0
- package/BookReader/images/icon_book.svg +1 -0
- package/BookReader/images/icon_bookmark.svg +1 -0
- package/BookReader/images/icon_close-pop.png +0 -0
- package/BookReader/images/icon_download.png +0 -0
- package/BookReader/images/icon_gear.svg +1 -0
- package/BookReader/images/icon_hamburger.svg +1 -0
- package/BookReader/images/icon_home.png +0 -0
- package/BookReader/images/icon_home.svg +1 -0
- package/BookReader/images/icon_home_ia.png +0 -0
- package/BookReader/images/icon_indicator.png +0 -0
- package/BookReader/images/icon_info.svg +1 -0
- package/BookReader/images/icon_one_page.svg +1 -0
- package/BookReader/images/icon_pause.svg +1 -0
- package/BookReader/images/icon_play.svg +1 -0
- package/BookReader/images/icon_playback-rate.svg +1 -0
- package/BookReader/images/icon_return.png +0 -0
- package/BookReader/images/icon_search_button.svg +1 -0
- package/BookReader/images/icon_share.svg +1 -0
- package/BookReader/images/icon_skip-ahead.svg +1 -0
- package/BookReader/images/icon_skip-back.svg +2 -0
- package/BookReader/images/icon_speaker.svg +1 -0
- package/BookReader/images/icon_speaker_open.svg +1 -0
- package/BookReader/images/icon_thumbnails.svg +1 -0
- package/BookReader/images/icon_toc.svg +1 -0
- package/BookReader/images/icon_two_pages.svg +1 -0
- package/BookReader/images/icon_zoomer.png +0 -0
- package/BookReader/images/loading.gif +0 -0
- package/BookReader/images/logo_icon.png +0 -0
- package/BookReader/images/marker_chap-off.png +0 -0
- package/BookReader/images/marker_chap-off.svg +1 -0
- package/BookReader/images/marker_chap-off_ia.png +0 -0
- package/BookReader/images/marker_chap-on.png +0 -0
- package/BookReader/images/marker_chap-on.svg +1 -0
- package/BookReader/images/marker_srch-on.svg +1 -0
- package/BookReader/images/marker_srchchap-off.png +0 -0
- package/BookReader/images/marker_srchchap-on.png +0 -0
- package/BookReader/images/nav_control-dn.png +0 -0
- package/BookReader/images/nav_control-dn_ia.png +0 -0
- package/BookReader/images/nav_control-up.png +0 -0
- package/BookReader/images/nav_control-up_ia.png +0 -0
- package/BookReader/images/nav_control.png +0 -0
- package/BookReader/images/one_page_mode_icon.png +0 -0
- package/BookReader/images/paper-badge.png +0 -0
- package/BookReader/images/print_icon.png +0 -0
- package/BookReader/images/progressbar.gif +0 -0
- package/BookReader/images/right_edges.png +0 -0
- package/BookReader/images/slider.png +0 -0
- package/BookReader/images/slider_ia.png +0 -0
- package/BookReader/images/thumbnail_mode_icon.png +0 -0
- package/BookReader/images/transparent.png +0 -0
- package/BookReader/images/two_page_mode_icon.png +0 -0
- package/BookReader/images/zoom_in_icon.png +0 -0
- package/BookReader/images/zoom_out_icon.png +0 -0
- package/BookReader/jquery-1.10.1.js +2 -0
- package/BookReader/jquery-1.10.1.js.LICENSE.txt +24 -0
- package/BookReader/plugins/plugin.archive_analytics.js +2 -0
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -0
- package/BookReader/plugins/plugin.autoplay.js +2 -0
- package/BookReader/plugins/plugin.autoplay.js.map +1 -0
- package/BookReader/plugins/plugin.chapters.js +2 -0
- package/BookReader/plugins/plugin.chapters.js.map +1 -0
- package/BookReader/plugins/plugin.iframe.js +2 -0
- package/BookReader/plugins/plugin.iframe.js.map +1 -0
- package/BookReader/plugins/plugin.mobile_nav.js +2 -0
- package/BookReader/plugins/plugin.mobile_nav.js.map +1 -0
- package/BookReader/plugins/plugin.resume.js +2 -0
- package/BookReader/plugins/plugin.resume.js.map +1 -0
- package/BookReader/plugins/plugin.search.js +2 -0
- package/BookReader/plugins/plugin.search.js.map +1 -0
- package/BookReader/plugins/plugin.text_selection.js +2 -0
- package/BookReader/plugins/plugin.text_selection.js.map +1 -0
- package/BookReader/plugins/plugin.tts.js +3 -0
- package/BookReader/plugins/plugin.tts.js.LICENSE.txt +27 -0
- package/BookReader/plugins/plugin.tts.js.map +1 -0
- package/BookReader/plugins/plugin.url.js +2 -0
- package/BookReader/plugins/plugin.url.js.map +1 -0
- package/BookReader/plugins/plugin.vendor-fullscreen.js +2 -0
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -0
- package/BookReaderDemo/BookReaderDemo.css +41 -0
- package/BookReaderDemo/BookReaderJSAdvanced.js +115 -0
- package/BookReaderDemo/BookReaderJSAutoplay.js +56 -0
- package/BookReaderDemo/BookReaderJSSimple.js +55 -0
- package/BookReaderDemo/IIIFBookReader.js +207 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +1 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +1 -0
- 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 +1 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +1 -0
- 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 +7178 -0
- package/BookReaderDemo/demo-advanced.html +32 -0
- package/BookReaderDemo/demo-autoplay.html +38 -0
- package/BookReaderDemo/demo-embed-iframe-src.html +84 -0
- package/BookReaderDemo/demo-embed.html +26 -0
- package/BookReaderDemo/demo-fullscreen-mobile.html +36 -0
- package/BookReaderDemo/demo-fullscreen.html +33 -0
- package/BookReaderDemo/demo-iiif.html +34 -0
- package/BookReaderDemo/demo-iiif.js +26 -0
- package/BookReaderDemo/demo-internetarchive.html +74 -0
- package/BookReaderDemo/demo-multiple.html +43 -0
- package/BookReaderDemo/demo-preview-pages.html +1092 -0
- package/BookReaderDemo/demo-simple.html +34 -0
- package/BookReaderDemo/demo-vendor-fullscreen.html +36 -0
- package/BookReaderDemo/immersion-1up.html +64 -0
- package/BookReaderDemo/immersion-mode.html +35 -0
- package/BookReaderDemo/toggle_controls.html +53 -0
- package/BookReaderDemo/view_mode.html +39 -0
- package/BookReaderDemo/viewmode-cycle.html +41 -0
- package/CHANGELOG.md +540 -0
- package/CONTRIBUTING.md +7 -0
- package/LICENSE +661 -0
- package/README.md +205 -0
- package/babel.config.js +18 -0
- package/codecov.yml +17 -0
- package/index.html +31 -0
- package/jsconfig.json +14 -0
- package/karma.conf.js +23 -0
- package/package.json +129 -0
- package/screenshot.png +0 -0
- package/scripts/postversion.js +10 -0
- package/scripts/preversion.js +14 -0
- package/scripts/version.js +26 -0
- package/src/BookNavigator/BookModel.js +14 -0
- package/src/BookNavigator/BookNavigator.js +468 -0
- package/src/BookNavigator/assets/book-loader.js +27 -0
- package/src/BookNavigator/assets/bookmark-colors.js +15 -0
- package/src/BookNavigator/assets/button-base.js +61 -0
- package/src/BookNavigator/assets/icon_checkmark.js +6 -0
- package/src/BookNavigator/assets/icon_close.js +3 -0
- package/src/BookNavigator/assets/icon_sort_asc.js +5 -0
- package/src/BookNavigator/assets/icon_sort_desc.js +5 -0
- package/src/BookNavigator/assets/icon_sort_neutral.js +5 -0
- package/src/BookNavigator/assets/icon_volumes.js +11 -0
- package/src/BookNavigator/bookmarks/bookmark-button.js +64 -0
- package/src/BookNavigator/bookmarks/bookmark-edit.js +215 -0
- package/src/BookNavigator/bookmarks/bookmarks-list.js +285 -0
- package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +28 -0
- package/src/BookNavigator/bookmarks/bookmarks-provider.js +53 -0
- package/src/BookNavigator/bookmarks/ia-bookmarks.js +500 -0
- package/src/BookNavigator/br-fullscreen-mgr.js +83 -0
- package/src/BookNavigator/delete-modal-actions.js +49 -0
- package/src/BookNavigator/downloads/downloads-provider.js +76 -0
- package/src/BookNavigator/downloads/downloads.js +138 -0
- package/src/BookNavigator/search/a-search-result.js +55 -0
- package/src/BookNavigator/search/search-provider.js +180 -0
- package/src/BookNavigator/search/search-results.js +360 -0
- package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +93 -0
- package/src/BookNavigator/visual-adjustments/visual-adjustments.js +280 -0
- package/src/BookNavigator/volumes/volumes-provider.js +83 -0
- package/src/BookNavigator/volumes/volumes.js +178 -0
- package/src/BookReader/BookModel.js +518 -0
- package/src/BookReader/DebugConsole.js +54 -0
- package/src/BookReader/ImageCache.js +116 -0
- package/src/BookReader/Mode1Up.js +90 -0
- package/src/BookReader/Mode1UpLit.js +434 -0
- package/src/BookReader/Mode2Up.js +1372 -0
- package/src/BookReader/ModeSmoothZoom.js +177 -0
- package/src/BookReader/ModeThumb.js +336 -0
- package/src/BookReader/Navbar/Navbar.js +339 -0
- package/src/BookReader/PageContainer.js +120 -0
- package/src/BookReader/ReduceSet.js +26 -0
- package/src/BookReader/Toolbar/Toolbar.js +384 -0
- package/src/BookReader/events.js +20 -0
- package/src/BookReader/options.js +320 -0
- package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/src/BookReader/utils/classes.js +36 -0
- package/src/BookReader/utils.js +240 -0
- package/src/BookReader.js +2546 -0
- package/src/BookReaderComponent/BookReaderComponent.js +112 -0
- package/src/ItemNavigator/ItemNavigator.js +376 -0
- package/src/ItemNavigator/providers/sharing.js +33 -0
- package/src/assets/icons/1up.svg +12 -0
- package/src/assets/icons/2up.svg +15 -0
- package/src/assets/icons/advance.svg +26 -0
- package/src/assets/icons/chevron-right.svg +1 -0
- package/src/assets/icons/close-circle-dark.svg +1 -0
- package/src/assets/icons/close-circle.svg +1 -0
- package/src/assets/icons/fullscreen.svg +17 -0
- package/src/assets/icons/fullscreen_exit.svg +17 -0
- package/src/assets/icons/hamburger.svg +15 -0
- package/src/assets/icons/left-arrow.svg +12 -0
- package/src/assets/icons/magnify-minus.svg +16 -0
- package/src/assets/icons/magnify-plus.svg +17 -0
- package/src/assets/icons/magnify.svg +15 -0
- package/src/assets/icons/pause.svg +23 -0
- package/src/assets/icons/play.svg +22 -0
- package/src/assets/icons/playback-speed.svg +34 -0
- package/src/assets/icons/read-aloud.svg +22 -0
- package/src/assets/icons/review.svg +22 -0
- package/src/assets/icons/thumbnails.svg +17 -0
- package/src/assets/icons/volume-full.svg +22 -0
- package/src/assets/images/BRicons.png +0 -0
- package/src/assets/images/BRicons.svg +94 -0
- package/src/assets/images/BRicons_ia.png +0 -0
- package/src/assets/images/back_pages.png +0 -0
- package/src/assets/images/book_bottom_icon.png +0 -0
- package/src/assets/images/book_down_icon.png +0 -0
- package/src/assets/images/book_left_icon.png +0 -0
- package/src/assets/images/book_leftmost_icon.png +0 -0
- package/src/assets/images/book_right_icon.png +0 -0
- package/src/assets/images/book_rightmost_icon.png +0 -0
- package/src/assets/images/book_top_icon.png +0 -0
- package/src/assets/images/book_up_icon.png +0 -0
- package/src/assets/images/books_graphic.svg +177 -0
- package/src/assets/images/booksplit.png +0 -0
- package/src/assets/images/control_pause_icon.png +0 -0
- package/src/assets/images/control_play_icon.png +0 -0
- package/src/assets/images/embed_icon.png +0 -0
- package/src/assets/images/icon-home-ia.png +0 -0
- package/src/assets/images/icon_OL-logo-xs.png +0 -0
- package/src/assets/images/icon_alert-xs.png +0 -0
- package/src/assets/images/icon_book.svg +12 -0
- package/src/assets/images/icon_bookmark.svg +12 -0
- package/src/assets/images/icon_close-pop.png +0 -0
- package/src/assets/images/icon_download.png +0 -0
- package/src/assets/images/icon_gear.svg +14 -0
- package/src/assets/images/icon_hamburger.svg +20 -0
- package/src/assets/images/icon_home.png +0 -0
- package/src/assets/images/icon_home.svg +21 -0
- package/src/assets/images/icon_home_ia.png +0 -0
- package/src/assets/images/icon_indicator.png +0 -0
- package/src/assets/images/icon_info.svg +11 -0
- package/src/assets/images/icon_one_page.svg +8 -0
- package/src/assets/images/icon_pause.svg +1 -0
- package/src/assets/images/icon_play.svg +1 -0
- package/src/assets/images/icon_playback-rate.svg +15 -0
- package/src/assets/images/icon_return.png +0 -0
- package/src/assets/images/icon_search_button.svg +8 -0
- package/src/assets/images/icon_share.svg +9 -0
- package/src/assets/images/icon_skip-ahead.svg +6 -0
- package/src/assets/images/icon_skip-back.svg +13 -0
- package/src/assets/images/icon_speaker.svg +18 -0
- package/src/assets/images/icon_speaker_open.svg +10 -0
- package/src/assets/images/icon_thumbnails.svg +12 -0
- package/src/assets/images/icon_toc.svg +5 -0
- package/src/assets/images/icon_two_pages.svg +9 -0
- package/src/assets/images/icon_zoomer.png +0 -0
- package/src/assets/images/loading.gif +0 -0
- package/src/assets/images/logo_icon.png +0 -0
- package/src/assets/images/marker_chap-off.png +0 -0
- package/src/assets/images/marker_chap-off.svg +11 -0
- package/src/assets/images/marker_chap-off_ia.png +0 -0
- package/src/assets/images/marker_chap-on.png +0 -0
- package/src/assets/images/marker_chap-on.svg +11 -0
- package/src/assets/images/marker_srch-on.svg +11 -0
- package/src/assets/images/marker_srchchap-off.png +0 -0
- package/src/assets/images/marker_srchchap-on.png +0 -0
- package/src/assets/images/nav_control-dn.png +0 -0
- package/src/assets/images/nav_control-dn_ia.png +0 -0
- package/src/assets/images/nav_control-up.png +0 -0
- package/src/assets/images/nav_control-up_ia.png +0 -0
- package/src/assets/images/nav_control.png +0 -0
- package/src/assets/images/one_page_mode_icon.png +0 -0
- package/src/assets/images/paper-badge.png +0 -0
- package/src/assets/images/print_icon.png +0 -0
- package/src/assets/images/progressbar.gif +0 -0
- package/src/assets/images/right_edges.png +0 -0
- package/src/assets/images/slider.png +0 -0
- package/src/assets/images/slider_ia.png +0 -0
- package/src/assets/images/thumbnail_mode_icon.png +0 -0
- package/src/assets/images/transparent.png +0 -0
- package/src/assets/images/two_page_mode_icon.png +0 -0
- package/src/assets/images/zoom_in_icon.png +0 -0
- package/src/assets/images/zoom_out_icon.png +0 -0
- package/src/css/BookReader.scss +89 -0
- package/src/css/_BRBookmarks.scss +29 -0
- package/src/css/_BRComponent.scss +13 -0
- package/src/css/_BRfloat.scss +197 -0
- package/src/css/_BRicon.scss +48 -0
- package/src/css/_BRmain.scss +251 -0
- package/src/css/_BRnav.scss +382 -0
- package/src/css/_BRpages.scss +139 -0
- package/src/css/_BRsearch.scss +226 -0
- package/src/css/_BRtoolbar.scss +84 -0
- package/src/css/_BRvendor.scss +5 -0
- package/src/css/_MobileNav.scss +194 -0
- package/src/css/_TextSelection.scss +32 -0
- package/src/css/_colorbox.scss +52 -0
- package/src/css/_controls.scss +244 -0
- package/src/css/_icons.scss +121 -0
- package/src/dragscrollable-br.js +261 -0
- package/src/jquery-wrapper.js +4 -0
- package/src/plugins/plugin.archive_analytics.js +86 -0
- package/src/plugins/plugin.autoplay.js +129 -0
- package/src/plugins/plugin.chapters.js +251 -0
- package/src/plugins/plugin.iframe.js +48 -0
- package/src/plugins/plugin.mobile_nav.js +287 -0
- package/src/plugins/plugin.resume.js +68 -0
- package/src/plugins/plugin.text_selection.js +291 -0
- package/src/plugins/plugin.url.js +198 -0
- package/src/plugins/plugin.vendor-fullscreen.js +247 -0
- package/src/plugins/search/plugin.search.js +439 -0
- package/src/plugins/search/view.js +440 -0
- package/src/plugins/tts/AbstractTTSEngine.js +242 -0
- package/src/plugins/tts/FestivalTTSEngine.js +169 -0
- package/src/plugins/tts/PageChunk.js +107 -0
- package/src/plugins/tts/PageChunkIterator.js +163 -0
- package/src/plugins/tts/WebTTSEngine.js +352 -0
- package/src/plugins/tts/plugin.tts.js +335 -0
- package/src/plugins/tts/tooltip_dict.js +15 -0
- package/src/plugins/tts/utils.js +91 -0
- package/src/util/browserSniffing.js +30 -0
- package/src/util/debouncer.js +26 -0
- package/src/util/docCookies.js +67 -0
- package/src/util/strings.js +34 -0
- package/tests/BookReader/BookModel.test.js +312 -0
- package/tests/BookReader/BookReaderPublicFunctions.test.js +164 -0
- package/tests/BookReader/DebugConsole.test.js +25 -0
- package/tests/BookReader/ImageCache.test.js +150 -0
- package/tests/BookReader/Mode1UpLit.test.js +87 -0
- package/tests/BookReader/Mode2Up.test.js +245 -0
- package/tests/BookReader/ModeSmoothZoom.test.js +149 -0
- package/tests/BookReader/Navbar/Navbar.test.js +169 -0
- package/tests/BookReader/PageContainer.test.js +187 -0
- package/tests/BookReader/ReduceSet.test.js +38 -0
- package/tests/BookReader/Toolbar/Toolbar.test.js +26 -0
- package/tests/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
- package/tests/BookReader/utils/classes.test.js +88 -0
- package/tests/BookReader/utils.test.js +136 -0
- package/tests/BookReader.options.test.js +39 -0
- package/tests/BookReader.test.js +301 -0
- package/tests/e2e/README.md +75 -0
- package/tests/e2e/autoplay.test.js +13 -0
- package/tests/e2e/base.test.js +35 -0
- package/tests/e2e/helpers/base.js +263 -0
- package/tests/e2e/helpers/debug.js +13 -0
- package/tests/e2e/helpers/desktopSearch.js +72 -0
- package/tests/e2e/helpers/mobileSearch.js +85 -0
- package/tests/e2e/helpers/mockSearch.js +93 -0
- package/tests/e2e/helpers/rightToLeft.js +29 -0
- package/tests/e2e/ia-production/ia-prod-base.js +17 -0
- package/tests/e2e/models/BookReader.js +11 -0
- package/tests/e2e/models/Navigation.js +56 -0
- package/tests/e2e/rightToLeft.test.js +20 -0
- package/tests/e2e/viewmode.test.js +37 -0
- package/tests/karma/BookNavigator/book-navigator.test.js +180 -0
- package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +133 -0
- package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +222 -0
- package/tests/karma/BookNavigator/downloads/downloads-provider.test.js +64 -0
- package/tests/karma/BookNavigator/downloads/downloads.test.js +54 -0
- package/tests/karma/BookNavigator/search/search-provider.test.js +23 -0
- package/tests/karma/BookNavigator/search/search-results.test.js +240 -0
- package/tests/karma/BookNavigator/sharing/sharing-provider.test.js +40 -0
- package/tests/karma/BookNavigator/visual-adjustments.test.js +201 -0
- package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +160 -0
- package/tests/karma/BookNavigator/volumes/volumes.test.js +98 -0
- package/tests/plugins/plugin.archive_analytics.test.js +23 -0
- package/tests/plugins/plugin.autoplay.test.js +52 -0
- package/tests/plugins/plugin.chapters.test.js +130 -0
- package/tests/plugins/plugin.iframe.test.js +42 -0
- package/tests/plugins/plugin.mobile_nav.test.js +66 -0
- package/tests/plugins/plugin.resume.test.js +98 -0
- package/tests/plugins/plugin.text_selection.test.js +193 -0
- package/tests/plugins/plugin.url.test.js +129 -0
- package/tests/plugins/plugin.vendor-fullscreen.test.js +65 -0
- package/tests/plugins/search/plugin.search.test.js +173 -0
- package/tests/plugins/search/plugin.search.view.test.js +106 -0
- package/tests/plugins/tts/AbstractTTSEngine.test.js +153 -0
- package/tests/plugins/tts/FestivalTTSEngine.test.js +59 -0
- package/tests/plugins/tts/PageChunk.test.js +57 -0
- package/tests/plugins/tts/PageChunkIterator.test.js +179 -0
- package/tests/plugins/tts/WebTTSEngine.test.js +126 -0
- package/tests/plugins/tts/utils.test.js +133 -0
- package/tests/util/browserSniffing.test.js +56 -0
- package/tests/util/docCookies.test.js +15 -0
- package/tests/util/strings.test.js +63 -0
- package/tests/utils.js +80 -0
- package/webpack.config.js +85 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"plugins/plugin.mobile_nav.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.mobile_nav.js","webpack://@internetarchive/bookreader/./node_modules/jquery.mmenu/dist/addons/navbars/jquery.mmenu.navbars.min.js","webpack://@internetarchive/bookreader/./node_modules/jquery.mmenu/dist/js/jquery.mmenu.min.js"],"sourcesContent":["/* global BookReader */\n/**\n * Adds mobile navigation at responsive breakpoint\n */\n\nimport * as utils from '../BookReader/utils.js';\nimport 'jquery.mmenu/dist/js/jquery.mmenu.min.js';\nimport 'jquery.mmenu/dist/addons/navbars/jquery.mmenu.navbars.min.js';\n\n//contains all filters and labels for checkboxs\nconst FILTERLIST = [\n {\n filter: \"grayscale(100%)\",\n label: \"Grayscale\"\n },\n {\n filter: \"brightness(120%)\",\n label: \"High brightness\"\n },\n {\n filter: \"invert(100%)\",\n label: \"Inverted (dark mode)\"\n },\n {\n filter: \"contrast(120%)\",\n label: \"High contrast\"\n },\n];\n\njQuery.extend(BookReader.defaultOptions, {\n enableMobileNav: true,\n mobileNavTitle: 'Internet Archive',\n mobileNavFullscreenOnly: false,\n});\n\nBookReader.prototype.setup = (function(super_) {\n return function (options) {\n super_.call(this, options);\n\n this.enableMobileNav = options.enableMobileNav;\n this.mobileNavTitle = options.mobileNavTitle;\n this.mobileNavFullscreenOnly = options.mobileNavFullscreenOnly;\n\n this.refs.$mmenu = null;\n };\n})(BookReader.prototype.setup);\n\n\n// Extend initToolbar\nBookReader.prototype.initToolbar = (function (super_) {\n return function (mode, ui) {\n let $mmenuEl;\n if (this.enableMobileNav) {\n const $drawerEl = this.buildMobileDrawerElement();\n this.refs.$br.append($drawerEl);\n\n // Render info into mobile info before mmenu\n this.buildInfoDiv(this.$('.BRmobileInfo'));\n this.buildShareDiv(this.$('.BRmobileShare'));\n\n $mmenuEl = $drawerEl;\n $mmenuEl.mmenu({\n navbars: [\n { \"position\": \"top\" },\n ],\n navbar: {\n add: true,\n title: this.mobileNavTitle,\n titleLink: 'panel'\n },\n extensions: [ \"panelshadow\" ],\n }, {\n offCanvas: {\n wrapPageIfNeeded: false,\n zposition: 'next',\n pageSelector: this.el,\n }\n });\n\n const $BRpageviewField = $mmenuEl.find('.BRpageviewValue');\n $mmenuEl.data('mmenu').bind('opened', () => {\n // Update \"Link to this page view\" link\n if ($BRpageviewField.length) {\n $BRpageviewField.val(window.location.href);\n }\n });\n\n //apply filters when checkboxs clicked\n $drawerEl.find('.BRcheckbox-filters').click(() => applyFilters($drawerEl, this));\n\n // Bind mobile switch buttons\n $drawerEl.find('.DrawerLayoutButton.one_page_mode').click(\n () => this.switchMode(this.constMode1up));\n $drawerEl.find('.DrawerLayoutButton.two_page_mode').click(\n () => this.switchMode(this.constMode2up));\n $drawerEl.find('.DrawerLayoutButton.thumbnail_mode').click(\n () => this.switchMode(this.constModeThumb));\n\n if (this.mobileNavFullscreenOnly) {\n $(document.body).addClass('BRbodyMobileNavEnabledFullscreen');\n } else {\n $(document.body).addClass('BRbodyMobileNavEnabled');\n }\n\n this.refs.$mmenu = $mmenuEl;\n\n }\n\n // Call the parent method at the end, because it binds events to DOM\n super_.apply(this, arguments);\n\n\n if (this.enableMobileNav) {\n // Need to bind more, console after toolbar is initialized\n this.$('.BRmobileHamburger').click(() => {\n if ($mmenuEl.data('mmenu').getInstance().vars.opened) {\n $mmenuEl.data('mmenu').close();\n } else {\n $mmenuEl.data('mmenu').open();\n this.trigger(\"mobileNavOpen\");\n }\n });\n\n\n const closeMobileMenu = (e) => {\n // Need to close the mobile menu to reset DOM & Style\n // driven by menu plugin\n const width = $( window ).width();\n const mobileMenuIsOpen = $mmenuEl.data('mmenu').getInstance().vars.opened;\n // $brBreakPointMobile: 800px;\n if (mobileMenuIsOpen && (width >= 800)) {\n $mmenuEl.data('mmenu').close ();\n }\n };\n\n window.addEventListener('resize', utils.debounce(closeMobileMenu, 900));\n }\n };\n})(BookReader.prototype.initToolbar);\n\n\nBookReader.prototype.buildToolbarElement = (function (super_) {\n return function () {\n const $el = super_.call(this);\n if (this.enableMobileNav) {\n const escapedTitle = BookReader.util.escapeHTML(this.bookTitle);\n const toolbar = `\n <span class=\"BRmobileHamburgerWrapper\">\n <button class=\"BRmobileHamburger\"></button>\n <span class=\"BRtoolbarMobileTitle\" title=\"${escapedTitle}\">${escapedTitle}</span>\n </span>\n `;\n $el\n .addClass('responsive')\n .prepend($(toolbar));\n }\n return $el;\n };\n})(BookReader.prototype.buildToolbarElement);\n\n/**\n * This method builds the html for the mobile drawer. It can be decorated to\n * extend the default drawer.\n * @return {jqueryElement}\n */\nBookReader.prototype.buildMobileDrawerElement = function() {\n let experimentalHtml = '';\n //builds filters checkbox html\n if (this.enableExperimentalControls) {\n experimentalHtml = `\n <p class=\"DrawerSettingsTitle\">Visual Adjustment</p>\n <div class=\"BRcheckbox-group-filters\">\n `;\n FILTERLIST.forEach( (el, i) => {\n const checkboxHtml = `\n <input type=\"checkbox\" class=\"BRcheckbox-filters\" id=\"filter${i}\">\n <label for=\"filter${i}\" class=\"BRcheckbox-label-filters\">${el.label}</label><br>\n \n `;\n experimentalHtml = experimentalHtml.concat(checkboxHtml);\n });\n experimentalHtml = experimentalHtml.concat(\"</div>\");\n }\n\n\n const settingsSection = `\n <span>\n <span class=\"DrawerIconWrapper\">\n <img class=\"DrawerIcon\" src=\"${`${this.imagesBaseURL}icon_gear.svg`}\" alt=\"settings-icon\"/>\n </span>\n Settings\n </span>\n <div class=DrawerSettingsWrapper>\n <div class=\"DrawerSettingsLayoutWrapper\">\n <button class=\"DrawerLayoutButton one_page_mode\">\n <img src=\"${this.imagesBaseURL}icon_one_page.svg\" alt=\"Single Page\"/>\n <br>\n One Page\n </button>\n <button class=\"DrawerLayoutButton two_page_mode TwoPagesButton\">\n <img src=\"${this.imagesBaseURL}icon_two_pages.svg\" alt=\"Two Pages\"/>\n <br>\n Two Pages\n </button>\n <button class=\"DrawerLayoutButton thumbnail_mode\">\n <img src=\"${this.imagesBaseURL}icon_thumbnails.svg\" alt=\"Thumbnails\"/>\n <br>\n Thumbnails\n </button>\n </div>\n <br>\n <div class=\"DrawerSettingsTitle\">Zoom</div>\n <button class='BRicon zoom_out'></button>\n <button class='BRicon zoom_in'></button>\n <br style=\"clear:both\"><br><br>\n ${experimentalHtml}\n </div>\n `;\n const moreInfo = `\n <span>\n <span class=\"DrawerIconWrapper \">\n <img class=\"DrawerIcon\" src=\"${this.imagesBaseURL}icon_info.svg\" alt=\"info-icon\"/>\n </span>\n About This Book\n </span>\n <div class=\"BRmobileInfo\"></div>\n `;\n const share = `\n <span>\n <span class=\"DrawerIconWrapper\">\n <img class=\"DrawerIcon\" src=\"${this.imagesBaseURL}icon_share.svg\" alt=\"info-share\"/>\n </span>\n Share This Book\n </span>\n <div class=\"BRmobileShare\"></div>\n `;\n const navMenu = `\n <nav id=\"BRmobileMenu\" class=\"BRmobileMenu\">\n <ul>\n <li class=\"BRmobileMenu__settings\">${settingsSection}</li>\n <li class=\"BRmobileMenu__moreInfoRow\">${moreInfo}</li>\n <li class=\"BRmobileMenu__share\">${share}</li>\n </ul>\n </nav>\n `;\n\n const $el = $(navMenu);\n return $el;\n};\n\n/**\n * Mmenu moves itself out side of the root BookReader element, so we need to\n * include it in the scoped $ function.\n */\nBookReader.prototype.$ = (function (super_) {\n return function (arg) {\n let $results = super_.call(this, arg);\n if (this.refs.$mmenu) {\n $results = $results.add(this.refs.$mmenu.find(arg));\n }\n return $results;\n };\n})(BookReader.prototype.$);\n\n/**\n* Dynamically creates styles combining different filters for BookReaders imgs\n* based on filters checkbox\n*/\nconst applyFilters = (drawerEl, br) => {\n let filterStr = \"\";\n\n $('.BRcheckbox-filters').each(\n (i, el) => {\n br.refs.$br.removeClass(\"filter-applied\");\n if ($(el).is(':checked')) {\n br.refs.$br.addClass($(el).attr(\"filter-applied\"));\n filterStr = filterStr + FILTERLIST[i].filter;\n }\n }\n );\n const filtersSheet = $(\"#filtersStyle\")[0] || document.createElement('style');\n filtersSheet.id = \"filtersStyle\";\n filtersSheet.innerHTML = `.BRpagecontainer img {\n filter: ${filterStr};\n -webkit-filter: ${filterStr};}`;\n document.body.appendChild(filtersSheet);\n};\n","/*\t\n * jQuery mmenu navbar addon\n * mmenu.frebsite.nl\n *\n * Copyright (c) Fred Heusschen\n */\n!function(n){var a=\"mmenu\",t=\"navbars\";n[a].addons[t]={setup:function(){var r=this,s=this.opts[t],c=this.conf[t];if(i=n[a].glbl,\"undefined\"!=typeof s){s instanceof Array||(s=[s]);var o={};n.each(s,function(i){var d=s[i];\"boolean\"==typeof d&&d&&(d={}),\"object\"!=typeof d&&(d={}),\"undefined\"==typeof d.content&&(d.content=[\"prev\",\"title\"]),d.content instanceof Array||(d.content=[d.content]),d=n.extend(!0,{},r.opts.navbar,d);var l=d.position,h=d.height;\"number\"!=typeof h&&(h=1),h=Math.min(4,Math.max(1,h)),\"bottom\"!=l&&(l=\"top\"),o[l]||(o[l]=0),o[l]++;var f=n(\"<div />\").addClass(e.navbar+\" \"+e.navbar+\"-\"+l+\" \"+e.navbar+\"-\"+l+\"-\"+o[l]+\" \"+e.navbar+\"-size-\"+h);o[l]+=h-1;for(var u=0,v=0,p=d.content.length;p>v;v++){var b=n[a].addons[t][d.content[v]]||!1;b?u+=b.call(r,f,d,c):(b=d.content[v],b instanceof n||(b=n(d.content[v])),f.append(b))}u+=Math.ceil(f.children().not(\".\"+e.btn).length/h),u>1&&f.addClass(e.navbar+\"-content-\"+u),f.children(\".\"+e.btn).length&&f.addClass(e.hasbtns),f.prependTo(r.$menu)});for(var d in o)r.$menu.addClass(e.hasnavbar+\"-\"+d+\"-\"+o[d])}},add:function(){e=n[a]._c,r=n[a]._d,s=n[a]._e,e.add(\"close hasbtns\")},clickAnchor:function(n,a){}},n[a].configuration[t]={breadcrumbSeparator:\"/\"},n[a].configuration.classNames[t]={};var e,r,s,i}(jQuery),/*\t\n * jQuery mmenu navbar addon breadcrumbs content\n * mmenu.frebsite.nl\n *\n * Copyright (c) Fred Heusschen\n */\nfunction(n){var a=\"mmenu\",t=\"navbars\",e=\"breadcrumbs\";n[a].addons[t][e]=function(t,e,r){var s=n[a]._c,i=n[a]._d;s.add(\"breadcrumbs separator\");var c=n('<span class=\"'+s.breadcrumbs+'\" />').appendTo(t);this.bind(\"init\",function(a){a.removeClass(s.hasnavbar).each(function(){for(var a=[],t=n(this),e=n('<span class=\"'+s.breadcrumbs+'\"></span>'),c=n(this).children().first(),o=!0;c&&c.length;){c.is(\".\"+s.panel)||(c=c.closest(\".\"+s.panel));var d=c.children(\".\"+s.navbar).children(\".\"+s.title).text();a.unshift(o?\"<span>\"+d+\"</span>\":'<a href=\"#'+c.attr(\"id\")+'\">'+d+\"</a>\"),o=!1,c=c.data(i.parent)}e.append(a.join('<span class=\"'+s.separator+'\">'+r.breadcrumbSeparator+\"</span>\")).appendTo(t.children(\".\"+s.navbar))})});var o=function(){c.html(this.$pnls.children(\".\"+s.current).children(\".\"+s.navbar).children(\".\"+s.breadcrumbs).html())};return this.bind(\"openPanel\",o),this.bind(\"init\",o),0}}(jQuery),/*\t\n * jQuery mmenu navbar addon close content\n * mmenu.frebsite.nl\n *\n * Copyright (c) Fred Heusschen\n */\nfunction(n){var a=\"mmenu\",t=\"navbars\",e=\"close\";n[a].addons[t][e]=function(t,e){var r=n[a]._c,s=n[a].glbl,i=n('<a class=\"'+r.close+\" \"+r.btn+'\" href=\"#\" />').appendTo(t),c=function(n){i.attr(\"href\",\"#\"+n.attr(\"id\"))};return c.call(this,s.$page),this.bind(\"setPage\",c),-1}}(jQuery),/*\t\n * jQuery mmenu navbar addon next content\n * mmenu.frebsite.nl\n *\n * Copyright (c) Fred Heusschen\n */\nfunction(n){var a=\"mmenu\",t=\"navbars\",e=\"next\";n[a].addons[t][e]=function(e,r){var s,i,c=n[a]._c,o=n('<a class=\"'+c.next+\" \"+c.btn+'\" href=\"#\" />').appendTo(e),d=function(n){n=n||this.$pnls.children(\".\"+c.current);var a=n.find(\".\"+this.conf.classNames[t].panelNext);s=a.attr(\"href\"),i=a.html(),o[s?\"attr\":\"removeAttr\"](\"href\",s),o[s||i?\"removeClass\":\"addClass\"](c.hidden),o.html(i)};return this.bind(\"openPanel\",d),this.bind(\"init\",function(){d.call(this)}),-1},n[a].configuration.classNames[t].panelNext=\"Next\"}(jQuery),/*\t\n * jQuery mmenu navbar addon prev content\n * mmenu.frebsite.nl\n *\n * Copyright (c) Fred Heusschen\n */\nfunction(n){var a=\"mmenu\",t=\"navbars\",e=\"prev\";n[a].addons[t][e]=function(e,r){var s=n[a]._c,i=n('<a class=\"'+s.prev+\" \"+s.btn+'\" href=\"#\" />').appendTo(e);this.bind(\"init\",function(n){n.removeClass(s.hasnavbar).children(\".\"+s.navbar).addClass(s.hidden)});var c,o,d=function(n){if(n=n||this.$pnls.children(\".\"+s.current),!n.hasClass(s.vertical)){var a=n.find(\".\"+this.conf.classNames[t].panelPrev);a.length||(a=n.children(\".\"+s.navbar).children(\".\"+s.prev)),c=a.attr(\"href\"),o=a.html(),i[c?\"attr\":\"removeAttr\"](\"href\",c),i[c||o?\"removeClass\":\"addClass\"](s.hidden),i.html(o)}};return this.bind(\"openPanel\",d),this.bind(\"init\",function(){d.call(this)}),-1},n[a].configuration.classNames[t].panelPrev=\"Prev\"}(jQuery),/*\t\n * jQuery mmenu navbar addon searchfield content\n * mmenu.frebsite.nl\n *\n * Copyright (c) Fred Heusschen\n */\nfunction(n){var a=\"mmenu\",t=\"navbars\",e=\"searchfield\";n[a].addons[t][e]=function(t,e){var r=n[a]._c,s=n('<div class=\"'+r.search+'\" />').appendTo(t);return\"object\"!=typeof this.opts.searchfield&&(this.opts.searchfield={}),this.opts.searchfield.add=!0,this.opts.searchfield.addTo=s,0}}(jQuery),/*\t\n * jQuery mmenu navbar addon title content\n * mmenu.frebsite.nl\n *\n * Copyright (c) Fred Heusschen\n */\nfunction(n){var a=\"mmenu\",t=\"navbars\",e=\"title\";n[a].addons[t][e]=function(e,r){var s,i,c=n[a]._c,o=n('<a class=\"'+c.title+'\" />').appendTo(e),d=function(n){if(n=n||this.$pnls.children(\".\"+c.current),!n.hasClass(c.vertical)){var a=n.find(\".\"+this.conf.classNames[t].panelTitle);a.length||(a=n.children(\".\"+c.navbar).children(\".\"+c.title)),s=a.attr(\"href\"),i=a.html()||r.title,o[s?\"attr\":\"removeAttr\"](\"href\",s),o[s||i?\"removeClass\":\"addClass\"](c.hidden),o.html(i)}};return this.bind(\"openPanel\",d),this.bind(\"init\",function(n){d.call(this)}),0},n[a].configuration.classNames[t].panelTitle=\"Title\"}(jQuery);","/*\n * jQuery mmenu v5.6.5\n * @requires jQuery 1.7.0 or later\n *\n * mmenu.frebsite.nl\n *\t\n * Copyright (c) Fred Heusschen\n * www.frebsite.nl\n *\n * License: CC-BY-NC-4.0\n * http://creativecommons.org/licenses/by-nc/4.0/\n */\n!function(e){function t(){e[n].glbl||(r={$wndw:e(window),$docu:e(document),$html:e(\"html\"),$body:e(\"body\")},i={},a={},o={},e.each([i,a,o],function(e,t){t.add=function(e){e=e.split(\" \");for(var n=0,s=e.length;s>n;n++)t[e[n]]=t.mm(e[n])}}),i.mm=function(e){return\"mm-\"+e},i.add(\"wrapper menu panels panel nopanel current highest opened subopened navbar hasnavbar title btn prev next listview nolistview inset vertical selected divider spacer hidden fullsubopen\"),i.umm=function(e){return\"mm-\"==e.slice(0,3)&&(e=e.slice(3)),e},a.mm=function(e){return\"mm-\"+e},a.add(\"parent sub\"),o.mm=function(e){return e+\".mm\"},o.add(\"transitionend webkitTransitionEnd click scroll keydown mousedown mouseup touchstart touchmove touchend orientationchange\"),e[n]._c=i,e[n]._d=a,e[n]._e=o,e[n].glbl=r)}var n=\"mmenu\",s=\"5.6.4\";if(!(e[n]&&e[n].version>s)){e[n]=function(e,t,n){this.$menu=e,this._api=[\"bind\",\"init\",\"update\",\"setSelected\",\"getInstance\",\"openPanel\",\"closePanel\",\"closeAllPanels\"],this.opts=t,this.conf=n,this.vars={},this.cbck={},\"function\"==typeof this.___deprecated&&this.___deprecated(),this._initMenu(),this._initAnchors();var s=this.$pnls.children();return this._initAddons(),this.init(s),\"function\"==typeof this.___debug&&this.___debug(),this},e[n].version=s,e[n].addons={},e[n].uniqueId=0,e[n].defaults={extensions:[],navbar:{add:!0,title:\"Menu\",titleLink:\"panel\"},onClick:{setSelected:!0},slidingSubmenus:!0},e[n].configuration={classNames:{divider:\"Divider\",inset:\"Inset\",panel:\"Panel\",selected:\"Selected\",spacer:\"Spacer\",vertical:\"Vertical\"},clone:!1,openingInterval:25,panelNodetype:\"ul, ol, div\",transitionDuration:400},e[n].prototype={init:function(e){e=e.not(\".\"+i.nopanel),e=this._initPanels(e),this.trigger(\"init\",e),this.trigger(\"update\")},update:function(){this.trigger(\"update\")},setSelected:function(e){this.$menu.find(\".\"+i.listview).children().removeClass(i.selected),e.addClass(i.selected),this.trigger(\"setSelected\",e)},openPanel:function(t){var s=t.parent(),a=this;if(s.hasClass(i.vertical)){var o=s.parents(\".\"+i.subopened);if(o.length)return void this.openPanel(o.first());s.addClass(i.opened),this.trigger(\"openPanel\",t),this.trigger(\"openingPanel\",t),this.trigger(\"openedPanel\",t)}else{if(t.hasClass(i.current))return;var r=this.$pnls.children(\".\"+i.panel),l=r.filter(\".\"+i.current);r.removeClass(i.highest).removeClass(i.current).not(t).not(l).not(\".\"+i.vertical).addClass(i.hidden),e[n].support.csstransitions||l.addClass(i.hidden),t.hasClass(i.opened)?t.nextAll(\".\"+i.opened).addClass(i.highest).removeClass(i.opened).removeClass(i.subopened):(t.addClass(i.highest),l.addClass(i.subopened)),t.removeClass(i.hidden).addClass(i.current),a.trigger(\"openPanel\",t),setTimeout(function(){t.removeClass(i.subopened).addClass(i.opened),a.trigger(\"openingPanel\",t),a.__transitionend(t,function(){a.trigger(\"openedPanel\",t)},a.conf.transitionDuration)},this.conf.openingInterval)}},closePanel:function(e){var t=e.parent();t.hasClass(i.vertical)&&(t.removeClass(i.opened),this.trigger(\"closePanel\",e),this.trigger(\"closingPanel\",e),this.trigger(\"closedPanel\",e))},closeAllPanels:function(){this.$menu.find(\".\"+i.listview).children().removeClass(i.selected).filter(\".\"+i.vertical).removeClass(i.opened);var e=this.$pnls.children(\".\"+i.panel),t=e.first();this.$pnls.children(\".\"+i.panel).not(t).removeClass(i.subopened).removeClass(i.opened).removeClass(i.current).removeClass(i.highest).addClass(i.hidden),this.openPanel(t)},togglePanel:function(e){var t=e.parent();t.hasClass(i.vertical)&&this[t.hasClass(i.opened)?\"closePanel\":\"openPanel\"](e)},getInstance:function(){return this},bind:function(e,t){this.cbck[e]=this.cbck[e]||[],this.cbck[e].push(t)},trigger:function(){var e=this,t=Array.prototype.slice.call(arguments),n=t.shift();if(this.cbck[n])for(var s=0,i=this.cbck[n].length;i>s;s++)this.cbck[n][s].apply(e,t)},_initMenu:function(){this.$menu.attr(\"id\",this.$menu.attr(\"id\")||this.__getUniqueId()),this.conf.clone&&(this.$menu=this.$menu.clone(!0),this.$menu.add(this.$menu.find(\"[id]\")).filter(\"[id]\").each(function(){e(this).attr(\"id\",i.mm(e(this).attr(\"id\")))})),this.$menu.contents().each(function(){3==e(this)[0].nodeType&&e(this).remove()}),this.$pnls=e('<div class=\"'+i.panels+'\" />').append(this.$menu.children(this.conf.panelNodetype)).prependTo(this.$menu),this.$menu.parent().addClass(i.wrapper);var t=[i.menu];this.opts.slidingSubmenus||t.push(i.vertical),this.opts.extensions=this.opts.extensions.length?\"mm-\"+this.opts.extensions.join(\" mm-\"):\"\",this.opts.extensions&&t.push(this.opts.extensions),this.$menu.addClass(t.join(\" \"))},_initPanels:function(t){var n=this,s=this.__findAddBack(t,\"ul, ol\");this.__refactorClass(s,this.conf.classNames.inset,\"inset\").addClass(i.nolistview+\" \"+i.nopanel),s.not(\".\"+i.nolistview).addClass(i.listview);var o=this.__findAddBack(t,\".\"+i.listview).children();this.__refactorClass(o,this.conf.classNames.selected,\"selected\"),this.__refactorClass(o,this.conf.classNames.divider,\"divider\"),this.__refactorClass(o,this.conf.classNames.spacer,\"spacer\"),this.__refactorClass(this.__findAddBack(t,\".\"+this.conf.classNames.panel),this.conf.classNames.panel,\"panel\");var r=e(),l=t.add(t.find(\".\"+i.panel)).add(this.__findAddBack(t,\".\"+i.listview).children().children(this.conf.panelNodetype)).not(\".\"+i.nopanel);this.__refactorClass(l,this.conf.classNames.vertical,\"vertical\"),this.opts.slidingSubmenus||l.addClass(i.vertical),l.each(function(){var t=e(this),s=t;t.is(\"ul, ol\")?(t.wrap('<div class=\"'+i.panel+'\" />'),s=t.parent()):s.addClass(i.panel);var a=t.attr(\"id\");t.removeAttr(\"id\"),s.attr(\"id\",a||n.__getUniqueId()),t.hasClass(i.vertical)&&(t.removeClass(n.conf.classNames.vertical),s.add(s.parent()).addClass(i.vertical)),r=r.add(s)});var d=e(\".\"+i.panel,this.$menu);r.each(function(t){var s,o,r=e(this),l=r.parent(),d=l.children(\"a, span\").first();if(l.is(\".\"+i.panels)||(l.data(a.sub,r),r.data(a.parent,l)),l.children(\".\"+i.next).length||l.parent().is(\".\"+i.listview)&&(s=r.attr(\"id\"),o=e('<a class=\"'+i.next+'\" href=\"#'+s+'\" data-target=\"#'+s+'\" />').insertBefore(d),d.is(\"span\")&&o.addClass(i.fullsubopen)),!r.children(\".\"+i.navbar).length&&!l.hasClass(i.vertical)){l.parent().is(\".\"+i.listview)?l=l.closest(\".\"+i.panel):(d=l.closest(\".\"+i.panel).find('a[href=\"#'+r.attr(\"id\")+'\"]').first(),l=d.closest(\".\"+i.panel));var c=!1,p=e('<div class=\"'+i.navbar+'\" />');if(n.opts.navbar.add&&r.addClass(i.hasnavbar),l.length){switch(s=l.attr(\"id\"),n.opts.navbar.titleLink){case\"anchor\":c=d.attr(\"href\");break;case\"panel\":case\"parent\":c=\"#\"+s;break;default:c=!1}p.append('<a class=\"'+i.btn+\" \"+i.prev+'\" href=\"#'+s+'\" data-target=\"#'+s+'\" />').append(e('<a class=\"'+i.title+'\"'+(c?' href=\"'+c+'\"':\"\")+\" />\").text(d.text())).prependTo(r)}else n.opts.navbar.title&&p.append('<a class=\"'+i.title+'\">'+n.opts.navbar.title+\"</a>\").prependTo(r)}});var c=this.__findAddBack(t,\".\"+i.listview).children(\".\"+i.selected).removeClass(i.selected).last().addClass(i.selected);c.add(c.parentsUntil(\".\"+i.menu,\"li\")).filter(\".\"+i.vertical).addClass(i.opened).end().each(function(){e(this).parentsUntil(\".\"+i.menu,\".\"+i.panel).not(\".\"+i.vertical).first().addClass(i.opened).parentsUntil(\".\"+i.menu,\".\"+i.panel).not(\".\"+i.vertical).first().addClass(i.opened).addClass(i.subopened)}),c.children(\".\"+i.panel).not(\".\"+i.vertical).addClass(i.opened).parentsUntil(\".\"+i.menu,\".\"+i.panel).not(\".\"+i.vertical).first().addClass(i.opened).addClass(i.subopened);var p=d.filter(\".\"+i.opened);return p.length||(p=r.first()),p.addClass(i.opened).last().addClass(i.current),r.not(\".\"+i.vertical).not(p.last()).addClass(i.hidden).end().filter(function(){return!e(this).parent().hasClass(i.panels)}).appendTo(this.$pnls),r},_initAnchors:function(){var t=this;r.$body.on(o.click+\"-oncanvas\",\"a[href]\",function(s){var a=e(this),o=!1,r=t.$menu.find(a).length;for(var l in e[n].addons)if(e[n].addons[l].clickAnchor.call(t,a,r)){o=!0;break}var d=a.attr(\"href\");if(!o&&r&&d.length>1&&\"#\"==d.slice(0,1))try{var c=e(d,t.$menu);c.is(\".\"+i.panel)&&(o=!0,t[a.parent().hasClass(i.vertical)?\"togglePanel\":\"openPanel\"](c))}catch(p){}if(o&&s.preventDefault(),!o&&r&&a.is(\".\"+i.listview+\" > li > a\")&&!a.is('[rel=\"external\"]')&&!a.is('[target=\"_blank\"]')){t.__valueOrFn(t.opts.onClick.setSelected,a)&&t.setSelected(e(s.target).parent());var h=t.__valueOrFn(t.opts.onClick.preventDefault,a,\"#\"==d.slice(0,1));h&&s.preventDefault(),t.__valueOrFn(t.opts.onClick.close,a,h)&&t.close()}})},_initAddons:function(){var t;for(t in e[n].addons)e[n].addons[t].add.call(this),e[n].addons[t].add=function(){};for(t in e[n].addons)e[n].addons[t].setup.call(this)},_getOriginalMenuId:function(){var e=this.$menu.attr(\"id\");return e&&e.length&&this.conf.clone&&(e=i.umm(e)),e},__api:function(){var t=this,n={};return e.each(this._api,function(e){var s=this;n[s]=function(){var e=t[s].apply(t,arguments);return\"undefined\"==typeof e?n:e}}),n},__valueOrFn:function(e,t,n){return\"function\"==typeof e?e.call(t[0]):\"undefined\"==typeof e&&\"undefined\"!=typeof n?n:e},__refactorClass:function(e,t,n){return e.filter(\".\"+t).removeClass(t).addClass(i[n])},__findAddBack:function(e,t){return e.find(t).add(e.filter(t))},__filterListItems:function(e){return e.not(\".\"+i.divider).not(\".\"+i.hidden)},__transitionend:function(e,t,n){var s=!1,i=function(){s||t.call(e[0]),s=!0};e.one(o.transitionend,i),e.one(o.webkitTransitionEnd,i),setTimeout(i,1.1*n)},__getUniqueId:function(){return i.mm(e[n].uniqueId++)}},e.fn[n]=function(s,i){return t(),s=e.extend(!0,{},e[n].defaults,s),i=e.extend(!0,{},e[n].configuration,i),this.each(function(){var t=e(this);if(!t.data(n)){var a=new e[n](t,s,i);a.$menu.data(n,a.__api())}})},e[n].support={touch:\"ontouchstart\"in window||navigator.msMaxTouchPoints||!1,csstransitions:function(){if(\"undefined\"!=typeof Modernizr&&\"undefined\"!=typeof Modernizr.csstransitions)return Modernizr.csstransitions;var e=document.body||document.documentElement,t=e.style,n=\"transition\";if(\"string\"==typeof t[n])return!0;var s=[\"Moz\",\"webkit\",\"Webkit\",\"Khtml\",\"O\",\"ms\"];n=n.charAt(0).toUpperCase()+n.substr(1);for(var i=0;i<s.length;i++)if(\"string\"==typeof t[s[i]+n])return!0;return!1}()};var i,a,o,r}}(jQuery),/*\t\n * jQuery mmenu offCanvas addon\n * mmenu.frebsite.nl\n *\n * Copyright (c) Fred Heusschen\n */\nfunction(e){var t=\"mmenu\",n=\"offCanvas\";e[t].addons[n]={setup:function(){if(this.opts[n]){var i=this.opts[n],a=this.conf[n];o=e[t].glbl,this._api=e.merge(this._api,[\"open\",\"close\",\"setPage\"]),(\"top\"==i.position||\"bottom\"==i.position)&&(i.zposition=\"front\"),\"string\"!=typeof a.pageSelector&&(a.pageSelector=\"> \"+a.pageNodetype),o.$allMenus=(o.$allMenus||e()).add(this.$menu),this.vars.opened=!1;var r=[s.offcanvas];\"left\"!=i.position&&r.push(s.mm(i.position)),\"back\"!=i.zposition&&r.push(s.mm(i.zposition)),this.$menu.addClass(r.join(\" \")).parent().removeClass(s.wrapper),this.setPage(o.$page),this._initBlocker(),this[\"_initWindow_\"+n](),this.$menu[a.menuInjectMethod+\"To\"](a.menuWrapperSelector);var l=window.location.hash;if(l){var d=this._getOriginalMenuId();d&&d==l.slice(1)&&this.open()}}},add:function(){s=e[t]._c,i=e[t]._d,a=e[t]._e,s.add(\"offcanvas slideout blocking modal background opening blocker page\"),i.add(\"style\"),a.add(\"resize\")},clickAnchor:function(e,t){if(!this.opts[n])return!1;var s=this._getOriginalMenuId();if(s&&e.is('[href=\"#'+s+'\"]'))return this.open(),!0;if(o.$page)return s=o.$page.first().attr(\"id\"),s&&e.is('[href=\"#'+s+'\"]')?(this.close(),!0):!1}},e[t].defaults[n]={position:\"left\",zposition:\"back\",blockUI:!0,moveBackground:!0},e[t].configuration[n]={pageNodetype:\"div\",pageSelector:null,noPageSelector:[],wrapPageIfNeeded:!0,menuWrapperSelector:\"body\",menuInjectMethod:\"prepend\"},e[t].prototype.open=function(){if(!this.vars.opened){var e=this;this._openSetup(),setTimeout(function(){e._openFinish()},this.conf.openingInterval),this.trigger(\"open\")}},e[t].prototype._openSetup=function(){var t=this,r=this.opts[n];this.closeAllOthers(),o.$page.each(function(){e(this).data(i.style,e(this).attr(\"style\")||\"\")}),o.$wndw.trigger(a.resize+\"-\"+n,[!0]);var l=[s.opened];r.blockUI&&l.push(s.blocking),\"modal\"==r.blockUI&&l.push(s.modal),r.moveBackground&&l.push(s.background),\"left\"!=r.position&&l.push(s.mm(this.opts[n].position)),\"back\"!=r.zposition&&l.push(s.mm(this.opts[n].zposition)),this.opts.extensions&&l.push(this.opts.extensions),o.$html.addClass(l.join(\" \")),setTimeout(function(){t.vars.opened=!0},this.conf.openingInterval),this.$menu.addClass(s.current+\" \"+s.opened)},e[t].prototype._openFinish=function(){var e=this;this.__transitionend(o.$page.first(),function(){e.trigger(\"opened\")},this.conf.transitionDuration),o.$html.addClass(s.opening),this.trigger(\"opening\")},e[t].prototype.close=function(){if(this.vars.opened){var t=this;this.__transitionend(o.$page.first(),function(){t.$menu.removeClass(s.current).removeClass(s.opened),o.$html.removeClass(s.opened).removeClass(s.blocking).removeClass(s.modal).removeClass(s.background).removeClass(s.mm(t.opts[n].position)).removeClass(s.mm(t.opts[n].zposition)),t.opts.extensions&&o.$html.removeClass(t.opts.extensions),o.$page.each(function(){e(this).attr(\"style\",e(this).data(i.style))}),t.vars.opened=!1,t.trigger(\"closed\")},this.conf.transitionDuration),o.$html.removeClass(s.opening),this.trigger(\"close\"),this.trigger(\"closing\")}},e[t].prototype.closeAllOthers=function(){o.$allMenus.not(this.$menu).each(function(){var n=e(this).data(t);n&&n.close&&n.close()})},e[t].prototype.setPage=function(t){var i=this,a=this.conf[n];t&&t.length||(t=o.$body.find(a.pageSelector),a.noPageSelector.length&&(t=t.not(a.noPageSelector.join(\", \"))),t.length>1&&a.wrapPageIfNeeded&&(t=t.wrapAll(\"<\"+this.conf[n].pageNodetype+\" />\").parent())),t.each(function(){e(this).attr(\"id\",e(this).attr(\"id\")||i.__getUniqueId())}),t.addClass(s.page+\" \"+s.slideout),o.$page=t,this.trigger(\"setPage\",t)},e[t].prototype[\"_initWindow_\"+n]=function(){o.$wndw.off(a.keydown+\"-\"+n).on(a.keydown+\"-\"+n,function(e){return o.$html.hasClass(s.opened)&&9==e.keyCode?(e.preventDefault(),!1):void 0});var e=0;o.$wndw.off(a.resize+\"-\"+n).on(a.resize+\"-\"+n,function(t,n){if(1==o.$page.length&&(n||o.$html.hasClass(s.opened))){var i=o.$wndw.height();(n||i!=e)&&(e=i,o.$page.css(\"minHeight\",i))}})},e[t].prototype._initBlocker=function(){var t=this;this.opts[n].blockUI&&(o.$blck||(o.$blck=e('<div id=\"'+s.blocker+'\" class=\"'+s.slideout+'\" />')),o.$blck.appendTo(o.$body).off(a.touchstart+\"-\"+n+\" \"+a.touchmove+\"-\"+n).on(a.touchstart+\"-\"+n+\" \"+a.touchmove+\"-\"+n,function(e){e.preventDefault(),e.stopPropagation(),o.$blck.trigger(a.mousedown+\"-\"+n)}).off(a.mousedown+\"-\"+n).on(a.mousedown+\"-\"+n,function(e){e.preventDefault(),o.$html.hasClass(s.modal)||(t.closeAllOthers(),t.close())}))};var s,i,a,o}(jQuery),/*\t\n * jQuery mmenu scrollBugFix addon\n * mmenu.frebsite.nl\n *\n * Copyright (c) Fred Heusschen\n */\nfunction(e){var t=\"mmenu\",n=\"scrollBugFix\";e[t].addons[n]={setup:function(){var i=this,r=this.opts[n];this.conf[n];if(o=e[t].glbl,e[t].support.touch&&this.opts.offCanvas&&this.opts.offCanvas.blockUI&&(\"boolean\"==typeof r&&(r={fix:r}),\"object\"!=typeof r&&(r={}),r=this.opts[n]=e.extend(!0,{},e[t].defaults[n],r),r.fix)){var l=this.$menu.attr(\"id\"),d=!1;this.bind(\"opening\",function(){this.$pnls.children(\".\"+s.current).scrollTop(0)}),o.$docu.on(a.touchmove,function(e){i.vars.opened&&e.preventDefault()}),o.$body.on(a.touchstart,\"#\"+l+\"> .\"+s.panels+\"> .\"+s.current,function(e){i.vars.opened&&(d||(d=!0,0===e.currentTarget.scrollTop?e.currentTarget.scrollTop=1:e.currentTarget.scrollHeight===e.currentTarget.scrollTop+e.currentTarget.offsetHeight&&(e.currentTarget.scrollTop-=1),d=!1))}).on(a.touchmove,\"#\"+l+\"> .\"+s.panels+\"> .\"+s.current,function(t){i.vars.opened&&e(this)[0].scrollHeight>e(this).innerHeight()&&t.stopPropagation()}),o.$wndw.on(a.orientationchange,function(){i.$pnls.children(\".\"+s.current).scrollTop(0).css({\"-webkit-overflow-scrolling\":\"auto\"}).css({\"-webkit-overflow-scrolling\":\"touch\"})})}},add:function(){s=e[t]._c,i=e[t]._d,a=e[t]._e},clickAnchor:function(e,t){}},e[t].defaults[n]={fix:!0};var s,i,a,o}(jQuery);"],"names":["super_","FILTERLIST","filter","label","jQuery","extend","BookReader","defaultOptions","enableMobileNav","mobileNavTitle","mobileNavFullscreenOnly","prototype","setup","options","call","this","refs","$mmenu","initToolbar","mode","ui","$mmenuEl","$drawerEl","buildMobileDrawerElement","$br","append","buildInfoDiv","$","buildShareDiv","mmenu","navbars","navbar","add","title","titleLink","extensions","offCanvas","wrapPageIfNeeded","zposition","pageSelector","el","$BRpageviewField","find","data","bind","length","val","window","location","href","click","applyFilters","switchMode","constMode1up","constMode2up","constModeThumb","document","body","addClass","apply","arguments","getInstance","vars","opened","close","open","trigger","closeMobileMenu","e","width","addEventListener","utils","buildToolbarElement","$el","escapedTitle","util","escapeHTML","bookTitle","toolbar","prepend","experimentalHtml","enableExperimentalControls","forEach","i","checkboxHtml","concat","settingsSection","imagesBaseURL","moreInfo","share","navMenu","arg","$results","drawerEl","br","filterStr","each","removeClass","is","attr","filtersSheet","createElement","id","innerHTML","appendChild","n","a","t","addons","r","s","opts","c","conf","glbl","Array","o","d","content","l","position","h","height","Math","min","max","f","u","v","p","b","ceil","children","not","btn","hasbtns","prependTo","$menu","hasnavbar","_c","_d","_e","clickAnchor","configuration","breadcrumbSeparator","classNames","breadcrumbs","appendTo","first","panel","closest","text","unshift","parent","join","separator","html","$pnls","current","$page","next","panelNext","hidden","prev","hasClass","vertical","panelPrev","search","searchfield","addTo","panelTitle","$wndw","$docu","$html","$body","split","mm","umm","slice","version","_api","cbck","___deprecated","_initMenu","_initAnchors","_initAddons","init","___debug","uniqueId","defaults","onClick","setSelected","slidingSubmenus","divider","inset","selected","spacer","clone","openingInterval","panelNodetype","transitionDuration","nopanel","_initPanels","update","listview","openPanel","parents","subopened","highest","support","csstransitions","nextAll","setTimeout","__transitionend","closePanel","closeAllPanels","togglePanel","push","shift","__getUniqueId","contents","nodeType","remove","panels","wrapper","menu","__findAddBack","__refactorClass","nolistview","wrap","removeAttr","sub","insertBefore","fullsubopen","last","parentsUntil","end","on","preventDefault","__valueOrFn","target","_getOriginalMenuId","__api","__filterListItems","one","transitionend","webkitTransitionEnd","fn","touch","navigator","msMaxTouchPoints","Modernizr","documentElement","style","charAt","toUpperCase","substr","merge","pageNodetype","$allMenus","offcanvas","setPage","_initBlocker","menuInjectMethod","menuWrapperSelector","hash","blockUI","moveBackground","noPageSelector","_openSetup","_openFinish","closeAllOthers","resize","blocking","modal","background","opening","wrapAll","page","slideout","off","keydown","keyCode","css","$blck","blocker","touchstart","touchmove","stopPropagation","mousedown","fix","scrollTop","currentTarget","scrollHeight","offsetHeight","innerHeight","orientationchange"],"sourceRoot":""}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[951],{5842:function(e,n,t){"use strict";var o={};function r(e){return e&&decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null}function a(e,n,t,o,r,a){return document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(n)+(t?"; expires=".concat(t.toUTCString()):"")+(r?"; domain=".concat(r):"")+(o?"; path=".concat(o):"")+(a?"; secure":""),!0}function i(e,n,t){return!!hasItem(e)&&(document.cookie=encodeURIComponent(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT"+(t?"; domain=".concat(t):"")+(n?"; path=".concat(n):""),!0)}t.r(o),t.d(o,{getItem:function(){return r},removeItem:function(){return i},setItem:function(){return a}}),t(4916),t(4723),t(5306),t(4603),t(9714);var c,u=t(3609);BookReader.docCookies=o,u.extend(BookReader.defaultOptions,{enablePageResume:!0,resumeCookiePath:null}),BookReader.prototype.init=(c=BookReader.prototype.init,function(){var e=this;c.call(this),this.options.enablePageResume&&this.bind(BookReader.eventNames.fragmentChange,(function(){var n=e.paramsFromCurrent();e.updateResumeValue(n.index)}))}),BookReader.prototype.getResumeValue=function(){var e=BookReader.docCookies.getItem("br-resume");return null!==e?parseInt(e):null},BookReader.prototype.getCookiePath=function(e){return e.match(".+?(?=/page/|/mode/|$)")[0]},BookReader.prototype.updateResumeValue=function(e,n){var t=new Date(+new Date+12096e5),o=this.options.resumeCookiePath||this.getCookiePath(window.location.pathname);BookReader.docCookies.setItem(n||"br-resume",e,t,o,null,!1)}},4603:function(e,n,t){var o=t(9781),r=t(7854),a=t(4705),i=t(9587),c=t(8880),u=t(3070).f,s=t(8006).f,l=t(7850),f=t(1340),d=t(7066),p=t(2999),h=t(1320),m=t(7293),g=t(6656),k=t(9909).enforce,v=t(6340),R=t(5112),C=t(9441),x=t(8173),I=R("match"),w=r.RegExp,y=w.prototype,b=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,B=/a/g,E=/a/g,P=new w(B)!==B,U=p.UNSUPPORTED_Y;if(a("RegExp",o&&(!P||U||C||x||m((function(){return E[I]=!1,w(B)!=B||w(E)==E||"/a/i"!=w(B,"i")}))))){for(var A=function(e,n){var t,o,r,a,u,s,p=this instanceof A,h=l(e),m=void 0===n,v=[],R=e;if(!p&&h&&m&&e.constructor===A)return e;if((h||e instanceof A)&&(e=e.source,m&&(n="flags"in R?R.flags:d.call(R))),e=void 0===e?"":f(e),n=void 0===n?"":f(n),R=e,C&&"dotAll"in B&&(o=!!n&&n.indexOf("s")>-1)&&(n=n.replace(/s/g,"")),t=n,U&&"sticky"in B&&(r=!!n&&n.indexOf("y")>-1)&&(n=n.replace(/y/g,"")),x&&(e=(a=function(e){for(var n,t=e.length,o=0,r="",a=[],i={},c=!1,u=!1,s=0,l="";o<=t;o++){if("\\"===(n=e.charAt(o)))n+=e.charAt(++o);else if("]"===n)c=!1;else if(!c)switch(!0){case"["===n:c=!0;break;case"("===n:b.test(e.slice(o+1))&&(o+=2,u=!0),r+=n,s++;continue;case">"===n&&u:if(""===l||g(i,l))throw new SyntaxError("Invalid capture group name");i[l]=!0,a.push([l,s]),u=!1,l="";continue}u?l+=n:r+=n}return[r,a]}(e))[0],v=a[1]),u=i(w(e,n),p?this:y,A),(o||r||v.length)&&(s=k(u),o&&(s.dotAll=!0,s.raw=A(function(e){for(var n,t=e.length,o=0,r="",a=!1;o<=t;o++)"\\"!==(n=e.charAt(o))?a||"."!==n?("["===n?a=!0:"]"===n&&(a=!1),r+=n):r+="[\\s\\S]":r+=n+e.charAt(++o);return r}(e),t)),r&&(s.sticky=!0),v.length&&(s.groups=v)),e!==R)try{c(u,"source",""===R?"(?:)":R)}catch(e){}return u},$=function(e){e in A||u(A,e,{configurable:!0,get:function(){return w[e]},set:function(n){w[e]=n}})},_=s(w),O=0;_.length>O;)$(_[O++]);y.constructor=A,A.prototype=y,h(r,"RegExp",A)}v("RegExp")},4723:function(e,n,t){"use strict";var o=t(7007),r=t(9670),a=t(7466),i=t(1340),c=t(4488),u=t(1530),s=t(7651);o("match",(function(e,n,t){return[function(n){var t=c(this),o=null==n?void 0:n[e];return void 0!==o?o.call(n,t):new RegExp(n)[e](i(t))},function(e){var o=r(this),c=i(e),l=t(n,o,c);if(l.done)return l.value;if(!o.global)return s(o,c);var f=o.unicode;o.lastIndex=0;for(var d,p=[],h=0;null!==(d=s(o,c));){var m=i(d[0]);p[h]=m,""===m&&(o.lastIndex=u(c,a(o.lastIndex),f)),h++}return 0===h?null:p}]}))}},function(e){e(e.s=5842)}]);
|
2
|
+
//# sourceMappingURL=plugin.resume.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"plugins/plugin.resume.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/util/docCookies.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.resume.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.regexp.constructor.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match.js"],"sourcesContent":["/**\n * Helper module use to get, set and remove item from cookie\n *\n * See more:\n * https://developer.mozilla.org/en-US/docs/Web/API/document.cookie\n * https://developer.mozilla.org/User:fusionchess\n * https://github.com/madmurphy/cookies.js\n * This framework is released under the GNU Public License, version 3 or later.\n * http://www.gnu.org/licenses/gpl-3.0-standalone.html\n */\n\n/**\n * Get specific key's value stored in cookie\n *\n * @param {string} sKey\n *\n * @returns {string|null}\n */\nexport function getItem(sKey) {\n if (!sKey) return null;\n\n return decodeURIComponent(\n // eslint-disable-next-line no-useless-escape\n document.cookie.replace(new RegExp('(?:(?:^|.*;)\\\\s*' + encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') + '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'), '$1')) || null;\n}\n\n/**\n * Set specific key's value in cookie\n *\n * @param {string} sKey cookie name\n * @param {string} sValue cookie value\n * @param {string} [vEnd] expire|max-age\n * @param {string} [sPath] path of current item\n * @param {string} [sDomain] domain name\n * @param {boolean} [bSecure]\n *\n * @returns {true}\n */\nexport function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {\n document.cookie = encodeURIComponent(sKey) + '=' + encodeURIComponent(sValue)\n + (vEnd ? `; expires=${vEnd.toUTCString()}` : '')\n + (sDomain ? `; domain=${sDomain}` : '')\n + (sPath ? `; path=${sPath}` : '')\n + (bSecure ? `; secure` : '');\n\n return true;\n}\n\n/**\n * BROKEN Remove specific key's value from cookie\n * @fixme hasItem isn't even implemented! This will always error.\n * @param {string} sKey cookie name\n * @param {string} [sPath] path of current item\n * @param {string} [sDomain]\n *\n * @returns {boolean}\n */\nexport function removeItem(sKey, sPath, sDomain) {\n // eslint-disable-next-line\n if (!hasItem(sKey)) return false;\n\n document.cookie = encodeURIComponent(sKey) + `=; expires=Thu, 01 Jan 1970 00:00:00 GMT`\n + (sDomain ? `; domain=${sDomain}` : '')\n + (sPath ? `; path=${sPath}` : '');\n\n return true;\n}\n","import * as docCookies from '../util/docCookies.js';\n\n/* global BookReader */\n\n/** @deprecated Exposed for backward compatibility */\nBookReader.docCookies = docCookies;\n\n/**\n * Plugin to remember the current page number in a cookie\n */\njQuery.extend(BookReader.defaultOptions, {\n enablePageResume: true,\n /** @type {string|null} eg '/', '/details/id' */\n resumeCookiePath: null,\n});\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n super_.call(this);\n if (this.options.enablePageResume) {\n this.bind(BookReader.eventNames.fragmentChange, () => {\n const params = this.paramsFromCurrent();\n this.updateResumeValue(params.index);\n });\n }\n };\n})(BookReader.prototype.init);\n\n/**\n * Gets page resume value, for remembering reader's page\n * Can be overridden for different implementation\n *\n * @return {number|null}\n */\nBookReader.prototype.getResumeValue = function() {\n const val = BookReader.docCookies.getItem('br-resume');\n if (val !== null) return parseInt(val);\n else return null;\n};\n\n/**\n * Return cookie path using pathname up to /page/... or /mode/...\n * using window.location.pathname for urlPathPart:\n * - matches encoding\n * - ignores querystring part\n * - ignores fragment part (after #)\n * @param {string} urlPathPart - window.location.pathname\n */\nBookReader.prototype.getCookiePath = function(urlPathPart) {\n return urlPathPart.match('.+?(?=/page/|/mode/|$)')[0];\n};\n\n/**\n * Sets page resume value, for remembering reader's page\n * Can be overridden for different implementation\n *\n * @param {Number} index leaf index\n * @param {string} [cookieName]\n */\nBookReader.prototype.updateResumeValue = function(index, cookieName) {\n const ttl = new Date(+new Date + 12096e5); // 2 weeks\n // For multiple files in item, leave resumeCookiePath blank\n // It's likely we can remove resumeCookiePath using getCookiePath()\n const path = this.options.resumeCookiePath\n || this.getCookiePath(window.location.pathname);\n BookReader.docCookies.setItem(cookieName || 'br-resume', index, ttl, path, null, false);\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 createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\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 toString = require('../internals/to-string');\nvar getFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\n// TODO: Use only propper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\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 BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || 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\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = string.charAt(index);\n if (chr === '\\\\') {\n result += chr + string.charAt(++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = {};\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = string.charAt(index);\n if (chr === '\\\\') {\n chr = chr + string.charAt(++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n if (IS_NCG.test(string.slice(index + 1))) {\n index += 2;\n ncg = true;\n }\n result += chr;\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || has(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named.push([groupname, groupid]);\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_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 groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || pattern instanceof RegExpWrapper) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags.call(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && flags.indexOf('s') > -1;\n if (dotAll) flags = flags.replace(/s/g, '');\n }\n\n rawFlags = flags;\n\n if (UNSUPPORTED_Y && 'sticky' in re1) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\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\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxy(keys[index++]);\n }\n\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","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n"],"names":["getItem","sKey","decodeURIComponent","document","cookie","replace","RegExp","encodeURIComponent","setItem","sValue","vEnd","sPath","sDomain","bSecure","toUTCString","removeItem","hasItem","super_","BookReader","docCookies","jQuery","extend","defaultOptions","enablePageResume","resumeCookiePath","prototype","init","call","this","options","bind","eventNames","fragmentChange","params","paramsFromCurrent","updateResumeValue","index","getResumeValue","val","parseInt","getCookiePath","urlPathPart","match","cookieName","ttl","Date","path","window","location","pathname","DESCRIPTORS","global","isForced","inheritIfRequired","createNonEnumerableProperty","defineProperty","getOwnPropertyNames","isRegExp","toString","getFlags","stickyHelpers","redefine","fails","has","enforceInternalState","setSpecies","wellKnownSymbol","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","MATCH","NativeRegExp","RegExpPrototype","IS_NCG","re1","re2","CORRECT_NEW","UNSUPPORTED_Y","RegExpWrapper","pattern","flags","rawFlags","dotAll","sticky","handled","result","state","thisIsRegExp","patternIsRegExp","flagsAreUndefined","undefined","groups","rawPattern","constructor","source","indexOf","string","chr","length","named","names","brackets","ncg","groupid","groupname","charAt","test","slice","SyntaxError","push","handleNCG","raw","handleDotAll","error","proxy","key","configurable","get","set","it","keys","fixRegExpWellKnownSymbolLogic","anObject","toLength","requireObjectCoercible","advanceStringIndex","regExpExec","nativeMatch","maybeCallNative","regexp","O","matcher","rx","S","res","done","value","fullUnicode","unicode","lastIndex","A","n","matchStr"],"sourceRoot":""}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[73],{8011:function(e,t,r){"use strict";r(5666),r(4916),r(4765),r(9826),r(5306),r(2222),r(9601),r(9720),r(4747),r(1539),r(8674),r(6992),r(8783),r(3948),r(285),r(7042),r(8309),r(1038),r(2526),r(1817),r(2165);var n=r(9860),a=(r(4603),r(9714),r(1249),r(3609));function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var s,o=function(){function e(t){var r=t.br,n=t.searchCancelledCallback,a=void 0===n?function(){}:n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.br=r,this.matcher=new RegExp("{{{(.+?)}}}","g"),this.matches=[],this.cacheDOMElements(),this.bindEvents(),this.cancelSearch=a}var t,r;return t=e,(r=[{key:"cacheDOMElements",value:function(){this.dom={},this.dom.toolbarSearch=this.buildToolbarSearch()}},{key:"setQuery",value:function(e){this.br.$('[name="query"]').val(e)}},{key:"emptyMatches",value:function(){this.matches=[]}},{key:"removeResultPins",value:function(){this.br.$(".BRnavpos .BRsearch").remove()}},{key:"clearSearchFieldAndResults",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.br.removeSearchResults(),this.removeResultPins(),this.emptyMatches(),this.setQuery(""),this.teardownSearchNavigation(),e&&this.br.trigger("SearchResultsCleared")}},{key:"toggleSidebar",value:function(){this.br.trigger("ToggleSearchMenu")}},{key:"renderSearchNavigation",value:function(){var e="BRsearch-navigation";a(".BRnav").before('\n <div class="'.concat(e,'">\n <button class="toggle-sidebar">\n <h4>\n <span class="icon icon-search"></span> Results\n </h4>\n </button>\n <div class="pagination">\n <button class="prev" title="Previous result"><span class="icon icon-chevron hflip"></span></button>\n <span data-id="resultsCount">').concat(this.resultsPosition(),'</span>\n <button class="next" title="Next result"><span class="icon icon-chevron"></button>\n </div>\n <button class="clear" title="Clear search results">\n <span class="icon icon-close"></span>\n </button>\n </div>\n ')),this.dom.searchNavigation=a(".".concat(e))}},{key:"resultsPosition",value:function(){var e="".concat(this.matches.length," result").concat(1===this.matches.length?"":"s");return~this.currentMatchIndex&&(e="".concat(this.currentMatchIndex+1," / ").concat(this.matches.length)),e}},{key:"bindSearchNavigationEvents",value:function(){if(this.dom.searchNavigation){var e="searchNavigation";this.dom.searchNavigation.on("click.".concat(e),".clear",this.clearSearchFieldAndResults.bind(this)).on("click.".concat(e),".prev",this.showPrevResult.bind(this)).on("click.".concat(e),".next",this.showNextResult.bind(this)).on("click.".concat(e),".toggle-sidebar",this.toggleSidebar.bind(this)).on("click.".concat(e),!1)}}},{key:"showPrevResult",value:function(){0!==this.currentMatchIndex&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((function(e,t,r){return t[0]>r}))+1),this.br.$(".BRnavline .BRsearch").eq(--this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}},{key:"showNextResult",value:function(){this.currentMatchIndex+1!==this.matches.length&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((function(e,t,r){return e[e.length-1]>r}))-1),this.br.$(".BRnavline .BRsearch").eq(++this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}},{key:"getClosestMatchIndex",value:function(e){var t=function t(r,n){if(1===r.length)return r[0];var a=r.slice(0,r.length/2),i=r.slice(r.length/2);return t(e(a,i,n)?a:i,n)}(this.matches.map((function(e){return e.par[0].page})),this.br.currentIndex()+1);return this.matches.indexOf(this.matches.find((function(e){return e.par[0].page===t})))}},{key:"updateResultsPosition",value:function(){this.dom.searchNavigation.find("[data-id=resultsCount]").text(this.resultsPosition())}},{key:"updateSearchNavigationButtons",value:function(){this.dom.searchNavigation.find(".prev").attr("disabled",!this.currentMatchIndex),this.dom.searchNavigation.find(".next").attr("disabled",this.currentMatchIndex+1===this.matches.length)}},{key:"teardownSearchNavigation",value:function(){this.dom.searchNavigation||(this.dom.searchNavigation=a(".BRsearch-navigation")),this.dom.searchNavigation.length&&(this.dom.searchNavigation.off(".searchNavigation").remove(),this.dom.searchNavigation=null,this.br.resize())}},{key:"setCurrentMatchIndex",value:function(){var e;this.br.mode!==this.br.constModeThumb?(e=this.br.mode===this.br.constMode2up?this.find2upMatchingSearchResult():this.find1upMatchingSearchResult(),this.currentMatchIndex=this.matches.indexOf(e)):this.currentMatchIndex=-1}},{key:"find1upMatchingSearchResult",value:function(){var e=this;return this.matches.find((function(t){return e.br.currentIndex()===t.par[0].page-1}))}},{key:"find2upMatchingSearchResult",value:function(){var e=this;return this.matches.find((function(t){return e.br._isIndexDisplayed(t.par[0].page-1)}))}},{key:"updateSearchNavigation",value:function(){this.matches.length&&(this.setCurrentMatchIndex(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}},{key:"togglePinsFor",value:function(e){var t=e?"visible":"hidden";this.br.refs.$BRfooter.find(".BRsearch").css({visibility:t})}},{key:"buildToolbarSearch",value:function(){var e=document.createElement("span");return e.classList.add("BRtoolbarSection","BRtoolbarSectionSearch"),e.innerHTML='\n <form class="BRbooksearch desktop">\n <input type="search" name="query" class="BRsearchInput" value="" placeholder="Search inside"/>\n <button type="submit" class="BRsearchSubmit">\n <img src="'.concat(this.br.imagesBaseURL,'icon_search_button.svg" />\n </button>\n </form>\n '),e}},{key:"renderPins",value:function(e){var t=this;e.forEach((function(e){var r=e.text,n=t.br.leafNumToIndex(e.par[0].page),i=t.br.getPageNum(n),s=t.br.constructor.util.cssPercentage(n,t.br.getNumLeafs()-1),o=r.replace(t.matcher,"<b>$1</b>"),c="";r.length>100&&(c=r.replace(/^(.{100}[^\s]*).*/,"$1").replace(t.matcher,"<b>$1</b>")+"..."),a("<div>").addClass("BRsearch").css({left:s}).attr("title","Search result").append('\n <div class="BRquery">\n <div>'.concat(c||o,"</div>\n <div>").concat("Page"," ").concat(i,"</div>\n </div>\n ")).data({pageIndex:n}).appendTo(t.br.$(".BRnavline")).hover((function(e){var t=e.currentTarget,r=t.querySelector(".BRquery"),n=r.getBoundingClientRect(),i=t.getBoundingClientRect(),s=2*parseInt(getComputedStyle(r).paddingLeft);n.x-s<0&&r.style.setProperty("transform","translateX(-".concat(i.left-s,"px)")),a(".BRsearch,.BRchapter").removeClass("front"),a(e.target).addClass("front")}),(function(e){return a(e.target).removeClass("front")})).click(function(e){this.br._searchPluginGoToResult(+a(e.target).data("pageIndex"))}.bind(t))}))}},{key:"toggleSearchPending",value:function(e){var t=this;e?this.br.showProgressPopup("Search results will appear below...",(function(){return t.progressPopupClosed()})):this.br.removeProgressPopup()}},{key:"progressPopupClosed",value:function(){this.toggleSearchPending(),this.cancelSearch()}},{key:"renderErrorModal",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t="".concat(e?"":"The text may still be processing. ","Please try again.");this.renderModalMessage("\n Sorry, there was an error with your search.\n <br />\n ".concat(t,"\n ")),this.delayModalRemovalFor(4e3)}},{key:"renderBookNotIndexedModal",value:function(){this.renderModalMessage("\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n "),this.delayModalRemovalFor(5e3)}},{key:"renderResultsEmptyModal",value:function(){this.renderModalMessage("No matches were found."),this.delayModalRemovalFor(2e3)}},{key:"renderModalMessage",value:function(e){var t=document.createElement("div");t.classList.add("BRprogresspopup","search_modal"),t.innerHTML=e,document.querySelector(this.br.el).append(t)}},{key:"delayModalRemovalFor",value:function(e){setTimeout(this.br.removeProgressPopup.bind(this.br),e)}},{key:"submitHandler",value:function(e){e.preventDefault();var t=e.target.querySelector('[name="query"]').value;return!!t.length&&(this.br.search(t),this.emptyMatches(),this.toggleSearchPending(!0),!1)}},{key:"handleSearchCallback",value:function(e,t){var r=this,n=t.results,i=t.options;this.matches=n.matches,this.setCurrentMatchIndex(),this.teardownSearchNavigation(),this.renderSearchNavigation(),this.bindSearchNavigationEvents(),this.renderPins(n.matches),this.toggleSearchPending(!1),i.goToFirstResult?a(document).one("BookReader:pageChanged",(function(){r.br.resize()})):this.br.resize()}},{key:"handleNavToggledCallback",value:function(e){var t=this.br.navigationIsVisible();this.togglePinsFor(t)}},{key:"handleSearchStarted",value:function(){this.emptyMatches(),this.br.removeSearchHilites(),this.removeResultPins(),this.toggleSearchPending(!0),this.teardownSearchNavigation(),this.setQuery(this.br.searchTerm)}},{key:"handleSearchCallbackError",value:function(){var e,t,r,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.toggleSearchPending(!1);var a=null==n||null===(e=n.detail)||void 0===e||null===(t=e.props)||void 0===t||null===(r=t.results)||void 0===r?void 0:r.indexed;this.renderErrorModal(a)}},{key:"handleSearchCallbackBookNotIndexed",value:function(){this.toggleSearchPending(!1),this.renderBookNotIndexedModal()}},{key:"handleSearchCallbackEmpty",value:function(){this.toggleSearchPending(!1),this.renderResultsEmptyModal()}},{key:"bindEvents",value:function(){var e="BookReader:";window.addEventListener("".concat(e,"SearchCallbackError"),this.handleSearchCallbackError.bind(this)),a(document).on("".concat(e,"SearchCallback"),this.handleSearchCallback.bind(this)).on("".concat(e,"navToggled"),this.handleNavToggledCallback.bind(this)).on("".concat(e,"SearchStarted"),this.handleSearchStarted.bind(this)).on("".concat(e,"SearchCallbackBookNotIndexed"),this.handleSearchCallbackBookNotIndexed.bind(this)).on("".concat(e,"SearchCallbackEmpty"),this.handleSearchCallbackEmpty.bind(this)).on("".concat(e,"pageChanged"),this.updateSearchNavigation.bind(this)),this.dom.toolbarSearch.querySelector("form").addEventListener("submit",this.submitHandler.bind(this))}}])&&i(t.prototype,r),e}(),c=r(3609),h=r(3609);function l(e,t,r,n,a,i,s){try{var o=e[i](s),c=o.value}catch(e){return void r(e)}o.done?t(c):Promise.resolve(c).then(n,a)}function u(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,o=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){o=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(o)throw i}}}}function d(e,t){if(e){if("string"==typeof e)return g(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?g(e,t):void 0}}function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}c.extend(BookReader.defaultOptions,{server:"ia600609.us.archive.org",bookId:"",subPrefix:"",bookPath:"",enableSearch:!0,searchInsideUrl:"/fulltext/inside.php",initialSearchTerm:null}),BookReader.prototype.setup=(s=BookReader.prototype.setup,function(e){var t=this;s.call(this,e),this.searchTerm="",this.searchResults=null,this.searchInsideUrl=e.searchInsideUrl,this.enableSearch=e.enableSearch,this.bookId=e.bookId,this.server=e.server,this.subPrefix=e.subPrefix,this.bookPath=e.bookPath,this.searchXHR=null,this._cancelSearch.bind(this),this.cancelSearchRequest.bind(this),this._searchBoxesByIndex={},this.searchView||(this.searchView=new o({br:this,searchCancelledCallback:function(){t._cancelSearch(),t.trigger("SearchCanceled",{term:t.searchTerm,instance:t})}}))}),BookReader.prototype.init=function(e){return function(){e.call(this),this.options.enableSearch&&this.options.initialSearchTerm&&this.search(this.options.initialSearchTerm,{goToFirstResult:this.options.goToFirstResult,suppressFragmentChange:!1})}}(BookReader.prototype.init),BookReader.prototype.buildToolbarElement=function(e){return function(){var t=e.call(this);if(this.enableSearch)return this.searchView.dom.toolbarSearch&&t.find(".BRtoolbarSectionInfo").after(this.searchView.dom.toolbarSearch),t}}(BookReader.prototype.buildToolbarElement),BookReader.prototype._createPageContainer=function(e){return function(t){var r=e.call(this,t);if(this.enableSearch&&r.page&&t in this._searchBoxesByIndex){var a=r.page.index;(0,n.Tm)("searchHiliteLayer",this._searchBoxesByIndex[a],r.page,r.$container[0])}return r}}(BookReader.prototype._createPageContainer),BookReader.prototype.search=function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={goToFirstResult:!1,disablePopup:!1,suppressFragmentChange:!1,error:null,success:null},a=c.extend({},n,r);this.suppressFragmentChange=a.suppressFragmentChange,this.searchTerm=t.replace(/\//g," "),a.suppressFragmentChange||this.trigger(BookReader.eventNames.fragmentChange);var i=this.server.replace(/:.+/,""),s="https://".concat(i).concat(this.searchInsideUrl,"?"),o=this.bookPath,l="/".concat(this.subPrefix);this.bookPath.length-this.bookPath.lastIndexOf(l)==l.length&&(o=this.bookPath.substr(0,this.bookPath.length-l.length));var u={item_id:this.bookId,doc:this.subPrefix,path:o,q:t},d=h.param(u).replace(/%2F/g,"/"),g="".concat(s).concat(d),f=function(){e.searchXHR=null,window.BRSearchInProgress=function(){}},v=function(t){if(e.searchXHR){var r=t.error||!t.matches.length,n="function"==typeof a.error,i="function"==typeof a.success;r?n?a.error.call(e,t,a):e.BRSearchCallbackError(t,a):i?a.success.call(e,t,a):e.BRSearchCallback(t,a),f()}},p=function(t){e.searchXHR=t,window.BRSearchInProgress=v};return this.trigger("SearchStarted",{term:this.searchTerm,instance:this}),h.ajax({url:g,dataType:"jsonp",beforeSend:p,jsonpCallback:"BRSearchInProgress"}).then(v)},BookReader.prototype._cancelSearch=function(){var e;null===(e=this.searchXHR)||void 0===e||e.abort(),this.searchView.clearSearchFieldAndResults(!1),this.searchTerm="",this.searchXHR=null,this.searchResults=[],window.BRSearchInProgress=function(){}},BookReader.prototype.cancelSearchRequest=function(){null!==this.searchXHR&&(this._cancelSearch(),this.searchView.toggleSearchPending(),this.trigger("SearchCanceled",{term:this.searchTerm,instance:this}))},BookReader.prototype.BRSearchCallback=function(e,t){if(this.searchResults=e||[],this.updateSearchHilites(),this.removeProgressPopup(),t.goToFirstResult){var r=this._models.book.leafNumToIndex(e.matches[0].par[0].page);this._searchPluginGoToResult(r)}this.trigger("SearchCallback",{results:e,options:t,instance:this})},BookReader.prototype.BRSearchCallbackError=function(e){this._BRSearchCallbackError(e)},BookReader.prototype._BRSearchCallbackError=function(e){this.searchResults=e;var t={term:this.searchTerm,instance:this};if(e.error){var r=Object.assign({},t,{results:e});this.trigger("SearchCallbackError",r)}else if(0==e.matches.length){if(!1===e.indexed)return void this.trigger("SearchCallbackBookNotIndexed",t);this.trigger("SearchCallbackEmpty",t)}},BookReader.prototype.updateSearchHilites=function(){var e,t=this,r=(null===(e=this.searchResults)||void 0===e?void 0:e.matches)||[],a={};this.removeSearchHilites();var i,s=u(r);try{for(s.s();!(i=s.n()).done;){var o,c=u(i.value.par[0].boxes);try{for(c.s();!(o=c.n()).done;){var h=o.value,l=this.leafNumToIndex(h.page);(a[l]||(a[l]=[])).push(h)}}catch(e){c.e(e)}finally{c.f()}}}catch(e){s.e(e)}finally{s.f()}for(var g=function(){var e,r,a=(e=v[f],r=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i=[],s=!0,o=!1;try{for(r=r.call(e);!(s=(n=r.next()).done)&&(i.push(n.value),!t||i.length!==t);s=!0);}catch(e){o=!0,a=e}finally{try{s||null==r.return||r.return()}finally{if(o)throw a}}return i}}(e,r)||d(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),i=a[0],s=a[1],o=parseFloat(i),c=t._models.book.getPage(o);t.getActivePageContainerElementsForIndex(o).forEach((function(e){return(0,n.Tm)("searchHiliteLayer",s,c,e)}))},f=0,v=Object.entries(a);f<v.length;f++)g();this._searchBoxesByIndex=a},BookReader.prototype.removeSearchHilites=function(){h(this.getActivePageContainerElements()).find(".searchHiliteLayer").remove()},BookReader.prototype._searchPluginGoToResult=function(){var e,t=(e=regeneratorRuntime.mark((function e(t){var r,n,a,i,s,o,c;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=this._models.book,n=r.getPage(t),a=!1,n.isViewable){e.next=10;break}return e.next=6,fetch("/services/bookreader/request_page?"+new URLSearchParams({id:this.options.bookId,subprefix:this.options.subPrefix,leafNum:n.leafNum})).then((function(e){return e.json()}));case 6:i=e.sent,s=u(i.value);try{for(s.s();!(o=s.n()).done;)c=o.value,r.getPage(r.leafNumToIndex(c)).makeViewable()}catch(e){s.e(e)}finally{s.f()}i.value.length||(r.getPage(t).makeViewable(),a=!0);case 10:this.suppressFragmentChange=!1,this.jumpToIndex(t),a&&r.getPage(t).makeViewable(!1);case 13:case"end":return e.stop()}}),e,this)})),function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function s(e){l(i,n,a,s,o,"next",e)}function o(e){l(i,n,a,s,o,"throw",e)}s(void 0)}))});return function(e){return t.apply(this,arguments)}}(),BookReader.prototype.removeSearchResults=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.removeSearchHilites(),this.searchTerm=null,this.searchResults=null,e||this.trigger(BookReader.eventNames.fragmentChange)},BookReader.prototype.searchHighlightVisible=function(){var e=this,t=this.searchResults,r=[];if(null==t)return!1;if(this.constMode2up==this.mode)r=[this.twoPage.currentIndexL,this.twoPage.currentIndexR];else{if(this.constMode1up!=this.mode)return!1;r=[this.currentIndex()]}return t.matches.some((function(t){return t.par[0].boxes.some((function(t){var n=e.leafNumToIndex(t.page);if(c.inArray(n,r)>=0)return!0}))})),!1}},9720:function(e,t,r){var n=r(2109),a=r(4699).entries;n({target:"Object",stat:!0},{entries:function(e){return a(e)}})},4603:function(e,t,r){var n=r(9781),a=r(7854),i=r(4705),s=r(9587),o=r(8880),c=r(3070).f,h=r(8006).f,l=r(7850),u=r(1340),d=r(7066),g=r(2999),f=r(1320),v=r(7293),p=r(6656),b=r(9909).enforce,m=r(6340),y=r(5112),k=r(9441),S=r(8173),R=y("match"),x=a.RegExp,P=x.prototype,B=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,I=/a/g,C=/a/g,M=new x(I)!==I,w=g.UNSUPPORTED_Y;if(i("RegExp",n&&(!M||w||k||S||v((function(){return C[R]=!1,x(I)!=I||x(C)==C||"/a/i"!=x(I,"i")}))))){for(var T=function(e,t){var r,n,a,i,c,h,g=this instanceof T,f=l(e),v=void 0===t,m=[],y=e;if(!g&&f&&v&&e.constructor===T)return e;if((f||e instanceof T)&&(e=e.source,v&&(t="flags"in y?y.flags:d.call(y))),e=void 0===e?"":u(e),t=void 0===t?"":u(t),y=e,k&&"dotAll"in I&&(n=!!t&&t.indexOf("s")>-1)&&(t=t.replace(/s/g,"")),r=t,w&&"sticky"in I&&(a=!!t&&t.indexOf("y")>-1)&&(t=t.replace(/y/g,"")),S&&(e=(i=function(e){for(var t,r=e.length,n=0,a="",i=[],s={},o=!1,c=!1,h=0,l="";n<=r;n++){if("\\"===(t=e.charAt(n)))t+=e.charAt(++n);else if("]"===t)o=!1;else if(!o)switch(!0){case"["===t:o=!0;break;case"("===t:B.test(e.slice(n+1))&&(n+=2,c=!0),a+=t,h++;continue;case">"===t&&c:if(""===l||p(s,l))throw new SyntaxError("Invalid capture group name");s[l]=!0,i.push([l,h]),c=!1,l="";continue}c?l+=t:a+=t}return[a,i]}(e))[0],m=i[1]),c=s(x(e,t),g?this:P,T),(n||a||m.length)&&(h=b(c),n&&(h.dotAll=!0,h.raw=T(function(e){for(var t,r=e.length,n=0,a="",i=!1;n<=r;n++)"\\"!==(t=e.charAt(n))?i||"."!==t?("["===t?i=!0:"]"===t&&(i=!1),a+=t):a+="[\\s\\S]":a+=t+e.charAt(++n);return a}(e),r)),a&&(h.sticky=!0),m.length&&(h.groups=m)),e!==y)try{o(c,"source",""===y?"(?:)":y)}catch(e){}return c},N=function(e){e in T||c(T,e,{configurable:!0,get:function(){return x[e]},set:function(t){x[e]=t}})},E=h(x),_=0;E.length>_;)N(E[_++]);P.constructor=T,T.prototype=P,f(a,"RegExp",T)}m("RegExp")}},function(e){e(e.s=8011)}]);
|
2
|
+
//# sourceMappingURL=plugin.search.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"plugins/plugin.search.js","mappings":"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","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/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.regexp.constructor.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 * @event BookReader:SearchCanceled - When no results found. Receives\n * `instance`\n */\nimport { renderBoxesInPageContainerLayer } from '../../BookReader/PageContainer.js';\nimport SearchView from './view.js';\n/** @typedef {import('../../BookReader/PageContainer').PageContainer} PageContainer */\n/** @typedef {import('../../BookReader/BookModel').PageIndex} PageIndex */\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\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 this.searchXHR = null;\n this._cancelSearch.bind(this);\n this.cancelSearchRequest.bind(this);\n\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n this._searchBoxesByIndex = {};\n\n if (this.searchView) { return; }\n this.searchView = new SearchView({\n br: this,\n searchCancelledCallback: () => {\n this._cancelSearch();\n this.trigger('SearchCanceled', { term: this.searchTerm, instance: this });\n }\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 /**\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})(BookReader.prototype.init);\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/** @override */\nBookReader.prototype._createPageContainer = (function (super_) {\n return function (index) {\n const pageContainer = super_.call(this, index);\n if (this.enableSearch && pageContainer.page && index in this._searchBoxesByIndex) {\n const pageIndex = pageContainer.page.index;\n renderBoxesInPageContainerLayer('searchHiliteLayer', this._searchBoxesByIndex[pageIndex], pageContainer.page, pageContainer.$container[0]);\n }\n return pageContainer;\n };\n})(BookReader.prototype._createPageContainer);\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 cleanup = () => {\n this.searchXHR = null;\n window.BRSearchInProgress = () => {};\n };\n\n const processSearchResults = (searchInsideResults) => {\n if (!this.searchXHR) {\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 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 cleanup();\n };\n\n const beforeSend = (xhr) => {\n this.searchXHR = xhr;\n window.BRSearchInProgress = processSearchResults;\n };\n\n this.trigger('SearchStarted', { term: this.searchTerm, instance: this });\n return $.ajax({\n url: url,\n dataType: 'jsonp',\n beforeSend,\n jsonpCallback: 'BRSearchInProgress'\n }).then(processSearchResults);\n};\n\n/**\n * cancels AJAX Call\n * emits custom event\n */\nBookReader.prototype._cancelSearch = function () {\n this.searchXHR?.abort();\n this.searchView.clearSearchFieldAndResults(false);\n this.searchTerm = '';\n this.searchXHR = null;\n this.searchResults = [];\n window.BRSearchInProgress = () => {};\n};\n\n/**\n * External function to cancel search\n * checks for term & xhr in flight before running\n */\nBookReader.prototype.cancelSearchRequest = function () {\n if (this.searchXHR !== null) {\n this._cancelSearch();\n this.searchView.toggleSearchPending();\n this.trigger('SearchCanceled', { term: this.searchTerm, instance: this });\n }\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 const pageIndex = this._models.book.leafNumToIndex(results.matches[0].par[0].page);\n this._searchPluginGoToResult(pageIndex);\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 /** @type {SearchInsideMatch[]} */\n const matches = this.searchResults?.matches || [];\n /** @type { {[pageIndex: number]: SearchInsideMatch[]} } */\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.leafNumToIndex(box.page);\n const pageMatches = boxesByIndex[pageIndex] || (boxesByIndex[pageIndex] = []);\n pageMatches.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._models.book.getPage(pageIndex);\n const pageContainers = this.getActivePageContainerElementsForIndex(pageIndex);\n pageContainers.forEach(container => renderBoxesInPageContainerLayer('searchHiliteLayer', boxes, page, container));\n }\n\n this._searchBoxesByIndex = boxesByIndex;\n};\n\n/**\n * remove search highlights\n */\nBookReader.prototype.removeSearchHilites = function() {\n $(this.getActivePageContainerElements()).find('.searchHiliteLayer').remove();\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 {object} params.br The BookReader instance\n * @param {function} params.cancelSearch 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 this.br = 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();\n this.bindEvents();\n this.cancelSearch = searchCancelledCallback;\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.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').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 {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.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 }.bind(this));\n });\n }\n\n /**\n * @param {boolean} bool\n */\n toggleSearchPending(bool) {\n if (bool) {\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 /**\n * @param {Event} e\n */\n handleNavToggledCallback(e) {\n const is_visible = this.br.navigationIsVisible();\n this.togglePinsFor(is_visible);\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 /**\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}navToggled`, this.handleNavToggledCallback.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","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\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 createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\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 toString = require('../internals/to-string');\nvar getFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\n// TODO: Use only propper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\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 BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || 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\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = string.charAt(index);\n if (chr === '\\\\') {\n result += chr + string.charAt(++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = {};\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = string.charAt(index);\n if (chr === '\\\\') {\n chr = chr + string.charAt(++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n if (IS_NCG.test(string.slice(index + 1))) {\n index += 2;\n ncg = true;\n }\n result += chr;\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || has(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named.push([groupname, groupid]);\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_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 groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || pattern instanceof RegExpWrapper) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags.call(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && flags.indexOf('s') > -1;\n if (dotAll) flags = flags.replace(/s/g, '');\n }\n\n rawFlags = flags;\n\n if (UNSUPPORTED_Y && 'sticky' in re1) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\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\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxy(keys[index++]);\n }\n\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"],"names":["super_","SearchView","br","searchCancelledCallback","this","matcher","RegExp","matches","cacheDOMElements","bindEvents","cancelSearch","dom","toolbarSearch","buildToolbarSearch","query","$","val","remove","dispatchEventWhenComplete","removeSearchResults","removeResultPins","emptyMatches","setQuery","teardownSearchNavigation","trigger","selector","before","resultsPosition","searchNavigation","positionMessage","length","currentMatchIndex","namespace","on","clearSearchFieldAndResults","bind","showPrevResult","showNextResult","toggleSidebar","mode","constModeThumb","switchMode","constMode1up","getClosestMatchIndex","start","end","comparator","eq","click","updateResultsPosition","updateSearchNavigationButtons","comparisonFn","closestPage","closestTo","pool","slice","map","m","par","page","currentIndex","indexOf","find","text","attr","off","resize","matchingSearchResult","constMode2up","find2upMatchingSearchResult","find1upMatchingSearchResult","_isIndexDisplayed","setCurrentMatchIndex","bool","pinsVisibleState","refs","$BRfooter","css","visibility","document","createElement","classList","add","innerHTML","imagesBaseURL","forEach","match","queryString","pageIndex","leafNumToIndex","pageNumber","getPageNum","percentThrough","constructor","util","cssPercentage","getNumLeafs","queryStringWithB","replace","queryStringWithBTruncated","addClass","left","append","data","appendTo","hover","event","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","x","style","setProperty","removeClass","target","_searchPluginGoToResult","showProgressPopup","progressPopupClosed","removeProgressPopup","toggleSearchPending","textIsProcessing","errorDetails","renderModalMessage","delayModalRemovalFor","messageHTML","modal","el","timeoutMS","setTimeout","e","preventDefault","value","search","results","options","renderSearchNavigation","bindSearchNavigationEvents","renderPins","goToFirstResult","one","is_visible","navigationIsVisible","togglePinsFor","removeSearchHilites","searchTerm","isIndexed","detail","props","indexed","renderErrorModal","renderBookNotIndexedModal","renderResultsEmptyModal","window","addEventListener","handleSearchCallbackError","handleSearchCallback","handleNavToggledCallback","handleSearchStarted","handleSearchCallbackBookNotIndexed","handleSearchCallbackEmpty","updateSearchNavigation","submitHandler","jQuery","extend","BookReader","defaultOptions","server","bookId","subPrefix","bookPath","enableSearch","searchInsideUrl","initialSearchTerm","prototype","setup","call","searchResults","searchXHR","_cancelSearch","cancelSearchRequest","_searchBoxesByIndex","searchView","term","instance","init","suppressFragmentChange","buildToolbarElement","$el","after","_createPageContainer","index","pageContainer","renderBoxesInPageContainerLayer","$container","overrides","disablePopup","error","success","eventNames","fragmentChange","serverPath","baseUrl","path","subPrefixWithSlash","lastIndexOf","substr","urlParams","item_id","doc","q","paramStr","param","url","cleanup","BRSearchInProgress","processSearchResults","searchInsideResults","responseHasError","hasCustomError","hasCustomSuccess","BRSearchCallbackError","BRSearchCallback","beforeSend","xhr","ajax","dataType","jsonpCallback","then","abort","updateSearchHilites","_models","book","_BRSearchCallbackError","basePayload","payload","Object","assign","boxesByIndex","boxes","box","push","pageIndexString","parseFloat","getPage","getActivePageContainerElementsForIndex","container","entries","getActivePageContainerElements","makeUnviewableAtEnd","isViewable","fetch","URLSearchParams","id","subprefix","leafNum","r","json","resp","makeViewable","jumpToIndex","searchHighlightVisible","visiblePages","twoPage","currentIndexL","currentIndexR","some","inArray","$entries","stat","O","DESCRIPTORS","global","isForced","inheritIfRequired","createNonEnumerableProperty","defineProperty","getOwnPropertyNames","isRegExp","toString","getFlags","stickyHelpers","redefine","fails","has","enforceInternalState","setSpecies","wellKnownSymbol","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","MATCH","NativeRegExp","RegExpPrototype","IS_NCG","re1","re2","CORRECT_NEW","UNSUPPORTED_Y","RegExpWrapper","pattern","flags","rawFlags","dotAll","sticky","handled","result","state","thisIsRegExp","patternIsRegExp","flagsAreUndefined","undefined","groups","rawPattern","source","string","chr","named","names","brackets","ncg","groupid","groupname","charAt","test","SyntaxError","handleNCG","raw","handleDotAll","proxy","key","configurable","get","set","it","keys"],"sourceRoot":""}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[423],{7967:function(t,e,n){"use strict";n(5666),n(6992),n(1539),n(3948),n(9826),n(9714),n(2222),n(1249),n(4916),n(3123),n(2707),n(9601),n(8674),n(2526),n(1817),n(2165),n(8783),n(7042),n(8309),n(1038),n(489),n(2419),n(4819),n(5003);var r=n(9860),o=n(7775);function i(t){return function(t){if(Array.isArray(t))return t}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return a(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function u(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s;return null==t?void 0:t.replace(/\{\{([^}]*?)\}\}/g,(function(t,o){if(!o)return t;var a=i(o.split("|").map((function(t){return t.trim()}))),u=a[0],s=a.slice(1);if(!(u in n)&&!(u in e))return t;var l=u in n?n[u]:u in e?e[u]:null;return s.map((function(t){return r[t]})).reduce((function(t,e){return e(t)}),l&&l.toString())}))}n(5306),n(3210),n(5827);var s={urlencode:encodeURIComponent},l=n(3609);function c(t){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function f(t,e,n){return(f="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,n){var r=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=g(t)););return t}(t,e);if(r){var o=Object.getOwnPropertyDescriptor(r,e);return o.get?o.get.call(n):o.value}})(t,e,n||t)}function p(t,e){return(p=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function h(t,e){if(e&&("object"===c(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}function g(t){return(g=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function d(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i=[],a=!0,u=!1;try{for(n=n.call(t);!(a=(r=n.next()).done)&&(i.push(r.value),!e||i.length!==e);a=!0);}catch(t){u=!0,o=t}finally{try{a||null==n.return||n.return()}finally{if(u)throw o}}return i}}(t,e)||function(t,e){if(t){if("string"==typeof t)return v(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function y(t,e,n,r,o,i,a){try{var u=t[i](a),s=u.value}catch(t){return void n(t)}u.done?e(s):Promise.resolve(s).then(r,o)}function m(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var i=t.apply(e,n);function a(t){y(i,r,o,a,u,"next",t)}function u(t){y(i,r,o,a,u,"throw",t)}a(void 0)}))}}function b(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function w(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function x(t,e,n){return e&&w(t.prototype,e),n&&w(t,n),t}var S=window.BookReader,P={enabled:!0,fullDjvuXmlUrl:null,singlePageDjvuXmlUrl:null},A=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;b(this,t),this.maxSize=e,this.entries=[]}return x(t,[{key:"add",value:function(t){this.entries.length>=this.maxSize&&this.entries.shift(),this.entries.push(t)}}]),t}(),j=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:P,n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:(0,o.vU)(),i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:(0,o.G6)();b(this,t),this.options=e,this.optionVariables=n,this.djvuPagesPromise=null,this.svgParagraphElement="text",this.svgWordElement="tspan",this.insertNewlines=r,this.pointerEventsOnParagraph=i,r&&(this.svgParagraphElement="g",this.svgWordElement="text"),this.pageTextCache=new A,this.maxWordRendered=2500}var e,n;return x(t,[{key:"init",value:function(){this.options.singlePageDjvuXmlUrl||(this.djvuPagesPromise=l.ajax({type:"GET",url:u(this.options.fullDjvuXmlUrl,this.optionVariables),dataType:"html",error:function(t){}}).then((function(t){try{var e=l.parseXML(t);return e&&l(e).find("OBJECT")}catch(t){return}})))}},{key:"getPageText",value:(n=m(regeneratorRuntime.mark((function t(e){var n,r,o=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this.options.singlePageDjvuXmlUrl){t.next=7;break}if(!(n=this.pageTextCache.entries.find((function(t){return t.index==e})))){t.next=4;break}return t.abrupt("return",n.response);case 4:return t.abrupt("return",l.ajax({type:"GET",url:u(this.options.singlePageDjvuXmlUrl,this.optionVariables,{pageIndex:e}),dataType:"html",error:function(t){}}).then((function(t){try{var n=l.parseXML(t),r=n&&l(n).find("OBJECT")[0];return o.pageTextCache.add({index:e,response:r}),r}catch(t){return}})));case 7:return t.next=9,this.djvuPagesPromise;case 9:if(!(r=t.sent)){t.next=12;break}return t.abrupt("return",r[e]);case 12:case"end":return t.stop()}}),t,this)}))),function(t){return n.apply(this,arguments)})},{key:"interceptCopy",value:function(t){t[0].addEventListener("copy",(function(t){var e=document.getSelection();t.clipboardData.setData("text/plain",e.toString()),t.preventDefault()}))}},{key:"defaultMode",value:function(t){var e=this;t.classList.remove("selectingSVG"),l(t).on("mousedown.textSelectPluginHandler",(function(n){l(n.target).is(".BRwordElement")&&(n.stopPropagation(),t.classList.add("selectingSVG"),l(t).one("mouseup.textSelectPluginHandler",(function(n){""!=window.getSelection().toString()?(n.stopPropagation(),l(t).off(".textSelectPluginHandler"),e.textSelectingMode(t)):t.classList.remove("selectingSVG")})))}))}},{key:"textSelectingMode",value:function(t){var e=this;l(t).on("mousedown.textSelectPluginHandler",(function(t){l(t.target).is(".BRwordElement")||""!=window.getSelection().toString()&&window.getSelection().removeAllRanges(),t.stopPropagation()})),l(t).on("mouseup.textSelectPluginHandler",(function(n){n.stopPropagation(),""==window.getSelection().toString()&&(l(t).off(".textSelectPluginHandler"),e.defaultMode(t))}))}},{key:"stopPageFlip",value:function(t){var e=this,n=t.find("svg.textSelectionSVG");n.length&&(n.each((function(t,n){return e.defaultMode(n)})),this.interceptCopy(t))}},{key:"createTextLayer",value:(e=m(regeneratorRuntime.mark((function t(e){var n,o,i,a,u,s=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=e.page.index,!(o=e.$container).find(".textSelectionSVG").length){t.next=5;break}return t.abrupt("return");case 5:return t.next=7,this.getPageText(n);case 7:if(i=t.sent){t.next=10;break}return t.abrupt("return");case 10:if(!((a=l(i).find("WORD").length)>this.maxWordRendered)){t.next=14;break}return console.log("Page ".concat(n," has too many words (").concat(a," > ").concat(this.maxWordRendered,"). Not rendering text layer.")),t.abrupt("return");case 14:u=(0,r.hy)(e.page,"textSelectionSVG"),o.append(u),l(i).find("PARAGRAPH").each((function(t,e){var n=l(e).find("WORD");if(n.length){var r=document.createElementNS("http://www.w3.org/2000/svg",s.svgParagraphElement);r.setAttribute("class","BRparagElement"),s.pointerEventsOnParagraph&&(r.style.pointerEvents="all");for(var o=[],i=0;i<n.length;i++){var a=n[i],c=d(l(a).attr("coords").split(",").map(parseFloat),4),f=c[0],p=c[1],h=c[2],g=p-c[3];o.push(g);var v=document.createElementNS("http://www.w3.org/2000/svg",s.svgWordElement);if(v.setAttribute("class","BRwordElement"),v.setAttribute("x",f.toString()),v.setAttribute("y",p.toString()),v.setAttribute("textLength",(h-f).toString()),v.setAttribute("lengthAdjust","spacingAndGlyphs"),v.textContent=a.textContent,r.appendChild(v),i<n.length-1){var y=n[i+1],m=d(l(y).attr("coords").split(",").map(parseFloat),4),b=m[0],w=(m[1],m[2],m[3],document.createElementNS("http://www.w3.org/2000/svg",s.svgWordElement));w.setAttribute("class","BRwordElement"),w.setAttribute("x",h.toString()),w.setAttribute("y",p.toString()),b-h>0&&w.setAttribute("textLength",(b-h).toString()),w.setAttribute("lengthAdjust","spacingAndGlyphs"),w.textContent=" ",r.appendChild(w)}i==n.length-1&&s.insertNewlines&&r.appendChild(document.createTextNode("\n"))}o.sort();var x=o[Math.floor(.85*o.length)];r.setAttribute("font-size",x.toString()),u.appendChild(r)}})),this.stopPageFlip(o);case 18:case"end":return t.stop()}}),t,this)}))),function(t){return e.apply(this,arguments)})}]),t}(),E=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&p(t,e)}(o,t);var e,n,r=(e=o,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,r=g(e);if(n){var o=g(this).constructor;t=Reflect.construct(r,arguments,o)}else t=r.apply(this,arguments);return h(this,t)});function o(){return b(this,o),r.apply(this,arguments)}return x(o,[{key:"init",value:function(){var t=Object.assign({},P,this.options.plugins.textSelection);t.enabled&&(this.textSelectionPlugin=new j(t,this.options.vars),this.options.plugins.textSelection=t,this.textSelectionPlugin.init()),f(g(o.prototype),"init",this).call(this)}},{key:"_createPageContainer",value:function(t){var e,n=f(g(o.prototype),"_createPageContainer",this).call(this,t);return this.mode!==this.constModeThumb&&n.page&&(null===(e=this.textSelectionPlugin)||void 0===e||e.createTextLayer(n)),n}}]),o}(S);window.BookReader=E},7775:function(t,e,n){"use strict";function r(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator.userAgent,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:navigator.vendor;return/chrome/i.test(t)&&/google inc/i.test(e)}function o(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator.userAgent;return/firefox/i.test(t)}function i(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator.userAgent;return/safari/i.test(t)&&!/chrome|chromium/i.test(t)}n.d(e,{i7:function(){return r},vU:function(){return o},G6:function(){return i}})},6091:function(t,e,n){var r=n(7293),o=n(1361);t.exports=function(t){return r((function(){return!!o[t]()||"
"!="
"[t]()||o[t].name!==t}))}},3210:function(t,e,n){"use strict";var r=n(2109),o=n(3111).trim;r({target:"String",proto:!0,forced:n(6091)("trim")},{trim:function(){return o(this)}})}},function(t){t(t.s=7967)}]);
|
2
|
+
//# sourceMappingURL=plugin.text_selection.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"plugins/plugin.text_selection.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/util/strings.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.text_selection.js","webpack://@internetarchive/bookreader/./src/util/browserSniffing.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js"],"sourcesContent":["/**\n * @typedef {String} StringWithVars\n * A template string with {{foo}} style variables\n * Also supports filters, like {{bookPath|urlencode}} (See APPLY_FILTERS for the\n * supported list of filters)\n **/\n\n/**\n * @param {StringWithVars|String} template\n * @param { {[varName: string]: { toString: () => string} } } vars\n * @param { {[varName: string]: { toString: () => string} } } [overrides]\n */\nexport function applyVariables(template, vars, overrides = {}, possibleFilters = APPLY_FILTERS) {\n return template?.replace(/\\{\\{([^}]*?)\\}\\}/g, ($0, $1) => {\n if (!$1) return $0;\n /** @type {string} */\n const expression = $1;\n const [varName, ...filterNames] = expression.split('|').map(x => x.trim());\n const defined = varName in overrides || varName in vars;\n\n // If it's not defined, don't expand it at all\n if (!defined) return $0;\n\n const value = varName in overrides ? overrides[varName]\n : varName in vars ? vars[varName] : null;\n const filters = filterNames.map(n => possibleFilters[n]);\n return filters.reduce((acc, cur) => cur(acc), value && value.toString());\n });\n}\n\n/** @type { {[filterName: String]:( string => string)} } */\nexport const APPLY_FILTERS = {\n urlencode: encodeURIComponent,\n};\n","//@ts-check\nimport { createSVGPageLayer } from '../BookReader/PageContainer.js';\nimport { isFirefox, isSafari } from '../util/browserSniffing.js';\nimport { applyVariables } from '../util/strings.js';\n/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */\n/** @typedef {import('../BookReader/PageContainer.js').PageContainer} PageContainer */\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\nexport const DEFAULT_OPTIONS = {\n enabled: true,\n /** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */\n fullDjvuXmlUrl: null,\n /** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */\n singlePageDjvuXmlUrl: null,\n};\n/** @typedef {typeof DEFAULT_OPTIONS} TextSelectionPluginOptions */\n\n/**\n * @template T\n */\nexport class Cache {\n constructor(maxSize = 10) {\n this.maxSize = maxSize;\n /** @type {T[]} */\n this.entries = [];\n }\n\n /**\n * @param {T} entry\n */\n add(entry) {\n if (this.entries.length >= this.maxSize) {\n this.entries.shift();\n }\n this.entries.push(entry);\n }\n}\n\nexport class TextSelectionPlugin {\n\n constructor(options = DEFAULT_OPTIONS, optionVariables, avoidTspans = isFirefox(), pointerEventsOnParagraph = isSafari()) {\n this.options = options;\n this.optionVariables = optionVariables;\n /**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */\n this.djvuPagesPromise = null;\n // Using text elements instead of tspans for words because Firefox does not allow svg tspan stretch.\n // Tspans are necessary on Chrome because they prevent newline character after every word when copying\n this.svgParagraphElement = \"text\";\n this.svgWordElement = \"tspan\";\n this.insertNewlines = avoidTspans;\n // Safari has a bug where `pointer-events` doesn't work on `<tspans>`. So\n // there we will set `pointer-events: all` on the paragraph element. We don't\n // do this everywhere, because it's a worse experience. Thanks Safari :/\n this.pointerEventsOnParagraph = pointerEventsOnParagraph;\n if (avoidTspans) {\n this.svgParagraphElement = \"g\";\n this.svgWordElement = \"text\";\n }\n\n /** @type {Cache<{index: number, response: any}>} */\n this.pageTextCache = new Cache();\n\n /**\n * Sometimes there are too many words on a page, and the browser becomes near\n * unusable. For now don't render text layer for pages with too many words.\n */\n this.maxWordRendered = 2500;\n }\n\n init() {\n // Only fetch the full djvu xml if the single page url isn't there\n if (this.options.singlePageDjvuXmlUrl) return;\n this.djvuPagesPromise = $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.fullDjvuXmlUrl, this.optionVariables),\n dataType: \"html\",\n error: (e) => undefined\n }).then((res) => {\n try {\n const xmlMap = $.parseXML(res);\n return xmlMap && $(xmlMap).find(\"OBJECT\");\n } catch (e) {\n return undefined;\n }\n });\n }\n\n /**\n * @param {number} index\n * @returns {Promise<HTMLElement|undefined>}\n */\n async getPageText(index) {\n if (this.options.singlePageDjvuXmlUrl) {\n const cachedEntry = this.pageTextCache.entries.find(x => x.index == index);\n if (cachedEntry) {\n return cachedEntry.response;\n }\n return $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.singlePageDjvuXmlUrl, this.optionVariables, { pageIndex: index }),\n dataType: \"html\",\n error: (e) => undefined,\n }).then((res) => {\n try {\n const xmlDoc = $.parseXML(res);\n const result = xmlDoc && $(xmlDoc).find(\"OBJECT\")[0];\n this.pageTextCache.add({ index, response: result });\n return result;\n } catch (e) {\n return undefined;\n }\n });\n } else {\n const XMLpagesArr = await this.djvuPagesPromise;\n if (XMLpagesArr) return XMLpagesArr[index];\n }\n }\n\n /**\n * Intercept copied text to remove any styling applied to it\n * @param {JQuery} $container\n */\n interceptCopy($container) {\n $container[0].addEventListener('copy', (event) => {\n const selection = document.getSelection();\n event.clipboardData.setData('text/plain', selection.toString());\n event.preventDefault();\n });\n }\n\n /**\n * Applies mouse events when in default mode\n * @param {SVGElement} svg\n */\n defaultMode(svg) {\n svg.classList.remove(\"selectingSVG\");\n $(svg).on(\"mousedown.textSelectPluginHandler\", (event) => {\n if (!$(event.target).is(\".BRwordElement\")) return;\n event.stopPropagation();\n svg.classList.add(\"selectingSVG\");\n $(svg).one(\"mouseup.textSelectPluginHandler\", (event) => {\n if (window.getSelection().toString() != \"\") {\n event.stopPropagation();\n $(svg).off(\".textSelectPluginHandler\");\n this.textSelectingMode(svg);\n }\n else svg.classList.remove(\"selectingSVG\");\n });\n });\n }\n\n /**\n * Applies mouse events when in textSelecting mode\n * @param {SVGElement} svg\n */\n textSelectingMode(svg) {\n $(svg).on('mousedown.textSelectPluginHandler', (event) => {\n if (!$(event.target).is(\".BRwordElement\")) {\n if (window.getSelection().toString() != \"\") window.getSelection().removeAllRanges();\n }\n event.stopPropagation();\n });\n $(svg).on('mouseup.textSelectPluginHandler', (event) => {\n event.stopPropagation();\n if (window.getSelection().toString() == \"\") {\n $(svg).off(\".textSelectPluginHandler\");\n this.defaultMode(svg); }\n });\n }\n\n /**\n * Initializes text selection modes if there is an svg on the page\n * @param {JQuery} $container\n */\n stopPageFlip($container) {\n /** @type {JQuery<SVGElement>} */\n const $svg = $container.find('svg.textSelectionSVG');\n if (!$svg.length) return;\n $svg.each((i, s) => this.defaultMode(s));\n this.interceptCopy($container);\n }\n\n /**\n * @param {PageContainer} pageContainer\n */\n async createTextLayer(pageContainer) {\n const pageIndex = pageContainer.page.index;\n const $container = pageContainer.$container;\n const $svgLayers = $container.find('.textSelectionSVG');\n if ($svgLayers.length) return;\n const XMLpage = await this.getPageText(pageIndex);\n if (!XMLpage) return;\n\n const totalWords = $(XMLpage).find(\"WORD\").length;\n if (totalWords > this.maxWordRendered) {\n console.log(`Page ${pageIndex} has too many words (${totalWords} > ${this.maxWordRendered}). Not rendering text layer.`);\n return;\n }\n\n const svg = createSVGPageLayer(pageContainer.page, 'textSelectionSVG');\n $container.append(svg);\n\n $(XMLpage).find(\"PARAGRAPH\").each((i, paragraph) => {\n // Adding text element for each paragraph in the page\n const words = $(paragraph).find(\"WORD\");\n if (!words.length) return;\n const paragSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", this.svgParagraphElement);\n paragSvg.setAttribute(\"class\", \"BRparagElement\");\n if (this.pointerEventsOnParagraph) {\n paragSvg.style.pointerEvents = \"all\";\n }\n\n const wordHeightArr = [];\n\n for (let i = 0; i < words.length; i++) {\n // Adding tspan for each word in paragraph\n const currWord = words[i];\n // eslint-disable-next-line no-unused-vars\n const [left, bottom, right, top] = $(currWord).attr(\"coords\").split(',').map(parseFloat);\n const wordHeight = bottom - top;\n wordHeightArr.push(wordHeight);\n\n const wordTspan = document.createElementNS(\"http://www.w3.org/2000/svg\", this.svgWordElement);\n wordTspan.setAttribute(\"class\", \"BRwordElement\");\n wordTspan.setAttribute(\"x\", left.toString());\n wordTspan.setAttribute(\"y\", bottom.toString());\n wordTspan.setAttribute(\"textLength\", (right - left).toString());\n wordTspan.setAttribute(\"lengthAdjust\", \"spacingAndGlyphs\");\n wordTspan.textContent = currWord.textContent;\n paragSvg.appendChild(wordTspan);\n\n // Adding spaces after words except at the end of the paragraph\n // TODO: assumes left-to-right text\n if (i < words.length - 1) {\n const nextWord = words[i + 1];\n // eslint-disable-next-line no-unused-vars\n const [leftNext, bottomNext, rightNext, topNext] = $(nextWord).attr(\"coords\").split(',').map(parseFloat);\n const spaceTspan = document.createElementNS(\"http://www.w3.org/2000/svg\", this.svgWordElement);\n spaceTspan.setAttribute(\"class\", \"BRwordElement\");\n spaceTspan.setAttribute(\"x\", right.toString());\n spaceTspan.setAttribute(\"y\", bottom.toString());\n if ((leftNext - right) > 0) spaceTspan.setAttribute(\"textLength\", (leftNext - right).toString());\n spaceTspan.setAttribute(\"lengthAdjust\", \"spacingAndGlyphs\");\n spaceTspan.textContent = \" \";\n paragSvg.appendChild(spaceTspan);\n }\n\n // Adds newline at the end of paragraph on Firefox\n if ((i == words.length - 1 && (this.insertNewlines))) {\n paragSvg.appendChild(document.createTextNode(\"\\n\"));\n }\n }\n\n wordHeightArr.sort();\n const paragWordHeight = wordHeightArr[Math.floor(wordHeightArr.length * 0.85)];\n paragSvg.setAttribute(\"font-size\", paragWordHeight.toString());\n svg.appendChild(paragSvg);\n });\n this.stopPageFlip($container);\n }\n}\n\nexport class BookreaderWithTextSelection extends BookReader {\n init() {\n const options = Object.assign({}, DEFAULT_OPTIONS, this.options.plugins.textSelection);\n if (options.enabled) {\n this.textSelectionPlugin = new TextSelectionPlugin(options, this.options.vars);\n // Write this back; this way the plugin is the source of truth, and BR just\n // contains a reference to it.\n this.options.plugins.textSelection = options;\n this.textSelectionPlugin.init();\n }\n super.init();\n }\n\n /**\n * @param {number} index\n */\n _createPageContainer(index) {\n const pageContainer = super._createPageContainer(index);\n // Disable if thumb mode; it's too janky\n // .page can be null for \"pre-cover\" region\n if (this.mode !== this.constModeThumb && pageContainer.page) {\n this.textSelectionPlugin?.createTextLayer(pageContainer);\n }\n return pageContainer;\n }\n}\nwindow.BookReader = BookreaderWithTextSelection;\nexport default BookreaderWithTextSelection;\n","\n/**\n * Checks whether the current browser is a Chrome/Chromium browser\n * Code from https://stackoverflow.com/a/4565120/2317712\n * @param {string} [userAgent]\n * @param {string} [vendor]\n * @return {boolean}\n */\nexport function isChrome(userAgent = navigator.userAgent, vendor = navigator.vendor) {\n return /chrome/i.test(userAgent) && /google inc/i.test(vendor);\n}\n\n/**\n * Checks whether the current browser is firefox\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isFirefox(userAgent = navigator.userAgent) {\n return /firefox/i.test(userAgent);\n}\n\n/**\n * Checks whether the current browser is safari\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent#Browser_Name\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isSafari(userAgent = navigator.userAgent) {\n return /safari/i.test(userAgent) && !/chrome|chromium/i.test(userAgent);\n}\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","'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"],"names":["applyVariables","template","vars","overrides","possibleFilters","APPLY_FILTERS","replace","$0","$1","split","map","x","trim","varName","filterNames","value","n","reduce","acc","cur","toString","urlencode","encodeURIComponent","BookReader","window","DEFAULT_OPTIONS","enabled","fullDjvuXmlUrl","singlePageDjvuXmlUrl","Cache","maxSize","this","entries","entry","length","shift","push","TextSelectionPlugin","options","optionVariables","avoidTspans","isFirefox","pointerEventsOnParagraph","isSafari","djvuPagesPromise","svgParagraphElement","svgWordElement","insertNewlines","pageTextCache","maxWordRendered","$","ajax","type","url","dataType","error","e","then","res","xmlMap","parseXML","find","index","cachedEntry","response","pageIndex","xmlDoc","result","add","XMLpagesArr","$container","addEventListener","event","selection","document","getSelection","clipboardData","setData","preventDefault","svg","classList","remove","on","target","is","stopPropagation","one","off","textSelectingMode","removeAllRanges","defaultMode","$svg","each","i","s","interceptCopy","pageContainer","page","getPageText","XMLpage","totalWords","console","log","createSVGPageLayer","append","paragraph","words","paragSvg","createElementNS","setAttribute","style","pointerEvents","wordHeightArr","currWord","attr","parseFloat","left","bottom","right","wordHeight","wordTspan","textContent","appendChild","nextWord","leftNext","spaceTspan","createTextNode","sort","paragWordHeight","Math","floor","stopPageFlip","BookreaderWithTextSelection","Object","assign","plugins","textSelection","textSelectionPlugin","init","mode","constModeThumb","createTextLayer","isChrome","userAgent","navigator","vendor","test","fails","whitespaces","module","exports","METHOD_NAME","name","$trim","proto","forced","forcedStringTrimMethod"],"sourceRoot":""}
|