@internetarchive/bookreader 5.0.0-12-fixsorting-7 → 5.0.0-120

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