@internetarchive/bookreader 5.0.0-11 → 5.0.0-110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +604 -1239
  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 +1907 -0
  53. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
  54. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  55. package/BookReader/icons/1up.svg +1 -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 +2 -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 +137 -0
  130. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  131. package/BookReader/plugins/plugin.translate.js.map +1 -0
  132. package/BookReader/plugins/plugin.tts.js +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 +1 -1
  136. package/BookReader/plugins/plugin.url.js.map +1 -1
  137. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
  138. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  139. package/BookReader/plugins/translator-worker.js +2 -0
  140. package/BookReader/plugins/translator-worker.js.map +1 -0
  141. package/BookReader/silence.mp3 +0 -0
  142. package/BookReader/translator-worker.js +475 -0
  143. package/BookReader/webcomponents-bundle.js +3 -0
  144. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  145. package/BookReader/webcomponents-bundle.js.map +1 -0
  146. package/README.md +14 -3
  147. package/jsconfig.json +19 -0
  148. package/package.json +92 -70
  149. package/src/BookReader/BookModel.js +92 -46
  150. package/src/BookReader/DragScrollable.js +233 -0
  151. package/src/BookReader/ImageCache.js +49 -16
  152. package/src/BookReader/Mode1Up.js +66 -365
  153. package/src/BookReader/Mode1UpLit.js +392 -0
  154. package/src/BookReader/Mode2Up.js +87 -1315
  155. package/src/BookReader/Mode2UpLit.js +788 -0
  156. package/src/BookReader/ModeAbstract.js +43 -0
  157. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  158. package/src/BookReader/ModeSmoothZoom.js +312 -0
  159. package/src/BookReader/ModeThumb.js +29 -15
  160. package/src/BookReader/Navbar/Navbar.js +201 -76
  161. package/src/BookReader/PageContainer.js +120 -23
  162. package/src/BookReader/ReduceSet.js +2 -2
  163. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  164. package/src/BookReader/events.js +3 -3
  165. package/src/BookReader/options.js +94 -17
  166. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  167. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  168. package/src/BookReader/utils/SelectionObserver.js +45 -0
  169. package/src/BookReader/utils/classes.js +1 -1
  170. package/src/BookReader/utils.js +136 -12
  171. package/src/BookReader.js +678 -1226
  172. package/src/BookReaderPlugin.js +52 -0
  173. package/src/assets/icons/magnify-minus.svg +3 -7
  174. package/src/assets/icons/magnify-plus.svg +3 -7
  175. package/src/assets/icons/slider-toggle.svg +1 -0
  176. package/src/assets/icons/voice.svg +1 -0
  177. package/src/assets/images/hypothesis.ico +0 -0
  178. package/src/assets/images/icon_experiment.svg +1 -0
  179. package/src/assets/images/translate.svg +1 -0
  180. package/src/assets/images/unviewable_page.png +0 -0
  181. package/src/assets/silence.mp3 +0 -0
  182. package/src/css/BookReader.scss +1 -5
  183. package/src/css/_BRBookmarks.scss +1 -1
  184. package/src/css/_BRComponent.scss +1 -1
  185. package/src/css/_BRicon.scss +8 -2
  186. package/src/css/_BRmain.scss +16 -3
  187. package/src/css/_BRnav.scss +74 -70
  188. package/src/css/_BRpages.scss +171 -42
  189. package/src/css/_BRsearch.scss +69 -30
  190. package/src/css/_BRtoolbar.scss +5 -5
  191. package/src/css/_TextSelection.scss +129 -24
  192. package/src/css/_colorbox.scss +2 -2
  193. package/src/css/_controls.scss +24 -7
  194. package/src/css/_icons.scss +8 -1
  195. package/src/{BookNavigator/assets → css}/button-base.js +2 -2
  196. package/src/css/icon_checkmark.js +9 -0
  197. package/src/css/sharedStyles.js +15 -0
  198. package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
  199. package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +25 -5
  200. package/src/ia-bookreader/ia-bookreader.js +666 -0
  201. package/src/ia-bookreader/sharing.js +27 -0
  202. package/src/ia-bookreader/viewable-files.js +98 -0
  203. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
  204. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
  205. package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
  206. package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
  207. package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +43 -31
  208. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  209. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
  210. package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
  211. package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
  212. package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
  213. package/src/plugins/plugin.archive_analytics.js +84 -78
  214. package/src/plugins/plugin.autoplay.js +99 -104
  215. package/src/plugins/plugin.chapters.js +314 -205
  216. package/src/plugins/plugin.experiments.js +321 -0
  217. package/src/plugins/plugin.iframe.js +1 -1
  218. package/src/plugins/plugin.iiif.js +141 -0
  219. package/src/plugins/plugin.resume.js +54 -51
  220. package/src/plugins/plugin.text_selection.js +522 -219
  221. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  222. package/src/plugins/search/plugin.search.js +374 -392
  223. package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
  224. package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
  225. package/src/plugins/search/utils.js +50 -0
  226. package/src/plugins/search/view.js +50 -68
  227. package/src/plugins/translate/TranslationManager.js +164 -0
  228. package/src/plugins/translate/plugin.translate.js +512 -0
  229. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  230. package/src/plugins/tts/FestivalTTSEngine.js +20 -30
  231. package/src/plugins/tts/PageChunk.js +33 -21
  232. package/src/plugins/tts/PageChunkIterator.js +11 -17
  233. package/src/plugins/tts/WebTTSEngine.js +131 -91
  234. package/src/plugins/tts/plugin.tts.js +345 -350
  235. package/src/plugins/tts/utils.js +77 -49
  236. package/src/plugins/url/UrlPlugin.js +191 -0
  237. package/src/plugins/{plugin.url.js → url/plugin.url.js} +44 -15
  238. package/src/util/TextSelectionManager.js +282 -0
  239. package/src/util/browserSniffing.js +33 -1
  240. package/src/util/cache.js +20 -0
  241. package/src/util/docCookies.js +21 -2
  242. package/src/util/lit.js +15 -0
  243. package/src/util/strings.js +1 -0
  244. package/.babelrc +0 -12
  245. package/.dependabot/config.yml +0 -6
  246. package/.eslintrc.js +0 -50
  247. package/.gitattributes +0 -2
  248. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  249. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  250. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  251. package/.github/workflows/node.js.yml +0 -37
  252. package/.github/workflows/npm-publish.yml +0 -47
  253. package/.testcaferc.json +0 -5
  254. package/BookReader/bookreader-component-bundle.js +0 -1450
  255. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  256. package/BookReader/bookreader-component-bundle.js.map +0 -1
  257. package/BookReader/jquery-1.10.1.js +0 -2
  258. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  259. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  260. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  261. package/BookReader/plugins/plugin.mobile_nav.js +0 -2
  262. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  263. package/BookReaderDemo/BookReaderDemo.css +0 -41
  264. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  265. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  266. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  267. package/BookReaderDemo/IIIFBookReader.js +0 -207
  268. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  269. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  270. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  273. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  274. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  275. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  276. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  277. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  278. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  279. package/BookReaderDemo/demo-advanced.html +0 -33
  280. package/BookReaderDemo/demo-autoplay.html +0 -38
  281. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  282. package/BookReaderDemo/demo-embed.html +0 -26
  283. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  284. package/BookReaderDemo/demo-fullscreen.html +0 -33
  285. package/BookReaderDemo/demo-iiif.html +0 -34
  286. package/BookReaderDemo/demo-iiif.js +0 -26
  287. package/BookReaderDemo/demo-internetarchive.html +0 -74
  288. package/BookReaderDemo/demo-multiple.html +0 -43
  289. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  290. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  291. package/BookReaderDemo/demo-simple.html +0 -34
  292. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  293. package/BookReaderDemo/immersion-1up.html +0 -64
  294. package/BookReaderDemo/immersion-mode.html +0 -35
  295. package/BookReaderDemo/toggle_controls.html +0 -53
  296. package/BookReaderDemo/view_mode.html +0 -39
  297. package/BookReaderDemo/viewmode-cycle.html +0 -41
  298. package/CHANGELOG.md +0 -495
  299. package/CONTRIBUTING.md +0 -7
  300. package/codecov.yml +0 -17
  301. package/index.html +0 -31
  302. package/karma.conf.js +0 -23
  303. package/screenshot.png +0 -0
  304. package/scripts/postversion.js +0 -10
  305. package/scripts/preversion.js +0 -14
  306. package/scripts/version.js +0 -26
  307. package/src/BookNavigator/BookModel.js +0 -14
  308. package/src/BookNavigator/BookNavigator.js +0 -446
  309. package/src/BookNavigator/assets/book-loader.js +0 -27
  310. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  311. package/src/BookNavigator/assets/icon_close.js +0 -3
  312. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  313. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  314. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  315. package/src/BookNavigator/search/a-search-result.js +0 -55
  316. package/src/BookReader/DebugConsole.js +0 -54
  317. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  318. package/src/ItemNavigator/ItemNavigator.js +0 -376
  319. package/src/ItemNavigator/providers/sharing.js +0 -29
  320. package/src/css/_MobileNav.scss +0 -194
  321. package/src/dragscrollable-br.js +0 -261
  322. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  323. package/src/plugins/plugin.mobile_nav.js +0 -287
  324. package/tests/BookReader/BookModel.test.js +0 -312
  325. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  326. package/tests/BookReader/DebugConsole.test.js +0 -25
  327. package/tests/BookReader/ImageCache.test.js +0 -150
  328. package/tests/BookReader/Mode1Up.test.js +0 -164
  329. package/tests/BookReader/Mode2Up.test.js +0 -247
  330. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  331. package/tests/BookReader/PageContainer.test.js +0 -115
  332. package/tests/BookReader/ReduceSet.test.js +0 -38
  333. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  334. package/tests/BookReader/utils/classes.test.js +0 -88
  335. package/tests/BookReader/utils.test.js +0 -109
  336. package/tests/BookReader.options.test.js +0 -39
  337. package/tests/BookReader.test.js +0 -301
  338. package/tests/e2e/README.md +0 -75
  339. package/tests/e2e/autoplay.test.js +0 -13
  340. package/tests/e2e/base.test.js +0 -35
  341. package/tests/e2e/helpers/base.js +0 -263
  342. package/tests/e2e/helpers/debug.js +0 -13
  343. package/tests/e2e/helpers/desktopSearch.js +0 -72
  344. package/tests/e2e/helpers/mobileSearch.js +0 -85
  345. package/tests/e2e/helpers/mockSearch.js +0 -93
  346. package/tests/e2e/helpers/rightToLeft.js +0 -29
  347. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  348. package/tests/e2e/models/BookReader.js +0 -11
  349. package/tests/e2e/models/Navigation.js +0 -56
  350. package/tests/e2e/rightToLeft.test.js +0 -20
  351. package/tests/e2e/viewmode.test.js +0 -37
  352. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  353. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  354. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  355. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  356. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  357. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  358. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  359. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  360. package/tests/plugins/plugin.autoplay.test.js +0 -52
  361. package/tests/plugins/plugin.chapters.test.js +0 -130
  362. package/tests/plugins/plugin.iframe.test.js +0 -42
  363. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  364. package/tests/plugins/plugin.resume.test.js +0 -98
  365. package/tests/plugins/plugin.text_selection.test.js +0 -203
  366. package/tests/plugins/plugin.url.test.js +0 -129
  367. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  368. package/tests/plugins/search/plugin.search.test.js +0 -173
  369. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  370. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  371. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  372. package/tests/plugins/tts/PageChunk.test.js +0 -57
  373. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  374. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  375. package/tests/plugins/tts/utils.test.js +0 -133
  376. package/tests/util/browserSniffing.test.js +0 -56
  377. package/tests/util/docCookies.test.js +0 -15
  378. package/tests/util/strings.test.js +0 -63
  379. package/tests/utils.js +0 -42
  380. package/webpack.config.js +0 -86
@@ -1,9 +1,8 @@
1
- import { nothing } from 'lit-html';
2
- import { repeat } from 'lit-html/directives/repeat.js';
3
- import { css, html, LitElement } from 'lit-element';
1
+ import { repeat } from 'lit/directives/repeat.js';
2
+ import { css, html, LitElement, nothing } from 'lit';
4
3
  import './bookmark-edit.js';
5
4
  import '@internetarchive/icon-edit-pencil/icon-edit-pencil.js';
6
- import bookmarkColorsCSS from '../assets/bookmark-colors.js';
5
+ import bookmarkColorsCSS from './bookmark-colors.js';
7
6
 
8
7
  export class IABookmarksList extends LitElement {
9
8
  static get properties() {
@@ -100,24 +99,23 @@ export class IABookmarksList extends LitElement {
100
99
  const { className } = this.bookmarkColorInfo(bookmark.color);
101
100
  const activeClass = bookmark.id === this.activeBookmarkID ? 'active' : '';
102
101
  return html`
103
- <li
104
- @click=${() => this.emitSelectedEvent(bookmark)}
105
- tabindex="0"
106
- data-pageIndex=${bookmark.id}
107
- >
102
+ <li data-pageIndex=${bookmark.id}>
108
103
  <div class="separator"></div>
109
- <div class="content ${activeClass}">
110
- <button
111
- class="edit"
112
- @click=${e => this.editBookmark(e, bookmark)}
113
- title="Edit this bookmark"
114
- >
115
- <ia-icon-edit-pencil></ia-icon-edit-pencil>
116
- </button>
117
- <h4>
118
- <icon-bookmark class=${className}></icon-bookmark>
119
- <span> Page ${bookmark.page}</span>
120
- </h4>
104
+ <div class="bookmark-card ${activeClass}">
105
+ <div class="bookmark-header" @click=${() => this.emitSelectedEvent(bookmark)}>
106
+ <button>
107
+ <icon-bookmark class=${className} aria-label="${className} bookmark"></icon-bookmark>
108
+ <span> Page ${bookmark.page}</span>
109
+ </button>
110
+ <button
111
+ class="edit"
112
+ @click=${e => this.editBookmark(e, bookmark)}
113
+ title="Edit this bookmark"
114
+ aria-expanded=${editMode ? 'true' : 'false'}
115
+ >
116
+ <ia-icon-edit-pencil aria-hidden="true"></ia-icon-edit-pencil>
117
+ </button>
118
+ </div>
121
119
  ${!editMode && bookmark.note ? html`<p>${bookmark.note}</p>` : nothing}
122
120
  ${editMode ? this.editBookmarkComponent : nothing}
123
121
  </div>
@@ -209,19 +207,24 @@ export class IABookmarksList extends LitElement {
209
207
  font-style: italic;
210
208
  }
211
209
 
212
- h4 {
210
+ .bookmark-header {
211
+ display: flex;
212
+ align-items: center;
213
213
  margin: 0;
214
214
  font-size: 1.4rem;
215
+ font-weight: bold;
215
216
  }
216
- h4 * {
217
- display: inline-block;
218
- }
219
- h4 icon-bookmark {
220
- vertical-align: bottom;
217
+
218
+ .bookmark-header > button:first-child {
219
+ flex: 1;
220
+ display: flex;
221
+ align-items: center;
222
+ gap: 4px;
223
+ padding: 4px;
221
224
  }
222
- h4 span {
223
- vertical-align: top;
224
- padding-top: 1%;
225
+
226
+ ia-icon-edit-pencil {
227
+ pointer-events: none;
225
228
  }
226
229
 
227
230
  p {
@@ -244,38 +247,34 @@ export class IABookmarksList extends LitElement {
244
247
  display: none;
245
248
  }
246
249
  li {
247
- cursor: pointer;
248
- outline: none;
249
250
  position: relative;
250
251
  }
251
- li .content {
252
- padding: 2px 0 4px 2px;
252
+
253
+ li .bookmark-card {
253
254
  border: var(--activeBorderWidth) solid transparent;
254
- padding: .2rem 0 .4rem .2rem;
255
+ border-radius: 4px;
255
256
  }
256
- li .content.active {
257
+
258
+ li .bookmark-card.active {
257
259
  border: var(--activeBorderWidth) solid #538bc5;
258
260
  }
259
- li button.edit {
260
- padding: 5px 2px 0 0;
261
+
262
+ .bookmark-header button {
261
263
  background: transparent;
262
264
  cursor: pointer;
263
- height: 40px;
264
- width: 40px;
265
- position: absolute;
266
- right: 2px;
267
- top: 2px;
268
- text-align: right;
269
265
  -webkit-appearance: none;
270
266
  appearance: none;
271
- outline: none;
272
267
  box-sizing: border-box;
273
268
  border: none;
269
+ padding: 0;
270
+ text-align: left;
274
271
  }
275
- li button.edit > * {
276
- display: block;
277
- height: 100%;
278
- width: 100%;
272
+
273
+ li button.edit {
274
+ height: 34px;
275
+ width: 34px;
276
+ flex-shrink: 0;
277
+ text-align: center;
279
278
  }
280
279
  `;
281
280
 
@@ -1,10 +1,10 @@
1
- import { LitElement, html } from 'lit-element';
2
- import buttonStyles from '../assets/button-base.js';
1
+ import { LitElement, html } from 'lit';
2
+ import buttonStyles from '../../css/button-base.js';
3
3
 
4
4
  class BookmarksLogin extends LitElement {
5
5
  static get properties() {
6
6
  return {
7
- url: { type: String }
7
+ url: { type: String },
8
8
  };
9
9
  }
10
10
 
@@ -0,0 +1,63 @@
1
+ import { html } from 'lit';
2
+ import './delete-modal-actions.js';
3
+ import './bookmark-button.js';
4
+ import './ia-bookmarks.js';
5
+
6
+ import './bookmark-edit.js';
7
+ import './bookmarks-list.js';
8
+ import '@internetarchive/icon-bookmark';
9
+
10
+
11
+ export default class BookmarksProvider {
12
+ constructor(options) {
13
+ const {
14
+ baseHost,
15
+ signedIn,
16
+ bookreader,
17
+ modal,
18
+ onProviderChange,
19
+ } = options;
20
+
21
+ const referrerStr = `referer=${encodeURIComponent(location.href)}`;
22
+ const loginUrl = `https://${baseHost}/account/login?${referrerStr}`;
23
+
24
+ this.component = document.createElement('ia-bookmarks');
25
+ this.component.bookreader = bookreader;
26
+ this.component.displayMode = signedIn ? 'bookmarks' : 'login';
27
+ this.component.modal = modal;
28
+ this.component.loginOptions = {
29
+ loginClicked: this.bookmarksLoginClicked,
30
+ loginUrl,
31
+ };
32
+ this.bindEvents();
33
+
34
+ this.icon = html`<icon-bookmark aria-hidden="true" role="presentation" state="hollow" style="--iconWidth: 16px; --iconHeight: 24px;"></icon-bookmark>`;
35
+ this.label = 'Bookmarks';
36
+ this.id = 'bookmarks';
37
+ this.onProviderChange = onProviderChange;
38
+ this.component.setup();
39
+ this.updateMenu(this.component.bookmarks.length);
40
+ }
41
+
42
+ updateMenu(count) {
43
+ this.menuDetails = `(${count})`;
44
+ }
45
+
46
+ bindEvents() {
47
+ this.component.addEventListener('bookmarksChanged', this.bookmarksChanged.bind(this));
48
+ }
49
+
50
+ bookmarksChanged({ detail }) {
51
+ const bookmarksLength = Object.keys(detail.bookmarks).length;
52
+ this.updateMenu(bookmarksLength);
53
+ this.onProviderChange(detail.bookmarks, detail.showSidePanel);
54
+ }
55
+
56
+ bookmarksLoginClicked() {
57
+ window.archive_analytics?.send_event_no_sampling(
58
+ 'BookReader',
59
+ `BookmarksLogin`,
60
+ window.location.path,
61
+ );
62
+ }
63
+ }
@@ -1,4 +1,4 @@
1
- import { LitElement, html, css } from 'lit-element';
1
+ import { LitElement, html, css } from 'lit';
2
2
 
3
3
  export default class DeleteModalActions extends LitElement {
4
4
  static get styles() {
@@ -1,6 +1,7 @@
1
- import { render, nothing } from 'lit-html';
2
- import { LitElement, html, css } from 'lit-element';
3
- import buttonStyles from '../assets/button-base.js';
1
+ import { LitElement, html, css, render } from 'lit';
2
+ // eslint-disable-next-line no-unused-vars
3
+ import { ModalConfig, ModalManager } from '@internetarchive/modal-manager';
4
+ import buttonStyles from '../../css/button-base.js';
4
5
  import './bookmarks-loginCTA.js';
5
6
 
6
7
  const api = {
@@ -57,9 +58,11 @@ class IABookmarks extends LitElement {
57
58
  activeBookmarkID: { type: String },
58
59
  bookmarks: { type: Array },
59
60
  bookreader: { type: Object },
60
- options: { type: Object },
61
61
  displayMode: { type: String },
62
62
  editedBookmark: { type: Object },
63
+ deleteModalConfig: { type: Object},
64
+ modal: { attribute: false },
65
+ loginOptions: { type: Object, attribute: false },
63
66
  };
64
67
  }
65
68
 
@@ -92,7 +95,12 @@ class IABookmarks extends LitElement {
92
95
  this.bookmarks = [];
93
96
  this.bookreader = {};
94
97
  this.editedBookmark = {};
95
- this.options = {};
98
+ /** @type {ModalManager} */
99
+ this.modal = undefined;
100
+ this.loginOptions = {
101
+ loginClicked: () => {},
102
+ loginUrl: '',
103
+ };
96
104
  /**
97
105
  * Toggles display to either bookmarks or login cta
98
106
  * @param {('bookmarks'|'login')} displayMode
@@ -101,6 +109,7 @@ class IABookmarks extends LitElement {
101
109
 
102
110
  this.bookmarkColors = [{
103
111
  id: 0,
112
+ // FIXME: This is also used as the aria-label
104
113
  className: 'red',
105
114
  }, {
106
115
  id: 1,
@@ -113,21 +122,58 @@ class IABookmarks extends LitElement {
113
122
  // eslint-disable-next-line
114
123
  this.defaultColor = this.bookmarkColors[0];
115
124
  this.api = api;
125
+ this.deleteModalConfig = new ModalConfig({
126
+ title: 'Delete Bookmark',
127
+ headline: 'This bookmark contains a note. Deleting it will permanently delete the note. Are you sure?',
128
+ headerColor: '#194880',
129
+ });
116
130
  }
117
131
 
118
- updated() {
132
+ updated(changed) {
133
+ if (changed.has('displayMode')) {
134
+ this.updateDisplay();
135
+ }
136
+
119
137
  this.emitBookmarksChanged();
120
138
  }
121
139
 
122
140
  setup() {
123
- this.api.identifier = this.bookreader.bookId;
124
- this.fetchBookmarks()
125
- .then(() => this.initializeBookmarks())
126
- .catch((err) => this.displayMode = 'login');
141
+ this.api.identifier = this.getIdentifier();
142
+ if (this.displayMode === 'login') {
143
+ return;
144
+ }
145
+ this.fetchUserBookmarks();
146
+ this.setBREventListeners();
127
147
  }
128
148
 
129
- initializeBookmarks() {
130
- this.displayMode = 'bookmarks';
149
+ /**
150
+ * get identifier for current book including sub-files
151
+ *
152
+ * @returns Identifer
153
+ */
154
+ getIdentifier() {
155
+ if (this.bookreader.bookId !== this.bookreader.subPrefix) {
156
+ return `${this.bookreader.bookId}/${this.bookreader.subPrefix}`;
157
+ }
158
+
159
+ return this.bookreader.bookId;
160
+ }
161
+
162
+ updateDisplay() {
163
+ if (this.displayMode === 'bookmarks') {
164
+ this.fetchUserBookmarks();
165
+ }
166
+ }
167
+
168
+ async fetchUserBookmarks() {
169
+ if (!this.api.identifier) {
170
+ return;
171
+ }
172
+ await this.fetchBookmarks();
173
+ this.initializeBookmarks();
174
+ }
175
+
176
+ setBREventListeners() {
131
177
  ['3PageViewSelected'].forEach((event) => {
132
178
  window.addEventListener(`BookReader:${event}`, (e) => {
133
179
  setTimeout(() => {
@@ -147,12 +193,12 @@ class IABookmarks extends LitElement {
147
193
  });
148
194
  ['zoomOut', 'zoomIn', 'resize'].forEach((event) => {
149
195
  window.addEventListener(`BookReader:${event}`, () => {
150
- if (this.bookreader.mode === this.bookreader.constModeThumb) {
151
- this.renderBookmarkButtons();
152
- }
196
+ this.renderBookmarkButtons();
153
197
  });
154
198
  });
199
+ }
155
200
 
201
+ initializeBookmarks() {
156
202
  this.renderBookmarkButtons();
157
203
  this.markActiveBookmark(true);
158
204
  this.emitBookmarksChanged();
@@ -181,8 +227,8 @@ class IABookmarks extends LitElement {
181
227
  color: this.getBookmarkColor(color) ? color : this.defaultColor.id,
182
228
  };
183
229
 
184
- const page = IABookmarks.formatPage(this.bookreader.getPageNum(leafNum));
185
- const thumbnail = this.bookreader.getPageURI(`${leafNum}`.replace(/\D/g, ''), 32); // Request thumbnail 1/32 the size of original image
230
+ const page = IABookmarks.formatPage(this.bookreader.book.getPageNum(leafNum));
231
+ const thumbnail = this.bookreader.book.getPageURI(`${leafNum}`.replace(/\D/g, ''), 32); // Request thumbnail 1/32 the size of original image
186
232
  const bookmark = {
187
233
  ...nomalizedParams,
188
234
  id: leafNum,
@@ -194,27 +240,35 @@ class IABookmarks extends LitElement {
194
240
  return bookmark;
195
241
  }
196
242
 
197
- fetchBookmarks() {
198
- return this.api.getAll().then((res) => res.json()).then(({
243
+ async fetchBookmarks() {
244
+ const resText = await this.api.getAll().then(r=> r.text());
245
+ let parsedResponse;
246
+ try {
247
+ parsedResponse = JSON.parse(resText);
248
+ } catch (e) {
249
+ parsedResponse = {error : e.message};
250
+ }
251
+
252
+ const {
199
253
  success,
200
254
  error = 'Something happened while fetching bookmarks.',
201
255
  value: bkmrks = [],
202
- }) => {
203
- if (!success) {
204
- throw new Error(`Failed to load bookmarks: ${error}`);
205
- }
256
+ } = parsedResponse;
206
257
 
207
- const bookmarks = {};
208
- Object.keys(bkmrks).forEach((leafNum) => {
209
- const bookmark = bkmrks[leafNum];
210
- const formattedLeafNum = parseInt(leafNum, 10);
211
- const formattedBookmark = this.formatBookmark({ ...bookmark, leafNum: formattedLeafNum });
212
- bookmarks[leafNum] = formattedBookmark;
213
- });
258
+ if (!success) {
259
+ console?.warn('Error fetching bookmarks', error);
260
+ }
214
261
 
215
- this.bookmarks = bookmarks;
216
- return bookmarks;
262
+ const bookmarks = {};
263
+ Object.keys(bkmrks).forEach((leafNum) => {
264
+ const bookmark = bkmrks[leafNum];
265
+ const formattedLeafNum = parseInt(leafNum, 10);
266
+ const formattedBookmark = this.formatBookmark({ ...bookmark, leafNum: formattedLeafNum });
267
+ bookmarks[leafNum] = formattedBookmark;
217
268
  });
269
+
270
+ this.bookmarks = bookmarks;
271
+ return bookmarks;
218
272
  }
219
273
 
220
274
  emitBookmarksChanged() {
@@ -250,12 +304,14 @@ class IABookmarks extends LitElement {
250
304
 
251
305
  pages.forEach((pageEl) => {
252
306
  const existingButton = pageEl.querySelector('.bookmark-button');
253
- if (existingButton) { existingButton.remove(); }
307
+ if (existingButton) {
308
+ existingButton.remove();
309
+ }
254
310
  const pageID = +pageEl.classList.value.match(/pagediv\d+/)[0].replace(/\D/g, '');
255
311
  const pageBookmark = this.getBookmark(pageID);
256
312
  const bookmarkState = pageBookmark ? 'filled' : 'hollow';
257
313
  // eslint-disable-next-line
258
- const pageData = this.bookreader._models.book.getPage(pageID);
314
+ const pageData = this.bookreader.book.getPage(pageID);
259
315
  const { isViewable } = pageData;
260
316
 
261
317
  if (!isViewable) { return; }
@@ -375,7 +431,7 @@ class IABookmarks extends LitElement {
375
431
 
376
432
  bookmarkSelected({ detail }) {
377
433
  const { leafNum } = detail.bookmark;
378
- this.bookreader.jumpToPage(`${this.bookreader.getPageNum(`${leafNum}`.replace(/\D/g, ''))}`);
434
+ this.bookreader.jumpToPage(`${this.bookreader.book.getPageNum(`${leafNum}`.replace(/\D/g, ''))}`);
379
435
  this.activeBookmarkID = leafNum;
380
436
  }
381
437
 
@@ -390,33 +446,26 @@ class IABookmarks extends LitElement {
390
446
  confirmDeletion(pageID) {
391
447
  const existingBookmark = this.getBookmark(pageID);
392
448
  if (existingBookmark.note) {
393
- this.emitShowModal(pageID);
449
+ this.displayDeletionModal(pageID);
394
450
  return;
395
451
  }
396
452
  this.deleteBookmark({ detail: { id: `${pageID}` } });
397
453
  }
398
454
 
399
- emitShowModal(pageID) {
400
- this.dispatchEvent(new CustomEvent('showItemNavigatorModal', {
401
- bubbles: true,
402
- composed: true,
403
- detail: {
404
- customModalContent: html`
405
- <delete-modal-actions
406
- .deleteAction=${() => this.deleteBookmark({ detail: { id: `${pageID}` } })}
407
- .cancelAction=${() => this.emitCloseModal()}
408
- .pageID=${pageID}
409
- ></delete-modal-actions>
410
- `,
411
- },
412
- }));
413
- }
455
+ displayDeletionModal(pageID) {
456
+ const customModalContent = html`
457
+ <delete-modal-actions
458
+ .deleteAction=${() => this.deleteBookmark({ detail: { id: `${pageID}` } })}
459
+ .cancelAction=${() => this.modal.closeModal()}
460
+ .pageID=${pageID}
461
+ ></delete-modal-actions>
462
+ `;
414
463
 
415
- emitCloseModal() {
416
- this.dispatchEvent(new CustomEvent('closeItemNavigatorModal', {
417
- bubbles: true,
418
- composed: true,
419
- }));
464
+
465
+ this.modal.showModal({
466
+ config: this.deleteModalConfig,
467
+ customModalContent,
468
+ });
420
469
  }
421
470
 
422
471
  deleteBookmark({ detail }) {
@@ -427,18 +476,10 @@ class IABookmarks extends LitElement {
427
476
 
428
477
  this.api.delete(detail.id);
429
478
  this.editedBookmark = {};
430
- this.emitCloseModal();
479
+ this.modal.closeModal();
431
480
  this.renderBookmarkButtons();
432
481
  }
433
482
 
434
- /**
435
- * call `loginClicked` callback
436
- */
437
- loginClick() {
438
- const { loginClicked = () => {} } = this.options;
439
- loginClicked();
440
- }
441
-
442
483
  /**
443
484
  * Tells us if we should allow user to add bookmark via menu panel
444
485
  * returns { Boolean }
@@ -483,15 +524,23 @@ class IABookmarks extends LitElement {
483
524
  `;
484
525
  }
485
526
 
527
+ get bookmarkHelperMessage() {
528
+ return html`<p>Please use 1up or 2up view modes to add bookmark.</p>`;
529
+ }
530
+
486
531
  render() {
487
- const { loginUrl } = this.options;
488
532
  const bookmarks = html`
489
533
  ${this.bookmarksList}
490
- ${this.allowAddingBookmark ? this.addBookmarkButton : nothing}
534
+ ${this.allowAddingBookmark ? this.addBookmarkButton : this.bookmarkHelperMessage}
491
535
  `;
492
536
  return html`
493
537
  <section class="bookmarks">
494
- ${this.displayMode === 'login' ? html`<bookmarks-login @click=${this.loginClick} .url=${loginUrl}></bookmarks-login>` : bookmarks}
538
+ ${ this.displayMode === 'login'
539
+ ? html`<bookmarks-login
540
+ @click=${() => this.loginOptions.loginClicked()}
541
+ .url=${this.loginOptions.loginUrl}></bookmarks-login>`
542
+ : bookmarks
543
+ }
495
544
  </section>
496
545
  `;
497
546
  }