@internetarchive/bookreader 5.0.0-11-multiple-files → 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 (389) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +616 -1467
  4. package/BookReader/BookReader.js +2 -21564
  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 -12
  56. package/BookReader/icons/2up.svg +1 -15
  57. package/BookReader/icons/advance.svg +3 -26
  58. package/BookReader/icons/chevron-right.svg +1 -1
  59. package/BookReader/icons/close-circle-dark.svg +1 -0
  60. package/BookReader/icons/close-circle.svg +1 -1
  61. package/BookReader/icons/fullscreen.svg +1 -17
  62. package/BookReader/icons/fullscreen_exit.svg +1 -17
  63. package/BookReader/icons/hamburger.svg +1 -15
  64. package/BookReader/icons/left-arrow.svg +1 -12
  65. package/BookReader/icons/magnify-minus.svg +1 -16
  66. package/BookReader/icons/magnify-plus.svg +1 -17
  67. package/BookReader/icons/magnify.svg +1 -15
  68. package/BookReader/icons/pause.svg +1 -23
  69. package/BookReader/icons/play.svg +1 -22
  70. package/BookReader/icons/playback-speed.svg +1 -34
  71. package/BookReader/icons/read-aloud.svg +1 -22
  72. package/BookReader/icons/review.svg +3 -22
  73. package/BookReader/icons/slider-toggle.svg +1 -0
  74. package/BookReader/icons/thumbnails.svg +1 -17
  75. package/BookReader/icons/voice.svg +1 -0
  76. package/BookReader/icons/volume-full.svg +1 -22
  77. package/BookReader/images/BRicons.svg +5 -94
  78. package/BookReader/images/books_graphic.svg +1 -177
  79. package/BookReader/images/hypothesis.ico +0 -0
  80. package/BookReader/images/icon_book.svg +1 -12
  81. package/BookReader/images/icon_bookmark.svg +1 -12
  82. package/BookReader/images/icon_experiment.svg +1 -0
  83. package/BookReader/images/icon_gear.svg +1 -14
  84. package/BookReader/images/icon_hamburger.svg +1 -20
  85. package/BookReader/images/icon_home.svg +1 -21
  86. package/BookReader/images/icon_info.svg +1 -11
  87. package/BookReader/images/icon_one_page.svg +1 -8
  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 -15
  91. package/BookReader/images/icon_search_button.svg +1 -8
  92. package/BookReader/images/icon_share.svg +1 -9
  93. package/BookReader/images/icon_skip-ahead.svg +1 -6
  94. package/BookReader/images/icon_skip-back.svg +2 -13
  95. package/BookReader/images/icon_speaker.svg +1 -18
  96. package/BookReader/images/icon_speaker_open.svg +1 -10
  97. package/BookReader/images/icon_thumbnails.svg +1 -12
  98. package/BookReader/images/icon_toc.svg +1 -5
  99. package/BookReader/images/icon_two_pages.svg +1 -9
  100. package/BookReader/images/marker_chap-off.svg +1 -11
  101. package/BookReader/images/marker_chap-on.svg +1 -11
  102. package/BookReader/images/marker_srch-on.svg +1 -11
  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 -172
  108. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js +1 -165
  110. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  111. package/BookReader/plugins/plugin.chapters.js +19 -301
  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 -74
  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 -368
  122. package/BookReader/plugins/plugin.resume.js.map +1 -1
  123. package/BookReader/plugins/plugin.search.js +2 -1420
  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 -1080
  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 +2 -9193
  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 -269
  136. package/BookReader/plugins/plugin.url.js.map +1 -1
  137. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  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 -356
  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 +30 -16
  160. package/src/BookReader/Navbar/Navbar.js +201 -76
  161. package/src/BookReader/PageContainer.js +120 -23
  162. package/src/BookReader/ReduceSet.js +3 -3
  163. package/src/BookReader/Toolbar/Toolbar.js +19 -41
  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 +141 -13
  171. package/src/BookReader.js +711 -1241
  172. package/src/BookReaderPlugin.js +52 -0
  173. package/src/assets/icons/close-circle-dark.svg +1 -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 -17
  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 +33 -27
  188. package/src/css/_BRnav.scss +74 -70
  189. package/src/css/_BRpages.scss +171 -42
  190. package/src/css/_BRsearch.scss +69 -235
  191. package/src/css/_BRtoolbar.scss +5 -5
  192. package/src/css/_TextSelection.scss +129 -24
  193. package/src/css/_colorbox.scss +2 -2
  194. package/src/css/_controls.scss +24 -7
  195. package/src/css/_icons.scss +14 -1
  196. package/src/{BookNavigator/assets → css}/button-base.js +10 -3
  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 +29 -25
  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 +44 -32
  209. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  210. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +5 -10
  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 +310 -201
  217. package/src/plugins/plugin.experiments.js +321 -0
  218. package/src/plugins/plugin.iframe.js +1 -1
  219. package/src/plugins/plugin.iiif.js +141 -0
  220. package/src/plugins/plugin.resume.js +53 -50
  221. package/src/plugins/plugin.text_selection.js +522 -219
  222. package/src/plugins/plugin.vendor-fullscreen.js +7 -7
  223. package/src/plugins/search/plugin.search.js +380 -360
  224. package/src/{BookNavigator → plugins}/search/search-provider.js +94 -32
  225. package/src/{BookNavigator → plugins}/search/search-results.js +108 -90
  226. package/src/plugins/search/utils.js +50 -0
  227. package/src/plugins/search/view.js +79 -210
  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 +21 -31
  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 +191 -0
  238. package/src/plugins/{plugin.url.js → url/plugin.url.js} +47 -18
  239. package/src/util/TextSelectionManager.js +282 -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 -49
  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 -28
  253. package/.github/workflows/npm-publish.yml +0 -47
  254. package/.testcaferc.json +0 -5
  255. package/BookReader/bookreader-component-bundle.js +0 -14330
  256. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  257. package/BookReader/bookreader-component-bundle.js.map +0 -1
  258. package/BookReader/icons/sort-ascending.svg +0 -1
  259. package/BookReader/icons/sort-descending.svg +0 -1
  260. package/BookReader/jquery-1.10.1.js +0 -108
  261. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  262. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  263. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  264. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  265. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  266. package/BookReaderDemo/BookReaderDemo.css +0 -41
  267. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  268. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  269. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  270. package/BookReaderDemo/IIIFBookReader.js +0 -207
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  273. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  274. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  275. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  276. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  277. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  278. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  279. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  280. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  281. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  282. package/BookReaderDemo/demo-advanced.html +0 -33
  283. package/BookReaderDemo/demo-autoplay.html +0 -38
  284. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  285. package/BookReaderDemo/demo-embed.html +0 -26
  286. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  287. package/BookReaderDemo/demo-fullscreen.html +0 -33
  288. package/BookReaderDemo/demo-iiif.html +0 -34
  289. package/BookReaderDemo/demo-iiif.js +0 -26
  290. package/BookReaderDemo/demo-internetarchive.html +0 -74
  291. package/BookReaderDemo/demo-multiple.html +0 -43
  292. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  293. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  294. package/BookReaderDemo/demo-simple.html +0 -34
  295. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  296. package/BookReaderDemo/immersion-1up.html +0 -64
  297. package/BookReaderDemo/immersion-mode.html +0 -35
  298. package/BookReaderDemo/toggle_controls.html +0 -53
  299. package/BookReaderDemo/view_mode.html +0 -39
  300. package/BookReaderDemo/viewmode-cycle.html +0 -41
  301. package/CHANGELOG.md +0 -476
  302. package/CONTRIBUTING.md +0 -7
  303. package/codecov.yml +0 -17
  304. package/index.html +0 -31
  305. package/karma.conf.js +0 -23
  306. package/screenshot.png +0 -0
  307. package/scripts/postversion.js +0 -10
  308. package/scripts/preversion.js +0 -14
  309. package/scripts/version.js +0 -26
  310. package/src/BookNavigator/BookModel.js +0 -14
  311. package/src/BookNavigator/BookNavigator.js +0 -451
  312. package/src/BookNavigator/assets/book-loader.js +0 -27
  313. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  314. package/src/BookNavigator/assets/icon_close.js +0 -3
  315. package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
  316. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  317. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  318. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  319. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  320. package/src/BookNavigator/search/a-search-result.js +0 -55
  321. package/src/BookNavigator/volumes/volumes-provider.js +0 -75
  322. package/src/BookNavigator/volumes/volumes.js +0 -161
  323. package/src/BookReader/DebugConsole.js +0 -54
  324. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  325. package/src/ItemNavigator/ItemNavigator.js +0 -372
  326. package/src/ItemNavigator/providers/sharing.js +0 -29
  327. package/src/assets/icons/sort-ascending.svg +0 -1
  328. package/src/assets/icons/sort-descending.svg +0 -1
  329. package/src/css/_MobileNav.scss +0 -194
  330. package/src/dragscrollable-br.js +0 -261
  331. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  332. package/src/plugins/plugin.mobile_nav.js +0 -287
  333. package/tests/BookReader/BookModel.test.js +0 -312
  334. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  335. package/tests/BookReader/DebugConsole.test.js +0 -25
  336. package/tests/BookReader/ImageCache.test.js +0 -150
  337. package/tests/BookReader/Mode1Up.test.js +0 -164
  338. package/tests/BookReader/Mode2Up.test.js +0 -247
  339. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  340. package/tests/BookReader/PageContainer.test.js +0 -115
  341. package/tests/BookReader/ReduceSet.test.js +0 -38
  342. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  343. package/tests/BookReader/utils/classes.test.js +0 -88
  344. package/tests/BookReader/utils.test.js +0 -109
  345. package/tests/BookReader.options.test.js +0 -39
  346. package/tests/BookReader.test.js +0 -301
  347. package/tests/e2e/README.md +0 -75
  348. package/tests/e2e/autoplay.test.js +0 -13
  349. package/tests/e2e/base.test.js +0 -35
  350. package/tests/e2e/helpers/base.js +0 -258
  351. package/tests/e2e/helpers/debug.js +0 -13
  352. package/tests/e2e/helpers/desktopSearch.js +0 -72
  353. package/tests/e2e/helpers/mobileSearch.js +0 -85
  354. package/tests/e2e/helpers/mockSearch.js +0 -93
  355. package/tests/e2e/helpers/rightToLeft.js +0 -29
  356. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  357. package/tests/e2e/models/BookReader.js +0 -11
  358. package/tests/e2e/models/Navigation.js +0 -56
  359. package/tests/e2e/rightToLeft.test.js +0 -20
  360. package/tests/e2e/viewmode.test.js +0 -37
  361. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  362. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  363. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  364. package/tests/karma/BookNavigator/search-results.test.js +0 -240
  365. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  366. package/tests/karma/BookNavigator/volumes.test.js +0 -133
  367. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  368. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  369. package/tests/plugins/plugin.autoplay.test.js +0 -52
  370. package/tests/plugins/plugin.chapters.test.js +0 -130
  371. package/tests/plugins/plugin.iframe.test.js +0 -42
  372. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  373. package/tests/plugins/plugin.resume.test.js +0 -98
  374. package/tests/plugins/plugin.text_selection.test.js +0 -203
  375. package/tests/plugins/plugin.url.test.js +0 -129
  376. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  377. package/tests/plugins/search/plugin.search.test.js +0 -166
  378. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  379. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  380. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  381. package/tests/plugins/tts/PageChunk.test.js +0 -57
  382. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  383. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  384. package/tests/plugins/tts/utils.test.js +0 -133
  385. package/tests/util/browserSniffing.test.js +0 -56
  386. package/tests/util/docCookies.test.js +0 -15
  387. package/tests/util/strings.test.js +0 -63
  388. package/tests/utils.js +0 -42
  389. package/webpack.config.js +0 -86
@@ -0,0 +1,321 @@
1
+ // @ts-check
2
+ import { css, html, LitElement } from 'lit';
3
+ import { BookReaderPlugin } from '../BookReaderPlugin.js';
4
+ import { customElement, property, state } from 'lit/decorators.js';
5
+ import { sleep } from '../BookReader/utils.js';
6
+
7
+ // @ts-ignore
8
+ const BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);
9
+
10
+ class ExperimentModel {
11
+ /** @type {string} test */
12
+ name;
13
+ /** @type {string} */
14
+ title;
15
+ /** @type {string} */
16
+ description;
17
+ /** @type {string} */
18
+ icon;
19
+ /** @type {boolean} */
20
+ enabled;
21
+ /** @type {string} */
22
+ learnMore;
23
+
24
+ /** @type {import("@/src/BookReader.js").default} */
25
+ br;
26
+
27
+ assetRoot = '/BookReader/';
28
+
29
+ enabledLoading = false;
30
+
31
+ /**
32
+ * @param {string} path
33
+ */
34
+ buildAssetPath(path) {
35
+ return `${this.assetRoot}${path}`;
36
+ }
37
+
38
+ /**
39
+ * @param {object} param0
40
+ * @param {boolean} param0.manual Whether the experiment was enabled manually
41
+ */
42
+ async enable({ manual }) { }
43
+ async disable() { }
44
+ }
45
+
46
+ export class ExperimentsPlugin extends BookReaderPlugin {
47
+ options = {
48
+ enabled: true,
49
+
50
+ /** Where the state of this plugin is saved in localStorage */
51
+ localStorageKey: 'BrExperiments',
52
+
53
+ /** The experiments that should be shown in the experiments panel */
54
+ enabledExperiments: ['translate'],
55
+ }
56
+
57
+ /** @type {ExperimentModel[]} */
58
+ allExperiments = [
59
+ new class extends ExperimentModel {
60
+ name = 'translate';
61
+ title = 'Translate Plugin';
62
+ description = "Translate books directly in your browser.";
63
+ learnMore = 'https://mozilla.github.io/translations/';
64
+ icon = 'images/translate.svg';
65
+ enabled = false;
66
+ async enable({ manual = false}) {
67
+ if (BookReader.PLUGINS.translate) return;
68
+
69
+ await importAsScript(this.buildAssetPath('plugins/plugin.translate.js'));
70
+ this.br.initializePlugin('translate');
71
+ }
72
+ async disable() {
73
+ // need to reload to remove translate plugin script
74
+ // Sleep so that the event loop can finish processing before the reload
75
+ sleep(0).then(() => {
76
+ window.location.reload();
77
+ });
78
+ }
79
+ }(),
80
+ new class extends ExperimentModel {
81
+ name = 'hypothesis';
82
+ title = 'Hypothes.is';
83
+ description = 'Create public, collaborative, or fully private annotations on books and the web.';
84
+ learnMore = 'https://web.hypothes.is/about/';
85
+ icon = 'images/hypothesis.ico';
86
+ enabled = false;
87
+
88
+ async enable({ manual = false }) {
89
+ // Hypothesis configs ; see https://h.readthedocs.io/projects/client/en/latest/publishers/config.html
90
+ const configScript = document.createElement('script');
91
+ configScript.type = 'application/json';
92
+ configScript.className = 'js-hypothesis-config';
93
+ configScript.textContent = JSON.stringify({
94
+ // Open the sidebar if this is the first time enabling
95
+ openSidebar: manual,
96
+ assetRoot: this.buildAssetPath('hypothesis/'),
97
+ });
98
+
99
+ document.head.appendChild(configScript);
100
+ return importAsScript(this.buildAssetPath('hypothesis/build/boot.js'));
101
+ // For testing
102
+ // return importAsScript('http://localhost:3001/hypothesis');
103
+ }
104
+
105
+ async disable() {
106
+ // need to reload to remove the Hypothesis script
107
+ // Sleep so that the event loop can finish processing before the reload
108
+ sleep(0).then(() => {
109
+ window.location.reload();
110
+ });
111
+ }
112
+ }(),
113
+ ]
114
+
115
+ /** @type {BrExperimentsPanel} */
116
+ _panel;
117
+
118
+ async init() {
119
+ if (!this.options.enabled) {
120
+ return;
121
+ }
122
+
123
+ for (const experiment of this.allExperiments) {
124
+ // TODO: imagesBaseURL should be replaced with assetRoot everywhere
125
+ experiment.assetRoot = this.br.options.imagesBaseURL.replace(/images\/$/, '');
126
+ experiment.icon = experiment.buildAssetPath(experiment.icon);
127
+ experiment.br = this.br;
128
+ }
129
+
130
+ this._loadExperimentStates();
131
+ await Promise.resolve();
132
+ this._render();
133
+ }
134
+
135
+ _loadExperimentStates() {
136
+ const savedStates = JSON.parse(localStorage.getItem(this.options.localStorageKey) || '{}');
137
+ this.allExperiments.forEach(experiment => {
138
+ if (savedStates[experiment.name] !== undefined) {
139
+ experiment.enabled = savedStates[experiment.name];
140
+ if (experiment.enabled) {
141
+ experiment.enable({ manual: false });
142
+ }
143
+ }
144
+ });
145
+ }
146
+
147
+ _saveExperimentStates() {
148
+ const states = Object.fromEntries(
149
+ this.allExperiments.map(experiment => [experiment.name, experiment.enabled]),
150
+ );
151
+ localStorage.setItem(this.options.localStorageKey, JSON.stringify(states));
152
+ }
153
+
154
+ /**
155
+ * @param {ExperimentModel} experiment
156
+ * @param {boolean} enabled
157
+ */
158
+ async _toggleExperiment(experiment, enabled) {
159
+ experiment.enabledLoading = true;
160
+ this.br.plugins.archiveAnalytics?.sendEvent(`BRExperiment-${experiment.name}`, enabled ? 'Enable' : 'Disable');
161
+ this._panel.requestUpdate();
162
+
163
+ if (enabled) {
164
+ await experiment.enable({ manual: true });
165
+ } else {
166
+ await experiment.disable();
167
+ }
168
+ experiment.enabledLoading = false;
169
+ experiment.enabled = enabled;
170
+ this._panel.requestUpdate();
171
+ }
172
+
173
+ _render() {
174
+ this.br.shell.menuProviders['experiments'] = {
175
+ id: 'experiments',
176
+ icon: html`
177
+ <img src="${this.br.options.imagesBaseURL}/icon_experiment.svg" alt="" width="26"/>
178
+ `,
179
+ label: 'Experiments',
180
+ component: html`<br-experiments-panel
181
+ .experiments="${this.allExperiments.filter(experiment => this.options.enabledExperiments.includes(experiment.name))}"
182
+ @connected="${e => this._panel = e.target}"
183
+ @toggle="${async e => {
184
+ await this._toggleExperiment(e.detail.experiment, e.detail.enabled);
185
+ this._saveExperimentStates();
186
+ }}"
187
+ />`,
188
+ };
189
+ this.br.shell.updateMenuContents();
190
+ }
191
+ }
192
+ BookReader?.registerPlugin('experiments', ExperimentsPlugin);
193
+
194
+ @customElement('br-experiments-panel')
195
+ export class BrExperimentsPanel extends LitElement {
196
+
197
+ /** @type {ExperimentModel[]} */
198
+ @property({ type: Array }) experiments = [];
199
+
200
+ render() {
201
+ return html`
202
+ <div style="padding: 10px">
203
+ ${this.experiments.map(
204
+ experiment => html`
205
+ <br-experiment-toggle
206
+ .icon="${experiment.icon}"
207
+ .title="${experiment.title}"
208
+ .description="${experiment.description}"
209
+ .enabled="${experiment.enabled}"
210
+ .loading="${experiment.enabledLoading}"
211
+ .learnMore="${experiment.learnMore}"
212
+ @toggle="${e => this._dispatchToggle(experiment, e.detail.enabled)}"
213
+ ></br-experiment-toggle>
214
+ `,
215
+ )}
216
+ </div>
217
+ `;
218
+ }
219
+
220
+ /**
221
+ * @param {ExperimentModel} experiment
222
+ * @param {boolean} enabled
223
+ */
224
+ async _dispatchToggle(experiment, enabled) {
225
+ this.dispatchEvent(new CustomEvent('toggle', {
226
+ detail: { experiment, enabled },
227
+ }));
228
+ }
229
+
230
+ connectedCallback() {
231
+ super.connectedCallback();
232
+ this.dispatchEvent(new CustomEvent('connected'));
233
+ }
234
+ }
235
+
236
+ @customElement('br-experiment-toggle')
237
+ export class BrExperimentToggle extends LitElement {
238
+ @property({ type: String }) icon = '';
239
+ @property({ type: String }) title = '';
240
+ @property({ type: String }) description = '';
241
+ @property({ type: Boolean }) enabled = false;
242
+ @property({ type: Boolean }) loading = false;
243
+ @property({ type: String }) learnMore = '';
244
+
245
+ /**
246
+ * We want to disable the button immediately if loading, but only display
247
+ * the loading indicator after 200ms.
248
+ */
249
+ @state() _longLoading = false;
250
+
251
+ /** @override */
252
+ update(changedProperties) {
253
+ super.update(changedProperties);
254
+ if (changedProperties.has('loading')) {
255
+ if (this.loading) {
256
+ sleep(500).then(() => {
257
+ if (this.loading) {
258
+ this._longLoading = true;
259
+ this.requestUpdate();
260
+ }
261
+ });
262
+ } else {
263
+ this._longLoading = false;
264
+ }
265
+ }
266
+ }
267
+
268
+ render() {
269
+ return html`
270
+ <div class="experiment-card" style="margin-bottom: 10px;">
271
+ <div style="display: flex; align-items: center; gap: 10px;">
272
+ <img src="${this.icon}" style="width: 20px; height: 20px;" alt="" />
273
+ <div style="flex-grow: 1; font-weight: bold;">${this.title}</div>
274
+ </div>
275
+ <p style="opacity: 0.9">
276
+ ${this.description}
277
+ ${this.learnMore ? html`<a href="${this.learnMore}" target="_blank">Learn more</a>.` : ''}
278
+ </p>
279
+ <div style="display: flex">
280
+ <div style="flex-grow: 1;"></div>
281
+ <button @click="${this._dispatchToggle}" .disabled="${this.loading}">
282
+ ${this._longLoading ? 'Loading…' : this.enabled ? 'Disable' : 'Enable'}
283
+ </button>
284
+ </div>
285
+ </div>
286
+ `;
287
+ }
288
+
289
+ static get styles() {
290
+ return css`
291
+ .experiment-card {
292
+ border-radius: 8px;
293
+ background-color: #fff2;
294
+ padding: 10px;
295
+ display: flex;
296
+ flex-direction: column;
297
+ }
298
+
299
+ .experiment-card p {
300
+ margin: 6px 0;
301
+ }
302
+ `;
303
+ }
304
+
305
+ _dispatchToggle() {
306
+ this.dispatchEvent(new CustomEvent('toggle', { detail: { enabled: !this.enabled } }));
307
+ }
308
+ }
309
+
310
+ /**
311
+ * @param {string} url
312
+ */
313
+ async function importAsScript(url) {
314
+ return new Promise((resolve, reject) => {
315
+ const script = document.createElement('script');
316
+ script.src = url;
317
+ script.onload = () => resolve();
318
+ script.onerror = () => reject(new Error(`Failed to load script: ${url}`));
319
+ document.head.appendChild(script);
320
+ });
321
+ }
@@ -33,7 +33,7 @@ export function _attachEventListeners(br, parent = window.parent) {
33
33
 
34
34
  parent.postMessage(
35
35
  { type: MESSAGE_TYPE_FRAGMENT_CHANGE, fragment },
36
- '*'
36
+ '*',
37
37
  );
38
38
  });
39
39
 
@@ -0,0 +1,141 @@
1
+ // @ts-check
2
+ import { BookReaderPlugin } from '../BookReaderPlugin.js';
3
+
4
+ const BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);
5
+
6
+ export class IiifPlugin extends BookReaderPlugin {
7
+ options = {
8
+ enabled: true,
9
+ /** @type {import('@iiif/presentation-3').Manifest | import('@iiif/presentation-2').Manifest} */
10
+ manifest: null,
11
+ }
12
+
13
+ setup(options) {
14
+ super.setup(options);
15
+ this.manifest = this.options.manifest;
16
+
17
+ if (this.options.enabled) {
18
+ Object.assign(this.br.options, this.load());
19
+ }
20
+ }
21
+
22
+ load() {
23
+ if (this.manifest["@context"] == "http://iiif.io/api/presentation/2/context.json") {
24
+ const manifest = /** @type {import('@iiif/presentation-2').Manifest} */(this.manifest);
25
+ return this.manifestToBookReaderV2(manifest);
26
+ } else if (this.manifest["@context"] == "http://iiif.io/api/presentation/3/context.json") {
27
+ const manifest = /** @type {import('@iiif/presentation-3').Manifest} */(this.manifest);
28
+ return this.manifestToBookReaderV3(manifest);
29
+ } else {
30
+ throw new Error("Unsupported IIIF context " + this.manifest["@context"]);
31
+ }
32
+ }
33
+
34
+ /**
35
+ * @param {import('@iiif/presentation-3').Manifest} manifest
36
+ */
37
+ manifestToBookReaderV3(manifest) {
38
+ /** @type {import('../BookReader/options.js').BookReaderOptions} */
39
+ const book = {
40
+ bookTitle: resolveInternationalString(manifest.label),
41
+ pageProgression: manifest.viewingDirection == "right-to-left" ? "rl" : "lr",
42
+ // numLeafs: manifest.items.length,
43
+ metadata: (manifest.metadata || []).map((metadata) => {
44
+ return {
45
+ label: resolveInternationalString(metadata.label),
46
+ value: resolveInternationalString(metadata.value),
47
+ };
48
+ }),
49
+ data: [],
50
+ /**
51
+ * @this {import('../BookReader.js').default}
52
+ */
53
+ getPageURI(pageIndex, reduce, rotate) {
54
+ const percent = Math.floor(100 * 1 / reduce);
55
+ const bodyArr = manifest.items[pageIndex].items[0].items[0].body;
56
+ const body = bodyArr instanceof Array ? bodyArr[0] : bodyArr;
57
+ const uri = body.service[0].id;
58
+ return `${uri}/full/pct:${percent}/0/default.jpg`;
59
+ },
60
+ };
61
+
62
+ if (manifest.viewingDirection == "top-to-bottom" || manifest.viewingDirection == "bottom-to-top") {
63
+ console.warn("Unsupported viewingDirection", manifest.viewingDirection);
64
+ }
65
+
66
+ let spread = [];
67
+ manifest.items.forEach((item, index) => {
68
+ const bodyArr = manifest.items[index].items[0].items[0].body;
69
+ const body = bodyArr instanceof Array ? bodyArr[0] : bodyArr;
70
+ const uri = body.service[0].id;
71
+ /** @type {import('../BookReader/options.js').PageData} */
72
+ const pageData = {
73
+ uri,
74
+ width: item.width,
75
+ height: item.height,
76
+ pageNum: resolveInternationalString(item.label),
77
+ };
78
+ spread.push(pageData);
79
+ if (index % 2 == 0) {
80
+ book.data.push(spread);
81
+ spread = [];
82
+ }
83
+ });
84
+ if (spread.length > 0) {
85
+ book.data.push(spread);
86
+ }
87
+ return book;
88
+ }
89
+
90
+ /**
91
+ * @param {import('@iiif/presentation-2').Manifest} manifest
92
+ */
93
+ manifestToBookReaderV2(manifest) {
94
+ /** @type {import('../BookReader/options.js').BookReaderOptions} */
95
+ const book = {
96
+ bookTitle: manifest.label,
97
+ metadata: manifest.metadata,
98
+ thumbnail: manifest.thumbnail?.['@id'],
99
+ // numLeafs: manifest.sequences[0].canvases.length,
100
+ data: [],
101
+ /**
102
+ * @this {import('../BookReader.js').default}
103
+ */
104
+ getPageURI(pageIndex, reduce, rotate) {
105
+ const percent = Math.floor(100 * 1 / reduce);
106
+ const uri = manifest.sequences[0].canvases[pageIndex].images[0].resource.service['@id'];
107
+ return `${uri}/full/pct:${percent}/0/default.jpg`;
108
+ },
109
+ };
110
+
111
+ let spread = [];
112
+ manifest.sequences[0].canvases.forEach((canvas, index) => {
113
+ /** @type {import('../BookReader/options.js').PageData} */
114
+ const pageData = {
115
+ uri: canvas.images[0].resource.service['@id'],
116
+ width: canvas.width,
117
+ height: canvas.height,
118
+ pageNum: canvas.label,
119
+ };
120
+ spread.push(pageData);
121
+ if (index % 2 == 0) {
122
+ book.data.push(spread);
123
+ spread = [];
124
+ }
125
+ });
126
+ if (spread.length > 0) {
127
+ book.data.push(spread);
128
+ }
129
+ return book;
130
+ }
131
+ }
132
+
133
+ /**
134
+ * @param {import('@iiif/presentation-3').InternationalString} internationalString
135
+ */
136
+ function resolveInternationalString(internationalString) {
137
+ const anyLang = Object.keys(internationalString)[0];
138
+ return (internationalString[navigator.language] || internationalString[anyLang])[0];
139
+ }
140
+
141
+ BookReader?.registerPlugin('iiif', IiifPlugin);
@@ -1,3 +1,5 @@
1
+ import { EVENTS } from '../BookReader/events.js';
2
+ import { BookReaderPlugin } from '../BookReaderPlugin.js';
1
3
  import * as docCookies from '../util/docCookies.js';
2
4
 
3
5
  /* global BookReader */
@@ -8,61 +10,62 @@ BookReader.docCookies = docCookies;
8
10
  /**
9
11
  * Plugin to remember the current page number in a cookie
10
12
  */
11
- jQuery.extend(BookReader.defaultOptions, {
12
- enablePageResume: true,
13
- /** @type {string|null} eg '/', '/details/id' */
14
- resumeCookiePath: null,
15
- });
13
+ export class ResumePlugin extends BookReaderPlugin {
14
+ options = {
15
+ enabled: true,
16
+ /** @type {string|null} eg '/', '/details/id' */
17
+ cookiePath: null,
18
+ }
16
19
 
17
- /** @override */
18
- BookReader.prototype.init = (function(super_) {
19
- return function() {
20
- super_.call(this);
21
- if (this.options.enablePageResume) {
22
- this.bind(BookReader.eventNames.fragmentChange, () => {
23
- const params = this.paramsFromCurrent();
20
+ /** @override */
21
+ init() {
22
+ if (this.options.enabled) {
23
+ this.br.bind(EVENTS.fragmentChange, () => {
24
+ const params = this.br.paramsFromCurrent();
24
25
  this.updateResumeValue(params.index);
25
26
  });
26
27
  }
27
- };
28
- })(BookReader.prototype.init);
28
+ }
29
29
 
30
- /**
31
- * Gets page resume value, for remembering reader's page
32
- * Can be overridden for different implementation
33
- *
34
- * @return {number|null}
35
- */
36
- BookReader.prototype.getResumeValue = function() {
37
- const val = BookReader.docCookies.getItem('br-resume');
38
- if (val !== null) return parseInt(val);
39
- else return null;
40
- }
30
+ /**
31
+ * Gets page resume value, for remembering reader's page
32
+ * Can be overridden for different implementation
33
+ *
34
+ * @return {number|null}
35
+ */
36
+ getResumeValue() {
37
+ const val = BookReader.docCookies.getItem('br-resume');
38
+ if (val !== null) return parseInt(val);
39
+ else return null;
40
+ }
41
41
 
42
- /**
43
- * Return cookie path using pathname up to /page/... or /mode/...
44
- * using window.location.pathname for urlPathPart:
45
- * - matches encoding
46
- * - ignores querystring part
47
- * - ignores fragment part (after #)
48
- * @param {string} urlPathPart - window.location.pathname
49
- */
50
- BookReader.prototype.getCookiePath = function(urlPathPart) {
51
- return urlPathPart.match('.+?(?=/page/|/mode/|$)')[0];
52
- }
42
+ /**
43
+ * Return cookie path using pathname up to /page/... or /mode/...
44
+ * using window.location.pathname for urlPathPart:
45
+ * - matches encoding
46
+ * - ignores querystring part
47
+ * - ignores fragment part (after #)
48
+ * @param {string} urlPathPart - window.location.pathname
49
+ */
50
+ getCookiePath(urlPathPart) {
51
+ return urlPathPart.match('.+?(?=/page/|/mode/|$)')[0];
52
+ }
53
53
 
54
- /**
55
- * Sets page resume value, for remembering reader's page
56
- * Can be overridden for different implementation
57
- *
58
- * @param {Number} index leaf index
59
- * @param {string} [cookieName]
60
- */
61
- BookReader.prototype.updateResumeValue = function(index, cookieName) {
62
- const ttl = new Date(+new Date + 12096e5); // 2 weeks
63
- // For multiple files in item, leave resumeCookiePath blank
64
- // It's likely we can remove resumeCookiePath using getCookiePath()
65
- const path = this.options.resumeCookiePath
66
- || this.getCookiePath(window.location.pathname);
67
- BookReader.docCookies.setItem(cookieName || 'br-resume', index, ttl, path, null, false);
54
+ /**
55
+ * Sets page resume value, for remembering reader's page
56
+ * Can be overridden for different implementation
57
+ *
58
+ * @param {Number} index leaf index
59
+ * @param {string} [cookieName]
60
+ */
61
+ updateResumeValue(index, cookieName) {
62
+ const ttl = new Date(+new Date + 12096e5); // 2 weeks
63
+ // For multiple files in item, leave cookiePath blank
64
+ // It's likely we can remove cookiePath using getCookiePath()
65
+ const path = this.options.cookiePath
66
+ || this.getCookiePath(window.location.pathname);
67
+ BookReader.docCookies.setItem(cookieName || 'br-resume', index, ttl, path, null, false);
68
+ }
68
69
  }
70
+
71
+ BookReader?.registerPlugin('resume', ResumePlugin);