@internetarchive/bookreader 5.0.0-9-multiple-files → 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 +81 -7
- package/.github/workflows/npm-publish.yml +6 -20
- package/.testcaferc.js +10 -0
- package/BookReader/BookReader.css +505 -1442
- package/BookReader/BookReader.js +2 -21564
- 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 -12
- package/BookReader/icons/2up.svg +1 -15
- package/BookReader/icons/advance.svg +3 -26
- package/BookReader/icons/chevron-right.svg +1 -1
- package/BookReader/icons/close-circle-dark.svg +1 -0
- package/BookReader/icons/close-circle.svg +1 -1
- package/BookReader/icons/fullscreen.svg +1 -17
- package/BookReader/icons/fullscreen_exit.svg +1 -17
- package/BookReader/icons/hamburger.svg +1 -15
- package/BookReader/icons/left-arrow.svg +1 -12
- package/BookReader/icons/magnify-minus.svg +1 -16
- package/BookReader/icons/magnify-plus.svg +1 -17
- package/BookReader/icons/magnify.svg +1 -15
- package/BookReader/icons/pause.svg +1 -23
- package/BookReader/icons/play.svg +1 -22
- package/BookReader/icons/playback-speed.svg +1 -34
- package/BookReader/icons/read-aloud.svg +1 -22
- package/BookReader/icons/review.svg +3 -22
- package/BookReader/icons/thumbnails.svg +1 -17
- package/BookReader/icons/voice.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -22
- package/BookReader/images/BRicons.svg +5 -94
- package/BookReader/images/books_graphic.svg +1 -177
- package/BookReader/images/icon_book.svg +1 -12
- package/BookReader/images/icon_bookmark.svg +1 -12
- package/BookReader/images/icon_gear.svg +1 -14
- package/BookReader/images/icon_hamburger.svg +1 -20
- package/BookReader/images/icon_home.svg +1 -21
- package/BookReader/images/icon_info.svg +1 -11
- package/BookReader/images/icon_one_page.svg +1 -8
- package/BookReader/images/icon_pause.svg +1 -1
- package/BookReader/images/icon_play.svg +1 -1
- package/BookReader/images/icon_playback-rate.svg +1 -15
- package/BookReader/images/icon_search_button.svg +1 -8
- package/BookReader/images/icon_share.svg +1 -9
- package/BookReader/images/icon_skip-ahead.svg +1 -6
- package/BookReader/images/icon_skip-back.svg +2 -13
- package/BookReader/images/icon_speaker.svg +1 -18
- package/BookReader/images/icon_speaker_open.svg +1 -10
- package/BookReader/images/icon_thumbnails.svg +1 -12
- package/BookReader/images/icon_toc.svg +1 -5
- package/BookReader/images/icon_two_pages.svg +1 -9
- package/BookReader/images/marker_chap-off.svg +1 -11
- package/BookReader/images/marker_chap-on.svg +1 -11
- package/BookReader/images/marker_srch-on.svg +1 -11
- 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 -172
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -165
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +22 -301
- 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 -74
- 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 -368
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +2 -1420
- 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 -1080
- 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 +2 -9193
- 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 -269
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
- 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 +595 -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 +10 -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 +80 -28
- package/src/BookNavigator/search/search-results.js +29 -26
- 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 +562 -1078
- package/src/BookReaderPlugin.js +44 -0
- package/src/assets/icons/close-circle-dark.svg +1 -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 -17
- 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 +33 -27
- package/src/css/_BRnav.scss +12 -42
- package/src/css/_BRpages.scss +170 -42
- package/src/css/_BRsearch.scss +68 -230
- 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 +7 -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 +183 -121
- package/src/plugins/search/utils.js +43 -0
- package/src/plugins/search/view.js +67 -202
- 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/BookNavigator → 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 +26 -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 -14330
- package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
- package/BookReader/bookreader-component-bundle.js.map +0 -1
- package/BookReader/icons/sort-ascending.svg +0 -1
- package/BookReader/icons/sort-descending.svg +0 -1
- package/BookReader/jquery-1.10.1.js +0 -108
- package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
- package/BookReader/plugins/plugin.menu_toggle.js +0 -369
- package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
- package/BookReader/plugins/plugin.mobile_nav.js +0 -335
- 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 -452
- package/src/BookNavigator/assets/book-loader.js +0 -27
- package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
- package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
- package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
- package/src/BookNavigator/search/a-search-result.js +0 -55
- package/src/BookNavigator/volumes/volumes-provider.js +0 -108
- package/src/BookNavigator/volumes/volumes.js +0 -162
- package/src/BookReader/DebugConsole.js +0 -54
- package/src/BookReaderComponent/BookReaderComponent.js +0 -112
- package/src/ItemNavigator/ItemNavigator.js +0 -372
- package/src/ItemNavigator/providers/sharing.js +0 -29
- package/src/assets/icons/sort-ascending.svg +0 -1
- package/src/assets/icons/sort-descending.svg +0 -1
- 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/visual-adjustments.test.js +0 -201
- package/tests/karma/BookNavigator/volumes.test.js +0 -133
- 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
@@ -0,0 +1,224 @@
|
|
1
|
+
/**
|
2
|
+
* BookReaderTemplate to load BookNavigator components
|
3
|
+
*/
|
4
|
+
|
5
|
+
import { LitElement, html, css } from 'lit';
|
6
|
+
|
7
|
+
import '@internetarchive/ia-item-navigator';
|
8
|
+
import '../BookNavigator/book-navigator.js';
|
9
|
+
// eslint-disable-next-line no-unused-vars
|
10
|
+
import { ModalManager } from '@internetarchive/modal-manager';
|
11
|
+
import '@internetarchive/modal-manager';
|
12
|
+
import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
|
13
|
+
|
14
|
+
export class IaBookReader extends LitElement {
|
15
|
+
static get properties() {
|
16
|
+
return {
|
17
|
+
item: { type: Object },
|
18
|
+
baseHost: { type: String },
|
19
|
+
signedIn: { type: Boolean },
|
20
|
+
fullscreen: { type: Boolean, reflect: true, attribute: true },
|
21
|
+
sharedObserver: { type: Object, attribute: false },
|
22
|
+
modal: { type: Object, attribute: false },
|
23
|
+
loaded: { type: Boolean },
|
24
|
+
menuShortcuts: { type: Array },
|
25
|
+
menuContents: { type: Array },
|
26
|
+
};
|
27
|
+
}
|
28
|
+
|
29
|
+
constructor() {
|
30
|
+
super();
|
31
|
+
this.item = undefined;
|
32
|
+
this.bookreader = undefined;
|
33
|
+
this.baseHost = 'archive.org';
|
34
|
+
this.fullscreen = false;
|
35
|
+
this.signedIn = false;
|
36
|
+
/** @type {ModalManager} */
|
37
|
+
this.modal = undefined;
|
38
|
+
/** @type {SharedResizeObserver} */
|
39
|
+
this.sharedObserver = undefined;
|
40
|
+
this.loaded = false;
|
41
|
+
this.menuShortcuts = [];
|
42
|
+
this.menuContents = [];
|
43
|
+
this.openMenuName = '';
|
44
|
+
}
|
45
|
+
|
46
|
+
updated() {
|
47
|
+
if (!this.modal) {
|
48
|
+
this.setModalManager();
|
49
|
+
}
|
50
|
+
|
51
|
+
if (!this.sharedObserver) {
|
52
|
+
this.sharedObserver = new SharedResizeObserver();
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
get itemNav() {
|
57
|
+
return this.shadowRoot.querySelector('iaux-item-navigator');
|
58
|
+
}
|
59
|
+
|
60
|
+
/** Creates modal DOM & attaches to `<body>` */
|
61
|
+
setModalManager() {
|
62
|
+
let modalManager = document.querySelector('modal-manager');
|
63
|
+
if (!modalManager) {
|
64
|
+
modalManager = document.createElement(
|
65
|
+
'modal-manager',
|
66
|
+
);
|
67
|
+
document.body.appendChild(modalManager);
|
68
|
+
}
|
69
|
+
|
70
|
+
this.modal = modalManager;
|
71
|
+
}
|
72
|
+
|
73
|
+
manageFullscreen(e) {
|
74
|
+
const { detail } = e;
|
75
|
+
const fullscreen = !!detail.isFullScreen;
|
76
|
+
this.fullscreen = fullscreen;
|
77
|
+
this.dispatchEvent(new CustomEvent('fullscreenStateUpdated', { detail: { fullscreen }}));
|
78
|
+
|
79
|
+
}
|
80
|
+
|
81
|
+
loadingStateUpdated(e) {
|
82
|
+
const { loaded } = e.detail;
|
83
|
+
this.loaded = loaded || null;
|
84
|
+
this.dispatchEvent(new CustomEvent('loadingStateUpdated', { detail: { loaded }}));
|
85
|
+
}
|
86
|
+
|
87
|
+
setMenuShortcuts(e) {
|
88
|
+
this.menuShortcuts = [...e.detail];
|
89
|
+
}
|
90
|
+
|
91
|
+
setMenuContents(e) {
|
92
|
+
const updatedContents = [...e.detail];
|
93
|
+
this.menuContents = updatedContents;
|
94
|
+
}
|
95
|
+
|
96
|
+
manageSideMenuEvents(e) {
|
97
|
+
const { menuId, action } = e.detail;
|
98
|
+
if (!menuId) {
|
99
|
+
return;
|
100
|
+
}
|
101
|
+
|
102
|
+
this.openMenuName = menuId;
|
103
|
+
|
104
|
+
if (action === 'open') {
|
105
|
+
this.itemNav?.openShortcut(menuId);
|
106
|
+
} else if (action === 'toggle') {
|
107
|
+
this.itemNav?.toggleMenu();
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
render() {
|
112
|
+
return html`
|
113
|
+
<div class="main-component">
|
114
|
+
<iaux-item-navigator
|
115
|
+
?viewportInFullscreen=${this.fullscreen}
|
116
|
+
.basehost=${this.baseHost}
|
117
|
+
.item=${this.item}
|
118
|
+
.modal=${this.modal}
|
119
|
+
.loaded=${this.loaded}
|
120
|
+
.sharedObserver=${this.sharedObserver}
|
121
|
+
?signedIn=${this.signedIn}
|
122
|
+
.menuShortcuts=${this.menuShortcuts}
|
123
|
+
.menuContents=${this.menuContents}
|
124
|
+
.openMenu=${this.openMenuName}
|
125
|
+
>
|
126
|
+
<div slot="header">
|
127
|
+
<slot name="header"></slot>
|
128
|
+
</div>
|
129
|
+
<div slot="main">
|
130
|
+
<book-navigator
|
131
|
+
.modal=${this.modal}
|
132
|
+
.baseHost=${this.baseHost}
|
133
|
+
.itemMD=${this.item}
|
134
|
+
?signedIn=${this.signedIn}
|
135
|
+
?sideMenuOpen=${this.menuOpened}
|
136
|
+
.sharedObserver=${this.sharedObserver}
|
137
|
+
@ViewportInFullScreen=${this.manageFullscreen}
|
138
|
+
@loadingStateUpdated=${this.loadingStateUpdated}
|
139
|
+
@updateSideMenu=${this.manageSideMenuEvents}
|
140
|
+
@menuUpdated=${this.setMenuContents}
|
141
|
+
@menuShortcutsUpdated=${this.setMenuShortcuts}
|
142
|
+
>
|
143
|
+
<div slot="main">
|
144
|
+
<slot name="main"></slot>
|
145
|
+
</div>
|
146
|
+
</book-navigator>
|
147
|
+
</div>
|
148
|
+
</iaux-item-navigator>
|
149
|
+
</div>
|
150
|
+
`;
|
151
|
+
}
|
152
|
+
|
153
|
+
static get styles() {
|
154
|
+
return css`
|
155
|
+
:host {
|
156
|
+
display: block;
|
157
|
+
--primaryBGColor: var(--black, #000);
|
158
|
+
--secondaryBGColor: #222;
|
159
|
+
--tertiaryBGColor: #333;
|
160
|
+
--primaryTextColor: var(--white, #fff);
|
161
|
+
--primaryCTAFill: #194880;
|
162
|
+
--primaryCTABorder: #c5d1df;
|
163
|
+
--secondaryCTAFill: #333;
|
164
|
+
--secondaryCTABorder: #999;
|
165
|
+
--primaryErrorCTAFill: #e51c26;
|
166
|
+
--primaryErrorCTABorder: #f8c6c8;
|
167
|
+
background-color: var(--primaryBGColor);
|
168
|
+
position: relative;
|
169
|
+
}
|
170
|
+
|
171
|
+
:host([fullscreen]),
|
172
|
+
iaux-item-navigator[viewportinfullscreen] {
|
173
|
+
position: fixed;
|
174
|
+
inset: 0;
|
175
|
+
height: 100%;
|
176
|
+
min-height: unset;
|
177
|
+
}
|
178
|
+
|
179
|
+
.main-component {
|
180
|
+
height: 100%;
|
181
|
+
width: 100%;
|
182
|
+
min-height: inherit;
|
183
|
+
}
|
184
|
+
|
185
|
+
div[slot="header"],
|
186
|
+
div[slot="main"] {
|
187
|
+
display: flex;
|
188
|
+
width: 100%;
|
189
|
+
}
|
190
|
+
|
191
|
+
slot {
|
192
|
+
display: block;
|
193
|
+
flex: 1;
|
194
|
+
}
|
195
|
+
|
196
|
+
iaux-item-navigator {
|
197
|
+
min-height: var(--br-height, inherit);
|
198
|
+
height: var(--br-height, inherit);
|
199
|
+
display: block;
|
200
|
+
width: 100%;
|
201
|
+
color: var(--primaryTextColor);
|
202
|
+
--menuButtonLabelDisplay: block;
|
203
|
+
--menuWidth: 320px;
|
204
|
+
--menuSliderBg: var(--secondaryBGColor);
|
205
|
+
--activeButtonBg: var(--tertiaryBGColor);
|
206
|
+
--subpanelRightBorderColor: var(--secondaryCTABorder);
|
207
|
+
--animationTiming: 100ms;
|
208
|
+
--iconFillColor: var(--primaryTextColor);
|
209
|
+
--iconStrokeColor: var(--primaryTextColor);
|
210
|
+
--menuSliderHeaderIconHeight: 2rem;
|
211
|
+
--menuSliderHeaderIconWidth: 2rem;
|
212
|
+
--iconWidth: 2.4rem;
|
213
|
+
--iconHeight: 2.4rem;
|
214
|
+
--shareLinkColor: var(--primaryTextColor);
|
215
|
+
--shareIconBorder: var(--primaryTextColor);
|
216
|
+
--shareIconBg: var(--secondaryBGColor);
|
217
|
+
--activityIndicatorLoadingDotColor: var(--primaryTextColor);
|
218
|
+
--activityIndicatorLoadingRingColor: var(--primaryTextColor);
|
219
|
+
}
|
220
|
+
`;
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
224
|
+
window.customElements.define("ia-bookreader", IaBookReader);
|
@@ -1,86 +1,92 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
*/
|
5
|
-
|
6
|
-
enableArchiveAnalytics: true,
|
7
|
-
/** Provide a means of debugging, cause otherwise it's impossible to test locally */
|
8
|
-
debugArchiveAnaltyics: false,
|
9
|
-
});
|
10
|
-
|
11
|
-
BookReader.prototype.init = (function(super_) {
|
12
|
-
return function() {
|
13
|
-
super_.call(this);
|
14
|
-
|
15
|
-
if (this.options.enableArchiveAnalytics) {
|
16
|
-
this.bind(BookReader.eventNames.fragmentChange, () => this.archiveAnalyticsSendFragmentChange());
|
17
|
-
}
|
18
|
-
};
|
19
|
-
})(BookReader.prototype.init);
|
1
|
+
// @ts-check
|
2
|
+
import { BookReaderPlugin } from "../BookReaderPlugin.js";
|
3
|
+
|
4
|
+
const BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);
|
5
|
+
|
20
6
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
7
|
+
export class ArchiveAnalyticsPlugin extends BookReaderPlugin {
|
8
|
+
options = {
|
9
|
+
enabled: true,
|
10
|
+
/** Provide a means of debugging, cause otherwise it's impossible to test locally */
|
11
|
+
debug: false,
|
25
12
|
}
|
26
13
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
itemid: this.bookId,
|
36
|
-
cache_bust: Math.random()
|
37
|
-
};
|
38
|
-
// EEK! offsite embedding and /details/ page books look the same in analytics, otherwise!
|
39
|
-
values.offsite = 1;
|
40
|
-
values.details = 0;
|
41
|
-
try {
|
42
|
-
values.offsite = window.top.location.hostname.match(/\.archive.org$/)
|
43
|
-
? 0
|
44
|
-
: 1;
|
45
|
-
values.details =
|
46
|
-
!values.offsite && window.top.location.pathname.match(/^\/details\//)
|
47
|
-
? 1
|
48
|
-
: 0;
|
49
|
-
} catch (e) {}
|
50
|
-
// avoids embed cross site exceptions -- but on (+) side, means it is and keeps marked offite!
|
51
|
-
|
52
|
-
// Send bookreader ping
|
53
|
-
archive_analytics.send_ping(values, null, "augment_for_ao_site");
|
54
|
-
|
55
|
-
// Also send tracking event ping
|
56
|
-
const additionalEventParams = this.options.lendingInfo && this.options.lendingInfo.loanId
|
57
|
-
? { loanId: this.options.lendingInfo.loanId }
|
58
|
-
: {};
|
59
|
-
archive_analytics.send_event('BookReader', 'UserChangedView', window.location.pathname, additionalEventParams);
|
60
|
-
|
61
|
-
this.archiveAnalyticsSendFragmentChange.prevFragment = newFragment;
|
14
|
+
/** @type {string} */
|
15
|
+
_prevFragment = null;
|
16
|
+
|
17
|
+
/** @override */
|
18
|
+
init() {
|
19
|
+
if (this.options.enabled) {
|
20
|
+
this.br.bind(BookReader.eventNames.fragmentChange, () => this.sendFragmentChange());
|
21
|
+
}
|
62
22
|
}
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
23
|
+
|
24
|
+
/** @private */
|
25
|
+
sendFragmentChange() {
|
26
|
+
if (!window.archive_analytics) {
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
|
30
|
+
const prevFragment = this._prevFragment;
|
31
|
+
|
32
|
+
const params = this.br.paramsFromCurrent();
|
33
|
+
const newFragment = this.br.fragmentFromParams(params);
|
34
|
+
|
35
|
+
if (prevFragment != newFragment) {
|
36
|
+
const values = {
|
37
|
+
bookreader: "user_changed_view",
|
38
|
+
itemid: this.br.bookId,
|
39
|
+
cache_bust: Math.random(),
|
40
|
+
};
|
41
|
+
// EEK! offsite embedding and /details/ page books look the same in analytics, otherwise!
|
42
|
+
values.offsite = 1;
|
43
|
+
values.details = 0;
|
44
|
+
try {
|
45
|
+
values.offsite = window.top.location.hostname.match(/\.archive.org$/)
|
46
|
+
? 0
|
47
|
+
: 1;
|
48
|
+
values.details =
|
49
|
+
!values.offsite && window.top.location.pathname.match(/^\/details\//)
|
50
|
+
? 1
|
51
|
+
: 0;
|
52
|
+
} catch (e) { }
|
53
|
+
// avoids embed cross site exceptions -- but on (+) side, means it is and keeps marked offite!
|
54
|
+
|
55
|
+
// Send bookreader ping
|
56
|
+
window.archive_analytics.send_ping(values, null, "augment_for_ao_site");
|
57
|
+
|
58
|
+
// Also send tracking event ping
|
59
|
+
const additionalEventParams = this.br.options.lendingInfo?.loanId
|
60
|
+
? { loanId: this.br.options.lendingInfo.loanId }
|
61
|
+
: {};
|
62
|
+
window.archive_analytics.send_event('BookReader', 'UserChangedView', window.location.pathname, additionalEventParams);
|
63
|
+
|
64
|
+
this._prevFragment = newFragment;
|
65
|
+
}
|
77
66
|
}
|
78
67
|
|
79
|
-
|
68
|
+
/**
|
69
|
+
* Sends a tracking "Event". See https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#events
|
70
|
+
* @param {string} category
|
71
|
+
* @param {string} action
|
72
|
+
* @param {number} [value] (must be an int)
|
73
|
+
* @param {Object} [additionalEventParams]
|
74
|
+
*/
|
75
|
+
sendEvent(category, action, value, additionalEventParams) {
|
76
|
+
if (!this.options.enabled) return;
|
80
77
|
|
81
|
-
|
82
|
-
|
83
|
-
|
78
|
+
if (this.options.debug) {
|
79
|
+
console.log("archiveAnalyticsSendEvent", arguments, window.archive_analytics);
|
80
|
+
}
|
81
|
+
|
82
|
+
if (!window.archive_analytics) return;
|
83
|
+
|
84
|
+
additionalEventParams = additionalEventParams || {};
|
85
|
+
if (typeof (value) == 'number') {
|
86
|
+
additionalEventParams.ev = value;
|
87
|
+
}
|
88
|
+
window.archive_analytics.send_event(category, action, null, additionalEventParams);
|
84
89
|
}
|
85
|
-
|
86
|
-
|
90
|
+
}
|
91
|
+
|
92
|
+
BookReader?.registerPlugin('archiveAnalytics', ArchiveAnalyticsPlugin);
|
@@ -1,129 +1,124 @@
|
|
1
|
-
|
1
|
+
// @ts-check
|
2
|
+
import { EVENTS } from "../BookReader/events";
|
3
|
+
import { parseAnimationSpeed } from "../BookReader/utils";
|
4
|
+
import { BookReaderPlugin } from "../BookReaderPlugin";
|
2
5
|
|
3
6
|
/**
|
4
7
|
* Plugin which adds an autoplay feature. Useful for kiosk situations.
|
5
8
|
*/
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
+
export class AutoplayPlugin extends BookReaderPlugin {
|
10
|
+
options = {
|
11
|
+
enabled: true,
|
12
|
+
/**
|
13
|
+
* @type {number | 'fast' | 'slow'}
|
14
|
+
* How quickly the flip animation should run.
|
15
|
+
**/
|
16
|
+
flipSpeed: 1500,
|
17
|
+
/** How long to pause on each page between flips */
|
18
|
+
flipDelay: 5000,
|
19
|
+
/** Allow controlling the autoflip/speed/delay from the url */
|
20
|
+
urlParams: true,
|
21
|
+
}
|
9
22
|
|
10
|
-
|
11
|
-
* @override BookReader.setup
|
12
|
-
*/
|
13
|
-
BookReader.prototype.setup = (function(super_) {
|
14
|
-
return function (options) {
|
15
|
-
super_.call(this, options);
|
23
|
+
timer = null;
|
16
24
|
|
17
|
-
|
18
|
-
|
19
|
-
this.
|
20
|
-
};
|
21
|
-
})(BookReader.prototype.setup);
|
25
|
+
/** @override */
|
26
|
+
init() {
|
27
|
+
if (!this.options.enabled) return;
|
22
28
|
|
23
|
-
|
24
|
-
* @override BookReader.init
|
25
|
-
*/
|
26
|
-
BookReader.prototype.init = (function(super_) {
|
27
|
-
return function (options) {
|
28
|
-
super_.call(this, options);
|
29
|
-
|
30
|
-
if (!this.options.enableAutoPlayPlugin) return;
|
31
|
-
this.bind(BookReader.eventNames.stop, () => this.autoStop());
|
32
|
-
};
|
33
|
-
})(BookReader.prototype.init);
|
29
|
+
this.br.bind(EVENTS.stop, () => this.stop());
|
34
30
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
31
|
+
if (this.options.urlParams) {
|
32
|
+
const urlParams = new URLSearchParams(window.location.search);
|
33
|
+
if (urlParams.get('flipSpeed')) {
|
34
|
+
this.options.flipSpeed = parseAnimationSpeed(urlParams.get('flipSpeed')) || this.options.flipSpeed;
|
35
|
+
}
|
36
|
+
if (urlParams.get('flipDelay')) {
|
37
|
+
this.options.flipDelay = parseAnimationSpeed(urlParams.get('flipDelay')) || this.options.flipDelay;
|
38
|
+
}
|
39
|
+
if (urlParams.get('autoflip') === '1') {
|
40
|
+
this.toggle();
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}
|
41
44
|
|
42
|
-
|
45
|
+
/** @override */
|
46
|
+
_bindNavigationHandlers() {
|
47
|
+
if (!this.options.enabled) return;
|
43
48
|
|
44
|
-
|
45
|
-
const jIcons = this.$('.BRicon').add('.BRmobileMenu .BRicon');
|
49
|
+
const jIcons = this.br.$('.BRicon');
|
46
50
|
|
47
|
-
jIcons.filter('.play').click(
|
48
|
-
this.
|
51
|
+
jIcons.filter('.play').on('click', () => {
|
52
|
+
this.toggle();
|
49
53
|
return false;
|
50
54
|
});
|
51
55
|
|
52
|
-
jIcons.filter('.pause').click(
|
53
|
-
this.
|
56
|
+
jIcons.filter('.pause').on('click', () => {
|
57
|
+
this.toggle();
|
54
58
|
return false;
|
55
59
|
});
|
56
|
-
};
|
57
|
-
})(BookReader.prototype.bindNavigationHandlers);
|
58
|
-
|
59
|
-
/**
|
60
|
-
* Starts autoplay mode
|
61
|
-
* @param {object} overrides
|
62
|
-
* @param {number} overrides.flipSpeed
|
63
|
-
* @param {number} overrides.flipDelay
|
64
|
-
*/
|
65
|
-
BookReader.prototype.autoToggle = function(overrides) {
|
66
|
-
if (!this.options.enableAutoPlayPlugin) return;
|
67
|
-
|
68
|
-
const options = $.extend({
|
69
|
-
flipSpeed: this.flipSpeed,
|
70
|
-
flipDelay: this.flipDelay
|
71
|
-
}, overrides);
|
72
|
-
|
73
|
-
this.flipSpeed = typeof options.flipSpeed === "number" ? options.flipSpeed : this.flipSpeed;
|
74
|
-
this.flipDelay = typeof options.flipDelay === "number" ? options.flipDelay : this.flipDelay;
|
75
|
-
this.trigger(BookReader.eventNames.stop);
|
76
|
-
|
77
|
-
let bComingFrom1up = false;
|
78
|
-
if (this.constMode2up != this.mode) {
|
79
|
-
bComingFrom1up = true;
|
80
|
-
this.switchMode(this.constMode2up);
|
81
|
-
}
|
82
|
-
|
83
|
-
// Change to autofit if book is too large
|
84
|
-
if (this.reduce < this.twoPageGetAutofitReduce()) {
|
85
|
-
this.zoom('auto');
|
86
60
|
}
|
87
61
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
62
|
+
/**
|
63
|
+
* Starts autoplay mode
|
64
|
+
* @param {object} overrides
|
65
|
+
* @param {number} overrides.flipSpeed
|
66
|
+
* @param {number} overrides.flipDelay
|
67
|
+
*/
|
68
|
+
toggle(overrides = null) {
|
69
|
+
if (!this.options.enabled) return;
|
70
|
+
|
71
|
+
Object.assign(this.options, overrides);
|
72
|
+
this.br.trigger(EVENTS.stop);
|
73
|
+
|
74
|
+
let bComingFrom1up = false;
|
75
|
+
if (this.br.constMode2up != this.br.mode) {
|
76
|
+
bComingFrom1up = true;
|
77
|
+
this.br.switchMode(this.br.constMode2up);
|
98
78
|
}
|
99
79
|
|
100
|
-
this
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
if (
|
106
|
-
|
80
|
+
if (null == this.timer) {
|
81
|
+
// $$$ Draw events currently cause layout problems when they occur during animation.
|
82
|
+
// There is a specific problem when changing from 1-up immediately to autoplay in RTL so
|
83
|
+
// we workaround for now by not triggering immediate animation in that case.
|
84
|
+
// See https://bugs.launchpad.net/gnubook/+bug/328327
|
85
|
+
if (('rl' == this.br.pageProgression) && bComingFrom1up) {
|
86
|
+
// don't flip immediately -- wait until timer fires
|
107
87
|
} else {
|
108
|
-
|
88
|
+
// flip immediately
|
89
|
+
this.br.next({ triggerStop: false, flipSpeed: this.options.flipSpeed });
|
109
90
|
}
|
110
|
-
|
111
|
-
|
112
|
-
|
91
|
+
|
92
|
+
this.br.$('.play').hide();
|
93
|
+
this.br.$('.pause').show();
|
94
|
+
this.timer = setInterval(() => {
|
95
|
+
if (this.br.animating) return;
|
96
|
+
|
97
|
+
if (Math.max(this.br.twoPage.currentIndexL, this.br.twoPage.currentIndexR) >= this.br.book.getNumLeafs() - 1) {
|
98
|
+
this.br.prev({ triggerStop: false, flipSpeed: this.options.flipSpeed }); // $$$ really what we want?
|
99
|
+
} else {
|
100
|
+
this.br.next({ triggerStop: false, flipSpeed: this.options.flipSpeed });
|
101
|
+
}
|
102
|
+
}, parseAnimationSpeed(this.options.flipDelay));
|
103
|
+
} else {
|
104
|
+
this.stop();
|
105
|
+
}
|
113
106
|
}
|
114
|
-
};
|
115
107
|
|
116
|
-
/**
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
108
|
+
/**
|
109
|
+
* Stop autoplay mode, allowing animations to finish
|
110
|
+
*/
|
111
|
+
stop() {
|
112
|
+
if (!this.options.enabled) return;
|
113
|
+
|
114
|
+
if (null != this.timer) {
|
115
|
+
clearInterval(this.timer);
|
116
|
+
this.br.$('.pause').hide();
|
117
|
+
this.br.$('.play').show();
|
118
|
+
this.timer = null;
|
119
|
+
}
|
128
120
|
}
|
129
|
-
}
|
121
|
+
}
|
122
|
+
|
123
|
+
const BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);
|
124
|
+
BookReader?.registerPlugin('autoplay', AutoplayPlugin);
|