@internetarchive/bookreader 5.0.0-88-alpha.11 → 5.0.0-89
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/BookReader/BookReader.css +17 -3
- package/BookReader/BookReader.js +1 -1
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/ia-bookreader-bundle.js +87 -108
- package/BookReader/ia-bookreader-bundle.js.map +1 -1
- package/BookReader/plugins/plugin.archive_analytics.js +1 -1
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -1
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.iiif.js +1 -1
- package/BookReader/plugins/plugin.iiif.js.map +1 -1
- package/BookReader/plugins/plugin.resume.js +1 -1
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +1 -1
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +1 -1
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.tts.js +1 -1
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +1 -1
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/CHANGELOG.md +14 -0
- package/babel.config.js +12 -30
- package/codecov.yml +1 -1
- package/jsconfig.json +1 -3
- package/package.json +14 -16
- package/src/BookNavigator/search/search-results.js +1 -1
- package/src/BookReader/ImageCache.js +48 -15
- package/src/BookReader/Mode1UpLit.js +56 -86
- package/src/BookReader/Mode2UpLit.js +5 -5
- package/src/BookReader/Navbar/Navbar.js +53 -11
- package/src/BookReader/PageContainer.js +41 -22
- package/src/BookReader/options.js +27 -3
- package/src/BookReader/utils.js +10 -0
- package/src/BookReader.js +120 -21
- package/src/BookReaderPlugin.js +44 -0
- package/src/css/_BRnav.scss +0 -3
- package/src/css/_BRpages.scss +21 -2
- package/src/css/_controls.scss +4 -0
- package/src/plugins/plugin.archive_analytics.js +84 -78
- package/src/plugins/plugin.autoplay.js +98 -102
- package/src/plugins/plugin.chapters.js +17 -22
- package/src/plugins/plugin.iiif.js +16 -30
- package/src/plugins/plugin.resume.js +54 -51
- package/src/plugins/plugin.text_selection.js +68 -76
- package/src/plugins/tts/AbstractTTSEngine.js +2 -4
- package/src/plugins/tts/PageChunk.js +5 -9
- package/src/plugins/tts/PageChunkIterator.js +3 -5
- package/src/plugins/tts/plugin.tts.js +309 -329
- package/src/plugins/url/plugin.url.js +1 -1
- package/src/util/strings.js +1 -0
- package/tests/e2e/autoplay.test.js +8 -5
- package/tests/e2e/helpers/base.js +2 -2
- package/tests/e2e/helpers/mockSearch.js +6 -9
- package/tests/jest/BookReader/Navbar/Navbar.test.js +16 -3
- package/tests/jest/BookReader/PageContainer.test.js +96 -55
- package/tests/jest/BookReader/utils.test.js +21 -0
- package/tests/jest/BookReader.test.js +13 -12
- package/tests/jest/plugins/plugin.archive_analytics.test.js +8 -11
- package/tests/jest/plugins/plugin.autoplay.test.js +9 -22
- package/tests/jest/plugins/plugin.resume.test.js +19 -32
- package/tests/jest/plugins/plugin.text_selection.test.js +23 -24
- package/dist/esm/BookNavigator/assets/bookmark-colors.js +0 -4
- package/dist/esm/BookNavigator/assets/button-base.js +0 -4
- package/dist/esm/BookNavigator/assets/ia-logo.js +0 -4
- package/dist/esm/BookNavigator/assets/icon_checkmark.js +0 -8
- package/dist/esm/BookNavigator/assets/icon_close.js +0 -4
- package/dist/esm/BookNavigator/book-navigator.js +0 -612
- package/dist/esm/BookNavigator/bookmarks/bookmark-button.js +0 -35
- package/dist/esm/BookNavigator/bookmarks/bookmark-edit.js +0 -78
- package/dist/esm/BookNavigator/bookmarks/bookmarks-list.js +0 -160
- package/dist/esm/BookNavigator/bookmarks/bookmarks-loginCTA.js +0 -24
- package/dist/esm/BookNavigator/bookmarks/bookmarks-provider.js +0 -55
- package/dist/esm/BookNavigator/bookmarks/ia-bookmarks.js +0 -521
- package/dist/esm/BookNavigator/delete-modal-actions.js +0 -29
- package/dist/esm/BookNavigator/downloads/downloads-provider.js +0 -84
- package/dist/esm/BookNavigator/downloads/downloads.js +0 -69
- package/dist/esm/BookNavigator/search/search-provider.js +0 -238
- package/dist/esm/BookNavigator/search/search-results.js +0 -161
- package/dist/esm/BookNavigator/sharing.js +0 -26
- package/dist/esm/BookNavigator/viewable-files.js +0 -94
- package/dist/esm/BookNavigator/visual-adjustments/visual-adjustments-provider.js +0 -83
- package/dist/esm/BookNavigator/visual-adjustments/visual-adjustments.js +0 -131
- package/dist/esm/BookReader/BookModel.js +0 -575
- package/dist/esm/BookReader/DragScrollable.js +0 -224
- package/dist/esm/BookReader/ImageCache.js +0 -122
- package/dist/esm/BookReader/Mode1Up.js +0 -114
- package/dist/esm/BookReader/Mode1UpLit.js +0 -579
- package/dist/esm/BookReader/Mode2Up.js +0 -106
- package/dist/esm/BookReader/Mode2UpLit.js +0 -1020
- package/dist/esm/BookReader/ModeCoordinateSpace.js +0 -28
- package/dist/esm/BookReader/ModeSmoothZoom.js +0 -318
- package/dist/esm/BookReader/ModeThumb.js +0 -366
- package/dist/esm/BookReader/Navbar/Navbar.js +0 -253
- package/dist/esm/BookReader/PageContainer.js +0 -165
- package/dist/esm/BookReader/ReduceSet.js +0 -27
- package/dist/esm/BookReader/Toolbar/Toolbar.js +0 -242
- package/dist/esm/BookReader/events.js +0 -20
- package/dist/esm/BookReader/options.js +0 -331
- package/dist/esm/BookReader/utils/HTMLDimensionsCacher.js +0 -48
- package/dist/esm/BookReader/utils/ScrollClassAdder.js +0 -31
- package/dist/esm/BookReader/utils/SelectionObserver.js +0 -42
- package/dist/esm/BookReader/utils/classes.js +0 -37
- package/dist/esm/BookReader/utils.js +0 -315
- package/dist/esm/BookReader.js +0 -1828
- package/dist/esm/assets/icons/1up.svg +0 -12
- package/dist/esm/assets/icons/2up.svg +0 -15
- package/dist/esm/assets/icons/advance.svg +0 -26
- package/dist/esm/assets/icons/chevron-right.svg +0 -1
- package/dist/esm/assets/icons/close-circle-dark.svg +0 -1
- package/dist/esm/assets/icons/close-circle.svg +0 -1
- package/dist/esm/assets/icons/fullscreen.svg +0 -17
- package/dist/esm/assets/icons/fullscreen_exit.svg +0 -17
- package/dist/esm/assets/icons/hamburger.svg +0 -15
- package/dist/esm/assets/icons/left-arrow.svg +0 -12
- package/dist/esm/assets/icons/magnify-minus.svg +0 -12
- package/dist/esm/assets/icons/magnify-plus.svg +0 -13
- package/dist/esm/assets/icons/magnify.svg +0 -15
- package/dist/esm/assets/icons/pause.svg +0 -23
- package/dist/esm/assets/icons/play.svg +0 -22
- package/dist/esm/assets/icons/playback-speed.svg +0 -34
- package/dist/esm/assets/icons/read-aloud.svg +0 -22
- package/dist/esm/assets/icons/review.svg +0 -22
- package/dist/esm/assets/icons/thumbnails.svg +0 -17
- package/dist/esm/assets/icons/voice.svg +0 -1
- package/dist/esm/assets/icons/volume-full.svg +0 -22
- package/dist/esm/assets/images/BRicons.png +0 -0
- package/dist/esm/assets/images/BRicons.svg +0 -94
- 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 +0 -177
- 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 +0 -12
- package/dist/esm/assets/images/icon_bookmark.svg +0 -12
- 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 +0 -14
- package/dist/esm/assets/images/icon_hamburger.svg +0 -20
- package/dist/esm/assets/images/icon_home.png +0 -0
- package/dist/esm/assets/images/icon_home.svg +0 -21
- 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 +0 -11
- package/dist/esm/assets/images/icon_one_page.svg +0 -8
- package/dist/esm/assets/images/icon_pause.svg +0 -1
- package/dist/esm/assets/images/icon_play.svg +0 -1
- package/dist/esm/assets/images/icon_playback-rate.svg +0 -15
- package/dist/esm/assets/images/icon_return.png +0 -0
- package/dist/esm/assets/images/icon_search_button.svg +0 -8
- package/dist/esm/assets/images/icon_share.svg +0 -9
- package/dist/esm/assets/images/icon_skip-ahead.svg +0 -6
- package/dist/esm/assets/images/icon_skip-back.svg +0 -13
- package/dist/esm/assets/images/icon_speaker.svg +0 -18
- package/dist/esm/assets/images/icon_speaker_open.svg +0 -10
- package/dist/esm/assets/images/icon_thumbnails.svg +0 -12
- package/dist/esm/assets/images/icon_toc.svg +0 -5
- package/dist/esm/assets/images/icon_two_pages.svg +0 -9
- 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 +0 -11
- 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 +0 -11
- package/dist/esm/assets/images/marker_srch-on.svg +0 -11
- 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 +0 -85
- package/dist/esm/css/_BRBookmarks.scss +0 -29
- package/dist/esm/css/_BRComponent.scss +0 -13
- package/dist/esm/css/_BRfloat.scss +0 -197
- package/dist/esm/css/_BRicon.scss +0 -54
- package/dist/esm/css/_BRmain.scss +0 -262
- package/dist/esm/css/_BRnav.scss +0 -354
- package/dist/esm/css/_BRpages.scss +0 -213
- package/dist/esm/css/_BRsearch.scss +0 -268
- package/dist/esm/css/_BRtoolbar.scss +0 -84
- package/dist/esm/css/_BRvendor.scss +0 -5
- package/dist/esm/css/_TextSelection.scss +0 -108
- package/dist/esm/css/_colorbox.scss +0 -52
- package/dist/esm/css/_controls.scss +0 -257
- package/dist/esm/css/_icons.scss +0 -121
- package/dist/esm/ia-bookreader/ia-bookreader.js +0 -141
- package/dist/esm/jquery-wrapper.js +0 -3
- package/dist/esm/plugins/plugin.archive_analytics.js +0 -72
- package/dist/esm/plugins/plugin.autoplay.js +0 -119
- package/dist/esm/plugins/plugin.chapters.js +0 -288
- package/dist/esm/plugins/plugin.iframe.js +0 -44
- package/dist/esm/plugins/plugin.iiif.js +0 -146
- package/dist/esm/plugins/plugin.resume.js +0 -66
- package/dist/esm/plugins/plugin.text_selection.js +0 -621
- package/dist/esm/plugins/plugin.vendor-fullscreen.js +0 -227
- package/dist/esm/plugins/search/plugin.search.js +0 -499
- package/dist/esm/plugins/search/utils.js +0 -42
- package/dist/esm/plugins/search/view.js +0 -360
- package/dist/esm/plugins/tts/AbstractTTSEngine.js +0 -282
- package/dist/esm/plugins/tts/FestivalTTSEngine.js +0 -192
- package/dist/esm/plugins/tts/PageChunk.js +0 -105
- package/dist/esm/plugins/tts/PageChunkIterator.js +0 -155
- package/dist/esm/plugins/tts/WebTTSEngine.js +0 -364
- package/dist/esm/plugins/tts/plugin.tts.js +0 -315
- package/dist/esm/plugins/tts/tooltip_dict.js +0 -14
- package/dist/esm/plugins/tts/utils.js +0 -79
- package/dist/esm/plugins/url/UrlPlugin.js +0 -197
- package/dist/esm/plugins/url/plugin.url.js +0 -212
- package/dist/esm/util/browserSniffing.js +0 -56
- package/dist/esm/util/debouncer.js +0 -25
- package/dist/esm/util/docCookies.js +0 -75
- package/dist/esm/util/strings.js +0 -34
- package/index.js +0 -2
@@ -1,23 +1,13 @@
|
|
1
1
|
//@ts-check
|
2
2
|
import { createDIVPageLayer } from '../BookReader/PageContainer.js';
|
3
3
|
import { SelectionObserver } from '../BookReader/utils/SelectionObserver.js';
|
4
|
+
import { BookReaderPlugin } from '../BookReaderPlugin.js';
|
4
5
|
import { applyVariables } from '../util/strings.js';
|
5
6
|
/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */
|
6
7
|
/** @typedef {import('../BookReader/PageContainer.js').PageContainer} PageContainer */
|
7
8
|
|
8
9
|
const BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);
|
9
10
|
|
10
|
-
export const DEFAULT_OPTIONS = {
|
11
|
-
enabled: true,
|
12
|
-
/** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */
|
13
|
-
fullDjvuXmlUrl: null,
|
14
|
-
/** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */
|
15
|
-
singlePageDjvuXmlUrl: null,
|
16
|
-
/** Whether to fetch the XML as a jsonp */
|
17
|
-
jsonp: false,
|
18
|
-
};
|
19
|
-
/** @typedef {typeof DEFAULT_OPTIONS} TextSelectionPluginOptions */
|
20
|
-
|
21
11
|
/**
|
22
12
|
* @template T
|
23
13
|
*/
|
@@ -39,30 +29,73 @@ export class Cache {
|
|
39
29
|
}
|
40
30
|
}
|
41
31
|
|
42
|
-
export class TextSelectionPlugin {
|
32
|
+
export class TextSelectionPlugin extends BookReaderPlugin {
|
33
|
+
options = {
|
34
|
+
enabled: true,
|
35
|
+
/** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */
|
36
|
+
fullDjvuXmlUrl: null,
|
37
|
+
/** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */
|
38
|
+
singlePageDjvuXmlUrl: null,
|
39
|
+
/** Whether to fetch the XML as a jsonp */
|
40
|
+
jsonp: false,
|
41
|
+
}
|
42
|
+
|
43
|
+
/**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */
|
44
|
+
djvuPagesPromise = null;
|
45
|
+
|
46
|
+
/** @type {Cache<{index: number, response: any}>} */
|
47
|
+
pageTextCache = new Cache();
|
48
|
+
|
43
49
|
/**
|
44
|
-
*
|
45
|
-
*
|
46
|
-
* now we do make that assumption.
|
50
|
+
* Sometimes there are too many words on a page, and the browser becomes near
|
51
|
+
* unusable. For now don't render text layer for pages with too many words.
|
47
52
|
*/
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
+
maxWordRendered = 2500;
|
54
|
+
|
55
|
+
/**
|
56
|
+
* @param {import('../BookReader.js').default} br
|
57
|
+
*/
|
58
|
+
constructor(br) {
|
59
|
+
super(br);
|
60
|
+
// In the future this should be in the ocr file
|
61
|
+
// since a book being right to left doesn't mean the ocr is right to left. But for
|
62
|
+
// now we do make that assumption.
|
53
63
|
/** Whether the book is right-to-left */
|
54
|
-
this.rtl = pageProgression === 'rl';
|
64
|
+
this.rtl = this.br.pageProgression === 'rl';
|
65
|
+
this.selectionObserver = new SelectionObserver('.BRtextLayer', this._onSelectionChange);
|
66
|
+
}
|
55
67
|
|
56
|
-
|
57
|
-
|
68
|
+
/** @override */
|
69
|
+
init() {
|
70
|
+
if (!this.options.enabled) return;
|
58
71
|
|
59
|
-
|
60
|
-
* Sometimes there are too many words on a page, and the browser becomes near
|
61
|
-
* unusable. For now don't render text layer for pages with too many words.
|
62
|
-
*/
|
63
|
-
this.maxWordRendered = 2500;
|
72
|
+
this.loadData();
|
64
73
|
|
65
|
-
this.selectionObserver
|
74
|
+
this.selectionObserver.attach();
|
75
|
+
new SelectionObserver('.BRtextLayer', (selectEvent) => {
|
76
|
+
// Track how often selection is used
|
77
|
+
if (selectEvent == 'started') {
|
78
|
+
this.br._plugins.archiveAnalytics?.sendEvent('BookReader', 'SelectStart');
|
79
|
+
|
80
|
+
// Set a class on the page to avoid hiding it when zooming/etc
|
81
|
+
this.br.refs.$br.find('.BRpagecontainer--hasSelection').removeClass('BRpagecontainer--hasSelection');
|
82
|
+
$(window.getSelection().anchorNode).closest('.BRpagecontainer').addClass('BRpagecontainer--hasSelection');
|
83
|
+
}
|
84
|
+
}).attach();
|
85
|
+
}
|
86
|
+
|
87
|
+
/**
|
88
|
+
* @override
|
89
|
+
* @param {PageContainer} pageContainer
|
90
|
+
* @returns {PageContainer}
|
91
|
+
*/
|
92
|
+
_configurePageContainer(pageContainer) {
|
93
|
+
// Disable if thumb mode; it's too janky
|
94
|
+
// .page can be null for "pre-cover" region
|
95
|
+
if (this.br.mode !== this.br.constModeThumb && pageContainer.page) {
|
96
|
+
this.createTextLayer(pageContainer);
|
97
|
+
}
|
98
|
+
return pageContainer;
|
66
99
|
}
|
67
100
|
|
68
101
|
/**
|
@@ -79,18 +112,16 @@ export class TextSelectionPlugin {
|
|
79
112
|
}
|
80
113
|
}
|
81
114
|
|
82
|
-
|
83
|
-
this.selectionObserver.attach();
|
84
|
-
|
115
|
+
loadData() {
|
85
116
|
// Only fetch the full djvu xml if the single page url isn't there
|
86
117
|
if (this.options.singlePageDjvuXmlUrl) return;
|
87
118
|
this.djvuPagesPromise = $.ajax({
|
88
119
|
type: "GET",
|
89
|
-
url: applyVariables(this.options.fullDjvuXmlUrl, this.
|
120
|
+
url: applyVariables(this.options.fullDjvuXmlUrl, this.br.options.vars),
|
90
121
|
dataType: this.options.jsonp ? "jsonp" : "html",
|
91
122
|
cache: true,
|
92
123
|
xhrFields: {
|
93
|
-
withCredentials:
|
124
|
+
withCredentials: this.br.protected,
|
94
125
|
},
|
95
126
|
error: (e) => undefined,
|
96
127
|
}).then((res) => {
|
@@ -115,11 +146,11 @@ export class TextSelectionPlugin {
|
|
115
146
|
}
|
116
147
|
const res = await $.ajax({
|
117
148
|
type: "GET",
|
118
|
-
url: applyVariables(this.options.singlePageDjvuXmlUrl, this.
|
149
|
+
url: applyVariables(this.options.singlePageDjvuXmlUrl, this.br.options.vars, { pageIndex: index }),
|
119
150
|
dataType: this.options.jsonp ? "jsonp" : "html",
|
120
151
|
cache: true,
|
121
152
|
xhrFields: {
|
122
|
-
withCredentials:
|
153
|
+
withCredentials: this.br.protected,
|
123
154
|
},
|
124
155
|
error: (e) => undefined,
|
125
156
|
});
|
@@ -410,46 +441,7 @@ export class TextSelectionPlugin {
|
|
410
441
|
}
|
411
442
|
}
|
412
443
|
|
413
|
-
|
414
|
-
init() {
|
415
|
-
const options = Object.assign({}, DEFAULT_OPTIONS, this.options.plugins.textSelection);
|
416
|
-
if (options.enabled) {
|
417
|
-
this.textSelectionPlugin = new TextSelectionPlugin(options, this.options.vars, this.pageProgression);
|
418
|
-
// Write this back; this way the plugin is the source of truth, and BR just
|
419
|
-
// contains a reference to it.
|
420
|
-
this.options.plugins.textSelection = options;
|
421
|
-
this.textSelectionPlugin.init();
|
422
|
-
|
423
|
-
new SelectionObserver('.BRtextLayer', (selectEvent) => {
|
424
|
-
// Track how often selection is used
|
425
|
-
if (selectEvent == 'started') {
|
426
|
-
this.archiveAnalyticsSendEvent?.('BookReader', 'SelectStart');
|
427
|
-
|
428
|
-
// Set a class on the page to avoid hiding it when zooming/etc
|
429
|
-
this.refs.$br.find('.BRpagecontainer--hasSelection').removeClass('BRpagecontainer--hasSelection');
|
430
|
-
$(window.getSelection().anchorNode).closest('.BRpagecontainer').addClass('BRpagecontainer--hasSelection');
|
431
|
-
}
|
432
|
-
}).attach();
|
433
|
-
}
|
434
|
-
|
435
|
-
super.init();
|
436
|
-
}
|
437
|
-
|
438
|
-
/**
|
439
|
-
* @param {number} index
|
440
|
-
*/
|
441
|
-
_createPageContainer(index) {
|
442
|
-
const pageContainer = super._createPageContainer(index);
|
443
|
-
// Disable if thumb mode; it's too janky
|
444
|
-
// .page can be null for "pre-cover" region
|
445
|
-
if (this.mode !== this.constModeThumb && pageContainer.page) {
|
446
|
-
this.textSelectionPlugin?.createTextLayer(pageContainer);
|
447
|
-
}
|
448
|
-
return pageContainer;
|
449
|
-
}
|
450
|
-
}
|
451
|
-
window.BookReader = BookreaderWithTextSelection;
|
452
|
-
export default BookreaderWithTextSelection;
|
444
|
+
BookReader?.registerPlugin('textSelection', TextSelectionPlugin);
|
453
445
|
|
454
446
|
|
455
447
|
/**
|
@@ -6,8 +6,7 @@ import { hasLocalStorage } from './utils.js';
|
|
6
6
|
/**
|
7
7
|
* @export
|
8
8
|
* @typedef {Object} TTSEngineOptions
|
9
|
-
* @property {
|
10
|
-
* @property {String} bookPath
|
9
|
+
* @property {import('@/src/util/strings.js').StringWithVars} pageChunkUrl
|
11
10
|
* @property {ISO6391} bookLanguage
|
12
11
|
* @property {Function} onLoadingStart
|
13
12
|
* @property {Function} onLoadingComplete
|
@@ -85,8 +84,7 @@ export default class AbstractTTSEngine {
|
|
85
84
|
this.opts.onLoadingStart();
|
86
85
|
|
87
86
|
this._chunkIterator = new PageChunkIterator(numLeafs, leafIndex, {
|
88
|
-
|
89
|
-
bookPath: this.opts.bookPath,
|
87
|
+
pageChunkUrl: this.opts.pageChunkUrl,
|
90
88
|
pageBufferSize: 5,
|
91
89
|
});
|
92
90
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import { applyVariables } from "../../util/strings.js";
|
2
|
+
|
1
3
|
/**
|
2
4
|
* Class to manage a 'chunk' (approximately a paragraph) of text on a page.
|
3
5
|
*/
|
@@ -16,24 +18,18 @@ export default class PageChunk {
|
|
16
18
|
}
|
17
19
|
|
18
20
|
/**
|
19
|
-
* @param {
|
20
|
-
* @param {string} bookPath
|
21
|
+
* @param {import('@/src/util/strings.js').StringWithVars} pageChunkUrl
|
21
22
|
* @param {number} leafIndex
|
22
23
|
* @return {Promise<PageChunk[]>}
|
23
24
|
*/
|
24
|
-
static async fetch(
|
25
|
+
static async fetch(pageChunkUrl, leafIndex) {
|
25
26
|
const chunks = await $.ajax({
|
26
27
|
type: 'GET',
|
27
|
-
url:
|
28
|
+
url: applyVariables(pageChunkUrl, { pageIndex: leafIndex }),
|
28
29
|
cache: true,
|
29
30
|
xhrFields: {
|
30
31
|
withCredentials: window.br.protected,
|
31
32
|
},
|
32
|
-
data: {
|
33
|
-
path: `${bookPath}_djvu.xml`,
|
34
|
-
page: leafIndex,
|
35
|
-
callback: 'false',
|
36
|
-
},
|
37
33
|
});
|
38
34
|
return PageChunk._fromTextWrapperResponse(leafIndex, chunks);
|
39
35
|
}
|
@@ -138,7 +138,7 @@ export default class PageChunkIterator {
|
|
138
138
|
* @param {number} index
|
139
139
|
*/
|
140
140
|
_fetchPageChunksDirect(index) {
|
141
|
-
return PageChunk.fetch(this.opts.
|
141
|
+
return PageChunk.fetch(this.opts.pageChunkUrl, index);
|
142
142
|
}
|
143
143
|
}
|
144
144
|
|
@@ -146,14 +146,12 @@ PageChunkIterator.AT_END = "__PageChunkIterator.AT_END__";
|
|
146
146
|
|
147
147
|
/** @type {PageChunkIteratorOptions} */
|
148
148
|
const DEFAULT_OPTS = {
|
149
|
-
|
150
|
-
bookPath: null,
|
149
|
+
pageChunkUrl: null,
|
151
150
|
pageBufferSize: 2,
|
152
151
|
};
|
153
152
|
|
154
153
|
/**
|
155
154
|
* @typedef {Object} PageChunkIteratorOptions
|
156
|
-
* @property {
|
157
|
-
* @property {string} bookPath
|
155
|
+
* @property {import('@/src/util/strings.js').StringWithVars} pageChunkUrl
|
158
156
|
* @property {number} [pageBufferSize] number of pages to buffer before/after the current page
|
159
157
|
*/
|