@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,85 +1,160 @@
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
+ /** @typedef {import('@/src/BookReader/BookModel.js').PageIndex} PageIndex */
10
+ /** @typedef {import('@/src/BookReader/BookModel.js').PageString} PageString */
11
+ /** @typedef {import('@/src/BookReader/BookModel.js').LeafNum} LeafNum */
12
+
13
+ // @ts-ignore
14
+ const BookReader = /** @type {typeof import('@/src/BookReader.js').default} */(window.BookReader);
15
+
2
16
  /**
3
17
  * Plugin for chapter markers in BookReader. Fetches from openlibrary.org
4
18
  * Could be forked, or extended to alter behavior
5
19
  */
20
+ export class ChaptersPlugin extends BookReaderPlugin {
21
+ options = {
22
+ enabled: true,
23
+
24
+ /**
25
+ * The Open Library host to fetch/query Open Library.
26
+ * @type {import('@/src/util/strings.js').StringWithVars}
27
+ */
28
+ openLibraryHost: 'https://openlibrary.org',
29
+
30
+ /**
31
+ * The Open Library edition to fetch the table of contents from.
32
+ * E.g. 'OL12345M'
33
+ *
34
+ * @type {import('@/src/util/strings.js').StringWithVars}
35
+ */
36
+ openLibraryId: '',
37
+
38
+ /**
39
+ * The Internet Archive identifier to fetch the Open Library table
40
+ * of contents from.
41
+ * E.g. 'goody'
42
+ *
43
+ * @type {import('@/src/util/strings.js').StringWithVars}
44
+ */
45
+ internetArchiveId: '',
46
+
47
+ /**
48
+ * @deprecated
49
+ * Old name for openLibraryHost
50
+ * @type {import('@/src/util/strings.js').StringWithVars}
51
+ */
52
+ olHost: 'https://openlibrary.org',
53
+
54
+ /**
55
+ * @deprecated
56
+ * Old name for internetArchiveId
57
+ * @type {import('@/src/util/strings.js').StringWithVars}
58
+ */
59
+ bookId: '{{bookId}}',
60
+ }
61
+
62
+ /** @type {TocEntry[]} */
63
+ _tocEntries;
6
64
 
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();
65
+ /** @type {BRChaptersPanel} */
66
+ _chaptersPanel;
67
+
68
+ /** @override */
69
+ setup(options) {
70
+ super.setup(options);
71
+ this.options.internetArchiveId = this.options.internetArchiveId || this.options.bookId;
72
+ this.options.openLibraryHost = this.options.openLibraryHost || this.options.olHost;
73
+ }
74
+
75
+ /** @override Extend to call Open Library for TOC */
76
+ async init() {
77
+ if (!this.options.enabled || this.br.ui === 'embed') {
78
+ return;
30
79
  }
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
- );
80
+
81
+ let rawTableOfContents = null;
82
+ // Prefer explicit TOC if specified
83
+ if (this.br.options.table_of_contents?.length) {
84
+ rawTableOfContents = this.br.options.table_of_contents;
85
+ } else {
86
+ // Otherwise fetch from OL
87
+ const olEdition = await this.getOpenLibraryRecord();
88
+ if (olEdition?.table_of_contents?.length) {
89
+ rawTableOfContents = olEdition.table_of_contents;
90
+ }
45
91
  }
46
- };
47
- })(BookReader.prototype.init);
48
92
 
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) {
93
+ if (rawTableOfContents) {
94
+ this._tocEntries = rawTableOfContents
95
+ .map(rawTOCEntry => (Object.assign({}, rawTOCEntry, {
96
+ pageIndex: (
97
+ typeof(rawTOCEntry.leaf) == 'number' ? this.br.book.leafNumToIndex(rawTOCEntry.leaf) :
98
+ rawTOCEntry.pagenum ? this.br.book.getPageIndex(rawTOCEntry.pagenum) :
99
+ undefined
100
+ ),
101
+ })));
102
+ this._render();
103
+ this.br.bind(BookReader.eventNames.pageChanged, () => this._updateCurrent());
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Update the table of contents based on array of TOC entries.
109
+ */
110
+ _render() {
111
+ this.br.shell.menuProviders['chapters'] = {
112
+ id: 'chapters',
113
+ icon: html`<ia-icon-toc aria-hidden="true" role="presentation" style="width: var(--iconWidth); height: var(--iconHeight);"></ia-icon-toc>`,
114
+ label: 'Table of Contents',
115
+ component: html`<br-chapters-panel
116
+ .contents="${this._tocEntries}"
117
+ .jumpToPage="${(pageIndex) => {
118
+ this._updateCurrent(pageIndex);
119
+ this.br.jumpToIndex(pageIndex, { ariaLive: true });
120
+ }}"
121
+ @connected="${(e) => {
122
+ this._chaptersPanel = e.target;
123
+ this._updateCurrent();
124
+ }}"
125
+ />`,
126
+ };
127
+ this.br.shell.addMenuShortcut('chapters');
128
+ this.br.shell.updateMenuContents();
129
+ this._tocEntries.forEach((tocEntry, i) => this._renderMarker(tocEntry, i));
130
+ }
131
+
132
+ /**
133
+ * @param {TocEntry} tocEntry
134
+ * @param {number} entryIndex
135
+ */
136
+ _renderMarker(tocEntry, entryIndex) {
137
+ if (tocEntry.pageIndex == undefined) return;
138
+
139
+ //creates a string with non-void tocEntry.label and tocEntry.title
140
+ const chapterStr = [tocEntry.label, tocEntry.title]
141
+ .filter(x => x)
142
+ .join(' ') || `Chapter ${entryIndex + 1}`;
143
+
144
+ const percentThrough = BookReader.util.cssPercentage(tocEntry.pageIndex, this.br.book.getNumLeafs() - 1);
76
145
  $(`<div></div>`)
77
- .append($('<div />').text(title + pageStr))
146
+ .append(
147
+ $('<div />')
148
+ .text(chapterStr)
149
+ .append(
150
+ $('<div class="BRchapterPage" />')
151
+ .text(this.br.book.getPageName(tocEntry.pageIndex)),
152
+ ),
153
+ )
78
154
  .addClass('BRchapter')
79
155
  .css({ left: percentThrough })
80
- .appendTo(this.$('.BRnavline'))
81
- .data({ pageIndex })
82
- .hover(event => {
156
+ .appendTo(this.br.$('.BRnavline'))
157
+ .on("mouseenter", event => {
83
158
  // remove hover effect from other markers then turn on just for this
84
159
  const marker = event.currentTarget;
85
160
  const tooltip = marker.querySelector('div');
@@ -89,163 +164,197 @@ BookReader.prototype.addChapter = function(chapterTitle, pageNumber, pageIndex)
89
164
  if (tooltipOffset.x - boxSizeAdjust < 0) {
90
165
  tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);
91
166
  }
92
- this.$('.BRsearch,.BRchapter').removeClass('front');
167
+ this.br.$('.BRsearch,.BRchapter').removeClass('front');
93
168
  $(event.target).addClass('front');
94
- },
95
- event => $(event.target).removeClass('front')
96
- )
97
- .on('click', jumpToChapter);
169
+ })
170
+ .on("mouseleave", event => $(event.target).removeClass('front'))
171
+ .on('click', () => {
172
+ this._updateCurrent(tocEntry.pageIndex);
173
+ this.br.jumpToIndex(tocEntry.pageIndex, { ariaLive: true });
174
+ });
98
175
 
99
- //adding clickable properties to mobile chapters
100
- mobileChapter.bind('click', jumpToChapter)
101
- .addClass('chapter-clickable')
102
- .attr("data-event-click-tracking","BRTOCPanel|GoToChapter");
176
+ this.br.$('.BRchapter, .BRsearch').each((i, el) => {
177
+ const $el = $(el);
178
+ $el
179
+ .on("mouseenter", () => $el.addClass('front'))
180
+ .on("mouseleave", () => $el.removeClass('front'));
181
+ });
103
182
  }
104
183
 
105
- };
184
+ /**
185
+ * This makes a call to OL API and calls the given callback function with the
186
+ * response from the API.
187
+ */
188
+ async getOpenLibraryRecord() {
189
+ const olHost = applyVariables(this.options.openLibraryHost, this.br.options.vars);
106
190
 
107
- /*
108
- * Remove all chapters.
109
- */
110
- BookReader.prototype.removeChapters = function() {
111
- this.$('.BRnavpos .BRchapter').remove();
112
- };
191
+ if (this.options.openLibraryId) {
192
+ const openLibraryId = applyVariables(this.options.openLibraryId, this.br.options.vars);
193
+ return await $.ajax({ url: `${olHost}/books/${openLibraryId}.json` });
194
+ }
113
195
 
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();
196
+ if (this.options.internetArchiveId) {
197
+ const ocaid = applyVariables(this.options.internetArchiveId, this.br.options.vars);
198
+
199
+ // Try looking up by ocaid first, then by source_record
200
+ const baseQueryUrl = `${olHost}/query.json?type=/type/edition&*=&`;
201
+
202
+ let data = await $.ajax({
203
+ url: baseQueryUrl + new URLSearchParams({ ocaid, limit: '1' }),
204
+ });
205
+
206
+ if (!data || !data.length) {
207
+ // try source_records
208
+ data = await $.ajax({
209
+ url: baseQueryUrl + new URLSearchParams({ source_records: `ia:${ocaid}`, limit: '1' }),
210
+ });
211
+ }
212
+
213
+ return data?.[0];
214
+ }
215
+
216
+ return null;
122
217
  }
123
- for (let i = 0; i < tocEntries.length; i++) {
124
- this.addChapterFromEntry(tocEntries[i]);
218
+
219
+ /**
220
+ * @private
221
+ * Highlights the current chapter based on current page
222
+ * @param {PageIndex} curIndex
223
+ */
224
+ _updateCurrent(
225
+ curIndex = (this.br.mode == 2 ? Math.max(...this.br.displayedIndices) : this.br.firstIndex),
226
+ ) {
227
+ const tocEntriesIndexed = this._tocEntries.filter((el) => el.pageIndex != undefined).reverse();
228
+ const currChapter = tocEntriesIndexed[
229
+ // subtract one so that 2up shows the right label
230
+ tocEntriesIndexed.findIndex((chapter) => chapter.pageIndex <= curIndex)
231
+ ];
232
+ if (this._chaptersPanel) {
233
+ this._chaptersPanel.currentChapter = currChapter;
234
+ }
125
235
  }
126
- this._tocEntries = tocEntries;
127
- $('.table-contents-list').children().each((i, el) => {
128
- tocEntries[i].mobileHTML = el;
129
- });
130
- };
236
+ }
237
+ BookReader?.registerPlugin('chapters', ChaptersPlugin);
131
238
 
132
239
  /**
133
240
  * @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
-
241
+ * Table of contents entry as defined by Open Library, with some extra values for internal use
242
+ * @property {number} [level]
243
+ * @property {string} [label]
244
+ * @property {string} [title]
245
+ * @property {PageString} [pagenum]
246
+ * @property {LeafNum} [leaf]
247
+ * @property {number} [pageIndex] - Added
143
248
  *
144
249
  * @example {
145
250
  * "pagenum": "17",
146
251
  * "level": 1,
147
252
  * "label": "CHAPTER I",
148
- * "type": {"key": "/type/toc_item"},
149
253
  * "title": "THE COUNTRY AND THE MISSION"
150
254
  * }
151
255
  */
152
256
 
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
- };
257
+ @customElement('br-chapters-panel')
258
+ export class BRChaptersPanel extends LitElement {
259
+ /** @type {TocEntry[]} */
260
+ @property({ type: Array })
261
+ contents = [];
170
262
 
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);
263
+ /** @type {TocEntry?} */
264
+ @property({ type: Object })
265
+ currentChapter = {};
266
+
267
+ /** @type {(pageIndex: PageIndex) => void} */
268
+ jumpToPage = () => {};
269
+
270
+ /**
271
+ * @param {TocEntry[]} contents
272
+ */
273
+ constructor(contents) {
274
+ super();
275
+ this.contents = contents;
276
+ }
277
+
278
+ render() {
279
+ return html`
280
+ <ol>
281
+ ${this.contents.map(tocEntry => this.renderTOCEntry(tocEntry))}
282
+ </ol>
283
+ `;
284
+ }
285
+
286
+ /**
287
+ * @param {TocEntry} tocEntry
288
+ */
289
+ renderTOCEntry(tocEntry) {
290
+ const chapterTitle = [tocEntry.label, tocEntry.title]
291
+ .filter(x => x)
292
+ .join(' ');
293
+ const clickable = tocEntry.pageIndex != undefined;
294
+ // note the click-tracking won't work...
295
+ return html`
296
+ <li
297
+ class="
298
+ BRtable-contents-el
299
+ ${clickable ? 'clickable' : ''}
300
+ ${tocEntry == this.currentChapter ? 'current' : ''}
301
+ "
302
+ style="${styleMap({marginLeft: (tocEntry.level - 1) * 10 + 'px'})}"
303
+ data-event-click-tracking="${ifDefined(clickable ? "BRTOCPanel|GoToChapter" : undefined)}"
304
+ @click="${() => this.jumpToPage(tocEntry.pageIndex)}"
305
+ >
306
+ ${chapterTitle}
307
+ ${tocEntry.pagenum ? html`
308
+ <br />
309
+ <span class="BRTOCElementPage">Page ${tocEntry.pagenum}</span>
310
+ ` : nothing}
311
+ </li>`;
312
+ }
313
+
314
+ connectedCallback() {
315
+ super.connectedCallback();
316
+ this.dispatchEvent(new CustomEvent('connected'));
317
+ }
318
+
319
+ updated(changedProperties) {
320
+ if (changedProperties.has('currentChapter')) {
321
+ this.shadowRoot.querySelector('li.current')?.scrollIntoView({
322
+ block: 'nearest',
323
+ behavior: 'smooth',
324
+ });
193
325
  }
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' });
326
+ }
327
+
328
+ static get styles() {
329
+ return css`
330
+ ol {
331
+ padding: 0;
332
+ margin: 0;
333
+ margin-right: 5px;
203
334
  }
204
- })
205
- .then(data => {
206
- if (data && data.length > 0) {
207
- setUpChapterMarkers(data[0]);
335
+ li {
336
+ padding: 10px;
337
+ overflow: hidden;
338
+ border-radius: 4px;
339
+ }
340
+ li.clickable {
341
+ font-weight: normal;
342
+ cursor: pointer;
343
+ transition: background-color 0.2s;
208
344
  }
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
345
 
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');
346
+ li.clickable:not(.current):hover {
347
+ background-color: rgba(255,255,255, 0.05);
348
+ }
349
+
350
+ li.current {
351
+ background-color: rgba(255,255,255,0.9);
352
+ color: #333;
353
+ }
354
+
355
+ .BRTOCElementPage {
356
+ font-size: 0.85em;
357
+ opacity: .8;
358
+ }`;
250
359
  }
251
- };
360
+ }