@internetarchive/bookreader 5.0.0-7-multiple-files → 5.0.0-70

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 (319) hide show
  1. package/.eslintrc.js +17 -15
  2. package/.github/workflows/node.js.yml +78 -6
  3. package/.github/workflows/npm-publish.yml +6 -20
  4. package/.testcaferc.js +10 -0
  5. package/BookReader/BookReader.css +416 -1365
  6. package/BookReader/BookReader.js +2 -21564
  7. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  8. package/BookReader/BookReader.js.map +1 -1
  9. package/BookReader/ia-bookreader-bundle.js +1509 -0
  10. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
  11. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  12. package/BookReader/icons/1up.svg +1 -12
  13. package/BookReader/icons/2up.svg +1 -15
  14. package/BookReader/icons/advance.svg +3 -26
  15. package/BookReader/icons/chevron-right.svg +1 -1
  16. package/BookReader/icons/close-circle-dark.svg +1 -0
  17. package/BookReader/icons/close-circle.svg +1 -1
  18. package/BookReader/icons/fullscreen.svg +1 -17
  19. package/BookReader/icons/fullscreen_exit.svg +1 -17
  20. package/BookReader/icons/hamburger.svg +1 -15
  21. package/BookReader/icons/left-arrow.svg +1 -12
  22. package/BookReader/icons/magnify-minus.svg +1 -16
  23. package/BookReader/icons/magnify-plus.svg +1 -17
  24. package/BookReader/icons/magnify.svg +1 -15
  25. package/BookReader/icons/pause.svg +1 -23
  26. package/BookReader/icons/play.svg +1 -22
  27. package/BookReader/icons/playback-speed.svg +1 -34
  28. package/BookReader/icons/read-aloud.svg +1 -22
  29. package/BookReader/icons/review.svg +3 -22
  30. package/BookReader/icons/thumbnails.svg +1 -17
  31. package/BookReader/icons/voice.svg +1 -0
  32. package/BookReader/icons/volume-full.svg +1 -22
  33. package/BookReader/images/BRicons.svg +5 -94
  34. package/BookReader/images/books_graphic.svg +1 -177
  35. package/BookReader/images/icon_book.svg +1 -12
  36. package/BookReader/images/icon_bookmark.svg +1 -12
  37. package/BookReader/images/icon_gear.svg +1 -14
  38. package/BookReader/images/icon_hamburger.svg +1 -20
  39. package/BookReader/images/icon_home.svg +1 -21
  40. package/BookReader/images/icon_info.svg +1 -11
  41. package/BookReader/images/icon_one_page.svg +1 -8
  42. package/BookReader/images/icon_pause.svg +1 -1
  43. package/BookReader/images/icon_play.svg +1 -1
  44. package/BookReader/images/icon_playback-rate.svg +1 -15
  45. package/BookReader/images/icon_search_button.svg +1 -8
  46. package/BookReader/images/icon_share.svg +1 -9
  47. package/BookReader/images/icon_skip-ahead.svg +1 -6
  48. package/BookReader/images/icon_skip-back.svg +2 -13
  49. package/BookReader/images/icon_speaker.svg +1 -18
  50. package/BookReader/images/icon_speaker_open.svg +1 -10
  51. package/BookReader/images/icon_thumbnails.svg +1 -12
  52. package/BookReader/images/icon_toc.svg +1 -5
  53. package/BookReader/images/icon_two_pages.svg +1 -9
  54. package/BookReader/images/marker_chap-off.svg +1 -11
  55. package/BookReader/images/marker_chap-on.svg +1 -11
  56. package/BookReader/images/marker_srch-on.svg +1 -11
  57. package/BookReader/jquery-3.js +2 -0
  58. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  59. package/BookReader/plugins/plugin.archive_analytics.js +1 -172
  60. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  61. package/BookReader/plugins/plugin.autoplay.js +1 -165
  62. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  63. package/BookReader/plugins/plugin.chapters.js +22 -301
  64. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  65. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  66. package/BookReader/plugins/plugin.iframe.js +1 -74
  67. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  68. package/BookReader/plugins/plugin.resume.js +1 -368
  69. package/BookReader/plugins/plugin.resume.js.map +1 -1
  70. package/BookReader/plugins/plugin.search.js +2 -1420
  71. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  72. package/BookReader/plugins/plugin.search.js.map +1 -1
  73. package/BookReader/plugins/plugin.text_selection.js +2 -1080
  74. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  75. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  76. package/BookReader/plugins/plugin.tts.js +2 -9193
  77. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  78. package/BookReader/plugins/plugin.tts.js.map +1 -1
  79. package/BookReader/plugins/plugin.url.js +1 -269
  80. package/BookReader/plugins/plugin.url.js.map +1 -1
  81. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  82. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  83. package/BookReader/webcomponents-bundle.js +3 -0
  84. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  85. package/BookReader/webcomponents-bundle.js.map +1 -0
  86. package/BookReaderDemo/BookReaderDemo.css +16 -19
  87. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -3
  88. package/BookReaderDemo/BookReaderJSAutoplay.js +4 -1
  89. package/BookReaderDemo/BookReaderJSSimple.js +1 -0
  90. package/BookReaderDemo/IADemoBr.js +147 -0
  91. package/BookReaderDemo/demo-advanced.html +2 -2
  92. package/BookReaderDemo/demo-autoplay.html +2 -3
  93. package/BookReaderDemo/demo-embed-iframe-src.html +2 -1
  94. package/BookReaderDemo/demo-fullscreen-mobile.html +3 -5
  95. package/BookReaderDemo/demo-fullscreen.html +2 -4
  96. package/BookReaderDemo/demo-iiif.html +2 -1
  97. package/BookReaderDemo/demo-iiif.js +0 -1
  98. package/BookReaderDemo/demo-internetarchive.html +213 -17
  99. package/BookReaderDemo/demo-multiple.html +2 -1
  100. package/BookReaderDemo/demo-preview-pages.html +2 -1
  101. package/BookReaderDemo/demo-simple.html +2 -1
  102. package/BookReaderDemo/demo-vendor-fullscreen.html +2 -4
  103. package/BookReaderDemo/ia-multiple-volumes-manifest.js +170 -0
  104. package/BookReaderDemo/immersion-1up.html +2 -2
  105. package/BookReaderDemo/immersion-mode.html +2 -4
  106. package/BookReaderDemo/toggle_controls.html +3 -2
  107. package/BookReaderDemo/view_mode.html +2 -1
  108. package/BookReaderDemo/viewmode-cycle.html +2 -3
  109. package/CHANGELOG.md +289 -0
  110. package/README.md +14 -1
  111. package/babel.config.js +20 -0
  112. package/codecov.yml +6 -0
  113. package/index.html +4 -1
  114. package/jsconfig.json +19 -0
  115. package/netlify.toml +9 -0
  116. package/package.json +71 -60
  117. package/renovate.json +52 -0
  118. package/scripts/preversion.js +4 -1
  119. package/src/BookNavigator/assets/bookmark-colors.js +1 -1
  120. package/src/BookNavigator/assets/button-base.js +9 -2
  121. package/src/BookNavigator/assets/ia-logo.js +17 -0
  122. package/src/BookNavigator/assets/icon_checkmark.js +1 -1
  123. package/src/BookNavigator/assets/icon_close.js +1 -1
  124. package/src/BookNavigator/assets/icon_sort_asc.js +5 -0
  125. package/src/BookNavigator/assets/{icon_sort_ascending.js → icon_sort_desc.js} +2 -2
  126. package/src/BookNavigator/assets/icon_sort_neutral.js +5 -0
  127. package/src/BookNavigator/assets/icon_volumes.js +11 -0
  128. package/src/BookNavigator/book-navigator.js +586 -0
  129. package/src/BookNavigator/bookmarks/bookmark-button.js +3 -2
  130. package/src/BookNavigator/bookmarks/bookmark-edit.js +3 -4
  131. package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
  132. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +3 -8
  133. package/src/BookNavigator/bookmarks/bookmarks-provider.js +27 -17
  134. package/src/BookNavigator/bookmarks/ia-bookmarks.js +116 -67
  135. package/src/BookNavigator/delete-modal-actions.js +1 -1
  136. package/src/BookNavigator/downloads/downloads-provider.js +36 -21
  137. package/src/BookNavigator/downloads/downloads.js +41 -25
  138. package/src/BookNavigator/search/search-provider.js +80 -28
  139. package/src/BookNavigator/search/search-results.js +28 -25
  140. package/src/BookNavigator/sharing.js +27 -0
  141. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +11 -10
  142. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +3 -3
  143. package/src/BookNavigator/volumes/volumes-provider.js +88 -53
  144. package/src/BookNavigator/volumes/volumes.js +41 -14
  145. package/src/BookReader/BookModel.js +64 -34
  146. package/src/BookReader/DragScrollable.js +233 -0
  147. package/src/BookReader/Mode1Up.js +56 -351
  148. package/src/BookReader/Mode1UpLit.js +388 -0
  149. package/src/BookReader/Mode2Up.js +73 -1318
  150. package/src/BookReader/Mode2UpLit.js +776 -0
  151. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  152. package/src/BookReader/ModeSmoothZoom.js +312 -0
  153. package/src/BookReader/ModeThumb.js +18 -12
  154. package/src/BookReader/Navbar/Navbar.js +12 -38
  155. package/src/BookReader/PageContainer.js +81 -6
  156. package/src/BookReader/ReduceSet.js +1 -1
  157. package/src/BookReader/Toolbar/Toolbar.js +10 -37
  158. package/src/BookReader/events.js +2 -3
  159. package/src/BookReader/options.js +24 -2
  160. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  161. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  162. package/src/BookReader/utils/SelectionObserver.js +43 -0
  163. package/src/BookReader/utils.js +118 -13
  164. package/src/BookReader.js +446 -1062
  165. package/src/assets/icons/close-circle-dark.svg +1 -0
  166. package/src/assets/icons/magnify-minus.svg +3 -7
  167. package/src/assets/icons/magnify-plus.svg +3 -7
  168. package/src/assets/icons/voice.svg +1 -0
  169. package/src/css/BookReader.scss +1 -17
  170. package/src/css/_BRBookmarks.scss +1 -1
  171. package/src/css/_BRComponent.scss +1 -1
  172. package/src/css/_BRmain.scss +33 -24
  173. package/src/css/_BRnav.scss +11 -38
  174. package/src/css/_BRpages.scss +149 -40
  175. package/src/css/_BRsearch.scss +67 -226
  176. package/src/css/_TextSelection.scss +87 -27
  177. package/src/css/_colorbox.scss +2 -2
  178. package/src/css/_controls.scss +20 -7
  179. package/src/css/_icons.scss +7 -1
  180. package/src/ia-bookreader/ia-bookreader.js +224 -0
  181. package/src/plugins/plugin.archive_analytics.js +3 -3
  182. package/src/plugins/plugin.autoplay.js +5 -11
  183. package/src/plugins/plugin.chapters.js +211 -186
  184. package/src/plugins/plugin.resume.js +3 -3
  185. package/src/plugins/plugin.text_selection.js +464 -134
  186. package/src/plugins/plugin.vendor-fullscreen.js +4 -4
  187. package/src/plugins/search/plugin.search.js +175 -120
  188. package/src/plugins/search/utils.js +43 -0
  189. package/src/plugins/search/view.js +64 -202
  190. package/src/plugins/tts/AbstractTTSEngine.js +68 -40
  191. package/src/plugins/tts/FestivalTTSEngine.js +13 -14
  192. package/src/plugins/tts/PageChunk.js +15 -21
  193. package/src/plugins/tts/PageChunkIterator.js +8 -12
  194. package/src/plugins/tts/WebTTSEngine.js +87 -71
  195. package/src/plugins/tts/plugin.tts.js +95 -126
  196. package/src/plugins/tts/utils.js +0 -25
  197. package/src/plugins/url/UrlPlugin.js +191 -0
  198. package/src/plugins/{plugin.url.js → url/plugin.url.js} +45 -16
  199. package/src/util/browserSniffing.js +22 -0
  200. package/src/util/docCookies.js +21 -2
  201. package/tests/e2e/README.md +37 -0
  202. package/tests/e2e/autoplay.test.js +2 -2
  203. package/tests/e2e/base.test.js +8 -16
  204. package/tests/e2e/helpers/base.js +53 -48
  205. package/tests/e2e/helpers/debug.js +1 -1
  206. package/tests/e2e/helpers/params.js +17 -0
  207. package/tests/e2e/helpers/rightToLeft.js +8 -14
  208. package/tests/e2e/helpers/search.js +73 -0
  209. package/tests/e2e/models/Navigation.js +20 -37
  210. package/tests/e2e/rightToLeft.test.js +4 -5
  211. package/tests/e2e/viewmode.test.js +40 -33
  212. package/tests/jest/BookNavigator/book-navigator.test.js +658 -0
  213. package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +43 -0
  214. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmark-edit.test.js +25 -26
  215. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmarks-list.test.js +41 -42
  216. package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +45 -0
  217. package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +67 -0
  218. package/tests/jest/BookNavigator/downloads/downloads.test.js +53 -0
  219. package/tests/jest/BookNavigator/search/search-provider.test.js +167 -0
  220. package/tests/{karma/BookNavigator → jest/BookNavigator/search}/search-results.test.js +109 -60
  221. package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +49 -0
  222. package/tests/jest/BookNavigator/visual-adjustments.test.js +200 -0
  223. package/tests/jest/BookNavigator/volumes/volumes-provider.test.js +184 -0
  224. package/tests/jest/BookNavigator/volumes/volumes.test.js +97 -0
  225. package/tests/{BookReader → jest/BookReader}/BookModel.test.js +74 -14
  226. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +193 -0
  227. package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +4 -4
  228. package/tests/jest/BookReader/Mode1UpLit.test.js +73 -0
  229. package/tests/jest/BookReader/Mode2Up.test.js +98 -0
  230. package/tests/jest/BookReader/Mode2UpLit.test.js +190 -0
  231. package/tests/jest/BookReader/ModeCoordinateSpace.test.js +16 -0
  232. package/tests/jest/BookReader/ModeSmoothZoom.test.js +218 -0
  233. package/tests/jest/BookReader/ModeThumb.test.js +71 -0
  234. package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +10 -10
  235. package/tests/{BookReader → jest/BookReader}/PageContainer.test.js +88 -6
  236. package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +1 -1
  237. package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +2 -2
  238. package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
  239. package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +49 -0
  240. package/tests/jest/BookReader/utils/SelectionObserver.test.js +43 -0
  241. package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +1 -1
  242. package/tests/jest/BookReader/utils.test.js +229 -0
  243. package/tests/jest/BookReader.keyboard.test.js +190 -0
  244. package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +9 -1
  245. package/tests/{BookReader.test.js → jest/BookReader.test.js} +26 -37
  246. package/tests/{plugins → jest/plugins}/plugin.archive_analytics.test.js +2 -2
  247. package/tests/{plugins → jest/plugins}/plugin.autoplay.test.js +4 -4
  248. package/tests/jest/plugins/plugin.chapters.test.js +145 -0
  249. package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +2 -2
  250. package/tests/{plugins → jest/plugins}/plugin.resume.test.js +3 -3
  251. package/tests/jest/plugins/plugin.text_selection.test.js +317 -0
  252. package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +2 -2
  253. package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +26 -47
  254. package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +39 -6
  255. package/tests/jest/plugins/search/utils.js +25 -0
  256. package/tests/jest/plugins/search/utils.test.js +29 -0
  257. package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +29 -9
  258. package/tests/{plugins → jest/plugins}/tts/FestivalTTSEngine.test.js +4 -4
  259. package/tests/{plugins → jest/plugins}/tts/PageChunk.test.js +1 -1
  260. package/tests/{plugins → jest/plugins}/tts/PageChunkIterator.test.js +3 -3
  261. package/tests/{plugins → jest/plugins}/tts/WebTTSEngine.test.js +47 -1
  262. package/tests/{plugins → jest/plugins}/tts/utils.test.js +1 -60
  263. package/tests/jest/plugins/url/UrlPlugin.test.js +198 -0
  264. package/tests/{plugins → jest/plugins/url}/plugin.url.test.js +53 -14
  265. package/tests/jest/setup.js +3 -0
  266. package/tests/{util → jest/util}/browserSniffing.test.js +1 -1
  267. package/tests/jest/util/docCookies.test.js +24 -0
  268. package/tests/{util → jest/util}/strings.test.js +1 -1
  269. package/tests/{utils.js → jest/utils.js} +38 -0
  270. package/webpack.config.js +11 -6
  271. package/.babelrc +0 -12
  272. package/.dependabot/config.yml +0 -6
  273. package/.testcaferc.json +0 -5
  274. package/BookReader/bookreader-component-bundle.js +0 -14311
  275. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  276. package/BookReader/bookreader-component-bundle.js.map +0 -1
  277. package/BookReader/icons/sort-ascending.svg +0 -1
  278. package/BookReader/icons/sort-descending.svg +0 -1
  279. package/BookReader/jquery-1.10.1.js +0 -108
  280. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  281. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  282. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  283. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  284. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  285. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  286. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  287. package/karma.conf.js +0 -23
  288. package/src/BookNavigator/BookModel.js +0 -14
  289. package/src/BookNavigator/BookNavigator.js +0 -452
  290. package/src/BookNavigator/assets/book-loader.js +0 -27
  291. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  292. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  293. package/src/BookNavigator/search/a-search-result.js +0 -55
  294. package/src/BookReader/DebugConsole.js +0 -54
  295. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  296. package/src/ItemNavigator/ItemNavigator.js +0 -372
  297. package/src/ItemNavigator/providers/sharing.js +0 -29
  298. package/src/assets/icons/sort-ascending.svg +0 -1
  299. package/src/assets/icons/sort-descending.svg +0 -1
  300. package/src/css/_MobileNav.scss +0 -194
  301. package/src/dragscrollable-br.js +0 -261
  302. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  303. package/src/plugins/plugin.mobile_nav.js +0 -287
  304. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  305. package/tests/BookReader/DebugConsole.test.js +0 -25
  306. package/tests/BookReader/Mode1Up.test.js +0 -164
  307. package/tests/BookReader/Mode2Up.test.js +0 -247
  308. package/tests/BookReader/utils.test.js +0 -109
  309. package/tests/e2e/helpers/desktopSearch.js +0 -72
  310. package/tests/e2e/helpers/mobileSearch.js +0 -85
  311. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  312. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  313. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  314. package/tests/karma/BookNavigator/volumes.test.js +0 -101
  315. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  316. package/tests/plugins/plugin.chapters.test.js +0 -130
  317. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  318. package/tests/plugins/plugin.text_selection.test.js +0 -203
  319. package/tests/util/docCookies.test.js +0 -15
@@ -1,101 +0,0 @@
1
- import {
2
- html,
3
- fixture,
4
- expect
5
- } from '@open-wc/testing';
6
- import sinon from 'sinon';
7
- // import { Volumes } from '../../../src/BookNavigator/volumes/volumes.js';
8
-
9
- const options = [{
10
- id: 'contrast',
11
- name: 'Adjust contrast',
12
- active: true,
13
- min: 0,
14
- max: 150,
15
- step: 1,
16
- value: 100,
17
- }, {
18
- id: 'invert',
19
- name: 'Invert colors',
20
- active: false,
21
- }, {
22
- id: 'brightness',
23
- name: 'Adjust brightness',
24
- active: false,
25
- value: 100,
26
- }];
27
-
28
- const container = (hostUrl = false) => (
29
- html`<viewable-files .viewableFiles=${options}} .hostUrl="https://archive.org"></viewable-files>`
30
- );
31
-
32
- describe('<viewable-files>', () => {
33
- afterEach(() => {
34
- sinon.restore();
35
- });
36
-
37
- it('sets default properties', async () => {
38
- const el = await fixture(container());
39
-
40
- expect(el.options).to.exist;
41
- expect(el.options.length).to.equal(options.length);
42
- expect(el.renderHeader).to.exist;
43
- expect(el.renderHeader).to.be.false;
44
- expect(el.activeCount).to.exist;
45
- expect(el.showZoomControls).to.be.true;
46
- });
47
-
48
- // it('renders all properties of a visual adjustment option', async () => {
49
- // const el = await fixture(container());
50
-
51
- // await el.updateComplete;
52
-
53
- // const label = el.shadowRoot.querySelector('label');
54
- // const name = label.querySelector('.name');
55
- // const checkbox = label.querySelector('input');
56
- // expect(name.innerText).to.equal(options[0].name);
57
- // expect(checkbox.checked).to.equal(true);
58
- // });
59
-
60
- // it('can render header with active options count', async () => {
61
- // const renderHeader = true;
62
- // const el = await fixture(container(renderHeader));
63
- // expect(el.shadowRoot.querySelector('header p').innerText).to.include('1');
64
- // });
65
-
66
- // it('does not render active options count element when none are selected', async () => {
67
- // const el = await fixture(container());
68
-
69
- // el.options = [options[1]];
70
- // await el.updateComplete;
71
-
72
- // expect(el.shadowRoot.querySelector('header p')).not.to.exist;
73
- // });
74
-
75
- // it('changes option\'s active state when input changed', async () => {
76
- // const el = await fixture(container());
77
-
78
- // el.shadowRoot.querySelector('li input').dispatchEvent(new Event('change'));
79
- // await el.updateComplete;
80
-
81
- // expect(el.options[0].active).to.equal(false);
82
- // });
83
-
84
- // it('renders zoom in and out controls when enabled', async () => {
85
- // const el = await fixture(container());
86
-
87
- // expect(el.shadowRoot.querySelector('.zoom_out')).to.exist;
88
- // expect(el.shadowRoot.querySelector('.zoom_in')).to.exist;
89
- // });
90
-
91
- // it('does not render zoom controls when disabled', async () => {
92
- // const el = await fixture(container());
93
-
94
- // el.showZoomControls = false;
95
- // await el.updateComplete;
96
-
97
- // expect(el.shadowRoot.querySelector('.zoom_out')).not.to.exist;
98
- // expect(el.shadowRoot.querySelector('.zoom_in')).not.to.exist;
99
- // });
100
-
101
- });
@@ -1,68 +0,0 @@
1
-
2
- import BookReader from '../../../src/BookReader.js';
3
- import '../../../src/plugins/menu_toggle/plugin.menu_toggle.js';
4
-
5
-
6
- let br;
7
- let hideFlag;
8
- beforeAll(() => {
9
- $.fx.off = true;
10
- const OGSpeed = $.speed;
11
- $.speed = function(_speed, easing, callback) {
12
- return OGSpeed(0, easing, callback);
13
- };
14
- document.body.innerHTML = '<div id="BookReader">';
15
- br = new BookReader();
16
- br.init();
17
- });
18
-
19
- afterEach(() => {
20
- $.fx.off = false;
21
- jest.clearAllMocks();
22
- });
23
-
24
- describe('Plugin: Menu Toggle', () => {
25
- test('has option flag', () => {
26
- expect(BookReader.defaultOptions.enableMenuToggle).toEqual(true);
27
- });
28
-
29
- test('core code has animation consts', () => {
30
- expect(BookReader.constNavAnimationDuration).toEqual(300);
31
- expect(BookReader.constResizeAnimationDuration).toEqual(100);
32
- })
33
-
34
- test('core code has registered event: `navToggled`', () => {
35
- expect(BookReader.eventNames.navToggled).toBeTruthy();
36
- })
37
-
38
- test('when bookreader loads, the menu shows', () => {
39
- expect($('.BRfooter').hasClass('js-menu-hide')).toEqual(false);
40
- expect($('.BRtoolbar').hasClass('js-menu-hide')).toEqual(false);
41
- })
42
-
43
- test('clicking on background hides the menu', () => {
44
- expect($('.BRfooter').hasClass('js-menu-hide')).toEqual(false);
45
- expect($('.BRtoolbar').hasClass('js-menu-hide')).toEqual(false);
46
- $('.BRcontainer').click();
47
- expect($('.BRfooter').hasClass('js-menu-hide')).toEqual(true);
48
- expect($('.BRtoolbar').hasClass('js-menu-hide')).toEqual(true);
49
- });
50
-
51
- test('core function `setNavigationView` is called `hideNavigation` is called', () => {
52
- br.setNavigationView = jest.fn((arg) => hideFlag = arg);
53
-
54
- br.hideNavigation();
55
- expect(br.setNavigationView).toHaveBeenCalled();
56
- expect(hideFlag).toEqual(true);
57
- });
58
-
59
- test('core function `setNavigationView` is called `showNavigation` is called', () => {
60
- br.setNavigationView = jest.fn((arg) => hideFlag = arg);
61
- br.navigationIsVisible = jest.fn(() => false);
62
-
63
- br.showNavigation();
64
- expect(br.setNavigationView).toHaveBeenCalled();
65
- expect(br.navigationIsVisible).toHaveBeenCalled();
66
- expect(hideFlag).toEqual(undefined);
67
- });
68
- });
@@ -1,130 +0,0 @@
1
- import sinon from 'sinon';
2
-
3
- import BookReader from '../../src/BookReader.js';
4
- import '../../src/plugins/plugin.mobile_nav.js';
5
- import '../../src/plugins/plugin.chapters.js';
6
-
7
- const SAMPLE_TOC = [{
8
- "pagenum": "3",
9
- "level": 1,
10
- "label": "CHAPTER I",
11
- "type": {"key": "/type/toc_item"},
12
- "title": "THE COUNTRY AND THE MISSION 1",
13
- "pageIndex": 3,
14
- },{
15
- "pagenum": "17",
16
- "level": 1,
17
- "label": "CHAPTER II",
18
- "type": {"key": "/type/toc_item"},
19
- "title": "THE COUNTRY AND THE MISSION 2",
20
- "pageIndex": 17,
21
- },
22
- {
23
- "pagenum": "undefined",
24
- "level": 1,
25
- "label": "CHAPTER III",
26
- "type": {"key": "/type/toc_item"},
27
- "title": "THE COUNTRY AND THE MISSION 3",
28
- "pageIndex": undefined,
29
- },
30
- {
31
- "pagenum": "40",
32
- "level": 1,
33
- "label": "CHAPTER IV",
34
- "type": {"key": "/type/toc_item"},
35
- "title": "THE COUNTRY AND THE MISSION 4",
36
- "pageIndex": 40,
37
- }];
38
-
39
- const SAMPLE_TOC_UNDEF = [
40
- {
41
- "pagenum": "undefined",
42
- "level": 1,
43
- "label": "CHAPTER I",
44
- "type": {"key": "/type/toc_item"},
45
- "title": "THE COUNTRY AND THE MISSION 1",
46
- "pageIndex": undefined,
47
- },
48
- {
49
- "pagenum": "undefined",
50
- "level": 1,
51
- "label": "CHAPTER II",
52
- "type": {"key": "/type/toc_item"},
53
- "title": "THE COUNTRY AND THE MISSION 2",
54
- "pageIndex": undefined,
55
- }
56
- ]
57
-
58
- let br;
59
- beforeEach(() => {
60
- $.ajax = jest.fn().mockImplementation((args) => {
61
- return Promise.resolve([{
62
- table_of_contents: SAMPLE_TOC,
63
- }]);
64
- });
65
- document.body.innerHTML = '<div id="BookReader">';
66
- br = new BookReader();
67
- });
68
-
69
- afterEach(() => {
70
- jest.clearAllMocks();
71
- });
72
-
73
- describe('Plugin: Menu Toggle', () => {
74
- test('has option flag', () => {
75
- expect(BookReader.defaultOptions.enableChaptersPlugin).toEqual(true);
76
- });
77
- test('has added BR property: olHost', () => {
78
- expect(br).toHaveProperty('olHost');
79
- expect(br.olHost).toBeTruthy();
80
- });
81
- test('has added BR property: bookId', () => {
82
- expect(br).toHaveProperty('bookId');
83
- expect(br.bookId).toBeFalsy();
84
- });
85
- test('fetches OL Book Record on init', () => {
86
- br.getOpenLibraryRecord = jest.fn();
87
- br.init();
88
- expect(br.getOpenLibraryRecord).toHaveBeenCalled();
89
- });
90
- test('Updates Table of Contents when available', () => {
91
- br.init();
92
- expect($.ajax).toHaveBeenCalled();
93
- });
94
- });
95
-
96
- describe('updateTOCState', () => {
97
-
98
- beforeEach(() => {
99
- window.HTMLElement.prototype.scrollIntoView = sinon.stub();
100
- //Sinon is not used because this function is imported from BookModel with exposeOverrideableMethod()
101
- //which has a getter and setter
102
- br.getPageIndex = (str) => parseFloat(str);
103
- br.init();
104
- });
105
-
106
- test('Test page is one of TOC', () => {
107
- br.updateTOCState(20, SAMPLE_TOC);
108
- expect($('li.BRtable-contents-el')[1].classList.contains('current-chapter'));
109
- });
110
-
111
- test('Only one element has .current-chapter', () => {
112
- br.updateTOCState(9, SAMPLE_TOC);
113
- expect($('li.BRtable-contents-el.current-chapter').length).toBe(1);
114
- })
115
-
116
- test('No chapter has .current-chapter if current index is < than any chapter index', () => {
117
- br.updateTOCState(1, SAMPLE_TOC);
118
- expect($('li.BRtable-contents-el.current-chapter').length).toBe(0);
119
- })
120
-
121
- test('if current index == chapter index ', () => {
122
- br.updateTOCState(17, SAMPLE_TOC);
123
- expect($('li.BRtable-contents-el')[1].classList.contains('current-chapter'));
124
- })
125
-
126
- test('No chapter has .current-chapter if all chapter have undefined pageIndex ', () => {
127
- br.updateTOCState(10, SAMPLE_TOC_UNDEF);
128
- expect($('li.BRtable-contents-el.current-chapter').length).toBe(0);
129
- })
130
- });
@@ -1,66 +0,0 @@
1
-
2
- import BookReader from '../../src/BookReader.js';
3
- import '../../src/plugins/plugin.mobile_nav.js';
4
-
5
- /** @type {BookReader} */
6
- let br;
7
- beforeEach(() => {
8
- document.body.innerHTML = '<div id="BookReader">';
9
- br = new BookReader();
10
- br.init();
11
- });
12
-
13
- afterEach(() => {
14
- jest.clearAllMocks();
15
- });
16
-
17
- describe('Plugin: Mobile Nav', () => {
18
- test('has option flag', () => {
19
- expect(BookReader.defaultOptions.enableMobileNav).toEqual(true);
20
- });
21
- test('has added BR property: mobileNavTitle', () => {
22
- expect(br).toHaveProperty('mobileNavTitle');
23
- expect(br.mobileNavTitle).toBeTruthy();
24
- });
25
- test('has added BR property: mobileNavFullscreenOnly', () => {
26
- expect(br).toHaveProperty('mobileNavFullscreenOnly');
27
- expect(br.mobileNavFullscreenOnly).toEqual(false);
28
- });
29
- test('has a referenced copy of nav in BookReader', () => {
30
- expect(br.refs).toHaveProperty('$mmenu');
31
- });
32
- test('draws toolbar on init', () => {
33
- let callCount = 0;
34
- // Since we have a custom setter set in utils/classes.js, we can't
35
- // use regular spying; need to "override" the function with a watcher.
36
- BookReader.prototype.initToolbar = function(_super) {
37
- return function() {
38
- callCount++;
39
- _super.apply(this, arguments);
40
- }
41
- }(BookReader.prototype.initToolbar);
42
- const br = new BookReader();
43
- br.init();
44
- expect(callCount).toBe(1);
45
- });
46
- test('sets a class on body to signal it has attached', () => {
47
- expect($(document.body).hasClass('BRbodyMobileNavEnabled')).toEqual(true);
48
- });
49
- test('loads the navbar on init', () => {
50
- expect($('#BRmobileMenu')).toHaveLength(1)
51
- });
52
- test('There is a Settings Section', () => {
53
- expect($('.BRmobileMenu__settings')).toHaveLength(1);
54
- });
55
- test('There is a More Info Section', () => {
56
- expect($('.BRmobileMenu__moreInfoRow')).toHaveLength(1);
57
- });
58
- test('There is a Sharing Section', () => {
59
- expect($('.BRmobileMenu__share')).toHaveLength(1);
60
- });
61
- test('clicking on hamburger opens menu', () => {
62
- expect($('html').hasClass('mm-opened')).toEqual(false);
63
- $('.BRmobileHamburger').click();
64
- expect($('html').hasClass('mm-opened')).toEqual(true);
65
- });
66
- });
@@ -1,203 +0,0 @@
1
- import sinon from 'sinon';
2
-
3
- import '../../src/BookReader.js';
4
- import { BookreaderWithTextSelection, TextSelectionPlugin, Cache } from '../../src/plugins/plugin.text_selection.js';
5
-
6
-
7
- /** @type {BookReader} */
8
-
9
- // djvu.xml book infos copied from https://ia803103.us.archive.org/14/items/goodytwoshoes00newyiala/goodytwoshoes00newyiala_djvu.xml
10
- const FAKE_XML_1WORD = `<OBJECT data="file://localhost//tmp/derive/goodytwoshoes00newyiala//goodytwoshoes00newyiala.djvu" height="3192" type="image/x.djvu" usemap="goodytwoshoes00newyiala_0001.djvu" width="2454">
11
- <PARAGRAPH><LINE><WORD coords="1216,2768,1256,2640">test</WORD></LINE></PARAGRAPH>
12
- </OBJECT>`;
13
- const FAKE_XML_MULT_WORDS = `<OBJECT data="file://localhost//tmp/derive/goodytwoshoes00newyiala//goodytwoshoes00newyiala.djvu" height="3192" type="image/x.djvu" usemap="goodytwoshoes00newyiala_0001.djvu" width="2454">
14
- <PARAGRAPH><LINE><WORD coords="1216,2768,1256,2640">test1</WORD>
15
- <WORD coords="1400,2768,1500,2640">test2</WORD>
16
- <WORD coords="1600,2768,1700,2640">test3</WORD></LINE></PARAGRAPH></OBJECT>`;
17
- const FAKE_XML_5COORDS = `<OBJECT data="file://localhost//tmp/derive/goodytwoshoes00newyiala//goodytwoshoes00newyiala.djvu" height="3192" type="image/x.djvu" usemap="goodytwoshoes00newyiala_0001.djvu" width="2454">
18
- <PARAGRAPH><LINE><WORD coords="1216,2768,1256,2640,2690">test</WORD></LINE></PARAGRAPH></OBJECT>`;
19
- const FAKE_XML_EMPTY = '';
20
-
21
- describe("Generic tests", () => {
22
- let br;
23
- beforeEach(() => {
24
- document.body.innerHTML = '<div id="BookReader">';
25
- br = new BookreaderWithTextSelection({
26
- data: [
27
- [
28
- { width: 800, height: 1200,
29
- uri: '//archive.org/download/BookReader/img/page001.jpg' },
30
- ],
31
- [
32
- { width: 800, height: 1200,
33
- uri: '//archive.org/download/BookReader/img/page002.jpg' },
34
- { width: 800, height: 1200,
35
- uri: '//archive.org/download/BookReader/img/page003.jpg' },
36
- ],
37
- [
38
- { width: 800, height: 1200,
39
- uri: '//archive.org/download/BookReader/img/page004.jpg' },
40
- { width: 800, height: 1200,
41
- uri: '//archive.org/download/BookReader/img/page005.jpg' },
42
- ]
43
- ],
44
- });
45
- br.init();
46
- });
47
-
48
- test("_createPageContainer overridden function still creates a BRpagecontainer element", () => {
49
- const spy = sinon.spy(br.textSelectionPlugin, 'createTextLayer');
50
- sinon.stub(br.textSelectionPlugin, "getPageText")
51
- .returns($(new DOMParser().parseFromString(FAKE_XML_1WORD, "text/xml")));
52
- const container = br._createPageContainer(1, {});
53
- expect(container).toBeTruthy();
54
- expect(spy.callCount).toBe(1);
55
- });
56
-
57
- // test loading first object from sample data
58
- test("_createPageContainer handles index 0", () => {
59
- const spy = sinon.spy(br.textSelectionPlugin, 'createTextLayer');
60
- br._createPageContainer(0, {});
61
- expect(spy.callCount).toBe(1);
62
- });
63
-
64
- // test loading last object from sample data
65
- test("_createPageContainer handles index -1", () => {
66
- const spy = sinon.spy(br.textSelectionPlugin, 'createTextLayer');
67
- br._createPageContainer(-1, {});
68
- expect(spy.callCount).toBe(0);
69
- });
70
-
71
- test("createTextLayer will render the last page and create text layer properly", async () => {
72
- const $container = br.refs.$brContainer;
73
- sinon.stub(br.textSelectionPlugin, "getPageText")
74
- .returns($(new DOMParser().parseFromString(FAKE_XML_1WORD, "text/xml")));
75
- const pageIndex = br.data.length - 1
76
- await br.textSelectionPlugin.createTextLayer(pageIndex, $container);
77
- expect($container.find(".textSelectionSVG").length).toBe(1);
78
- expect($container.find(".BRparagElement").length).toBe(1);
79
- });
80
-
81
- test("createTextLayer will not create text layer if there are too many words", async () => {
82
- const $container = br.refs.$brContainer;
83
- const xml = FAKE_XML_1WORD.replace(/<WORD.*<\/WORD>/, FAKE_XML_1WORD.match(/<WORD.*<\/WORD>/)[0].repeat(3000));
84
- sinon.stub(br.textSelectionPlugin, "getPageText")
85
- .returns($(new DOMParser().parseFromString(xml, "text/xml")));
86
- await br.textSelectionPlugin.createTextLayer(0, $container);
87
- expect($container.find(".textSelectionSVG").length).toBe(0);
88
- expect($container.find(".BRparagElement").length).toBe(0);
89
- expect($container.find(".BRwordElement").length).toBe(0);
90
- });
91
-
92
- // GRRRR!!! This is a useful test :( But can't get it working for some reason,
93
- // and the error output is super cryptic.
94
- test.skip("createTextLayer will not create text layer if index is more than total number of book pages", async () => {
95
- const $container = br.refs.$brContainer;
96
- await br.textSelectionPlugin.createTextLayer(150, $container);
97
- expect($container.find(".textSelectionSVG").length).toBe(0);
98
- expect($container.find(".BRparagElement").length).toBe(0);
99
- expect($container.find(".BRwordElement").length).toBe(0);
100
- });
101
-
102
- test("createTextLayer creates an svg layer with paragraph with 1 word element", async () => {
103
- const $container = br.refs.$brContainer;
104
- sinon.stub(br.textSelectionPlugin, "getPageText")
105
- .returns($(new DOMParser().parseFromString(FAKE_XML_1WORD, "text/xml")));
106
- await br.textSelectionPlugin.createTextLayer(1, $container);
107
- expect($container.find(".textSelectionSVG").length).toBe(1);
108
- expect($container.find(".BRparagElement").length).toBe(1);
109
- expect($container.find(".BRwordElement").length).toBe(1);
110
- expect($container.find(".BRwordElement").text()).toBe("test");
111
- });
112
-
113
- test("createTextLayer creates an svg layer with paragraph with multiple word elements", async () => {
114
- const $container = br.refs.$brContainer;
115
- sinon.stub(br.textSelectionPlugin, "getPageText")
116
- .returns($(new DOMParser().parseFromString(FAKE_XML_MULT_WORDS, "text/xml")));
117
- await br.textSelectionPlugin.createTextLayer(2, $container);
118
- expect($container.find(".textSelectionSVG").length).toBe(1);
119
- expect($container.find(".BRparagElement").length).toBe(1);
120
- expect($container.find(".BRwordElement").length).toBe(5);
121
- expect($container.find(".BRwordElement").last()).not.toBe(" ");
122
- });
123
-
124
- test("createTextLayer creates an svg layer with paragraph with word with 5 params coordinates", async () => {
125
- const $container = br.refs.$brContainer;
126
- sinon.stub(br.textSelectionPlugin, "getPageText")
127
- .returns($(new DOMParser().parseFromString(FAKE_XML_5COORDS, "text/xml")));
128
- await br.textSelectionPlugin.createTextLayer(3, $container);
129
- expect($container.find(".textSelectionSVG").length).toBe(1);
130
- expect($container.find(".BRparagElement").length).toBe(1);
131
- expect($container.find(".BRwordElement").length).toBe(1);
132
- });
133
-
134
- test("createTextLayer can handle empty xml", async () => {
135
- const $container = br.refs.$brContainer;
136
- sinon.stub(br.textSelectionPlugin, "getPageText")
137
- .returns($(new DOMParser().parseFromString(FAKE_XML_EMPTY, "text/xml")));
138
- await br.textSelectionPlugin.createTextLayer(4, $container);
139
- expect($container.find(".textSelectionSVG").length).toBe(1);
140
- expect($container.find(".BRparagElement").length).toBe(0);
141
- expect($container.find(".BRwordElement").length).toBe(0);
142
- });
143
-
144
- const LONG_PRESS_DURATION = 500;
145
- test("calling stopPageFlip does not allow long click to flip the page", () => {
146
- const $container = br.refs.$brContainer;
147
- br.textSelectionPlugin.stopPageFlip($container);
148
- const currIndex = br.currentIndex();
149
- $container.find("BRwordElement").mousedown();
150
- // Waits for long press
151
- setTimeout(() => {
152
- $container.find("BRwordElement").mousedown();
153
- // Waits for flipping animation
154
- setTimeout(() => {
155
- expect(br.currentIndex()).toBe(currIndex);
156
- }, 2000);
157
- }, LONG_PRESS_DURATION);
158
- });
159
- })
160
-
161
- describe("textSelectionPlugin constructor", () => {
162
- test("textSelectionPlugin constructor with firefox browser", () => {
163
- const tsp = new TextSelectionPlugin({}, {}, true)
164
- expect(tsp.djvuPagesPromise).toBe(null);
165
- expect(tsp.svgParagraphElement).toBe("g");
166
- expect(tsp.svgWordElement).toBe("text");
167
- });
168
-
169
- test("textSelectionPlugin constructor not on firefox browser", () => {
170
- const tsp = new TextSelectionPlugin({}, {}, false)
171
- expect(tsp.djvuPagesPromise).toBe(null);
172
- expect(tsp.svgParagraphElement).toBe("text");
173
- expect(tsp.svgWordElement).toBe("tspan");
174
- });
175
- });
176
-
177
- describe("Cache", () => {
178
- test('Adding works', () => {
179
- const c = new Cache(10);
180
- c.add(35);
181
- expect(c.entries).toEqual([35]);
182
- });
183
-
184
- test('Size does not grow beyond limit', () => {
185
- const c = new Cache(2);
186
- c.add(35);
187
- c.add(32);
188
- c.add(12);
189
- c.add(11);
190
- c.add(112);
191
- expect(c.entries).toHaveLength(2);
192
- });
193
-
194
- test('Oldest evicted first', () => {
195
- const c = new Cache(2);
196
- c.add(35);
197
- c.add(32);
198
- c.add(12);
199
- c.add(12);
200
- c.add(10);
201
- expect(c.entries).toEqual([12, 10]);
202
- });
203
- });
@@ -1,15 +0,0 @@
1
- import * as docCookies from '../../src/util/docCookies.js';
2
-
3
- afterEach(() => {
4
- jest.clearAllMocks();
5
- });
6
-
7
- describe('Helper function: set and get cookie item', () => {
8
- test('set cookie item value', () => {
9
- expect(docCookies.setItem('test-cookie', 'jack-sparow')).toBeTruthy();
10
- });
11
-
12
- test('get cookie item value', () => {
13
- expect(docCookies.getItem('test-cookie')).toEqual('jack-sparow');
14
- });
15
- });