@internetarchive/bookreader 5.0.0-94 → 5.0.0-96
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.js +1 -1
- package/BookReader/hypothesis/LICENSE +50 -0
- package/BookReader/hypothesis/README.md +55 -0
- package/BookReader/hypothesis/build/boot.js +1 -0
- package/BookReader/hypothesis/build/manifest.json +20 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
- package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/highlights.css +2 -0
- package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
- package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
- package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
- package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
- package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
- package/BookReader/hypothesis/package.json +126 -0
- package/README.md +0 -2
- package/package.json +6 -1
- package/.eslintrc.cjs +0 -51
- package/.gitattributes +0 -2
- package/.github/ISSUE_TEMPLATE/bug.md +0 -32
- package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
- package/.github/workflows/node.js.yml +0 -102
- package/.github/workflows/npm-publish.yml +0 -33
- package/.testcaferc.cjs +0 -10
- package/BookReaderDemo/BookReaderDemo.css +0 -40
- package/BookReaderDemo/BookReaderJSAdvanced.js +0 -112
- package/BookReaderDemo/BookReaderJSSimple.js +0 -56
- package/BookReaderDemo/IADemoBr.js +0 -149
- package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
- package/BookReaderDemo/demo-advanced.html +0 -33
- package/BookReaderDemo/demo-embed-iframe-src.html +0 -85
- package/BookReaderDemo/demo-embed.html +0 -26
- package/BookReaderDemo/demo-fullscreen-mobile.html +0 -34
- package/BookReaderDemo/demo-fullscreen.html +0 -31
- package/BookReaderDemo/demo-iiif.html +0 -121
- package/BookReaderDemo/demo-internetarchive.html +0 -271
- package/BookReaderDemo/demo-multiple.html +0 -44
- package/BookReaderDemo/demo-preview-pages.html +0 -1093
- package/BookReaderDemo/demo-simple.html +0 -35
- package/BookReaderDemo/demo-vendor-fullscreen.html +0 -34
- package/BookReaderDemo/ia-multiple-volumes-manifest.js +0 -169
- package/BookReaderDemo/immersion-1up.html +0 -64
- package/BookReaderDemo/immersion-mode.html +0 -33
- package/BookReaderDemo/toggle_controls.html +0 -54
- package/BookReaderDemo/view_mode.html +0 -40
- package/BookReaderDemo/viewmode-cycle.html +0 -40
- package/CHANGELOG.md +0 -1080
- package/CONTRIBUTING.md +0 -7
- package/babel.config.cjs +0 -20
- package/codecov.yml +0 -23
- package/index.html +0 -34
- package/netlify.toml +0 -9
- package/renovate.json +0 -52
- package/screenshot.png +0 -0
- package/scripts/postversion.js +0 -11
- package/scripts/preversion.js +0 -15
- package/scripts/version.js +0 -27
- package/tests/e2e/README.md +0 -112
- package/tests/e2e/autoplay.test.js +0 -16
- package/tests/e2e/base.test.js +0 -27
- package/tests/e2e/helpers/base.js +0 -263
- package/tests/e2e/helpers/debug.js +0 -13
- package/tests/e2e/helpers/mockSearch.js +0 -90
- package/tests/e2e/helpers/params.js +0 -17
- package/tests/e2e/helpers/rightToLeft.js +0 -23
- package/tests/e2e/helpers/search.js +0 -73
- package/tests/e2e/models/BookReader.js +0 -11
- package/tests/e2e/models/Navigation.js +0 -39
- package/tests/e2e/rightToLeft.test.js +0 -19
- package/tests/e2e/viewmode.test.js +0 -44
- package/tests/jest/BookNavigator/book-navigator.test.js +0 -653
- package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +0 -43
- package/tests/jest/BookNavigator/bookmarks/bookmark-edit.test.js +0 -132
- package/tests/jest/BookNavigator/bookmarks/bookmarks-list.test.js +0 -221
- package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +0 -45
- package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +0 -67
- package/tests/jest/BookNavigator/downloads/downloads.test.js +0 -53
- package/tests/jest/BookNavigator/search/search-provider.test.js +0 -179
- package/tests/jest/BookNavigator/search/search-results.test.js +0 -289
- package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +0 -49
- package/tests/jest/BookNavigator/viewable-files/viewable-files-provider.test.js +0 -80
- package/tests/jest/BookNavigator/visual-adjustments.test.js +0 -200
- package/tests/jest/BookReader/BookModel.test.js +0 -372
- package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +0 -263
- package/tests/jest/BookReader/ImageCache.test.js +0 -150
- package/tests/jest/BookReader/Mode1UpLit.test.js +0 -73
- package/tests/jest/BookReader/Mode2Up.test.js +0 -98
- package/tests/jest/BookReader/Mode2UpLit.test.js +0 -190
- package/tests/jest/BookReader/ModeCoordinateSpace.test.js +0 -16
- package/tests/jest/BookReader/ModeSmoothZoom.test.js +0 -218
- package/tests/jest/BookReader/ModeThumb.test.js +0 -71
- package/tests/jest/BookReader/Navbar/Navbar.test.js +0 -182
- package/tests/jest/BookReader/PageContainer.test.js +0 -249
- package/tests/jest/BookReader/ReduceSet.test.js +0 -38
- package/tests/jest/BookReader/Toolbar/Toolbar.test.js +0 -26
- package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +0 -59
- package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +0 -49
- package/tests/jest/BookReader/utils/SelectionObserver.test.js +0 -57
- package/tests/jest/BookReader/utils/classes.test.js +0 -88
- package/tests/jest/BookReader/utils.test.js +0 -250
- package/tests/jest/BookReader.keyboard.test.js +0 -190
- package/tests/jest/BookReader.options.test.js +0 -47
- package/tests/jest/BookReader.test.js +0 -316
- package/tests/jest/plugins/plugin.archive_analytics.test.js +0 -20
- package/tests/jest/plugins/plugin.autoplay.test.js +0 -35
- package/tests/jest/plugins/plugin.chapters.test.js +0 -193
- package/tests/jest/plugins/plugin.iframe.test.js +0 -42
- package/tests/jest/plugins/plugin.resume.test.js +0 -85
- package/tests/jest/plugins/plugin.text_selection.test.js +0 -447
- package/tests/jest/plugins/plugin.vendor-fullscreen.test.js +0 -65
- package/tests/jest/plugins/search/plugin.search.test.js +0 -120
- package/tests/jest/plugins/search/plugin.search.view.test.js +0 -131
- package/tests/jest/plugins/search/utils.js +0 -25
- package/tests/jest/plugins/search/utils.test.js +0 -29
- package/tests/jest/plugins/tts/AbstractTTSEngine.test.js +0 -173
- package/tests/jest/plugins/tts/FestivalTTSEngine.test.js +0 -59
- package/tests/jest/plugins/tts/PageChunk.test.js +0 -57
- package/tests/jest/plugins/tts/PageChunkIterator.test.js +0 -179
- package/tests/jest/plugins/tts/WebTTSEngine.test.js +0 -178
- package/tests/jest/plugins/tts/utils.test.js +0 -74
- package/tests/jest/plugins/url/UrlPlugin.test.js +0 -198
- package/tests/jest/plugins/url/plugin.url.test.js +0 -168
- package/tests/jest/setup.js +0 -3
- package/tests/jest/util/browserSniffing.test.js +0 -62
- package/tests/jest/util/docCookies.test.js +0 -24
- package/tests/jest/util/strings.test.js +0 -63
- package/tests/jest/utils.js +0 -83
- package/webpack.config.js +0 -97
@@ -1,150 +0,0 @@
|
|
1
|
-
import sinon from 'sinon';
|
2
|
-
import { BookModel } from '@/src/BookReader/BookModel.js';
|
3
|
-
import { ImageCache } from '@/src/BookReader/ImageCache.js';
|
4
|
-
import { Pow2ReduceSet } from '@/src/BookReader/ReduceSet.js';
|
5
|
-
/** @typedef {import('@/src/BookReader/options.js').BookReaderOptions} BookReaderOptions */
|
6
|
-
|
7
|
-
afterEach(() => {
|
8
|
-
jest.restoreAllMocks();
|
9
|
-
sinon.restore();
|
10
|
-
});
|
11
|
-
|
12
|
-
const CACHE_MOCK = { 1: [{ reduce: 3, loaded: true }] };
|
13
|
-
const FIRST_PAGE_MOCK = { width: 123, height: 123, uri: 'https://archive.org/image0.jpg', pageNum: '1' };
|
14
|
-
/** @type {BookReaderOptions['data']} */
|
15
|
-
const SAMPLE_DATA = [
|
16
|
-
[ FIRST_PAGE_MOCK ],
|
17
|
-
[
|
18
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image1.jpg', pageNum: '2' },
|
19
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '3' },
|
20
|
-
],
|
21
|
-
[
|
22
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image3.jpg', pageNum: '4' },
|
23
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image4.jpg', pageNum: '5' },
|
24
|
-
],
|
25
|
-
[
|
26
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image5.jpg', pageNum: '6' },
|
27
|
-
],
|
28
|
-
];
|
29
|
-
|
30
|
-
describe('Image Cache', () => {
|
31
|
-
describe('`image` call', () => {
|
32
|
-
test('calling `image` will create an image if none is cached', () => {
|
33
|
-
const reduceSet = Pow2ReduceSet;
|
34
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
35
|
-
ic.cache = {};
|
36
|
-
ic.image(1, 5);
|
37
|
-
expect(Object.keys(ic.cache).length).toBe(1);
|
38
|
-
expect(ic.cache['1'].length).toBe(1);
|
39
|
-
});
|
40
|
-
test('will pull from cache if image of a good quality has been stored', () => {
|
41
|
-
const reduceSet = Pow2ReduceSet;
|
42
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
43
|
-
const serveImgElSpy = sinon.spy(ic, '_serveImageElement');
|
44
|
-
ic.cache = CACHE_MOCK;
|
45
|
-
ic.image(1, 5);
|
46
|
-
expect(serveImgElSpy.callCount).toBe(1);
|
47
|
-
});
|
48
|
-
});
|
49
|
-
|
50
|
-
describe('`imageLoaded` call', () => {
|
51
|
-
test('returns true if image in cache', () => {
|
52
|
-
const reduceSet = Pow2ReduceSet;
|
53
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
54
|
-
ic.cache = CACHE_MOCK;
|
55
|
-
const isImgLoaded = ic.imageLoaded(1, 3);
|
56
|
-
expect(isImgLoaded).toBe(true);
|
57
|
-
});
|
58
|
-
test('returns true if image reducer in cache is good enough', () => {
|
59
|
-
const reduceSet = Pow2ReduceSet;
|
60
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
61
|
-
ic.cache = CACHE_MOCK;
|
62
|
-
const isImgLoaded = ic.imageLoaded(1, 5);
|
63
|
-
expect(isImgLoaded).toBe(true);
|
64
|
-
});
|
65
|
-
test('returns false if no image in cache', () => {
|
66
|
-
const reduceSet = Pow2ReduceSet;
|
67
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
68
|
-
ic.cache = CACHE_MOCK;
|
69
|
-
const isImgLoaded = ic.imageLoaded(2, 3);
|
70
|
-
expect(isImgLoaded).toBe(false);
|
71
|
-
});
|
72
|
-
test('returns false if reducer to check is better than cache', () => {
|
73
|
-
const reduceSet = Pow2ReduceSet;
|
74
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
75
|
-
ic.cache = CACHE_MOCK;
|
76
|
-
const isImgLoaded = ic.imageLoaded(1, 2);
|
77
|
-
expect(isImgLoaded).toBe(false);
|
78
|
-
});
|
79
|
-
test('returns false if image has not loaded', () => {
|
80
|
-
const reduceSet = Pow2ReduceSet;
|
81
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
82
|
-
ic.cache = { 1: [{ reduce: 4, loaded: false }] };
|
83
|
-
const isImgLoaded = ic.imageLoaded(1, 2);
|
84
|
-
expect(isImgLoaded).toBe(false);
|
85
|
-
});
|
86
|
-
});
|
87
|
-
|
88
|
-
describe('`getBestLoadedReduce` call', () => {
|
89
|
-
test('handles empty cache', () => {
|
90
|
-
const reduceSet = Pow2ReduceSet;
|
91
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
92
|
-
ic.cache = {};
|
93
|
-
expect(ic.getBestLoadedReduce(0)).toBeNull();
|
94
|
-
});
|
95
|
-
|
96
|
-
test('handles empty page-level cache', () => {
|
97
|
-
const reduceSet = Pow2ReduceSet;
|
98
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
99
|
-
ic.cache = { 0: [] };
|
100
|
-
expect(ic.getBestLoadedReduce(0)).toBeNull();
|
101
|
-
ic.cache = { 0: [{ reduce: 10, loaded: false }] };
|
102
|
-
expect(ic.getBestLoadedReduce(0)).toBeNull();
|
103
|
-
});
|
104
|
-
|
105
|
-
test('chooses highest quality sufficient image', () => {
|
106
|
-
const reduceSet = Pow2ReduceSet;
|
107
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
108
|
-
ic.cache = { 0: [{ reduce: 1, loaded: true }, { reduce: 4, loaded: true }, { reduce: 10, loaded: true }] };
|
109
|
-
expect(ic.getBestLoadedReduce(0, 5)).toBe(10);
|
110
|
-
});
|
111
|
-
|
112
|
-
test('chooses closest image if no lower images', () => {
|
113
|
-
const reduceSet = Pow2ReduceSet;
|
114
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
115
|
-
ic.cache = { 0: [{ reduce: 1, loaded: true }, { reduce: 4, loaded: true }] };
|
116
|
-
expect(ic.getBestLoadedReduce(0, 5)).toBe(4);
|
117
|
-
});
|
118
|
-
});
|
119
|
-
|
120
|
-
describe('`_serveImageElement` call', () => {
|
121
|
-
test('returns jQuery image element', () => {
|
122
|
-
const reduceSet = Pow2ReduceSet;
|
123
|
-
const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
|
124
|
-
const img = ic._serveImageElement(0);
|
125
|
-
expect($(img).length).toBe(1);
|
126
|
-
expect($(img)[0].classList.contains('BRpageimage')).toBe(true);
|
127
|
-
expect($(img).attr('src')).toBe(FIRST_PAGE_MOCK.uri);
|
128
|
-
});
|
129
|
-
|
130
|
-
test('does not set srcset when useSrcSet=false', () => {
|
131
|
-
const reduceSet = Pow2ReduceSet;
|
132
|
-
const ic = new ImageCache(
|
133
|
-
new BookModel({ data: SAMPLE_DATA, reduceSet }),
|
134
|
-
{ useSrcSet: false, reduceSet },
|
135
|
-
);
|
136
|
-
const $img = ic._serveImageElement(0);
|
137
|
-
expect($img[0].hasAttribute('srcset')).toBe(false);
|
138
|
-
});
|
139
|
-
|
140
|
-
test('sets srcset when useSrcSet=true', () => {
|
141
|
-
const reduceSet = Pow2ReduceSet;
|
142
|
-
const ic = new ImageCache(
|
143
|
-
new BookModel({ data: SAMPLE_DATA, reduceSet }),
|
144
|
-
{ useSrcSet: true, reduceSet },
|
145
|
-
);
|
146
|
-
const $img = ic._serveImageElement(0, 9);
|
147
|
-
expect($img.attr('srcset')).toBeTruthy();
|
148
|
-
});
|
149
|
-
});
|
150
|
-
});
|
@@ -1,73 +0,0 @@
|
|
1
|
-
import { BookModel } from '@/src/BookReader/BookModel.js';
|
2
|
-
import { Mode1UpLit } from '@/src/BookReader/Mode1UpLit.js';
|
3
|
-
|
4
|
-
/** @type {import('@/src/BookReader/options.js').BookReaderOptions['data']} */
|
5
|
-
const SAMPLE_DATA = [
|
6
|
-
[
|
7
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image0.jpg', pageNum: '1' },
|
8
|
-
],
|
9
|
-
[
|
10
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image1.jpg', pageNum: '2' },
|
11
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '3' },
|
12
|
-
],
|
13
|
-
[
|
14
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image3.jpg', pageNum: '4' },
|
15
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image4.jpg', pageNum: '5' },
|
16
|
-
],
|
17
|
-
[
|
18
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image5.jpg', pageNum: '6' },
|
19
|
-
],
|
20
|
-
];
|
21
|
-
|
22
|
-
function make_dummy_br(overrides = {}) {
|
23
|
-
return Object.assign({
|
24
|
-
updateFirstIndex() {},
|
25
|
-
_components: {
|
26
|
-
navbar: {
|
27
|
-
updateNavIndexThrottled() {},
|
28
|
-
},
|
29
|
-
},
|
30
|
-
data: [],
|
31
|
-
}, overrides);
|
32
|
-
}
|
33
|
-
|
34
|
-
describe('pageTops', () => {
|
35
|
-
afterEach(() => document.body.innerHTML = '');
|
36
|
-
|
37
|
-
test('Works with empty book', async () => {
|
38
|
-
const br = make_dummy_br({ data: [] });
|
39
|
-
const book = new BookModel(br);
|
40
|
-
const mode = new Mode1UpLit(book, br);
|
41
|
-
document.body.appendChild(mode);
|
42
|
-
mode.requestUpdate();
|
43
|
-
await mode.updateComplete;
|
44
|
-
expect(mode.pageTops).toEqual({});
|
45
|
-
});
|
46
|
-
|
47
|
-
test('Iterates all pages', async () => {
|
48
|
-
const br = make_dummy_br({ data: SAMPLE_DATA });
|
49
|
-
const book = new BookModel(br);
|
50
|
-
const mode = new Mode1UpLit(book, br);
|
51
|
-
document.body.appendChild(mode);
|
52
|
-
await mode.requestUpdate();
|
53
|
-
expect(Object.values(mode.pageTops)).toHaveLength(6);
|
54
|
-
});
|
55
|
-
|
56
|
-
test('Computes tops', async () => {
|
57
|
-
const br = make_dummy_br({ data: SAMPLE_DATA });
|
58
|
-
const book = new BookModel(br);
|
59
|
-
const mode = new Mode1UpLit(book, br);
|
60
|
-
document.body.appendChild(mode);
|
61
|
-
await mode.requestUpdate();
|
62
|
-
const tops = Object.entries(mode.pageTops);
|
63
|
-
expect(tops.map(([index, top]) => [index, top.toFixed(1)])).toEqual([
|
64
|
-
// Recall these are in inches
|
65
|
-
['0', '0.2'],
|
66
|
-
['1', '0.6'],
|
67
|
-
['2', '1.1'],
|
68
|
-
['3', '1.5'],
|
69
|
-
['4', '2.0'],
|
70
|
-
['5', '2.4'],
|
71
|
-
]);
|
72
|
-
});
|
73
|
-
});
|
@@ -1,98 +0,0 @@
|
|
1
|
-
|
2
|
-
import sinon from 'sinon';
|
3
|
-
import { Mode2Up } from '@/src/BookReader/Mode2Up.js';
|
4
|
-
import BookReader from '@/src/BookReader.js';
|
5
|
-
import { BookModel } from '@/src/BookReader/BookModel.js';
|
6
|
-
import { afterEventLoop } from '../utils.js';
|
7
|
-
/** @typedef {import('@/src/BookReader/options.js').BookReaderOptions} BookReaderOptions */
|
8
|
-
|
9
|
-
beforeAll(() => {
|
10
|
-
global.alert = jest.fn();
|
11
|
-
});
|
12
|
-
afterEach(() => {
|
13
|
-
jest.restoreAllMocks();
|
14
|
-
sinon.restore();
|
15
|
-
});
|
16
|
-
|
17
|
-
/** @type {BookReaderOptions['data']} */
|
18
|
-
const SAMPLE_DATA = [
|
19
|
-
[
|
20
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image0.jpg', pageNum: '1' },
|
21
|
-
],
|
22
|
-
[
|
23
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image1.jpg', pageNum: '2' },
|
24
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '3' },
|
25
|
-
],
|
26
|
-
[
|
27
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image3.jpg', pageNum: '4' },
|
28
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image4.jpg', pageNum: '5' },
|
29
|
-
],
|
30
|
-
[
|
31
|
-
{ width: 123, height: 123, uri: 'https://archive.org/image5.jpg', pageNum: '6' },
|
32
|
-
],
|
33
|
-
];
|
34
|
-
|
35
|
-
|
36
|
-
describe('Mode2Up', () => {
|
37
|
-
/** @type {BookReader} */
|
38
|
-
let br;
|
39
|
-
/** @type {BookModel} */
|
40
|
-
let bookModel;
|
41
|
-
/** @type {Mode2Up} */
|
42
|
-
let mode2Up;
|
43
|
-
|
44
|
-
beforeEach(() => {
|
45
|
-
br = new BookReader({
|
46
|
-
data: SAMPLE_DATA,
|
47
|
-
el: document.createElement('div'),
|
48
|
-
});
|
49
|
-
br.init();
|
50
|
-
bookModel = new BookModel(br);
|
51
|
-
mode2Up = new Mode2Up(br, bookModel);
|
52
|
-
});
|
53
|
-
|
54
|
-
describe('prepare', () => {
|
55
|
-
it('initializes DOM properly', async () => {
|
56
|
-
const spyAppend = sinon.spy(br.refs.$brContainer, 'append');
|
57
|
-
const spyRequestUpdate = sinon.spy(mode2Up.mode2UpLit, 'requestUpdate');
|
58
|
-
const initFirstRenderSpy = sinon.spy(mode2Up.mode2UpLit, 'initFirstRender');
|
59
|
-
const jumpToIndexSpy = sinon.spy(mode2Up.mode2UpLit, 'jumpToIndex');
|
60
|
-
sinon.stub(mode2Up.mode2UpLit, 'updateComplete').get(() => Promise.resolve());
|
61
|
-
mode2Up.prepare();
|
62
|
-
|
63
|
-
expect(br.refs.$brContainer[0].style.overflow).toEqual('hidden');
|
64
|
-
expect(spyAppend.calledWith(mode2Up.$el)).toBe(true);
|
65
|
-
expect(mode2Up.mode2UpLit.style.opacity).toEqual('0');
|
66
|
-
|
67
|
-
await afterEventLoop();
|
68
|
-
|
69
|
-
expect(initFirstRenderSpy.called).toBe(true);
|
70
|
-
expect(jumpToIndexSpy.called).toBe(false);
|
71
|
-
expect(mode2Up.everShown).toBe(true);
|
72
|
-
expect(spyRequestUpdate.called).toBe(true);
|
73
|
-
expect(mode2Up.mode2UpLit.style.opacity).toEqual('1');
|
74
|
-
});
|
75
|
-
});
|
76
|
-
|
77
|
-
describe('resizePageView', () => {
|
78
|
-
it('updates autoFit when possible', async () => {
|
79
|
-
const updateClientSizesSpy = sinon.stub(mode2Up.mode2UpLit.htmlDimensionsCacher, 'updateClientSizes');
|
80
|
-
const resizeViaAutofitSpy = sinon.spy(mode2Up.mode2UpLit, 'resizeViaAutofit');
|
81
|
-
const recenterStub = sinon.stub(mode2Up.mode2UpLit, 'recenter');
|
82
|
-
|
83
|
-
mode2Up.resizePageView();
|
84
|
-
expect(updateClientSizesSpy.called).toBe(true);
|
85
|
-
expect(resizeViaAutofitSpy.called).toBe(true);
|
86
|
-
expect(recenterStub.called).toBe(true);
|
87
|
-
|
88
|
-
// Test with scale and autoFit as 'none'
|
89
|
-
mode2Up.mode2UpLit.scale = 0.1;
|
90
|
-
mode2Up.mode2UpLit.autoFit = 'none';
|
91
|
-
mode2Up.resizePageView();
|
92
|
-
|
93
|
-
expect(mode2Up.mode2UpLit.autoFit).toEqual('auto');
|
94
|
-
expect(resizeViaAutofitSpy.callCount).toEqual(2);
|
95
|
-
expect(recenterStub.callCount).toEqual(2);
|
96
|
-
});
|
97
|
-
});
|
98
|
-
});
|
@@ -1,190 +0,0 @@
|
|
1
|
-
import sinon from "sinon";
|
2
|
-
import { BookModel } from "@/src/BookReader/BookModel.js";
|
3
|
-
import { Mode2UpLit } from "@/src/BookReader/Mode2UpLit.js";
|
4
|
-
|
5
|
-
/** @type {import('@/src/BookReader/options.js').BookReaderOptions['data']} */
|
6
|
-
const SAMPLE_DATA = [
|
7
|
-
[
|
8
|
-
{
|
9
|
-
width: 123,
|
10
|
-
height: 123,
|
11
|
-
uri: "https://archive.org/image0.jpg",
|
12
|
-
pageNum: "1",
|
13
|
-
},
|
14
|
-
],
|
15
|
-
[
|
16
|
-
{
|
17
|
-
width: 123,
|
18
|
-
height: 123,
|
19
|
-
uri: "https://archive.org/image1.jpg",
|
20
|
-
pageNum: "2",
|
21
|
-
},
|
22
|
-
{
|
23
|
-
width: 123,
|
24
|
-
height: 123,
|
25
|
-
uri: "https://archive.org/image2.jpg",
|
26
|
-
pageNum: "3",
|
27
|
-
},
|
28
|
-
],
|
29
|
-
[
|
30
|
-
{
|
31
|
-
width: 123,
|
32
|
-
height: 123,
|
33
|
-
uri: "https://archive.org/image3.jpg",
|
34
|
-
pageNum: "4",
|
35
|
-
},
|
36
|
-
{
|
37
|
-
width: 123,
|
38
|
-
height: 123,
|
39
|
-
uri: "https://archive.org/image4.jpg",
|
40
|
-
pageNum: "5",
|
41
|
-
},
|
42
|
-
],
|
43
|
-
[
|
44
|
-
{
|
45
|
-
width: 123,
|
46
|
-
height: 123,
|
47
|
-
uri: "https://archive.org/image5.jpg",
|
48
|
-
pageNum: "6",
|
49
|
-
},
|
50
|
-
],
|
51
|
-
];
|
52
|
-
|
53
|
-
function make_dummy_br(overrides = {}) {
|
54
|
-
return Object.assign({
|
55
|
-
updateFirstIndex() {},
|
56
|
-
_components: {
|
57
|
-
navbar: {
|
58
|
-
updateNavIndexThrottled() {},
|
59
|
-
},
|
60
|
-
},
|
61
|
-
data: [],
|
62
|
-
}, overrides);
|
63
|
-
}
|
64
|
-
|
65
|
-
afterEach(() => {
|
66
|
-
sinon.restore();
|
67
|
-
});
|
68
|
-
|
69
|
-
describe("computePageHeight", () => {
|
70
|
-
test("Always returns the median", () => {
|
71
|
-
const mode = new Mode2UpLit({
|
72
|
-
getMedianPageSizeInches: () => ({ width: 100, height: 200 }),
|
73
|
-
}, null);
|
74
|
-
expect(mode.computePageHeight(null)).toEqual(200);
|
75
|
-
expect(mode.computePageHeight({ widthInches: 300, heightInches: 400 }))
|
76
|
-
.toEqual(200);
|
77
|
-
});
|
78
|
-
});
|
79
|
-
|
80
|
-
describe("computePageWidth", () => {
|
81
|
-
test("returns relative to pageHeight", () => {
|
82
|
-
const mode = new Mode2UpLit(null, null);
|
83
|
-
sinon.stub(mode, "computePageHeight").returns(6);
|
84
|
-
|
85
|
-
expect(mode.computePageWidth({ widthInches: 2, heightInches: 6 })).toEqual(
|
86
|
-
2,
|
87
|
-
);
|
88
|
-
expect(mode.computePageWidth({ widthInches: 3, heightInches: 6 })).toEqual(
|
89
|
-
3,
|
90
|
-
);
|
91
|
-
expect(mode.computePageWidth({ widthInches: 2, heightInches: 4 })).toEqual(
|
92
|
-
2 * 6 / 4,
|
93
|
-
);
|
94
|
-
});
|
95
|
-
});
|
96
|
-
|
97
|
-
describe("computePositions", () => {
|
98
|
-
const LEFT_COVER_EXPECTED = {
|
99
|
-
leafEdgesLeftStart: -0.246,
|
100
|
-
leafEdgesLeftMainWidth: 0,
|
101
|
-
leafEdgesLeftMovingStart: -0.246,
|
102
|
-
leafEdgesLeftMovingWidth: 0,
|
103
|
-
leafEdgesLeftEnd: -0.246,
|
104
|
-
leafEdgesLeftFullWidth: 0,
|
105
|
-
pageLeftStart: -0.246,
|
106
|
-
pageLeftWidth: 0.246,
|
107
|
-
pageLeftEnd: 0,
|
108
|
-
gutter: 0,
|
109
|
-
pageRightStart: 0,
|
110
|
-
pageRightWidth: 0.246,
|
111
|
-
pageRightEnd: 0.246,
|
112
|
-
leafEdgesRightStart: 0.246,
|
113
|
-
leafEdgesRightMovingWidth: 0,
|
114
|
-
leafEdgesRightMainStart: 0.246,
|
115
|
-
leafEdgesRightMainWidth: 0.006,
|
116
|
-
leafEdgesRightEnd: 0.252,
|
117
|
-
leafEdgesRightFullWidth: 0.006,
|
118
|
-
spreadWidth: 0.492,
|
119
|
-
bookWidth: 0.498,
|
120
|
-
};
|
121
|
-
const SPREAD_EXPECTED = {
|
122
|
-
leafEdgesLeftStart: -0.246,
|
123
|
-
leafEdgesLeftMainWidth: 0.002,
|
124
|
-
leafEdgesLeftMovingStart: -0.244,
|
125
|
-
leafEdgesLeftMovingWidth: 0,
|
126
|
-
leafEdgesLeftEnd: -0.244,
|
127
|
-
leafEdgesLeftFullWidth: 0.002,
|
128
|
-
pageLeftStart: -0.244,
|
129
|
-
pageLeftWidth: 0.246,
|
130
|
-
pageLeftEnd: 0.002,
|
131
|
-
gutter: 0.002,
|
132
|
-
pageRightStart: 0.002,
|
133
|
-
pageRightWidth: 0.246,
|
134
|
-
pageRightEnd: 0.248,
|
135
|
-
leafEdgesRightStart: 0.248,
|
136
|
-
leafEdgesRightMovingWidth: 0,
|
137
|
-
leafEdgesRightMainStart: 0.248,
|
138
|
-
leafEdgesRightMainWidth: 0.004,
|
139
|
-
leafEdgesRightEnd: 0.252,
|
140
|
-
leafEdgesRightFullWidth: 0.004,
|
141
|
-
spreadWidth: 0.492,
|
142
|
-
bookWidth: 0.498,
|
143
|
-
};
|
144
|
-
const RIGHT_COVER_EXPECTED = {
|
145
|
-
leafEdgesLeftStart: -0.242,
|
146
|
-
leafEdgesLeftMainWidth: 0.006,
|
147
|
-
leafEdgesLeftMovingStart: -0.236,
|
148
|
-
leafEdgesLeftMovingWidth: 0,
|
149
|
-
leafEdgesLeftEnd: -0.236,
|
150
|
-
leafEdgesLeftFullWidth: 0.006,
|
151
|
-
pageLeftStart: -0.236,
|
152
|
-
pageLeftWidth: 0.246,
|
153
|
-
pageLeftEnd: 0.01,
|
154
|
-
gutter: 0.01,
|
155
|
-
pageRightStart: 0.01,
|
156
|
-
pageRightWidth: 0,
|
157
|
-
pageRightEnd: 0.01,
|
158
|
-
leafEdgesRightStart: 0.01,
|
159
|
-
leafEdgesRightMovingWidth: 0,
|
160
|
-
leafEdgesRightMainStart: 0.01,
|
161
|
-
leafEdgesRightMainWidth: 0,
|
162
|
-
leafEdgesRightEnd: 0.01,
|
163
|
-
leafEdgesRightFullWidth: 0,
|
164
|
-
spreadWidth: 0.246,
|
165
|
-
bookWidth: 0.252,
|
166
|
-
};
|
167
|
-
|
168
|
-
test("left cover page", () => {
|
169
|
-
const br = make_dummy_br({ data: SAMPLE_DATA });
|
170
|
-
const book = new BookModel(br);
|
171
|
-
const mode = new Mode2UpLit(book, br);
|
172
|
-
expect(mode.computePositions(null, book.getPage(0))).toEqual(LEFT_COVER_EXPECTED);
|
173
|
-
});
|
174
|
-
|
175
|
-
test("spread", () => {
|
176
|
-
const br = make_dummy_br({ data: SAMPLE_DATA });
|
177
|
-
const book = new BookModel(br);
|
178
|
-
const mode = new Mode2UpLit(book, br);
|
179
|
-
|
180
|
-
expect(mode.computePositions(book.getPage(1), book.getPage(2))).toEqual(SPREAD_EXPECTED);
|
181
|
-
});
|
182
|
-
|
183
|
-
test("right cover page", () => {
|
184
|
-
const br = make_dummy_br({ data: SAMPLE_DATA });
|
185
|
-
const book = new BookModel(br);
|
186
|
-
const mode = new Mode2UpLit(book, br);
|
187
|
-
|
188
|
-
expect(mode.computePositions(book.getPage(-1), null)).toEqual(RIGHT_COVER_EXPECTED);
|
189
|
-
});
|
190
|
-
});
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import { ModeCoordinateSpace } from "@/src/BookReader/ModeCoordinateSpace.js";
|
2
|
-
|
3
|
-
describe("worldUnitsToRenderedPixels", () => {
|
4
|
-
test("0 case", () => {
|
5
|
-
const mcs = new ModeCoordinateSpace({ scale: 1 });
|
6
|
-
expect(mcs.worldUnitsToRenderedPixels(0)).toBe(0);
|
7
|
-
});
|
8
|
-
|
9
|
-
test("Misc cases", () => {
|
10
|
-
const mcs = new ModeCoordinateSpace({ scale: 1 });
|
11
|
-
mcs.screenDPI = 100;
|
12
|
-
expect(mcs.worldUnitsToRenderedPixels(1)).toBe(100);
|
13
|
-
mcs.screenDPI = 78;
|
14
|
-
expect(mcs.worldUnitsToRenderedPixels(1)).toBe(78);
|
15
|
-
});
|
16
|
-
});
|