@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,250 +0,0 @@
1
- import sinon from 'sinon';
2
- import { afterEventLoop, eventTargetMixin } from '../utils.js';
3
- import {
4
- clamp,
5
- cssPercentage,
6
- debounce,
7
- decodeURIComponentPlus,
8
- encodeURIComponentPlus,
9
- escapeHTML,
10
- escapeRegExp,
11
- getActiveElement,
12
- isInputActive,
13
- parseAnimationSpeed,
14
- poll,
15
- polyfillCustomEvent,
16
- PolyfilledCustomEvent,
17
- promisifyEvent,
18
- sleep,
19
- } from '@/src/BookReader/utils.js';
20
-
21
- test('clamp function returns Math.min(Math.max(value, min), max)', () => {
22
- expect(clamp(2,1,3)).toEqual(2);
23
- });
24
-
25
- test('calculate a percentage suitable for CSS', () => {
26
- expect(cssPercentage(2,1)).toEqual('200%');
27
- });
28
-
29
- test('escapeHTML function which replaces the string', () => {
30
- expect(escapeHTML('Me & You')).toEqual('Me & You');
31
- expect(escapeHTML('Me > You')).toEqual('Me > You');
32
- expect(escapeHTML('Me < You')).toEqual('Me &lt; You');
33
- expect(escapeHTML('Me " You')).toEqual('Me &quot; You');
34
- });
35
-
36
- test('Decodes a URI component and converts + to emptyStr', () => {
37
- expect(decodeURIComponentPlus("https%3A%2F%2Farchive.org%2Fskr+")).toEqual("https://archive.org/skr ");
38
- expect(decodeURIComponentPlus("%3Fx%3D+test")).toEqual("?x= test");
39
- });
40
-
41
- test('Encodes a URI component and converts emptyStr to +', () => {
42
- expect(encodeURIComponentPlus("?x=test ")).toEqual("%3Fx%3Dtest+");
43
- expect(encodeURIComponentPlus("ABC abc 123")).toEqual("ABC+abc+123");
44
- });
45
-
46
- describe('getActiveElement', () => {
47
- test('Can ignore shadow DOM', () => {
48
- const doc = {activeElement: { shadowRoot: {activeElement: {}}}};
49
- expect(getActiveElement(doc, false)).toBe(doc.activeElement);
50
- });
51
-
52
- test('Can traverse shadow DOM', () => {
53
- const doc = {activeElement: { shadowRoot: {activeElement: {}}}};
54
- expect(getActiveElement(doc, true)).toBe(doc.activeElement.shadowRoot.activeElement);
55
- });
56
-
57
- test('Handles non-shadow elements', () => {
58
- const doc = {activeElement: {}};
59
- expect(getActiveElement(doc, true)).toBe(doc.activeElement);
60
- });
61
-
62
- test('Handles no active element', () => {
63
- const doc = {activeElement: null};
64
- expect(getActiveElement(doc, true)).toBe(null);
65
- });
66
- });
67
-
68
- describe('isInputActive', () => {
69
- test('Handles no activeElement', () => {
70
- expect(isInputActive({activeElement: null})).toBe(false);
71
- });
72
-
73
- test('Handles deep input activeElement', () => {
74
- const doc = {activeElement: { shadowRoot: {activeElement: { tagName: 'INPUT' }}}};
75
- expect(isInputActive(doc)).toBe(true);
76
- });
77
-
78
- test('Handles deep non-input activeElement', () => {
79
- const doc = {activeElement: { shadowRoot: {activeElement: { tagName: 'A' }}}};
80
- expect(isInputActive(doc)).toBe(false);
81
- });
82
-
83
- test('Handles textarea activeElement', () => {
84
- const doc = {activeElement: { tagName: 'TEXTAREA' }};
85
- expect(isInputActive(doc)).toBe(true);
86
- });
87
- });
88
-
89
- describe('debounce', () => {
90
- /** @type {sinon.SinonFakeTimers} */
91
- let clock;
92
- beforeEach(() => clock = sinon.useFakeTimers());
93
- afterEach(() => clock.restore());
94
-
95
- test('testing debounce', () => {
96
- const func = jest.fn();
97
- const debouncedFunc = debounce(func, 1000);
98
- // Call it immediately
99
- debouncedFunc();
100
- expect(func).toHaveBeenCalledTimes(0); // func not called
101
-
102
- // Call it several times with 500ms between each call
103
- for (let i = 0; i < 10; i++) {
104
- clock.tick(500);
105
- debouncedFunc();
106
- }
107
- expect(func).toHaveBeenCalledTimes(0); // func not called
108
-
109
- // wait 1000ms
110
- clock.tick(1000);
111
- expect(func).toHaveBeenCalledTimes(1); // func called
112
- });
113
- });
114
-
115
-
116
- describe('polyfillCustomEvent', () => {
117
- test('Overrides when missing', () => {
118
- const win = {};
119
- polyfillCustomEvent(win);
120
- expect(win).toHaveProperty('CustomEvent');
121
- });
122
-
123
- test('Overrides when not a function', () => {
124
- const win = { CustomEvent: {} };
125
- polyfillCustomEvent(win);
126
- expect(typeof win.CustomEvent).toBe('function');
127
- });
128
- });
129
-
130
- describe('PolyfilledCustomEvent', () => {
131
- test('Can be called as a constructor', () => {
132
- new PolyfilledCustomEvent('foo');
133
- });
134
-
135
- test('Calls deprecated browser methods', () => {
136
- const createEventSpy = sinon.spy(document, 'createEvent');
137
- const initCustomEventSpy = sinon.spy(CustomEvent.prototype, 'initCustomEvent');
138
- new PolyfilledCustomEvent('foo');
139
- expect(createEventSpy.callCount).toBe(1);
140
- expect(initCustomEventSpy.callCount).toBe(1);
141
- });
142
- });
143
-
144
- describe('poll', () => {
145
- beforeEach(() => jest.useFakeTimers());
146
- afterEach(() => jest.useRealTimers());
147
- test('polls until condition is true', async () => {
148
- const fakeSleep = sinon.spy((ms) => jest.advanceTimersByTime(ms));
149
-
150
- const returns = [null, null, 'foo'];
151
- const check = sinon.spy(() => returns.shift());
152
- const result = await poll(check, {_sleep: fakeSleep});
153
- expect(fakeSleep.callCount).toBe(2);
154
- expect(result).toBe('foo');
155
- expect(check.callCount).toBe(3);
156
- });
157
-
158
- test('times out eventually', async () => {
159
- const fakeSleep = sinon.spy((ms) => jest.advanceTimersByTime(ms));
160
-
161
- const check = sinon.stub().returns(null);
162
- const result = await poll(check, {_sleep: fakeSleep});
163
- expect(result).toBeUndefined();
164
- expect(check.callCount).toBe(10);
165
- });
166
- });
167
-
168
- describe('sleep', () => {
169
- test('Sleep 0 doest not called immediately', async () => {
170
- const spy = sinon.spy();
171
- sleep(0).then(spy);
172
- expect(spy.callCount).toBe(0);
173
- await afterEventLoop();
174
- expect(spy.callCount).toBe(1);
175
- });
176
-
177
- test('Waits the appropriate ms', async () => {
178
- const clock = sinon.useFakeTimers();
179
- const spy = sinon.spy();
180
- sleep(10).then(spy);
181
- expect(spy.callCount).toBe(0);
182
- clock.tick(10);
183
- expect(spy.callCount).toBe(0);
184
- clock.restore();
185
-
186
- await afterEventLoop();
187
- expect(spy.callCount).toBe(1);
188
- });
189
- });
190
-
191
- describe('promisifyEvent', () => {
192
- test('Resolves once event fires', async () => {
193
- const fakeTarget = eventTargetMixin();
194
- const resolveSpy = sinon.spy();
195
- promisifyEvent(fakeTarget, 'pause').then(resolveSpy);
196
-
197
- await afterEventLoop();
198
- expect(resolveSpy.callCount).toBe(0);
199
- fakeTarget.dispatchEvent('pause', {});
200
- await afterEventLoop();
201
- expect(resolveSpy.callCount).toBe(1);
202
- });
203
-
204
- test('Only resolves once', async () => {
205
- const fakeTarget = eventTargetMixin();
206
- const resolveSpy = sinon.spy();
207
- promisifyEvent(fakeTarget, 'pause').then(resolveSpy);
208
-
209
- await afterEventLoop();
210
- expect(resolveSpy.callCount).toBe(0);
211
- fakeTarget.dispatchEvent('pause', {});
212
- fakeTarget.dispatchEvent('pause', {});
213
- fakeTarget.dispatchEvent('pause', {});
214
- fakeTarget.dispatchEvent('pause', {});
215
-
216
- await afterEventLoop();
217
- expect(resolveSpy.callCount).toBe(1);
218
- });
219
- });
220
-
221
- describe('escapeRegex', () => {
222
- test('Escapes regex', () => {
223
- expect(escapeRegExp('.*')).toBe('\\.\\*');
224
- expect(escapeRegExp('foo')).toBe('foo');
225
- expect(escapeRegExp('foo.bar')).toBe('foo\\.bar');
226
- expect(escapeRegExp('{{{')).toBe('\\{\\{\\{');
227
- expect(escapeRegExp('')).toBe('');
228
- expect(escapeRegExp('https://example.com')).toBe('https://example\\.com');
229
- });
230
- });
231
-
232
- describe('parseAnimationSpeed', () => {
233
- test('Parses numbers', () => {
234
- expect(parseAnimationSpeed(100)).toBe(100);
235
- expect(parseAnimationSpeed(0)).toBe(0);
236
- expect(parseAnimationSpeed(1000)).toBe(1000);
237
- });
238
-
239
- test('Parses strings', () => {
240
- expect(parseAnimationSpeed('slow')).toBe(600);
241
- expect(parseAnimationSpeed('fast')).toBe(200);
242
- expect(parseAnimationSpeed('100')).toBe(100);
243
- });
244
-
245
- test('Handles invalid input', () => {
246
- expect(parseAnimationSpeed('foo')).toBeFalsy();
247
- expect(parseAnimationSpeed('')).toBeFalsy();
248
- expect(parseAnimationSpeed(null)).toBeFalsy();
249
- });
250
- });
@@ -1,190 +0,0 @@
1
- import BookReader from '@/src/BookReader.js';
2
- import * as utils from '@/src/BookReader/utils.js';
3
-
4
- let br;
5
- beforeAll(() => {
6
- document.body.innerHTML = '<div id="BookReader">';
7
- br = new BookReader();
8
- });
9
-
10
- afterEach(() => {
11
- jest.clearAllMocks();
12
- });
13
-
14
- /**
15
- * Only run init() once. Otherwise multiple EventListeners will be added.
16
- */
17
- test('Initialzation enables IntersectionObserver and defaults', () => {
18
- const observe = jest.fn();
19
- window.IntersectionObserver = jest.fn(() => ({
20
- observe,
21
- }));
22
- br.init();
23
- expect(br.hasKeyFocus).toBe(true);
24
- expect(observe).toHaveBeenCalledTimes(1);
25
- });
26
-
27
- describe('Keyboard shortcuts turned off', () => {
28
-
29
- test('Focus flag disables', () => {
30
- br.next = jest.fn();
31
- br.hasKeyFocus = false;
32
- const keyEvent = new KeyboardEvent('keydown', {'key': 'ArrowDown'});
33
- keyEvent.preventDefault = jest.fn();
34
- document.dispatchEvent(keyEvent);
35
- expect(br.next).toHaveBeenCalledTimes(0);
36
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(0);
37
- // Must reset for following tests
38
- br.hasKeyFocus = true;
39
- });
40
-
41
- test('Input active disables', () => {
42
- // eslint-disable-next-line no-import-assign
43
- utils.isInputActive = jest.fn(() => true);
44
- br.next = jest.fn();
45
- const keyEvent = new KeyboardEvent('keydown', {'key': 'ArrowDown'});
46
- keyEvent.preventDefault = jest.fn();
47
- document.dispatchEvent(keyEvent);
48
- expect(br.next).toHaveBeenCalledTimes(0);
49
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(0);
50
- // Must reset for following tests
51
- utils.isInputActive.mockReset();
52
- });
53
-
54
- });
55
-
56
- describe('Keyboard shortcuts', () => {
57
-
58
- test('Home key', () => {
59
- br.first = jest.fn();
60
- const keyEvent = new KeyboardEvent('keydown', {'key': 'Home'});
61
- keyEvent.preventDefault = jest.fn();
62
- document.dispatchEvent(keyEvent);
63
- expect(br.first).toHaveBeenCalledTimes(1);
64
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
65
- });
66
-
67
- test('End key', () => {
68
- br.last = jest.fn();
69
- const keyEvent = new KeyboardEvent('keydown', {'key': 'End'});
70
- keyEvent.preventDefault = jest.fn();
71
- document.dispatchEvent(keyEvent);
72
- expect(br.last).toHaveBeenCalledTimes(1);
73
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
74
- });
75
-
76
- test('ArrowDown key', () => {
77
- br.mode = br.constMode2up;
78
- br.next = jest.fn();
79
- const keyEvent = new KeyboardEvent('keydown', {'key': 'ArrowDown'});
80
- keyEvent.preventDefault = jest.fn();
81
- document.dispatchEvent(keyEvent);
82
- expect(br.next).toHaveBeenCalledTimes(1);
83
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
84
- });
85
-
86
- test('PageDown key', () => {
87
- br.mode = br.constMode2up;
88
- br.next = jest.fn();
89
- const keyEvent = new KeyboardEvent('keydown', {'key': 'PageDown'});
90
- keyEvent.preventDefault = jest.fn();
91
- document.dispatchEvent(keyEvent);
92
- expect(br.next).toHaveBeenCalledTimes(1);
93
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
94
- });
95
-
96
- test('ArrowUp key', () => {
97
- br.mode = br.constMode2up;
98
- br.prev = jest.fn();
99
- const keyEvent = new KeyboardEvent('keydown', {'key': 'ArrowUp'});
100
- keyEvent.preventDefault = jest.fn();
101
- document.dispatchEvent(keyEvent);
102
- expect(br.prev).toHaveBeenCalledTimes(1);
103
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
104
- });
105
-
106
- test('PageUp key', () => {
107
- br.mode = br.constMode2up;
108
- br.prev = jest.fn();
109
- const keyEvent = new KeyboardEvent('keydown', {'key': 'PageUp'});
110
- keyEvent.preventDefault = jest.fn();
111
- document.dispatchEvent(keyEvent);
112
- expect(br.prev).toHaveBeenCalledTimes(1);
113
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
114
- });
115
-
116
- test('ArrowLeft key', () => {
117
- br.mode = br.constMode2up;
118
- br.left = jest.fn();
119
- const keyEvent = new KeyboardEvent('keydown', {'key': 'ArrowLeft'});
120
- keyEvent.preventDefault = jest.fn();
121
- document.dispatchEvent(keyEvent);
122
- expect(br.left).toHaveBeenCalledTimes(1);
123
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
124
- });
125
-
126
- test('ArrowRight key', () => {
127
- br.mode = br.constMode2up;
128
- br.right = jest.fn();
129
- const keyEvent = new KeyboardEvent('keydown', {'key': 'ArrowRight'});
130
- keyEvent.preventDefault = jest.fn();
131
- document.dispatchEvent(keyEvent);
132
- expect(br.right).toHaveBeenCalledTimes(1);
133
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
134
- });
135
-
136
- test('Subtract key', () => {
137
- br.zoom = jest.fn();
138
- const keyEvent = new KeyboardEvent('keydown', {'key': 'Subtract'});
139
- keyEvent.preventDefault = jest.fn();
140
- document.dispatchEvent(keyEvent);
141
- expect(br.zoom).toHaveBeenCalledTimes(1);
142
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
143
- });
144
-
145
- test('- key', () => {
146
- br.zoom = jest.fn();
147
- const keyEvent = new KeyboardEvent('keydown', {'key': '-'});
148
- keyEvent.preventDefault = jest.fn();
149
- document.dispatchEvent(keyEvent);
150
- expect(br.zoom).toHaveBeenCalledTimes(1);
151
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
152
- });
153
-
154
- test('Add key', () => {
155
- br.zoom = jest.fn();
156
- const keyEvent = new KeyboardEvent('keydown', {'key': 'Add'});
157
- keyEvent.preventDefault = jest.fn();
158
- document.dispatchEvent(keyEvent);
159
- expect(br.zoom).toHaveBeenCalledTimes(1);
160
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
161
- });
162
-
163
- test('+ key', () => {
164
- br.zoom = jest.fn();
165
- const keyEvent = new KeyboardEvent('keydown', {'key': '+'});
166
- keyEvent.preventDefault = jest.fn();
167
- document.dispatchEvent(keyEvent);
168
- expect(br.zoom).toHaveBeenCalledTimes(1);
169
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
170
- });
171
-
172
- test('= key', () => {
173
- br.zoom = jest.fn();
174
- const keyEvent = new KeyboardEvent('keydown', {'key': '='});
175
- keyEvent.preventDefault = jest.fn();
176
- document.dispatchEvent(keyEvent);
177
- expect(br.zoom).toHaveBeenCalledTimes(1);
178
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
179
- });
180
-
181
- test('F key', () => {
182
- br.toggleFullscreen = jest.fn();
183
- const keyEvent = new KeyboardEvent('keydown', {'key': 'F'});
184
- keyEvent.preventDefault = jest.fn();
185
- document.dispatchEvent(keyEvent);
186
- expect(br.toggleFullscreen).toHaveBeenCalledTimes(1);
187
- expect(keyEvent.preventDefault).toHaveBeenCalledTimes(1);
188
- });
189
-
190
- });
@@ -1,47 +0,0 @@
1
-
2
- import BookReader from '@/src/BookReader.js';
3
-
4
- beforeAll(() => {
5
- document.body.innerHTML = '<div id="BookReader">';
6
- });
7
-
8
- afterEach(() => {
9
- jest.clearAllMocks();
10
- });
11
-
12
- describe('BookReader options', () => {
13
- describe('`autoResize`', () => {
14
- it('is on by default', () => {
15
- const br = new BookReader();
16
- br.init();
17
- expect(br.options.autoResize).toBe(true);
18
- });
19
- });
20
-
21
- describe('`startFullscreen`', () => {
22
- it('initializes BookReader to fullscreen', () => {
23
- const br = new BookReader({
24
- startFullscreen: true,
25
- });
26
- br.init();
27
-
28
- expect(document.getElementById('BookReader').classList.contains('br-ui-full')).toBe(true);
29
- });
30
- });
31
-
32
- describe('`useSrcSet`', () => {
33
- it('is on by default', () => {
34
- const br = new BookReader();
35
- br.init();
36
- expect(br.options.autoResize).toBe(true);
37
- });
38
- });
39
-
40
- describe('`showNavbar`', () => {
41
- it('is on by default', () => {
42
- const br = new BookReader();
43
- br.init();
44
- expect(br.options.showNavbar).toBe(true);
45
- });
46
- });
47
- });