@internetarchive/bookreader 5.0.0-11 → 5.0.0-111

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 (381) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +649 -1225
  4. package/BookReader/BookReader.js +1 -1
  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 +1904 -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 -1
  56. package/BookReader/icons/2up.svg +1 -1
  57. package/BookReader/icons/advance.svg +1 -1
  58. package/BookReader/icons/chevron-right.svg +1 -1
  59. package/BookReader/icons/close-circle-dark.svg +1 -1
  60. package/BookReader/icons/close-circle.svg +1 -1
  61. package/BookReader/icons/fullscreen.svg +1 -1
  62. package/BookReader/icons/fullscreen_exit.svg +1 -1
  63. package/BookReader/icons/hamburger.svg +1 -1
  64. package/BookReader/icons/left-arrow.svg +1 -1
  65. package/BookReader/icons/magnify-minus.svg +1 -1
  66. package/BookReader/icons/magnify-plus.svg +1 -1
  67. package/BookReader/icons/magnify.svg +1 -1
  68. package/BookReader/icons/pause.svg +1 -1
  69. package/BookReader/icons/play.svg +1 -1
  70. package/BookReader/icons/playback-speed.svg +1 -1
  71. package/BookReader/icons/read-aloud.svg +1 -1
  72. package/BookReader/icons/review.svg +1 -1
  73. package/BookReader/icons/slider-toggle.svg +1 -0
  74. package/BookReader/icons/thumbnails.svg +1 -1
  75. package/BookReader/icons/voice.svg +1 -0
  76. package/BookReader/icons/volume-full.svg +1 -1
  77. package/BookReader/images/BRicons.svg +3 -3
  78. package/BookReader/images/books_graphic.svg +1 -1
  79. package/BookReader/images/hypothesis.ico +0 -0
  80. package/BookReader/images/icon_book.svg +1 -1
  81. package/BookReader/images/icon_bookmark.svg +1 -1
  82. package/BookReader/images/icon_experiment.svg +1 -0
  83. package/BookReader/images/icon_gear.svg +1 -1
  84. package/BookReader/images/icon_hamburger.svg +1 -1
  85. package/BookReader/images/icon_home.svg +1 -1
  86. package/BookReader/images/icon_info.svg +1 -1
  87. package/BookReader/images/icon_one_page.svg +1 -1
  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 -1
  91. package/BookReader/images/icon_search_button.svg +1 -1
  92. package/BookReader/images/icon_share.svg +1 -1
  93. package/BookReader/images/icon_skip-ahead.svg +1 -1
  94. package/BookReader/images/icon_skip-back.svg +1 -1
  95. package/BookReader/images/icon_speaker.svg +1 -1
  96. package/BookReader/images/icon_speaker_open.svg +1 -1
  97. package/BookReader/images/icon_thumbnails.svg +1 -1
  98. package/BookReader/images/icon_toc.svg +1 -1
  99. package/BookReader/images/icon_two_pages.svg +1 -1
  100. package/BookReader/images/marker_chap-off.svg +1 -1
  101. package/BookReader/images/marker_chap-on.svg +1 -1
  102. package/BookReader/images/marker_srch-on.svg +1 -1
  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 -1
  108. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js +1 -1
  110. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  111. package/BookReader/plugins/plugin.chapters.js +22 -1
  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 -1
  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 -1
  122. package/BookReader/plugins/plugin.resume.js.map +1 -1
  123. package/BookReader/plugins/plugin.search.js +2 -1
  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 +24 -1
  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 +159 -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 +1 -1
  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 +2 -1
  136. package/BookReader/plugins/plugin.url.js.LICENSE.txt +1 -0
  137. package/BookReader/plugins/plugin.url.js.map +1 -1
  138. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
  139. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  140. package/BookReader/plugins/translator-worker.js +2 -0
  141. package/BookReader/plugins/translator-worker.js.map +1 -0
  142. package/BookReader/silence.mp3 +0 -0
  143. package/BookReader/translator-worker.js +475 -0
  144. package/BookReader/webcomponents-bundle.js +3 -0
  145. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  146. package/BookReader/webcomponents-bundle.js.map +1 -0
  147. package/README.md +14 -3
  148. package/jsconfig.json +19 -0
  149. package/package.json +93 -70
  150. package/src/BookReader/BookModel.js +92 -46
  151. package/src/BookReader/DragScrollable.js +233 -0
  152. package/src/BookReader/ImageCache.js +49 -16
  153. package/src/BookReader/Mode1Up.js +66 -365
  154. package/src/BookReader/Mode1UpLit.js +392 -0
  155. package/src/BookReader/Mode2Up.js +87 -1315
  156. package/src/BookReader/Mode2UpLit.js +786 -0
  157. package/src/BookReader/ModeAbstract.js +43 -0
  158. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  159. package/src/BookReader/ModeSmoothZoom.js +312 -0
  160. package/src/BookReader/ModeThumb.js +29 -15
  161. package/src/BookReader/Navbar/Navbar.js +201 -76
  162. package/src/BookReader/PageContainer.js +120 -23
  163. package/src/BookReader/ReduceSet.js +2 -2
  164. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  165. package/src/BookReader/events.js +3 -3
  166. package/src/BookReader/options.js +94 -17
  167. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  168. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  169. package/src/BookReader/utils/SelectionObserver.js +53 -0
  170. package/src/BookReader/utils/classes.js +1 -1
  171. package/src/BookReader/utils.js +136 -12
  172. package/src/BookReader.js +695 -1228
  173. package/src/BookReaderPlugin.js +52 -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 -5
  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 +16 -3
  188. package/src/css/_BRnav.scss +74 -70
  189. package/src/css/_BRpages.scss +171 -42
  190. package/src/css/_BRsearch.scss +69 -30
  191. package/src/css/_BRtoolbar.scss +5 -5
  192. package/src/css/_TextSelection.scss +188 -24
  193. package/src/css/_colorbox.scss +2 -2
  194. package/src/css/_controls.scss +24 -7
  195. package/src/css/_icons.scss +8 -1
  196. package/src/{BookNavigator/assets → css}/button-base.js +2 -2
  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 +25 -5
  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 +43 -31
  209. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  210. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
  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 +319 -205
  217. package/src/plugins/plugin.experiments.js +339 -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 +54 -51
  221. package/src/plugins/plugin.text_selection.js +539 -219
  222. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  223. package/src/plugins/search/plugin.search.js +374 -392
  224. package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
  225. package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
  226. package/src/plugins/search/utils.js +50 -0
  227. package/src/plugins/search/view.js +50 -68
  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 +20 -30
  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 +211 -0
  238. package/src/plugins/{plugin.url.js → url/plugin.url.js} +105 -20
  239. package/src/util/TextSelectionManager.js +532 -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 -50
  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 -37
  253. package/.github/workflows/npm-publish.yml +0 -47
  254. package/.testcaferc.json +0 -5
  255. package/BookReader/bookreader-component-bundle.js +0 -1450
  256. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  257. package/BookReader/bookreader-component-bundle.js.map +0 -1
  258. package/BookReader/jquery-1.10.1.js +0 -2
  259. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  260. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  261. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  262. package/BookReader/plugins/plugin.mobile_nav.js +0 -2
  263. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  264. package/BookReaderDemo/BookReaderDemo.css +0 -41
  265. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  266. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  267. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  268. package/BookReaderDemo/IIIFBookReader.js +0 -207
  269. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  270. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  273. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  274. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  275. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  276. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  277. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  278. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  279. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  280. package/BookReaderDemo/demo-advanced.html +0 -33
  281. package/BookReaderDemo/demo-autoplay.html +0 -38
  282. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  283. package/BookReaderDemo/demo-embed.html +0 -26
  284. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  285. package/BookReaderDemo/demo-fullscreen.html +0 -33
  286. package/BookReaderDemo/demo-iiif.html +0 -34
  287. package/BookReaderDemo/demo-iiif.js +0 -26
  288. package/BookReaderDemo/demo-internetarchive.html +0 -74
  289. package/BookReaderDemo/demo-multiple.html +0 -43
  290. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  291. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  292. package/BookReaderDemo/demo-simple.html +0 -34
  293. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  294. package/BookReaderDemo/immersion-1up.html +0 -64
  295. package/BookReaderDemo/immersion-mode.html +0 -35
  296. package/BookReaderDemo/toggle_controls.html +0 -53
  297. package/BookReaderDemo/view_mode.html +0 -39
  298. package/BookReaderDemo/viewmode-cycle.html +0 -41
  299. package/CHANGELOG.md +0 -495
  300. package/CONTRIBUTING.md +0 -7
  301. package/codecov.yml +0 -17
  302. package/index.html +0 -31
  303. package/karma.conf.js +0 -23
  304. package/screenshot.png +0 -0
  305. package/scripts/postversion.js +0 -10
  306. package/scripts/preversion.js +0 -14
  307. package/scripts/version.js +0 -26
  308. package/src/BookNavigator/BookModel.js +0 -14
  309. package/src/BookNavigator/BookNavigator.js +0 -446
  310. package/src/BookNavigator/assets/book-loader.js +0 -27
  311. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  312. package/src/BookNavigator/assets/icon_close.js +0 -3
  313. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  314. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  315. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  316. package/src/BookNavigator/search/a-search-result.js +0 -55
  317. package/src/BookReader/DebugConsole.js +0 -54
  318. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  319. package/src/ItemNavigator/ItemNavigator.js +0 -376
  320. package/src/ItemNavigator/providers/sharing.js +0 -29
  321. package/src/css/_MobileNav.scss +0 -194
  322. package/src/dragscrollable-br.js +0 -261
  323. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  324. package/src/plugins/plugin.mobile_nav.js +0 -287
  325. package/tests/BookReader/BookModel.test.js +0 -312
  326. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  327. package/tests/BookReader/DebugConsole.test.js +0 -25
  328. package/tests/BookReader/ImageCache.test.js +0 -150
  329. package/tests/BookReader/Mode1Up.test.js +0 -164
  330. package/tests/BookReader/Mode2Up.test.js +0 -247
  331. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  332. package/tests/BookReader/PageContainer.test.js +0 -115
  333. package/tests/BookReader/ReduceSet.test.js +0 -38
  334. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  335. package/tests/BookReader/utils/classes.test.js +0 -88
  336. package/tests/BookReader/utils.test.js +0 -109
  337. package/tests/BookReader.options.test.js +0 -39
  338. package/tests/BookReader.test.js +0 -301
  339. package/tests/e2e/README.md +0 -75
  340. package/tests/e2e/autoplay.test.js +0 -13
  341. package/tests/e2e/base.test.js +0 -35
  342. package/tests/e2e/helpers/base.js +0 -263
  343. package/tests/e2e/helpers/debug.js +0 -13
  344. package/tests/e2e/helpers/desktopSearch.js +0 -72
  345. package/tests/e2e/helpers/mobileSearch.js +0 -85
  346. package/tests/e2e/helpers/mockSearch.js +0 -93
  347. package/tests/e2e/helpers/rightToLeft.js +0 -29
  348. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  349. package/tests/e2e/models/BookReader.js +0 -11
  350. package/tests/e2e/models/Navigation.js +0 -56
  351. package/tests/e2e/rightToLeft.test.js +0 -20
  352. package/tests/e2e/viewmode.test.js +0 -37
  353. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  354. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  355. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  356. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  357. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  358. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  359. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  360. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  361. package/tests/plugins/plugin.autoplay.test.js +0 -52
  362. package/tests/plugins/plugin.chapters.test.js +0 -130
  363. package/tests/plugins/plugin.iframe.test.js +0 -42
  364. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  365. package/tests/plugins/plugin.resume.test.js +0 -98
  366. package/tests/plugins/plugin.text_selection.test.js +0 -203
  367. package/tests/plugins/plugin.url.test.js +0 -129
  368. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  369. package/tests/plugins/search/plugin.search.test.js +0 -173
  370. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  371. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  372. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  373. package/tests/plugins/tts/PageChunk.test.js +0 -57
  374. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  375. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  376. package/tests/plugins/tts/utils.test.js +0 -133
  377. package/tests/util/browserSniffing.test.js +0 -56
  378. package/tests/util/docCookies.test.js +0 -15
  379. package/tests/util/strings.test.js +0 -63
  380. package/tests/utils.js +0 -42
  381. package/webpack.config.js +0 -86
@@ -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
- });
@@ -1,247 +0,0 @@
1
-
2
- import sinon from 'sinon';
3
- import { deepCopy } from '../utils.js';
4
- import BookReader from '../../src/BookReader.js';
5
- /** @typedef {import('../../src/BookReader/options.js').BookReaderOptions} BookReaderOptions */
6
-
7
- beforeAll(() => {
8
- global.alert = jest.fn();
9
- });
10
- afterEach(() => {
11
- jest.restoreAllMocks();
12
- sinon.restore();
13
- });
14
-
15
- /** @type {BookReaderOptions['data']} */
16
- const SAMPLE_DATA = [
17
- [
18
- { width: 123, height: 123, uri: 'https://archive.org/image0.jpg', pageNum: '1' },
19
- ],
20
- [
21
- { width: 123, height: 123, uri: 'https://archive.org/image1.jpg', pageNum: '2' },
22
- { width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '3' },
23
- ],
24
- [
25
- { width: 123, height: 123, uri: 'https://archive.org/image3.jpg', pageNum: '4' },
26
- { width: 123, height: 123, uri: 'https://archive.org/image4.jpg', pageNum: '5' },
27
- ],
28
- [
29
- { width: 123, height: 123, uri: 'https://archive.org/image5.jpg', pageNum: '6' },
30
- ],
31
- ];
32
-
33
-
34
- describe('zoom', () => {
35
- const br = new BookReader({ data: SAMPLE_DATA });
36
- br.init();
37
-
38
- const stopAnim = sinon.spy(br, 'stopFlipAnimations');
39
- const resizeSpread = sinon.spy(br._modes.mode2Up, 'resizeSpread');
40
- br._modes.mode2Up.zoom('in');
41
-
42
- test('stops animations when zooming', () => {
43
- expect(stopAnim.callCount).toBe(1);
44
- });
45
- test('always redraws when zooming', () => {
46
- expect(resizeSpread.callCount).toBe(0);
47
- });
48
- });
49
-
50
- describe('prefetch', () => {
51
- test('loads nearby pages', () => {
52
- const br = new BookReader({ data: SAMPLE_DATA });
53
- const mode2Up = br._modes.mode2Up;
54
- br.init();
55
- mode2Up.prefetch();
56
- expect(Object.keys(mode2Up.pageContainers).length).toBeGreaterThan(2);
57
- });
58
-
59
- test('works when at end of book', () => {
60
- const br = new BookReader({ data: SAMPLE_DATA });
61
- const mode2Up = br._modes.mode2Up;
62
- br.init();
63
- br.jumpToIndex(-1);
64
- mode2Up.prefetch();
65
- expect(Object.keys(mode2Up.pageContainers).length).toBeGreaterThan(2);
66
- });
67
-
68
- test('skips consecutive unviewables', () => {
69
- const data = deepCopy(SAMPLE_DATA);
70
- data[1].forEach(page => page.viewable = false);
71
- const br = new BookReader({ data });
72
- const mode2Up = br._modes.mode2Up;
73
- br.init();
74
- mode2Up.prefetch();
75
- expect(mode2Up.pageContainers).not.toContain(2);
76
- });
77
- });
78
-
79
- describe('draw 2up leaves', () => {
80
- test('calls `drawLeafs` on init as default', () => {
81
- const br = new BookReader({ data: SAMPLE_DATA });
82
- const drawLeafs = sinon.spy(br._modes.mode2Up, 'drawLeafs');
83
-
84
- br.init();
85
- expect(drawLeafs.callCount).toBe(1);
86
- });
87
-
88
- test('sets `this.displayedIndices`', () => {
89
- const extremelyWrongValueForDisplayedIndices = null;
90
- const br = new BookReader({ data: SAMPLE_DATA });
91
-
92
- br.init();
93
- br.displayedIndices = extremelyWrongValueForDisplayedIndices;
94
- expect(br.displayedIndices).toBe(extremelyWrongValueForDisplayedIndices);
95
-
96
- br._modes.mode2Up.drawLeafs();
97
-
98
- expect(br.displayedIndices).not.toBe(extremelyWrongValueForDisplayedIndices);
99
- expect(br.displayedIndices.length).toBe(2); // is array
100
- expect(br.displayedIndices).toEqual([-1, 0]); // default to starting index on right, placeholder for left
101
- });
102
- });
103
-
104
- describe('resizeSpread', () => {
105
- test('only resizes spread', () => {
106
- const br = new BookReader({ data: SAMPLE_DATA });
107
- br.init();
108
- const resizeBRcontainer = sinon.spy(br, 'resizeBRcontainer');
109
- const calculateSpreadSize = sinon.spy(br._modes.mode2Up, 'calculateSpreadSize');
110
- const drawLeafs = sinon.spy(br._modes.mode2Up, 'drawLeafs');
111
- const centerView = sinon.spy(br._modes.mode2Up, 'centerView');
112
-
113
- br._modes.mode2Up.resizeSpread();
114
- expect(drawLeafs.callCount).toBe(0); // no draw
115
- expect(resizeBRcontainer.callCount).toBe(1);
116
- expect(calculateSpreadSize.callCount).toBe(1);
117
- expect(centerView.callCount).toBe(1);
118
- });
119
- });
120
-
121
- describe('2up Container sizing', () => {
122
- test('baseLeafCss', () => {
123
- const br = new BookReader({ data: SAMPLE_DATA });
124
- br.init();
125
- br.calculateSpreadSize();
126
- expect(Object.keys(br._modes.mode2Up.baseLeafCss)).toEqual(['position', 'right', 'top', 'zIndex']);
127
- });
128
- test('heightCss', () => {
129
- const br = new BookReader({ data: SAMPLE_DATA });
130
- br.init();
131
- br.calculateSpreadSize();
132
- const heightStub = 1000;
133
- br.twoPage.height = heightStub;
134
- expect(Object.keys(br._modes.mode2Up.heightCss)).toEqual(['height']);
135
- expect(br._modes.mode2Up.heightCss).toEqual({height: `${heightStub}px`});
136
- });
137
- describe('left side', () => {
138
- const br = new BookReader({ data: SAMPLE_DATA });
139
- br.init();
140
- br.calculateSpreadSize();
141
-
142
- test('leftLeafCss', () => {
143
- expect(Object.keys(br._modes.mode2Up.leftLeafCss)).toEqual([
144
- 'position',
145
- 'right',
146
- 'top',
147
- 'zIndex',
148
- 'height',
149
- 'left',
150
- 'width',
151
- ]);
152
- });
153
- test('leafEdgeLCss', () => {
154
- expect(Object.keys(br._modes.mode2Up.leafEdgeLCss)).toEqual([
155
- 'height',
156
- 'width',
157
- 'left',
158
- 'top',
159
- 'border'
160
- ]);
161
- });
162
- });
163
- describe('right side', () => {
164
- const br = new BookReader({ data: SAMPLE_DATA });
165
- br.init();
166
- br.calculateSpreadSize();
167
-
168
- test('rightLeafCss', () => {
169
- expect(Object.keys(br._modes.mode2Up.rightLeafCss)).toEqual([
170
- 'position',
171
- 'right',
172
- 'top',
173
- 'zIndex',
174
- 'height',
175
- 'left',
176
- 'width',
177
- ]);
178
- });
179
- test('leafEdgeRCss', () => {
180
- expect(Object.keys(br._modes.mode2Up.leafEdgeRCss)).toEqual([
181
- 'height',
182
- 'width',
183
- 'left',
184
- 'top',
185
- 'border'
186
- ]);
187
- });
188
- });
189
- describe('full width container, overlay + spine', () => {
190
- test('mainContainerCss', () => {
191
- const br = new BookReader({ data: SAMPLE_DATA });
192
- br.init();
193
- br.calculateSpreadSize();
194
-
195
- expect(Object.keys(br._modes.mode2Up.mainContainerCss)).toEqual(['height', 'width', 'position']);
196
- });
197
- test('spreadCoverCss', () => {
198
- const br = new BookReader({ data: SAMPLE_DATA });
199
- br.init();
200
- br.calculateSpreadSize();
201
- expect(Object.keys(br._modes.mode2Up.spreadCoverCss)).toEqual(['width', 'height', 'visibility']);
202
- });
203
- test('spineCss', () => {
204
- const br = new BookReader({ data: SAMPLE_DATA });
205
- br.init();
206
- br.calculateSpreadSize();
207
- expect(Object.keys(br._modes.mode2Up.spineCss)).toEqual(['width', 'height', 'left', 'top']);
208
- });
209
- });
210
- });
211
-
212
- describe('prepareTwoPageView', () => {
213
- describe('drawing spread', () => {
214
- test('always draws new spread if `drawNewSpread` is true ', () => {
215
- const br = new BookReader({ data: SAMPLE_DATA });
216
- const mode2Up = br._modes.mode2Up;
217
- br.init();
218
- const drawLeafs = sinon.spy(mode2Up, 'drawLeafs');
219
- const resizeSpread = sinon.spy(mode2Up, 'resizeSpread');
220
- const calculateSpreadSize = sinon.spy(mode2Up, 'calculateSpreadSize');
221
- const prunePageContainers = sinon.spy(mode2Up, 'prunePageContainers');
222
- const prefetch = sinon.spy(mode2Up, 'prefetch');
223
- const bindGestures = sinon.spy(br, 'bindGestures');
224
- const centerView = sinon.spy(mode2Up, 'centerView');
225
- const preparePopUp = sinon.spy(mode2Up, 'preparePopUp');
226
- const updateBrClasses = sinon.spy(br, 'updateBrClasses');
227
-
228
- br.prepareTwoPageView(undefined, undefined, true);
229
- expect(prefetch.callCount).toBe(1);
230
-
231
- expect(resizeSpread.callCount).toBe(0);
232
- expect(drawLeafs.callCount).toBe(1);
233
- expect(calculateSpreadSize.callCount).toBe(1);
234
- expect(prunePageContainers.callCount).toBe(1);
235
- expect(bindGestures.callCount).toBe(1);
236
- expect(centerView.callCount).toBe(1);
237
- expect(preparePopUp.callCount).toBe(1);
238
- expect(updateBrClasses.callCount).toBe(1);
239
- });
240
- });
241
- });
242
-
243
- test('uses ImageCache', () => {
244
- const br = new BookReader({ data: SAMPLE_DATA });
245
- br.init();
246
- expect(Object.keys(br.imageCache.cache).length).toBeGreaterThan(2);
247
- });
@@ -1,169 +0,0 @@
1
- import sinon from 'sinon';
2
- import { getNavPageNumHtml } from '../../../src/BookReader/Navbar/Navbar.js';
3
- import BookReader from '../../../src/BookReader.js';
4
-
5
- describe('getNavPageNumHtml', () => {
6
- const f = getNavPageNumHtml;
7
- test('handle n-prefixed page numbers', () => {
8
- expect(f(3, 40, 'n3', '', 40)).toBe('(4 of 40)');
9
- });
10
-
11
- test('handle regular page numbers', () => {
12
- expect(f(3, 40, '14', '', 40)).toBe('14 of 40');
13
- });
14
-
15
- test('handle no max page', () => {
16
- expect(f(3, 40, '14', '', null)).toBe('14');
17
- });
18
- });
19
-
20
- /** @type {BookReader} */
21
- let br;
22
- /** @type {Navbar} */
23
- let navbar;
24
- beforeEach(() => {
25
- document.body.innerHTML = '<div id="BookReader">';
26
- br = new BookReader({
27
- data: [
28
- [
29
- { width: 800, height: 1200,
30
- uri: '//archive.org/download/BookReader/img/page001.jpg' },
31
- ],
32
- [
33
- { width: 800, height: 1200,
34
- uri: '//archive.org/download/BookReader/img/page002.jpg' },
35
- { width: 800, height: 1200,
36
- uri: '//archive.org/download/BookReader/img/page003.jpg' },
37
- ],
38
- [
39
- { width: 800, height: 1200,
40
- uri: '//archive.org/download/BookReader/img/page004.jpg' },
41
- { width: 800, height: 1200,
42
- uri: '//archive.org/download/BookReader/img/page005.jpg' },
43
- ]
44
- ],
45
- });
46
- br.init();
47
- navbar = br._components.navbar;
48
- });
49
-
50
- afterEach(() => sinon.restore());
51
-
52
- describe('Navbar slider', () => {
53
- test('while sliding, visible page number updates, but does not flip', () => {
54
- const $slider = navbar.$root.find('.BRpager');
55
- const jumpToIndexSpy = sinon.spy(br, 'jumpToIndex');
56
- expect(br.currentIndex()).toBe(0);
57
-
58
- $slider.trigger('slide', { value: 3 });
59
-
60
- expect(navbar.$root.find('.BRcurrentpage').text().includes('3'));
61
- expect(jumpToIndexSpy.callCount).toBe(0);
62
- });
63
-
64
- test('on slide change, actual page changes', () => {
65
- const $slider = navbar.$root.find('.BRpager');
66
- const jumpToIndexSpy = sinon.spy(br, 'jumpToIndex');
67
- expect(br.currentIndex()).toBe(0);
68
-
69
- $slider.trigger('slidechange', { value: 3 });
70
-
71
- expect(navbar.$root.find('.BRcurrentpage').text().includes('3'));
72
- expect(jumpToIndexSpy.callCount).toBe(1);
73
- expect(jumpToIndexSpy.args[0][0]).toBe(3);
74
- });
75
- });
76
-
77
- describe('Navbar controls overrides', () => {
78
- const createBRWithOverrides = (overrides) => {
79
- br = new BookReader($.extend(true, br.options, overrides));
80
- br.init();
81
- navbar = br._components.navbar;
82
- };
83
-
84
- test(`when a view mode is excluded,
85
- the mode should not be used in viewport toggling`, () => {
86
- const overrides = {
87
- controls: {
88
- viewmode: {
89
- visible: true,
90
- className: 'viewmode',
91
- excludedModes: [1],
92
- }
93
- }
94
- };
95
- createBRWithOverrides(overrides);
96
-
97
- const $viewMode = navbar.$root.find('.viewmode');
98
-
99
- expect($viewMode.find('.icon-thumb').length).toBe(1);
100
- $viewMode.click();
101
- expect($viewMode.find('.icon-twopg').length).toBe(1);
102
- $viewMode.click();
103
- expect($viewMode.find('.icon-thumb').length).toBe(1);
104
- });
105
-
106
- test('when a control is set to visible: false, do not return a button template', () => {
107
- const overrides = {
108
- controls: {
109
- onePage: {
110
- visible: false
111
- }
112
- }
113
- };
114
- createBRWithOverrides(overrides);
115
-
116
- expect(navbar.$root.find('.onepg').length).toBe(0);
117
- expect(navbar.$root.find('.twopg').length).toBe(1);
118
- });
119
-
120
- test(`when a control's className is overridden,
121
- the class should be used in place of the default`, () => {
122
- const overrides = {
123
- controls: {
124
- onePage: {
125
- className: 'foo'
126
- }
127
- }
128
- };
129
- createBRWithOverrides(overrides);
130
-
131
- expect(navbar.$root.find(`.${overrides.controls.onePage.className}`).length).toBe(1);
132
- expect(navbar.$root.find('.onepg').length).toBe(0);
133
- });
134
-
135
- test(`when a control's template is overridden,
136
- the HTML output should match the template provided`, () => {
137
- const overrides = {
138
- controls: {
139
- onePage: {
140
- template: () => (
141
- '<button id="foo"></button>'
142
- )
143
- }
144
- }
145
- };
146
- createBRWithOverrides(overrides);
147
-
148
- expect(navbar.$root.find('#foo').length).toBe(1);
149
- expect(navbar.$root.find('.onepg').length).toBe(0);
150
- });
151
-
152
- test(`when viewmode control set to visible,
153
- the individual view mode controls are not rendered`, () => {
154
- const overrides = {
155
- controls: {
156
- viewmode: {
157
- visible: true
158
- },
159
- onePage: {
160
- visible: false
161
- }
162
- }
163
- };
164
- createBRWithOverrides(overrides);
165
-
166
- expect(navbar.$root.find('.viewmode').length).toBe(1);
167
- expect(navbar.$root.find('.onepg').length).toBe(0);
168
- });
169
- });
@@ -1,115 +0,0 @@
1
- import {PageContainer} from '../../src/BookReader/PageContainer.js';
2
-
3
- describe('constructor', () => {
4
- test('protected books', () => {
5
- const pc = new PageContainer(null, {isProtected: true});
6
- expect(pc.$container.hasClass('protected')).toBe(true);
7
- expect(pc.$container.find('.BRscreen').length).toBe(1);
8
- });
9
-
10
- test('non-protected books', () => {
11
- const pc = new PageContainer(null, {isProtected: false});
12
- expect(pc.$container.hasClass('protected')).toBe(false);
13
- expect(pc.$container.find('.BRscreen').length).toBe(0);
14
- });
15
-
16
- test('empty page', () => {
17
- const pc = new PageContainer(null, {isProtected: false});
18
- expect(pc.$container.hasClass('BRemptypage')).toBe(true);
19
- });
20
-
21
- test('non-empty page', () => {
22
- const pc = new PageContainer({index: 7}, {isProtected: false});
23
- expect(pc.$container.hasClass('BRemptypage')).toBe(false);
24
- expect(pc.$container.hasClass('pagediv7')).toBe(true);
25
- });
26
-
27
- test('adds side attribute', () => {
28
- const pc = new PageContainer({index: 7, pageSide: 'R'}, {isProtected: false});
29
- expect(pc.$container.hasClass('BRemptypage')).toBe(false);
30
- expect(pc.$container.attr('data-side')).toBe('R');
31
- });
32
- });
33
-
34
- describe('update', async () => {
35
- test('dimensions sets CSS', () => {
36
- const pc = new PageContainer(null, {});
37
- pc.update({ dimensions: { left: 20 } });
38
- expect(pc.$container[0].style.left).toBe('20px');
39
- });
40
-
41
- test('does not create image if empty page', () => {
42
- const pc = new PageContainer(null, {});
43
- pc.update({ reduce: null });
44
- expect(pc.$img).toBeNull();
45
- pc.update({ reduce: 7 });
46
- expect(pc.$img).toBeNull();
47
- });
48
-
49
- test('does not create image if no reduce', () => {
50
- const pc = new PageContainer({index: 17}, {});
51
- pc.update({ reduce: null });
52
- expect(pc.$img).toBeNull();
53
- });
54
-
55
- test('does not set background image if already loaded', () => {
56
- const fakeImageCache = {
57
- imageLoaded: () => true,
58
- image: () => $('<img/>'),
59
- };
60
- const pc = new PageContainer({index: 12}, {imageCache: fakeImageCache});
61
- pc.update({ reduce: 7 });
62
- expect(pc.$img[0].style.background).toBe('');
63
- });
64
-
65
- test('removes image between updates', () => {
66
- const fakeImageCache = {
67
- imageLoaded: () => true,
68
- image: () => $('<img/>'),
69
- };
70
- const pc = new PageContainer({index: 12}, {imageCache: fakeImageCache});
71
- pc.update({ reduce: 7 });
72
- const $im1 = pc.$img;
73
- pc.update({ reduce: 7 });
74
- const $im2 = pc.$img;
75
- expect($im1).not.toBe($im2);
76
- expect($im1.parent().length).toBe(0);
77
- });
78
-
79
- test('adds/removes loading indicators while loading', () => {
80
- const fakeImageCache = {
81
- imageLoaded: () => false,
82
- image: () => $('<img/>'),
83
- getBestLoadedReduce: () => undefined,
84
- };
85
- const pc = new PageContainer({index: 12}, {imageCache: fakeImageCache, loadingImage: 'loading.gif'});
86
- pc.update({ reduce: 7 });
87
- expect(pc.$container.hasClass('BRpageloading')).toBe(true);
88
- // See https://github.com/jsdom/jsdom/issues/3169
89
- // expect(pc.$img.css('background')).toBeTruthy();
90
- // expect(pc.$img.css('background').includes('loading.gif')).toBe(true);
91
- // expect(pc.$img.css('background').includes(',')).toBe(false);
92
-
93
- pc.$img.trigger('loadend');
94
- expect(pc.$container.hasClass('BRpageloading')).toBe(false);
95
- expect(pc.$img.css('background')).toBeFalsy();
96
- });
97
-
98
- test('shows lower res image while loading if one available', () => {
99
- const fakeImageCache = {
100
- imageLoaded: () => false,
101
- image: () => $('<img/>'),
102
- getBestLoadedReduce: () => 3,
103
- };
104
- const fakePage = {
105
- index: 12,
106
- getURI: () => 'page12.jpg',
107
- };
108
- const pc = new PageContainer(fakePage, {imageCache: fakeImageCache, loadingImage: 'loading.gif'});
109
- pc.update({ reduce: 7 });
110
- // See https://github.com/jsdom/jsdom/issues/3169
111
- // expect(pc.$img.css('background').includes('page12.jpg')).toBe(true);
112
- pc.$img.trigger('loadend');
113
- expect(pc.$img.css('background')).toBeFalsy();
114
- });
115
- });