@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,25 +1,27 @@
1
+ // @ts-check
2
+ /** @typedef {import('@/src/BookReader.js').default} BookReader */
3
+
1
4
  class SearchView {
2
5
  /**
3
6
  * @param {object} params
4
- * @param {object} params.br The BookReader instance
5
- * @param {function} params.cancelSearch callback when a user wants to cancel search
7
+ * @param {BookReader} params.br The BookReader instance
8
+ * @param {function} params.searchCancelledCallback callback when a user wants to cancel search
6
9
  *
7
10
  * @event BookReader:SearchResultsCleared - when the search results nav gets cleared
8
11
  * @event BookReader:ToggleSearchMenu - when search results menu should toggle
9
12
  */
10
13
  constructor({ br, searchCancelledCallback = () => {} }) {
14
+ /** @type {BookReader} */
11
15
  this.br = br;
12
-
13
- // Search results are returned as a text blob with the hits wrapped in
14
- // triple mustaches. Hits occasionally include text beyond the search
15
- // term, so everything within the staches is captured and wrapped.
16
- this.matcher = new RegExp('{{{(.+?)}}}', 'g');
17
16
  this.matches = [];
18
17
  this.cacheDOMElements();
19
- this.bindEvents();
20
18
  this.cancelSearch = searchCancelledCallback;
21
19
  }
22
20
 
21
+ init() {
22
+ this.bindEvents();
23
+ }
24
+
23
25
  cacheDOMElements() {
24
26
  this.dom = {};
25
27
  // Search input within the top toolbar. Will be removed once the mobile menu is replaced.
@@ -42,7 +44,7 @@ class SearchView {
42
44
  }
43
45
 
44
46
  clearSearchFieldAndResults(dispatchEventWhenComplete = true) {
45
- this.br.removeSearchResults();
47
+ this.br.plugins.search.removeSearchResults();
46
48
  this.removeResultPins();
47
49
  this.emptyMatches();
48
50
  this.setQuery('');
@@ -58,7 +60,7 @@ class SearchView {
58
60
 
59
61
  renderSearchNavigation() {
60
62
  const selector = 'BRsearch-navigation';
61
- $('.BRnav').before(`
63
+ $('.BRnav.BRnavMain').before(`
62
64
  <div class="${selector}">
63
65
  <button class="toggle-sidebar">
64
66
  <h4>
@@ -149,10 +151,12 @@ class SearchView {
149
151
  }
150
152
 
151
153
  updateResultsPosition() {
154
+ if (!this.dom.searchNavigation) return;
152
155
  this.dom.searchNavigation.find('[data-id=resultsCount]').text(this.resultsPosition());
153
156
  }
154
157
 
155
158
  updateSearchNavigationButtons() {
159
+ if (!this.dom.searchNavigation) return;
156
160
  this.dom.searchNavigation.find('.prev').attr('disabled', !this.currentMatchIndex);
157
161
  this.dom.searchNavigation.find('.next').attr('disabled', this.currentMatchIndex + 1 === this.matches.length);
158
162
  }
@@ -214,7 +218,7 @@ class SearchView {
214
218
  <form class="BRbooksearch desktop">
215
219
  <input type="search" name="query" class="BRsearchInput" value="" placeholder="Search inside"/>
216
220
  <button type="submit" class="BRsearchSubmit">
217
- <img src="${this.br.imagesBaseURL}icon_search_button.svg" />
221
+ <img src="${this.br.options.imagesBaseURL}icon_search_button.svg" />
218
222
  </button>
219
223
  </form>
220
224
  `;
@@ -226,25 +230,20 @@ class SearchView {
226
230
  */
227
231
  renderPins(matches) {
228
232
  matches.forEach((match) => {
229
- const queryString = match.text;
230
- const pageIndex = this.br.leafNumToIndex(match.par[0].page);
231
- const pageNumber = this.br.getPageNum(pageIndex);
233
+ const pageIndex = this.br.book.leafNumToIndex(match.par[0].page);
232
234
  const uiStringSearch = "Search result"; // i18n
233
- const uiStringPage = "Page"; // i18n
234
-
235
- const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.getNumLeafs() - 1);
236
-
237
- const queryStringWithB = queryString.replace(this.matcher, '<b>$1</b>');
238
-
239
- let queryStringWithBTruncated = '';
240
-
241
- if (queryString.length > 100) {
242
- queryStringWithBTruncated = queryString
243
- .replace(/^(.{100}[^\s]*).*/, "$1")
244
- .replace(this.matcher, '<b>$1</b>')
245
- + '...';
235
+ const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.book.getNumLeafs() - 1);
236
+
237
+ let html = match.html;
238
+ if (html.length > 200) {
239
+ const start = Math.max(0, html.indexOf('<mark>') - 100);
240
+ if (start != 0) {
241
+ html = '…' + match.html
242
+ .substring(start)
243
+ // Make sure at word boundary though
244
+ .replace(/^\S+/, '');
245
+ }
246
246
  }
247
-
248
247
  // draw marker
249
248
  $('<div>')
250
249
  .addClass('BRsearch')
@@ -254,43 +253,35 @@ class SearchView {
254
253
  .attr('title', uiStringSearch)
255
254
  .append(`
256
255
  <div class="BRquery">
257
- <div>${queryStringWithBTruncated || queryStringWithB}</div>
258
- <div>${uiStringPage} ${pageNumber}</div>
256
+ <main>${html}</main>
257
+ <footer>Page ${match.displayPageNumber}</footer>
259
258
  </div>
260
259
  `)
261
- .data({ pageIndex })
262
260
  .appendTo(this.br.$('.BRnavline'))
263
- .hover(
264
- (event) => {
265
- // remove from other markers then turn on just for this
266
- // XXX should be done when nav slider moves
267
- const marker = event.currentTarget;
268
- const tooltip = marker.querySelector('.BRquery');
269
- const tooltipOffset = tooltip.getBoundingClientRect();
270
- const targetOffset = marker.getBoundingClientRect();
271
- const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;
272
- if (tooltipOffset.x - boxSizeAdjust < 0) {
273
- tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);
274
- }
275
- $('.BRsearch,.BRchapter').removeClass('front');
276
- $(event.target).addClass('front');
277
- },
278
- (event) => $(event.target).removeClass('front'))
279
- .click(function (event) {
280
- // closures are nested and deep, using an arrow function breaks references.
281
- // Todo: update to arrow function & clean up closures
282
- // to remove `bind` dependency
283
- this.br._searchPluginGoToResult(+$(event.target).data('pageIndex'));
284
- this.br.updateSearchHilites();
285
- }.bind(this));
261
+ .on("mouseenter", (event) => {
262
+ // remove from other markers then turn on just for this
263
+ // XXX should be done when nav slider moves
264
+ const marker = event.currentTarget;
265
+ const tooltip = marker.querySelector('.BRquery');
266
+ const tooltipOffset = tooltip.getBoundingClientRect();
267
+ const targetOffset = marker.getBoundingClientRect();
268
+ const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;
269
+ if (tooltipOffset.x - boxSizeAdjust < 0) {
270
+ tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);
271
+ }
272
+ $('.BRsearch,.BRchapter').removeClass('front');
273
+ $(event.target).addClass('front');
274
+ })
275
+ .on("mouseleave", (event) => $(event.target).removeClass('front'))
276
+ .on("click", () => { this.br.plugins.search.jumpToMatch(match.matchIndex); });
286
277
  });
287
278
  }
288
279
 
289
280
  /**
290
- * @param {boolean} bool
281
+ * @param {boolean} show
291
282
  */
292
- toggleSearchPending(bool) {
293
- if (bool) {
283
+ toggleSearchPending(show = false) {
284
+ if (show) {
294
285
  this.br.showProgressPopup("Search results will appear below...", () => this.progressPopupClosed());
295
286
  }
296
287
  else {
@@ -340,7 +331,7 @@ class SearchView {
340
331
  const modal = document.createElement('div');
341
332
  modal.classList.add('BRprogresspopup', 'search_modal');
342
333
  modal.innerHTML = messageHTML;
343
- document.querySelector(this.br.el).append(modal);
334
+ this.br.refs.$br[0].append(modal);
344
335
  }
345
336
 
346
337
  /**
@@ -386,21 +377,13 @@ class SearchView {
386
377
  }
387
378
  }
388
379
 
389
- /**
390
- * @param {Event} e
391
- */
392
- handleNavToggledCallback(e) {
393
- const is_visible = this.br.navigationIsVisible();
394
- this.togglePinsFor(is_visible);
395
- }
396
-
397
380
  handleSearchStarted() {
398
381
  this.emptyMatches();
399
- this.br.removeSearchHilites();
382
+ this.br.plugins.search.removeSearchHilites();
400
383
  this.removeResultPins();
401
384
  this.toggleSearchPending(true);
402
385
  this.teardownSearchNavigation();
403
- this.setQuery(this.br.searchTerm);
386
+ this.setQuery(this.br.plugins.search.searchTerm);
404
387
  }
405
388
 
406
389
  /**
@@ -428,7 +411,6 @@ class SearchView {
428
411
 
429
412
  window.addEventListener(`${namespace}SearchCallbackError`, this.handleSearchCallbackError.bind(this));
430
413
  $(document).on(`${namespace}SearchCallback`, this.handleSearchCallback.bind(this))
431
- .on(`${namespace}navToggled`, this.handleNavToggledCallback.bind(this))
432
414
  .on(`${namespace}SearchStarted`, this.handleSearchStarted.bind(this))
433
415
  .on(`${namespace}SearchCallbackBookNotIndexed`, this.handleSearchCallbackBookNotIndexed.bind(this))
434
416
  .on(`${namespace}SearchCallbackEmpty`, this.handleSearchCallbackEmpty.bind(this))
@@ -0,0 +1,164 @@
1
+ // @ts-check
2
+ import { Cache } from '../../util/cache.js';
3
+ import { BatchTranslator } from '@internetarchive/bergamot-translator/translator.js';
4
+ import { toISO6391, toNativeName } from '../tts/utils.js';
5
+
6
+ export class TranslationManager {
7
+ /** @type {Cache<{index: string, response: string}>} */
8
+ alreadyTranslated = new Cache(100);
9
+
10
+ /**
11
+ * @typedef {Object} genericModelInfo
12
+ * @property {string} name
13
+ * @property {number} size
14
+ * @property {number} estimatedCompressedSize
15
+ * @property {any} [qualityModel]
16
+ * @property {string} [expectedSha256Hash]
17
+ * @property {string} [modelType]
18
+ */
19
+ /**
20
+ * @type { {[langPair: string] : {model: genericModelInfo, lex: genericModelInfo, vocab: genericModelInfo, quality?: genericModelInfo}} }
21
+ */
22
+ modelRegistry = {};
23
+
24
+ /** @type {Record<key, {promise: Promise<string>, resolve: function, reject: function}>} */
25
+ currentlyTranslating = {}
26
+
27
+ /** @type {Record<string, string>[]} */
28
+ fromLanguages = [];
29
+ /** @type {Record<string, string>[]} */
30
+ toLanguages = [];
31
+
32
+ /** @type {boolean} */
33
+ active = false;
34
+
35
+ publicPath = '';
36
+
37
+ constructor() {
38
+ //TODO Should default to the book language as the first element
39
+ const enModel = {code: "en", name: "English (en)", type: "prod"};
40
+ this.fromLanguages.push(enModel);
41
+ this.toLanguages.push(enModel);
42
+ }
43
+
44
+
45
+ async initWorker() {
46
+ if (this.initPromise) return this.initPromise;
47
+ this.initPromise = new Promise((resolve, reject) => {
48
+ this._initResolve = resolve;
49
+ this._initReject = reject;
50
+ });
51
+ const registryUrl = "https://cors.archive.org/cors/mozilla-translate-models/firefox_models/";
52
+ const registryJson = await fetch(registryUrl + "registry.json").then(r => r.json());
53
+ for (const language of Object.values(registryJson)) {
54
+ for (const file of Object.values(language)) {
55
+ file.name = registryUrl + file.name;
56
+ }
57
+ }
58
+
59
+ /** @type {BatchTranslator} */
60
+ // Arbitrary setting for number of workers, 1 is already quite fast
61
+ // batchSize from 8 -> 4 for improved performance
62
+ this.translator = new BatchTranslator({
63
+ registryUrl: `data:application/json,${encodeURIComponent(JSON.stringify(registryJson))}`,
64
+ workers: 2,
65
+ batchSize: 4,
66
+ workerUrl: this.publicPath + '/translator-worker.js',
67
+ });
68
+
69
+ const modelType = await this.translator.backing.registry;
70
+ const arr = {}; // unsure if we need to keep track of the files
71
+ for (const obj of Object.values(modelType)) {
72
+ const firstLang = obj['from'];
73
+ const secondLang = obj['to'];
74
+ const fromModelType = obj['files'];
75
+ arr[`${firstLang}${secondLang}`] = fromModelType;
76
+ // Assuming that all of the languages loaded from the registryUrl inside @internetarchive/bergamot-translator/translator.js are prod
77
+ // List of dev models found here https://github.com/mozilla/firefox-translations-models/tree/main/models/base
78
+ // There are also differences between the model types in the repo above here: https://github.com/mozilla/firefox-translations-models?tab=readme-ov-file#firefox-translations-models
79
+ if (firstLang !== "en") {
80
+ const name = `${toNativeName(firstLang)} (${toISO6391(firstLang)})`;
81
+ this.fromLanguages.push({code: firstLang, name: name, type: "prod"});
82
+ }
83
+ if (secondLang !== "en") {
84
+ const name = `${toNativeName(secondLang)} (${toISO6391(secondLang)})`;
85
+ this.toLanguages.push({code: secondLang, name: name, type: "prod"});
86
+ }
87
+ }
88
+ this._initResolve([this.modelRegistry]);
89
+ return this.initPromise;
90
+ }
91
+
92
+ /**
93
+ * Targets the page and paragraph of a text layer to create a translation from the "fromLang" to the "toLang". Tries to force order in translation by using the pageIndex (+1000 if the current page is not visible) and paragraphIndex
94
+ * @param {string} fromLang
95
+ * @param {string} toLang
96
+ * @param {string} pageIndex
97
+ * @param {number} paragraphIndex
98
+ * @param {string} text
99
+ * @param {number} priority
100
+ * @return {Promise<string>} translated text
101
+ */
102
+
103
+ getTranslation = async (fromLang, toLang, pageIndex, paragraphIndex, text, priority) => {
104
+ this.active = true;
105
+ if (fromLang == toLang || !fromLang || !toLang) {
106
+ return;
107
+ }
108
+ const key = `${fromLang}${toLang}-${pageIndex}:${paragraphIndex}`;
109
+ const cachedEntry = this.alreadyTranslated.entries.find(x => x.index == key);
110
+
111
+ if (cachedEntry) {
112
+ return cachedEntry.response;
113
+ }
114
+
115
+ if (key in this.currentlyTranslating) {
116
+ return this.currentlyTranslating[key].promise;
117
+ }
118
+
119
+ let _resolve = null;
120
+ let _reject = null;
121
+ const promise = new Promise((res, rej) => {
122
+ _resolve = res;
123
+ _reject = rej;
124
+ });
125
+
126
+ this.currentlyTranslating[key] = {
127
+ promise,
128
+ resolve: _resolve,
129
+ reject: _reject,
130
+ };
131
+
132
+ if (!text) {
133
+ this.currentlyTranslating[key].reject("No text was provided");
134
+ return promise;
135
+ }
136
+ this.translator.translate({
137
+ to: toLang,
138
+ from: fromLang,
139
+ text: text,
140
+ html: false,
141
+ priority: priority,
142
+ }).then((resp) => {
143
+ const response = resp;
144
+ this.currentlyTranslating[key].resolve(response.target.text);
145
+ this.alreadyTranslated.add({index: key, response: response.target.text});
146
+ delete this.currentlyTranslating[key];
147
+ });
148
+
149
+ return promise;
150
+ }
151
+
152
+ /**
153
+ * Checks and updates the status of a model that is currently being retreived from IA
154
+ * @param {string} fromLanguage
155
+ * @param {string} toLanguage
156
+ * @returns {Promise<boolean>}
157
+ */
158
+ getTranslationModel = async(fromLanguage, toLanguage) => {
159
+ return this.translator.backing.getTranslationModel({from: fromLanguage, to: toLanguage})
160
+ .catch((err) => {
161
+ console.error(`An error occurred while trying to retreive the ${fromLanguage}-${toLanguage} model`);
162
+ });
163
+ }
164
+ }