@internetarchive/bookreader 5.0.0-3 → 5.0.0-30-a
Sign up to get free protection for your applications and to get access to all the features.
- package/.eslintrc.js +17 -5
- package/.github/dependabot.yml +8 -0
- package/.github/workflows/node.js.yml +10 -1
- package/.husky/_/husky.sh +30 -0
- package/.testcaferc.js +10 -0
- package/BookReader/BookReader.css +75 -323
- package/BookReader/BookReader.js +1 -1
- package/BookReader/BookReader.js.LICENSE.txt +45 -0
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/ia-bookreader-bundle.js +1458 -0
- package/BookReader/{bookreader-component-bundle.js.LICENSE.txt → ia-bookreader-bundle.js.LICENSE.txt} +10 -9
- package/BookReader/ia-bookreader-bundle.js.map +1 -0
- package/BookReader/icons/close-circle-dark.svg +1 -0
- package/BookReader/icons/voice.svg +1 -0
- package/BookReader/plugins/plugin.archive_analytics.js +1 -1
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -1
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +1 -1
- package/BookReader/plugins/plugin.chapters.js.map +1 -1
- package/BookReader/plugins/plugin.iframe.js +1 -1
- package/BookReader/plugins/plugin.iframe.js.map +1 -1
- package/BookReader/plugins/plugin.mobile_nav.js +1 -1
- package/BookReader/plugins/plugin.mobile_nav.js.map +1 -1
- package/BookReader/plugins/plugin.resume.js +1 -1
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +1 -1
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +1 -1
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.tts.js +1 -1
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +1 -1
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
- package/BookReader/webcomponents-bundle.js +3 -0
- package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
- package/BookReader/webcomponents-bundle.js.map +1 -0
- package/BookReaderDemo/BookReaderDemo.css +14 -1
- package/BookReaderDemo/IADemoBr.js +107 -0
- package/BookReaderDemo/demo-advanced.html +1 -1
- package/BookReaderDemo/demo-autoplay.html +1 -0
- package/BookReaderDemo/demo-embed-iframe-src.html +1 -0
- package/BookReaderDemo/demo-fullscreen-mobile.html +1 -0
- package/BookReaderDemo/demo-fullscreen.html +1 -0
- package/BookReaderDemo/demo-iiif.html +1 -0
- package/BookReaderDemo/demo-internetarchive.html +66 -18
- package/BookReaderDemo/demo-multiple.html +1 -0
- package/BookReaderDemo/demo-preview-pages.html +1 -0
- package/BookReaderDemo/demo-simple.html +1 -0
- package/BookReaderDemo/demo-vendor-fullscreen.html +1 -0
- package/BookReaderDemo/immersion-1up.html +1 -0
- package/BookReaderDemo/immersion-mode.html +1 -0
- package/BookReaderDemo/toggle_controls.html +1 -0
- package/BookReaderDemo/view_mode.html +1 -0
- package/BookReaderDemo/viewmode-cycle.html +1 -2
- package/CHANGELOG.md +114 -0
- package/babel.config.js +18 -0
- package/index.html +3 -0
- package/jsconfig.json +19 -0
- package/package.json +45 -27
- package/src/BookNavigator/assets/button-base.js +8 -1
- package/src/BookNavigator/assets/ia-logo.js +17 -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/book-navigator.js +528 -0
- package/src/BookNavigator/bookmarks/bookmark-button.js +2 -1
- package/src/BookNavigator/bookmarks/bookmark-edit.js +2 -1
- package/src/BookNavigator/bookmarks/bookmarks-list.js +1 -0
- package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +4 -9
- package/src/BookNavigator/bookmarks/bookmarks-provider.js +32 -11
- package/src/BookNavigator/bookmarks/ia-bookmarks.js +88 -43
- package/src/BookNavigator/downloads/downloads-provider.js +22 -16
- package/src/BookNavigator/downloads/downloads.js +16 -23
- package/src/BookNavigator/search/a-search-result.js +1 -0
- package/src/BookNavigator/search/search-provider.js +54 -20
- package/src/BookNavigator/search/search-results.js +7 -18
- package/src/BookNavigator/sharing.js +27 -0
- package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +10 -12
- package/src/BookNavigator/visual-adjustments/visual-adjustments.js +1 -0
- package/src/BookNavigator/volumes/volumes-provider.js +114 -0
- package/src/BookNavigator/volumes/volumes.js +189 -0
- package/src/BookReader/DebugConsole.js +3 -3
- package/src/BookReader/DragScrollable.js +233 -0
- package/src/BookReader/Mode1Up.js +50 -351
- package/src/BookReader/Mode1UpLit.js +434 -0
- package/src/BookReader/Mode2Up.js +94 -72
- package/src/BookReader/ModeSmoothZoom.js +177 -0
- package/src/BookReader/ModeThumb.js +16 -8
- package/src/BookReader/Navbar/Navbar.js +2 -31
- package/src/BookReader/PageContainer.js +47 -2
- package/src/BookReader/ReduceSet.js +1 -1
- package/src/BookReader/Toolbar/Toolbar.js +5 -5
- package/src/BookReader/options.js +10 -0
- package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/src/BookReader/utils.js +68 -13
- package/src/BookReader.js +316 -232
- package/src/assets/icons/close-circle-dark.svg +1 -0
- package/src/assets/icons/voice.svg +1 -0
- package/src/css/BookReader.scss +0 -12
- package/src/css/_BRComponent.scss +1 -1
- package/src/css/_BRmain.scss +19 -24
- package/src/css/_BRnav.scss +4 -26
- package/src/css/_BRpages.scss +35 -0
- package/src/css/_BRsearch.scss +11 -215
- package/src/css/_TextSelection.scss +1 -17
- package/src/css/_controls.scss +16 -3
- package/src/css/_icons.scss +6 -0
- package/src/ia-bookreader/ia-bookreader.js +205 -0
- package/src/plugins/plugin.chapters.js +15 -18
- package/src/plugins/plugin.mobile_nav.js +11 -10
- package/src/plugins/plugin.resume.js +3 -3
- package/src/plugins/plugin.text_selection.js +17 -29
- package/src/plugins/plugin.vendor-fullscreen.js +4 -4
- package/src/plugins/search/plugin.search.js +113 -104
- package/src/plugins/search/view.js +48 -163
- package/src/plugins/tts/AbstractTTSEngine.js +7 -0
- package/src/plugins/tts/FestivalTTSEngine.js +2 -2
- package/src/plugins/tts/WebTTSEngine.js +5 -0
- package/src/plugins/tts/plugin.tts.js +67 -102
- package/src/plugins/url/UrlPlugin.js +184 -0
- package/src/plugins/url/plugin.url.js +220 -0
- package/{src → stat}/BookNavigator/BookModel.js +0 -0
- package/{src → stat}/BookNavigator/BookNavigator.js +151 -104
- package/stat/BookNavigator/assets/bookmark-colors.js +15 -0
- package/stat/BookNavigator/assets/button-base.js +61 -0
- package/stat/BookNavigator/assets/ia-logo.js +17 -0
- package/stat/BookNavigator/assets/icon_checkmark.js +6 -0
- package/stat/BookNavigator/assets/icon_close.js +3 -0
- package/stat/BookNavigator/assets/icon_sort_asc.js +5 -0
- package/stat/BookNavigator/assets/icon_sort_desc.js +5 -0
- package/stat/BookNavigator/assets/icon_sort_neutral.js +5 -0
- package/stat/BookNavigator/assets/icon_volumes.js +11 -0
- package/stat/BookNavigator/bookmarks/bookmark-button.js +64 -0
- package/stat/BookNavigator/bookmarks/bookmark-edit.js +215 -0
- package/stat/BookNavigator/bookmarks/bookmarks-list.js +285 -0
- package/stat/BookNavigator/bookmarks/bookmarks-loginCTA.js +28 -0
- package/stat/BookNavigator/bookmarks/bookmarks-provider.js +56 -0
- package/stat/BookNavigator/bookmarks/ia-bookmarks.js +523 -0
- package/{src → stat}/BookNavigator/br-fullscreen-mgr.js +1 -2
- package/stat/BookNavigator/delete-modal-actions.js +49 -0
- package/stat/BookNavigator/downloads/downloads-provider.js +72 -0
- package/stat/BookNavigator/downloads/downloads.js +139 -0
- package/stat/BookNavigator/provider-config.js +0 -0
- package/stat/BookNavigator/search/a-search-result.js +55 -0
- package/stat/BookNavigator/search/search-provider.js +180 -0
- package/stat/BookNavigator/search/search-results.js +360 -0
- package/stat/BookNavigator/sharing.js +31 -0
- package/stat/BookNavigator/visual-adjustments/visual-adjustments-provider.js +94 -0
- package/stat/BookNavigator/visual-adjustments/visual-adjustments.js +280 -0
- package/stat/BookNavigator/volumes/volumes-provider.js +83 -0
- package/stat/BookNavigator/volumes/volumes.js +178 -0
- package/stat/BookReader/BookModel.js +518 -0
- package/stat/BookReader/DebugConsole.js +54 -0
- package/stat/BookReader/DragScrollable.js +233 -0
- package/stat/BookReader/ImageCache.js +116 -0
- package/stat/BookReader/Mode1Up.js +102 -0
- package/stat/BookReader/Mode1UpLit.js +434 -0
- package/stat/BookReader/Mode2Up.js +1372 -0
- package/stat/BookReader/ModeSmoothZoom.js +177 -0
- package/stat/BookReader/ModeThumb.js +344 -0
- package/stat/BookReader/Navbar/Navbar.js +310 -0
- package/stat/BookReader/PageContainer.js +120 -0
- package/stat/BookReader/ReduceSet.js +26 -0
- package/stat/BookReader/Toolbar/Toolbar.js +384 -0
- package/stat/BookReader/events.js +20 -0
- package/stat/BookReader/options.js +324 -0
- package/stat/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/stat/BookReader/utils/classes.js +36 -0
- package/stat/BookReader/utils.js +240 -0
- package/stat/BookReader.js +2550 -0
- package/{src → stat}/BookReaderComponent/BookReaderComponent.js +16 -11
- package/stat/assets/icons/1up.svg +12 -0
- package/stat/assets/icons/2up.svg +15 -0
- package/stat/assets/icons/advance.svg +26 -0
- package/stat/assets/icons/chevron-right.svg +1 -0
- package/stat/assets/icons/close-circle-dark.svg +1 -0
- package/stat/assets/icons/close-circle.svg +1 -0
- package/stat/assets/icons/fullscreen.svg +17 -0
- package/stat/assets/icons/fullscreen_exit.svg +17 -0
- package/stat/assets/icons/hamburger.svg +15 -0
- package/stat/assets/icons/left-arrow.svg +12 -0
- package/stat/assets/icons/magnify-minus.svg +16 -0
- package/stat/assets/icons/magnify-plus.svg +17 -0
- package/stat/assets/icons/magnify.svg +15 -0
- package/stat/assets/icons/pause.svg +23 -0
- package/stat/assets/icons/play.svg +22 -0
- package/stat/assets/icons/playback-speed.svg +34 -0
- package/stat/assets/icons/read-aloud.svg +22 -0
- package/stat/assets/icons/review.svg +22 -0
- package/stat/assets/icons/thumbnails.svg +17 -0
- package/stat/assets/icons/voice.svg +1 -0
- package/stat/assets/icons/volume-full.svg +22 -0
- package/stat/assets/images/BRicons.png +0 -0
- package/stat/assets/images/BRicons.svg +94 -0
- package/stat/assets/images/BRicons_ia.png +0 -0
- package/stat/assets/images/back_pages.png +0 -0
- package/stat/assets/images/book_bottom_icon.png +0 -0
- package/stat/assets/images/book_down_icon.png +0 -0
- package/stat/assets/images/book_left_icon.png +0 -0
- package/stat/assets/images/book_leftmost_icon.png +0 -0
- package/stat/assets/images/book_right_icon.png +0 -0
- package/stat/assets/images/book_rightmost_icon.png +0 -0
- package/stat/assets/images/book_top_icon.png +0 -0
- package/stat/assets/images/book_up_icon.png +0 -0
- package/stat/assets/images/books_graphic.svg +177 -0
- package/stat/assets/images/booksplit.png +0 -0
- package/stat/assets/images/control_pause_icon.png +0 -0
- package/stat/assets/images/control_play_icon.png +0 -0
- package/stat/assets/images/embed_icon.png +0 -0
- package/stat/assets/images/icon-home-ia.png +0 -0
- package/stat/assets/images/icon_OL-logo-xs.png +0 -0
- package/stat/assets/images/icon_alert-xs.png +0 -0
- package/stat/assets/images/icon_book.svg +12 -0
- package/stat/assets/images/icon_bookmark.svg +12 -0
- package/stat/assets/images/icon_close-pop.png +0 -0
- package/stat/assets/images/icon_download.png +0 -0
- package/stat/assets/images/icon_gear.svg +14 -0
- package/stat/assets/images/icon_hamburger.svg +20 -0
- package/stat/assets/images/icon_home.png +0 -0
- package/stat/assets/images/icon_home.svg +21 -0
- package/stat/assets/images/icon_home_ia.png +0 -0
- package/stat/assets/images/icon_indicator.png +0 -0
- package/stat/assets/images/icon_info.svg +11 -0
- package/stat/assets/images/icon_one_page.svg +8 -0
- package/stat/assets/images/icon_pause.svg +1 -0
- package/stat/assets/images/icon_play.svg +1 -0
- package/stat/assets/images/icon_playback-rate.svg +15 -0
- package/stat/assets/images/icon_return.png +0 -0
- package/stat/assets/images/icon_search_button.svg +8 -0
- package/stat/assets/images/icon_share.svg +9 -0
- package/stat/assets/images/icon_skip-ahead.svg +6 -0
- package/stat/assets/images/icon_skip-back.svg +13 -0
- package/stat/assets/images/icon_speaker.svg +18 -0
- package/stat/assets/images/icon_speaker_open.svg +10 -0
- package/stat/assets/images/icon_thumbnails.svg +12 -0
- package/stat/assets/images/icon_toc.svg +5 -0
- package/stat/assets/images/icon_two_pages.svg +9 -0
- package/stat/assets/images/icon_zoomer.png +0 -0
- package/stat/assets/images/loading.gif +0 -0
- package/stat/assets/images/logo_icon.png +0 -0
- package/stat/assets/images/marker_chap-off.png +0 -0
- package/stat/assets/images/marker_chap-off.svg +11 -0
- package/stat/assets/images/marker_chap-off_ia.png +0 -0
- package/stat/assets/images/marker_chap-on.png +0 -0
- package/stat/assets/images/marker_chap-on.svg +11 -0
- package/stat/assets/images/marker_srch-on.svg +11 -0
- package/stat/assets/images/marker_srchchap-off.png +0 -0
- package/stat/assets/images/marker_srchchap-on.png +0 -0
- package/stat/assets/images/nav_control-dn.png +0 -0
- package/stat/assets/images/nav_control-dn_ia.png +0 -0
- package/stat/assets/images/nav_control-up.png +0 -0
- package/stat/assets/images/nav_control-up_ia.png +0 -0
- package/stat/assets/images/nav_control.png +0 -0
- package/stat/assets/images/one_page_mode_icon.png +0 -0
- package/stat/assets/images/paper-badge.png +0 -0
- package/stat/assets/images/print_icon.png +0 -0
- package/stat/assets/images/progressbar.gif +0 -0
- package/stat/assets/images/right_edges.png +0 -0
- package/stat/assets/images/slider.png +0 -0
- package/stat/assets/images/slider_ia.png +0 -0
- package/stat/assets/images/thumbnail_mode_icon.png +0 -0
- package/stat/assets/images/transparent.png +0 -0
- package/stat/assets/images/two_page_mode_icon.png +0 -0
- package/stat/assets/images/zoom_in_icon.png +0 -0
- package/stat/assets/images/zoom_out_icon.png +0 -0
- package/stat/css/BookReader.scss +89 -0
- package/stat/css/_BRBookmarks.scss +29 -0
- package/stat/css/_BRComponent.scss +13 -0
- package/stat/css/_BRfloat.scss +197 -0
- package/stat/css/_BRicon.scss +48 -0
- package/stat/css/_BRmain.scss +251 -0
- package/stat/css/_BRnav.scss +359 -0
- package/stat/css/_BRpages.scss +139 -0
- package/stat/css/_BRsearch.scss +226 -0
- package/stat/css/_BRtoolbar.scss +84 -0
- package/stat/css/_BRvendor.scss +5 -0
- package/stat/css/_MobileNav.scss +194 -0
- package/stat/css/_TextSelection.scss +32 -0
- package/stat/css/_colorbox.scss +52 -0
- package/stat/css/_controls.scss +253 -0
- package/stat/css/_icons.scss +121 -0
- package/stat/jquery-wrapper.js +4 -0
- package/stat/plugins/plugin.archive_analytics.js +86 -0
- package/stat/plugins/plugin.autoplay.js +129 -0
- package/stat/plugins/plugin.chapters.js +248 -0
- package/stat/plugins/plugin.iframe.js +48 -0
- package/stat/plugins/plugin.mobile_nav.js +288 -0
- package/stat/plugins/plugin.resume.js +68 -0
- package/stat/plugins/plugin.text_selection.js +291 -0
- package/{src → stat}/plugins/plugin.url.js +4 -4
- package/stat/plugins/plugin.vendor-fullscreen.js +247 -0
- package/stat/plugins/search/plugin.search.js +439 -0
- package/stat/plugins/search/view.js +439 -0
- package/stat/plugins/tts/AbstractTTSEngine.js +249 -0
- package/stat/plugins/tts/FestivalTTSEngine.js +169 -0
- package/stat/plugins/tts/PageChunk.js +107 -0
- package/stat/plugins/tts/PageChunkIterator.js +163 -0
- package/stat/plugins/tts/WebTTSEngine.js +357 -0
- package/stat/plugins/tts/plugin.tts.js +357 -0
- package/stat/plugins/tts/tooltip_dict.js +15 -0
- package/stat/plugins/tts/utils.js +91 -0
- package/stat/util/browserSniffing.js +30 -0
- package/stat/util/debouncer.js +26 -0
- package/stat/util/docCookies.js +67 -0
- package/stat/util/strings.js +34 -0
- package/tests/e2e/README.md +37 -0
- package/tests/e2e/autoplay.test.js +2 -2
- package/tests/e2e/base.test.js +5 -7
- package/tests/e2e/helpers/base.js +8 -3
- package/tests/e2e/helpers/debug.js +1 -1
- package/tests/e2e/helpers/desktopSearch.js +1 -1
- package/tests/e2e/helpers/mobileSearch.js +3 -3
- package/tests/e2e/helpers/params.js +17 -0
- package/tests/e2e/rightToLeft.test.js +4 -5
- package/tests/e2e/viewmode.test.js +30 -31
- package/tests/{BookReader → jest/BookReader}/BookModel.test.js +3 -3
- package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +176 -0
- package/tests/{BookReader → jest/BookReader}/DebugConsole.test.js +1 -1
- package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +4 -4
- package/tests/jest/BookReader/Mode1UpLit.test.js +87 -0
- package/tests/{BookReader → jest/BookReader}/Mode2Up.test.js +5 -7
- package/tests/jest/BookReader/ModeSmoothZoom.test.js +149 -0
- package/tests/jest/BookReader/ModeThumb.test.js +71 -0
- package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +7 -7
- package/tests/{BookReader → jest/BookReader}/PageContainer.test.js +74 -2
- package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +1 -1
- package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +2 -2
- package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
- package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +1 -1
- package/tests/jest/BookReader/utils.test.js +136 -0
- package/tests/jest/BookReader.keyboard.test.js +190 -0
- package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +9 -1
- package/tests/{BookReader.test.js → jest/BookReader.test.js} +20 -4
- package/tests/{plugins → jest/plugins}/plugin.archive_analytics.test.js +2 -2
- package/tests/{plugins → jest/plugins}/plugin.autoplay.test.js +2 -2
- package/tests/{plugins → jest/plugins}/plugin.chapters.test.js +8 -8
- package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +2 -2
- package/tests/{plugins → jest/plugins}/plugin.mobile_nav.test.js +5 -5
- package/tests/{plugins → jest/plugins}/plugin.resume.test.js +3 -3
- package/tests/{plugins → jest/plugins}/plugin.text_selection.test.js +14 -24
- package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +2 -2
- package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +12 -5
- package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +6 -6
- package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +3 -3
- package/tests/{plugins → jest/plugins}/tts/FestivalTTSEngine.test.js +4 -4
- package/tests/{plugins → jest/plugins}/tts/PageChunk.test.js +1 -1
- package/tests/{plugins → jest/plugins}/tts/PageChunkIterator.test.js +3 -3
- package/tests/{plugins → jest/plugins}/tts/WebTTSEngine.test.js +1 -1
- package/tests/{plugins → jest/plugins}/tts/utils.test.js +3 -3
- package/tests/jest/plugins/url/UrlPlugin.test.js +175 -0
- package/tests/{plugins → jest/plugins/url}/plugin.url.test.js +33 -14
- package/tests/{util → jest/util}/browserSniffing.test.js +1 -1
- package/tests/{util → jest/util}/docCookies.test.js +1 -1
- package/tests/{util → jest/util}/strings.test.js +1 -1
- package/tests/{utils.js → jest/utils.js} +38 -0
- package/tests/karma/BookNavigator/book-navigator.test.js +485 -0
- package/tests/karma/BookNavigator/bookmarks/bookmark-button.test.js +44 -0
- package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +1 -3
- package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +1 -2
- package/tests/karma/BookNavigator/downloads/downloads-provider.test.js +67 -0
- package/tests/karma/BookNavigator/downloads/downloads.test.js +54 -0
- package/tests/karma/BookNavigator/search/search-provider.test.js +123 -0
- package/tests/karma/BookNavigator/{search-results.test.js → search/search-results.test.js} +1 -4
- package/tests/karma/BookNavigator/sharing/sharing-provider.test.js +49 -0
- package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -2
- package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +184 -0
- package/tests/karma/BookNavigator/volumes/volumes.test.js +98 -0
- package/webpack.config.js +10 -4
- package/.babelrc +0 -12
- package/.dependabot/config.yml +0 -6
- package/.testcaferc.json +0 -5
- package/BookReader/bookreader-component-bundle.js +0 -1450
- package/BookReader/bookreader-component-bundle.js.map +0 -1
- package/BookReader/plugins/plugin.menu_toggle.js +0 -2
- package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
- package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
- package/src/BookNavigator/assets/book-loader.js +0 -27
- package/src/ItemNavigator/ItemNavigator.js +0 -372
- package/src/ItemNavigator/providers/sharing.js +0 -29
- package/src/dragscrollable-br.js +0 -261
- package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
- package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
- package/tests/BookReader/Mode1Up.test.js +0 -164
- package/tests/BookReader/utils.test.js +0 -109
- package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
@@ -1,2 +0,0 @@
|
|
1
|
-
(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[777],{3504:function(e,n,o){"use strict";o(9600);var t=o(3609),i=o(3609);!function(){t.extend(BookReader.defaultOptions,{enableMenuToggle:!0});var e=!1;function n(e){e.refs&&e.refs.$BRnav&&e.refs.$BRnav.children(".BRnavCntl").css("display","none")}var o,r,a=!1,s=function(n,o,t){if(!e){var r,s,c=(r=document.querySelector(".BRcontainer")).scrollWidth>r.offsetWidth?n.refs.$brContainer[0]:o.currentTarget,d=n.constMode1up===n.mode||function(e,n){var o=e.clientX,t=n.offsetWidth,i=n.offsetLeft,r=Math.round(t/3),a=Math.round(r+i),s=Math.round(t-r+i);return o>a&&o<s}(o,c);(t?d:(s=o.target,i(s).hasClass("BookReader")||i(s).hasClass("BRcontainer")||i(s).hasClass("BRemptypage")||i(s).hasClass("BRpageview")||i(s).hasClass("BRtwopageview")))&&(function(e){a||(a=!0,i(document).on("BookReader:navToggled",(function e(){a=!1,window.removeEventListener("BookReader:navToggled",e)})),e.navigationIsVisible()?e.hideNavigation():e.showNavigation())}(n),t&&o.stopPropagation())}};function c(e,n){s(e,n)}function d(e,n){s(e,n,!0)}function u(n){var t=document.querySelector(".BookReader");if(t){t.addEventListener("click",c.bind(null,n),{capture:!0,passive:!0});var i=(document.querySelector(".BRcontainer")||{}).firstChild;i&&(i.addEventListener("click",d.bind(null,n),!0),function(){var n=document.querySelector(".BookReader");n&&(n.addEventListener("mousedown",(function(n){o=n.screenX,r=n.screenY,e=!0}),!0),n.addEventListener("mouseup",(function(n){Math.abs(o-n.screenX)>5||Math.abs(r-n.screenY)>5||(e=!1,o=0,r=0)}),!0))}())}}var f,l=function(e){var o=!1;try{o=e.navigationIsVisible()}catch(e){o=!1}if(o){var t=function(n){u(e)},r=function(o){!function(e){n(e),u(e)}(e)};i(document).on(["BookReader:3PageViewSelected"].join(" "),(function(o){!function(e){n(e),function(e){e.refs.$brPageViewEl&&e.refs.$brPageViewEl[0].removeEventListener("click",d,!0),e.refs.$brTwoPageView&&e.refs.$brTwoPageView[0].removeEventListener("click",d,!0)}(e),e.showNavigation()}(e)})),i(document).on(["BookReader:1PageViewSelected","BookReader:2PageViewSelected","BookReader:zoomIn","BookReader:zoomOut","BookReader:resize"].join(" "),t),i(window).on("orientationchange",t),i(document).on("BookReader:fullscreenToggled",r),i(window).on("DOMContentLoaded",r),r()}};BookReader.prototype.setup=(f=BookReader.prototype.setup,function(e){f.call(this,e)}),BookReader.prototype.init=function(e){return function(){e.call(this),this.options.enableMenuToggle&&l(this)}}(BookReader.prototype.init)}()}},function(e){"use strict";e(e.s=3504)}]);
|
2
|
-
//# sourceMappingURL=plugin.menu_toggle.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["webpack://@internetarchive/bookreader/./src/plugins/menu_toggle/plugin.menu_toggle.js"],"names":["jQuery","extend","BookReader","defaultOptions","enableMenuToggle","holdOffOnToggle","hideArrow","br","refs","$BRnav","children","css","initialX","initialY","togglingNav","toggleRouter","e","atBookCenter","brContainer","element","book","document","querySelector","scrollWidth","offsetWidth","$brContainer","currentTarget","validBookClick","constMode1up","mode","event","clickPosition","clientX","bookWidth","leftOffset","offsetLeft","bookEndPageFlipArea","Math","round","leftThreshold","rightThreshold","isCenterClick","target","$","hasClass","on","navToggled","window","removeEventListener","navigationIsVisible","hideNavigation","showNavigation","toggleNav","stopPropagation","onBackgroundClick","onBookClick","registerClickHandlers","background","addEventListener","bind","capture","passive","firstChild","screenX","screenY","abs","registerDragHandlers","super_","installMenuToggle","hasNav","error","menuToggleEventRegister","setupDOMandHandlers","setupNavForToggle","join","$brPageViewEl","$brTwoPageView","removeClickHandlers","alwaysShowNav","prototype","setup","options","call","this","init"],"mappings":"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","file":"plugins/plugin.menu_toggle.js","sourcesContent":["\n/* global BookReader */\n/**\n * Plugin for managing menu visibility\n * Enabling this plug-in:\n * + removes the \"menu tab\" triangle\n * + toggles nav at: book center tap/click\n * + toggles nav at: black background tap/click\n *\n * Handles to events at CAPTURE phase\n *\n * This uses core BookReader functions and parameters to check its UI state:\n * - br.refs = (at best) ui references that are present at any given time\n * - br.navigationIsVisible() - checks using refs to confirm the navbar's presence\n * - br.showNavigation() & br.hideNavigation()\n * - br.constMode1up checks against br.mode;\n *\n * The list of BookReader custom events this plugin taps into are mainly\n * listed in the `.init` function\n */\n\n(function addMenuToggler() {\n jQuery.extend(BookReader.defaultOptions, {\n enableMenuToggle: true\n });\n\n /**\n * `holdOffOnToggle` is used in fn `toggleRouter`\n * to determine if menu toggle should happen\n * set by `registerDragHandlers`\n */\n let holdOffOnToggle = false;\n\n /**\n * Hides Nav arrow tab\n *\n * @param { object } br - BookReader instance\n */\n function hideArrow(br) {\n if (!br.refs || !br.refs.$BRnav) {\n return;\n }\n const $menuTab = br.refs.$BRnav.children('.BRnavCntl');\n $menuTab.css('display', 'none');\n }\n\n /**\n * Sets up nav - hides arrow tab & adds click events\n *\n * @param { object } br - BookReader instance\n */\n function setupNavForToggle(br) {\n hideArrow(br);\n registerClickHandlers(br);\n }\n\n /**\n * Resets nav to always show\n * hides arrow tab, removes click events, shows nav chrome\n *\n * @param { object } br - BookReader instance\n */\n function alwaysShowNav(br) {\n hideArrow(br);\n removeClickHandlers(br);\n br.showNavigation();\n }\n\n /**\n * Removes click handlers on elements that house the book pages\n *\n * @param { object } br - BookReader instance\n */\n const removeClickHandlers = function removeClickHandlers(br) {\n if (br.refs.$brPageViewEl) {\n br.refs.$brPageViewEl[0].removeEventListener('click', onBookClick, true);\n }\n if (br.refs.$brTwoPageView) {\n br.refs.$brTwoPageView[0].removeEventListener('click', onBookClick, true);\n }\n }\n\n /**\n * Toggle functionality\n * Responsible for calling native functions `hideNavigation` & `showNavigation`\n * Makes sure only 1 toggle action is taken at a time using `togglingNav` switch.\n *\n * @params { object } br - bookreader instance\n */\n let togglingNav = false; /* flag to make sure animations only fire once */\n const toggleNav = function toggleNav(br) {\n if (togglingNav) {\n return;\n }\n\n togglingNav = true;\n const navToggled = function navToggled() {\n togglingNav = false;\n window.removeEventListener('BookReader:navToggled', navToggled);\n };\n $(document).on('BookReader:navToggled', navToggled);\n\n const menuIsShowing = br.navigationIsVisible();\n if (menuIsShowing) {\n br.hideNavigation();\n } else {\n br.showNavigation();\n }\n }\n\n /**\n * Check if div `BRcontainer` is scrollable.\n * This normally happens when bookreader is zoomed in.\n * not using br.refs, because `scrollWidth` & `offsetWidth` is not easily accessible.\n */\n const isBRcontainerScrollable = function isBRcontainerScrollable() {\n const brContainer = document.querySelector('.BRcontainer');\n const scrollWidth = brContainer.scrollWidth;\n const offsetWidth = brContainer.offsetWidth;\n\n return scrollWidth > offsetWidth;\n }\n\n /**\n * Confirms whether or not the click happened in the nav toggle zone\n *\n * @param { MouseEvent } event - JS click event object\n * @param { DOM } book - DOM element that represents book\n */\n const isCenterClick = function isCenterClick(event, book) {\n const clickPosition = event.clientX;\n const bookWidth = book.offsetWidth;\n const leftOffset = book.offsetLeft\n const bookEndPageFlipArea = Math.round(bookWidth / 3);\n const leftThreshold = Math.round(bookEndPageFlipArea + leftOffset); // without it, the click area is small\n const rightThreshold = Math.round(bookWidth - bookEndPageFlipArea + leftOffset);\n const isOkOnRight = clickPosition > leftThreshold;\n const isOkOnLeft = clickPosition < rightThreshold;\n const isCenterClick = isOkOnRight && isOkOnLeft;\n\n return isCenterClick;\n }\n\n /**\n * Confirms whether or not the click happened in the background\n *\n * @param { DOM } element\n */\n const isBackground = function isBackground(element) {\n const isBackgroundClick = $(element).hasClass('BookReader')\n || $(element).hasClass('BRcontainer') /* main black theatre */\n || $(element).hasClass('BRemptypage') /* empty page placeholder */\n || $(element).hasClass('BRpageview') /* empty page placeholder, 1up */\n || $(element).hasClass('BRtwopageview'); /* empty page placeholder, 2up */\n return isBackgroundClick;\n };\n\n /**\n * Main hook into toggle functionality\n * This is the only function that should be called by the event handlers\n *\n * @param { object } br - BookReader instance\n * @param { MouseEvent } e - JS event object\n * @param { boolean } atBookCenter - optional\n */\n const toggleRouter = function toggleRouter (br, e, atBookCenter) {\n if (holdOffOnToggle) {\n return;\n }\n\n const book = isBRcontainerScrollable() ? br.refs.$brContainer[0] : e.currentTarget;\n const is1UpMode = br.constMode1up === br.mode;\n const validBookClick = is1UpMode || isCenterClick(e, book);\n const isValidClickArea = atBookCenter ? validBookClick : isBackground(e.target);\n if (isValidClickArea) {\n toggleNav(br, atBookCenter);\n\n if (atBookCenter) {\n e.stopPropagation(); // don't turn the page. this takes prescendence\n }\n }\n }\n\n /**\n * background click event handler\n * @param { object } br - BookReader instance\n * @param { MouseEvent } e - JS event object\n */\n function onBackgroundClick(br, e) {\n toggleRouter(br, e);\n }\n\n /**\n * actual book container click event handler\n *\n * @param { object } br - BookReader instance\n * @param { MouseEvent } e - JS event object\n */\n function onBookClick(br, e) {\n\n const atBookCenter = true;\n toggleRouter(br, e, atBookCenter);\n }\n\n let initialX;\n let initialY;\n /**\n * attaches mouseup & mousedown event handlers to assess if user is dragging\n * sets `initialX`, `initialY`, and `holdOffOnToggle`\n */\n function registerDragHandlers() {\n const background = document.querySelector('.BookReader');\n if (!background) {\n return;\n }\n\n background.addEventListener('mousedown', function (e) {\n initialX = e.screenX;\n initialY = e.screenY;\n\n holdOffOnToggle = true;\n }, true);\n background.addEventListener('mouseup', function (e) {\n const isDrag = (Math.abs(initialX - e.screenX) > 5 || Math.abs(initialY - e.screenY) > 5);\n\n if (!isDrag) {\n holdOffOnToggle = false;\n initialX = 0;\n initialY = 0;\n }\n }, true);\n }\n\n /**\n * attaches click handlers to background & book\n * @param { object } br - BookReader instance\n */\n function registerClickHandlers(br) {\n const background = document.querySelector('.BookReader');\n if (!background) {\n return;\n }\n\n background.addEventListener('click', onBackgroundClick.bind(null, br), { capture: true, passive: true });\n\n const desk = document.querySelector('.BRcontainer') || {};\n const book = desk.firstChild;\n\n if (book) {\n book.addEventListener('click', onBookClick.bind(null, br), true);\n registerDragHandlers();\n }\n }\n\n /**\n * Install menu toggle\n * attaches event handlers, sets up DOM on load\n */\n const installMenuToggle = function installMenuToggle(br) {\n let hasNav = false;\n\n try {\n hasNav = br.navigationIsVisible();\n } catch (error) {\n hasNav = false;\n }\n\n if (!hasNav) {\n return;\n }\n\n const menuToggleEventRegister = function menuToggleEventRegister(e) {\n registerClickHandlers(br);\n };\n\n const setupDOMandHandlers = function setupDOMandHandlers(e) {\n setupNavForToggle(br);\n };\n\n const persistNav = function persistNav(e) {\n alwaysShowNav(br);\n };\n\n const whenToToggleNav = [\n 'BookReader:1PageViewSelected',\n 'BookReader:2PageViewSelected',\n 'BookReader:zoomIn',\n 'BookReader:zoomOut',\n 'BookReader:resize'\n ];\n\n const whenTolwaysShowNavWhen = [\n 'BookReader:3PageViewSelected'\n ];\n\n $(document).on(whenTolwaysShowNavWhen.join(' '), persistNav);\n $(document).on(whenToToggleNav.join(' '), menuToggleEventRegister);\n $(window).on('orientationchange', menuToggleEventRegister);\n $(document).on('BookReader:fullscreenToggled', setupDOMandHandlers);\n $(window).on('DOMContentLoaded', setupDOMandHandlers);\n setupDOMandHandlers();\n };\n\n /**\n * Add to BookReader\n */\n BookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n };\n })(BookReader.prototype.setup);\n\n /**\n * Initialize plugin\n */\n BookReader.prototype.init = (function(super_) {\n return function() {\n super_.call(this);\n if (this.options.enableMenuToggle) {\n installMenuToggle(this);\n }\n };\n })(BookReader.prototype.init);\n})();\n"],"sourceRoot":""}
|
@@ -1,34 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>bookreader demo</title>
|
5
|
-
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
7
|
-
<meta name="apple-mobile-web-app-capable" content="yes">
|
8
|
-
|
9
|
-
<!-- JS dependencies -->
|
10
|
-
<script src="../BookReader/jquery-1.10.1.js"></script>
|
11
|
-
|
12
|
-
|
13
|
-
<!-- BookReader and plugins -->
|
14
|
-
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
|
15
|
-
<script src="../BookReader/BookReader.js"></script>
|
16
|
-
<script type="text/javascript" src="../BookReader/plugins/plugin.url.js"></script>
|
17
|
-
<script type="text/javascript" src="../BookReader/plugins/plugin.menu_toggle.js"></script>
|
18
|
-
|
19
|
-
<!-- Custom CSS overrides -->
|
20
|
-
<link rel="stylesheet" href="BookReaderDemo.css"/>
|
21
|
-
</head>
|
22
|
-
<body>
|
23
|
-
<div id="BookReader">
|
24
|
-
Internet Archive BookReader Demo<br/>
|
25
|
-
plugin: Fullscreen menu toggle<br/>
|
26
|
-
<noscript>
|
27
|
-
<p>
|
28
|
-
The BookReader requires JavaScript to be enabled. Please check that your browser supports JavaScript and that it is enabled in the browser settings. You can also try one of the <a href="https://archive.org/details/goodytwoshoes00newyiala"> other formats of the book</a>.
|
29
|
-
</p>
|
30
|
-
</noscript>
|
31
|
-
</div>
|
32
|
-
<script type="text/javascript" src="BookReaderJSAdvanced.js"></script>
|
33
|
-
</body>
|
34
|
-
</html>
|
@@ -1,27 +0,0 @@
|
|
1
|
-
import { html } from 'lit-element';
|
2
|
-
|
3
|
-
export default html`
|
4
|
-
<svg
|
5
|
-
height="100"
|
6
|
-
viewBox="0 0 100 100"
|
7
|
-
width="100"
|
8
|
-
xmlns="http://www.w3.org/2000/svg"
|
9
|
-
aria-labelledby="bookreader-loading"
|
10
|
-
>
|
11
|
-
<title id="bookreader-loading">Currently loading viewer.</title>
|
12
|
-
<desc>Please wait while we load book reader.</desc>
|
13
|
-
<g fill="#333" fill-rule="evenodd" class="book-icon">
|
14
|
-
<g transform="matrix(1 0 0 -1 28 67.362264)">
|
15
|
-
<path d="m44.71698 31.6981124v-29.99320678s-18.0956599.30735848-18.6322637-.7171698c-.0633962-.12226414-1.890566-.59207545-2.9745282-.59207545-1.3228302 0-3.5122641 0-4.1286791.74547168-.9707547 1.17452827-18.82811278.71660375-18.82811278.71660375v30.040754l1.83849052.7867924.29094339-28.48188608s15.94981097.15339622 17.09094297-1.10716978c.8145283-.90056602 4.997547-.91641507 5.3450942-.3526415.9611321 1.55716977 14.7101883 1.31716978 17.6077354 1.45981128l.3266038 28.22830118z"/>
|
16
|
-
<path d="m40.1129424 33.5957539h-12.8337733c-1.8690565 0-3.1098112-.7545283-3.9299999-1.6279245v-26.70452764l1.2362264-.00792453c.4584906.72962262 3.0922641 1.39415091 3.0922641 1.39415091h10.1298111s1.0381131.01754717 1.5141509.47377357c.5643396.54056602.7913207 1.36981129.7913207 1.36981129z"/>
|
17
|
-
<path d="m17.3354713 33.5957539h-12.8337733v-25.37660316s0-.75283017.49358489-1.14113205c.52867924-.41433961 1.3415094-.42849055 1.3415094-.42849055h10.59905631s2.2075471-.52698112 3.0928301-1.39415091l1.2.00792453v26.74245214c-.8201886.8581132-2.0530188 1.59-3.8932074 1.59"/>
|
18
|
-
</g>
|
19
|
-
<path
|
20
|
-
class="ring"
|
21
|
-
d="m17.8618849 11.6970233c18.5864635-15.59603144 45.6875867-15.59603102 64.2740497.000001 1.9271446 1.6170806 2.1785128 4.4902567.5614466 6.4174186-1.6170661 1.9271618-4.4902166 2.1785323-6.4173612.5614517-15.1996922-12.75416882-37.3625282-12.75416916-52.5622206-.000001-15.19969387 12.7541707-19.04823077 34.5805019-9.1273354 51.7641499 9.9208955 17.183646 30.7471499 24.7638499 49.3923323 17.9774983 18.6451823-6.7863521 29.7266014-25.9801026 26.2811129-45.5206248-.436848-2.4775114 1.2174186-4.8400696 3.6949079-5.2769215 2.4774893-.4368518 4.8400264 1.2174296 5.2768744 3.694941 4.2132065 23.8945096-9.3373563 47.3649806-32.137028 55.6634567-22.799672 8.2984758-48.2663986-.9707372-60.39785211-21.9832155-12.1314534-21.012481-7.42539173-47.7021198 11.16107351-63.2981544z"
|
22
|
-
fill-rule="nonzero"
|
23
|
-
/>
|
24
|
-
</g>
|
25
|
-
</svg>
|
26
|
-
`;
|
27
|
-
|
@@ -1,372 +0,0 @@
|
|
1
|
-
import { css, html, LitElement } from "lit-element";
|
2
|
-
import { nothing } from "lit-html";
|
3
|
-
import { IAMenuSlider } from "@internetarchive/ia-menu-slider";
|
4
|
-
import IAIcon from "@internetarchive/ia-icons";
|
5
|
-
import { ModalConfig } from "@internetarchive/modal-manager";
|
6
|
-
|
7
|
-
export default class ItemNavigator extends LitElement {
|
8
|
-
static get properties() {
|
9
|
-
return {
|
10
|
-
baseHost: { type: String },
|
11
|
-
item: {
|
12
|
-
type: Object,
|
13
|
-
converter(value) {
|
14
|
-
return !value ? {} : JSON.parse(atob(value));
|
15
|
-
},
|
16
|
-
},
|
17
|
-
itemType: { type: String },
|
18
|
-
menuShortcuts: {
|
19
|
-
type: Array,
|
20
|
-
hasChanged(newVal, oldVal) {
|
21
|
-
if (newVal !== oldVal) {
|
22
|
-
return true;
|
23
|
-
}
|
24
|
-
return false;
|
25
|
-
},
|
26
|
-
},
|
27
|
-
menuOpened: { type: Boolean },
|
28
|
-
menuContents: { type: Array },
|
29
|
-
openMenu: { type: String },
|
30
|
-
signedIn: {
|
31
|
-
type: Boolean,
|
32
|
-
converter: (arg) => {
|
33
|
-
if (typeof (arg) === 'boolean') {
|
34
|
-
return arg;
|
35
|
-
}
|
36
|
-
return arg === 'true';
|
37
|
-
},
|
38
|
-
},
|
39
|
-
viewportInFullscreen: { type: Boolean },
|
40
|
-
};
|
41
|
-
}
|
42
|
-
|
43
|
-
constructor() {
|
44
|
-
/** TODO: Request BookModel.js
|
45
|
-
* Request BookNavigator.js
|
46
|
-
* Show loading spinner
|
47
|
-
* When JS assets loaded:
|
48
|
-
* - render book-navigator component
|
49
|
-
*/
|
50
|
-
super();
|
51
|
-
this.baseHost = 'archive.org';
|
52
|
-
this.item = {};
|
53
|
-
this.itemType = '';
|
54
|
-
this.menuOpened = false;
|
55
|
-
this.signedIn = false;
|
56
|
-
this.menuShortcuts = [];
|
57
|
-
this.menuContents = [];
|
58
|
-
this.viewportInFullscreen = false;
|
59
|
-
this.openMenu = '';
|
60
|
-
this.renderModalManager();
|
61
|
-
}
|
62
|
-
|
63
|
-
showItemNavigatorModal({ detail }) {
|
64
|
-
this.modal.showModal({
|
65
|
-
config: this.modalConfig,
|
66
|
-
customModalContent: detail.customModalContent,
|
67
|
-
});
|
68
|
-
}
|
69
|
-
|
70
|
-
closeItemNavigatorModal() {
|
71
|
-
this.modal.closeModal();
|
72
|
-
}
|
73
|
-
|
74
|
-
/**
|
75
|
-
* Event handler - handles viewport slot going into fullscreen
|
76
|
-
* @param {Event} e - custom event object
|
77
|
-
*/
|
78
|
-
manageViewportFullscreen({ detail }) {
|
79
|
-
const { isFullScreen } = detail;
|
80
|
-
this.viewportInFullscreen = isFullScreen;
|
81
|
-
}
|
82
|
-
|
83
|
-
/**
|
84
|
-
* Event handler - handles viewport slot going into fullscreen
|
85
|
-
* @param {Event} e - custom event object
|
86
|
-
* @param {object} event.detail - custom event detail
|
87
|
-
* @param {string} detail.action - open, toggle, close
|
88
|
-
* @param {string} detail.menuId - menu id to be shown
|
89
|
-
*/
|
90
|
-
manageSideMenuEvents({ detail }) {
|
91
|
-
const { action = '', menuId = '' } = detail;
|
92
|
-
if (menuId) {
|
93
|
-
if (action === 'open') {
|
94
|
-
this.openShortcut(menuId);
|
95
|
-
} else if (action === 'toggle') {
|
96
|
-
this.openMenu = menuId;
|
97
|
-
this.toggleMenu();
|
98
|
-
}
|
99
|
-
}
|
100
|
-
}
|
101
|
-
|
102
|
-
toggleMenu() {
|
103
|
-
this.menuOpened = !this.menuOpened;
|
104
|
-
}
|
105
|
-
|
106
|
-
closeMenu() {
|
107
|
-
this.menuOpened = false;
|
108
|
-
}
|
109
|
-
|
110
|
-
/**
|
111
|
-
* Opens menu to selected menu
|
112
|
-
* @param {string} selectedMenuId
|
113
|
-
*/
|
114
|
-
openShortcut(selectedMenuId = '') {
|
115
|
-
// open sidemenu to proper tab
|
116
|
-
this.openMenu = selectedMenuId;
|
117
|
-
this.menuOpened = true;
|
118
|
-
}
|
119
|
-
|
120
|
-
setOpenMenu({ detail }) {
|
121
|
-
const { id } = detail;
|
122
|
-
this.openMenu = id === this.openMenu ? '' : id;
|
123
|
-
}
|
124
|
-
|
125
|
-
setMenuContents({ detail }) {
|
126
|
-
this.menuContents = [...detail];
|
127
|
-
}
|
128
|
-
|
129
|
-
setMenuShortcuts({ detail }) {
|
130
|
-
this.menuShortcuts = [...detail];
|
131
|
-
}
|
132
|
-
|
133
|
-
/**
|
134
|
-
* computes classes for item-navigator <section> node
|
135
|
-
*/
|
136
|
-
get menuClass() {
|
137
|
-
const drawerState = this.menuOpened ? 'open' : '';
|
138
|
-
const fullscreenState = this.viewportInFullscreen ? 'fullscreen' : '';
|
139
|
-
return `${drawerState} ${fullscreenState}`;
|
140
|
-
}
|
141
|
-
|
142
|
-
get menuToggleButton() {
|
143
|
-
return html`
|
144
|
-
<button class="toggle-menu" @click=${this.toggleMenu.bind(this)}>
|
145
|
-
<div>
|
146
|
-
<ia-icon icon="ellipses" style="width: var(--iconWidth); height: var(--iconHeight);"></ia-icon>
|
147
|
-
</div>
|
148
|
-
</button>
|
149
|
-
`;
|
150
|
-
}
|
151
|
-
|
152
|
-
get menuSlider() {
|
153
|
-
return html`
|
154
|
-
<div id="menu">
|
155
|
-
<ia-menu-slider
|
156
|
-
.menus=${this.menuContents}
|
157
|
-
.open=${true}
|
158
|
-
.selectedMenu=${this.openMenu}
|
159
|
-
@menuTypeSelected=${this.setOpenMenu}
|
160
|
-
@menuSliderClosed=${this.closeMenu}
|
161
|
-
?manuallyHandleClose=${true}
|
162
|
-
?animateMenuOpen=${false}
|
163
|
-
></ia-menu-slider>
|
164
|
-
</div>
|
165
|
-
`;
|
166
|
-
}
|
167
|
-
|
168
|
-
/**
|
169
|
-
* Returns the shortcut buttons for minimized view
|
170
|
-
* @return html
|
171
|
-
*/
|
172
|
-
get shortcuts() {
|
173
|
-
// todo: aria tags
|
174
|
-
const shortcuts = this.menuShortcuts.map(({
|
175
|
-
icon,
|
176
|
-
id,
|
177
|
-
}) => html`
|
178
|
-
<button class="shortcut ${id}" @click="${(e) => { this.openShortcut(id); }}">
|
179
|
-
${icon}
|
180
|
-
</button>
|
181
|
-
`);
|
182
|
-
|
183
|
-
return html`<div class="shortcuts">${shortcuts}</div>`;
|
184
|
-
}
|
185
|
-
|
186
|
-
/**
|
187
|
-
* Returns the side menu given it's open/close state
|
188
|
-
* @return html
|
189
|
-
*/
|
190
|
-
get renderSideMenu() {
|
191
|
-
// todo: aria tags
|
192
|
-
return html`
|
193
|
-
<nav>
|
194
|
-
<div class="minimized">
|
195
|
-
${this.shortcuts}
|
196
|
-
${this.menuToggleButton}
|
197
|
-
</div>
|
198
|
-
${this.menuSlider}
|
199
|
-
</nav>
|
200
|
-
`;
|
201
|
-
}
|
202
|
-
|
203
|
-
/**
|
204
|
-
* Given a itemType, this chooses the proper viewport component
|
205
|
-
* @return html
|
206
|
-
*/
|
207
|
-
get renderViewport() {
|
208
|
-
if (this.itemType === 'bookreader') {
|
209
|
-
return html`
|
210
|
-
<book-navigator
|
211
|
-
.baseHost=${this.baseHost}
|
212
|
-
.book=${this.item}
|
213
|
-
?signedIn=${this.signedIn}
|
214
|
-
?sideMenuOpen=${this.menuOpened}
|
215
|
-
@ViewportInFullScreen=${this.manageViewportFullscreen}
|
216
|
-
@updateSideMenu=${this.manageSideMenuEvents}
|
217
|
-
@menuUpdated=${this.setMenuContents}
|
218
|
-
@menuShortcutsUpdated=${this.setMenuShortcuts}
|
219
|
-
@showItemNavigatorModal=${this.showItemNavigatorModal}
|
220
|
-
@closeItemNavigatorModal=${this.closeItemNavigatorModal}
|
221
|
-
>
|
222
|
-
<div slot="bookreader">
|
223
|
-
<slot name="bookreader"></slot>
|
224
|
-
</div>
|
225
|
-
</book-navigator>
|
226
|
-
`;
|
227
|
-
}
|
228
|
-
return html`<div class="viewport"></div>`;
|
229
|
-
}
|
230
|
-
|
231
|
-
renderModalManager() {
|
232
|
-
this.modal = document.createElement('modal-manager');
|
233
|
-
this.modal.setAttribute('id', 'item-navigator-modal');
|
234
|
-
this.modalConfig = new ModalConfig();
|
235
|
-
this.modalConfig.title = 'Delete Bookmark';
|
236
|
-
this.modalConfig.headline = 'This bookmark contains a note. Deleting it will permanently delete the note. Are you sure?';
|
237
|
-
this.modalConfig.headerColor = '#194880';
|
238
|
-
document.body.appendChild(this.modal);
|
239
|
-
}
|
240
|
-
|
241
|
-
render() {
|
242
|
-
const renderMenu = this.menuContents.length || this.menuShortcuts.length;
|
243
|
-
return html`
|
244
|
-
<div id="frame" class=${this.menuClass}>
|
245
|
-
<slot name="item-nav-header"></slot>
|
246
|
-
<div class="menu-and-reader">
|
247
|
-
${renderMenu ? this.renderSideMenu : nothing}
|
248
|
-
<div id="reader">
|
249
|
-
${this.renderViewport}
|
250
|
-
</div>
|
251
|
-
</div>
|
252
|
-
</div>
|
253
|
-
`;
|
254
|
-
}
|
255
|
-
|
256
|
-
static get styles() {
|
257
|
-
const subnavWidth = css`var(--menuWidth, 320px)`;
|
258
|
-
const tabletPlusQuery = css`@media (min-width: 640px)`;
|
259
|
-
const transitionTiming = css`var(--animationTiming, 200ms)`;
|
260
|
-
const transitionEffect = css`transform ${transitionTiming} ease-out`;
|
261
|
-
|
262
|
-
return css`
|
263
|
-
#frame {
|
264
|
-
position: relative;
|
265
|
-
overflow: hidden;
|
266
|
-
}
|
267
|
-
|
268
|
-
#frame.fullscreen,
|
269
|
-
#frame.fullscreen #reader {
|
270
|
-
height: 100vh;
|
271
|
-
}
|
272
|
-
|
273
|
-
button {
|
274
|
-
cursor: pointer;
|
275
|
-
padding: 0;
|
276
|
-
border: 0;
|
277
|
-
}
|
278
|
-
|
279
|
-
button:focus,
|
280
|
-
button:active {
|
281
|
-
outline: none;
|
282
|
-
}
|
283
|
-
|
284
|
-
.menu-and-reader {
|
285
|
-
position: relative;
|
286
|
-
}
|
287
|
-
|
288
|
-
nav button {
|
289
|
-
background: none;
|
290
|
-
}
|
291
|
-
|
292
|
-
nav .minimized {
|
293
|
-
background: rgba(0, 0, 0, .7);
|
294
|
-
border-bottom-right-radius: 5%;
|
295
|
-
position: absolute;
|
296
|
-
padding-top: .6rem;
|
297
|
-
left: 0;
|
298
|
-
width: 4rem;
|
299
|
-
z-index: 2;
|
300
|
-
}
|
301
|
-
|
302
|
-
nav .minimized button {
|
303
|
-
width: var(--iconWidth);
|
304
|
-
height: var(--iconHeight);
|
305
|
-
margin: auto;
|
306
|
-
display: inline-flex;
|
307
|
-
vertical-align: middle;
|
308
|
-
-webkit-box-align: center;
|
309
|
-
align-items: center;
|
310
|
-
-webkit-box-pack: center;
|
311
|
-
justify-content: center;
|
312
|
-
width: 4rem;
|
313
|
-
height: 4rem;
|
314
|
-
}
|
315
|
-
|
316
|
-
nav .minimized button.toggle-menu > * {
|
317
|
-
border: 2px solid var(--iconStrokeColor);
|
318
|
-
border-radius: var(--iconWidth);
|
319
|
-
width: var(--iconWidth);
|
320
|
-
height: var(--iconHeight);
|
321
|
-
margin: auto;
|
322
|
-
}
|
323
|
-
|
324
|
-
#menu {
|
325
|
-
position: absolute;
|
326
|
-
top: 0;
|
327
|
-
bottom: 0;
|
328
|
-
left: 0;
|
329
|
-
z-index: 3;
|
330
|
-
overflow: hidden;
|
331
|
-
transform: translateX(-${subnavWidth});
|
332
|
-
width: ${subnavWidth};
|
333
|
-
transform: translateX(calc(${subnavWidth} * -1));
|
334
|
-
transition: ${transitionEffect};
|
335
|
-
}
|
336
|
-
|
337
|
-
#reader {
|
338
|
-
position: relative;
|
339
|
-
z-index: 1;
|
340
|
-
transition: ${transitionEffect};
|
341
|
-
transform: translateX(0);
|
342
|
-
width: 100%;
|
343
|
-
}
|
344
|
-
|
345
|
-
.open #menu {
|
346
|
-
width: ${subnavWidth};
|
347
|
-
transform: translateX(0);
|
348
|
-
transition: ${transitionEffect};
|
349
|
-
}
|
350
|
-
|
351
|
-
${tabletPlusQuery} {
|
352
|
-
.open #reader {
|
353
|
-
transition: ${transitionEffect};
|
354
|
-
transform: translateX(${subnavWidth});
|
355
|
-
width: calc(100% - ${subnavWidth});
|
356
|
-
}
|
357
|
-
}
|
358
|
-
|
359
|
-
#loading-indicator {
|
360
|
-
display: none;
|
361
|
-
}
|
362
|
-
|
363
|
-
#loading-indicator.visible {
|
364
|
-
display: block;
|
365
|
-
}
|
366
|
-
`;
|
367
|
-
}
|
368
|
-
}
|
369
|
-
|
370
|
-
customElements.define('ia-icon', IAIcon);
|
371
|
-
customElements.define('ia-menu-slider', IAMenuSlider);
|
372
|
-
customElements.define('item-navigator', ItemNavigator);
|
@@ -1,29 +0,0 @@
|
|
1
|
-
import { html } from 'lit-element';
|
2
|
-
|
3
|
-
/* register subpanel */
|
4
|
-
import { IASharingOptions } from '@internetarchive/ia-sharing-options';
|
5
|
-
customElements.define('ia-sharing-options', IASharingOptions);
|
6
|
-
|
7
|
-
export default class {
|
8
|
-
constructor(metadata = {}, baseHost, baseItemType) {
|
9
|
-
this.itemType = baseItemType;
|
10
|
-
const label = `Share this ${this.reconcileItemType}`;
|
11
|
-
this.icon = html`<ia-icon icon="share" style="width: var(--iconWidth); height: var(--iconHeight);"></ia-icon>`;
|
12
|
-
this.label = label;
|
13
|
-
this.id = 'share';
|
14
|
-
this.component = html`<ia-sharing-options
|
15
|
-
identifier="${metadata.identifier}"
|
16
|
-
type="book"
|
17
|
-
creator="${metadata.creator}"
|
18
|
-
description="${metadata.title}"
|
19
|
-
baseHost="${baseHost}"
|
20
|
-
></ia-sharing-options>`;
|
21
|
-
}
|
22
|
-
|
23
|
-
get reconcileItemType() {
|
24
|
-
if (this.itemType === 'bookreader') {
|
25
|
-
return 'book';
|
26
|
-
}
|
27
|
-
return 'item';
|
28
|
-
}
|
29
|
-
}
|