@internetarchive/bookreader 5.0.0-11 → 5.0.0-111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +649 -1225
  4. package/BookReader/BookReader.js +1 -1
  5. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  6. package/BookReader/BookReader.js.map +1 -1
  7. package/BookReader/bergamot-translator-worker.js +2966 -0
  8. package/BookReader/bergamot-translator-worker.wasm +0 -0
  9. package/BookReader/hypothesis/LICENSE +50 -0
  10. package/BookReader/hypothesis/README.md +55 -0
  11. package/BookReader/hypothesis/build/boot.js +1 -0
  12. package/BookReader/hypothesis/build/manifest.json +20 -0
  13. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
  14. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  15. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
  16. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  17. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
  18. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  19. package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
  20. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  35. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  36. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  37. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  38. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  39. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  40. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  41. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  42. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  43. package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
  44. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  45. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
  46. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  47. package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
  48. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  49. package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
  50. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  51. package/BookReader/hypothesis/package.json +126 -0
  52. package/BookReader/ia-bookreader-bundle.js +1904 -0
  53. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
  54. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  55. package/BookReader/icons/1up.svg +1 -1
  56. package/BookReader/icons/2up.svg +1 -1
  57. package/BookReader/icons/advance.svg +1 -1
  58. package/BookReader/icons/chevron-right.svg +1 -1
  59. package/BookReader/icons/close-circle-dark.svg +1 -1
  60. package/BookReader/icons/close-circle.svg +1 -1
  61. package/BookReader/icons/fullscreen.svg +1 -1
  62. package/BookReader/icons/fullscreen_exit.svg +1 -1
  63. package/BookReader/icons/hamburger.svg +1 -1
  64. package/BookReader/icons/left-arrow.svg +1 -1
  65. package/BookReader/icons/magnify-minus.svg +1 -1
  66. package/BookReader/icons/magnify-plus.svg +1 -1
  67. package/BookReader/icons/magnify.svg +1 -1
  68. package/BookReader/icons/pause.svg +1 -1
  69. package/BookReader/icons/play.svg +1 -1
  70. package/BookReader/icons/playback-speed.svg +1 -1
  71. package/BookReader/icons/read-aloud.svg +1 -1
  72. package/BookReader/icons/review.svg +1 -1
  73. package/BookReader/icons/slider-toggle.svg +1 -0
  74. package/BookReader/icons/thumbnails.svg +1 -1
  75. package/BookReader/icons/voice.svg +1 -0
  76. package/BookReader/icons/volume-full.svg +1 -1
  77. package/BookReader/images/BRicons.svg +3 -3
  78. package/BookReader/images/books_graphic.svg +1 -1
  79. package/BookReader/images/hypothesis.ico +0 -0
  80. package/BookReader/images/icon_book.svg +1 -1
  81. package/BookReader/images/icon_bookmark.svg +1 -1
  82. package/BookReader/images/icon_experiment.svg +1 -0
  83. package/BookReader/images/icon_gear.svg +1 -1
  84. package/BookReader/images/icon_hamburger.svg +1 -1
  85. package/BookReader/images/icon_home.svg +1 -1
  86. package/BookReader/images/icon_info.svg +1 -1
  87. package/BookReader/images/icon_one_page.svg +1 -1
  88. package/BookReader/images/icon_pause.svg +1 -1
  89. package/BookReader/images/icon_play.svg +1 -1
  90. package/BookReader/images/icon_playback-rate.svg +1 -1
  91. package/BookReader/images/icon_search_button.svg +1 -1
  92. package/BookReader/images/icon_share.svg +1 -1
  93. package/BookReader/images/icon_skip-ahead.svg +1 -1
  94. package/BookReader/images/icon_skip-back.svg +1 -1
  95. package/BookReader/images/icon_speaker.svg +1 -1
  96. package/BookReader/images/icon_speaker_open.svg +1 -1
  97. package/BookReader/images/icon_thumbnails.svg +1 -1
  98. package/BookReader/images/icon_toc.svg +1 -1
  99. package/BookReader/images/icon_two_pages.svg +1 -1
  100. package/BookReader/images/marker_chap-off.svg +1 -1
  101. package/BookReader/images/marker_chap-on.svg +1 -1
  102. package/BookReader/images/marker_srch-on.svg +1 -1
  103. package/BookReader/images/translate.svg +1 -0
  104. package/BookReader/images/unviewable_page.png +0 -0
  105. package/BookReader/jquery-3.js +2 -0
  106. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  107. package/BookReader/plugins/plugin.archive_analytics.js +1 -1
  108. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js +1 -1
  110. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  111. package/BookReader/plugins/plugin.chapters.js +22 -1
  112. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  113. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  114. package/BookReader/plugins/plugin.experiments.js +3 -0
  115. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  116. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  117. package/BookReader/plugins/plugin.iframe.js +1 -1
  118. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  119. package/BookReader/plugins/plugin.iiif.js +2 -0
  120. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  121. package/BookReader/plugins/plugin.resume.js +1 -1
  122. package/BookReader/plugins/plugin.resume.js.map +1 -1
  123. package/BookReader/plugins/plugin.search.js +2 -1
  124. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  125. package/BookReader/plugins/plugin.search.js.map +1 -1
  126. package/BookReader/plugins/plugin.text_selection.js +24 -1
  127. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  128. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  129. package/BookReader/plugins/plugin.translate.js +159 -0
  130. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  131. package/BookReader/plugins/plugin.translate.js.map +1 -0
  132. package/BookReader/plugins/plugin.tts.js +1 -1
  133. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  134. package/BookReader/plugins/plugin.tts.js.map +1 -1
  135. package/BookReader/plugins/plugin.url.js +2 -1
  136. package/BookReader/plugins/plugin.url.js.LICENSE.txt +1 -0
  137. package/BookReader/plugins/plugin.url.js.map +1 -1
  138. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
  139. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  140. package/BookReader/plugins/translator-worker.js +2 -0
  141. package/BookReader/plugins/translator-worker.js.map +1 -0
  142. package/BookReader/silence.mp3 +0 -0
  143. package/BookReader/translator-worker.js +475 -0
  144. package/BookReader/webcomponents-bundle.js +3 -0
  145. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  146. package/BookReader/webcomponents-bundle.js.map +1 -0
  147. package/README.md +14 -3
  148. package/jsconfig.json +19 -0
  149. package/package.json +93 -70
  150. package/src/BookReader/BookModel.js +92 -46
  151. package/src/BookReader/DragScrollable.js +233 -0
  152. package/src/BookReader/ImageCache.js +49 -16
  153. package/src/BookReader/Mode1Up.js +66 -365
  154. package/src/BookReader/Mode1UpLit.js +392 -0
  155. package/src/BookReader/Mode2Up.js +87 -1315
  156. package/src/BookReader/Mode2UpLit.js +786 -0
  157. package/src/BookReader/ModeAbstract.js +43 -0
  158. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  159. package/src/BookReader/ModeSmoothZoom.js +312 -0
  160. package/src/BookReader/ModeThumb.js +29 -15
  161. package/src/BookReader/Navbar/Navbar.js +201 -76
  162. package/src/BookReader/PageContainer.js +120 -23
  163. package/src/BookReader/ReduceSet.js +2 -2
  164. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  165. package/src/BookReader/events.js +3 -3
  166. package/src/BookReader/options.js +94 -17
  167. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  168. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  169. package/src/BookReader/utils/SelectionObserver.js +53 -0
  170. package/src/BookReader/utils/classes.js +1 -1
  171. package/src/BookReader/utils.js +136 -12
  172. package/src/BookReader.js +695 -1228
  173. package/src/BookReaderPlugin.js +52 -0
  174. package/src/assets/icons/magnify-minus.svg +3 -7
  175. package/src/assets/icons/magnify-plus.svg +3 -7
  176. package/src/assets/icons/slider-toggle.svg +1 -0
  177. package/src/assets/icons/voice.svg +1 -0
  178. package/src/assets/images/hypothesis.ico +0 -0
  179. package/src/assets/images/icon_experiment.svg +1 -0
  180. package/src/assets/images/translate.svg +1 -0
  181. package/src/assets/images/unviewable_page.png +0 -0
  182. package/src/assets/silence.mp3 +0 -0
  183. package/src/css/BookReader.scss +1 -5
  184. package/src/css/_BRBookmarks.scss +1 -1
  185. package/src/css/_BRComponent.scss +1 -1
  186. package/src/css/_BRicon.scss +8 -2
  187. package/src/css/_BRmain.scss +16 -3
  188. package/src/css/_BRnav.scss +74 -70
  189. package/src/css/_BRpages.scss +171 -42
  190. package/src/css/_BRsearch.scss +69 -30
  191. package/src/css/_BRtoolbar.scss +5 -5
  192. package/src/css/_TextSelection.scss +188 -24
  193. package/src/css/_colorbox.scss +2 -2
  194. package/src/css/_controls.scss +24 -7
  195. package/src/css/_icons.scss +8 -1
  196. package/src/{BookNavigator/assets → css}/button-base.js +2 -2
  197. package/src/css/icon_checkmark.js +9 -0
  198. package/src/css/sharedStyles.js +15 -0
  199. package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
  200. package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +25 -5
  201. package/src/ia-bookreader/ia-bookreader.js +666 -0
  202. package/src/ia-bookreader/sharing.js +27 -0
  203. package/src/ia-bookreader/viewable-files.js +98 -0
  204. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
  205. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
  206. package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
  207. package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
  208. package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +43 -31
  209. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  210. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
  211. package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
  212. package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
  213. package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
  214. package/src/plugins/plugin.archive_analytics.js +84 -78
  215. package/src/plugins/plugin.autoplay.js +99 -104
  216. package/src/plugins/plugin.chapters.js +319 -205
  217. package/src/plugins/plugin.experiments.js +339 -0
  218. package/src/plugins/plugin.iframe.js +1 -1
  219. package/src/plugins/plugin.iiif.js +141 -0
  220. package/src/plugins/plugin.resume.js +54 -51
  221. package/src/plugins/plugin.text_selection.js +539 -219
  222. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  223. package/src/plugins/search/plugin.search.js +374 -392
  224. package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
  225. package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
  226. package/src/plugins/search/utils.js +50 -0
  227. package/src/plugins/search/view.js +50 -68
  228. package/src/plugins/translate/TranslationManager.js +164 -0
  229. package/src/plugins/translate/plugin.translate.js +512 -0
  230. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  231. package/src/plugins/tts/FestivalTTSEngine.js +20 -30
  232. package/src/plugins/tts/PageChunk.js +33 -21
  233. package/src/plugins/tts/PageChunkIterator.js +11 -17
  234. package/src/plugins/tts/WebTTSEngine.js +131 -91
  235. package/src/plugins/tts/plugin.tts.js +345 -350
  236. package/src/plugins/tts/utils.js +77 -49
  237. package/src/plugins/url/UrlPlugin.js +211 -0
  238. package/src/plugins/{plugin.url.js → url/plugin.url.js} +105 -20
  239. package/src/util/TextSelectionManager.js +532 -0
  240. package/src/util/browserSniffing.js +33 -1
  241. package/src/util/cache.js +20 -0
  242. package/src/util/docCookies.js +21 -2
  243. package/src/util/lit.js +15 -0
  244. package/src/util/strings.js +1 -0
  245. package/.babelrc +0 -12
  246. package/.dependabot/config.yml +0 -6
  247. package/.eslintrc.js +0 -50
  248. package/.gitattributes +0 -2
  249. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  250. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  251. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  252. package/.github/workflows/node.js.yml +0 -37
  253. package/.github/workflows/npm-publish.yml +0 -47
  254. package/.testcaferc.json +0 -5
  255. package/BookReader/bookreader-component-bundle.js +0 -1450
  256. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  257. package/BookReader/bookreader-component-bundle.js.map +0 -1
  258. package/BookReader/jquery-1.10.1.js +0 -2
  259. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  260. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  261. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  262. package/BookReader/plugins/plugin.mobile_nav.js +0 -2
  263. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  264. package/BookReaderDemo/BookReaderDemo.css +0 -41
  265. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  266. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  267. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  268. package/BookReaderDemo/IIIFBookReader.js +0 -207
  269. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  270. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  273. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  274. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  275. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  276. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  277. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  278. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  279. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  280. package/BookReaderDemo/demo-advanced.html +0 -33
  281. package/BookReaderDemo/demo-autoplay.html +0 -38
  282. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  283. package/BookReaderDemo/demo-embed.html +0 -26
  284. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  285. package/BookReaderDemo/demo-fullscreen.html +0 -33
  286. package/BookReaderDemo/demo-iiif.html +0 -34
  287. package/BookReaderDemo/demo-iiif.js +0 -26
  288. package/BookReaderDemo/demo-internetarchive.html +0 -74
  289. package/BookReaderDemo/demo-multiple.html +0 -43
  290. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  291. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  292. package/BookReaderDemo/demo-simple.html +0 -34
  293. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  294. package/BookReaderDemo/immersion-1up.html +0 -64
  295. package/BookReaderDemo/immersion-mode.html +0 -35
  296. package/BookReaderDemo/toggle_controls.html +0 -53
  297. package/BookReaderDemo/view_mode.html +0 -39
  298. package/BookReaderDemo/viewmode-cycle.html +0 -41
  299. package/CHANGELOG.md +0 -495
  300. package/CONTRIBUTING.md +0 -7
  301. package/codecov.yml +0 -17
  302. package/index.html +0 -31
  303. package/karma.conf.js +0 -23
  304. package/screenshot.png +0 -0
  305. package/scripts/postversion.js +0 -10
  306. package/scripts/preversion.js +0 -14
  307. package/scripts/version.js +0 -26
  308. package/src/BookNavigator/BookModel.js +0 -14
  309. package/src/BookNavigator/BookNavigator.js +0 -446
  310. package/src/BookNavigator/assets/book-loader.js +0 -27
  311. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  312. package/src/BookNavigator/assets/icon_close.js +0 -3
  313. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  314. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  315. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  316. package/src/BookNavigator/search/a-search-result.js +0 -55
  317. package/src/BookReader/DebugConsole.js +0 -54
  318. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  319. package/src/ItemNavigator/ItemNavigator.js +0 -376
  320. package/src/ItemNavigator/providers/sharing.js +0 -29
  321. package/src/css/_MobileNav.scss +0 -194
  322. package/src/dragscrollable-br.js +0 -261
  323. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  324. package/src/plugins/plugin.mobile_nav.js +0 -287
  325. package/tests/BookReader/BookModel.test.js +0 -312
  326. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  327. package/tests/BookReader/DebugConsole.test.js +0 -25
  328. package/tests/BookReader/ImageCache.test.js +0 -150
  329. package/tests/BookReader/Mode1Up.test.js +0 -164
  330. package/tests/BookReader/Mode2Up.test.js +0 -247
  331. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  332. package/tests/BookReader/PageContainer.test.js +0 -115
  333. package/tests/BookReader/ReduceSet.test.js +0 -38
  334. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  335. package/tests/BookReader/utils/classes.test.js +0 -88
  336. package/tests/BookReader/utils.test.js +0 -109
  337. package/tests/BookReader.options.test.js +0 -39
  338. package/tests/BookReader.test.js +0 -301
  339. package/tests/e2e/README.md +0 -75
  340. package/tests/e2e/autoplay.test.js +0 -13
  341. package/tests/e2e/base.test.js +0 -35
  342. package/tests/e2e/helpers/base.js +0 -263
  343. package/tests/e2e/helpers/debug.js +0 -13
  344. package/tests/e2e/helpers/desktopSearch.js +0 -72
  345. package/tests/e2e/helpers/mobileSearch.js +0 -85
  346. package/tests/e2e/helpers/mockSearch.js +0 -93
  347. package/tests/e2e/helpers/rightToLeft.js +0 -29
  348. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  349. package/tests/e2e/models/BookReader.js +0 -11
  350. package/tests/e2e/models/Navigation.js +0 -56
  351. package/tests/e2e/rightToLeft.test.js +0 -20
  352. package/tests/e2e/viewmode.test.js +0 -37
  353. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  354. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  355. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  356. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  357. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  358. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  359. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  360. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  361. package/tests/plugins/plugin.autoplay.test.js +0 -52
  362. package/tests/plugins/plugin.chapters.test.js +0 -130
  363. package/tests/plugins/plugin.iframe.test.js +0 -42
  364. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  365. package/tests/plugins/plugin.resume.test.js +0 -98
  366. package/tests/plugins/plugin.text_selection.test.js +0 -203
  367. package/tests/plugins/plugin.url.test.js +0 -129
  368. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  369. package/tests/plugins/search/plugin.search.test.js +0 -173
  370. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  371. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  372. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  373. package/tests/plugins/tts/PageChunk.test.js +0 -57
  374. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  375. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  376. package/tests/plugins/tts/utils.test.js +0 -133
  377. package/tests/util/browserSniffing.test.js +0 -56
  378. package/tests/util/docCookies.test.js +0 -15
  379. package/tests/util/strings.test.js +0 -63
  380. package/tests/utils.js +0 -42
  381. package/webpack.config.js +0 -86
@@ -1,85 +1,165 @@
1
- /* global BookReader */
1
+ // @ts-check
2
+ import { css, html, LitElement, nothing } from "lit";
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ import { ifDefined } from 'lit/directives/if-defined.js';
5
+ import { styleMap } from 'lit/directives/style-map.js';
6
+ import '@internetarchive/icon-toc/icon-toc.js';
7
+ import { BookReaderPlugin } from "../BookReaderPlugin.js";
8
+ import { applyVariables } from "../util/strings.js";
9
+ import { promisifyEvent } from "../BookReader/utils.js";
10
+ /** @typedef {import('@/src/BookReader/BookModel.js').PageIndex} PageIndex */
11
+ /** @typedef {import('@/src/BookReader/BookModel.js').PageString} PageString */
12
+ /** @typedef {import('@/src/BookReader/BookModel.js').LeafNum} LeafNum */
13
+
14
+ // @ts-ignore
15
+ const BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);
16
+
2
17
  /**
3
18
  * Plugin for chapter markers in BookReader. Fetches from openlibrary.org
4
19
  * Could be forked, or extended to alter behavior
5
20
  */
21
+ export class ChaptersPlugin extends BookReaderPlugin {
22
+ options = {
23
+ enabled: true,
24
+
25
+ /**
26
+ * The Open Library host to fetch/query Open Library.
27
+ * @type {import('@/src/util/strings.js').StringWithVars}
28
+ */
29
+ openLibraryHost: 'https://openlibrary.org',
30
+
31
+ /**
32
+ * The Open Library edition to fetch the table of contents from.
33
+ * E.g. 'OL12345M'
34
+ *
35
+ * @type {import('@/src/util/strings.js').StringWithVars}
36
+ */
37
+ openLibraryId: '',
38
+
39
+ /**
40
+ * The Internet Archive identifier to fetch the Open Library table
41
+ * of contents from.
42
+ * E.g. 'goody'
43
+ *
44
+ * @type {import('@/src/util/strings.js').StringWithVars}
45
+ */
46
+ internetArchiveId: '',
47
+
48
+ /**
49
+ * @deprecated
50
+ * Old name for openLibraryHost
51
+ * @type {import('@/src/util/strings.js').StringWithVars}
52
+ */
53
+ olHost: 'https://openlibrary.org',
54
+
55
+ /**
56
+ * @deprecated
57
+ * Old name for internetArchiveId
58
+ * @type {import('@/src/util/strings.js').StringWithVars}
59
+ */
60
+ bookId: '{{bookId}}',
61
+ }
62
+
63
+ /** @type {TocEntry[]} */
64
+ _tocEntries;
6
65
 
7
- jQuery.extend(BookReader.defaultOptions, {
8
- olHost: 'https://openlibrary.org',
9
- enableChaptersPlugin: true,
10
- bookId: '',
11
- });
12
-
13
- /** @override Extend the constructor to add search properties */
14
- BookReader.prototype.setup = (function (super_) {
15
- return function (options) {
16
- super_.call(this, options);
17
-
18
- this.olHost = options.olHost;
19
- this.enableChaptersPlugin = options.enableChaptersPlugin;
20
- this.bookId = options.bookId;
21
- };
22
- })(BookReader.prototype.setup);
23
-
24
- /** @override Extend to call Open Library for TOC */
25
- BookReader.prototype.init = (function(super_) {
26
- return function() {
27
- super_.call(this);
28
- if (this.enableChaptersPlugin && this.ui !== 'embed') {
29
- this.getOpenLibraryRecord();
66
+ /** @type {BRChaptersPanel} */
67
+ _chaptersPanel;
68
+
69
+ /** @override */
70
+ setup(options) {
71
+ super.setup(options);
72
+ this.options.internetArchiveId = this.options.internetArchiveId || this.options.bookId;
73
+ this.options.openLibraryHost = this.options.openLibraryHost || this.options.olHost;
74
+ }
75
+
76
+ /** @override Extend to call Open Library for TOC */
77
+ async init() {
78
+ if (!this.options.enabled || this.br.ui === 'embed') {
79
+ return;
30
80
  }
31
- if (this.enableMobileNav) {
32
- this.bind(BookReader.eventNames.mobileNavOpen,
33
- () => {
34
- this.updateTOCState(this.firstIndex, this._tocEntries);
35
- if ($('table-contents-list').parent().hasClass('mm-opened')) {
36
- this.updateTOCState(this.firstIndex, this._tocEntries);
37
- }
38
- }
39
- );
40
- $(".BRmobileMenu__tableContents").click(
41
- () => {
42
- this.updateTOCState(this.firstIndex, this._tocEntries);
43
- }
44
- );
81
+
82
+ let rawTableOfContents = null;
83
+ // Prefer explicit TOC if specified
84
+ if (this.br.options.table_of_contents?.length) {
85
+ rawTableOfContents = this.br.options.table_of_contents;
86
+ } else {
87
+ // Otherwise fetch from OL
88
+ const olEdition = await this.getOpenLibraryRecord();
89
+ if (olEdition?.table_of_contents?.length) {
90
+ rawTableOfContents = olEdition.table_of_contents;
91
+ }
45
92
  }
46
- };
47
- })(BookReader.prototype.init);
48
93
 
49
- /**
50
- * Adds chapter marker to navigation scrubber
51
- *
52
- * @param {string} chapterTitle
53
- * @param {string} pageNumber
54
- * @param {number} pageIndex
55
- */
56
- BookReader.prototype.addChapter = function(chapterTitle, pageNumber, pageIndex) {
57
- const uiStringPage = 'Page'; // i18n
58
- const percentThrough = BookReader.util.cssPercentage(pageIndex, this.getNumLeafs() - 1);
59
- const jumpToChapter = (event) => {
60
- this.jumpToIndex($(event.delegateTarget).data('pageIndex'));
61
- $('.current-chapter').removeClass('current-chapter');
62
- $(event.delegateTarget).addClass('current-chapter');
63
- };
64
- const title = `${chapterTitle} | `;
65
- const pageStr = `${uiStringPage} ${pageNumber}`;
66
-
67
- //adding items to mobile table of contents
68
- const mobileChapter = $(`<li></li>`).append($(`<span class='BRTOCElementTitle'></span>`).text(title))
69
- .append($(`<span class='BRTOCElementPage'></span>`).text(pageStr));
70
- mobileChapter.addClass('BRtable-contents-el')
71
- .appendTo(this.$('.table-contents-list'))
72
- .data({ pageIndex });
73
-
74
- //adds .BRchapters to the slider only if pageIndex exists
75
- if (pageIndex != undefined) {
94
+ if (rawTableOfContents) {
95
+ this._tocEntries = rawTableOfContents
96
+ .map(rawTOCEntry => (Object.assign({}, rawTOCEntry, {
97
+ pageIndex: (
98
+ typeof rawTOCEntry.page_index === 'number' ? rawTOCEntry.page_index :
99
+ typeof(rawTOCEntry.leaf) == 'number' ? this.br.book.leafNumToIndex(rawTOCEntry.leaf) :
100
+ rawTOCEntry.pagenum ? this.br.book.getPageIndex(rawTOCEntry.pagenum) :
101
+ undefined
102
+ ),
103
+ })));
104
+ if (!this.br.shell) {
105
+ await promisifyEvent(window, 'BookReader:PostInit');
106
+ }
107
+ this._render();
108
+ this.br.bind(BookReader.eventNames.pageChanged, () => this._updateCurrent());
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Update the table of contents based on array of TOC entries.
114
+ */
115
+ _render() {
116
+ this.br.shell.menuProviders['chapters'] = {
117
+ id: 'chapters',
118
+ icon: html`<ia-icon-toc aria-hidden="true" role="presentation" style="width: var(--iconWidth); height: var(--iconHeight);"></ia-icon-toc>`,
119
+ label: 'Table of Contents',
120
+ component: html`<br-chapters-panel
121
+ .contents="${this._tocEntries}"
122
+ .jumpToPage="${(pageIndex) => {
123
+ this._updateCurrent(pageIndex);
124
+ this.br.jumpToIndex(pageIndex, { ariaLive: true });
125
+ }}"
126
+ @connected="${(e) => {
127
+ this._chaptersPanel = e.target;
128
+ this._updateCurrent();
129
+ }}"
130
+ />`,
131
+ };
132
+ this.br.shell.addMenuShortcut('chapters');
133
+ this.br.shell.updateMenuContents();
134
+ this._tocEntries.forEach((tocEntry, i) => this._renderMarker(tocEntry, i));
135
+ }
136
+
137
+ /**
138
+ * @param {TocEntry} tocEntry
139
+ * @param {number} entryIndex
140
+ */
141
+ _renderMarker(tocEntry, entryIndex) {
142
+ if (tocEntry.pageIndex == undefined) return;
143
+
144
+ //creates a string with non-void tocEntry.label and tocEntry.title
145
+ const chapterStr = [tocEntry.label, tocEntry.title]
146
+ .filter(x => x)
147
+ .join(' ') || `Chapter ${entryIndex + 1}`;
148
+
149
+ const percentThrough = BookReader.util.cssPercentage(tocEntry.pageIndex, this.br.book.getNumLeafs() - 1);
76
150
  $(`<div></div>`)
77
- .append($('<div />').text(title + pageStr))
151
+ .append(
152
+ $('<div />')
153
+ .text(chapterStr)
154
+ .append(
155
+ $('<div class="BRchapterPage" />')
156
+ .text(this.br.book.getPageName(tocEntry.pageIndex)),
157
+ ),
158
+ )
78
159
  .addClass('BRchapter')
79
160
  .css({ left: percentThrough })
80
- .appendTo(this.$('.BRnavline'))
81
- .data({ pageIndex })
82
- .hover(event => {
161
+ .appendTo(this.br.$('.BRnavline'))
162
+ .on("mouseenter", event => {
83
163
  // remove hover effect from other markers then turn on just for this
84
164
  const marker = event.currentTarget;
85
165
  const tooltip = marker.querySelector('div');
@@ -89,163 +169,197 @@ BookReader.prototype.addChapter = function(chapterTitle, pageNumber, pageIndex)
89
169
  if (tooltipOffset.x - boxSizeAdjust < 0) {
90
170
  tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);
91
171
  }
92
- this.$('.BRsearch,.BRchapter').removeClass('front');
172
+ this.br.$('.BRsearch,.BRchapter').removeClass('front');
93
173
  $(event.target).addClass('front');
94
- },
95
- event => $(event.target).removeClass('front')
96
- )
97
- .on('click', jumpToChapter);
174
+ })
175
+ .on("mouseleave", event => $(event.target).removeClass('front'))
176
+ .on('click', () => {
177
+ this._updateCurrent(tocEntry.pageIndex);
178
+ this.br.jumpToIndex(tocEntry.pageIndex, { ariaLive: true });
179
+ });
98
180
 
99
- //adding clickable properties to mobile chapters
100
- mobileChapter.bind('click', jumpToChapter)
101
- .addClass('chapter-clickable')
102
- .attr("data-event-click-tracking","BRTOCPanel|GoToChapter");
181
+ this.br.$('.BRchapter, .BRsearch').each((i, el) => {
182
+ const $el = $(el);
183
+ $el
184
+ .on("mouseenter", () => $el.addClass('front'))
185
+ .on("mouseleave", () => $el.removeClass('front'));
186
+ });
103
187
  }
104
188
 
105
- };
189
+ /**
190
+ * This makes a call to OL API and calls the given callback function with the
191
+ * response from the API.
192
+ */
193
+ async getOpenLibraryRecord() {
194
+ const olHost = applyVariables(this.options.openLibraryHost, this.br.options.vars);
106
195
 
107
- /*
108
- * Remove all chapters.
109
- */
110
- BookReader.prototype.removeChapters = function() {
111
- this.$('.BRnavpos .BRchapter').remove();
112
- };
196
+ if (this.options.openLibraryId) {
197
+ const openLibraryId = applyVariables(this.options.openLibraryId, this.br.options.vars);
198
+ return await $.ajax({ url: `${olHost}/books/${openLibraryId}.json` });
199
+ }
113
200
 
114
- /**
115
- * Update the table of contents based on array of TOC entries.
116
- * @param {TocEntry[]} tocEntries
117
- */
118
- BookReader.prototype.updateTOC = function(tocEntries) {
119
- this.removeChapters();
120
- if (this.enableMobileNav && tocEntries.length > 0) {
121
- this.$(".BRmobileMenu__tableContents").show();
201
+ if (this.options.internetArchiveId) {
202
+ const ocaid = applyVariables(this.options.internetArchiveId, this.br.options.vars);
203
+
204
+ // Try looking up by ocaid first, then by source_record
205
+ const baseQueryUrl = `${olHost}/query.json?type=/type/edition&*=&`;
206
+
207
+ let data = await $.ajax({
208
+ url: baseQueryUrl + new URLSearchParams({ ocaid, limit: '1' }),
209
+ });
210
+
211
+ if (!data || !data.length) {
212
+ // try source_records
213
+ data = await $.ajax({
214
+ url: baseQueryUrl + new URLSearchParams({ source_records: `ia:${ocaid}`, limit: '1' }),
215
+ });
216
+ }
217
+
218
+ return data?.[0];
219
+ }
220
+
221
+ return null;
122
222
  }
123
- for (let i = 0; i < tocEntries.length; i++) {
124
- this.addChapterFromEntry(tocEntries[i]);
223
+
224
+ /**
225
+ * @private
226
+ * Highlights the current chapter based on current page
227
+ * @param {PageIndex} curIndex
228
+ */
229
+ _updateCurrent(
230
+ curIndex = (this.br.mode == 2 ? Math.max(...this.br.displayedIndices) : this.br.firstIndex),
231
+ ) {
232
+ const tocEntriesIndexed = this._tocEntries.filter((el) => el.pageIndex != undefined).reverse();
233
+ const currChapter = tocEntriesIndexed[
234
+ // subtract one so that 2up shows the right label
235
+ tocEntriesIndexed.findIndex((chapter) => chapter.pageIndex <= curIndex)
236
+ ];
237
+ if (this._chaptersPanel) {
238
+ this._chaptersPanel.currentChapter = currChapter;
239
+ }
125
240
  }
126
- this._tocEntries = tocEntries;
127
- $('.table-contents-list').children().each((i, el) => {
128
- tocEntries[i].mobileHTML = el;
129
- });
130
- };
241
+ }
242
+ BookReader?.registerPlugin('chapters', ChaptersPlugin);
131
243
 
132
244
  /**
133
245
  * @typedef {Object} TocEntry
134
- * Table of contents entry as defined -- format is defined by Open Library
135
- * @property {string} pagenum
136
- * @property {number} level
137
- * @property {string} label
138
- * @property {{type: '/type/toc_item'}} type
139
- * @property {string} title
140
- * @property {HTMLElement} mobileHTML
141
- * @property {number} pageIndex
142
-
246
+ * Table of contents entry as defined by Open Library, with some extra values for internal use
247
+ * @property {number} [level]
248
+ * @property {string} [label]
249
+ * @property {string} [title]
250
+ * @property {PageString} [pagenum]
251
+ * @property {LeafNum} [leaf]
252
+ * @property {number} [pageIndex] - Added
143
253
  *
144
254
  * @example {
145
255
  * "pagenum": "17",
146
256
  * "level": 1,
147
257
  * "label": "CHAPTER I",
148
- * "type": {"key": "/type/toc_item"},
149
258
  * "title": "THE COUNTRY AND THE MISSION"
150
259
  * }
151
260
  */
152
261
 
153
- /**
154
- * @param {TocEntry} tocEntryObject
155
- */
156
- BookReader.prototype.addChapterFromEntry = function(tocEntryObject) {
157
- tocEntryObject.pageIndex = this.getPageIndex(tocEntryObject['pagenum']);
158
- //creates a string with non-void tocEntryObject.label and tocEntryObject.title
159
- const chapterStr = [tocEntryObject.label, tocEntryObject.title]
160
- .filter(x => x)
161
- .join(' ');
162
- this.addChapter(chapterStr, tocEntryObject['pagenum'], tocEntryObject.pageIndex);
163
- this.$('.BRchapter, .BRsearch').each((i, el) => {
164
- const $el = $(el);
165
- $el.hover(
166
- () => $el.addClass('front'),
167
- () => $el.removeClass('front'));
168
- });
169
- };
262
+ @customElement('br-chapters-panel')
263
+ export class BRChaptersPanel extends LitElement {
264
+ /** @type {TocEntry[]} */
265
+ @property({ type: Array })
266
+ contents = [];
170
267
 
171
- /**
172
- * getOpenLibraryRecord
173
- *
174
- * The bookreader is designed to call openlibrary API and constructs the
175
- * "Return book" button using the response.
176
- *
177
- * This makes a call to OL API and calls the given callback function with the
178
- * response from the API.
179
- */
180
- BookReader.prototype.getOpenLibraryRecord = function () {
181
- // Try looking up by ocaid first, then by source_record
182
- const baseURL = `${this.olHost}/query.json?type=/type/edition&*=`;
183
- const fetchUrlByBookId = `${baseURL}&ocaid=${this.bookId}`;
184
-
185
- /*
186
- * Update Chapter markers based on received record from Open Library.
187
- * Notes that Open Library record is used for extra metadata, and also for lending
188
- */
189
- const setUpChapterMarkers = (olObject) => {
190
- if (olObject && olObject.table_of_contents) {
191
- // XXX check here that TOC is valid
192
- this.updateTOC(olObject.table_of_contents);
268
+ /** @type {TocEntry?} */
269
+ @property({ type: Object })
270
+ currentChapter = {};
271
+
272
+ /** @type {(pageIndex: PageIndex) => void} */
273
+ jumpToPage = () => {};
274
+
275
+ /**
276
+ * @param {TocEntry[]} contents
277
+ */
278
+ constructor(contents) {
279
+ super();
280
+ this.contents = contents;
281
+ }
282
+
283
+ render() {
284
+ return html`
285
+ <ol>
286
+ ${this.contents.map(tocEntry => this.renderTOCEntry(tocEntry))}
287
+ </ol>
288
+ `;
289
+ }
290
+
291
+ /**
292
+ * @param {TocEntry} tocEntry
293
+ */
294
+ renderTOCEntry(tocEntry) {
295
+ const chapterTitle = [tocEntry.label, tocEntry.title]
296
+ .filter(x => x)
297
+ .join(' ');
298
+ const clickable = tocEntry.pageIndex != undefined;
299
+ // note the click-tracking won't work...
300
+ return html`
301
+ <li
302
+ class="
303
+ BRtable-contents-el
304
+ ${clickable ? 'clickable' : ''}
305
+ ${tocEntry == this.currentChapter ? 'current' : ''}
306
+ "
307
+ style="${styleMap({marginLeft: (tocEntry.level - 1) * 10 + 'px'})}"
308
+ data-event-click-tracking="${ifDefined(clickable ? "BRTOCPanel|GoToChapter" : undefined)}"
309
+ @click="${() => this.jumpToPage(tocEntry.pageIndex)}"
310
+ >
311
+ ${chapterTitle}
312
+ ${tocEntry.pagenum ? html`
313
+ <br />
314
+ <span class="BRTOCElementPage">Page ${tocEntry.pagenum}</span>
315
+ ` : nothing}
316
+ </li>`;
317
+ }
318
+
319
+ connectedCallback() {
320
+ super.connectedCallback();
321
+ this.dispatchEvent(new CustomEvent('connected'));
322
+ }
323
+
324
+ updated(changedProperties) {
325
+ if (changedProperties.has('currentChapter')) {
326
+ this.shadowRoot.querySelector('li.current')?.scrollIntoView({
327
+ block: 'nearest',
328
+ behavior: 'smooth',
329
+ });
193
330
  }
194
- };
195
-
196
- $.ajax({ url: fetchUrlByBookId, dataType: 'jsonp' })
197
- .then(data => {
198
- if (data && data.length > 0) {
199
- return data;
200
- } else {
201
- // try sourceid
202
- return $.ajax({ url: `${baseURL}&source_records=ia:${this.bookId}`, dataType: 'jsonp' });
331
+ }
332
+
333
+ static get styles() {
334
+ return css`
335
+ ol {
336
+ padding: 0;
337
+ margin: 0;
338
+ margin-right: 5px;
203
339
  }
204
- })
205
- .then(data => {
206
- if (data && data.length > 0) {
207
- setUpChapterMarkers(data[0]);
340
+ li {
341
+ padding: 10px;
342
+ overflow: hidden;
343
+ border-radius: 4px;
344
+ }
345
+ li.clickable {
346
+ font-weight: normal;
347
+ cursor: pointer;
348
+ transition: background-color 0.2s;
208
349
  }
209
- });
210
- };
211
-
212
- // Extend buildMobileDrawerElement with table of contents list
213
- BookReader.prototype.buildMobileDrawerElement = (function (super_) {
214
- return function () {
215
- const $el = super_.call(this);
216
- if (this.enableMobileNav && this.options.enableChaptersPlugin) {
217
- $el.find('.BRmobileMenu__moreInfoRow').after($(`
218
- <li class="BRmobileMenu__tableContents" data-event-click-tracking="BRSidebar|TOCPanel">
219
- <span>
220
- <span class="DrawerIconWrapper">
221
- <img class="DrawerIcon" src="${this.imagesBaseURL}icon_toc.svg" alt="toc-icon"/>
222
- </span>
223
- Table of Contents
224
- </span>
225
- <div>
226
- <ol class="table-contents-list">
227
- </ol>
228
- </div>
229
- </li>`).hide());
230
- }
231
- return $el;
232
- };
233
- })(BookReader.prototype.buildMobileDrawerElement);
234
350
 
235
- /**
236
- * highlights the current chapter based on current page
237
- * @private
238
- * @param {TocEntry[]} tocEntries
239
- * @param {number} tocEntries
240
- */
241
- BookReader.prototype.updateTOCState = function(currIndex, tocEntries) {
242
- //this function won't have any effects if called before OpenLibrary request is finished
243
- if (!tocEntries) {return;}
244
- $('.current-chapter').removeClass('current-chapter');
245
- const tocEntriesIndexed = tocEntries.filter((el) => el.pageIndex != undefined).reverse();
246
- const currChapter = tocEntriesIndexed[tocEntriesIndexed.findIndex(
247
- (el) => el.pageIndex <= currIndex)];
248
- if (currChapter != undefined) {
249
- $(currChapter.mobileHTML).addClass('current-chapter');
351
+ li.clickable:not(.current):hover {
352
+ background-color: rgba(255,255,255, 0.05);
353
+ }
354
+
355
+ li.current {
356
+ background-color: rgba(255,255,255,0.9);
357
+ color: #333;
358
+ }
359
+
360
+ .BRTOCElementPage {
361
+ font-size: 0.85em;
362
+ opacity: .8;
363
+ }`;
250
364
  }
251
- };
365
+ }