@internetarchive/bookreader 5.0.0-88-alpha.8 → 5.0.0-88-alpha.10
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/dist/esm/BookNavigator/assets/bookmark-colors.js +4 -0
- package/dist/esm/BookNavigator/assets/button-base.js +4 -0
- package/dist/esm/BookNavigator/assets/ia-logo.js +4 -0
- package/dist/esm/BookNavigator/assets/icon_checkmark.js +8 -0
- package/dist/esm/BookNavigator/assets/icon_close.js +4 -0
- package/dist/esm/BookNavigator/book-navigator.js +612 -0
- package/dist/esm/BookNavigator/bookmarks/bookmark-button.js +35 -0
- package/dist/esm/BookNavigator/bookmarks/bookmark-edit.js +78 -0
- package/dist/esm/BookNavigator/bookmarks/bookmarks-list.js +160 -0
- package/dist/esm/BookNavigator/bookmarks/bookmarks-loginCTA.js +24 -0
- package/dist/esm/BookNavigator/bookmarks/bookmarks-provider.js +55 -0
- package/dist/esm/BookNavigator/bookmarks/ia-bookmarks.js +521 -0
- package/dist/esm/BookNavigator/delete-modal-actions.js +29 -0
- package/dist/esm/BookNavigator/downloads/downloads-provider.js +84 -0
- package/dist/esm/BookNavigator/downloads/downloads.js +69 -0
- package/dist/esm/BookNavigator/search/search-provider.js +238 -0
- package/dist/esm/BookNavigator/search/search-results.js +161 -0
- package/dist/esm/BookNavigator/sharing.js +26 -0
- package/dist/esm/BookNavigator/viewable-files.js +94 -0
- package/dist/esm/BookNavigator/visual-adjustments/visual-adjustments-provider.js +83 -0
- package/dist/esm/BookNavigator/visual-adjustments/visual-adjustments.js +131 -0
- package/dist/esm/BookReader/BookModel.js +575 -0
- package/dist/esm/BookReader/DragScrollable.js +224 -0
- package/dist/esm/BookReader/ImageCache.js +122 -0
- package/dist/esm/BookReader/Mode1Up.js +114 -0
- package/dist/esm/BookReader/Mode1UpLit.js +579 -0
- package/dist/esm/BookReader/Mode2Up.js +106 -0
- package/dist/esm/BookReader/Mode2UpLit.js +1020 -0
- package/dist/esm/BookReader/ModeCoordinateSpace.js +28 -0
- package/dist/esm/BookReader/ModeSmoothZoom.js +318 -0
- package/dist/esm/BookReader/ModeThumb.js +366 -0
- package/dist/esm/BookReader/Navbar/Navbar.js +253 -0
- package/dist/esm/BookReader/PageContainer.js +165 -0
- package/dist/esm/BookReader/ReduceSet.js +27 -0
- package/dist/esm/BookReader/Toolbar/Toolbar.js +242 -0
- package/dist/esm/BookReader/events.js +20 -0
- package/dist/esm/BookReader/options.js +331 -0
- package/dist/esm/BookReader/utils/HTMLDimensionsCacher.js +48 -0
- package/dist/esm/BookReader/utils/ScrollClassAdder.js +31 -0
- package/dist/esm/BookReader/utils/SelectionObserver.js +42 -0
- package/dist/esm/BookReader/utils/classes.js +37 -0
- package/dist/esm/BookReader/utils.js +315 -0
- package/dist/esm/BookReader.js +1827 -0
- package/dist/esm/assets/icons/1up.svg +12 -0
- package/dist/esm/assets/icons/2up.svg +15 -0
- package/dist/esm/assets/icons/advance.svg +26 -0
- package/dist/esm/assets/icons/chevron-right.svg +1 -0
- package/dist/esm/assets/icons/close-circle-dark.svg +1 -0
- package/dist/esm/assets/icons/close-circle.svg +1 -0
- package/dist/esm/assets/icons/fullscreen.svg +17 -0
- package/dist/esm/assets/icons/fullscreen_exit.svg +17 -0
- package/dist/esm/assets/icons/hamburger.svg +15 -0
- package/dist/esm/assets/icons/left-arrow.svg +12 -0
- package/dist/esm/assets/icons/magnify-minus.svg +12 -0
- package/dist/esm/assets/icons/magnify-plus.svg +13 -0
- package/dist/esm/assets/icons/magnify.svg +15 -0
- package/dist/esm/assets/icons/pause.svg +23 -0
- package/dist/esm/assets/icons/play.svg +22 -0
- package/dist/esm/assets/icons/playback-speed.svg +34 -0
- package/dist/esm/assets/icons/read-aloud.svg +22 -0
- package/dist/esm/assets/icons/review.svg +22 -0
- package/dist/esm/assets/icons/thumbnails.svg +17 -0
- package/dist/esm/assets/icons/voice.svg +1 -0
- package/dist/esm/assets/icons/volume-full.svg +22 -0
- package/dist/esm/assets/images/BRicons.png +0 -0
- package/dist/esm/assets/images/BRicons.svg +94 -0
- package/dist/esm/assets/images/BRicons_ia.png +0 -0
- package/dist/esm/assets/images/back_pages.png +0 -0
- package/dist/esm/assets/images/book_bottom_icon.png +0 -0
- package/dist/esm/assets/images/book_down_icon.png +0 -0
- package/dist/esm/assets/images/book_left_icon.png +0 -0
- package/dist/esm/assets/images/book_leftmost_icon.png +0 -0
- package/dist/esm/assets/images/book_right_icon.png +0 -0
- package/dist/esm/assets/images/book_rightmost_icon.png +0 -0
- package/dist/esm/assets/images/book_top_icon.png +0 -0
- package/dist/esm/assets/images/book_up_icon.png +0 -0
- package/dist/esm/assets/images/books_graphic.svg +177 -0
- package/dist/esm/assets/images/booksplit.png +0 -0
- package/dist/esm/assets/images/control_pause_icon.png +0 -0
- package/dist/esm/assets/images/control_play_icon.png +0 -0
- package/dist/esm/assets/images/embed_icon.png +0 -0
- package/dist/esm/assets/images/icon-home-ia.png +0 -0
- package/dist/esm/assets/images/icon_OL-logo-xs.png +0 -0
- package/dist/esm/assets/images/icon_alert-xs.png +0 -0
- package/dist/esm/assets/images/icon_book.svg +12 -0
- package/dist/esm/assets/images/icon_bookmark.svg +12 -0
- package/dist/esm/assets/images/icon_close-pop.png +0 -0
- package/dist/esm/assets/images/icon_download.png +0 -0
- package/dist/esm/assets/images/icon_gear.svg +14 -0
- package/dist/esm/assets/images/icon_hamburger.svg +20 -0
- package/dist/esm/assets/images/icon_home.png +0 -0
- package/dist/esm/assets/images/icon_home.svg +21 -0
- package/dist/esm/assets/images/icon_home_ia.png +0 -0
- package/dist/esm/assets/images/icon_indicator.png +0 -0
- package/dist/esm/assets/images/icon_info.svg +11 -0
- package/dist/esm/assets/images/icon_one_page.svg +8 -0
- package/dist/esm/assets/images/icon_pause.svg +1 -0
- package/dist/esm/assets/images/icon_play.svg +1 -0
- package/dist/esm/assets/images/icon_playback-rate.svg +15 -0
- package/dist/esm/assets/images/icon_return.png +0 -0
- package/dist/esm/assets/images/icon_search_button.svg +8 -0
- package/dist/esm/assets/images/icon_share.svg +9 -0
- package/dist/esm/assets/images/icon_skip-ahead.svg +6 -0
- package/dist/esm/assets/images/icon_skip-back.svg +13 -0
- package/dist/esm/assets/images/icon_speaker.svg +18 -0
- package/dist/esm/assets/images/icon_speaker_open.svg +10 -0
- package/dist/esm/assets/images/icon_thumbnails.svg +12 -0
- package/dist/esm/assets/images/icon_toc.svg +5 -0
- package/dist/esm/assets/images/icon_two_pages.svg +9 -0
- package/dist/esm/assets/images/icon_zoomer.png +0 -0
- package/dist/esm/assets/images/loading.gif +0 -0
- package/dist/esm/assets/images/logo_icon.png +0 -0
- package/dist/esm/assets/images/marker_chap-off.png +0 -0
- package/dist/esm/assets/images/marker_chap-off.svg +11 -0
- package/dist/esm/assets/images/marker_chap-off_ia.png +0 -0
- package/dist/esm/assets/images/marker_chap-on.png +0 -0
- package/dist/esm/assets/images/marker_chap-on.svg +11 -0
- package/dist/esm/assets/images/marker_srch-on.svg +11 -0
- package/dist/esm/assets/images/marker_srchchap-off.png +0 -0
- package/dist/esm/assets/images/marker_srchchap-on.png +0 -0
- package/dist/esm/assets/images/nav_control-dn.png +0 -0
- package/dist/esm/assets/images/nav_control-dn_ia.png +0 -0
- package/dist/esm/assets/images/nav_control-up.png +0 -0
- package/dist/esm/assets/images/nav_control-up_ia.png +0 -0
- package/dist/esm/assets/images/nav_control.png +0 -0
- package/dist/esm/assets/images/one_page_mode_icon.png +0 -0
- package/dist/esm/assets/images/paper-badge.png +0 -0
- package/dist/esm/assets/images/print_icon.png +0 -0
- package/dist/esm/assets/images/progressbar.gif +0 -0
- package/dist/esm/assets/images/right_edges.png +0 -0
- package/dist/esm/assets/images/slider.png +0 -0
- package/dist/esm/assets/images/slider_ia.png +0 -0
- package/dist/esm/assets/images/thumbnail_mode_icon.png +0 -0
- package/dist/esm/assets/images/transparent.png +0 -0
- package/dist/esm/assets/images/two_page_mode_icon.png +0 -0
- package/dist/esm/assets/images/unviewable_page.png +0 -0
- package/dist/esm/assets/images/zoom_in_icon.png +0 -0
- package/dist/esm/assets/images/zoom_out_icon.png +0 -0
- package/dist/esm/css/BookReader.scss +85 -0
- package/dist/esm/css/_BRBookmarks.scss +29 -0
- package/dist/esm/css/_BRComponent.scss +13 -0
- package/dist/esm/css/_BRfloat.scss +197 -0
- package/dist/esm/css/_BRicon.scss +54 -0
- package/dist/esm/css/_BRmain.scss +262 -0
- package/dist/esm/css/_BRnav.scss +354 -0
- package/dist/esm/css/_BRpages.scss +213 -0
- package/dist/esm/css/_BRsearch.scss +268 -0
- package/dist/esm/css/_BRtoolbar.scss +84 -0
- package/dist/esm/css/_BRvendor.scss +5 -0
- package/dist/esm/css/_TextSelection.scss +108 -0
- package/dist/esm/css/_colorbox.scss +52 -0
- package/dist/esm/css/_controls.scss +257 -0
- package/dist/esm/css/_icons.scss +121 -0
- package/dist/esm/ia-bookreader/ia-bookreader.js +141 -0
- package/dist/esm/jquery-wrapper.js +3 -0
- package/dist/esm/plugins/plugin.archive_analytics.js +72 -0
- package/dist/esm/plugins/plugin.autoplay.js +119 -0
- package/dist/esm/plugins/plugin.chapters.js +288 -0
- package/dist/esm/plugins/plugin.iframe.js +44 -0
- package/dist/esm/plugins/plugin.iiif.js +146 -0
- package/dist/esm/plugins/plugin.resume.js +66 -0
- package/dist/esm/plugins/plugin.text_selection.js +621 -0
- package/dist/esm/plugins/plugin.vendor-fullscreen.js +227 -0
- package/dist/esm/plugins/search/plugin.search.js +499 -0
- package/dist/esm/plugins/search/utils.js +42 -0
- package/dist/esm/plugins/search/view.js +360 -0
- package/dist/esm/plugins/tts/AbstractTTSEngine.js +282 -0
- package/dist/esm/plugins/tts/FestivalTTSEngine.js +192 -0
- package/dist/esm/plugins/tts/PageChunk.js +105 -0
- package/dist/esm/plugins/tts/PageChunkIterator.js +155 -0
- package/dist/esm/plugins/tts/WebTTSEngine.js +364 -0
- package/dist/esm/plugins/tts/plugin.tts.js +315 -0
- package/dist/esm/plugins/tts/tooltip_dict.js +14 -0
- package/dist/esm/plugins/tts/utils.js +79 -0
- package/dist/esm/plugins/url/UrlPlugin.js +197 -0
- package/dist/esm/plugins/url/plugin.url.js +212 -0
- package/dist/esm/util/browserSniffing.js +56 -0
- package/dist/esm/util/debouncer.js +25 -0
- package/dist/esm/util/docCookies.js +75 -0
- package/dist/esm/util/strings.js +34 -0
- package/jsconfig.json +1 -0
- package/package.json +1 -7
@@ -0,0 +1,4 @@
|
|
1
|
+
var _templateObject;
|
2
|
+
function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
|
3
|
+
import { css } from 'lit';
|
4
|
+
export default css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .blue {\n --iconFillColor: var(--blueBookmarkColor, #0023f5);\n }\n\n .red {\n --iconFillColor: var(--redBookmarkColor, #eb3223);\n }\n\n .green {\n --iconFillColor: var(--greenBookmarkColor, #75ef4c);\n }\n"])));
|
@@ -0,0 +1,4 @@
|
|
1
|
+
var _templateObject;
|
2
|
+
function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
|
3
|
+
import { css } from 'lit';
|
4
|
+
export default css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .ia-button {\n min-height: 3rem;\n border: none;\n outline: none;\n cursor: pointer;\n color: var(--primaryTextColor);\n line-height: normal;\n border-radius: .4rem;\n text-align: center;\n vertical-align: middle;\n font-size: 1.4rem;\n font-family: inherit;\n display: inline-block;\n padding: .6rem 1.2rem;\n border: 1px solid transparent;\n\n white-space: nowrap;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n -o-user-select: none;\n user-select: none;\n }\n\n .ia-button.link,\n .ia-button.external {\n min-height: unset;\n text-decoration: none;\n }\n\n .ia-button:disabled,\n .ia-button.disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .ia-button.transparent {\n background-color: transparent;\n }\n \n .ia-button.slim {\n padding: 0;\n }\n\n .ia-button.primary {\n background-color: var(--primaryCTAFill);\n border-color: var(--primaryCTABorder);\n }\n\n .ia-button.cancel {\n background-color: var(--primaryErrorCTAFill);\n border-color: var(--primaryErrorCTABorder);\n }\n\n .ia-button.external {\n background: var(--secondaryCTAFill);\n border-color: var(--secondaryCTABorder);\n }\n"])));
|
@@ -0,0 +1,4 @@
|
|
1
|
+
var _templateObject;
|
2
|
+
function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
|
3
|
+
import { svg } from 'lit';
|
4
|
+
export default svg(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n <svg class=\"ia-logo\" width=\"27\" height=\"30\" viewBox=\"0 0 27 30\" xmlns=\"http://www.w3.org/2000/svg\" aria-labelledby=\"logoTitleID logoDescID\">\n <title id=\"logoTitleID\">Internet Archive logo</title>\n <desc id=\"logoDescID\">A line drawing of the Internet Archive headquarters building fa\xE7ade.</desc>\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <mask id=\"mask-2\" fill=\"white\">\n <path d=\"M26.6666667,28.6046512 L26.6666667,30 L0,30 L0.000283687943,28.6046512 L26.6666667,28.6046512 Z M25.6140351,26.5116279 L25.6140351,28.255814 L1.05263158,28.255814 L1.05263158,26.5116279 L25.6140351,26.5116279 Z M3.62469203,7.6744186 L3.91746909,7.82153285 L4.0639977,10.1739544 L4.21052632,13.9963932 L4.21052632,17.6725617 L4.0639977,22.255044 L4.03962296,25.3421929 L3.62469203,25.4651163 L2.16024641,25.4651163 L1.72094074,25.3421929 L1.55031755,22.255044 L1.40350877,17.6970339 L1.40350877,14.0211467 L1.55031755,10.1739544 L1.68423854,7.80887484 L1.98962322,7.6744186 L3.62469203,7.6744186 Z M24.6774869,7.6744186 L24.9706026,7.82153285 L25.1168803,10.1739544 L25.2631579,13.9963932 L25.2631579,17.6725617 L25.1168803,22.255044 L25.0927809,25.3421929 L24.6774869,25.4651163 L23.2130291,25.4651163 L22.7736357,25.3421929 L22.602418,22.255044 L22.4561404,17.6970339 L22.4561404,14.0211467 L22.602418,10.1739544 L22.7369262,7.80887484 L23.0420916,7.6744186 L24.6774869,7.6744186 Z M9.94042303,7.6744186 L10.2332293,7.82153285 L10.3797725,10.1739544 L10.5263158,13.9963932 L10.5263158,17.6725617 L10.3797725,22.255044 L10.3556756,25.3421929 L9.94042303,25.4651163 L8.47583122,25.4651163 L8.0362015,25.3421929 L7.86556129,22.255044 L7.71929825,17.6970339 L7.71929825,14.0211467 L7.86556129,10.1739544 L8.00005604,7.80887484 L8.30491081,7.6744186 L9.94042303,7.6744186 Z M18.0105985,7.6744186 L18.3034047,7.82153285 L18.449948,10.1739544 L18.5964912,13.9963932 L18.5964912,17.6725617 L18.449948,22.255044 L18.425851,25.3421929 L18.0105985,25.4651163 L16.5460067,25.4651163 L16.1066571,25.3421929 L15.9357367,22.255044 L15.7894737,17.6970339 L15.7894737,14.0211467 L15.9357367,10.1739544 L16.0702315,7.80887484 L16.3753664,7.6744186 L18.0105985,7.6744186 Z M25.6140351,4.53488372 L25.6140351,6.97674419 L1.05263158,6.97674419 L1.05263158,4.53488372 L25.6140351,4.53488372 Z M13.0806755,0 L25.9649123,2.93331338 L25.4484139,3.8372093 L0.771925248,3.8372093 L0,3.1041615 L13.0806755,0 Z\" id=\"path-1\"></path>\n </mask>\n <use fill=\"#FFFFFF\" xlink:href=\"#path-1\"></use>\n <g mask=\"url(#mask-2)\" fill=\"#FFFFFF\">\n <path d=\"M0,0 L26.6666667,0 L26.6666667,30 L0,30 L0,0 Z\" id=\"swatch\"></path>\n </g>\n </g>\n </svg>\n"])));
|
@@ -0,0 +1,8 @@
|
|
1
|
+
var _templateObject;
|
2
|
+
function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
|
3
|
+
import { css } from 'lit';
|
4
|
+
|
5
|
+
// Original SVG object for reference
|
6
|
+
// <svg height="10" viewBox="0 0 13 10" width="13" xmlns="http://www.w3.org/2000/svg"><path d="m4.33333333 10-4.33333333-4.16666667 1.73333333-1.66666666 2.6 2.5 6.93333337-6.66666667 1.7333333 1.66666667z" fill="#fff" fill-rule="evenodd"/></svg>
|
7
|
+
|
8
|
+
export default css(_templateObject || (_templateObject = _taggedTemplateLiteral(["data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEwIiB2aWV3Qm94PSIwIDAgMTMgMTAiIHdpZHRoPSIxMyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtNC4zMzMzMzMzMyAxMC00LjMzMzMzMzMzLTQuMTY2NjY2NjcgMS43MzMzMzMzMy0xLjY2NjY2NjY2IDIuNiAyLjUgNi45MzMzMzMzNy02LjY2NjY2NjY3IDEuNzMzMzMzMyAxLjY2NjY2NjY3eiIgZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+"])));
|
@@ -0,0 +1,4 @@
|
|
1
|
+
var _templateObject;
|
2
|
+
function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
|
3
|
+
import { css } from 'lit';
|
4
|
+
export default css(_templateObject || (_templateObject = _taggedTemplateLiteral(["data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgNDAgNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1sYWJlbGxlZGJ5PSJjbG9zZVRpdGxlSUQgY2xvc2VEZXNjSUQiPjxwYXRoIGQ9Ik0yOS4xOTIgMTAuODA4YTEuNSAxLjUgMCAwMTAgMi4xMkwyMi4xMjIgMjBsNy4wNyA3LjA3MmExLjUgMS41IDAgMDEtMi4xMiAyLjEyMWwtNy4wNzMtNy4wNy03LjA3IDcuMDdhMS41IDEuNSAwIDAxLTIuMTIxLTIuMTJsNy4wNy03LjA3My03LjA3LTcuMDdhMS41IDEuNSAwIDAxMi4xMi0yLjEyMUwyMCAxNy44NzhsNy4wNzItNy4wN2ExLjUgMS41IDAgMDEyLjEyMSAweiIgY2xhc3M9ImZpbGwtY29sb3IiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg=="])));
|
@@ -0,0 +1,612 @@
|
|
1
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
|
2
|
+
function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
5
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
7
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
8
|
+
// eslint-disable-next-line no-unused-vars
|
9
|
+
import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
|
10
|
+
// eslint-disable-next-line no-unused-vars
|
11
|
+
import { ModalManager } from '@internetarchive/modal-manager';
|
12
|
+
import { css, html, LitElement, nothing } from 'lit';
|
13
|
+
import SearchProvider from './search/search-provider.js';
|
14
|
+
import DownloadProvider from './downloads/downloads-provider.js';
|
15
|
+
import VisualAdjustmentProvider from './visual-adjustments/visual-adjustments-provider.js';
|
16
|
+
import BookmarksProvider from './bookmarks/bookmarks-provider.js';
|
17
|
+
import SharingProvider from './sharing.js';
|
18
|
+
import ViewableFilesProvider from './viewable-files.js';
|
19
|
+
import iaLogo from './assets/ia-logo.js';
|
20
|
+
var events = {
|
21
|
+
menuUpdated: 'menuUpdated',
|
22
|
+
updateSideMenu: 'updateSideMenu',
|
23
|
+
PostInit: 'PostInit',
|
24
|
+
ViewportInFullScreen: 'ViewportInFullScreen'
|
25
|
+
};
|
26
|
+
export class BookNavigator extends LitElement {
|
27
|
+
static get properties() {
|
28
|
+
return {
|
29
|
+
itemMD: {
|
30
|
+
type: Object
|
31
|
+
},
|
32
|
+
bookReaderLoaded: {
|
33
|
+
type: Boolean
|
34
|
+
},
|
35
|
+
bookreader: {
|
36
|
+
type: Object
|
37
|
+
},
|
38
|
+
bookIsRestricted: {
|
39
|
+
type: Boolean
|
40
|
+
},
|
41
|
+
downloadableTypes: {
|
42
|
+
type: Array
|
43
|
+
},
|
44
|
+
isAdmin: {
|
45
|
+
type: Boolean
|
46
|
+
},
|
47
|
+
lendingInitialized: {
|
48
|
+
type: Boolean
|
49
|
+
},
|
50
|
+
lendingStatus: {
|
51
|
+
type: Object
|
52
|
+
},
|
53
|
+
menuProviders: {
|
54
|
+
type: Object
|
55
|
+
},
|
56
|
+
menuShortcuts: {
|
57
|
+
type: Array
|
58
|
+
},
|
59
|
+
signedIn: {
|
60
|
+
type: Boolean
|
61
|
+
},
|
62
|
+
loaded: {
|
63
|
+
type: Boolean
|
64
|
+
},
|
65
|
+
sharedObserver: {
|
66
|
+
type: Object,
|
67
|
+
attribute: false
|
68
|
+
},
|
69
|
+
modal: {
|
70
|
+
type: Object,
|
71
|
+
attribute: false
|
72
|
+
},
|
73
|
+
fullscreenBranding: {
|
74
|
+
type: Object
|
75
|
+
}
|
76
|
+
};
|
77
|
+
}
|
78
|
+
constructor() {
|
79
|
+
super();
|
80
|
+
this.itemMD = undefined;
|
81
|
+
this.loaded = false;
|
82
|
+
this.bookReaderCannotLoad = false;
|
83
|
+
this.bookReaderLoaded = false;
|
84
|
+
this.bookreader = null;
|
85
|
+
this.bookIsRestricted = false;
|
86
|
+
this.downloadableTypes = [];
|
87
|
+
this.isAdmin = false;
|
88
|
+
this.lendingInitialized = false;
|
89
|
+
this.lendingStatus = {};
|
90
|
+
this.menuProviders = {};
|
91
|
+
this.menuShortcuts = [];
|
92
|
+
this.signedIn = false;
|
93
|
+
/** @type {ModalManager} */
|
94
|
+
this.modal = undefined;
|
95
|
+
/** @type {SharedResizeObserver} */
|
96
|
+
this.sharedObserver = undefined;
|
97
|
+
this.fullscreenBranding = iaLogo;
|
98
|
+
// Untracked properties
|
99
|
+
this.sharedObserverHandler = undefined;
|
100
|
+
this.brWidth = 0;
|
101
|
+
this.brHeight = 0;
|
102
|
+
this.shortcutOrder = [
|
103
|
+
/**
|
104
|
+
* sets exit FS button (`this.fullscreenBranding1)
|
105
|
+
* when `br.options.enableFSLogoShortcut`
|
106
|
+
*/
|
107
|
+
'fullscreen', 'volumes', 'chapters', 'search', 'bookmarks'];
|
108
|
+
}
|
109
|
+
disconnectedCallback() {
|
110
|
+
this.sharedObserver.removeObserver({
|
111
|
+
target: this.mainBRContainer,
|
112
|
+
handler: this.sharedObserverHandler
|
113
|
+
});
|
114
|
+
}
|
115
|
+
firstUpdated() {
|
116
|
+
this.bindEventListeners();
|
117
|
+
this.emitPostInit();
|
118
|
+
this.loaded = true;
|
119
|
+
}
|
120
|
+
updated(changed) {
|
121
|
+
if (!this.bookreader || !this.itemMD || !this.bookReaderLoaded) {
|
122
|
+
return;
|
123
|
+
}
|
124
|
+
var reload = changed.has('loaded') && this.loaded;
|
125
|
+
if (reload || changed.has('itemMD') || changed.has('bookreader') || changed.has('signedIn') || changed.has('isAdmin') || changed.has('modal')) {
|
126
|
+
this.initializeBookSubmenus();
|
127
|
+
}
|
128
|
+
if (changed.has('sharedObserver') && this.bookreader) {
|
129
|
+
this.loadSharedObserver();
|
130
|
+
this.initializeBookSubmenus();
|
131
|
+
}
|
132
|
+
if (changed.has('downloadableTypes')) {
|
133
|
+
this.initializeBookSubmenus();
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Global event emitter for when Book Navigator loads
|
139
|
+
*/
|
140
|
+
emitPostInit() {
|
141
|
+
var _this$bookreader;
|
142
|
+
// emit global event when book nav has loaded with current bookreader selector
|
143
|
+
this.dispatchEvent(new CustomEvent("BrBookNav:".concat(events.PostInit), {
|
144
|
+
detail: {
|
145
|
+
brSelector: (_this$bookreader = this.bookreader) === null || _this$bookreader === void 0 ? void 0 : _this$bookreader.el
|
146
|
+
},
|
147
|
+
bubbles: true,
|
148
|
+
composed: true
|
149
|
+
}));
|
150
|
+
}
|
151
|
+
|
152
|
+
/**
|
153
|
+
* @typedef {{
|
154
|
+
* baseHost: string,
|
155
|
+
* modal: ModalManager,
|
156
|
+
* sharedObserver: SharedResizeObserver,
|
157
|
+
* bookreader: BookReader,
|
158
|
+
* item: Item,
|
159
|
+
* signedIn: boolean,
|
160
|
+
* isAdmin: boolean,
|
161
|
+
* onProviderChange: (BookReader, object) => void,
|
162
|
+
* }} baseProviderConfig
|
163
|
+
*
|
164
|
+
* @return {baseProviderConfig}
|
165
|
+
*/
|
166
|
+
get baseProviderConfig() {
|
167
|
+
return {
|
168
|
+
baseHost: this.baseHost,
|
169
|
+
modal: this.modal,
|
170
|
+
sharedObserver: this.sharedObserver,
|
171
|
+
bookreader: this.bookreader,
|
172
|
+
item: this.itemMD,
|
173
|
+
signedIn: this.signedIn,
|
174
|
+
isAdmin: this.isAdmin,
|
175
|
+
onProviderChange: () => {}
|
176
|
+
};
|
177
|
+
}
|
178
|
+
get isWideEnoughToOpenMenu() {
|
179
|
+
return this.brWidth >= 640;
|
180
|
+
}
|
181
|
+
/**
|
182
|
+
* Instantiates books submenus & their update callbacks
|
183
|
+
*
|
184
|
+
* NOTE: we are doing our best to scope bookreader's instance.
|
185
|
+
* If your submenu provider uses a bookreader instance to read, manually
|
186
|
+
* manipulate BookReader, please update the navigator's instance of it
|
187
|
+
* to keep it in sync.
|
188
|
+
*/
|
189
|
+
initializeBookSubmenus() {
|
190
|
+
var _this = this;
|
191
|
+
var providers = {
|
192
|
+
visualAdjustments: new VisualAdjustmentProvider(_objectSpread(_objectSpread({}, this.baseProviderConfig), {}, {
|
193
|
+
/** Update menu contents */
|
194
|
+
onProviderChange: () => {
|
195
|
+
this.updateMenuContents();
|
196
|
+
}
|
197
|
+
}))
|
198
|
+
};
|
199
|
+
if (this.baseProviderConfig.item) {
|
200
|
+
// Share options currently rely on IA item metadata
|
201
|
+
providers.share = new SharingProvider(this.baseProviderConfig);
|
202
|
+
}
|
203
|
+
if (this.shouldShowDownloadsMenu()) {
|
204
|
+
providers.downloads = new DownloadProvider(this.baseProviderConfig);
|
205
|
+
}
|
206
|
+
if (this.bookreader.options.enableSearch) {
|
207
|
+
providers.search = new SearchProvider(_objectSpread(_objectSpread({}, this.baseProviderConfig), {}, {
|
208
|
+
/**
|
209
|
+
* Search specific menu updates
|
210
|
+
* @param {BookReader} brInstance
|
211
|
+
* @param {{ searchCanceled: boolean }} searchUpdates
|
212
|
+
*/
|
213
|
+
onProviderChange: function onProviderChange() {
|
214
|
+
var brInstance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
215
|
+
var searchUpdates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
216
|
+
if (brInstance) {
|
217
|
+
/* refresh br instance reference */
|
218
|
+
_this.bookreader = brInstance;
|
219
|
+
}
|
220
|
+
_this.updateMenuContents();
|
221
|
+
if (searchUpdates.openMenu === false) {
|
222
|
+
return;
|
223
|
+
}
|
224
|
+
if (_this.isWideEnoughToOpenMenu && !(searchUpdates !== null && searchUpdates !== void 0 && searchUpdates.searchCanceled)) {
|
225
|
+
/* open side search menu */
|
226
|
+
setTimeout(() => {
|
227
|
+
_this.updateSideMenu('search', 'open');
|
228
|
+
}, 0);
|
229
|
+
}
|
230
|
+
}
|
231
|
+
}));
|
232
|
+
}
|
233
|
+
if (this.bookreader.options.enableBookmarks) {
|
234
|
+
providers.bookmarks = new BookmarksProvider(_objectSpread(_objectSpread({}, this.baseProviderConfig), {}, {
|
235
|
+
onProviderChange: bookmarks => {
|
236
|
+
var method = Object.keys(bookmarks).length ? 'add' : 'remove';
|
237
|
+
this["".concat(method, "MenuShortcut")]('bookmarks');
|
238
|
+
this.updateMenuContents();
|
239
|
+
}
|
240
|
+
}));
|
241
|
+
}
|
242
|
+
|
243
|
+
// add shortcut for volumes if multipleBooksList exists
|
244
|
+
if (this.bookreader.options.enableMultipleBooks) {
|
245
|
+
providers.volumes = new ViewableFilesProvider(_objectSpread(_objectSpread({}, this.baseProviderConfig), {}, {
|
246
|
+
onProviderChange: function onProviderChange() {
|
247
|
+
var brInstance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
248
|
+
var volumesUpdates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
249
|
+
if (brInstance) {
|
250
|
+
/* refresh br instance reference */
|
251
|
+
_this.bookreader = brInstance;
|
252
|
+
}
|
253
|
+
_this.updateMenuContents();
|
254
|
+
if (_this.isWideEnoughToOpenMenu) {
|
255
|
+
/* open side search menu */
|
256
|
+
setTimeout(() => {
|
257
|
+
_this.updateSideMenu('volumes', 'open');
|
258
|
+
});
|
259
|
+
}
|
260
|
+
}
|
261
|
+
}));
|
262
|
+
}
|
263
|
+
Object.assign(this.menuProviders, providers);
|
264
|
+
this.addMenuShortcut('search');
|
265
|
+
this.addMenuShortcut('volumes');
|
266
|
+
this.updateMenuContents();
|
267
|
+
}
|
268
|
+
|
269
|
+
/** gets element that houses the bookreader in light dom */
|
270
|
+
get mainBRContainer() {
|
271
|
+
var _this$bookreader2;
|
272
|
+
return document.querySelector((_this$bookreader2 = this.bookreader) === null || _this$bookreader2 === void 0 ? void 0 : _this$bookreader2.el);
|
273
|
+
}
|
274
|
+
|
275
|
+
/** Fullscreen Shortcut */
|
276
|
+
addFullscreenShortcut() {
|
277
|
+
var closeFS = {
|
278
|
+
icon: this.fullscreenShortcut,
|
279
|
+
id: 'fullscreen'
|
280
|
+
};
|
281
|
+
this.menuShortcuts.push(closeFS);
|
282
|
+
this.sortMenuShortcuts();
|
283
|
+
this.emitMenuShortcutsUpdated();
|
284
|
+
}
|
285
|
+
deleteFullscreenShortcut() {
|
286
|
+
var updatedShortcuts = this.menuShortcuts.filter(_ref => {
|
287
|
+
var {
|
288
|
+
id
|
289
|
+
} = _ref;
|
290
|
+
return id !== 'fullscreen';
|
291
|
+
});
|
292
|
+
this.menuShortcuts = updatedShortcuts;
|
293
|
+
this.sortMenuShortcuts();
|
294
|
+
this.emitMenuShortcutsUpdated();
|
295
|
+
}
|
296
|
+
closeFullscreen() {
|
297
|
+
this.bookreader.exitFullScreen();
|
298
|
+
}
|
299
|
+
get fullscreenShortcut() {
|
300
|
+
return html(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n <button\n @click=", "\n title=\"Exit fullscreen view\"\n >", "</button>\n "])), () => this.closeFullscreen(), this.fullscreenBranding);
|
301
|
+
}
|
302
|
+
/** End Fullscreen Shortcut */
|
303
|
+
|
304
|
+
/**
|
305
|
+
* Open side menu
|
306
|
+
* @param {string} menuId
|
307
|
+
* @param {('open'|'close'|'toggle')} action
|
308
|
+
*/
|
309
|
+
updateSideMenu() {
|
310
|
+
var menuId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
311
|
+
var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'open';
|
312
|
+
if (!menuId) {
|
313
|
+
return;
|
314
|
+
}
|
315
|
+
var event = new CustomEvent(events.updateSideMenu, {
|
316
|
+
detail: {
|
317
|
+
menuId,
|
318
|
+
action
|
319
|
+
}
|
320
|
+
});
|
321
|
+
this.dispatchEvent(event);
|
322
|
+
}
|
323
|
+
|
324
|
+
/**
|
325
|
+
* Sets order of menu and emits custom event when done
|
326
|
+
*/
|
327
|
+
updateMenuContents() {
|
328
|
+
var {
|
329
|
+
search,
|
330
|
+
downloads,
|
331
|
+
visualAdjustments,
|
332
|
+
share,
|
333
|
+
bookmarks,
|
334
|
+
volumes,
|
335
|
+
chapters
|
336
|
+
} = this.menuProviders;
|
337
|
+
var availableMenus = [volumes, chapters, search, bookmarks, visualAdjustments, share].filter(menu => !!menu);
|
338
|
+
if (this.shouldShowDownloadsMenu()) {
|
339
|
+
downloads === null || downloads === void 0 || downloads.update(this.downloadableTypes);
|
340
|
+
availableMenus.splice(-2, 0, downloads);
|
341
|
+
}
|
342
|
+
var event = new CustomEvent(events.menuUpdated, {
|
343
|
+
detail: availableMenus
|
344
|
+
});
|
345
|
+
this.dispatchEvent(event);
|
346
|
+
}
|
347
|
+
|
348
|
+
/**
|
349
|
+
* Confirms if we should show the downloads menu
|
350
|
+
* @returns {bool}
|
351
|
+
*/
|
352
|
+
shouldShowDownloadsMenu() {
|
353
|
+
if (!this.downloadableTypes.length) {
|
354
|
+
return false;
|
355
|
+
}
|
356
|
+
if (this.bookIsRestricted === false) {
|
357
|
+
return true;
|
358
|
+
}
|
359
|
+
if (this.isAdmin) {
|
360
|
+
return true;
|
361
|
+
}
|
362
|
+
var {
|
363
|
+
user_loan_record = {}
|
364
|
+
} = this.lendingStatus;
|
365
|
+
var hasNoLoanRecord = Array.isArray(user_loan_record); /* (bc PHP assoc. arrays) */
|
366
|
+
|
367
|
+
if (hasNoLoanRecord) {
|
368
|
+
return false;
|
369
|
+
}
|
370
|
+
var hasValidLoan = user_loan_record.type && user_loan_record.type !== 'SESSION_LOAN';
|
371
|
+
return hasValidLoan;
|
372
|
+
}
|
373
|
+
|
374
|
+
/**
|
375
|
+
* Adds a provider object to the menuShortcuts array property if it isn't
|
376
|
+
* already added. menuShortcuts are then sorted by shortcutOrder and
|
377
|
+
* a menuShortcutsUpdated event is emitted.
|
378
|
+
*
|
379
|
+
* @param {string} menuId - a string matching the id property of a provider
|
380
|
+
*/
|
381
|
+
addMenuShortcut(menuId) {
|
382
|
+
if (this.menuShortcuts.find(m => m.id === menuId)) {
|
383
|
+
// menu is already there
|
384
|
+
return;
|
385
|
+
}
|
386
|
+
if (!this.menuProviders[menuId]) {
|
387
|
+
// no provider for this menu
|
388
|
+
return;
|
389
|
+
}
|
390
|
+
this.menuShortcuts.push(this.menuProviders[menuId]);
|
391
|
+
this.sortMenuShortcuts();
|
392
|
+
this.emitMenuShortcutsUpdated();
|
393
|
+
}
|
394
|
+
|
395
|
+
/**
|
396
|
+
* Removes a provider object from the menuShortcuts array and emits a
|
397
|
+
* menuShortcutsUpdated event.
|
398
|
+
*
|
399
|
+
* @param {string} menuId - a string matching the id property of a provider
|
400
|
+
*/
|
401
|
+
removeMenuShortcut(menuId) {
|
402
|
+
this.menuShortcuts = this.menuShortcuts.filter(m => m.id !== menuId);
|
403
|
+
this.emitMenuShortcutsUpdated();
|
404
|
+
}
|
405
|
+
|
406
|
+
/**
|
407
|
+
* Sorts the menuShortcuts property by comparing each provider's id to
|
408
|
+
* the id in each iteration over the shortcutOrder array.
|
409
|
+
*/
|
410
|
+
sortMenuShortcuts() {
|
411
|
+
this.menuShortcuts = this.shortcutOrder.reduce((shortcuts, id) => {
|
412
|
+
var menu = this.menuShortcuts.find(m => m.id === id);
|
413
|
+
if (menu) {
|
414
|
+
shortcuts.push(menu);
|
415
|
+
}
|
416
|
+
return shortcuts;
|
417
|
+
}, []);
|
418
|
+
}
|
419
|
+
emitMenuShortcutsUpdated() {
|
420
|
+
var event = new CustomEvent('menuShortcutsUpdated', {
|
421
|
+
detail: this.menuShortcuts
|
422
|
+
});
|
423
|
+
this.dispatchEvent(event);
|
424
|
+
}
|
425
|
+
emitLoadingStatusUpdate(loaded) {
|
426
|
+
var event = new CustomEvent('loadingStateUpdated', {
|
427
|
+
detail: {
|
428
|
+
loaded
|
429
|
+
}
|
430
|
+
});
|
431
|
+
this.dispatchEvent(event);
|
432
|
+
}
|
433
|
+
|
434
|
+
/**
|
435
|
+
* Core bookreader event handler registry
|
436
|
+
*
|
437
|
+
* NOTE: we are trying to keep bookreader's instance in scope
|
438
|
+
* Please update Book Navigator's instance reference of it to keep it current
|
439
|
+
*/
|
440
|
+
bindEventListeners() {
|
441
|
+
window.addEventListener('BookReader:PostInit', e => {
|
442
|
+
this.bookreader = e.detail.props;
|
443
|
+
this.bookreader.shell = this;
|
444
|
+
this.bookReaderLoaded = true;
|
445
|
+
this.bookReaderCannotLoad = false;
|
446
|
+
this.emitLoadingStatusUpdate(true);
|
447
|
+
this.loadSharedObserver();
|
448
|
+
setTimeout(() => {
|
449
|
+
this.bookreader.resize();
|
450
|
+
}, 0);
|
451
|
+
});
|
452
|
+
window.addEventListener('BookReader:fullscreenToggled', event => {
|
453
|
+
var {
|
454
|
+
detail: {
|
455
|
+
props: brInstance = null
|
456
|
+
}
|
457
|
+
} = event;
|
458
|
+
if (brInstance) {
|
459
|
+
this.bookreader = brInstance;
|
460
|
+
}
|
461
|
+
this.manageFullScreenBehavior();
|
462
|
+
}, {
|
463
|
+
passive: true
|
464
|
+
});
|
465
|
+
window.addEventListener('BookReader:ToggleSearchMenu', event => {
|
466
|
+
this.dispatchEvent(new CustomEvent(events.updateSideMenu, {
|
467
|
+
detail: {
|
468
|
+
menuId: 'search',
|
469
|
+
action: 'toggle'
|
470
|
+
}
|
471
|
+
}));
|
472
|
+
});
|
473
|
+
window.addEventListener('LendingFlow:PostInit', _ref2 => {
|
474
|
+
var {
|
475
|
+
detail
|
476
|
+
} = _ref2;
|
477
|
+
var {
|
478
|
+
downloadTypesAvailable,
|
479
|
+
lendingStatus,
|
480
|
+
isAdmin,
|
481
|
+
previewType
|
482
|
+
} = detail;
|
483
|
+
this.lendingInitialized = true;
|
484
|
+
this.downloadableTypes = downloadTypesAvailable;
|
485
|
+
this.lendingStatus = lendingStatus;
|
486
|
+
this.isAdmin = isAdmin;
|
487
|
+
this.bookReaderCannotLoad = previewType === 'singlePagePreview';
|
488
|
+
this.emitLoadingStatusUpdate(true);
|
489
|
+
});
|
490
|
+
window.addEventListener('BRJSIA:PostInit', _ref3 => {
|
491
|
+
var {
|
492
|
+
detail
|
493
|
+
} = _ref3;
|
494
|
+
var {
|
495
|
+
isRestricted,
|
496
|
+
downloadURLs
|
497
|
+
} = detail;
|
498
|
+
this.bookReaderLoaded = true;
|
499
|
+
this.downloadableTypes = downloadURLs;
|
500
|
+
this.bookIsRestricted = isRestricted;
|
501
|
+
});
|
502
|
+
window.addEventListener('contextmenu', e => this.manageContextMenuVisibility(e), {
|
503
|
+
capture: true
|
504
|
+
});
|
505
|
+
}
|
506
|
+
|
507
|
+
/** Display an element's context menu */
|
508
|
+
manageContextMenuVisibility(e) {
|
509
|
+
var _window$archive_analy, _e$target;
|
510
|
+
(_window$archive_analy = window.archive_analytics) === null || _window$archive_analy === void 0 || _window$archive_analy.send_event('BookReader', "contextmenu-".concat(this.bookIsRestricted ? 'restricted' : 'unrestricted'), (_e$target = e.target) === null || _e$target === void 0 || (_e$target = _e$target.classList) === null || _e$target === void 0 ? void 0 : _e$target.value);
|
511
|
+
if (!this.bookIsRestricted) {
|
512
|
+
return;
|
513
|
+
}
|
514
|
+
var imagePane = e.target.classList.value.match(/BRscreen|BRpageimage/g);
|
515
|
+
if (!imagePane) {
|
516
|
+
return;
|
517
|
+
}
|
518
|
+
e.preventDefault();
|
519
|
+
return false;
|
520
|
+
}
|
521
|
+
loadSharedObserver() {
|
522
|
+
var _this$sharedObserver;
|
523
|
+
this.sharedObserverHandler = {
|
524
|
+
handleResize: this.handleResize.bind(this)
|
525
|
+
};
|
526
|
+
(_this$sharedObserver = this.sharedObserver) === null || _this$sharedObserver === void 0 || _this$sharedObserver.addObserver({
|
527
|
+
target: this.mainBRContainer,
|
528
|
+
handler: this.sharedObserverHandler
|
529
|
+
});
|
530
|
+
}
|
531
|
+
|
532
|
+
/**
|
533
|
+
* Uses resize observer to fire BookReader's `resize` functionality
|
534
|
+
* We do not want to trigger resize IF:
|
535
|
+
* - book animation is happening
|
536
|
+
* - book is in fullscreen (fullscreen is handled separately)
|
537
|
+
*
|
538
|
+
* @param { target: HTMLElement, contentRect: DOMRectReadOnly } entry
|
539
|
+
*/
|
540
|
+
handleResize(_ref4) {
|
541
|
+
var {
|
542
|
+
contentRect,
|
543
|
+
target
|
544
|
+
} = _ref4;
|
545
|
+
var startBrWidth = this.brWidth;
|
546
|
+
var startBrHeight = this.brHeight;
|
547
|
+
var {
|
548
|
+
animating
|
549
|
+
} = this.bookreader;
|
550
|
+
if (target === this.mainBRContainer) {
|
551
|
+
this.brWidth = contentRect.width;
|
552
|
+
this.brHeight = contentRect.height;
|
553
|
+
}
|
554
|
+
if (!startBrWidth && this.brWidth) {
|
555
|
+
// loading up, let's update side menus
|
556
|
+
this.initializeBookSubmenus();
|
557
|
+
}
|
558
|
+
var widthChange = startBrWidth !== this.brWidth;
|
559
|
+
var heightChange = startBrHeight !== this.brHeight;
|
560
|
+
if (!animating && (widthChange || heightChange)) {
|
561
|
+
var _this$bookreader3;
|
562
|
+
(_this$bookreader3 = this.bookreader) === null || _this$bookreader3 === void 0 || _this$bookreader3.resize();
|
563
|
+
}
|
564
|
+
}
|
565
|
+
|
566
|
+
/**
|
567
|
+
* Manages Fullscreen behavior
|
568
|
+
* This makes sure that controls are _always_ in view
|
569
|
+
* We need this to accommodate LOAN BAR during fullscreen
|
570
|
+
*/
|
571
|
+
manageFullScreenBehavior() {
|
572
|
+
this.emitFullScreenState();
|
573
|
+
if (!this.bookreader.options.enableFSLogoShortcut) {
|
574
|
+
return;
|
575
|
+
}
|
576
|
+
var isFullScreen = this.bookreader.isFullscreen();
|
577
|
+
if (isFullScreen) {
|
578
|
+
this.addFullscreenShortcut();
|
579
|
+
} else {
|
580
|
+
this.deleteFullscreenShortcut();
|
581
|
+
}
|
582
|
+
}
|
583
|
+
|
584
|
+
/**
|
585
|
+
* Relays fullscreen toggle events
|
586
|
+
*/
|
587
|
+
emitFullScreenState() {
|
588
|
+
var isFullScreen = this.bookreader.isFullscreen();
|
589
|
+
var event = new CustomEvent('ViewportInFullScreen', {
|
590
|
+
detail: {
|
591
|
+
isFullScreen
|
592
|
+
}
|
593
|
+
});
|
594
|
+
this.dispatchEvent(event);
|
595
|
+
}
|
596
|
+
get itemImage() {
|
597
|
+
var _this$itemMD;
|
598
|
+
var identifier = (_this$itemMD = this.itemMD) === null || _this$itemMD === void 0 ? void 0 : _this$itemMD.metadata.identifier;
|
599
|
+
var url = "https://".concat(this.baseHost, "/services/img/").concat(identifier);
|
600
|
+
return html(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["<img class=\"cover-img\" src=", " alt=\"cover image for ", "\">"])), url, identifier);
|
601
|
+
}
|
602
|
+
get placeholder() {
|
603
|
+
return html(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["<div class=\"placeholder\">", "</div>"])), this.itemImage);
|
604
|
+
}
|
605
|
+
render() {
|
606
|
+
return html(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["<div id=\"book-navigator__root\">\n ", "\n ", "\n </div>\n "])), this.bookReaderCannotLoad ? this.placeholder : nothing, !this.bookReaderCannotLoad ? html(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["<slot name=\"main\"></slot>"]))) : nothing);
|
607
|
+
}
|
608
|
+
static get styles() {
|
609
|
+
return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n :host,\n #book-navigator__root,\n slot,\n slot > * {\n display: block;\n height: inherit;\n width: inherit;\n }\n .placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin: 5%;\n }\n .cover-img {\n max-height: 300px;\n }\n "])));
|
610
|
+
}
|
611
|
+
}
|
612
|
+
customElements.define('book-navigator', BookNavigator);
|
@@ -0,0 +1,35 @@
|
|
1
|
+
var _templateObject, _templateObject2;
|
2
|
+
function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
|
3
|
+
import { LitElement, html, css } from 'lit';
|
4
|
+
export default class BookmarkButton extends LitElement {
|
5
|
+
static get styles() {
|
6
|
+
return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n button {\n -webkit-appearance: none;\n appearance: none;\n outline: 0;\n border: none;\n padding: 0;\n height: 4rem;\n width: 4rem;\n background: transparent;\n cursor: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 0 16 24' width='16'%3E%3Cg fill='%23333' fill-rule='evenodd'%3E%3Cpath d='m15 0c.5522847 0 1 .44771525 1 1v23l-8-5.4545455-8 5.4545455v-23c0-.55228475.44771525-1 1-1zm-2 2h-10c-.51283584 0-.93550716.38604019-.99327227.88337887l-.00672773.11662113v18l6-4.3181818 6 4.3181818v-18c0-.51283584-.3860402-.93550716-.8833789-.99327227z'/%3E%3Cpath d='m8.75 6v2.25h2.25v1.5h-2.25v2.25h-1.5v-2.25h-2.25v-1.5h2.25v-2.25z' fill-rule='nonzero'/%3E%3C/g%3E%3C/svg%3E\"), pointer;\n position: relative;\n }\n button > * {\n display: block;\n position: absolute;\n top: 0.2rem;\n }\n button.left > * {\n left: 0.2rem;\n }\n\n button.right > * {\n right: 0.2rem;\n }\n "])));
|
7
|
+
}
|
8
|
+
static get properties() {
|
9
|
+
return {
|
10
|
+
side: {
|
11
|
+
type: String
|
12
|
+
},
|
13
|
+
state: {
|
14
|
+
type: String
|
15
|
+
}
|
16
|
+
};
|
17
|
+
}
|
18
|
+
constructor() {
|
19
|
+
super();
|
20
|
+
this.state = 'hollow';
|
21
|
+
this.side = undefined;
|
22
|
+
}
|
23
|
+
handleClick(e) {
|
24
|
+
e.preventDefault();
|
25
|
+
this.dispatchEvent(new CustomEvent('bookmarkButtonClicked'));
|
26
|
+
}
|
27
|
+
get title() {
|
28
|
+
return "".concat(this.state === 'hollow' ? 'Add' : 'Remove', " bookmark");
|
29
|
+
}
|
30
|
+
render() {
|
31
|
+
var position = this.side || 'right';
|
32
|
+
return html(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n <button title=", " @click=", " class=", ">\n <icon-bookmark state=", "></icon-bookmark>\n </button>\n "])), this.title, this.handleClick, position, this.state);
|
33
|
+
}
|
34
|
+
}
|
35
|
+
customElements.define('bookmark-button', BookmarkButton);
|