@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,287 +0,0 @@
1
- /* global BookReader */
2
- /**
3
- * Adds mobile navigation at responsive breakpoint
4
- */
5
-
6
- import * as utils from '../BookReader/utils.js';
7
- import 'jquery.mmenu/dist/js/jquery.mmenu.min.js';
8
- import 'jquery.mmenu/dist/addons/navbars/jquery.mmenu.navbars.min.js';
9
-
10
- //contains all filters and labels for checkboxs
11
- const FILTERLIST = [
12
- {
13
- filter: "grayscale(100%)",
14
- label: "Grayscale"
15
- },
16
- {
17
- filter: "brightness(120%)",
18
- label: "High brightness"
19
- },
20
- {
21
- filter: "invert(100%)",
22
- label: "Inverted (dark mode)"
23
- },
24
- {
25
- filter: "contrast(120%)",
26
- label: "High contrast"
27
- },
28
- ]
29
-
30
- jQuery.extend(BookReader.defaultOptions, {
31
- enableMobileNav: true,
32
- mobileNavTitle: 'Internet Archive',
33
- mobileNavFullscreenOnly: false,
34
- });
35
-
36
- BookReader.prototype.setup = (function(super_) {
37
- return function (options) {
38
- super_.call(this, options);
39
-
40
- this.enableMobileNav = options.enableMobileNav;
41
- this.mobileNavTitle = options.mobileNavTitle;
42
- this.mobileNavFullscreenOnly = options.mobileNavFullscreenOnly;
43
-
44
- this.refs.$mmenu = null;
45
- };
46
- })(BookReader.prototype.setup);
47
-
48
-
49
- // Extend initToolbar
50
- BookReader.prototype.initToolbar = (function (super_) {
51
- return function (mode, ui) {
52
- let $mmenuEl;
53
- if (this.enableMobileNav) {
54
- const $drawerEl = this.buildMobileDrawerElement();
55
- this.refs.$br.append($drawerEl);
56
-
57
- // Render info into mobile info before mmenu
58
- this.buildInfoDiv(this.$('.BRmobileInfo'));
59
- this.buildShareDiv(this.$('.BRmobileShare'));
60
-
61
- $mmenuEl = $drawerEl;
62
- $mmenuEl.mmenu({
63
- navbars: [
64
- { "position": "top" },
65
- ],
66
- navbar: {
67
- add: true,
68
- title: this.mobileNavTitle,
69
- titleLink: 'panel'
70
- },
71
- extensions: [ "panelshadow" ],
72
- }, {
73
- offCanvas: {
74
- wrapPageIfNeeded: false,
75
- zposition: 'next',
76
- pageSelector: this.el,
77
- }
78
- });
79
-
80
- const $BRpageviewField = $mmenuEl.find('.BRpageviewValue');
81
- $mmenuEl.data('mmenu').bind('opened', () => {
82
- // Update "Link to this page view" link
83
- if ($BRpageviewField.length) {
84
- $BRpageviewField.val(window.location.href);
85
- }
86
- });
87
-
88
- //apply filters when checkboxs clicked
89
- $drawerEl.find('.BRcheckbox-filters').click(() => applyFilters($drawerEl, this));
90
-
91
- // Bind mobile switch buttons
92
- $drawerEl.find('.DrawerLayoutButton.one_page_mode').click(
93
- () => this.switchMode(this.constMode1up));
94
- $drawerEl.find('.DrawerLayoutButton.two_page_mode').click(
95
- () => this.switchMode(this.constMode2up));
96
- $drawerEl.find('.DrawerLayoutButton.thumbnail_mode').click(
97
- () => this.switchMode(this.constModeThumb));
98
-
99
- if (this.mobileNavFullscreenOnly) {
100
- $(document.body).addClass('BRbodyMobileNavEnabledFullscreen');
101
- } else {
102
- $(document.body).addClass('BRbodyMobileNavEnabled');
103
- }
104
-
105
- this.refs.$mmenu = $mmenuEl;
106
-
107
- }
108
-
109
- // Call the parent method at the end, because it binds events to DOM
110
- super_.apply(this, arguments);
111
-
112
-
113
- if (this.enableMobileNav) {
114
- // Need to bind more, console after toolbar is initialized
115
- this.$('.BRmobileHamburger').click(() => {
116
- if ($mmenuEl.data('mmenu').getInstance().vars.opened) {
117
- $mmenuEl.data('mmenu').close();
118
- } else {
119
- $mmenuEl.data('mmenu').open();
120
- this.trigger("mobileNavOpen");
121
- }
122
- });
123
-
124
-
125
- const closeMobileMenu = (e) => {
126
- // Need to close the mobile menu to reset DOM & Style
127
- // driven by menu plugin
128
- const width = $( window ).width();
129
- const mobileMenuIsOpen = $mmenuEl.data('mmenu').getInstance().vars.opened;
130
- // $brBreakPointMobile: 800px;
131
- if (mobileMenuIsOpen && (width >= 800)) {
132
- $mmenuEl.data('mmenu').close ();
133
- }
134
- };
135
-
136
- window.addEventListener('resize', utils.debounce(closeMobileMenu, 900));
137
- }
138
- };
139
- })(BookReader.prototype.initToolbar);
140
-
141
-
142
- BookReader.prototype.buildToolbarElement = (function (super_) {
143
- return function () {
144
- const $el = super_.call(this);
145
- if (this.enableMobileNav) {
146
- const escapedTitle = BookReader.util.escapeHTML(this.bookTitle);
147
- const toolbar = `
148
- <span class="BRmobileHamburgerWrapper">
149
- <button class="BRmobileHamburger"></button>
150
- <span class="BRtoolbarMobileTitle" title="${escapedTitle}">${escapedTitle}</span>
151
- </span>
152
- `;
153
- $el
154
- .addClass('responsive')
155
- .prepend($(toolbar));
156
- }
157
- return $el;
158
- };
159
- })(BookReader.prototype.buildToolbarElement);
160
-
161
- /**
162
- * This method builds the html for the mobile drawer. It can be decorated to
163
- * extend the default drawer.
164
- * @return {jqueryElement}
165
- */
166
- BookReader.prototype.buildMobileDrawerElement = function() {
167
- let experimentalHtml = '';
168
- //builds filters checkbox html
169
- if (this.enableExperimentalControls) {
170
- experimentalHtml = `
171
- <p class="DrawerSettingsTitle">Visual Adjustment</p>
172
- <div class="BRcheckbox-group-filters">
173
- `;
174
- FILTERLIST.forEach( (el, i) => {
175
- const checkboxHtml = `
176
- <input type="checkbox" class="BRcheckbox-filters" id="filter${i}">
177
- <label for="filter${i}" class="BRcheckbox-label-filters">${el.label}</label><br>
178
-
179
- `;
180
- experimentalHtml = experimentalHtml.concat(checkboxHtml);
181
- })
182
- experimentalHtml = experimentalHtml.concat("</div>");
183
- }
184
-
185
-
186
- const settingsSection = `
187
- <span>
188
- <span class="DrawerIconWrapper">
189
- <img class="DrawerIcon" src="${`${this.imagesBaseURL}icon_gear.svg`}" alt="settings-icon"/>
190
- </span>
191
- Settings
192
- </span>
193
- <div class=DrawerSettingsWrapper>
194
- <div class="DrawerSettingsLayoutWrapper">
195
- <button class="DrawerLayoutButton one_page_mode">
196
- <img src="${this.imagesBaseURL}icon_one_page.svg" alt="Single Page"/>
197
- <br>
198
- One Page
199
- </button>
200
- <button class="DrawerLayoutButton two_page_mode TwoPagesButton">
201
- <img src="${this.imagesBaseURL}icon_two_pages.svg" alt="Two Pages"/>
202
- <br>
203
- Two Pages
204
- </button>
205
- <button class="DrawerLayoutButton thumbnail_mode">
206
- <img src="${this.imagesBaseURL}icon_thumbnails.svg" alt="Thumbnails"/>
207
- <br>
208
- Thumbnails
209
- </button>
210
- </div>
211
- <br>
212
- <div class="DrawerSettingsTitle">Zoom</div>
213
- <button class='BRicon zoom_out'></button>
214
- <button class='BRicon zoom_in'></button>
215
- <br style="clear:both"><br><br>
216
- ${experimentalHtml}
217
- </div>
218
- `;
219
- const moreInfo = `
220
- <span>
221
- <span class="DrawerIconWrapper ">
222
- <img class="DrawerIcon" src="${this.imagesBaseURL}icon_info.svg" alt="info-icon"/>
223
- </span>
224
- About This Book
225
- </span>
226
- <div class="BRmobileInfo"></div>
227
- `;
228
- const share = `
229
- <span>
230
- <span class="DrawerIconWrapper">
231
- <img class="DrawerIcon" src="${this.imagesBaseURL}icon_share.svg" alt="info-share"/>
232
- </span>
233
- Share This Book
234
- </span>
235
- <div class="BRmobileShare"></div>
236
- `;
237
- const navMenu = `
238
- <nav id="BRmobileMenu" class="BRmobileMenu">
239
- <ul>
240
- <li class="BRmobileMenu__settings">${settingsSection}</li>
241
- <li class="BRmobileMenu__moreInfoRow">${moreInfo}</li>
242
- <li class="BRmobileMenu__share">${share}</li>
243
- </ul>
244
- </nav>
245
- `;
246
-
247
- const $el = $(navMenu);
248
- return $el;
249
- };
250
-
251
- /**
252
- * Mmenu moves itself out side of the root BookReader element, so we need to
253
- * include it in the scoped $ function.
254
- */
255
- BookReader.prototype.$ = (function (super_) {
256
- return function (arg) {
257
- let $results = super_.call(this, arg);
258
- if (this.refs.$mmenu) {
259
- $results = $results.add(this.refs.$mmenu.find(arg));
260
- }
261
- return $results;
262
- };
263
- })(BookReader.prototype.$);
264
-
265
- /**
266
- * Dynamically creates styles combining different filters for BookReaders imgs
267
- * based on filters checkbox
268
- */
269
- const applyFilters = (drawerEl, br) => {
270
- let filterStr = "";
271
-
272
- $('.BRcheckbox-filters').each(
273
- (i, el) => {
274
- br.refs.$br.removeClass("filter-applied");
275
- if ($(el).is(':checked')) {
276
- br.refs.$br.addClass($(el).attr("filter-applied"));
277
- filterStr = filterStr + FILTERLIST[i].filter;
278
- }
279
- }
280
- );
281
- const filtersSheet = $("#filtersStyle")[0] || document.createElement('style');
282
- filtersSheet.id = "filtersStyle";
283
- filtersSheet.innerHTML = `.BRpagecontainer img {
284
- filter: ${filterStr};
285
- -webkit-filter: ${filterStr};}`;
286
- document.body.appendChild(filtersSheet);
287
- }
@@ -1,312 +0,0 @@
1
- import sinon from 'sinon';
2
- import { deepCopy } from '../utils.js';
3
- import { BookModel } from '../../src/BookReader/BookModel.js';
4
- /** @typedef {import('../../src/BookReader/options.js').BookReaderOptions} BookReaderOptions */
5
-
6
- afterEach(() => {
7
- sinon.restore();
8
- });
9
-
10
- /** @type {BookReaderOptions['data']} */
11
- const SAMPLE_DATA = [
12
- [
13
- { width: 123, height: 123, uri: 'https://archive.org/image0.jpg', pageNum: '1' },
14
- ],
15
- [
16
- { width: 123, height: 123, uri: 'https://archive.org/image1.jpg', pageNum: '2' },
17
- { width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '3' },
18
- ],
19
- [
20
- { width: 123, height: 123, uri: 'https://archive.org/image3.jpg', pageNum: '4' },
21
- ],
22
- ];
23
-
24
- describe('getMedianPageSize', () => {
25
- test('handles single page data', () => {
26
- const bm = new BookModel({ data: SAMPLE_DATA.slice(0, 1) });
27
- expect(bm.getMedianPageSize()).toEqual({ width: 123, height: 123 });
28
- });
29
-
30
- test('handles odd pages data', () => {
31
- const sizes = [
32
- {width: 300, height: 2200},
33
- {width: 200, height: 2100},
34
- {width: 100, height: 2300},
35
- ];
36
- const data = deepCopy(SAMPLE_DATA);
37
- delete data[2];
38
- Object.assign(data[0][0], sizes[0]);
39
- Object.assign(data[1][0], sizes[1]);
40
- Object.assign(data[1][1], sizes[2]);
41
- const bm = new BookModel({ data });
42
- expect(bm.getMedianPageSize()).toEqual({ width: 200, height: 2200 });
43
- });
44
-
45
-
46
- test('handles even pages data', () => {
47
- const sizes = [
48
- {width: 300, height: 2200},
49
- {width: 200, height: 2100},
50
- {width: 100, height: 2300},
51
- {width: 400, height: 2400},
52
- ];
53
- const data = deepCopy(SAMPLE_DATA);
54
- Object.assign(data[0][0], sizes[0]);
55
- Object.assign(data[1][0], sizes[1]);
56
- Object.assign(data[1][1], sizes[2]);
57
- Object.assign(data[2][0], sizes[3]);
58
- const bm = new BookModel({ data });
59
- expect(bm.getMedianPageSize()).toEqual({ width: 300, height: 2300 });
60
- });
61
-
62
- test('caches result', () => {
63
- const bm = new BookModel({ data: SAMPLE_DATA });
64
- const firstResult = bm.getMedianPageSize();
65
- expect(bm.getMedianPageSize()).toBe(firstResult);
66
- expect(bm.getMedianPageSize()).toBe(firstResult);
67
- expect(bm.getMedianPageSize()).toBe(firstResult);
68
- });
69
- });
70
-
71
- describe('getPageIndices', () => {
72
- test('handles unique indices', () => {
73
- const bm = new BookModel({ data: SAMPLE_DATA });
74
- expect(bm.getPageIndices('1')).toEqual([0]);
75
- });
76
-
77
- test('handles invalid indices', () => {
78
- const bm = new BookModel({ data: SAMPLE_DATA });
79
- expect(bm.getPageIndices('foo')).toEqual([]);
80
- expect(bm.getPageIndices('123')).toEqual([]);
81
- });
82
-
83
- test('handles non-unique indices', () => {
84
- const data = deepCopy(SAMPLE_DATA);
85
- data[0][0].pageNum = '2';
86
- const bm = new BookModel({ data });
87
- expect(bm.getPageIndices('2')).toEqual([0, 1]);
88
- });
89
-
90
- test('handles n-prefixed pages', () => {
91
- const data = deepCopy(SAMPLE_DATA);
92
- data[0][0].pageNum = 'n0';
93
- const bm = new BookModel({ data });
94
- expect(bm.getPageIndices('n0')).toEqual([0]);
95
- });
96
- });
97
-
98
- test('getPageName', () => {
99
- const bm = new BookModel({ data: SAMPLE_DATA });
100
- expect(bm.getPageName(0)).toEqual('Page 1');
101
- expect(bm.getPageName(1)).toEqual('Page 2');
102
- });
103
-
104
- describe('numLeafs', () => {
105
- test('reads from data', () => {
106
- const bm = new BookModel({ data: SAMPLE_DATA });
107
- expect(bm.getNumLeafs()).toBe(4);
108
- });
109
-
110
- test('numLeafs can be overriden', () => {
111
- const bm = new BookModel({ data: SAMPLE_DATA, numLeafs: 12 });
112
- expect(bm.getNumLeafs()).toBe(12);
113
- });
114
- });
115
-
116
- test('getPageNum', () => {
117
- const bm = new BookModel({ data: SAMPLE_DATA });
118
- expect(bm.getPageNum(0)).toBe('1');
119
- });
120
-
121
- test('getPageProp gets values from correct document', () => {
122
- const bm = new BookModel({ data: SAMPLE_DATA });
123
- expect(bm.getPageProp(1, 'uri')).toBe(SAMPLE_DATA[1][0].uri);
124
- });
125
-
126
- describe('getSpreadIndices', () => {
127
- test('Works for left to right text', () => {
128
- const bm = new BookModel({ data: SAMPLE_DATA, pageProgression: 'lr' });
129
- expect(bm.getSpreadIndices(1)).toEqual([1, 2]);
130
- expect(bm.getSpreadIndices(2)).toEqual([1, 2]);
131
- });
132
- });
133
-
134
- describe('leafNumToIndex', () => {
135
- test('returns input if no leafNum in data', () => {
136
- const bm = new BookModel({ data: SAMPLE_DATA });
137
- expect(bm.leafNumToIndex(1)).toBe(1);
138
- expect(bm.leafNumToIndex(2)).toBe(2);
139
- expect(bm.leafNumToIndex(3)).toBe(3);
140
- });
141
-
142
- test('returns true index when leafNum does not point to index', () => {
143
- const data = deepCopy(SAMPLE_DATA);
144
- for (const spread of data) {
145
- for (const page of spread) {
146
- page.leafNum = parseFloat(page.pageNum) + 2;
147
- }
148
- }
149
-
150
- const bm = new BookModel({ data });
151
- expect(bm.leafNumToIndex(3)).toBe(0);
152
- });
153
- });
154
-
155
- describe('parsePageString', () => {
156
- test('handles leaf-prefixed PageString', () => {
157
- const data = deepCopy(SAMPLE_DATA);
158
- for (const spread of data) {
159
- for (const page of spread) {
160
- page.leafNum = parseFloat(page.pageNum) + 2;
161
- }
162
- }
163
-
164
- const bm = new BookModel({ data });
165
- expect(bm.parsePageString('leaf3')).toBe(0);
166
- });
167
- });
168
-
169
- describe('pagesIterator', () => {
170
- test('Goes through all pages', () => {
171
- const bm = new BookModel({ data: SAMPLE_DATA });
172
- let i = 0;
173
- for (const page of bm.pagesIterator()) {
174
- expect(page.index).toBe(i++);
175
- }
176
- });
177
-
178
- test('Can combine unviewables', () => {
179
- const data = deepCopy(SAMPLE_DATA);
180
- // add some more pages
181
- data.splice(2, 0, deepCopy(data[0]));
182
- data[1].forEach(page => page.viewable = false);
183
- const bm = new BookModel({ data });
184
- for (const page of bm.pagesIterator({combineConsecutiveUnviewables: true})) {
185
- expect(page.isConsecutiveUnviewable).toBe(false);
186
- }
187
- });
188
- });
189
-
190
- describe('_getDataFlattened', () => {
191
- test('Assigns correct page sides', () => {
192
- const bm = new BookModel({ data: SAMPLE_DATA });
193
- expect(bm._getDataFlattened().map(page => page.pageSide)).toEqual(['R', 'L', 'R', 'L'])
194
- });
195
-
196
- test('Memoized based on data length', () => {
197
- const data = deepCopy(SAMPLE_DATA);
198
- const bm = new BookModel({ data });
199
- const firstResult = bm._getDataFlattened();
200
- expect(bm._getDataFlattened()).toBe(firstResult);
201
- expect(bm._getDataFlattened()).toBe(firstResult);
202
- bm.br.data = data.slice(0, 1);
203
- expect(bm._getDataFlattened()).not.toBe(firstResult);
204
- });
205
-
206
- test('Assigns unviewablesStart', () => {
207
- const data = deepCopy(SAMPLE_DATA);
208
- data.slice(1, -1)
209
- .forEach(spread => spread.forEach(page => {
210
- page.viewable = false;
211
- }));
212
- const bm = new BookModel({ data });
213
- const pages = bm._getDataFlattened();
214
- expect(pages[0].unviewablesStart).toBeUndefined();
215
- expect(pages[1].unviewablesStart).toBe(1);
216
- expect(pages[2].unviewablesStart).toBe(1);
217
- expect(pages[3].unviewablesStart).toBeUndefined();
218
- });
219
- });
220
-
221
- describe('getPage', () => {
222
- test('loops around by default', () => {
223
- const bm = new BookModel({ data: SAMPLE_DATA });
224
- expect(bm.getPage(-1).index).toBe(3);
225
- expect(bm.getPage(-2).index).toBe(2);
226
- expect(bm.getPage(-3).index).toBe(1);
227
- expect(bm.getPage(4).index).toBe(0);
228
- expect(bm.getPage(5).index).toBe(1);
229
- });
230
-
231
- test('does not loop if loop=false', () => {
232
- const bm = new BookModel({ data: SAMPLE_DATA });
233
- expect(bm.getPage(-1, false)).toBeUndefined();
234
- expect(bm.getPage(-2, false)).toBeUndefined();
235
- expect(bm.getPage(4, false)).toBeUndefined();
236
- expect(bm.getPage(5, false)).toBeUndefined();
237
- });
238
- });
239
-
240
- describe('PageModel', () => {
241
- test('constructor copies fields from book model', () => {
242
- const bm = new BookModel({ data: SAMPLE_DATA });
243
- const spy = sinon.spy(bm, 'getPageWidth');
244
- const page = bm.getPage(0);
245
- expect(spy.callCount).toBe(1);
246
- expect(page.width).toBe(SAMPLE_DATA[0][0].width);
247
- });
248
-
249
- test('prev at start of book returns null', () => {
250
- const bm = new BookModel({ data: SAMPLE_DATA });
251
- expect(bm.getPage(0).prev).toBeUndefined();
252
- });
253
-
254
- test('prev to return previous', () => {
255
- const bm = new BookModel({ data: SAMPLE_DATA });
256
- expect(bm.getPage(1).prev.index).toBe(0);
257
- expect(bm.getPage(3).prev.prev.index).toBe(1);
258
- });
259
-
260
- test('next at end of book returns null', () => {
261
- const bm = new BookModel({ data: SAMPLE_DATA });
262
- expect(bm.getPage(-1).next).toBeUndefined();
263
- });
264
-
265
- test('next to return next page', () => {
266
- const bm = new BookModel({ data: SAMPLE_DATA });
267
- expect(bm.getPage(0).next.index).toBe(1);
268
- expect(bm.getPage(1).next.next.index).toBe(3);
269
- });
270
-
271
- describe('findNext combineConsecutiveUnviewables=true', () => {
272
- const data = deepCopy(SAMPLE_DATA);
273
- // add some more pages
274
- data.splice(2, 0, deepCopy(data[0]));
275
- data[1].forEach(page => page.viewable = false);
276
-
277
- const bm = new BookModel({ data });
278
-
279
- test('does not skip the first unviewable page', () => {
280
- expect(bm.getPage(0).findNext({ combineConsecutiveUnviewables: true }).index).toBe(1);
281
- });
282
-
283
- test('skips consecutive unviewables', () => {
284
- expect(bm.getPage(1).findNext({ combineConsecutiveUnviewables: true }).index).toBe(3);
285
- });
286
-
287
- test('at end is undefined', () => {
288
- expect(bm.getPage(-1).findNext({ combineConsecutiveUnviewables: true })).toBeUndefined();
289
- });
290
- });
291
-
292
- describe('findPrev', () => {
293
- const data = deepCopy(SAMPLE_DATA);
294
- // add some more pages
295
- data.splice(2, 0, deepCopy(data[0]));
296
- data[1].forEach(page => page.viewable = false);
297
-
298
- const bm = new BookModel({ data });
299
-
300
- test('works if called on first unviewable', () => {
301
- expect(bm.getPage(1).findPrev({ combineConsecutiveUnviewables: true }).index).toBe(0);
302
- });
303
-
304
- test('works if called within unviewable chunk', () => {
305
- expect(bm.getPage(2).findPrev({ combineConsecutiveUnviewables: true }).index).toBe(1);
306
- });
307
-
308
- test('at start is undefined', () => {
309
- expect(bm.getPage(0).findPrev({ combineConsecutiveUnviewables: true })).toBeUndefined();
310
- });
311
- });
312
- });