@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.
Files changed (167) hide show
  1. package/BookReader/BookReader.js +1 -1
  2. package/BookReader/hypothesis/LICENSE +50 -0
  3. package/BookReader/hypothesis/README.md +55 -0
  4. package/BookReader/hypothesis/build/boot.js +1 -0
  5. package/BookReader/hypothesis/build/manifest.json +20 -0
  6. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
  7. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  8. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
  9. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  10. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
  11. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  12. package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
  13. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  14. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  15. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  16. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  17. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  18. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  19. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  20. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  35. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  36. package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
  37. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  38. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
  39. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  40. package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
  41. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  42. package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
  43. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  44. package/BookReader/hypothesis/package.json +126 -0
  45. package/README.md +0 -2
  46. package/package.json +6 -1
  47. package/.eslintrc.cjs +0 -51
  48. package/.gitattributes +0 -2
  49. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  50. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  51. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  52. package/.github/workflows/node.js.yml +0 -102
  53. package/.github/workflows/npm-publish.yml +0 -33
  54. package/.testcaferc.cjs +0 -10
  55. package/BookReaderDemo/BookReaderDemo.css +0 -40
  56. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -112
  57. package/BookReaderDemo/BookReaderJSSimple.js +0 -56
  58. package/BookReaderDemo/IADemoBr.js +0 -149
  59. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  60. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  61. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  62. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  63. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  64. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  65. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  66. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  67. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  68. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  69. package/BookReaderDemo/demo-advanced.html +0 -33
  70. package/BookReaderDemo/demo-embed-iframe-src.html +0 -85
  71. package/BookReaderDemo/demo-embed.html +0 -26
  72. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -34
  73. package/BookReaderDemo/demo-fullscreen.html +0 -31
  74. package/BookReaderDemo/demo-iiif.html +0 -121
  75. package/BookReaderDemo/demo-internetarchive.html +0 -271
  76. package/BookReaderDemo/demo-multiple.html +0 -44
  77. package/BookReaderDemo/demo-preview-pages.html +0 -1093
  78. package/BookReaderDemo/demo-simple.html +0 -35
  79. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -34
  80. package/BookReaderDemo/ia-multiple-volumes-manifest.js +0 -169
  81. package/BookReaderDemo/immersion-1up.html +0 -64
  82. package/BookReaderDemo/immersion-mode.html +0 -33
  83. package/BookReaderDemo/toggle_controls.html +0 -54
  84. package/BookReaderDemo/view_mode.html +0 -40
  85. package/BookReaderDemo/viewmode-cycle.html +0 -40
  86. package/CHANGELOG.md +0 -1080
  87. package/CONTRIBUTING.md +0 -7
  88. package/babel.config.cjs +0 -20
  89. package/codecov.yml +0 -23
  90. package/index.html +0 -34
  91. package/netlify.toml +0 -9
  92. package/renovate.json +0 -52
  93. package/screenshot.png +0 -0
  94. package/scripts/postversion.js +0 -11
  95. package/scripts/preversion.js +0 -15
  96. package/scripts/version.js +0 -27
  97. package/tests/e2e/README.md +0 -112
  98. package/tests/e2e/autoplay.test.js +0 -16
  99. package/tests/e2e/base.test.js +0 -27
  100. package/tests/e2e/helpers/base.js +0 -263
  101. package/tests/e2e/helpers/debug.js +0 -13
  102. package/tests/e2e/helpers/mockSearch.js +0 -90
  103. package/tests/e2e/helpers/params.js +0 -17
  104. package/tests/e2e/helpers/rightToLeft.js +0 -23
  105. package/tests/e2e/helpers/search.js +0 -73
  106. package/tests/e2e/models/BookReader.js +0 -11
  107. package/tests/e2e/models/Navigation.js +0 -39
  108. package/tests/e2e/rightToLeft.test.js +0 -19
  109. package/tests/e2e/viewmode.test.js +0 -44
  110. package/tests/jest/BookNavigator/book-navigator.test.js +0 -653
  111. package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +0 -43
  112. package/tests/jest/BookNavigator/bookmarks/bookmark-edit.test.js +0 -132
  113. package/tests/jest/BookNavigator/bookmarks/bookmarks-list.test.js +0 -221
  114. package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +0 -45
  115. package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +0 -67
  116. package/tests/jest/BookNavigator/downloads/downloads.test.js +0 -53
  117. package/tests/jest/BookNavigator/search/search-provider.test.js +0 -179
  118. package/tests/jest/BookNavigator/search/search-results.test.js +0 -289
  119. package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +0 -49
  120. package/tests/jest/BookNavigator/viewable-files/viewable-files-provider.test.js +0 -80
  121. package/tests/jest/BookNavigator/visual-adjustments.test.js +0 -200
  122. package/tests/jest/BookReader/BookModel.test.js +0 -372
  123. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +0 -263
  124. package/tests/jest/BookReader/ImageCache.test.js +0 -150
  125. package/tests/jest/BookReader/Mode1UpLit.test.js +0 -73
  126. package/tests/jest/BookReader/Mode2Up.test.js +0 -98
  127. package/tests/jest/BookReader/Mode2UpLit.test.js +0 -190
  128. package/tests/jest/BookReader/ModeCoordinateSpace.test.js +0 -16
  129. package/tests/jest/BookReader/ModeSmoothZoom.test.js +0 -218
  130. package/tests/jest/BookReader/ModeThumb.test.js +0 -71
  131. package/tests/jest/BookReader/Navbar/Navbar.test.js +0 -182
  132. package/tests/jest/BookReader/PageContainer.test.js +0 -249
  133. package/tests/jest/BookReader/ReduceSet.test.js +0 -38
  134. package/tests/jest/BookReader/Toolbar/Toolbar.test.js +0 -26
  135. package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +0 -59
  136. package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +0 -49
  137. package/tests/jest/BookReader/utils/SelectionObserver.test.js +0 -57
  138. package/tests/jest/BookReader/utils/classes.test.js +0 -88
  139. package/tests/jest/BookReader/utils.test.js +0 -250
  140. package/tests/jest/BookReader.keyboard.test.js +0 -190
  141. package/tests/jest/BookReader.options.test.js +0 -47
  142. package/tests/jest/BookReader.test.js +0 -316
  143. package/tests/jest/plugins/plugin.archive_analytics.test.js +0 -20
  144. package/tests/jest/plugins/plugin.autoplay.test.js +0 -35
  145. package/tests/jest/plugins/plugin.chapters.test.js +0 -193
  146. package/tests/jest/plugins/plugin.iframe.test.js +0 -42
  147. package/tests/jest/plugins/plugin.resume.test.js +0 -85
  148. package/tests/jest/plugins/plugin.text_selection.test.js +0 -447
  149. package/tests/jest/plugins/plugin.vendor-fullscreen.test.js +0 -65
  150. package/tests/jest/plugins/search/plugin.search.test.js +0 -120
  151. package/tests/jest/plugins/search/plugin.search.view.test.js +0 -131
  152. package/tests/jest/plugins/search/utils.js +0 -25
  153. package/tests/jest/plugins/search/utils.test.js +0 -29
  154. package/tests/jest/plugins/tts/AbstractTTSEngine.test.js +0 -173
  155. package/tests/jest/plugins/tts/FestivalTTSEngine.test.js +0 -59
  156. package/tests/jest/plugins/tts/PageChunk.test.js +0 -57
  157. package/tests/jest/plugins/tts/PageChunkIterator.test.js +0 -179
  158. package/tests/jest/plugins/tts/WebTTSEngine.test.js +0 -178
  159. package/tests/jest/plugins/tts/utils.test.js +0 -74
  160. package/tests/jest/plugins/url/UrlPlugin.test.js +0 -198
  161. package/tests/jest/plugins/url/plugin.url.test.js +0 -168
  162. package/tests/jest/setup.js +0 -3
  163. package/tests/jest/util/browserSniffing.test.js +0 -62
  164. package/tests/jest/util/docCookies.test.js +0 -24
  165. package/tests/jest/util/strings.test.js +0 -63
  166. package/tests/jest/utils.js +0 -83
  167. 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
- });