@internetarchive/bookreader 5.0.0-10-alpha-3 → 5.0.0-100

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 (374) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +428 -1139
  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 +1782 -0
  53. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +7 -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/thumbnails.svg +1 -1
  74. package/BookReader/icons/voice.svg +1 -0
  75. package/BookReader/icons/volume-full.svg +1 -1
  76. package/BookReader/images/BRicons.svg +3 -3
  77. package/BookReader/images/books_graphic.svg +1 -1
  78. package/BookReader/images/hypothesis.ico +0 -0
  79. package/BookReader/images/icon_book.svg +1 -1
  80. package/BookReader/images/icon_bookmark.svg +1 -1
  81. package/BookReader/images/icon_experiment.svg +1 -0
  82. package/BookReader/images/icon_gear.svg +1 -1
  83. package/BookReader/images/icon_hamburger.svg +1 -1
  84. package/BookReader/images/icon_home.svg +1 -1
  85. package/BookReader/images/icon_info.svg +1 -1
  86. package/BookReader/images/icon_one_page.svg +1 -1
  87. package/BookReader/images/icon_pause.svg +1 -1
  88. package/BookReader/images/icon_play.svg +1 -1
  89. package/BookReader/images/icon_playback-rate.svg +1 -1
  90. package/BookReader/images/icon_search_button.svg +1 -1
  91. package/BookReader/images/icon_share.svg +1 -1
  92. package/BookReader/images/icon_skip-ahead.svg +1 -1
  93. package/BookReader/images/icon_skip-back.svg +1 -1
  94. package/BookReader/images/icon_speaker.svg +1 -1
  95. package/BookReader/images/icon_speaker_open.svg +1 -1
  96. package/BookReader/images/icon_thumbnails.svg +1 -1
  97. package/BookReader/images/icon_toc.svg +1 -1
  98. package/BookReader/images/icon_two_pages.svg +1 -1
  99. package/BookReader/images/marker_chap-off.svg +1 -1
  100. package/BookReader/images/marker_chap-on.svg +1 -1
  101. package/BookReader/images/marker_srch-on.svg +1 -1
  102. package/BookReader/images/translate.svg +1 -0
  103. package/BookReader/images/unviewable_page.png +0 -0
  104. package/BookReader/jquery-3.js +2 -0
  105. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  106. package/BookReader/plugins/plugin.archive_analytics.js +1 -1
  107. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  108. package/BookReader/plugins/plugin.autoplay.js +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  110. package/BookReader/plugins/plugin.chapters.js +25 -1
  111. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  112. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  113. package/BookReader/plugins/plugin.experiments.js +3 -0
  114. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  115. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  116. package/BookReader/plugins/plugin.iframe.js +1 -1
  117. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  118. package/BookReader/plugins/plugin.iiif.js +2 -0
  119. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  120. package/BookReader/plugins/plugin.resume.js +1 -1
  121. package/BookReader/plugins/plugin.resume.js.map +1 -1
  122. package/BookReader/plugins/plugin.search.js +2 -1
  123. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  124. package/BookReader/plugins/plugin.search.js.map +1 -1
  125. package/BookReader/plugins/plugin.text_selection.js +2 -1
  126. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  127. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  128. package/BookReader/plugins/plugin.translate.js +137 -0
  129. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  130. package/BookReader/plugins/plugin.translate.js.map +1 -0
  131. package/BookReader/plugins/plugin.tts.js +1 -1
  132. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  133. package/BookReader/plugins/plugin.tts.js.map +1 -1
  134. package/BookReader/plugins/plugin.url.js +1 -1
  135. package/BookReader/plugins/plugin.url.js.map +1 -1
  136. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
  137. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  138. package/BookReader/plugins/translator-worker.js +2 -0
  139. package/BookReader/plugins/translator-worker.js.map +1 -0
  140. package/BookReader/silence.mp3 +0 -0
  141. package/BookReader/translator-worker.js +475 -0
  142. package/BookReader/webcomponents-bundle.js +3 -0
  143. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  144. package/BookReader/webcomponents-bundle.js.map +1 -0
  145. package/README.md +14 -3
  146. package/jsconfig.json +19 -0
  147. package/package.json +84 -64
  148. package/src/BookNavigator/assets/bookmark-colors.js +1 -1
  149. package/src/BookNavigator/assets/button-base.js +2 -1
  150. package/src/BookNavigator/assets/ia-logo.js +17 -0
  151. package/src/BookNavigator/assets/icon_checkmark.js +1 -1
  152. package/src/BookNavigator/assets/icon_close.js +1 -1
  153. package/src/BookNavigator/book-navigator.js +620 -0
  154. package/src/BookNavigator/bookmarks/bookmark-button.js +3 -2
  155. package/src/BookNavigator/bookmarks/bookmark-edit.js +2 -3
  156. package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
  157. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +2 -2
  158. package/src/BookNavigator/bookmarks/bookmarks-provider.js +27 -17
  159. package/src/BookNavigator/bookmarks/ia-bookmarks.js +116 -67
  160. package/src/BookNavigator/delete-modal-actions.js +1 -1
  161. package/src/BookNavigator/downloads/downloads-provider.js +36 -21
  162. package/src/BookNavigator/downloads/downloads.js +24 -4
  163. package/src/BookNavigator/search/search-provider.js +55 -27
  164. package/src/BookNavigator/search/search-results.js +25 -11
  165. package/src/BookNavigator/sharing.js +27 -0
  166. package/src/BookNavigator/viewable-files.js +95 -0
  167. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +13 -12
  168. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +9 -9
  169. package/src/BookReader/BookModel.js +92 -46
  170. package/src/BookReader/DragScrollable.js +233 -0
  171. package/src/BookReader/ImageCache.js +49 -16
  172. package/src/BookReader/Mode1Up.js +58 -360
  173. package/src/BookReader/Mode1UpLit.js +393 -0
  174. package/src/BookReader/Mode2Up.js +75 -1318
  175. package/src/BookReader/Mode2UpLit.js +787 -0
  176. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  177. package/src/BookReader/ModeSmoothZoom.js +312 -0
  178. package/src/BookReader/ModeThumb.js +20 -12
  179. package/src/BookReader/Navbar/Navbar.js +130 -53
  180. package/src/BookReader/PageContainer.js +120 -23
  181. package/src/BookReader/ReduceSet.js +2 -2
  182. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  183. package/src/BookReader/events.js +2 -3
  184. package/src/BookReader/options.js +87 -16
  185. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  186. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  187. package/src/BookReader/utils/SelectionObserver.js +45 -0
  188. package/src/BookReader/utils/classes.js +1 -1
  189. package/src/BookReader/utils.js +136 -12
  190. package/src/BookReader.js +641 -1192
  191. package/src/BookReaderPlugin.js +52 -0
  192. package/src/assets/icons/magnify-minus.svg +3 -7
  193. package/src/assets/icons/magnify-plus.svg +3 -7
  194. package/src/assets/icons/voice.svg +1 -0
  195. package/src/assets/images/hypothesis.ico +0 -0
  196. package/src/assets/images/icon_experiment.svg +1 -0
  197. package/src/assets/images/translate.svg +1 -0
  198. package/src/assets/images/unviewable_page.png +0 -0
  199. package/src/assets/silence.mp3 +0 -0
  200. package/src/css/BookReader.scss +1 -5
  201. package/src/css/_BRBookmarks.scss +1 -1
  202. package/src/css/_BRComponent.scss +1 -1
  203. package/src/css/_BRicon.scss +8 -2
  204. package/src/css/_BRmain.scss +16 -3
  205. package/src/css/_BRnav.scss +12 -66
  206. package/src/css/_BRpages.scss +163 -43
  207. package/src/css/_BRsearch.scss +69 -30
  208. package/src/css/_BRtoolbar.scss +5 -5
  209. package/src/css/_TextSelection.scss +129 -24
  210. package/src/css/_colorbox.scss +2 -2
  211. package/src/css/_controls.scss +24 -7
  212. package/src/css/_icons.scss +1 -1
  213. package/src/ia-bookreader/ia-bookreader.js +224 -0
  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 +314 -205
  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 +54 -51
  221. package/src/plugins/plugin.text_selection.js +510 -219
  222. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  223. package/src/plugins/search/plugin.search.js +370 -392
  224. package/src/plugins/search/utils.js +43 -0
  225. package/src/plugins/search/view.js +49 -67
  226. package/src/plugins/translate/TranslationManager.js +162 -0
  227. package/src/plugins/translate/plugin.translate.js +523 -0
  228. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  229. package/src/plugins/tts/FestivalTTSEngine.js +20 -30
  230. package/src/plugins/tts/PageChunk.js +33 -21
  231. package/src/plugins/tts/PageChunkIterator.js +11 -17
  232. package/src/plugins/tts/WebTTSEngine.js +131 -91
  233. package/src/plugins/tts/plugin.tts.js +344 -350
  234. package/src/plugins/tts/utils.js +49 -47
  235. package/src/plugins/url/UrlPlugin.js +191 -0
  236. package/src/plugins/{plugin.url.js → url/plugin.url.js} +44 -15
  237. package/src/util/TextSelectionManager.js +282 -0
  238. package/src/util/browserSniffing.js +33 -1
  239. package/src/util/cache.js +20 -0
  240. package/src/util/docCookies.js +21 -2
  241. package/src/util/strings.js +1 -0
  242. package/.babelrc +0 -12
  243. package/.dependabot/config.yml +0 -6
  244. package/.eslintrc.js +0 -50
  245. package/.gitattributes +0 -2
  246. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  247. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  248. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  249. package/.github/workflows/node.js.yml +0 -37
  250. package/.github/workflows/npm-publish.yml +0 -47
  251. package/.testcaferc.json +0 -5
  252. package/BookReader/bookreader-component-bundle.js +0 -1450
  253. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  254. package/BookReader/bookreader-component-bundle.js.map +0 -1
  255. package/BookReader/jquery-1.10.1.js +0 -2
  256. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  257. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  258. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  259. package/BookReader/plugins/plugin.mobile_nav.js +0 -2
  260. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  261. package/BookReaderDemo/BookReaderDemo.css +0 -41
  262. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  263. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  264. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  265. package/BookReaderDemo/IIIFBookReader.js +0 -207
  266. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  267. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  268. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  269. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  270. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  273. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  274. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  275. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  276. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  277. package/BookReaderDemo/demo-advanced.html +0 -33
  278. package/BookReaderDemo/demo-autoplay.html +0 -38
  279. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  280. package/BookReaderDemo/demo-embed.html +0 -26
  281. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  282. package/BookReaderDemo/demo-fullscreen.html +0 -33
  283. package/BookReaderDemo/demo-iiif.html +0 -34
  284. package/BookReaderDemo/demo-iiif.js +0 -26
  285. package/BookReaderDemo/demo-internetarchive.html +0 -74
  286. package/BookReaderDemo/demo-multiple.html +0 -43
  287. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  288. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  289. package/BookReaderDemo/demo-simple.html +0 -34
  290. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  291. package/BookReaderDemo/immersion-1up.html +0 -64
  292. package/BookReaderDemo/immersion-mode.html +0 -35
  293. package/BookReaderDemo/toggle_controls.html +0 -53
  294. package/BookReaderDemo/view_mode.html +0 -39
  295. package/BookReaderDemo/viewmode-cycle.html +0 -41
  296. package/CHANGELOG.md +0 -493
  297. package/CONTRIBUTING.md +0 -7
  298. package/codecov.yml +0 -17
  299. package/index.html +0 -31
  300. package/karma.conf.js +0 -23
  301. package/screenshot.png +0 -0
  302. package/scripts/postversion.js +0 -10
  303. package/scripts/preversion.js +0 -14
  304. package/scripts/version.js +0 -26
  305. package/src/BookNavigator/BookModel.js +0 -14
  306. package/src/BookNavigator/BookNavigator.js +0 -446
  307. package/src/BookNavigator/assets/book-loader.js +0 -27
  308. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  309. package/src/BookNavigator/search/a-search-result.js +0 -55
  310. package/src/BookReader/DebugConsole.js +0 -54
  311. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  312. package/src/ItemNavigator/ItemNavigator.js +0 -376
  313. package/src/ItemNavigator/providers/sharing.js +0 -29
  314. package/src/css/_MobileNav.scss +0 -194
  315. package/src/dragscrollable-br.js +0 -261
  316. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  317. package/src/plugins/plugin.mobile_nav.js +0 -287
  318. package/tests/BookReader/BookModel.test.js +0 -312
  319. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  320. package/tests/BookReader/DebugConsole.test.js +0 -25
  321. package/tests/BookReader/ImageCache.test.js +0 -150
  322. package/tests/BookReader/Mode1Up.test.js +0 -164
  323. package/tests/BookReader/Mode2Up.test.js +0 -247
  324. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  325. package/tests/BookReader/PageContainer.test.js +0 -115
  326. package/tests/BookReader/ReduceSet.test.js +0 -38
  327. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  328. package/tests/BookReader/utils/classes.test.js +0 -88
  329. package/tests/BookReader/utils.test.js +0 -109
  330. package/tests/BookReader.options.test.js +0 -39
  331. package/tests/BookReader.test.js +0 -301
  332. package/tests/e2e/README.md +0 -75
  333. package/tests/e2e/autoplay.test.js +0 -13
  334. package/tests/e2e/base.test.js +0 -35
  335. package/tests/e2e/helpers/base.js +0 -263
  336. package/tests/e2e/helpers/debug.js +0 -13
  337. package/tests/e2e/helpers/desktopSearch.js +0 -72
  338. package/tests/e2e/helpers/mobileSearch.js +0 -85
  339. package/tests/e2e/helpers/mockSearch.js +0 -93
  340. package/tests/e2e/helpers/rightToLeft.js +0 -29
  341. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  342. package/tests/e2e/models/BookReader.js +0 -11
  343. package/tests/e2e/models/Navigation.js +0 -56
  344. package/tests/e2e/rightToLeft.test.js +0 -20
  345. package/tests/e2e/viewmode.test.js +0 -37
  346. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  347. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  348. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  349. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  350. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  351. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  352. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  353. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  354. package/tests/plugins/plugin.autoplay.test.js +0 -52
  355. package/tests/plugins/plugin.chapters.test.js +0 -130
  356. package/tests/plugins/plugin.iframe.test.js +0 -42
  357. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  358. package/tests/plugins/plugin.resume.test.js +0 -98
  359. package/tests/plugins/plugin.text_selection.test.js +0 -203
  360. package/tests/plugins/plugin.url.test.js +0 -129
  361. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  362. package/tests/plugins/search/plugin.search.test.js +0 -173
  363. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  364. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  365. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  366. package/tests/plugins/tts/PageChunk.test.js +0 -57
  367. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  368. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  369. package/tests/plugins/tts/utils.test.js +0 -133
  370. package/tests/util/browserSniffing.test.js +0 -56
  371. package/tests/util/docCookies.test.js +0 -15
  372. package/tests/util/strings.test.js +0 -63
  373. package/tests/utils.js +0 -42
  374. 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
- });