@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
@@ -1,5 +1,6 @@
|
|
1
1
|
// @ts-check
|
2
|
-
import {
|
2
|
+
import { Mode1UpLit } from './Mode1UpLit.js';
|
3
|
+
import { DragScrollable } from './DragScrollable.js';
|
3
4
|
/** @typedef {import('../BookReader.js').default} BookReader */
|
4
5
|
/** @typedef {import('./BookModel.js').BookModel} BookModel */
|
5
6
|
/** @typedef {import('./BookModel.js').PageIndex} PageIndex */
|
@@ -12,392 +13,96 @@ export class Mode1Up {
|
|
12
13
|
constructor(br, bookModel) {
|
13
14
|
this.br = br;
|
14
15
|
this.book = bookModel;
|
16
|
+
this.mode1UpLit = new Mode1UpLit(bookModel, br);
|
15
17
|
|
16
18
|
/** @private */
|
17
|
-
this.$
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
this.$el = $(this.mode1UpLit)
|
20
|
+
// We CANNOT use `br-mode-1up` as a class, because it's the same
|
21
|
+
// as the name of the web component, and the webcomponents polyfill
|
22
|
+
// uses the name of component as a class for style scoping 😒
|
23
|
+
.addClass('br-mode-1up__root BRmode1up');
|
22
24
|
|
23
|
-
/**
|
24
|
-
|
25
|
-
*
|
26
|
-
* Mode1Up doesn't use the br.reduce because it is DPI aware. The reduction factor
|
27
|
-
* of a given leaf can change (since leaves can have different DPIs), but the real-world
|
28
|
-
* reduction is constant throughout.
|
29
|
-
*/
|
30
|
-
this.realWorldReduce = 1;
|
25
|
+
/** Has mode1up ever been rendered before? */
|
26
|
+
this.everShown = false;
|
31
27
|
}
|
32
28
|
|
29
|
+
// TODO: Might not need this anymore? Might want to delete.
|
33
30
|
/** @private */
|
34
|
-
get $
|
31
|
+
get $brContainer() { return this.br.refs.$brContainer; }
|
35
32
|
|
36
33
|
/**
|
37
34
|
* This is called when we switch to one page view
|
38
35
|
*/
|
39
36
|
prepare() {
|
40
37
|
const startLeaf = this.br.currentIndex();
|
41
|
-
|
42
|
-
this.$scrollContainer
|
38
|
+
this.$brContainer
|
43
39
|
.empty()
|
44
|
-
.css({
|
45
|
-
.append(this.$
|
46
|
-
|
47
|
-
//
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
**/
|
64
|
-
physicalInchesToDisplayPixels(inches, reduce = this.realWorldReduce, screenDPI = this.screenDPI) {
|
65
|
-
return inches * screenDPI / reduce;
|
66
|
-
}
|
67
|
-
|
68
|
-
/**
|
69
|
-
* Iterate over pages, augmented with their top/bottom bounds
|
70
|
-
* @param reduce Reduction factor currently at play
|
71
|
-
* @param pageSpacing Inches of space to place between pages
|
72
|
-
**/
|
73
|
-
* pagesWithBounds(reduce = this.realWorldReduce, pageSpacing = this.LEAF_SPACING_IN) {
|
74
|
-
let leafTop = 0;
|
75
|
-
let leafBottom = 0;
|
76
|
-
|
77
|
-
for (const page of this.book.pagesIterator({ combineConsecutiveUnviewables: true })) {
|
78
|
-
const height = this.physicalInchesToDisplayPixels(page.heightInches, reduce);
|
79
|
-
leafBottom += height;
|
80
|
-
yield { page, top: leafTop, bottom: leafBottom };
|
81
|
-
leafTop += height + this.physicalInchesToDisplayPixels(pageSpacing, reduce);
|
82
|
-
leafBottom += this.physicalInchesToDisplayPixels(pageSpacing, reduce);
|
83
|
-
}
|
84
|
-
}
|
85
|
-
|
86
|
-
/**
|
87
|
-
* How much do the two bounds intersection?
|
88
|
-
* @param {{ top: number; bottom: number; }} bound1
|
89
|
-
* @param {{ top: number; bottom: number; }} bound2
|
90
|
-
* @returns {number}
|
91
|
-
*/
|
92
|
-
static boundIntersection(bound1, bound2) {
|
93
|
-
const intersect = (bound1.bottom >= bound2.top) && (bound1.top <= bound2.bottom);
|
94
|
-
if (!intersect) return 0;
|
95
|
-
|
96
|
-
const boundingBox = {
|
97
|
-
top: Math.min(bound1.top, bound2.top),
|
98
|
-
bottom: Math.max(bound1.bottom, bound2.bottom),
|
99
|
-
};
|
100
|
-
const intersection = {
|
101
|
-
top: Math.max(bound1.top, bound2.top),
|
102
|
-
bottom: Math.min(bound1.bottom, bound2.bottom),
|
103
|
-
};
|
104
|
-
return (intersection.bottom - intersection.top) / (boundingBox.bottom - boundingBox.top);
|
105
|
-
}
|
106
|
-
|
107
|
-
/**
|
108
|
-
* Find the pages that intersect the current viewport, including 1 before/after
|
109
|
-
**/
|
110
|
-
* findIntersectingPages() {
|
111
|
-
// Rectangle of interest
|
112
|
-
const height = this.$scrollContainer.height();
|
113
|
-
const scrollTop = this.$scrollContainer.scrollTop();
|
114
|
-
const scrollBottom = scrollTop + height;
|
115
|
-
const scrollRegion = { top: scrollTop, bottom: scrollBottom };
|
116
|
-
|
117
|
-
let prev = null;
|
118
|
-
for (const {page, top, bottom} of this.pagesWithBounds()) {
|
119
|
-
const intersection = Mode1Up.boundIntersection({ top, bottom }, scrollRegion);
|
120
|
-
const cur = {page, top, bottom, intersection: intersection};
|
121
|
-
if (intersection) {
|
122
|
-
// Also yield the page just before the visible page
|
123
|
-
if (prev && !prev.intersection) yield prev;
|
124
|
-
yield cur;
|
125
|
-
}
|
126
|
-
// Also yield the page just after the last visible page
|
127
|
-
else if (!cur.intersection && prev?.intersection) {
|
128
|
-
yield cur;
|
129
|
-
break;
|
40
|
+
.css({ overflow: 'hidden' })
|
41
|
+
.append(this.$el);
|
42
|
+
|
43
|
+
// Need this in a setTimeout so that it happens after the browser has _actually_
|
44
|
+
// appended the element to the DOM
|
45
|
+
setTimeout(async () => {
|
46
|
+
if (!this.everShown) {
|
47
|
+
this.mode1UpLit.initFirstRender(startLeaf);
|
48
|
+
this.everShown = true;
|
49
|
+
this.mode1UpLit.requestUpdate();
|
50
|
+
await this.mode1UpLit.updateComplete;
|
51
|
+
new DragScrollable(this.mode1UpLit, {
|
52
|
+
preventDefault: true,
|
53
|
+
dragSelector: '.br-mode-1up__visible-world',
|
54
|
+
// Only handle mouse events; let browser/interact.js handle touch
|
55
|
+
dragstart: 'mousedown',
|
56
|
+
dragcontinue: 'mousemove',
|
57
|
+
dragend: 'mouseup',
|
58
|
+
});
|
130
59
|
}
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
const documentContainerWidth = this.$documentContainer.width();
|
140
|
-
|
141
|
-
// The first page that's reasonably in view we set to the current index
|
142
|
-
const firstProperPage = (
|
143
|
-
pagesToDisplay.find(({intersection}) => intersection > 0.33) ||
|
144
|
-
pagesToDisplay[0]
|
145
|
-
).page;
|
146
|
-
this.br.updateFirstIndex(firstProperPage.index);
|
147
|
-
|
148
|
-
for (const {page, top, bottom} of pagesToDisplay) {
|
149
|
-
if (!this.br.displayedIndices.includes(page.index)) {
|
150
|
-
const height = bottom - top;
|
151
|
-
const width = this.physicalInchesToDisplayPixels(page.widthInches);
|
152
|
-
const reduce = page.width / width;
|
153
|
-
|
154
|
-
const pageContainer = this.br._createPageContainer(page.index)
|
155
|
-
.update({
|
156
|
-
dimensions: {
|
157
|
-
width,
|
158
|
-
height,
|
159
|
-
top,
|
160
|
-
left: Math.floor((documentContainerWidth - width) / 2),
|
161
|
-
},
|
162
|
-
reduce,
|
163
|
-
});
|
164
|
-
pageContainer.$container.appendTo(this.$documentContainer);
|
165
|
-
}
|
166
|
-
}
|
167
|
-
}
|
168
|
-
|
169
|
-
// Remove any pages we no longer need
|
170
|
-
const displayedIndices = pagesToDisplay.map(({page}) => page.index);
|
171
|
-
for (const index of this.br.displayedIndices) {
|
172
|
-
if (notInArray(index, displayedIndices)) {
|
173
|
-
this.br.$(`.pagediv${index}`).remove();
|
174
|
-
}
|
175
|
-
}
|
176
|
-
|
177
|
-
this.br.displayedIndices = displayedIndices;
|
178
|
-
if (this.br.enableSearch) this.br.updateSearchHilites();
|
179
|
-
|
180
|
-
this.br.updateToolbarZoom(this.realWorldReduce);
|
181
|
-
|
182
|
-
// Update the slider
|
183
|
-
this.br.updateNavIndexThrottled();
|
60
|
+
this.mode1UpLit.jumpToIndex(startLeaf);
|
61
|
+
setTimeout(() => {
|
62
|
+
// Must explicitly call updateVisibleRegion, since no
|
63
|
+
// scroll event seems to fire.
|
64
|
+
this.mode1UpLit.updateVisibleRegion();
|
65
|
+
});
|
66
|
+
});
|
67
|
+
this.br.updateBrClasses();
|
184
68
|
}
|
185
69
|
|
186
70
|
/**
|
71
|
+
* BREAKING CHANGE: No longer supports pageX/pageY
|
187
72
|
* @param {PageIndex} index
|
188
73
|
* @param {number} [pageX] x position on the page (in pixels) to center on
|
189
74
|
* @param {number} [pageY] y position on the page (in pixels) to center on
|
190
75
|
* @param {boolean} [noAnimate]
|
191
76
|
*/
|
192
77
|
jumpToIndex(index, pageX, pageY, noAnimate) {
|
193
|
-
|
194
|
-
const
|
195
|
-
|
196
|
-
|
197
|
-
let leafLeft = 0;
|
198
|
-
|
199
|
-
if (pageY) {
|
200
|
-
const page = this.book.getPage(index);
|
201
|
-
const clientHeight = this.$scrollContainer.prop('clientHeight');
|
202
|
-
offset = this.physicalInchesToDisplayPixels((pageY / page.height) * page.heightInches) - (clientHeight / 2);
|
203
|
-
leafTop += offset;
|
204
|
-
} else {
|
205
|
-
// Show page just a little below the top
|
206
|
-
leafTop -= this.br.padding / 2;
|
207
|
-
}
|
208
|
-
|
209
|
-
if (pageX) {
|
210
|
-
const page = this.book.getPage(index);
|
211
|
-
const clientWidth = this.$scrollContainer.prop('clientWidth');
|
212
|
-
offset = this.physicalInchesToDisplayPixels((pageX / page.width) * page.widthInches) - (clientWidth / 2);
|
213
|
-
leafLeft += offset;
|
214
|
-
} else {
|
215
|
-
// Preserve left position
|
216
|
-
leafLeft = this.$scrollContainer.scrollLeft();
|
217
|
-
}
|
218
|
-
|
219
|
-
// Only animate for small distances
|
220
|
-
if (!noAnimate && abs(prevCurrentIndex - index) <= 4) {
|
221
|
-
this.animating = true;
|
222
|
-
this.$scrollContainer.stop(true).animate({
|
223
|
-
scrollTop: leafTop,
|
224
|
-
scrollLeft: leafLeft,
|
225
|
-
}, 'fast', () => { this.animating = false });
|
226
|
-
} else {
|
227
|
-
this.$scrollContainer.stop(true).prop('scrollTop', leafTop);
|
228
|
-
}
|
78
|
+
// Only smooth for small distances
|
79
|
+
const distance = Math.abs(this.br.currentIndex() - index);
|
80
|
+
const smooth = !noAnimate && distance > 0 && distance <= 4;
|
81
|
+
this.mode1UpLit.jumpToIndex(index, { smooth });
|
229
82
|
}
|
230
83
|
|
231
84
|
/**
|
232
85
|
* @param {'in' | 'out'} direction
|
233
86
|
*/
|
234
87
|
zoom(direction) {
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
this.resizePageView();
|
246
|
-
this.br.updateToolbarZoom(this.realWorldReduce);
|
247
|
-
|
248
|
-
// Recalculate search hilites
|
249
|
-
if (this.br.enableSearch) {
|
250
|
-
this.br.removeSearchHilites();
|
251
|
-
this.br.updateSearchHilites();
|
88
|
+
switch (direction) {
|
89
|
+
case 'in':
|
90
|
+
this.mode1UpLit.zoomIn();
|
91
|
+
break;
|
92
|
+
case 'out':
|
93
|
+
this.mode1UpLit.zoomOut();
|
94
|
+
break;
|
95
|
+
default:
|
96
|
+
console.error(`Unsupported direction: ${direction}`);
|
252
97
|
}
|
253
98
|
}
|
254
99
|
|
255
|
-
/**
|
256
|
-
* Returns the reduce factor which has the pages fill the width of the viewport.
|
257
|
-
*/
|
258
|
-
getAutofitWidth() {
|
259
|
-
const widthPadding = 20;
|
260
|
-
const availableWidth = this.$scrollContainer.prop('clientWidth') - 2 * widthPadding;
|
261
|
-
|
262
|
-
const medianWidthInches = this.book.getMedianPageSizeInches().width;
|
263
|
-
const medianPageWidth = this.physicalInchesToDisplayPixels(medianWidthInches, 1);
|
264
|
-
return medianPageWidth / availableWidth;
|
265
|
-
}
|
266
|
-
|
267
|
-
getAutofitHeight() {
|
268
|
-
// make sure a little of adjacent pages show
|
269
|
-
const availableHeight = this.$scrollContainer.innerHeight() - 2 * this.br.padding;
|
270
|
-
const medianHeightInches = this.book.getMedianPageSizeInches().height;
|
271
|
-
const medianPageHeight = this.physicalInchesToDisplayPixels(medianHeightInches, 1);
|
272
|
-
|
273
|
-
return medianPageHeight / availableHeight;
|
274
|
-
}
|
275
|
-
|
276
|
-
/**
|
277
|
-
* Returns where the top of the page with given index should be in one page view
|
278
|
-
* @param {PageIndex} index
|
279
|
-
* @return {number}
|
280
|
-
*/
|
281
|
-
getPageTop(index) {
|
282
|
-
for (const {page, top} of this.pagesWithBounds()) {
|
283
|
-
if (page.index == index) return top;
|
284
|
-
}
|
285
|
-
}
|
286
|
-
|
287
|
-
/**
|
288
|
-
* Update the reduction factors for 1up mode given the available width and height.
|
289
|
-
* Recalculates the autofit reduction factors.
|
290
|
-
*/
|
291
|
-
calculateReductionFactors() {
|
292
|
-
this.br.onePage.reductionFactors = this.br.reductionFactors.concat(
|
293
|
-
[
|
294
|
-
{ reduce: this.getAutofitWidth(), autofit: 'width' },
|
295
|
-
{ reduce: this.getAutofitHeight(), autofit: 'height' },
|
296
|
-
]);
|
297
|
-
this.br.onePage.reductionFactors.sort(this.br._reduceSort);
|
298
|
-
}
|
299
|
-
|
300
100
|
/**
|
301
101
|
* Resize the current one page view
|
302
102
|
* Note this calls drawLeafs
|
303
103
|
*/
|
304
104
|
resizePageView() {
|
305
|
-
|
306
|
-
|
307
|
-
const oldPageViewHeight = this.$documentContainer.height();
|
308
|
-
const oldPageViewWidth = this.$documentContainer.width();
|
309
|
-
|
310
|
-
// May have come here after preparing the view, in which case the scrollTop and view height are not set
|
311
|
-
|
312
|
-
let scrollRatio = 0;
|
313
|
-
let oldCenterX;
|
314
|
-
if (oldScrollTop > 0) {
|
315
|
-
// We have scrolled - implies view has been set up
|
316
|
-
const oldCenterY = this.centerY();
|
317
|
-
oldCenterX = this.centerX();
|
318
|
-
scrollRatio = oldCenterY / oldPageViewHeight;
|
319
|
-
} else {
|
320
|
-
// Have not scrolled, e.g. because in new container
|
321
|
-
|
322
|
-
// We set the scroll ratio so that the current index will still be considered the
|
323
|
-
// current index in drawLeafsOnePage after we create the new view container
|
324
|
-
|
325
|
-
// Make sure this will count as current page after resize
|
326
|
-
const fudgeFactor = 0.6 * this.physicalInchesToDisplayPixels(this.book.getPage(this.br.currentIndex()).heightInches);
|
327
|
-
const oldLeafTop = this.getPageTop(this.br.currentIndex()) + fudgeFactor;
|
328
|
-
const oldViewDimensions = this.calculateViewDimensions();
|
329
|
-
scrollRatio = oldLeafTop / oldViewDimensions.height;
|
330
|
-
}
|
331
|
-
|
332
|
-
// Recalculate 1up reduction factors
|
333
|
-
this.calculateReductionFactors();
|
334
|
-
// Update current reduce (if in autofit)
|
335
|
-
if (this.br.onePage.autofit) {
|
336
|
-
const reductionFactor = this.br.nextReduce(this.realWorldReduce, this.br.onePage.autofit, this.br.onePage.reductionFactors);
|
337
|
-
this.realWorldReduce = reductionFactor.reduce;
|
338
|
-
}
|
339
|
-
|
340
|
-
const viewDimensions = this.calculateViewDimensions();
|
341
|
-
this.$documentContainer.height(viewDimensions.height);
|
342
|
-
this.$documentContainer.width(viewDimensions.width);
|
343
|
-
|
344
|
-
// Remove all pages
|
345
|
-
this.$documentContainer.empty();
|
346
|
-
this.br.displayedIndices = [];
|
347
|
-
|
348
|
-
// Scroll to the right spot
|
349
|
-
const newCenterX = oldCenterX * (viewWidth / oldPageViewWidth);
|
350
|
-
const newCenterY = scrollRatio * viewDimensions.height;
|
351
|
-
const sizeX = this.$scrollContainer.prop('clientWidth'); // Use clientWidth because of scroll bar
|
352
|
-
const sizeY = this.$scrollContainer.height();
|
353
|
-
this.$scrollContainer.prop({
|
354
|
-
scrollLeft: Math.max(0, newCenterX - sizeX / 2),
|
355
|
-
scrollTop: Math.max(0, newCenterY - sizeY / 2),
|
356
|
-
});
|
357
|
-
|
358
|
-
// Draw all visible pages
|
359
|
-
this.drawLeafs();
|
360
|
-
|
361
|
-
if (this.br.enableSearch) {
|
362
|
-
this.br.removeSearchHilites();
|
363
|
-
this.br.updateSearchHilites();
|
364
|
-
}
|
365
|
-
}
|
366
|
-
|
367
|
-
/**
|
368
|
-
* Calculate the total width/height in pixels of the document container
|
369
|
-
* @param {number} reduce
|
370
|
-
* @param {number} leafSpacing spacing between pages in inches
|
371
|
-
*/
|
372
|
-
calculateViewDimensions(reduce = this.realWorldReduce, leafSpacing = this.LEAF_SPACING_IN) {
|
373
|
-
let width = 0;
|
374
|
-
let height = 0;
|
375
|
-
for (const {page, bottom} of this.pagesWithBounds(reduce, leafSpacing)) {
|
376
|
-
const pageWidth = this.physicalInchesToDisplayPixels(page.widthInches, reduce);
|
377
|
-
width = Math.max(width, pageWidth);
|
378
|
-
height = bottom;
|
379
|
-
}
|
380
|
-
return { width, height };
|
381
|
-
}
|
382
|
-
|
383
|
-
/**
|
384
|
-
* Returns the current offset of the viewport center in scaled document coordinates.
|
385
|
-
*/
|
386
|
-
centerX($scrollContainer = this.$scrollContainer, $documentContainer = this.$documentContainer) {
|
387
|
-
let centerX;
|
388
|
-
if ($documentContainer.width() < $scrollContainer.prop('clientWidth')) { // fully shown
|
389
|
-
centerX = $documentContainer.width();
|
390
|
-
} else {
|
391
|
-
centerX = $scrollContainer.scrollLeft() + $scrollContainer.prop('clientWidth') / 2;
|
392
|
-
}
|
393
|
-
return Math.floor(centerX);
|
394
|
-
}
|
395
|
-
|
396
|
-
/**
|
397
|
-
* Returns the current offset of the viewport center in scaled document coordinates.
|
398
|
-
*/
|
399
|
-
centerY($scrollContainer = this.$scrollContainer) {
|
400
|
-
const centerY = $scrollContainer.scrollTop() + $scrollContainer.height() / 2;
|
401
|
-
return Math.floor(centerY);
|
105
|
+
this.mode1UpLit.htmlDimensionsCacher.updateClientSizes();
|
106
|
+
this.mode1UpLit.requestUpdate();
|
402
107
|
}
|
403
108
|
}
|