@internetarchive/bookreader 5.0.0-11 → 5.0.0-111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +649 -1225
  4. package/BookReader/BookReader.js +1 -1
  5. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  6. package/BookReader/BookReader.js.map +1 -1
  7. package/BookReader/bergamot-translator-worker.js +2966 -0
  8. package/BookReader/bergamot-translator-worker.wasm +0 -0
  9. package/BookReader/hypothesis/LICENSE +50 -0
  10. package/BookReader/hypothesis/README.md +55 -0
  11. package/BookReader/hypothesis/build/boot.js +1 -0
  12. package/BookReader/hypothesis/build/manifest.json +20 -0
  13. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
  14. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  15. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
  16. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  17. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
  18. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  19. package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
  20. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  35. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  36. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  37. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  38. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  39. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  40. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  41. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  42. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  43. package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
  44. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  45. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
  46. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  47. package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
  48. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  49. package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
  50. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  51. package/BookReader/hypothesis/package.json +126 -0
  52. package/BookReader/ia-bookreader-bundle.js +1904 -0
  53. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
  54. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  55. package/BookReader/icons/1up.svg +1 -1
  56. package/BookReader/icons/2up.svg +1 -1
  57. package/BookReader/icons/advance.svg +1 -1
  58. package/BookReader/icons/chevron-right.svg +1 -1
  59. package/BookReader/icons/close-circle-dark.svg +1 -1
  60. package/BookReader/icons/close-circle.svg +1 -1
  61. package/BookReader/icons/fullscreen.svg +1 -1
  62. package/BookReader/icons/fullscreen_exit.svg +1 -1
  63. package/BookReader/icons/hamburger.svg +1 -1
  64. package/BookReader/icons/left-arrow.svg +1 -1
  65. package/BookReader/icons/magnify-minus.svg +1 -1
  66. package/BookReader/icons/magnify-plus.svg +1 -1
  67. package/BookReader/icons/magnify.svg +1 -1
  68. package/BookReader/icons/pause.svg +1 -1
  69. package/BookReader/icons/play.svg +1 -1
  70. package/BookReader/icons/playback-speed.svg +1 -1
  71. package/BookReader/icons/read-aloud.svg +1 -1
  72. package/BookReader/icons/review.svg +1 -1
  73. package/BookReader/icons/slider-toggle.svg +1 -0
  74. package/BookReader/icons/thumbnails.svg +1 -1
  75. package/BookReader/icons/voice.svg +1 -0
  76. package/BookReader/icons/volume-full.svg +1 -1
  77. package/BookReader/images/BRicons.svg +3 -3
  78. package/BookReader/images/books_graphic.svg +1 -1
  79. package/BookReader/images/hypothesis.ico +0 -0
  80. package/BookReader/images/icon_book.svg +1 -1
  81. package/BookReader/images/icon_bookmark.svg +1 -1
  82. package/BookReader/images/icon_experiment.svg +1 -0
  83. package/BookReader/images/icon_gear.svg +1 -1
  84. package/BookReader/images/icon_hamburger.svg +1 -1
  85. package/BookReader/images/icon_home.svg +1 -1
  86. package/BookReader/images/icon_info.svg +1 -1
  87. package/BookReader/images/icon_one_page.svg +1 -1
  88. package/BookReader/images/icon_pause.svg +1 -1
  89. package/BookReader/images/icon_play.svg +1 -1
  90. package/BookReader/images/icon_playback-rate.svg +1 -1
  91. package/BookReader/images/icon_search_button.svg +1 -1
  92. package/BookReader/images/icon_share.svg +1 -1
  93. package/BookReader/images/icon_skip-ahead.svg +1 -1
  94. package/BookReader/images/icon_skip-back.svg +1 -1
  95. package/BookReader/images/icon_speaker.svg +1 -1
  96. package/BookReader/images/icon_speaker_open.svg +1 -1
  97. package/BookReader/images/icon_thumbnails.svg +1 -1
  98. package/BookReader/images/icon_toc.svg +1 -1
  99. package/BookReader/images/icon_two_pages.svg +1 -1
  100. package/BookReader/images/marker_chap-off.svg +1 -1
  101. package/BookReader/images/marker_chap-on.svg +1 -1
  102. package/BookReader/images/marker_srch-on.svg +1 -1
  103. package/BookReader/images/translate.svg +1 -0
  104. package/BookReader/images/unviewable_page.png +0 -0
  105. package/BookReader/jquery-3.js +2 -0
  106. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  107. package/BookReader/plugins/plugin.archive_analytics.js +1 -1
  108. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js +1 -1
  110. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  111. package/BookReader/plugins/plugin.chapters.js +22 -1
  112. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  113. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  114. package/BookReader/plugins/plugin.experiments.js +3 -0
  115. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  116. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  117. package/BookReader/plugins/plugin.iframe.js +1 -1
  118. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  119. package/BookReader/plugins/plugin.iiif.js +2 -0
  120. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  121. package/BookReader/plugins/plugin.resume.js +1 -1
  122. package/BookReader/plugins/plugin.resume.js.map +1 -1
  123. package/BookReader/plugins/plugin.search.js +2 -1
  124. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  125. package/BookReader/plugins/plugin.search.js.map +1 -1
  126. package/BookReader/plugins/plugin.text_selection.js +24 -1
  127. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  128. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  129. package/BookReader/plugins/plugin.translate.js +159 -0
  130. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  131. package/BookReader/plugins/plugin.translate.js.map +1 -0
  132. package/BookReader/plugins/plugin.tts.js +1 -1
  133. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  134. package/BookReader/plugins/plugin.tts.js.map +1 -1
  135. package/BookReader/plugins/plugin.url.js +2 -1
  136. package/BookReader/plugins/plugin.url.js.LICENSE.txt +1 -0
  137. package/BookReader/plugins/plugin.url.js.map +1 -1
  138. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
  139. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  140. package/BookReader/plugins/translator-worker.js +2 -0
  141. package/BookReader/plugins/translator-worker.js.map +1 -0
  142. package/BookReader/silence.mp3 +0 -0
  143. package/BookReader/translator-worker.js +475 -0
  144. package/BookReader/webcomponents-bundle.js +3 -0
  145. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  146. package/BookReader/webcomponents-bundle.js.map +1 -0
  147. package/README.md +14 -3
  148. package/jsconfig.json +19 -0
  149. package/package.json +93 -70
  150. package/src/BookReader/BookModel.js +92 -46
  151. package/src/BookReader/DragScrollable.js +233 -0
  152. package/src/BookReader/ImageCache.js +49 -16
  153. package/src/BookReader/Mode1Up.js +66 -365
  154. package/src/BookReader/Mode1UpLit.js +392 -0
  155. package/src/BookReader/Mode2Up.js +87 -1315
  156. package/src/BookReader/Mode2UpLit.js +786 -0
  157. package/src/BookReader/ModeAbstract.js +43 -0
  158. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  159. package/src/BookReader/ModeSmoothZoom.js +312 -0
  160. package/src/BookReader/ModeThumb.js +29 -15
  161. package/src/BookReader/Navbar/Navbar.js +201 -76
  162. package/src/BookReader/PageContainer.js +120 -23
  163. package/src/BookReader/ReduceSet.js +2 -2
  164. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  165. package/src/BookReader/events.js +3 -3
  166. package/src/BookReader/options.js +94 -17
  167. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  168. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  169. package/src/BookReader/utils/SelectionObserver.js +53 -0
  170. package/src/BookReader/utils/classes.js +1 -1
  171. package/src/BookReader/utils.js +136 -12
  172. package/src/BookReader.js +695 -1228
  173. package/src/BookReaderPlugin.js +52 -0
  174. package/src/assets/icons/magnify-minus.svg +3 -7
  175. package/src/assets/icons/magnify-plus.svg +3 -7
  176. package/src/assets/icons/slider-toggle.svg +1 -0
  177. package/src/assets/icons/voice.svg +1 -0
  178. package/src/assets/images/hypothesis.ico +0 -0
  179. package/src/assets/images/icon_experiment.svg +1 -0
  180. package/src/assets/images/translate.svg +1 -0
  181. package/src/assets/images/unviewable_page.png +0 -0
  182. package/src/assets/silence.mp3 +0 -0
  183. package/src/css/BookReader.scss +1 -5
  184. package/src/css/_BRBookmarks.scss +1 -1
  185. package/src/css/_BRComponent.scss +1 -1
  186. package/src/css/_BRicon.scss +8 -2
  187. package/src/css/_BRmain.scss +16 -3
  188. package/src/css/_BRnav.scss +74 -70
  189. package/src/css/_BRpages.scss +171 -42
  190. package/src/css/_BRsearch.scss +69 -30
  191. package/src/css/_BRtoolbar.scss +5 -5
  192. package/src/css/_TextSelection.scss +188 -24
  193. package/src/css/_colorbox.scss +2 -2
  194. package/src/css/_controls.scss +24 -7
  195. package/src/css/_icons.scss +8 -1
  196. package/src/{BookNavigator/assets → css}/button-base.js +2 -2
  197. package/src/css/icon_checkmark.js +9 -0
  198. package/src/css/sharedStyles.js +15 -0
  199. package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
  200. package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +25 -5
  201. package/src/ia-bookreader/ia-bookreader.js +666 -0
  202. package/src/ia-bookreader/sharing.js +27 -0
  203. package/src/ia-bookreader/viewable-files.js +98 -0
  204. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
  205. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
  206. package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
  207. package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
  208. package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +43 -31
  209. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  210. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
  211. package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
  212. package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
  213. package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
  214. package/src/plugins/plugin.archive_analytics.js +84 -78
  215. package/src/plugins/plugin.autoplay.js +99 -104
  216. package/src/plugins/plugin.chapters.js +319 -205
  217. package/src/plugins/plugin.experiments.js +339 -0
  218. package/src/plugins/plugin.iframe.js +1 -1
  219. package/src/plugins/plugin.iiif.js +141 -0
  220. package/src/plugins/plugin.resume.js +54 -51
  221. package/src/plugins/plugin.text_selection.js +539 -219
  222. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  223. package/src/plugins/search/plugin.search.js +374 -392
  224. package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
  225. package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
  226. package/src/plugins/search/utils.js +50 -0
  227. package/src/plugins/search/view.js +50 -68
  228. package/src/plugins/translate/TranslationManager.js +164 -0
  229. package/src/plugins/translate/plugin.translate.js +512 -0
  230. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  231. package/src/plugins/tts/FestivalTTSEngine.js +20 -30
  232. package/src/plugins/tts/PageChunk.js +33 -21
  233. package/src/plugins/tts/PageChunkIterator.js +11 -17
  234. package/src/plugins/tts/WebTTSEngine.js +131 -91
  235. package/src/plugins/tts/plugin.tts.js +345 -350
  236. package/src/plugins/tts/utils.js +77 -49
  237. package/src/plugins/url/UrlPlugin.js +211 -0
  238. package/src/plugins/{plugin.url.js → url/plugin.url.js} +105 -20
  239. package/src/util/TextSelectionManager.js +532 -0
  240. package/src/util/browserSniffing.js +33 -1
  241. package/src/util/cache.js +20 -0
  242. package/src/util/docCookies.js +21 -2
  243. package/src/util/lit.js +15 -0
  244. package/src/util/strings.js +1 -0
  245. package/.babelrc +0 -12
  246. package/.dependabot/config.yml +0 -6
  247. package/.eslintrc.js +0 -50
  248. package/.gitattributes +0 -2
  249. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  250. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  251. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  252. package/.github/workflows/node.js.yml +0 -37
  253. package/.github/workflows/npm-publish.yml +0 -47
  254. package/.testcaferc.json +0 -5
  255. package/BookReader/bookreader-component-bundle.js +0 -1450
  256. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  257. package/BookReader/bookreader-component-bundle.js.map +0 -1
  258. package/BookReader/jquery-1.10.1.js +0 -2
  259. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  260. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  261. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  262. package/BookReader/plugins/plugin.mobile_nav.js +0 -2
  263. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  264. package/BookReaderDemo/BookReaderDemo.css +0 -41
  265. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  266. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  267. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  268. package/BookReaderDemo/IIIFBookReader.js +0 -207
  269. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  270. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  273. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  274. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  275. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  276. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  277. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  278. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  279. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  280. package/BookReaderDemo/demo-advanced.html +0 -33
  281. package/BookReaderDemo/demo-autoplay.html +0 -38
  282. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  283. package/BookReaderDemo/demo-embed.html +0 -26
  284. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  285. package/BookReaderDemo/demo-fullscreen.html +0 -33
  286. package/BookReaderDemo/demo-iiif.html +0 -34
  287. package/BookReaderDemo/demo-iiif.js +0 -26
  288. package/BookReaderDemo/demo-internetarchive.html +0 -74
  289. package/BookReaderDemo/demo-multiple.html +0 -43
  290. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  291. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  292. package/BookReaderDemo/demo-simple.html +0 -34
  293. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  294. package/BookReaderDemo/immersion-1up.html +0 -64
  295. package/BookReaderDemo/immersion-mode.html +0 -35
  296. package/BookReaderDemo/toggle_controls.html +0 -53
  297. package/BookReaderDemo/view_mode.html +0 -39
  298. package/BookReaderDemo/viewmode-cycle.html +0 -41
  299. package/CHANGELOG.md +0 -495
  300. package/CONTRIBUTING.md +0 -7
  301. package/codecov.yml +0 -17
  302. package/index.html +0 -31
  303. package/karma.conf.js +0 -23
  304. package/screenshot.png +0 -0
  305. package/scripts/postversion.js +0 -10
  306. package/scripts/preversion.js +0 -14
  307. package/scripts/version.js +0 -26
  308. package/src/BookNavigator/BookModel.js +0 -14
  309. package/src/BookNavigator/BookNavigator.js +0 -446
  310. package/src/BookNavigator/assets/book-loader.js +0 -27
  311. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  312. package/src/BookNavigator/assets/icon_close.js +0 -3
  313. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  314. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  315. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  316. package/src/BookNavigator/search/a-search-result.js +0 -55
  317. package/src/BookReader/DebugConsole.js +0 -54
  318. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  319. package/src/ItemNavigator/ItemNavigator.js +0 -376
  320. package/src/ItemNavigator/providers/sharing.js +0 -29
  321. package/src/css/_MobileNav.scss +0 -194
  322. package/src/dragscrollable-br.js +0 -261
  323. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  324. package/src/plugins/plugin.mobile_nav.js +0 -287
  325. package/tests/BookReader/BookModel.test.js +0 -312
  326. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  327. package/tests/BookReader/DebugConsole.test.js +0 -25
  328. package/tests/BookReader/ImageCache.test.js +0 -150
  329. package/tests/BookReader/Mode1Up.test.js +0 -164
  330. package/tests/BookReader/Mode2Up.test.js +0 -247
  331. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  332. package/tests/BookReader/PageContainer.test.js +0 -115
  333. package/tests/BookReader/ReduceSet.test.js +0 -38
  334. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  335. package/tests/BookReader/utils/classes.test.js +0 -88
  336. package/tests/BookReader/utils.test.js +0 -109
  337. package/tests/BookReader.options.test.js +0 -39
  338. package/tests/BookReader.test.js +0 -301
  339. package/tests/e2e/README.md +0 -75
  340. package/tests/e2e/autoplay.test.js +0 -13
  341. package/tests/e2e/base.test.js +0 -35
  342. package/tests/e2e/helpers/base.js +0 -263
  343. package/tests/e2e/helpers/debug.js +0 -13
  344. package/tests/e2e/helpers/desktopSearch.js +0 -72
  345. package/tests/e2e/helpers/mobileSearch.js +0 -85
  346. package/tests/e2e/helpers/mockSearch.js +0 -93
  347. package/tests/e2e/helpers/rightToLeft.js +0 -29
  348. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  349. package/tests/e2e/models/BookReader.js +0 -11
  350. package/tests/e2e/models/Navigation.js +0 -56
  351. package/tests/e2e/rightToLeft.test.js +0 -20
  352. package/tests/e2e/viewmode.test.js +0 -37
  353. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  354. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  355. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  356. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  357. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  358. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  359. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  360. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  361. package/tests/plugins/plugin.autoplay.test.js +0 -52
  362. package/tests/plugins/plugin.chapters.test.js +0 -130
  363. package/tests/plugins/plugin.iframe.test.js +0 -42
  364. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  365. package/tests/plugins/plugin.resume.test.js +0 -98
  366. package/tests/plugins/plugin.text_selection.test.js +0 -203
  367. package/tests/plugins/plugin.url.test.js +0 -129
  368. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  369. package/tests/plugins/search/plugin.search.test.js +0 -173
  370. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  371. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  372. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  373. package/tests/plugins/tts/PageChunk.test.js +0 -57
  374. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  375. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  376. package/tests/plugins/tts/utils.test.js +0 -133
  377. package/tests/util/browserSniffing.test.js +0 -56
  378. package/tests/util/docCookies.test.js +0 -15
  379. package/tests/util/strings.test.js +0 -63
  380. package/tests/utils.js +0 -42
  381. package/webpack.config.js +0 -86
@@ -1,308 +1,104 @@
1
1
  // @ts-check
2
- import { calcScreenDPI, notInArray } from '../BookReader/utils.js';
2
+ import { Mode1UpLit } from './Mode1UpLit.js';
3
+ import { DragScrollable } from './DragScrollable.js';
4
+ import { ModeAbstract } from './ModeAbstract.js';
3
5
  /** @typedef {import('../BookReader.js').default} BookReader */
4
6
  /** @typedef {import('./BookModel.js').BookModel} BookModel */
5
7
  /** @typedef {import('./BookModel.js').PageIndex} PageIndex */
6
8
 
7
- export class Mode1Up {
9
+ export class Mode1Up extends ModeAbstract {
10
+ name = '1up'
11
+
8
12
  /**
9
13
  * @param {BookReader} br
10
14
  * @param {BookModel} bookModel
11
15
  */
12
16
  constructor(br, bookModel) {
17
+ super();
13
18
  this.br = br;
14
19
  this.book = bookModel;
20
+ this.mode1UpLit = new Mode1UpLit(bookModel, br);
15
21
 
16
22
  /** @private */
17
- this.$documentContainer = $('<div class="BRpageview" />');
18
- /** @private */
19
- this.screenDPI = calcScreenDPI();
20
- /** @private */
21
- this.LEAF_SPACING_IN = 0.2;
23
+ this.$el = $(this.mode1UpLit)
24
+ // We CANNOT use `br-mode-1up` as a class, because it's the same
25
+ // as the name of the web component, and the webcomponents polyfill
26
+ // uses the name of component as a class for style scoping 😒
27
+ .addClass('br-mode-1up__root BRmode1up');
22
28
 
23
- /**
24
- * How much smaller the picture on screen is than the real-world item
25
- *
26
- * Mode1Up doesn't use the br.reduce because it is DPI aware. The reduction factor
27
- * of a given leaf can change (since leaves can have different DPIs), but the real-world
28
- * reduction is constant throughout.
29
- */
30
- this.realWorldReduce = 1;
29
+ /** Has mode1up ever been rendered before? */
30
+ this.everShown = false;
31
31
  }
32
32
 
33
+ // TODO: Might not need this anymore? Might want to delete.
33
34
  /** @private */
34
- get $scrollContainer() { return this.br.refs.$brContainer; }
35
+ get $brContainer() { return this.br.refs.$brContainer; }
35
36
 
36
37
  /**
37
38
  * This is called when we switch to one page view
38
39
  */
39
40
  prepare() {
40
41
  const startLeaf = this.br.currentIndex();
41
-
42
- this.$scrollContainer
42
+ this.$brContainer
43
43
  .empty()
44
- .css({ overflowX: 'auto', overflowY: 'scroll' })
45
- .append(this.$documentContainer);
46
-
47
- // Attaches to first child - child must be present
48
- this.$scrollContainer.dragscrollable();
49
- this.br.bindGestures(this.$scrollContainer);
50
-
51
- // This calls drawLeafs
52
- this.resizePageView();
53
-
54
- this.br.jumpToIndex(startLeaf);
55
- this.br.updateBrClasses();
56
- }
57
-
58
- /**
59
- * Get the number of pixels required to display the given inches with the given reduce
60
- * @param {number} inches
61
- * @param reduce Reduction factor currently at play
62
- * @param screenDPI The DPI of the screen
63
- **/
64
- physicalInchesToDisplayPixels(inches, reduce = this.realWorldReduce, screenDPI = this.screenDPI) {
65
- return inches * screenDPI / reduce;
66
- }
67
-
68
- /**
69
- * Iterate over pages, augmented with their top/bottom bounds
70
- * @param reduce Reduction factor currently at play
71
- * @param pageSpacing Inches of space to place between pages
72
- **/
73
- * pagesWithBounds(reduce = this.realWorldReduce, pageSpacing = this.LEAF_SPACING_IN) {
74
- let leafTop = 0;
75
- let leafBottom = 0;
76
-
77
- for (const page of this.book.pagesIterator({ combineConsecutiveUnviewables: true })) {
78
- const height = this.physicalInchesToDisplayPixels(page.heightInches, reduce);
79
- leafBottom += height;
80
- yield { page, top: leafTop, bottom: leafBottom };
81
- leafTop += height + this.physicalInchesToDisplayPixels(pageSpacing, reduce);
82
- leafBottom += this.physicalInchesToDisplayPixels(pageSpacing, reduce);
83
- }
84
- }
85
-
86
- /**
87
- * How much do the two bounds intersection?
88
- * @param {{ top: number; bottom: number; }} bound1
89
- * @param {{ top: number; bottom: number; }} bound2
90
- * @returns {number}
91
- */
92
- static boundIntersection(bound1, bound2) {
93
- const intersect = (bound1.bottom >= bound2.top) && (bound1.top <= bound2.bottom);
94
- if (!intersect) return 0;
95
-
96
- const boundingBox = {
97
- top: Math.min(bound1.top, bound2.top),
98
- bottom: Math.max(bound1.bottom, bound2.bottom),
99
- };
100
- const intersection = {
101
- top: Math.max(bound1.top, bound2.top),
102
- bottom: Math.min(bound1.bottom, bound2.bottom),
103
- };
104
- return (intersection.bottom - intersection.top) / (boundingBox.bottom - boundingBox.top);
105
- }
106
-
107
- /**
108
- * Find the pages that intersect the current viewport, including 1 before/after
109
- **/
110
- * findIntersectingPages() {
111
- // Rectangle of interest
112
- const height = this.$scrollContainer.height();
113
- const scrollTop = this.$scrollContainer.scrollTop();
114
- const scrollBottom = scrollTop + height;
115
- const scrollRegion = { top: scrollTop, bottom: scrollBottom };
116
-
117
- let prev = null;
118
- for (const {page, top, bottom} of this.pagesWithBounds()) {
119
- const intersection = Mode1Up.boundIntersection({ top, bottom }, scrollRegion);
120
- const cur = {page, top, bottom, intersection: intersection};
121
- if (intersection) {
122
- // Also yield the page just before the visible page
123
- if (prev && !prev.intersection) yield prev;
124
- yield cur;
125
- }
126
- // Also yield the page just after the last visible page
127
- else if (!cur.intersection && prev?.intersection) {
128
- yield cur;
129
- break;
44
+ .css({ overflow: 'hidden' })
45
+ .append(this.$el);
46
+
47
+ // Need this in a setTimeout so that it happens after the browser has _actually_
48
+ // appended the element to the DOM
49
+ setTimeout(async () => {
50
+ if (!this.everShown) {
51
+ this.mode1UpLit.initFirstRender(startLeaf);
52
+ this.everShown = true;
53
+ this.mode1UpLit.requestUpdate();
54
+ await this.mode1UpLit.updateComplete;
55
+ new DragScrollable(this.mode1UpLit, {
56
+ preventDefault: true,
57
+ dragSelector: '.br-mode-1up__visible-world',
58
+ // Only handle mouse events; let browser/interact.js handle touch
59
+ dragstart: 'mousedown',
60
+ dragcontinue: 'mousemove',
61
+ dragend: 'mouseup',
62
+ });
130
63
  }
131
- prev = cur;
132
- }
133
- }
134
-
135
- drawLeafs() {
136
- const pagesToDisplay = Array.from(this.findIntersectingPages());
137
-
138
- if (pagesToDisplay.length) {
139
- const documentContainerWidth = this.$documentContainer.width();
140
-
141
- // The first page that's reasonably in view we set to the current index
142
- const firstProperPage = (
143
- pagesToDisplay.find(({intersection}) => intersection > 0.33) ||
144
- pagesToDisplay[0]
145
- ).page;
146
- this.br.updateFirstIndex(firstProperPage.index);
147
-
148
- for (const {page, top, bottom} of pagesToDisplay) {
149
- if (!this.br.displayedIndices.includes(page.index)) {
150
- const height = bottom - top;
151
- const width = this.physicalInchesToDisplayPixels(page.widthInches);
152
- const reduce = page.width / width;
153
-
154
- const pageContainer = this.br._createPageContainer(page.index)
155
- .update({
156
- dimensions: {
157
- width,
158
- height,
159
- top,
160
- left: Math.floor((documentContainerWidth - width) / 2),
161
- },
162
- reduce,
163
- });
164
- pageContainer.$container.appendTo(this.$documentContainer);
165
- }
166
- }
167
- }
168
-
169
- // Remove any pages we no longer need
170
- const displayedIndices = pagesToDisplay.map(({page}) => page.index);
171
- for (const index of this.br.displayedIndices) {
172
- if (notInArray(index, displayedIndices)) {
173
- this.br.$(`.pagediv${index}`).remove();
174
- }
175
- }
176
-
177
- this.br.displayedIndices = displayedIndices;
178
- if (this.br.enableSearch) this.br.updateSearchHilites();
179
-
180
- this.br.updateToolbarZoom(this.realWorldReduce);
181
-
182
- // Update the slider
183
- this.br.updateNavIndexThrottled();
64
+ this.mode1UpLit.jumpToIndex(startLeaf);
65
+ setTimeout(() => {
66
+ // Must explicitly call updateVisibleRegion, since no
67
+ // scroll event seems to fire.
68
+ this.mode1UpLit.updateVisibleRegion();
69
+ });
70
+ });
71
+ this.br.updateBrClasses();
184
72
  }
185
73
 
186
74
  /**
75
+ * BREAKING CHANGE: No longer supports pageX/pageY
187
76
  * @param {PageIndex} index
188
- * @param {number} [pageX] x position on the page (in pixels) to center on
189
- * @param {number} [pageY] y position on the page (in pixels) to center on
190
- * @param {boolean} [noAnimate]
77
+ * @param {object} options
78
+ * @param {number} [options.pageX] x position on the page (in pixels) to center on
79
+ * @param {number} [options.pageY] y position on the page (in pixels) to center on
80
+ * @param {boolean} [options.noAnimate]
191
81
  */
192
- jumpToIndex(index, pageX, pageY, noAnimate) {
193
- const prevCurrentIndex = this.br.currentIndex();
194
- const { abs } = Math;
195
- let offset = 0;
196
- let leafTop = this.getPageTop(index);
197
- let leafLeft = 0;
198
-
199
- if (pageY) {
200
- const page = this.book.getPage(index);
201
- const clientHeight = this.$scrollContainer.prop('clientHeight');
202
- offset = this.physicalInchesToDisplayPixels((pageY / page.height) * page.heightInches) - (clientHeight / 2);
203
- leafTop += offset;
204
- } else {
205
- // Show page just a little below the top
206
- leafTop -= this.br.padding / 2;
207
- }
208
-
209
- if (pageX) {
210
- const page = this.book.getPage(index);
211
- const clientWidth = this.$scrollContainer.prop('clientWidth');
212
- offset = this.physicalInchesToDisplayPixels((pageX / page.width) * page.widthInches) - (clientWidth / 2);
213
- leafLeft += offset;
214
- } else {
215
- // Preserve left position
216
- leafLeft = this.$scrollContainer.scrollLeft();
217
- }
218
-
219
- // Only animate for small distances
220
- if (!noAnimate && abs(prevCurrentIndex - index) <= 4) {
221
- this.animating = true;
222
- this.$scrollContainer.stop(true).animate({
223
- scrollTop: leafTop,
224
- scrollLeft: leafLeft,
225
- }, 'fast', () => { this.animating = false; });
226
- } else {
227
- this.$scrollContainer.stop(true).prop('scrollTop', leafTop);
228
- }
82
+ jumpToIndex(index, {pageX = 0, pageY = 0, noAnimate = false} = {}) {
83
+ // Only smooth for small distances
84
+ const distance = Math.abs(this.br.currentIndex() - index);
85
+ const smooth = !noAnimate && distance > 0 && distance <= 4;
86
+ this.mode1UpLit.jumpToIndex(index, { smooth });
229
87
  }
230
88
 
231
89
  /**
232
90
  * @param {'in' | 'out'} direction
233
91
  */
234
92
  zoom(direction) {
235
- const nextReductionFactor = this.br.nextReduce(this.realWorldReduce, direction, this.br.onePage.reductionFactors);
236
-
237
- if (this.realWorldReduce == nextReductionFactor.reduce) {
238
- // Already at this level
239
- return;
240
- }
241
-
242
- this.realWorldReduce = nextReductionFactor.reduce;
243
- this.br.onePage.autofit = nextReductionFactor.autofit;
244
-
245
- this.resizePageView();
246
- this.br.updateToolbarZoom(this.realWorldReduce);
247
-
248
- // Recalculate search hilites
249
- if (this.br.enableSearch) {
250
- this.br.removeSearchHilites();
251
- this.br.updateSearchHilites();
252
- }
253
- }
254
-
255
- /**
256
- * Returns the reduce factor which has the pages fill the width of the viewport.
257
- */
258
- getAutofitWidth() {
259
- const widthPadding = 20;
260
- const availableWidth = this.$scrollContainer.prop('clientWidth') - 2 * widthPadding;
261
-
262
- const medianWidthInches = this.book.getMedianPageSizeInches().width;
263
- const medianPageWidth = this.physicalInchesToDisplayPixels(medianWidthInches, 1);
264
- return medianPageWidth / availableWidth;
265
- }
266
-
267
- getAutofitHeight() {
268
- // make sure a little of adjacent pages show
269
- const availableHeight = this.$scrollContainer.innerHeight() - 2 * this.br.padding;
270
- const medianHeightInches = this.book.getMedianPageSizeInches().height;
271
- const medianPageHeight = this.physicalInchesToDisplayPixels(medianHeightInches, 1);
272
-
273
- return medianPageHeight / availableHeight;
274
- }
275
-
276
- /**
277
- * Returns where the top of the page with given index should be in one page view
278
- * @param {PageIndex} index
279
- * @return {number}
280
- */
281
- getPageTop(index) {
282
- for (const {page, top} of this.pagesWithBounds()) {
283
- if (page.index == index) return top;
284
- }
285
- }
286
-
287
- /**
288
- * Update the reduction factors for 1up mode given the available width and height.
289
- * Recalculates the autofit reduction factors.
290
- */
291
- calculateReductionFactors() {
292
- const autoWidthReduce = this.getAutofitWidth();
293
- this.br.onePage.reductionFactors = this.br.reductionFactors
294
- .filter(r => r.reduce != 1)
295
- .concat([
296
- { reduce: 1, autofit: null },
297
- { reduce: autoWidthReduce, autofit: 'width' },
298
- { reduce: this.getAutofitHeight(), autofit: 'height' },
299
- ]);
300
- this.br.onePage.reductionFactors.sort(this.br._reduceSort);
301
- // Default to real size if it fits, otherwise default to full width
302
- if (autoWidthReduce < 1) {
303
- this.br.onePage.reductionFactors.find(r => r.reduce == 1).autofit = 'auto';
304
- } else {
305
- this.br.onePage.reductionFactors.find(r => r.autofit == 'width').autofit = 'auto';
93
+ switch (direction) {
94
+ case 'in':
95
+ this.mode1UpLit.zoomIn();
96
+ break;
97
+ case 'out':
98
+ this.mode1UpLit.zoomOut();
99
+ break;
100
+ default:
101
+ console.error(`Unsupported direction: ${direction}`);
306
102
  }
307
103
  }
308
104
 
@@ -311,102 +107,7 @@ export class Mode1Up {
311
107
  * Note this calls drawLeafs
312
108
  */
313
109
  resizePageView() {
314
- const viewWidth = this.$scrollContainer.prop('clientWidth');
315
- const oldScrollTop = this.$scrollContainer.prop('scrollTop');
316
- const oldPageViewHeight = this.$documentContainer.height();
317
- const oldPageViewWidth = this.$documentContainer.width();
318
-
319
- // May have come here after preparing the view, in which case the scrollTop and view height are not set
320
-
321
- let scrollRatio = 0;
322
- let oldCenterX;
323
- if (oldScrollTop > 0) {
324
- // We have scrolled - implies view has been set up
325
- const oldCenterY = this.centerY();
326
- oldCenterX = this.centerX();
327
- scrollRatio = oldCenterY / oldPageViewHeight;
328
- } else {
329
- // Have not scrolled, e.g. because in new container
330
-
331
- // We set the scroll ratio so that the current index will still be considered the
332
- // current index in drawLeafsOnePage after we create the new view container
333
-
334
- // Make sure this will count as current page after resize
335
- const fudgeFactor = 0.6 * this.physicalInchesToDisplayPixels(this.book.getPage(this.br.currentIndex()).heightInches);
336
- const oldLeafTop = this.getPageTop(this.br.currentIndex()) + fudgeFactor;
337
- const oldViewDimensions = this.calculateViewDimensions();
338
- scrollRatio = oldLeafTop / oldViewDimensions.height;
339
- }
340
-
341
- // Recalculate 1up reduction factors
342
- this.calculateReductionFactors();
343
- // Update current reduce (if in autofit)
344
- if (this.br.onePage.autofit) {
345
- const reductionFactor = this.br.nextReduce(this.realWorldReduce, this.br.onePage.autofit, this.br.onePage.reductionFactors);
346
- this.realWorldReduce = reductionFactor.reduce;
347
- }
348
-
349
- const viewDimensions = this.calculateViewDimensions();
350
- this.$documentContainer.height(viewDimensions.height);
351
- this.$documentContainer.width(viewDimensions.width);
352
-
353
- // Remove all pages
354
- this.$documentContainer.empty();
355
- this.br.displayedIndices = [];
356
-
357
- // Scroll to the right spot
358
- const newCenterX = oldCenterX * (viewWidth / oldPageViewWidth);
359
- const newCenterY = scrollRatio * viewDimensions.height;
360
- const sizeX = this.$scrollContainer.prop('clientWidth'); // Use clientWidth because of scroll bar
361
- const sizeY = this.$scrollContainer.height();
362
- this.$scrollContainer.prop({
363
- scrollLeft: Math.max(0, newCenterX - sizeX / 2),
364
- scrollTop: Math.max(0, newCenterY - sizeY / 2),
365
- });
366
-
367
- // Draw all visible pages
368
- this.drawLeafs();
369
-
370
- if (this.br.enableSearch) {
371
- this.br.removeSearchHilites();
372
- this.br.updateSearchHilites();
373
- }
374
- }
375
-
376
- /**
377
- * Calculate the total width/height in pixels of the document container
378
- * @param {number} reduce
379
- * @param {number} leafSpacing spacing between pages in inches
380
- */
381
- calculateViewDimensions(reduce = this.realWorldReduce, leafSpacing = this.LEAF_SPACING_IN) {
382
- let width = 0;
383
- let height = 0;
384
- for (const {page, bottom} of this.pagesWithBounds(reduce, leafSpacing)) {
385
- const pageWidth = this.physicalInchesToDisplayPixels(page.widthInches, reduce);
386
- width = Math.max(width, pageWidth);
387
- height = bottom;
388
- }
389
- return { width, height };
390
- }
391
-
392
- /**
393
- * Returns the current offset of the viewport center in scaled document coordinates.
394
- */
395
- centerX($scrollContainer = this.$scrollContainer, $documentContainer = this.$documentContainer) {
396
- let centerX;
397
- if ($documentContainer.width() < $scrollContainer.prop('clientWidth')) { // fully shown
398
- centerX = $documentContainer.width();
399
- } else {
400
- centerX = $scrollContainer.scrollLeft() + $scrollContainer.prop('clientWidth') / 2;
401
- }
402
- return Math.floor(centerX);
403
- }
404
-
405
- /**
406
- * Returns the current offset of the viewport center in scaled document coordinates.
407
- */
408
- centerY($scrollContainer = this.$scrollContainer) {
409
- const centerY = $scrollContainer.scrollTop() + $scrollContainer.height() / 2;
410
- return Math.floor(centerY);
110
+ this.mode1UpLit.htmlDimensionsCacher.updateClientSizes();
111
+ this.mode1UpLit.requestUpdate();
411
112
  }
412
113
  }