@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
package/README.md
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
# Internet Archive BookReader
|
2
|
+
|
3
|
+
 [](https://codecov.io/gh/internetarchive/bookreader)
|
4
|
+
|
5
|
+
**Disclaimer: BookReader v5 is currently in beta. It's stable enough for production use (and is what is being used on archive.org), but there will be some breaking changes in the next ~month or so to public BookReader APIs.**
|
6
|
+
|
7
|
+
|
8
|
+
<p align="center">
|
9
|
+
<img width="200" src="./BookReaderDemo/assets/v5/Bookreader-logo-lines.svg" alt="Internet Archive BookReader full logo">
|
10
|
+
</p>
|
11
|
+
|
12
|
+
|
13
|
+
<div style="border: 1px solid gray; padding: 2px; margin-bottom: 20px"><img src="./BookReaderDemo/assets/v5/bookreader-v5-screenshot.png" alt="BookReader v5 interface screenshot"></div>
|
14
|
+
|
15
|
+
|
16
|
+
The Internet Archive BookReader is used to view books from the Internet Archive online and can also be used to view other books.
|
17
|
+
|
18
|
+
See live examples:
|
19
|
+
- On details page: https://archive.org/details/birdbookillustra00reedrich
|
20
|
+
- Full window: https://archive.org/details/birdbookillustra00reedrich?view=theater
|
21
|
+
- Embedded url for iFrames: https://archive.org/embed/birdbookillustra00reedrich
|
22
|
+
|
23
|
+
## Demos
|
24
|
+
|
25
|
+
See `BookReaderDemo` directory. These can be tested by building the source files (make sure [Node.js is installed](https://nodejs.org/en/download/)):
|
26
|
+
|
27
|
+
```bash
|
28
|
+
npm run build
|
29
|
+
```
|
30
|
+
|
31
|
+
and starting a simple web server in the root directory:
|
32
|
+
|
33
|
+
```
|
34
|
+
npm run serve
|
35
|
+
```
|
36
|
+
|
37
|
+
And then open `http://localhost:8000/BookReaderDemo/demo-simple.html`.
|
38
|
+
|
39
|
+
|
40
|
+
## Usage
|
41
|
+
|
42
|
+
Here is a short example.
|
43
|
+
|
44
|
+
```js
|
45
|
+
// Create the BookReader object
|
46
|
+
var options = {
|
47
|
+
data: [
|
48
|
+
[
|
49
|
+
{ width: 800, height: 1200,
|
50
|
+
uri: '//archive.org/download/BookReader/img/page001.jpg' },
|
51
|
+
],
|
52
|
+
[
|
53
|
+
{ width: 800, height: 1200,
|
54
|
+
uri: '//archive.org/download/BookReader/img/page002.jpg' },
|
55
|
+
{ width: 800, height: 1200,
|
56
|
+
uri: '//archive.org/download/BookReader/img/page003.jpg' },
|
57
|
+
],
|
58
|
+
[
|
59
|
+
{ width: 800, height: 1200,
|
60
|
+
uri: '//archive.org/download/BookReader/img/page004.jpg' },
|
61
|
+
{ width: 800, height: 1200,
|
62
|
+
uri: '//archive.org/download/BookReader/img/page005.jpg' },
|
63
|
+
]
|
64
|
+
],
|
65
|
+
|
66
|
+
bookTitle: 'Simple BookReader Presentation',
|
67
|
+
|
68
|
+
// thumbnail is optional, but it is used in the info dialog
|
69
|
+
thumbnail: '//archive.org/download/BookReader/img/page014.jpg',
|
70
|
+
|
71
|
+
// Metadata is optional, but it is used in the info dialog
|
72
|
+
metadata: [
|
73
|
+
{label: 'Title', value: 'Open Library BookReader Presentation'},
|
74
|
+
{label: 'Author', value: 'Internet Archive'},
|
75
|
+
{label: 'Demo Info', value: 'This demo shows how one could use BookReader with their own content.'},
|
76
|
+
],
|
77
|
+
|
78
|
+
ui: 'full', // embed, full (responsive)
|
79
|
+
|
80
|
+
};
|
81
|
+
var br = new BookReader(options);
|
82
|
+
|
83
|
+
// Let's go!
|
84
|
+
br.init();
|
85
|
+
|
86
|
+
```
|
87
|
+
## Architecture Overview
|
88
|
+
Starting at v5, BookReader introduces hybrid architecture that merges the core code written in jQuery closer to its evolution as a web component. As we march toward the future of BookReader as a web component, we are taking an Event Driven approach to connect the two together.
|
89
|
+
|
90
|
+
Approach:
|
91
|
+
- Event driven
|
92
|
+
- BookReader's (BR) core code emits [custom events](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent), reporting the actions it takes:
|
93
|
+
- UI changes
|
94
|
+
- Core Events [src/BookReader/events.js](https://github.com/internetarchive/bookreader/tree/master/src/BookReader/events.js)
|
95
|
+
- API returns
|
96
|
+
- Search API [src/BookReader/events.js](https://github.com/internetarchive/bookreader/tree/master/src/BookReader/events.js)
|
97
|
+
- BookNavigator, BR's web components controller, listens and reacts to these events in order to populate the side menu panels
|
98
|
+
- Control BR from the outside by using public methods
|
99
|
+
- When BookNavigator reacts to BR's events, BookNavigator can directly control BR core using public functions.
|
100
|
+
- As we continue to decouple the UI from drawing/calculating logic, these logical methods will become easier to spot, raise as a public method, and create unit tests for them.
|
101
|
+
|
102
|
+
### Menu panels: Web Components via LitElement
|
103
|
+
BookReader's side navigation is powered by LitElement flavored web components.
|
104
|
+
|
105
|
+
|
106
|
+
### Core: jQuery
|
107
|
+
BookReader's core functionality is in jQuery.
|
108
|
+
This includes:
|
109
|
+
- drawing & resizing the book and the various modes (1up, 2 page spread, gallery view)
|
110
|
+
- the horizontal navigation
|
111
|
+
- search API service
|
112
|
+
- plugins
|
113
|
+
|
114
|
+
A peek in how to use/extend core functionality:
|
115
|
+
- Properties
|
116
|
+
- TODO (for now see [src/BookReader/options.js](https://github.com/internetarchive/bookreader/tree/master/src/BookReader/options.js))
|
117
|
+
- Plugins
|
118
|
+
- A basic plugin system is used. See the examples in the plugins directory. The general idea is that they are mixins that augment the BookReader prototype. See the plugins directory for all the included plugins, but here are some examples:
|
119
|
+
- plugin.autoplay.js - autoplay mode. Flips pages at set intervals.
|
120
|
+
- plugin.chapters.js - render chapter markers
|
121
|
+
- plugin.search.js - add search ui, and callbacks
|
122
|
+
- plugin.tts.js - add tts (read aloud) ui, sound library, and callbacks
|
123
|
+
- plugin.url.js - automatically updates the browser url
|
124
|
+
- plugin.resume.js - uses cookies to remember the current page
|
125
|
+
- plugin.vendor-fullscreen.js - replaces fullscreen mode with vendor native fullscreen
|
126
|
+
- see plugin directory for current plugin files ()[https://github.com/internetarchive/bookreader/tree/master/src/plugins]
|
127
|
+
|
128
|
+
### Embedding BookReader in an iFrame
|
129
|
+
|
130
|
+
BookReader can be embedded within an `<iframe>`. If you use the IFrame Plugin inside the `<iframe>`, the reader will send notifications about changes in the state of the reader via [`window.postMessage()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage). The parent window can send messages of its own (also via `window.postMessage()`) and the IFrame Plugin will handle updating the reader to match.
|
131
|
+
|
132
|
+
### Message Events
|
133
|
+
|
134
|
+
#### Fragment Change
|
135
|
+
The Fragment Change message is sent to the parent window when the embedded BookReader moves between pages/modes. When the `<iframe>` receives this message, it moves to the specified page/mode. The “fragment” is formatted in accordance with the [BookReader URL spec](http://openlibrary.org/dev/docs/bookurls).
|
136
|
+
|
137
|
+
```json
|
138
|
+
{
|
139
|
+
"type": "bookReaderFragmentChange",
|
140
|
+
"fragment": "page/n1/mode/2up"
|
141
|
+
}
|
142
|
+
```
|
143
|
+
|
144
|
+
## Development
|
145
|
+
|
146
|
+
(updates?)
|
147
|
+
|
148
|
+
The source JavaScript is written in ES6 (located in the `src/js` directory) and in ES5 (located in `BookReader`). `npm run serve-dev` starts an auto-reloading dev server, that builds js/css that has been edited at `localhost:8000`.
|
149
|
+
|
150
|
+
Until the next major version bump, we have to store the build files inside the repo to maintain backwards compatibility. Please _DO NOT_ include these files in your PR. Anything in the `BookReader/` directory should not be committed.
|
151
|
+
|
152
|
+
## Releases
|
153
|
+
|
154
|
+
To version bump the repo and prepare a release, run `npm version major|minor|patch` (following [semver](https://semver.org/)), then (something like) `git push origin HEAD --tags`. It'll automatically update the version number where it appears, build the files, and ask you to update the CHANGELOG.
|
155
|
+
|
156
|
+
We release BookReader [in-repo as tags](https://github.com/internetarchive/bookreader/releases) & also as a node module [@internetarchive/bookreader](https://www.npmjs.com/package/@internetarchive/bookreader)
|
157
|
+
|
158
|
+
## Tests
|
159
|
+
We would like to get to 100% test coverage and are tracking our progress in this project: [BookReader Fidelity](https://github.com/internetarchive/bookreader/projects/5)
|
160
|
+
|
161
|
+
### End to end tests
|
162
|
+
We also have end to end tests using [Testcafe](https://devexpress.github.io/testcafe/documentation/getting-started/). We write tests for the repo itself and also for our use on archive.org. You can read about them in [here](./tests/e2e/README.md). These are relatively easy to do, and a fantastic way of getting introduced to the wonders of BookReader. Check the project board for open tickets to work on. And if you don't see a test for something you spotted, feel free to make an issue.
|
163
|
+
|
164
|
+
To run all local end to end tests, run command: `npm run test:e2e`
|
165
|
+
|
166
|
+
To keep end to end test server on while developing, run command: `npm run test:e2e:dev`
|
167
|
+
|
168
|
+
### Unit tests
|
169
|
+
We have unit tests and use Jest to run them.
|
170
|
+
For mocks, we use Jest's internal mocking mechanism and Sinon to set spies.
|
171
|
+
|
172
|
+
To run all local unit tests, run command: `npm run test`
|
173
|
+
|
174
|
+
## Ways to contribute
|
175
|
+
|
176
|
+
We can always use a hand building BookReader. Check out the issues and see what interests you. If you have an idea for an improvement, open an issue.
|
177
|
+
|
178
|
+
## More info
|
179
|
+
|
180
|
+
Developer documentation:
|
181
|
+
https://openlibrary.org/dev/docs/bookreader
|
182
|
+
|
183
|
+
Hosted source code:
|
184
|
+
https://github.com/internetarchive/bookreader
|
185
|
+
|
186
|
+
IIIF (http://iiif.io)
|
187
|
+
See `BookReaderDemo/demo-iiif.html` to see an example of how to load an IIIF manifest in BookReader.
|
188
|
+
|
189
|
+
|
190
|
+
## Target Devices
|
191
|
+
|
192
|
+
Note that BookReader is a core part of Archive.org's mission of Universal Access to All Knowledge. Therefore, care must be taken to support legacy browsers. It should still work and be useable on old devices.
|
193
|
+
|
194
|
+
|
195
|
+
## Areas for improvement
|
196
|
+
- Change libraries to be NPM dependencies rather than included in the source code
|
197
|
+
|
198
|
+
See [CHANGELOG.md](CHANGELOG.md) for history of the project.
|
199
|
+
|
200
|
+
|
201
|
+
## License
|
202
|
+
The source code license is AGPL v3, as described in the LICENSE file.
|
203
|
+
|
204
|
+
## Other credits
|
205
|
+
The ability to test on multiple devices is provided courtesy of [Browser Stack](https://www.browserstack.com).
|
package/babel.config.js
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module.exports = {
|
2
|
+
presets: [
|
3
|
+
[
|
4
|
+
"@babel/preset-env",
|
5
|
+
{
|
6
|
+
targets: "> 2%, ie 11, edge 14, samsung > 9, OperaMini all, UCAndroid > 12",
|
7
|
+
useBuiltIns: "usage",
|
8
|
+
corejs: 3
|
9
|
+
}
|
10
|
+
]
|
11
|
+
],
|
12
|
+
plugins: [
|
13
|
+
["@babel/plugin-proposal-decorators", {decoratorsBeforeExport: true}],
|
14
|
+
["@babel/plugin-proposal-class-properties", {loose: true}],
|
15
|
+
["@babel/plugin-proposal-private-property-in-object", { loose: true }],
|
16
|
+
["@babel/plugin-proposal-private-methods", { loose: true }]
|
17
|
+
]
|
18
|
+
};
|
package/codecov.yml
ADDED
package/index.html
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>BookReader Demos</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
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<ul>
|
11
|
+
<li><a href="BookReaderDemo/demo-simple.html">Simple</a></li>
|
12
|
+
<li><a href="BookReaderDemo/view_mode.html">Set initial view mode</a></li>
|
13
|
+
<li><a href="BookReaderDemo/toggle_controls.html">Toggle and override individual controls</a></li>
|
14
|
+
<li><a href="BookReaderDemo/demo-fullscreen.html">Fullscreen with mobile nav</a></li>
|
15
|
+
<li><a href="BookReaderDemo/demo-fullscreen-mobile.html">Inline on page, with mobile nav on fullscreen</a></li>
|
16
|
+
<li><a href="BookReaderDemo/demo-vendor-fullscreen.html">Vendor native fullscreen</a></li>
|
17
|
+
<li><a href="BookReaderDemo/demo-advanced.html">Advanced</a></li>
|
18
|
+
<li><a href="BookReaderDemo/demo-preview-pages.html">Preview Pages</a></li>
|
19
|
+
<li><a href="BookReaderDemo/demo-embed.html">Embed</a></li>
|
20
|
+
<li><a href="BookReaderDemo/demo-multiple.html">Multiple on same page</a></li>
|
21
|
+
<li><a href="BookReaderDemo/demo-internetarchive.html?ocaid=theworksofplato01platiala">From Internet Archive</a></li>
|
22
|
+
<li><a href="BookReaderDemo/demo-internetarchive.html?ocaid=adventuresofoli00dick">From Internet Archive - a book with CHAPTERS</a></li>
|
23
|
+
<li><a href="BookReaderDemo/demo-iiif.html">IIIF</a></li>
|
24
|
+
<li><a href="BookReaderDemo/demo-autoplay.html">Autoplay (kiosk mode)</a></li>
|
25
|
+
<li><a href="BookReaderDemo/demo-plugin-menu-toggle.html">Plugin: Full screen menu toggle</a></li>
|
26
|
+
<li><a href="BookReaderDemo/immersion-mode.html">Start in immersion (fullscreen) mode</a></li>
|
27
|
+
<li><a href="BookReaderDemo/immersion-1up.html">Start in immersion mode on 1up default item</a></li>
|
28
|
+
<li><a href="BookReaderDemo/viewmode-cycle.html">Replace view mode buttons with view mode cycler</a></li>
|
29
|
+
</ul>
|
30
|
+
</body>
|
31
|
+
</html>
|
package/jsconfig.json
ADDED
package/karma.conf.js
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
const { createDefaultConfig } = require('@open-wc/testing-karma');
|
2
|
+
const merge = require('deepmerge');
|
3
|
+
|
4
|
+
module.exports = (config) => {
|
5
|
+
config.set(
|
6
|
+
merge(createDefaultConfig(config), {
|
7
|
+
files: [
|
8
|
+
// runs all files ending with .test in the test folder,
|
9
|
+
// can be overwritten by passing a --grep flag. examples:
|
10
|
+
//
|
11
|
+
// npm run test -- --grep test/foo/bar.test.js
|
12
|
+
// npm run test -- --grep test/bar/*
|
13
|
+
{ pattern: config.grep ? config.grep : 'tests/karma/**/*.test.js', type: 'module' },
|
14
|
+
],
|
15
|
+
|
16
|
+
esm: {
|
17
|
+
nodeResolve: true,
|
18
|
+
},
|
19
|
+
// you can overwrite/extend the config further
|
20
|
+
}),
|
21
|
+
);
|
22
|
+
return config;
|
23
|
+
};
|
package/package.json
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
{
|
2
|
+
"name": "@internetarchive/bookreader",
|
3
|
+
"version": "5.0.0-18",
|
4
|
+
"description": "The Internet Archive BookReader.",
|
5
|
+
"repository": {
|
6
|
+
"type": "git",
|
7
|
+
"url": "git+https://github.com/internetarchive/bookreader.git"
|
8
|
+
},
|
9
|
+
"publishConfig": {
|
10
|
+
"access": "public"
|
11
|
+
},
|
12
|
+
"module": "src/BookNavigator/BookNavigator.js",
|
13
|
+
"keywords": [
|
14
|
+
"online",
|
15
|
+
"bookreader",
|
16
|
+
"interface",
|
17
|
+
"ebooks",
|
18
|
+
"internet archive"
|
19
|
+
],
|
20
|
+
"author": "Internet Archive",
|
21
|
+
"license": "AGPL-3.0",
|
22
|
+
"bugs": {
|
23
|
+
"url": "https://github.com/internetarchive/bookreader/issues"
|
24
|
+
},
|
25
|
+
"homepage": "https://github.com/internetarchive/bookreader#readme",
|
26
|
+
"private": false,
|
27
|
+
"dependencies": {
|
28
|
+
"@internetarchive/ia-activity-indicator": "^0.0.1",
|
29
|
+
"@internetarchive/ia-icons": "^1.2.2",
|
30
|
+
"@internetarchive/ia-menu-slider": "^1.1.0",
|
31
|
+
"@internetarchive/ia-sharing-options": "^0.1.2",
|
32
|
+
"@internetarchive/icon-bookmark": "^1.1.3",
|
33
|
+
"@internetarchive/icon-collapse-sidebar": "^1.1.0",
|
34
|
+
"@internetarchive/icon-edit-pencil": "1.1.5",
|
35
|
+
"@internetarchive/icon-magnify-minus": "^1.2.3",
|
36
|
+
"@internetarchive/icon-magnify-plus": "^1.2.3",
|
37
|
+
"@internetarchive/icon-search": "^1.2.3",
|
38
|
+
"@internetarchive/modal-manager": "^0.1.0",
|
39
|
+
"lit-element": "^2.4.0",
|
40
|
+
"lit-html": "^1.3.0"
|
41
|
+
},
|
42
|
+
"devDependencies": {
|
43
|
+
"@babel/core": "7.15.0",
|
44
|
+
"@babel/plugin-proposal-class-properties": "^7.14.5",
|
45
|
+
"@babel/plugin-proposal-decorators": "^7.14.5",
|
46
|
+
"@babel/preset-env": "7.15.0",
|
47
|
+
"@open-wc/testing": "^2.5.33",
|
48
|
+
"@open-wc/testing-karma": "^4.0.9",
|
49
|
+
"@types/jest": "27.0.1",
|
50
|
+
"babel-eslint": "^10.1.0",
|
51
|
+
"babel-loader": "8.2.2",
|
52
|
+
"codecov": "3.8.3",
|
53
|
+
"concurrently": "6.0.2",
|
54
|
+
"core-js": "3.16.2",
|
55
|
+
"cpx2": "3.0.0",
|
56
|
+
"eslint": "^7.32.0",
|
57
|
+
"eslint-plugin-no-jquery": "^2.6.0",
|
58
|
+
"eslint-plugin-testcafe": "0.2.1",
|
59
|
+
"hammerjs": "^2.0.8",
|
60
|
+
"http-server": "0.12.3",
|
61
|
+
"iso-language-codes": "1.1.0",
|
62
|
+
"jest": "27.0.6",
|
63
|
+
"jquery": "1.11.3",
|
64
|
+
"jquery-colorbox": "1.6.4",
|
65
|
+
"jquery-ui": "1.12.1",
|
66
|
+
"jquery-ui-touch-punch": "0.2.3",
|
67
|
+
"jquery.browser": "0.1.0",
|
68
|
+
"jquery.mmenu": "5.6.5",
|
69
|
+
"karma-coverage": "^2.0.3",
|
70
|
+
"live-server": "1.2.1",
|
71
|
+
"node-fetch": "2.6.1",
|
72
|
+
"regenerator-runtime": "0.13.9",
|
73
|
+
"sass": "1.38.2",
|
74
|
+
"sinon": "11.1.2",
|
75
|
+
"soundmanager2": "2.97.20170602",
|
76
|
+
"svgo": "2.4.0",
|
77
|
+
"testcafe": "1.15.3",
|
78
|
+
"webpack": "5.51.1",
|
79
|
+
"webpack-cli": "4.8.0"
|
80
|
+
},
|
81
|
+
"jest": {
|
82
|
+
"testEnvironment": "jsdom",
|
83
|
+
"transformIgnorePatterns": [
|
84
|
+
"node_modules/(?!(lit-html|lit-element|lit)/)"
|
85
|
+
],
|
86
|
+
"setupFiles": [
|
87
|
+
"./src/jquery-wrapper.js"
|
88
|
+
],
|
89
|
+
"roots": [
|
90
|
+
"<rootDir>/src/",
|
91
|
+
"<rootDir>/tests/"
|
92
|
+
],
|
93
|
+
"testPathIgnorePatterns": [
|
94
|
+
"<rootDir>/tests/e2e/",
|
95
|
+
"<rootDir>/tests/karma/"
|
96
|
+
],
|
97
|
+
"coverageDirectory": "<rootDir>/coverage-jest"
|
98
|
+
},
|
99
|
+
"scripts": {
|
100
|
+
"preversion": "npm run test && node scripts/preversion.js",
|
101
|
+
"version": "node scripts/version.js",
|
102
|
+
"postversion": "node scripts/postversion.js",
|
103
|
+
"build": "npm run clean && npm run build-js && npm run build-css && npm run build-assets",
|
104
|
+
"build-assets": "npx cpx \"src/assets/**/*\" BookReader && npx svgo -f BookReader/icons && npx svgo -f BookReader/images",
|
105
|
+
"build-assets:watch": "npx cpx --watch --verbose \"src/assets/**/*\" BookReader",
|
106
|
+
"build-js": "npx webpack",
|
107
|
+
"build-js:watch": "npx webpack --mode=development --watch",
|
108
|
+
"build-css": "npx sass --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
|
109
|
+
"build-css:watch": "npx sass --watch --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
|
110
|
+
"clean": "rm -r BookReader/ || true",
|
111
|
+
"lint": "npx eslint src/ tests/ *.js",
|
112
|
+
"lint:fix": "npx eslint --fix src/ tests/ *.js",
|
113
|
+
"serve": "npx http-server . --port 8000",
|
114
|
+
"serve-live": "npx live-server . --port 8000 --watch=index.html,BookReader,BookReaderDemo",
|
115
|
+
"serve-dev": "npm run build-css && npx concurrently --kill-others npm:serve-live npm:build-*:watch",
|
116
|
+
"test": "npm run test-jest && npm run test-karma",
|
117
|
+
"test:e2e": "npm run build && env BASE_URL=http://127.0.0.1:8000/BookReaderDemo/ npx testcafe",
|
118
|
+
"test:e2e:dev": "env BASE_URL=http://127.0.0.1:8000/BookReaderDemo/ npx testcafe --live --dev",
|
119
|
+
"test-jest:watch": "npx jest --watch",
|
120
|
+
"test-jest": "npx jest --coverage --colors",
|
121
|
+
"test-karma": "npx karma start --coverage",
|
122
|
+
"test-karma:watch": "npx karma start --auto-watch=true --single-run=false",
|
123
|
+
"DOCS:update:test-deps": "If CI succeeds, these should be good to update",
|
124
|
+
"update:test-deps": "npm i @open-wc/testing@latest @open-wc/testing-karma@latest @types/jest@latest babel-eslint@latest codecov@latest eslint@latest eslint-plugin-testcafe@latest jest@latest karma-coverage@latest sinon@latest testcafe@latest",
|
125
|
+
"DOCS:update:build-deps": "These can cause strange changes, so do an npm run build + check file size (git diff --stat), and check the site is as expected",
|
126
|
+
"update:build-deps": "npm i @babel/core@latest @babel/preset-env@latest babel-loader@latest core-js@latest regenerator-runtime@latest sass@latest svgo@latest webpack@latest webpack-cli@latest",
|
127
|
+
"codecov": "npx codecov"
|
128
|
+
}
|
129
|
+
}
|
package/screenshot.png
ADDED
Binary file
|
@@ -0,0 +1,10 @@
|
|
1
|
+
const fs = require('fs');
|
2
|
+
const { version: NEW_VERSION } = require('../package.json');
|
3
|
+
|
4
|
+
const tag = `v${NEW_VERSION}`;
|
5
|
+
const releaseBody = fs.readFileSync('CHANGELOG.md').toString()
|
6
|
+
.split(/\n# /)[0] // split at headings and get first heading
|
7
|
+
.split('\n').slice(1).join('\n'); // remove heading line
|
8
|
+
|
9
|
+
const GITHUB_RELEASE_URL = `https://github.com/internetarchive/bookreader/releases/new?tag=${tag}&title=${tag}&body=${encodeURIComponent(releaseBody)}`;
|
10
|
+
console.log(`After you push/merge, use this link to release: ${GITHUB_RELEASE_URL}`);
|
@@ -0,0 +1,14 @@
|
|
1
|
+
const { version: OLD_VERSION } = require('../package.json');
|
2
|
+
const fetch = require('node-fetch');
|
3
|
+
const OLD_RELEASE_URL = `https://api.github.com/repos/internetarchive/bookreader/releases/tags/v${OLD_VERSION}`;
|
4
|
+
|
5
|
+
async function main() {
|
6
|
+
const {created_at} = await fetch(OLD_RELEASE_URL).then(r => r.json());
|
7
|
+
const today = new Date().toISOString().slice(0, -5);
|
8
|
+
const searchUrl = 'https://github.com/internetarchive/bookreader/pulls?' + new URLSearchParams({
|
9
|
+
q: `is:pr is:merged merged:${created_at}..${today}Z sort:updated-asc`
|
10
|
+
}).toString();
|
11
|
+
console.log(`Here are all the PRs that were merged since the last version: ${searchUrl}`);
|
12
|
+
}
|
13
|
+
|
14
|
+
main();
|
@@ -0,0 +1,26 @@
|
|
1
|
+
const fs = require('fs');
|
2
|
+
const { execSync } = require('child_process');
|
3
|
+
const { version: NEW_VERSION } = require('../package.json');
|
4
|
+
|
5
|
+
async function main() {
|
6
|
+
// Update the changelog
|
7
|
+
const old_changelog = fs.readFileSync('CHANGELOG.md').toString();
|
8
|
+
const new_changelog = `# ${NEW_VERSION}\n<!-- Write here... -->\n\n` + old_changelog;
|
9
|
+
fs.writeFileSync('CHANGELOG.md', new_changelog);
|
10
|
+
while (fs.readFileSync('CHANGELOG.md').toString().includes('<!-- Write here... -->')) {
|
11
|
+
console.log('Changelog contains dummy text. Update the changelog, and press ENTER continue.');
|
12
|
+
await new Promise(res => process.stdin.once("data", res));
|
13
|
+
}
|
14
|
+
execSync('git add CHANGELOG.md');
|
15
|
+
|
16
|
+
// npm install to make sure deps are correct
|
17
|
+
execSync('npm install', { stdio: "inherit" });
|
18
|
+
|
19
|
+
// build
|
20
|
+
execSync('npm run build', { stdio: "inherit" });
|
21
|
+
|
22
|
+
// Add build files
|
23
|
+
execSync('git add ./BookReader');
|
24
|
+
}
|
25
|
+
|
26
|
+
main().then(() => process.exit());
|