@internetarchive/bookreader 5.0.0-11-multiple-files → 5.0.0-110

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 (389) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +616 -1467
  4. package/BookReader/BookReader.js +2 -21564
  5. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  6. package/BookReader/BookReader.js.map +1 -1
  7. package/BookReader/bergamot-translator-worker.js +2966 -0
  8. package/BookReader/bergamot-translator-worker.wasm +0 -0
  9. package/BookReader/hypothesis/LICENSE +50 -0
  10. package/BookReader/hypothesis/README.md +55 -0
  11. package/BookReader/hypothesis/build/boot.js +1 -0
  12. package/BookReader/hypothesis/build/manifest.json +20 -0
  13. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
  14. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  15. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
  16. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  17. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
  18. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  19. package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
  20. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  35. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  36. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  37. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  38. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  39. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  40. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  41. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  42. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  43. package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
  44. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  45. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
  46. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  47. package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
  48. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  49. package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
  50. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  51. package/BookReader/hypothesis/package.json +126 -0
  52. package/BookReader/ia-bookreader-bundle.js +1907 -0
  53. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
  54. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  55. package/BookReader/icons/1up.svg +1 -12
  56. package/BookReader/icons/2up.svg +1 -15
  57. package/BookReader/icons/advance.svg +3 -26
  58. package/BookReader/icons/chevron-right.svg +1 -1
  59. package/BookReader/icons/close-circle-dark.svg +1 -0
  60. package/BookReader/icons/close-circle.svg +1 -1
  61. package/BookReader/icons/fullscreen.svg +1 -17
  62. package/BookReader/icons/fullscreen_exit.svg +1 -17
  63. package/BookReader/icons/hamburger.svg +1 -15
  64. package/BookReader/icons/left-arrow.svg +1 -12
  65. package/BookReader/icons/magnify-minus.svg +1 -16
  66. package/BookReader/icons/magnify-plus.svg +1 -17
  67. package/BookReader/icons/magnify.svg +1 -15
  68. package/BookReader/icons/pause.svg +1 -23
  69. package/BookReader/icons/play.svg +1 -22
  70. package/BookReader/icons/playback-speed.svg +1 -34
  71. package/BookReader/icons/read-aloud.svg +1 -22
  72. package/BookReader/icons/review.svg +3 -22
  73. package/BookReader/icons/slider-toggle.svg +1 -0
  74. package/BookReader/icons/thumbnails.svg +1 -17
  75. package/BookReader/icons/voice.svg +1 -0
  76. package/BookReader/icons/volume-full.svg +1 -22
  77. package/BookReader/images/BRicons.svg +5 -94
  78. package/BookReader/images/books_graphic.svg +1 -177
  79. package/BookReader/images/hypothesis.ico +0 -0
  80. package/BookReader/images/icon_book.svg +1 -12
  81. package/BookReader/images/icon_bookmark.svg +1 -12
  82. package/BookReader/images/icon_experiment.svg +1 -0
  83. package/BookReader/images/icon_gear.svg +1 -14
  84. package/BookReader/images/icon_hamburger.svg +1 -20
  85. package/BookReader/images/icon_home.svg +1 -21
  86. package/BookReader/images/icon_info.svg +1 -11
  87. package/BookReader/images/icon_one_page.svg +1 -8
  88. package/BookReader/images/icon_pause.svg +1 -1
  89. package/BookReader/images/icon_play.svg +1 -1
  90. package/BookReader/images/icon_playback-rate.svg +1 -15
  91. package/BookReader/images/icon_search_button.svg +1 -8
  92. package/BookReader/images/icon_share.svg +1 -9
  93. package/BookReader/images/icon_skip-ahead.svg +1 -6
  94. package/BookReader/images/icon_skip-back.svg +2 -13
  95. package/BookReader/images/icon_speaker.svg +1 -18
  96. package/BookReader/images/icon_speaker_open.svg +1 -10
  97. package/BookReader/images/icon_thumbnails.svg +1 -12
  98. package/BookReader/images/icon_toc.svg +1 -5
  99. package/BookReader/images/icon_two_pages.svg +1 -9
  100. package/BookReader/images/marker_chap-off.svg +1 -11
  101. package/BookReader/images/marker_chap-on.svg +1 -11
  102. package/BookReader/images/marker_srch-on.svg +1 -11
  103. package/BookReader/images/translate.svg +1 -0
  104. package/BookReader/images/unviewable_page.png +0 -0
  105. package/BookReader/jquery-3.js +2 -0
  106. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  107. package/BookReader/plugins/plugin.archive_analytics.js +1 -172
  108. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js +1 -165
  110. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  111. package/BookReader/plugins/plugin.chapters.js +19 -301
  112. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  113. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  114. package/BookReader/plugins/plugin.experiments.js +3 -0
  115. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  116. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  117. package/BookReader/plugins/plugin.iframe.js +1 -74
  118. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  119. package/BookReader/plugins/plugin.iiif.js +2 -0
  120. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  121. package/BookReader/plugins/plugin.resume.js +1 -368
  122. package/BookReader/plugins/plugin.resume.js.map +1 -1
  123. package/BookReader/plugins/plugin.search.js +2 -1420
  124. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  125. package/BookReader/plugins/plugin.search.js.map +1 -1
  126. package/BookReader/plugins/plugin.text_selection.js +2 -1080
  127. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  128. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  129. package/BookReader/plugins/plugin.translate.js +137 -0
  130. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  131. package/BookReader/plugins/plugin.translate.js.map +1 -0
  132. package/BookReader/plugins/plugin.tts.js +2 -9193
  133. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  134. package/BookReader/plugins/plugin.tts.js.map +1 -1
  135. package/BookReader/plugins/plugin.url.js +1 -269
  136. package/BookReader/plugins/plugin.url.js.map +1 -1
  137. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  138. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  139. package/BookReader/plugins/translator-worker.js +2 -0
  140. package/BookReader/plugins/translator-worker.js.map +1 -0
  141. package/BookReader/silence.mp3 +0 -0
  142. package/BookReader/translator-worker.js +475 -0
  143. package/BookReader/webcomponents-bundle.js +3 -0
  144. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  145. package/BookReader/webcomponents-bundle.js.map +1 -0
  146. package/README.md +14 -3
  147. package/jsconfig.json +19 -0
  148. package/package.json +92 -70
  149. package/src/BookReader/BookModel.js +92 -46
  150. package/src/BookReader/DragScrollable.js +233 -0
  151. package/src/BookReader/ImageCache.js +49 -16
  152. package/src/BookReader/Mode1Up.js +66 -356
  153. package/src/BookReader/Mode1UpLit.js +392 -0
  154. package/src/BookReader/Mode2Up.js +87 -1315
  155. package/src/BookReader/Mode2UpLit.js +788 -0
  156. package/src/BookReader/ModeAbstract.js +43 -0
  157. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  158. package/src/BookReader/ModeSmoothZoom.js +312 -0
  159. package/src/BookReader/ModeThumb.js +30 -16
  160. package/src/BookReader/Navbar/Navbar.js +201 -76
  161. package/src/BookReader/PageContainer.js +120 -23
  162. package/src/BookReader/ReduceSet.js +3 -3
  163. package/src/BookReader/Toolbar/Toolbar.js +19 -41
  164. package/src/BookReader/events.js +3 -3
  165. package/src/BookReader/options.js +94 -17
  166. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  167. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  168. package/src/BookReader/utils/SelectionObserver.js +45 -0
  169. package/src/BookReader/utils/classes.js +1 -1
  170. package/src/BookReader/utils.js +141 -13
  171. package/src/BookReader.js +711 -1241
  172. package/src/BookReaderPlugin.js +52 -0
  173. package/src/assets/icons/close-circle-dark.svg +1 -0
  174. package/src/assets/icons/magnify-minus.svg +3 -7
  175. package/src/assets/icons/magnify-plus.svg +3 -7
  176. package/src/assets/icons/slider-toggle.svg +1 -0
  177. package/src/assets/icons/voice.svg +1 -0
  178. package/src/assets/images/hypothesis.ico +0 -0
  179. package/src/assets/images/icon_experiment.svg +1 -0
  180. package/src/assets/images/translate.svg +1 -0
  181. package/src/assets/images/unviewable_page.png +0 -0
  182. package/src/assets/silence.mp3 +0 -0
  183. package/src/css/BookReader.scss +1 -17
  184. package/src/css/_BRBookmarks.scss +1 -1
  185. package/src/css/_BRComponent.scss +1 -1
  186. package/src/css/_BRicon.scss +8 -2
  187. package/src/css/_BRmain.scss +33 -27
  188. package/src/css/_BRnav.scss +74 -70
  189. package/src/css/_BRpages.scss +171 -42
  190. package/src/css/_BRsearch.scss +69 -235
  191. package/src/css/_BRtoolbar.scss +5 -5
  192. package/src/css/_TextSelection.scss +129 -24
  193. package/src/css/_colorbox.scss +2 -2
  194. package/src/css/_controls.scss +24 -7
  195. package/src/css/_icons.scss +14 -1
  196. package/src/{BookNavigator/assets → css}/button-base.js +10 -3
  197. package/src/css/icon_checkmark.js +9 -0
  198. package/src/css/sharedStyles.js +15 -0
  199. package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
  200. package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +29 -25
  201. package/src/ia-bookreader/ia-bookreader.js +666 -0
  202. package/src/ia-bookreader/sharing.js +27 -0
  203. package/src/ia-bookreader/viewable-files.js +98 -0
  204. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
  205. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
  206. package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
  207. package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
  208. package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +44 -32
  209. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  210. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +5 -10
  211. package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
  212. package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
  213. package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
  214. package/src/plugins/plugin.archive_analytics.js +84 -78
  215. package/src/plugins/plugin.autoplay.js +99 -104
  216. package/src/plugins/plugin.chapters.js +310 -201
  217. package/src/plugins/plugin.experiments.js +321 -0
  218. package/src/plugins/plugin.iframe.js +1 -1
  219. package/src/plugins/plugin.iiif.js +141 -0
  220. package/src/plugins/plugin.resume.js +53 -50
  221. package/src/plugins/plugin.text_selection.js +522 -219
  222. package/src/plugins/plugin.vendor-fullscreen.js +7 -7
  223. package/src/plugins/search/plugin.search.js +380 -360
  224. package/src/{BookNavigator → plugins}/search/search-provider.js +94 -32
  225. package/src/{BookNavigator → plugins}/search/search-results.js +108 -90
  226. package/src/plugins/search/utils.js +50 -0
  227. package/src/plugins/search/view.js +79 -210
  228. package/src/plugins/translate/TranslationManager.js +164 -0
  229. package/src/plugins/translate/plugin.translate.js +512 -0
  230. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  231. package/src/plugins/tts/FestivalTTSEngine.js +21 -31
  232. package/src/plugins/tts/PageChunk.js +33 -21
  233. package/src/plugins/tts/PageChunkIterator.js +11 -17
  234. package/src/plugins/tts/WebTTSEngine.js +131 -91
  235. package/src/plugins/tts/plugin.tts.js +345 -350
  236. package/src/plugins/tts/utils.js +77 -49
  237. package/src/plugins/url/UrlPlugin.js +191 -0
  238. package/src/plugins/{plugin.url.js → url/plugin.url.js} +47 -18
  239. package/src/util/TextSelectionManager.js +282 -0
  240. package/src/util/browserSniffing.js +33 -1
  241. package/src/util/cache.js +20 -0
  242. package/src/util/docCookies.js +21 -2
  243. package/src/util/lit.js +15 -0
  244. package/src/util/strings.js +1 -0
  245. package/.babelrc +0 -12
  246. package/.dependabot/config.yml +0 -6
  247. package/.eslintrc.js +0 -49
  248. package/.gitattributes +0 -2
  249. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  250. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  251. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  252. package/.github/workflows/node.js.yml +0 -28
  253. package/.github/workflows/npm-publish.yml +0 -47
  254. package/.testcaferc.json +0 -5
  255. package/BookReader/bookreader-component-bundle.js +0 -14330
  256. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  257. package/BookReader/bookreader-component-bundle.js.map +0 -1
  258. package/BookReader/icons/sort-ascending.svg +0 -1
  259. package/BookReader/icons/sort-descending.svg +0 -1
  260. package/BookReader/jquery-1.10.1.js +0 -108
  261. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  262. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  263. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  264. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  265. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  266. package/BookReaderDemo/BookReaderDemo.css +0 -41
  267. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  268. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  269. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  270. package/BookReaderDemo/IIIFBookReader.js +0 -207
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  273. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  274. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  275. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  276. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  277. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  278. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  279. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  280. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  281. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  282. package/BookReaderDemo/demo-advanced.html +0 -33
  283. package/BookReaderDemo/demo-autoplay.html +0 -38
  284. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  285. package/BookReaderDemo/demo-embed.html +0 -26
  286. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  287. package/BookReaderDemo/demo-fullscreen.html +0 -33
  288. package/BookReaderDemo/demo-iiif.html +0 -34
  289. package/BookReaderDemo/demo-iiif.js +0 -26
  290. package/BookReaderDemo/demo-internetarchive.html +0 -74
  291. package/BookReaderDemo/demo-multiple.html +0 -43
  292. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  293. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  294. package/BookReaderDemo/demo-simple.html +0 -34
  295. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  296. package/BookReaderDemo/immersion-1up.html +0 -64
  297. package/BookReaderDemo/immersion-mode.html +0 -35
  298. package/BookReaderDemo/toggle_controls.html +0 -53
  299. package/BookReaderDemo/view_mode.html +0 -39
  300. package/BookReaderDemo/viewmode-cycle.html +0 -41
  301. package/CHANGELOG.md +0 -476
  302. package/CONTRIBUTING.md +0 -7
  303. package/codecov.yml +0 -17
  304. package/index.html +0 -31
  305. package/karma.conf.js +0 -23
  306. package/screenshot.png +0 -0
  307. package/scripts/postversion.js +0 -10
  308. package/scripts/preversion.js +0 -14
  309. package/scripts/version.js +0 -26
  310. package/src/BookNavigator/BookModel.js +0 -14
  311. package/src/BookNavigator/BookNavigator.js +0 -451
  312. package/src/BookNavigator/assets/book-loader.js +0 -27
  313. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  314. package/src/BookNavigator/assets/icon_close.js +0 -3
  315. package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
  316. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  317. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  318. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  319. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  320. package/src/BookNavigator/search/a-search-result.js +0 -55
  321. package/src/BookNavigator/volumes/volumes-provider.js +0 -75
  322. package/src/BookNavigator/volumes/volumes.js +0 -161
  323. package/src/BookReader/DebugConsole.js +0 -54
  324. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  325. package/src/ItemNavigator/ItemNavigator.js +0 -372
  326. package/src/ItemNavigator/providers/sharing.js +0 -29
  327. package/src/assets/icons/sort-ascending.svg +0 -1
  328. package/src/assets/icons/sort-descending.svg +0 -1
  329. package/src/css/_MobileNav.scss +0 -194
  330. package/src/dragscrollable-br.js +0 -261
  331. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  332. package/src/plugins/plugin.mobile_nav.js +0 -287
  333. package/tests/BookReader/BookModel.test.js +0 -312
  334. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  335. package/tests/BookReader/DebugConsole.test.js +0 -25
  336. package/tests/BookReader/ImageCache.test.js +0 -150
  337. package/tests/BookReader/Mode1Up.test.js +0 -164
  338. package/tests/BookReader/Mode2Up.test.js +0 -247
  339. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  340. package/tests/BookReader/PageContainer.test.js +0 -115
  341. package/tests/BookReader/ReduceSet.test.js +0 -38
  342. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  343. package/tests/BookReader/utils/classes.test.js +0 -88
  344. package/tests/BookReader/utils.test.js +0 -109
  345. package/tests/BookReader.options.test.js +0 -39
  346. package/tests/BookReader.test.js +0 -301
  347. package/tests/e2e/README.md +0 -75
  348. package/tests/e2e/autoplay.test.js +0 -13
  349. package/tests/e2e/base.test.js +0 -35
  350. package/tests/e2e/helpers/base.js +0 -258
  351. package/tests/e2e/helpers/debug.js +0 -13
  352. package/tests/e2e/helpers/desktopSearch.js +0 -72
  353. package/tests/e2e/helpers/mobileSearch.js +0 -85
  354. package/tests/e2e/helpers/mockSearch.js +0 -93
  355. package/tests/e2e/helpers/rightToLeft.js +0 -29
  356. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  357. package/tests/e2e/models/BookReader.js +0 -11
  358. package/tests/e2e/models/Navigation.js +0 -56
  359. package/tests/e2e/rightToLeft.test.js +0 -20
  360. package/tests/e2e/viewmode.test.js +0 -37
  361. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  362. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  363. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  364. package/tests/karma/BookNavigator/search-results.test.js +0 -240
  365. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  366. package/tests/karma/BookNavigator/volumes.test.js +0 -133
  367. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  368. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  369. package/tests/plugins/plugin.autoplay.test.js +0 -52
  370. package/tests/plugins/plugin.chapters.test.js +0 -130
  371. package/tests/plugins/plugin.iframe.test.js +0 -42
  372. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  373. package/tests/plugins/plugin.resume.test.js +0 -98
  374. package/tests/plugins/plugin.text_selection.test.js +0 -203
  375. package/tests/plugins/plugin.url.test.js +0 -129
  376. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  377. package/tests/plugins/search/plugin.search.test.js +0 -166
  378. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  379. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  380. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  381. package/tests/plugins/tts/PageChunk.test.js +0 -57
  382. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  383. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  384. package/tests/plugins/tts/utils.test.js +0 -133
  385. package/tests/util/browserSniffing.test.js +0 -56
  386. package/tests/util/docCookies.test.js +0 -15
  387. package/tests/util/strings.test.js +0 -63
  388. package/tests/utils.js +0 -42
  389. package/webpack.config.js +0 -86
@@ -1,171 +0,0 @@
1
- import BookReader from '../../src/BookReader';
2
-
3
- beforeAll(() => {
4
- global.alert = jest.fn();
5
- })
6
- afterEach(() => {
7
- jest.restoreAllMocks();
8
- });
9
-
10
- describe('BookReader.prototype.toggleFullscreen', () => {
11
- test('uses `isFullscreen` to check fullscreen state', () => {
12
- const isFSmock = jest.fn();
13
- isFSmock.mockReturnValueOnce(false);
14
- const br = new BookReader();
15
- br.mode = br.constMode1up;
16
- br.enterFullscreen = jest.fn();
17
- br.isFullscreen = isFSmock;
18
-
19
- br.toggleFullscreen();
20
- expect(br.isFullscreen).toHaveBeenCalled();
21
- expect(br.isFullscreen).toHaveBeenCalled();
22
- });
23
-
24
- test('will always emit an event', () => {
25
- const br = new BookReader();
26
- br.mode = br.constMode1up;
27
- br.enterFullscreen = jest.fn();
28
- br.trigger = jest.fn();
29
- br.refs.$brContainer = {
30
- css: jest.fn(),
31
- animate: jest.fn()
32
- }
33
-
34
- br.toggleFullscreen();
35
- expect(br.enterFullscreen).toHaveBeenCalled();
36
- });
37
-
38
- test('will start with opening fullscreen', () => {
39
- const br = new BookReader();
40
- br.mode = br.constMode1up;
41
- br.enterFullscreen = jest.fn();
42
-
43
- br.toggleFullscreen();
44
- expect(br.enterFullscreen).toHaveBeenCalled();
45
- });
46
-
47
- test('will close fullscreen if BookReader is in fullscreen', () => {
48
- const br = new BookReader();
49
- br.mode = br.constMode1up;
50
- br.exitFullScreen = jest.fn();
51
- br.isFullscreenActive = true;
52
-
53
- br.toggleFullscreen();
54
- expect(br.exitFullScreen).toHaveBeenCalled();
55
- });
56
- });
57
-
58
- describe('BookReader.prototype.enterFullscreen', () => {
59
- test('will bind `_fullscreenCloseHandler` by default', () => {
60
- const br = new BookReader();
61
- br.mode = br.constMode1up;
62
- br.switchMode = jest.fn();
63
- br.updateBrClasses = jest.fn();
64
- br.refs.$brContainer = {
65
- css: jest.fn(),
66
- animate: jest.fn(),
67
- };
68
- expect(br._fullscreenCloseHandler).toBeUndefined();
69
-
70
- br.enterFullscreen();
71
- expect(br._fullscreenCloseHandler).toBeDefined();
72
- });
73
-
74
- test('fires certain events when called', () => {
75
- const br = new BookReader();
76
- br.mode = br.constMode1up;
77
- br.switchMode = jest.fn();
78
- br.updateBrClasses = jest.fn();
79
- br.trigger = jest.fn();
80
- br.resize = jest.fn();
81
- br.jumpToIndex = jest.fn();
82
- const animateMock = (options, speed, style, callback) => {
83
- callback();
84
- };
85
- br.refs.$brContainer = {
86
- css: jest.fn(),
87
- animate: animateMock,
88
- };
89
-
90
- br.enterFullscreen();
91
- expect(br.switchMode).toHaveBeenCalledTimes(1);
92
- expect(br.updateBrClasses).toHaveBeenCalledTimes(0); // book nav's fullscreen manager will set these classes
93
- expect(br.trigger).toHaveBeenCalledTimes(1);
94
- expect(br.resize).toHaveBeenCalledTimes(1);
95
- expect(br.jumpToIndex).toHaveBeenCalledTimes(1);
96
- });
97
- });
98
-
99
- describe('BookReader.prototype.exitFullScreen', () => {
100
- test('fires certain events when called', () => {
101
- const br = new BookReader();
102
- br.mode = br.constMode1up;
103
- br.switchMode = jest.fn();
104
- br.updateBrClasses = jest.fn();
105
- br.trigger = jest.fn();
106
- br.resize = jest.fn();
107
- const animateMock = (options, speed, style, callback) => {
108
- callback();
109
- };
110
- br.refs.$brContainer = {
111
- css: jest.fn(),
112
- animate: animateMock,
113
- };
114
- br.exitFullScreen();
115
- expect(br.switchMode).toHaveBeenCalledTimes(1);
116
- expect(br.updateBrClasses).toHaveBeenCalledTimes(1);
117
- expect(br.trigger).toHaveBeenCalledTimes(1);
118
- expect(br.resize).toHaveBeenCalledTimes(1);
119
- });
120
- });
121
-
122
- describe('BookReader.prototype.trigger', () => {
123
- test('fires custom event', () => {
124
- const br = new BookReader();
125
- global.br = br;
126
- global.dispatchEvent = jest.fn();
127
-
128
- const props = {bar: 1};
129
- br.trigger('foo', props);
130
- expect(global.dispatchEvent.mock.calls.length).toBe(1);
131
- });
132
- });
133
-
134
- describe('`BookReader.prototype.prev`', () => {
135
- const br = new BookReader();
136
- global.br = br;
137
- br.trigger = jest.fn();
138
- br.flipBackToIndex = jest.fn();
139
- br.jumpToIndex = jest.fn();
140
-
141
- test('does not take action if user is on front page', () => {
142
- br.firstIndex = 0;
143
- br.prev();
144
- expect(br.trigger.mock.calls.length).toBe(0);
145
- expect(br.flipBackToIndex.mock.calls.length).toBe(0);
146
- expect(br.jumpToIndex.mock.calls.length).toBe(0);
147
- });
148
-
149
- describe('2up mode', () => {
150
- test('fires event and turns the page', () => {
151
- br.firstIndex = 10;
152
- br.mode = br.constMode2up;
153
- br.prev();
154
- expect(br.jumpToIndex.mock.calls.length).toBe(0); // <-- does not get called
155
- expect(br.trigger.mock.calls.length).toBe(1);
156
- expect(br.flipBackToIndex.mock.calls.length).toBe(1);
157
- });
158
- })
159
-
160
- describe('non 2up mode', () => {
161
- test('jumps to provided index', () => {
162
- br.firstIndex = 100;
163
- br.mode = br.constMode1up;
164
- br.prev();
165
- expect(br.jumpToIndex.mock.calls.length).toBe(1); // <-- gets called
166
- expect(br.trigger.mock.calls.length).toBe(1); // <-- gets called by `jumpToIndex` internally
167
- expect(br.flipBackToIndex.mock.calls.length).toBe(1); // <-- gets called by `jumpToIndex` internally
168
- })
169
- });
170
- });
171
-
@@ -1,25 +0,0 @@
1
- import sinon from 'sinon';
2
- import { DebugConsole } from '../../src/BookReader/DebugConsole.js';
3
-
4
- beforeEach(() => {
5
- sinon.stub(console, 'log');
6
- });
7
- afterEach(() => {
8
- sinon.restore();
9
- });
10
-
11
- test('hijacks console.log', () => {
12
- const _realLog = console.log;
13
- expect(_realLog).toBe(console.log);
14
- new DebugConsole().init();
15
- expect(_realLog).not.toBe(console.log);
16
- });
17
-
18
- test('logging the same thing twice does not create more entries', () => {
19
- const dc = new DebugConsole();
20
- dc.init();
21
- dc.logToScreen(['hello']);
22
- dc.logToScreen(['hello']);
23
- expect(dc.$log.children('.log-entry')).toHaveLength(1);
24
- expect(dc.$log.find('.count').text()).toBe('(2)');
25
- });
@@ -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,164 +0,0 @@
1
- import sinon from 'sinon';
2
- import { deepCopy } from '../utils.js';
3
- import { Mode1Up } from '../../src/BookReader/Mode1Up.js'
4
- import { BookModel } from '../../src/BookReader/BookModel.js';
5
- import { DEFAULT_OPTIONS } from '../../src/BookReader/options.js';
6
- const DEFAULT_PPI = DEFAULT_OPTIONS.ppi;
7
-
8
- /** @type {BookReaderOptions['data']} */
9
- const SAMPLE_DATA = [
10
- [
11
- { width: 123, height: 123, uri: 'https://archive.org/image0.jpg', pageNum: '1' },
12
- ],
13
- [
14
- { width: 123, height: 123, uri: 'https://archive.org/image1.jpg', pageNum: '2' },
15
- { width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '3' },
16
- ],
17
- [
18
- { width: 123, height: 123, uri: 'https://archive.org/image3.jpg', pageNum: '4' },
19
- { width: 123, height: 123, uri: 'https://archive.org/image4.jpg', pageNum: '5' },
20
- ],
21
- [
22
- { width: 123, height: 123, uri: 'https://archive.org/image5.jpg', pageNum: '6' },
23
- ],
24
- ];
25
-
26
- describe('pagesWithBounds', () => {
27
- test('Works with empty book', () => {
28
- const br = { data: [] };
29
- const book = new BookModel(br);
30
- const mode = new Mode1Up(br, book);
31
- expect(Array.from(mode.pagesWithBounds())).toHaveLength(0);
32
- });
33
-
34
- test('Iterates all pages', () => {
35
- const br = { data: SAMPLE_DATA };
36
- const book = new BookModel(br);
37
- const mode = new Mode1Up(br, book);
38
- expect(Array.from(mode.pagesWithBounds())).toHaveLength(6);
39
- });
40
-
41
- test('Computes bounds', () => {
42
- const br = { data: SAMPLE_DATA };
43
- const book = new BookModel(br);
44
- const mode = new Mode1Up(br, book);
45
- const x = Array.from(mode.pagesWithBounds());
46
- expect(x.map(({top, bottom}) => [top, bottom].map(x => x.toFixed(1)))).toEqual([
47
- ['0.0', '24.6'],
48
- ['44.6', '69.2'],
49
- ['89.2', '113.8'],
50
- ['133.8', '158.4'],
51
- ['178.4', '203.0'],
52
- ['223.0', '247.6'],
53
- ]);
54
- });
55
- });
56
-
57
- describe('boundIntersection', () => {
58
- const f = Mode1Up.boundIntersection;
59
- test('Exactly equal', () => {
60
- expect(f({top: 0, bottom: 10}, {top: 0, bottom: 10})).toBe(1);
61
- });
62
-
63
- test('A contains B', () => {
64
- expect(f({top: 0, bottom: 10}, {top: 1, bottom: 2})).toBe(0.1);
65
- });
66
- test('A boundary contains B', () => {
67
- expect(f({top: 0, bottom: 10}, {top: 0, bottom: 2})).toBe(0.2);
68
- });
69
- test('A contains top part of B', () => {
70
- expect(f({top: 0, bottom: 10}, {top: 5, bottom: 15})).toBeCloseTo(5 / 15);
71
- });
72
- test('A contains bottom part of B', () => {
73
- expect(f({top: 5, bottom: 10}, {top: 0, bottom: 6})).toBe(0.1);
74
- });
75
- test('A entirely above B', () => {
76
- expect(f({top: 0, bottom: 10}, {top: 20, bottom: 30})).toBe(0);
77
- });
78
- test('A entirely below B', () => {
79
- expect(f({top: 20, bottom: 30}, {top: 0, bottom: 10})).toBe(0);
80
- });
81
- });
82
-
83
- describe('physicalInchesToDisplayPixels', () => {
84
- test('0 case', () => {
85
- const f = Mode1Up.prototype.physicalInchesToDisplayPixels;
86
- expect(f(0, 1, 100)).toBe(0);
87
- });
88
- test('Misc case', () => {
89
- const f = Mode1Up.prototype.physicalInchesToDisplayPixels;
90
- expect(f(1, 1, 100)).toBe(100);
91
- expect(f(1, 2, 100)).toBe(50);
92
- expect(f(1, 1, 78)).toBe(78);
93
- });
94
- });
95
-
96
- describe('calculateViewDimensions', () => {
97
- test('Padding added for each page', () => {
98
- const br = { data: SAMPLE_DATA };
99
- const book = new BookModel(br);
100
- const mode = new Mode1Up(br, book);
101
- const pageSizeIn = 123 / DEFAULT_PPI;
102
- const dims = mode.calculateViewDimensions(1, 2.5);
103
- expect(dims.width).toBeCloseTo(mode.physicalInchesToDisplayPixels(pageSizeIn, 1));
104
- expect(dims.height).toBeCloseTo(mode.physicalInchesToDisplayPixels(6 * pageSizeIn + 5 * 2.5, 1));
105
- });
106
-
107
- test('Reduction factor applied to each page/spacing individually', () => {
108
- const br = { data: SAMPLE_DATA };
109
- const book = new BookModel(br);
110
- const mode = new Mode1Up(br, book);
111
- const pageSizeIn = 123 / DEFAULT_PPI;
112
- const dims = mode.calculateViewDimensions(2, 5);
113
- expect(dims.width).toBeCloseTo(mode.physicalInchesToDisplayPixels(pageSizeIn, 2));
114
- expect(dims.height).toBeCloseTo(mode.physicalInchesToDisplayPixels(6 * pageSizeIn + 5 * 5, 2));
115
- });
116
-
117
- test('Uses maximal width', () => {
118
- const br = { data: deepCopy(SAMPLE_DATA) };
119
- br.data.flat().forEach((page, i) => page.width = i);
120
- const book = new BookModel(br);
121
- const mode = new Mode1Up(br, book);
122
- expect(mode.calculateViewDimensions().width).toBe(mode.physicalInchesToDisplayPixels(5 / DEFAULT_PPI));
123
- });
124
- });
125
-
126
- describe('centerY', () => {
127
- test('Computes the scroll position of the center of the screen', () => {
128
- const $container = $(`
129
- <div style="height: 500px">
130
- <div style="height: 2500px" />
131
- </div>`);
132
- $container.scrollTop(1000);
133
- expect(Mode1Up.prototype.centerY($container)).toBe(1250);
134
- });
135
-
136
- test('Handles no scroll', () => {
137
- const $container = $(`
138
- <div style="height: 1280px">
139
- <div style="height: 500px" />
140
- </div>`);
141
- expect(Mode1Up.prototype.centerY($container)).toBe(640);
142
- });
143
- });
144
-
145
- describe('centerX', () => {
146
- test('Pages narrower than viewport', () => {
147
- const $container = $(`<div style="width: 800px; height: 800px" />`);
148
- const $pagesContainer = $(`<div style="width: 500px; height: 1600px" />`)
149
- .appendTo($container);
150
- // clientWidth doesn't work in jsdom, so stub it
151
- sinon.stub($container, 'prop').returns(800);
152
- expect(Mode1Up.prototype.centerX($container, $pagesContainer)).toBe(500);
153
- });
154
-
155
- test('Pages wider than viewport', () => {
156
- const $container = $(`<div style="width: 800px; height: 800px; overflow: scroll;" />`);
157
- const $pagesContainer = $(`<div style="width: 1200px; height: 1600px" />`)
158
- .appendTo($container);
159
- $container.scrollLeft(10);
160
- // clientWidth doesn't work in jsdom, so stub it
161
- sinon.stub($container, 'prop').returns(800);
162
- expect(Mode1Up.prototype.centerX($container, $pagesContainer)).toBe(410);
163
- });
164
- });