@internetarchive/bookreader 5.0.0-9 → 5.0.0-90
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 +21 -19
- package/.github/workflows/node.js.yml +76 -11
- package/.github/workflows/npm-publish.yml +6 -20
- package/.testcaferc.js +10 -0
- package/BookReader/BookReader.css +404 -1125
- package/BookReader/BookReader.js +1 -1
- package/BookReader/BookReader.js.LICENSE.txt +20 -20
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/ia-bookreader-bundle.js +1782 -0
- package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +7 -0
- package/BookReader/ia-bookreader-bundle.js.map +1 -0
- package/BookReader/icons/1up.svg +1 -1
- package/BookReader/icons/2up.svg +1 -1
- package/BookReader/icons/advance.svg +1 -1
- package/BookReader/icons/chevron-right.svg +1 -1
- package/BookReader/icons/close-circle-dark.svg +1 -1
- package/BookReader/icons/close-circle.svg +1 -1
- package/BookReader/icons/fullscreen.svg +1 -1
- package/BookReader/icons/fullscreen_exit.svg +1 -1
- package/BookReader/icons/hamburger.svg +1 -1
- package/BookReader/icons/left-arrow.svg +1 -1
- package/BookReader/icons/magnify-minus.svg +1 -1
- package/BookReader/icons/magnify-plus.svg +1 -1
- package/BookReader/icons/magnify.svg +1 -1
- package/BookReader/icons/pause.svg +1 -1
- package/BookReader/icons/play.svg +1 -1
- package/BookReader/icons/playback-speed.svg +1 -1
- package/BookReader/icons/read-aloud.svg +1 -1
- package/BookReader/icons/review.svg +1 -1
- package/BookReader/icons/thumbnails.svg +1 -1
- package/BookReader/icons/voice.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -1
- package/BookReader/images/BRicons.svg +3 -3
- package/BookReader/images/books_graphic.svg +1 -1
- package/BookReader/images/icon_book.svg +1 -1
- package/BookReader/images/icon_bookmark.svg +1 -1
- package/BookReader/images/icon_gear.svg +1 -1
- package/BookReader/images/icon_hamburger.svg +1 -1
- package/BookReader/images/icon_home.svg +1 -1
- package/BookReader/images/icon_info.svg +1 -1
- package/BookReader/images/icon_one_page.svg +1 -1
- package/BookReader/images/icon_pause.svg +1 -1
- package/BookReader/images/icon_play.svg +1 -1
- package/BookReader/images/icon_playback-rate.svg +1 -1
- package/BookReader/images/icon_search_button.svg +1 -1
- package/BookReader/images/icon_share.svg +1 -1
- package/BookReader/images/icon_skip-ahead.svg +1 -1
- package/BookReader/images/icon_skip-back.svg +1 -1
- package/BookReader/images/icon_speaker.svg +1 -1
- package/BookReader/images/icon_speaker_open.svg +1 -1
- package/BookReader/images/icon_thumbnails.svg +1 -1
- package/BookReader/images/icon_toc.svg +1 -1
- package/BookReader/images/icon_two_pages.svg +1 -1
- package/BookReader/images/marker_chap-off.svg +1 -1
- package/BookReader/images/marker_chap-on.svg +1 -1
- package/BookReader/images/marker_srch-on.svg +1 -1
- package/BookReader/images/unviewable_page.png +0 -0
- package/BookReader/jquery-3.js +2 -0
- package/BookReader/jquery-3.js.LICENSE.txt +24 -0
- package/BookReader/plugins/plugin.archive_analytics.js +1 -1
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -1
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +25 -1
- package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
- 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.iiif.js +2 -0
- package/BookReader/plugins/plugin.iiif.js.map +1 -0
- package/BookReader/plugins/plugin.resume.js +1 -1
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +2 -1
- package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +2 -1
- package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.tts.js +1 -1
- package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +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 +18 -19
- package/BookReaderDemo/BookReaderJSAdvanced.js +0 -3
- package/BookReaderDemo/BookReaderJSSimple.js +1 -0
- package/BookReaderDemo/IADemoBr.js +144 -0
- package/BookReaderDemo/demo-advanced.html +2 -2
- package/BookReaderDemo/demo-embed-iframe-src.html +2 -1
- package/BookReaderDemo/demo-fullscreen-mobile.html +3 -5
- package/BookReaderDemo/demo-fullscreen.html +2 -4
- package/BookReaderDemo/demo-iiif.html +99 -12
- package/BookReaderDemo/demo-internetarchive.html +214 -18
- package/BookReaderDemo/demo-multiple.html +2 -1
- package/BookReaderDemo/demo-preview-pages.html +526 -525
- package/BookReaderDemo/demo-simple.html +2 -1
- package/BookReaderDemo/demo-vendor-fullscreen.html +2 -4
- package/BookReaderDemo/ia-multiple-volumes-manifest.js +170 -0
- package/BookReaderDemo/immersion-1up.html +2 -2
- package/BookReaderDemo/immersion-mode.html +2 -4
- package/BookReaderDemo/toggle_controls.html +3 -2
- package/BookReaderDemo/view_mode.html +2 -1
- package/BookReaderDemo/viewmode-cycle.html +2 -3
- package/CHANGELOG.md +584 -33
- package/README.md +14 -1
- package/babel.config.js +20 -0
- package/codecov.yml +6 -0
- package/index.html +5 -2
- package/jsconfig.json +19 -0
- package/netlify.toml +9 -0
- package/package.json +70 -62
- package/renovate.json +52 -0
- package/scripts/preversion.js +0 -1
- package/src/BookNavigator/assets/bookmark-colors.js +1 -1
- package/src/BookNavigator/assets/button-base.js +5 -2
- package/src/BookNavigator/assets/ia-logo.js +17 -0
- package/src/BookNavigator/assets/icon_checkmark.js +1 -1
- package/src/BookNavigator/assets/icon_close.js +1 -1
- package/src/BookNavigator/book-navigator.js +590 -0
- package/src/BookNavigator/bookmarks/bookmark-button.js +3 -2
- package/src/BookNavigator/bookmarks/bookmark-edit.js +3 -4
- package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
- package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +4 -9
- package/src/BookNavigator/bookmarks/bookmarks-provider.js +27 -17
- package/src/BookNavigator/bookmarks/ia-bookmarks.js +116 -67
- package/src/BookNavigator/delete-modal-actions.js +1 -1
- package/src/BookNavigator/downloads/downloads-provider.js +36 -21
- package/src/BookNavigator/downloads/downloads.js +29 -25
- package/src/BookNavigator/search/search-provider.js +50 -28
- package/src/BookNavigator/search/search-results.js +24 -10
- package/src/BookNavigator/sharing.js +27 -0
- package/src/BookNavigator/viewable-files.js +95 -0
- package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +13 -12
- package/src/BookNavigator/visual-adjustments/visual-adjustments.js +7 -7
- package/src/BookReader/BookModel.js +76 -41
- package/src/BookReader/DragScrollable.js +233 -0
- package/src/BookReader/ImageCache.js +48 -15
- package/src/BookReader/Mode1Up.js +56 -351
- package/src/BookReader/Mode1UpLit.js +388 -0
- package/src/BookReader/Mode2Up.js +73 -1318
- package/src/BookReader/Mode2UpLit.js +777 -0
- package/src/BookReader/ModeCoordinateSpace.js +29 -0
- package/src/BookReader/ModeSmoothZoom.js +312 -0
- package/src/BookReader/ModeThumb.js +19 -13
- package/src/BookReader/Navbar/Navbar.js +70 -54
- package/src/BookReader/PageContainer.js +116 -22
- package/src/BookReader/ReduceSet.js +3 -3
- package/src/BookReader/Toolbar/Toolbar.js +14 -41
- package/src/BookReader/events.js +2 -3
- package/src/BookReader/options.js +73 -15
- package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/src/BookReader/utils/ScrollClassAdder.js +31 -0
- package/src/BookReader/utils/SelectionObserver.js +45 -0
- package/src/BookReader/utils/classes.js +1 -1
- package/src/BookReader/utils.js +128 -13
- package/src/BookReader.js +544 -1078
- package/src/BookReaderPlugin.js +44 -0
- package/src/assets/icons/magnify-minus.svg +3 -7
- package/src/assets/icons/magnify-plus.svg +3 -7
- package/src/assets/icons/voice.svg +1 -0
- package/src/assets/images/unviewable_page.png +0 -0
- package/src/css/BookReader.scss +1 -5
- package/src/css/_BRBookmarks.scss +1 -1
- package/src/css/_BRComponent.scss +1 -1
- package/src/css/_BRicon.scss +8 -2
- package/src/css/_BRmain.scss +16 -3
- package/src/css/_BRnav.scss +12 -42
- package/src/css/_BRpages.scss +170 -42
- package/src/css/_BRsearch.scss +68 -25
- package/src/css/_BRtoolbar.scss +5 -5
- package/src/css/_TextSelection.scss +87 -27
- package/src/css/_colorbox.scss +2 -2
- package/src/css/_controls.scss +24 -7
- package/src/css/_icons.scss +1 -1
- package/src/ia-bookreader/ia-bookreader.js +224 -0
- package/src/plugins/plugin.archive_analytics.js +84 -78
- package/src/plugins/plugin.autoplay.js +99 -104
- package/src/plugins/plugin.chapters.js +237 -191
- package/src/plugins/plugin.iframe.js +1 -1
- package/src/plugins/plugin.iiif.js +141 -0
- package/src/plugins/plugin.resume.js +53 -50
- package/src/plugins/plugin.text_selection.js +503 -175
- package/src/plugins/plugin.vendor-fullscreen.js +7 -7
- package/src/plugins/search/plugin.search.js +151 -127
- package/src/plugins/search/utils.js +43 -0
- package/src/plugins/search/view.js +37 -59
- package/src/plugins/tts/AbstractTTSEngine.js +75 -45
- package/src/plugins/tts/FestivalTTSEngine.js +21 -31
- package/src/plugins/tts/PageChunk.js +16 -23
- package/src/plugins/tts/PageChunkIterator.js +11 -17
- package/src/plugins/tts/WebTTSEngine.js +88 -72
- package/src/plugins/tts/plugin.tts.js +310 -350
- package/src/plugins/tts/utils.js +16 -26
- package/src/plugins/url/UrlPlugin.js +191 -0
- package/src/plugins/{plugin.url.js → url/plugin.url.js} +47 -18
- package/src/util/browserSniffing.js +22 -0
- package/src/util/docCookies.js +21 -2
- package/src/util/strings.js +1 -0
- package/tests/e2e/README.md +37 -0
- package/tests/e2e/autoplay.test.js +9 -6
- package/tests/e2e/base.test.js +8 -16
- package/tests/e2e/helpers/base.js +55 -50
- package/tests/e2e/helpers/debug.js +1 -1
- package/tests/e2e/helpers/mockSearch.js +19 -22
- package/tests/e2e/helpers/params.js +17 -0
- package/tests/e2e/helpers/rightToLeft.js +8 -14
- package/tests/e2e/helpers/search.js +73 -0
- package/tests/e2e/models/Navigation.js +20 -37
- package/tests/e2e/rightToLeft.test.js +4 -5
- package/tests/e2e/viewmode.test.js +40 -33
- package/tests/jest/BookNavigator/book-navigator.test.js +661 -0
- package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +43 -0
- package/tests/{karma → jest}/BookNavigator/bookmarks/bookmark-edit.test.js +25 -26
- package/tests/{karma → jest}/BookNavigator/bookmarks/bookmarks-list.test.js +41 -42
- package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +45 -0
- package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +67 -0
- package/tests/jest/BookNavigator/downloads/downloads.test.js +53 -0
- package/tests/jest/BookNavigator/search/search-provider.test.js +167 -0
- package/tests/{karma → jest}/BookNavigator/search/search-results.test.js +109 -60
- package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +49 -0
- package/tests/jest/BookNavigator/viewable-files/viewable-files-provider.test.js +80 -0
- package/tests/jest/BookNavigator/visual-adjustments.test.js +200 -0
- package/tests/{BookReader → jest/BookReader}/BookModel.test.js +74 -14
- package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +193 -0
- package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +4 -4
- package/tests/jest/BookReader/Mode1UpLit.test.js +73 -0
- package/tests/jest/BookReader/Mode2Up.test.js +98 -0
- package/tests/jest/BookReader/Mode2UpLit.test.js +190 -0
- package/tests/jest/BookReader/ModeCoordinateSpace.test.js +16 -0
- package/tests/jest/BookReader/ModeSmoothZoom.test.js +218 -0
- package/tests/jest/BookReader/ModeThumb.test.js +71 -0
- package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +42 -29
- package/tests/jest/BookReader/PageContainer.test.js +238 -0
- package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +1 -1
- package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +3 -3
- package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
- package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +49 -0
- package/tests/jest/BookReader/utils/SelectionObserver.test.js +57 -0
- package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +1 -1
- package/tests/jest/BookReader/utils.test.js +250 -0
- package/tests/jest/BookReader.keyboard.test.js +190 -0
- package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +10 -2
- package/tests/{BookReader.test.js → jest/BookReader.test.js} +43 -53
- package/tests/jest/plugins/plugin.archive_analytics.test.js +20 -0
- package/tests/jest/plugins/plugin.autoplay.test.js +35 -0
- package/tests/jest/plugins/plugin.chapters.test.js +195 -0
- package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +4 -4
- package/tests/{plugins → jest/plugins}/plugin.resume.test.js +22 -35
- package/tests/jest/plugins/plugin.text_selection.test.js +316 -0
- package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +2 -2
- package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +19 -47
- package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +42 -9
- package/tests/jest/plugins/search/utils.js +25 -0
- package/tests/jest/plugins/search/utils.test.js +29 -0
- package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +30 -10
- 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 +47 -1
- package/tests/{plugins → jest/plugins}/tts/utils.test.js +1 -60
- package/tests/jest/plugins/url/UrlPlugin.test.js +198 -0
- package/tests/{plugins → jest/plugins/url}/plugin.url.test.js +57 -18
- package/tests/jest/setup.js +3 -0
- package/tests/{util → jest/util}/browserSniffing.test.js +1 -1
- package/tests/jest/util/docCookies.test.js +24 -0
- package/tests/{util → jest/util}/strings.test.js +1 -1
- package/tests/{utils.js → jest/utils.js} +38 -0
- package/webpack.config.js +16 -10
- 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.LICENSE.txt +0 -38
- package/BookReader/bookreader-component-bundle.js.map +0 -1
- package/BookReader/jquery-1.10.1.js +0 -2
- package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
- package/BookReader/plugins/plugin.menu_toggle.js +0 -2
- package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
- package/BookReader/plugins/plugin.mobile_nav.js +0 -2
- package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
- package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
- package/BookReaderDemo/IIIFBookReader.js +0 -207
- package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
- package/BookReaderDemo/demo-autoplay.html +0 -38
- package/BookReaderDemo/demo-iiif.js +0 -26
- package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
- package/karma.conf.js +0 -23
- package/src/BookNavigator/BookModel.js +0 -14
- package/src/BookNavigator/BookNavigator.js +0 -446
- package/src/BookNavigator/assets/book-loader.js +0 -27
- package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
- package/src/BookNavigator/search/a-search-result.js +0 -55
- package/src/BookReader/DebugConsole.js +0 -54
- package/src/BookReaderComponent/BookReaderComponent.js +0 -112
- package/src/ItemNavigator/ItemNavigator.js +0 -376
- package/src/ItemNavigator/providers/sharing.js +0 -29
- package/src/css/_MobileNav.scss +0 -194
- package/src/dragscrollable-br.js +0 -261
- package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
- package/src/plugins/plugin.mobile_nav.js +0 -287
- package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
- package/tests/BookReader/DebugConsole.test.js +0 -25
- package/tests/BookReader/Mode1Up.test.js +0 -164
- package/tests/BookReader/Mode2Up.test.js +0 -247
- package/tests/BookReader/PageContainer.test.js +0 -115
- package/tests/BookReader/utils.test.js +0 -109
- package/tests/e2e/helpers/desktopSearch.js +0 -72
- package/tests/e2e/helpers/mobileSearch.js +0 -85
- package/tests/e2e/ia-production/ia-prod-base.js +0 -17
- package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
- package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
- package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
- package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
- package/tests/plugins/plugin.archive_analytics.test.js +0 -23
- package/tests/plugins/plugin.autoplay.test.js +0 -52
- package/tests/plugins/plugin.chapters.test.js +0 -130
- package/tests/plugins/plugin.mobile_nav.test.js +0 -66
- package/tests/plugins/plugin.text_selection.test.js +0 -203
- package/tests/util/docCookies.test.js +0 -15
@@ -1,38 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>BookReader fullscreen 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
|
-
|
17
|
-
<!-- Mobile nav plugin -->
|
18
|
-
<script src="../BookReader/plugins/plugin.mobile_nav.js"></script>
|
19
|
-
<!-- Autoplay plugin -->
|
20
|
-
<script src="../BookReader/plugins/plugin.autoplay.js"></script>
|
21
|
-
|
22
|
-
<!-- URL-changing plugin -->
|
23
|
-
<script src="../BookReader/plugins/plugin.url.js"></script>
|
24
|
-
|
25
|
-
<style>
|
26
|
-
html, body { width: 100%; height: 100%; margin: 0; padding: 0; }
|
27
|
-
#BookReader { width: 100%; height: 100%; }
|
28
|
-
</style>
|
29
|
-
</head>
|
30
|
-
<body>
|
31
|
-
<div id="BookReader"></div>
|
32
|
-
<script type="text/javascript" src="BookReaderJSAutoplay.js"></script>
|
33
|
-
<script>instantiateBookReader(null, {
|
34
|
-
flipSpeed: 1000,
|
35
|
-
flipDelay: 2000
|
36
|
-
})</script>
|
37
|
-
</body>
|
38
|
-
</html>
|
@@ -1,26 +0,0 @@
|
|
1
|
-
// This demo uses a slightly modified version of
|
2
|
-
// https://github.com/aeschylus/IIIFBookReader
|
3
|
-
//
|
4
|
-
// It is intended as a rapid proof of concept.
|
5
|
-
// More development could be done.
|
6
|
-
|
7
|
-
var br = new BookReader({
|
8
|
-
// Book title and the URL used for the book title link
|
9
|
-
bookTitle: 'Open Library BookReader Presentation',
|
10
|
-
bookUrl: 'http://openlibrary.org',
|
11
|
-
|
12
|
-
// Override the path used to find UI images
|
13
|
-
imagesBaseURL: '../BookReader/images/',
|
14
|
-
enableMobileNav: false,
|
15
|
-
});
|
16
|
-
|
17
|
-
br.IIIF({
|
18
|
-
url: 'https://iiif.archivelab.org/iiif/platowithenglish04platuoft/manifest.json',
|
19
|
-
sequenceId : 'https://iiif.archivelab.org/iiif/platowithenglish04platuoft/canvas/default',
|
20
|
-
maxWidth: 800,
|
21
|
-
initCallback: function() {
|
22
|
-
}
|
23
|
-
});
|
24
|
-
|
25
|
-
// Let's go!
|
26
|
-
br.init();
|
@@ -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>
|
package/karma.conf.js
DELETED
@@ -1,23 +0,0 @@
|
|
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
|
-
};
|
@@ -1,446 +0,0 @@
|
|
1
|
-
import { css, html, LitElement } from 'lit-element';
|
2
|
-
import { nothing } from 'lit-html';
|
3
|
-
import SearchProvider from './search/search-provider.js';
|
4
|
-
import DownloadProvider from './downloads/downloads-provider.js';
|
5
|
-
import VisualAdjustmentProvider from './visual-adjustments/visual-adjustments-provider.js';
|
6
|
-
import BookmarksProvider from './bookmarks/bookmarks-provider.js';
|
7
|
-
import SharingProvider from '../ItemNavigator/providers/sharing.js';
|
8
|
-
import BRFullscreenMgr from './br-fullscreen-mgr.js';
|
9
|
-
import { Book } from './BookModel.js';
|
10
|
-
import bookLoader from './assets/book-loader.js';
|
11
|
-
|
12
|
-
const events = {
|
13
|
-
menuUpdated: 'menuUpdated',
|
14
|
-
updateSideMenu: 'updateSideMenu',
|
15
|
-
PostInit: 'PostInit',
|
16
|
-
ViewportInFullScreen: 'ViewportInFullScreen',
|
17
|
-
};
|
18
|
-
export class BookNavigator extends LitElement {
|
19
|
-
static get properties() {
|
20
|
-
return {
|
21
|
-
book: { type: Object },
|
22
|
-
pageContainerSelector: { type: String },
|
23
|
-
brWidth: { type: Number },
|
24
|
-
bookReaderLoaded: { type: Boolean },
|
25
|
-
bookreader: { type: Object },
|
26
|
-
downloadableTypes: { type: Array },
|
27
|
-
isAdmin: { type: Boolean },
|
28
|
-
lendingInitialized: { type: Boolean },
|
29
|
-
lendingStatus: { type: Object },
|
30
|
-
menuProviders: { type: Object },
|
31
|
-
menuShortcuts: { type: Array },
|
32
|
-
sideMenuOpen: { type: Boolean },
|
33
|
-
signedIn: { type: Boolean },
|
34
|
-
};
|
35
|
-
}
|
36
|
-
|
37
|
-
constructor() {
|
38
|
-
super();
|
39
|
-
this.book = {};
|
40
|
-
this.pageContainerSelector = '.BRcontainer';
|
41
|
-
this.brWidth = 0;
|
42
|
-
this.bookReaderCannotLoad = false;
|
43
|
-
this.bookReaderLoaded = false;
|
44
|
-
this.bookreader = null;
|
45
|
-
this.downloadableTypes = [];
|
46
|
-
this.isAdmin = false;
|
47
|
-
this.lendingInitialized = false;
|
48
|
-
this.lendingStatus = {};
|
49
|
-
this.menuProviders = {};
|
50
|
-
this.menuShortcuts = [];
|
51
|
-
this.sideMenuOpen = false;
|
52
|
-
this.signedIn = false;
|
53
|
-
|
54
|
-
// Untracked properties
|
55
|
-
this.fullscreenMgr = null;
|
56
|
-
this.brResizeObserver = null;
|
57
|
-
this.model = new Book();
|
58
|
-
this.shortcutOrder = ['volumes', 'search', 'bookmarks'];
|
59
|
-
}
|
60
|
-
|
61
|
-
firstUpdated() {
|
62
|
-
this.model.setMetadata(this.book);
|
63
|
-
this.bindEventListeners();
|
64
|
-
this.emitPostInit();
|
65
|
-
}
|
66
|
-
|
67
|
-
updated(changed) {
|
68
|
-
if (!this.bookreader) {
|
69
|
-
return;
|
70
|
-
}
|
71
|
-
const isFirstSideMenuUpdate = changed.has('sideMenuOpen') && (changed.get('sideMenuOpen') === undefined);
|
72
|
-
if (!isFirstSideMenuUpdate) {
|
73
|
-
// realign image
|
74
|
-
if (this.bookreader.animating) {
|
75
|
-
return;
|
76
|
-
}
|
77
|
-
this.bookreader.resize();
|
78
|
-
const curIndex = this.bookreader.currentIndex();
|
79
|
-
this.bookreader.jumpToIndex(curIndex);
|
80
|
-
}
|
81
|
-
}
|
82
|
-
|
83
|
-
/**
|
84
|
-
* Global event emitter for when Book Navigator loads
|
85
|
-
*/
|
86
|
-
emitPostInit() {
|
87
|
-
// emit global event when book nav has loaded with current bookreader selector
|
88
|
-
this.dispatchEvent(new CustomEvent(`BrBookNav:${events.PostInit}`, {
|
89
|
-
detail: { brSelector: this.bookreader?.el },
|
90
|
-
bubbles: true,
|
91
|
-
composed: true,
|
92
|
-
}));
|
93
|
-
}
|
94
|
-
|
95
|
-
/**
|
96
|
-
* Instantiates books submenus & their update callbacks
|
97
|
-
*
|
98
|
-
* NOTE: we are doing our best to scope bookreader's instance.
|
99
|
-
* If your submenu provider uses a bookreader instance to read, manually
|
100
|
-
* manipulate BookReader, please update the navigator's instance of it
|
101
|
-
* to keep it in sync.
|
102
|
-
*/
|
103
|
-
initializeBookSubmenus() {
|
104
|
-
this.menuProviders = {
|
105
|
-
search: new SearchProvider(
|
106
|
-
/**
|
107
|
-
* Search specific menu updates
|
108
|
-
* @param {BookReader} brInstance
|
109
|
-
* @param {{ searchCanceled: boolean }} searchUpdates
|
110
|
-
*/
|
111
|
-
(brInstance = null, searchUpdates = {}) => {
|
112
|
-
if (brInstance) {
|
113
|
-
/* refresh br instance reference */
|
114
|
-
this.bookreader = brInstance;
|
115
|
-
}
|
116
|
-
this.updateMenuContents();
|
117
|
-
const wideEnoughToOpenMenu = this.brWidth >= 640;
|
118
|
-
if (wideEnoughToOpenMenu && !searchUpdates?.searchCanceled) {
|
119
|
-
/* open side search menu */
|
120
|
-
this.updateSearchSideMenu('open');
|
121
|
-
}
|
122
|
-
},
|
123
|
-
this.bookreader,
|
124
|
-
),
|
125
|
-
downloads: new DownloadProvider(),
|
126
|
-
visualAdjustments: new VisualAdjustmentProvider({
|
127
|
-
onOptionChange: (event, brInstance = null) => {
|
128
|
-
if (brInstance) {
|
129
|
-
/* refresh br instance reference */
|
130
|
-
this.bookreader = brInstance;
|
131
|
-
}
|
132
|
-
this.updateMenuContents();
|
133
|
-
},
|
134
|
-
bookContainerSelector: this.pageContainerSelector,
|
135
|
-
bookreader: this.bookreader,
|
136
|
-
}),
|
137
|
-
share: new SharingProvider(this.book.metadata, this.baseHost, this.itemType),
|
138
|
-
bookmarks: new BookmarksProvider(this.bookmarksOptions, this.bookreader)
|
139
|
-
};
|
140
|
-
|
141
|
-
this.addMenuShortcut('search'); /* start with search as a shortcut */
|
142
|
-
this.updateMenuContents();
|
143
|
-
}
|
144
|
-
|
145
|
-
/** gets element that houses the bookreader in light dom */
|
146
|
-
get mainBRContainer() {
|
147
|
-
return document.querySelector(this.bookreader.el);
|
148
|
-
}
|
149
|
-
|
150
|
-
get bookmarksOptions() {
|
151
|
-
const referrerStr = `referer=${encodeURIComponent(location.href)}`
|
152
|
-
return {
|
153
|
-
loginUrl: `https://${this.baseHost}/account/login?${referrerStr}`,
|
154
|
-
displayMode: this.signedIn ? 'bookmarks' : 'login',
|
155
|
-
showItemNavigatorModal: this.showItemNavigatorModal.bind(this),
|
156
|
-
closeItemNavigatorModal: this.closeItemNavigatorModal.bind(this),
|
157
|
-
onBookmarksChanged: (bookmarks) => {
|
158
|
-
const method = Object.keys(bookmarks).length ? 'add' : 'remove';
|
159
|
-
this[`${method}MenuShortcut`]('bookmarks');
|
160
|
-
this.updateMenuContents();
|
161
|
-
},
|
162
|
-
};
|
163
|
-
}
|
164
|
-
|
165
|
-
/**
|
166
|
-
* Open side search menu
|
167
|
-
* @param {('open'|'close'|'toggle')} action
|
168
|
-
*/
|
169
|
-
updateSearchSideMenu(action = 'open') {
|
170
|
-
const event = new CustomEvent(
|
171
|
-
events.updateSideMenu, {
|
172
|
-
detail: { menuId: 'search', action },
|
173
|
-
},
|
174
|
-
);
|
175
|
-
this.dispatchEvent(event);
|
176
|
-
}
|
177
|
-
|
178
|
-
/**
|
179
|
-
* Sets order of menu and emits custom event when done
|
180
|
-
*/
|
181
|
-
updateMenuContents() {
|
182
|
-
const {
|
183
|
-
search, downloads, visualAdjustments, share, bookmarks,
|
184
|
-
} = this.menuProviders;
|
185
|
-
const availableMenus = [search, bookmarks, visualAdjustments, share].filter((menu) => !!menu);
|
186
|
-
|
187
|
-
if (this.shouldShowDownloadsMenu()) {
|
188
|
-
downloads.update(this.downloadableTypes);
|
189
|
-
availableMenus.splice(1, 0, downloads);
|
190
|
-
}
|
191
|
-
|
192
|
-
const event = new CustomEvent(
|
193
|
-
events.menuUpdated, {
|
194
|
-
detail: availableMenus,
|
195
|
-
},
|
196
|
-
);
|
197
|
-
this.dispatchEvent(event);
|
198
|
-
}
|
199
|
-
|
200
|
-
/**
|
201
|
-
* Confirms if we should show the downloads menu
|
202
|
-
* @returns {bool}
|
203
|
-
*/
|
204
|
-
shouldShowDownloadsMenu() {
|
205
|
-
if (this.model.isRestricted === false) { return true; }
|
206
|
-
if (this.isAdmin) { return true; }
|
207
|
-
const { user_loan_record = {} } = this.lendingStatus;
|
208
|
-
const hasNoLoanRecord = Array.isArray(user_loan_record); /* (bc PHP assoc. arrays) */
|
209
|
-
|
210
|
-
if (hasNoLoanRecord) { return false; }
|
211
|
-
|
212
|
-
const hasValidLoan = user_loan_record.type && (user_loan_record.type !== 'SESSION_LOAN');
|
213
|
-
return hasValidLoan;
|
214
|
-
}
|
215
|
-
|
216
|
-
/**
|
217
|
-
* Adds a provider object to the menuShortcuts array property if it isn't
|
218
|
-
* already added. menuShortcuts are then sorted by shortcutOrder and
|
219
|
-
* a menuShortcutsUpdated event is emitted.
|
220
|
-
*
|
221
|
-
* @param {string} menuId - a string matching the id property of a provider
|
222
|
-
*/
|
223
|
-
addMenuShortcut(menuId) {
|
224
|
-
if (this.menuShortcuts.find((m) => m.id === menuId)) { return; }
|
225
|
-
|
226
|
-
this.menuShortcuts.push(this.menuProviders[menuId]);
|
227
|
-
this.sortMenuShortcuts();
|
228
|
-
this.emitMenuShortcutsUpdated();
|
229
|
-
}
|
230
|
-
|
231
|
-
/**
|
232
|
-
* Removes a provider object from the menuShortcuts array and emits a
|
233
|
-
* menuShortcutsUpdated event.
|
234
|
-
*
|
235
|
-
* @param {string} menuId - a string matching the id property of a provider
|
236
|
-
*/
|
237
|
-
removeMenuShortcut(menuId) {
|
238
|
-
this.menuShortcuts = this.menuShortcuts.filter((m) => m.id !== menuId);
|
239
|
-
this.emitMenuShortcutsUpdated();
|
240
|
-
}
|
241
|
-
|
242
|
-
/**
|
243
|
-
* Sorts the menuShortcuts property by comparing each provider's id to
|
244
|
-
* the id in each iteration over the shortcutOrder array.
|
245
|
-
*/
|
246
|
-
sortMenuShortcuts() {
|
247
|
-
this.menuShortcuts = this.shortcutOrder.reduce((shortcuts, id) => {
|
248
|
-
const menu = this.menuShortcuts.find((m) => m.id === id);
|
249
|
-
if (menu) { shortcuts.push(menu); }
|
250
|
-
return shortcuts;
|
251
|
-
}, []);
|
252
|
-
}
|
253
|
-
|
254
|
-
emitMenuShortcutsUpdated() {
|
255
|
-
const event = new CustomEvent('menuShortcutsUpdated', {
|
256
|
-
detail: this.menuShortcuts,
|
257
|
-
});
|
258
|
-
this.dispatchEvent(event);
|
259
|
-
}
|
260
|
-
|
261
|
-
/**
|
262
|
-
* Core bookreader event handler registry
|
263
|
-
*
|
264
|
-
* NOTE: we are trying to keep bookreader's instance in scope
|
265
|
-
* Please update Book Navigator's instance reference of it to keep it current
|
266
|
-
*/
|
267
|
-
bindEventListeners() {
|
268
|
-
window.addEventListener('BookReader:PostInit', (e) => {
|
269
|
-
this.bookreader = e.detail.props;
|
270
|
-
this.bookReaderLoaded = true;
|
271
|
-
this.bookReaderCannotLoad = false;
|
272
|
-
this.fullscreenMgr = new BRFullscreenMgr(this.bookreader.el);
|
273
|
-
|
274
|
-
this.initializeBookSubmenus();
|
275
|
-
setTimeout(() => this.bookreader.resize(), 0);
|
276
|
-
this.brResizeObserver = new ResizeObserver((elements) => this.reactToBrResize(elements));
|
277
|
-
this.brResizeObserver.observe(this.mainBRContainer);
|
278
|
-
});
|
279
|
-
window.addEventListener('BookReader:fullscreenToggled', (event) => {
|
280
|
-
const { detail: { props: brInstance = null } } = event;
|
281
|
-
if (brInstance) {
|
282
|
-
this.bookreader = brInstance;
|
283
|
-
}
|
284
|
-
this.manageFullScreenBehavior(event);
|
285
|
-
}, { passive: true });
|
286
|
-
window.addEventListener('BookReader:ToggleSearchMenu', (event) => {
|
287
|
-
this.dispatchEvent(new CustomEvent(events.updateSideMenu, {
|
288
|
-
detail: { menuId: 'search', action: 'toggle' },
|
289
|
-
}));
|
290
|
-
});
|
291
|
-
window.addEventListener('LendingFlow:PostInit', ({ detail }) => {
|
292
|
-
const {
|
293
|
-
downloadTypesAvailable, lendingStatus, isAdmin, previewType,
|
294
|
-
} = detail;
|
295
|
-
this.lendingInitialized = true;
|
296
|
-
this.downloadableTypes = downloadTypesAvailable;
|
297
|
-
this.lendingStatus = lendingStatus;
|
298
|
-
this.isAdmin = isAdmin;
|
299
|
-
this.bookReaderCannotLoad = previewType === 'singlePagePreview';
|
300
|
-
});
|
301
|
-
window.addEventListener('BRJSIA:PostInit', ({ detail }) => {
|
302
|
-
const { isRestricted, downloadURLs } = detail;
|
303
|
-
this.bookReaderLoaded = true;
|
304
|
-
this.downloadableTypes = downloadURLs;
|
305
|
-
this.model.setRestriction(isRestricted);
|
306
|
-
});
|
307
|
-
}
|
308
|
-
|
309
|
-
/**
|
310
|
-
* Uses resize observer to fire BookReader's `resize` functionality
|
311
|
-
* We do not want to trigger resize IF:
|
312
|
-
* - book animation is happening
|
313
|
-
* - book is in fullscreen (fullscreen is handled separately)
|
314
|
-
*
|
315
|
-
* @param { Object } entries - resize observer entries
|
316
|
-
*/
|
317
|
-
reactToBrResize(entries = []) {
|
318
|
-
const startBrWidth = this.brWidth;
|
319
|
-
const { animating } = this.bookreader;
|
320
|
-
|
321
|
-
entries.forEach(({ contentRect, target }) => {
|
322
|
-
if (target === this.mainBRContainer) {
|
323
|
-
this.brWidth = contentRect.width;
|
324
|
-
}
|
325
|
-
});
|
326
|
-
setTimeout(() => {
|
327
|
-
if (startBrWidth && !animating) {
|
328
|
-
this.bookreader.resize();
|
329
|
-
}
|
330
|
-
}, 0);
|
331
|
-
}
|
332
|
-
|
333
|
-
/**
|
334
|
-
* Manages Fullscreen behavior
|
335
|
-
* This makes sure that controls are _always_ in view
|
336
|
-
* We need this to accommodate LOAN BAR during fullscreen
|
337
|
-
*/
|
338
|
-
manageFullScreenBehavior() {
|
339
|
-
this.emitFullScreenState();
|
340
|
-
|
341
|
-
if (!this.bookreader.isFullscreen()) {
|
342
|
-
this.fullscreenMgr.teardown();
|
343
|
-
} else {
|
344
|
-
this.fullscreenMgr.setup(this.bookreader);
|
345
|
-
}
|
346
|
-
}
|
347
|
-
|
348
|
-
/**
|
349
|
-
* Intercepts and relays fullscreen toggle events
|
350
|
-
*/
|
351
|
-
emitFullScreenState() {
|
352
|
-
const isFullScreen = this.bookreader.isFullscreen();
|
353
|
-
const event = new CustomEvent('ViewportInFullScreen', {
|
354
|
-
detail: { isFullScreen },
|
355
|
-
});
|
356
|
-
this.dispatchEvent(event);
|
357
|
-
}
|
358
|
-
|
359
|
-
emitShowItemNavigatorModal(e) {
|
360
|
-
this.dispatchEvent(new CustomEvent('showItemNavigatorModal', {
|
361
|
-
detail: e.detail,
|
362
|
-
}));
|
363
|
-
}
|
364
|
-
|
365
|
-
emitCloseItemNavigatorModal() {
|
366
|
-
this.dispatchEvent(new CustomEvent('closeItemNavigatorModal'));
|
367
|
-
}
|
368
|
-
|
369
|
-
showItemNavigatorModal(e) {
|
370
|
-
this.emitShowItemNavigatorModal(e);
|
371
|
-
}
|
372
|
-
|
373
|
-
closeItemNavigatorModal() {
|
374
|
-
this.emitCloseItemNavigatorModal();
|
375
|
-
}
|
376
|
-
|
377
|
-
get loader() {
|
378
|
-
const loader = html`
|
379
|
-
<div class="book-loader">${bookLoader}<div>
|
380
|
-
<h3>Loading viewer</h3>
|
381
|
-
`;
|
382
|
-
return !this.bookReaderLoaded ? loader : nothing;
|
383
|
-
}
|
384
|
-
|
385
|
-
get loadingClass() {
|
386
|
-
return !this.bookReaderLoaded ? 'loading' : '';
|
387
|
-
}
|
388
|
-
|
389
|
-
get itemImage() {
|
390
|
-
const url = `https://${this.baseHost}/services/img/${this.book.metadata.identifier}`;
|
391
|
-
return html`<img src="${url}" alt="cover image for ${this.book.metadata.identifier}">`;
|
392
|
-
}
|
393
|
-
|
394
|
-
render() {
|
395
|
-
const placeholder = this.bookReaderCannotLoad ? this.itemImage : this.loader;
|
396
|
-
return html`<div id="book-navigator" class="${this.loadingClass}">
|
397
|
-
${placeholder}
|
398
|
-
<slot name="bookreader"></slot>
|
399
|
-
</div>
|
400
|
-
`;
|
401
|
-
}
|
402
|
-
|
403
|
-
static get styles() {
|
404
|
-
return css`
|
405
|
-
#book-navigator.loading {
|
406
|
-
display: flex;
|
407
|
-
align-items: center;
|
408
|
-
justify-content: center;
|
409
|
-
min-height: 30vh;
|
410
|
-
}
|
411
|
-
|
412
|
-
#book-navigator .book-loader {
|
413
|
-
width: 30%;
|
414
|
-
margin: auto;
|
415
|
-
text-align: center;
|
416
|
-
color: var(--primaryTextColor);
|
417
|
-
}
|
418
|
-
|
419
|
-
.book-loader svg {
|
420
|
-
display: block;
|
421
|
-
width: 60%;
|
422
|
-
max-width: 100px;
|
423
|
-
height: auto;
|
424
|
-
margin: auto;
|
425
|
-
}
|
426
|
-
|
427
|
-
svg * {
|
428
|
-
fill: var(--primaryTextColor);
|
429
|
-
}
|
430
|
-
|
431
|
-
svg .ring {
|
432
|
-
animation: rotate 1.3s infinite linear;
|
433
|
-
transform-origin: 50px 50px;
|
434
|
-
transform-box: fill-box;
|
435
|
-
}
|
436
|
-
|
437
|
-
@keyframes rotate {
|
438
|
-
0% {
|
439
|
-
transform: rotate(-360deg);
|
440
|
-
}
|
441
|
-
}
|
442
|
-
`
|
443
|
-
}
|
444
|
-
}
|
445
|
-
|
446
|
-
customElements.define('book-navigator', BookNavigator);
|
@@ -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,83 +0,0 @@
|
|
1
|
-
import Debouncer from '../util/debouncer';
|
2
|
-
|
3
|
-
/**
|
4
|
-
* Manages fullscreen size
|
5
|
-
* so that bookreader chrome is always visible
|
6
|
-
* This is a shim to hold us until we update loan bar
|
7
|
-
* https://drive.google.com/drive/folders/1Ym9FDMZPiM4EbNh3NU-_2h8kizIYaLWt
|
8
|
-
*/
|
9
|
-
export default class BRFullscreenMgr {
|
10
|
-
constructor(brSelector = '#BookReader') {
|
11
|
-
this.debounceTime = 250;
|
12
|
-
this.savedScrollY = 0;
|
13
|
-
this.savedScrollX = 0;
|
14
|
-
this.brSelector = brSelector;
|
15
|
-
|
16
|
-
this.setup = this.setup.bind(this);
|
17
|
-
this.teardown = this.teardown.bind(this);
|
18
|
-
this.resizeBookReaderContainer = this.resizeBookReaderContainer.bind(this);
|
19
|
-
|
20
|
-
this.handleResizeEvent = this.handleResizeEvent.bind(this);
|
21
|
-
|
22
|
-
this.handleBookReaderHeight = new Debouncer(
|
23
|
-
this.resizeBookReaderContainer, this.debounceTime, this,
|
24
|
-
);
|
25
|
-
}
|
26
|
-
|
27
|
-
get brDom() {
|
28
|
-
return document.querySelector(this.brSelector);
|
29
|
-
}
|
30
|
-
|
31
|
-
/**
|
32
|
-
* Sets bookreader height
|
33
|
-
* & adds resize, orientationchange listeners
|
34
|
-
* & passes captured scroll positions
|
35
|
-
*
|
36
|
-
* @param {object} brInstance
|
37
|
-
*/
|
38
|
-
setup(brInstance) {
|
39
|
-
this.bookreader = brInstance;
|
40
|
-
|
41
|
-
this.resizeBookReaderContainer();
|
42
|
-
window.addEventListener('resize', this.handleResizeEvent);
|
43
|
-
}
|
44
|
-
|
45
|
-
/**
|
46
|
-
* Resets BookReader height
|
47
|
-
* & removes event handlers, resets captured scroll positions
|
48
|
-
*/
|
49
|
-
teardown() {
|
50
|
-
this.brDom.setAttribute('style', '');
|
51
|
-
window.removeEventListener('resize', this.handleResizeEvent);
|
52
|
-
window.scrollTo(this.savedScrollX, this.savedScrollY);
|
53
|
-
this.savedScrollX = 0;
|
54
|
-
this.savedScrollY = 0;
|
55
|
-
}
|
56
|
-
|
57
|
-
/**
|
58
|
-
* Event listener for resize & orientationchange
|
59
|
-
*/
|
60
|
-
handleResizeEvent() {
|
61
|
-
this.handleBookReaderHeight.execute();
|
62
|
-
}
|
63
|
-
|
64
|
-
/**
|
65
|
-
* Calculates & sets BookReader's needed height to
|
66
|
-
* take the loan bar into account
|
67
|
-
* + appends fullscreen classes to DOM
|
68
|
-
*/
|
69
|
-
resizeBookReaderContainer() {
|
70
|
-
const { scrollX, scrollY } = window;
|
71
|
-
this.savedScrollX = scrollX;
|
72
|
-
this.savedScrollY = scrollY;
|
73
|
-
this.bookreader.updateBrClasses();
|
74
|
-
|
75
|
-
const loanbar = document.querySelector('.BookReaderMessage');
|
76
|
-
const loanbarHeight = loanbar?.offsetHeight ?? 0;
|
77
|
-
const windowHeight = window.innerHeight;
|
78
|
-
const newHeight = `${(windowHeight - loanbarHeight)}px`;
|
79
|
-
this.brDom.style.height = newHeight;
|
80
|
-
this.brDom.style.top = loanbarHeight;
|
81
|
-
window.scrollTo(0, 0);
|
82
|
-
}
|
83
|
-
}
|