@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
@@ -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
+ }
91
+ }
92
+
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());
45
104
  }
46
105
  }
47
- })(BookReader.prototype.init);
48
106
 
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');
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));
63
130
  }
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) {
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
345
 
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);
346
+ li.clickable:not(.current):hover {
347
+ background-color: rgba(255,255,255, 0.05);
348
+ }
234
349
 
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');
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
  }