@internetarchive/bookreader 5.0.0-12-fixsorting-8 → 5.0.0-120

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 (420) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +670 -1190
  4. package/BookReader/bergamot-translator-worker.js +2966 -0
  5. package/BookReader/bergamot-translator-worker.wasm +0 -0
  6. package/BookReader/hypothesis/LICENSE +50 -0
  7. package/BookReader/hypothesis/README.md +55 -0
  8. package/BookReader/hypothesis/build/boot-template.js +1 -0
  9. package/BookReader/hypothesis/build/boot.js +1 -0
  10. package/BookReader/hypothesis/build/manifest.json +20 -0
  11. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +199 -0
  12. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  13. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +811 -0
  14. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  15. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +437 -0
  16. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  17. package/BookReader/hypothesis/build/styles/annotator.css +4 -0
  18. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  19. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  20. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  35. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  36. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  37. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  38. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  39. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  40. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  41. package/BookReader/hypothesis/build/styles/katex.min.css +3 -0
  42. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  43. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +14 -0
  44. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  45. package/BookReader/hypothesis/build/styles/sidebar.css +4 -0
  46. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  47. package/BookReader/hypothesis/build/styles/ui-playground.css +4 -0
  48. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  49. package/BookReader/hypothesis/package.json +126 -0
  50. package/BookReader/ia-bookreader.js +1886 -0
  51. package/BookReader/{BookReader.js.LICENSE.txt → ia-bookreader.js.LICENSE.txt} +26 -20
  52. package/BookReader/ia-bookreader.js.map +1 -0
  53. package/BookReader/icons/1up.svg +1 -12
  54. package/BookReader/icons/2up.svg +1 -15
  55. package/BookReader/icons/advance.svg +3 -26
  56. package/BookReader/icons/chevron-right.svg +1 -1
  57. package/BookReader/icons/close-circle-dark.svg +1 -1
  58. package/BookReader/icons/close-circle.svg +1 -1
  59. package/BookReader/icons/fullscreen.svg +1 -17
  60. package/BookReader/icons/fullscreen_exit.svg +1 -17
  61. package/BookReader/icons/hamburger.svg +1 -15
  62. package/BookReader/icons/left-arrow.svg +1 -12
  63. package/BookReader/icons/magnify-minus.svg +1 -16
  64. package/BookReader/icons/magnify-plus.svg +1 -17
  65. package/BookReader/icons/magnify.svg +1 -15
  66. package/BookReader/icons/pause.svg +1 -23
  67. package/BookReader/icons/play.svg +1 -22
  68. package/BookReader/icons/playback-speed.svg +1 -34
  69. package/BookReader/icons/read-aloud.svg +1 -22
  70. package/BookReader/icons/review.svg +3 -22
  71. package/BookReader/icons/slider-toggle.svg +1 -0
  72. package/BookReader/icons/thumbnails.svg +1 -17
  73. package/BookReader/icons/voice.svg +1 -0
  74. package/BookReader/icons/volume-full.svg +1 -22
  75. package/BookReader/images/BRicons.svg +5 -94
  76. package/BookReader/images/books_graphic.svg +1 -177
  77. package/BookReader/images/hypothesis.ico +0 -0
  78. package/BookReader/images/icon_book.svg +1 -12
  79. package/BookReader/images/icon_bookmark.svg +1 -12
  80. package/BookReader/images/icon_experiment.svg +1 -0
  81. package/BookReader/images/icon_gear.svg +1 -14
  82. package/BookReader/images/icon_hamburger.svg +1 -20
  83. package/BookReader/images/icon_home.svg +1 -21
  84. package/BookReader/images/icon_info.svg +1 -11
  85. package/BookReader/images/icon_one_page.svg +1 -8
  86. package/BookReader/images/icon_pause.svg +1 -1
  87. package/BookReader/images/icon_play.svg +1 -1
  88. package/BookReader/images/icon_playback-rate.svg +1 -15
  89. package/BookReader/images/icon_search_button.svg +1 -8
  90. package/BookReader/images/icon_share.svg +1 -9
  91. package/BookReader/images/icon_skip-ahead.svg +1 -6
  92. package/BookReader/images/icon_skip-back.svg +2 -13
  93. package/BookReader/images/icon_speaker.svg +1 -18
  94. package/BookReader/images/icon_speaker_open.svg +1 -10
  95. package/BookReader/images/icon_thumbnails.svg +1 -12
  96. package/BookReader/images/icon_toc.svg +1 -5
  97. package/BookReader/images/icon_two_pages.svg +1 -9
  98. package/BookReader/images/marker_chap-off.svg +1 -11
  99. package/BookReader/images/marker_chap-on.svg +1 -11
  100. package/BookReader/images/marker_srch-on.svg +1 -11
  101. package/BookReader/images/translate.svg +1 -0
  102. package/BookReader/images/unviewable_page.png +0 -0
  103. package/BookReader/jquery-3.js +2 -0
  104. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  105. package/BookReader/plugins/plugin.archive_analytics.js +1 -172
  106. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  107. package/BookReader/plugins/plugin.autoplay.js +1 -165
  108. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  109. package/BookReader/plugins/plugin.chapters.js +19 -301
  110. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  111. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  112. package/BookReader/plugins/plugin.experiments.js +3 -0
  113. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  114. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  115. package/BookReader/plugins/plugin.iframe.js +1 -74
  116. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  117. package/BookReader/plugins/plugin.iiif.js +2 -0
  118. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  119. package/BookReader/plugins/plugin.resume.js +1 -368
  120. package/BookReader/plugins/plugin.resume.js.map +1 -1
  121. package/BookReader/plugins/plugin.search.js +2 -1385
  122. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  123. package/BookReader/plugins/plugin.search.js.map +1 -1
  124. package/BookReader/plugins/plugin.text_selection.js +2 -1080
  125. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  126. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  127. package/BookReader/plugins/plugin.translate.js +3 -0
  128. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  129. package/BookReader/plugins/plugin.translate.js.map +1 -0
  130. package/BookReader/plugins/plugin.tts.js +2 -9193
  131. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  132. package/BookReader/plugins/plugin.tts.js.map +1 -1
  133. package/BookReader/plugins/plugin.url.js +1 -269
  134. package/BookReader/plugins/plugin.url.js.map +1 -1
  135. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  136. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  137. package/BookReader/plugins/translator-worker.js +2 -0
  138. package/BookReader/plugins/translator-worker.js.map +1 -0
  139. package/BookReader/silence.mp3 +0 -0
  140. package/BookReader/translator-worker.js +475 -0
  141. package/BookReader/webcomponents-bundle.js +3 -0
  142. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  143. package/BookReader/webcomponents-bundle.js.map +1 -0
  144. package/README.md +17 -4
  145. package/dist/esm/ia-bookreader.js +3 -0
  146. package/dist/esm/ia-bookreader.js.LICENSE.txt +17 -0
  147. package/dist/esm/ia-bookreader.js.map +1 -0
  148. package/dist/esm/plugins/plugin.archive_analytics.js +2 -0
  149. package/dist/esm/plugins/plugin.archive_analytics.js.map +1 -0
  150. package/dist/esm/plugins/plugin.autoplay.js +2 -0
  151. package/dist/esm/plugins/plugin.autoplay.js.map +1 -0
  152. package/dist/esm/plugins/plugin.chapters.js +2 -0
  153. package/dist/esm/plugins/plugin.chapters.js.map +1 -0
  154. package/dist/esm/plugins/plugin.experiments.js +2 -0
  155. package/dist/esm/plugins/plugin.experiments.js.map +1 -0
  156. package/dist/esm/plugins/plugin.iframe.js +2 -0
  157. package/dist/esm/plugins/plugin.iframe.js.map +1 -0
  158. package/dist/esm/plugins/plugin.iiif.js +2 -0
  159. package/dist/esm/plugins/plugin.iiif.js.map +1 -0
  160. package/dist/esm/plugins/plugin.resume.js +2 -0
  161. package/dist/esm/plugins/plugin.resume.js.map +1 -0
  162. package/dist/esm/plugins/plugin.search.js +2 -0
  163. package/dist/esm/plugins/plugin.search.js.map +1 -0
  164. package/dist/esm/plugins/plugin.text_selection.js +2 -0
  165. package/dist/esm/plugins/plugin.text_selection.js.map +1 -0
  166. package/dist/esm/plugins/plugin.translate.js +2 -0
  167. package/dist/esm/plugins/plugin.translate.js.map +1 -0
  168. package/dist/esm/plugins/plugin.tts.js +2 -0
  169. package/dist/esm/plugins/plugin.tts.js.map +1 -0
  170. package/dist/esm/plugins/plugin.url.js +2 -0
  171. package/dist/esm/plugins/plugin.url.js.map +1 -0
  172. package/dist/esm/plugins/plugin.vendor-fullscreen.js +2 -0
  173. package/dist/esm/plugins/plugin.vendor-fullscreen.js.map +1 -0
  174. package/jsconfig.json +18 -0
  175. package/package.json +113 -71
  176. package/src/BookReader/BookModel.js +92 -46
  177. package/src/BookReader/DragScrollable.js +233 -0
  178. package/src/BookReader/ImageCache.js +49 -16
  179. package/src/BookReader/Mode1Up.js +66 -365
  180. package/src/BookReader/Mode1UpLit.js +392 -0
  181. package/src/BookReader/Mode2Up.js +87 -1315
  182. package/src/BookReader/Mode2UpLit.js +786 -0
  183. package/src/BookReader/ModeAbstract.js +43 -0
  184. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  185. package/src/BookReader/ModeSmoothZoom.js +312 -0
  186. package/src/BookReader/ModeThumb.js +29 -15
  187. package/src/BookReader/Navbar/Navbar.js +204 -84
  188. package/src/BookReader/PageContainer.js +120 -23
  189. package/src/BookReader/ReduceSet.js +2 -2
  190. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  191. package/src/BookReader/events.js +3 -3
  192. package/src/BookReader/options.js +105 -18
  193. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  194. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  195. package/src/BookReader/utils/SelectionObserver.js +72 -0
  196. package/src/BookReader/utils/classes.js +1 -1
  197. package/src/BookReader/utils.js +136 -12
  198. package/src/BookReader.js +732 -1231
  199. package/src/BookReaderPlugin.js +52 -0
  200. package/src/assets/icons/magnify-minus.svg +3 -7
  201. package/src/assets/icons/magnify-plus.svg +3 -7
  202. package/src/assets/icons/slider-toggle.svg +1 -0
  203. package/src/assets/icons/voice.svg +1 -0
  204. package/src/assets/images/hypothesis.ico +0 -0
  205. package/src/assets/images/icon_experiment.svg +1 -0
  206. package/src/assets/images/translate.svg +1 -0
  207. package/src/assets/images/unviewable_page.png +0 -0
  208. package/src/assets/silence.mp3 +0 -0
  209. package/src/css/BookReader.scss +1 -5
  210. package/src/css/_BRBookmarks.scss +1 -1
  211. package/src/css/_BRComponent.scss +1 -1
  212. package/src/css/_BRicon.scss +8 -2
  213. package/src/css/_BRmain.scss +16 -3
  214. package/src/css/_BRnav.scss +74 -70
  215. package/src/css/_BRpages.scss +174 -42
  216. package/src/css/_BRsearch.scss +69 -30
  217. package/src/css/_BRtoolbar.scss +5 -5
  218. package/src/css/_TextSelection.scss +249 -25
  219. package/src/css/_colorbox.scss +2 -2
  220. package/src/css/_controls.scss +24 -7
  221. package/src/css/_icons.scss +8 -1
  222. package/src/{BookNavigator/assets → css}/button-base.js +2 -2
  223. package/src/css/icon_checkmark.js +9 -0
  224. package/src/css/sharedStyles.js +15 -0
  225. package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
  226. package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +25 -5
  227. package/src/ia-bookreader/ia-bookreader.js +686 -0
  228. package/src/ia-bookreader/sharing.js +27 -0
  229. package/src/ia-bookreader/viewable-files.js +98 -0
  230. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
  231. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
  232. package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
  233. package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
  234. package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +43 -31
  235. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  236. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
  237. package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
  238. package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
  239. package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
  240. package/src/plugins/plugin.archive_analytics.js +84 -78
  241. package/src/plugins/plugin.autoplay.js +99 -104
  242. package/src/plugins/plugin.chapters.js +323 -205
  243. package/src/plugins/plugin.experiments.js +375 -0
  244. package/src/plugins/plugin.iframe.js +36 -37
  245. package/src/plugins/plugin.iiif.js +147 -0
  246. package/src/plugins/plugin.resume.js +54 -51
  247. package/src/plugins/plugin.text_selection.js +464 -219
  248. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  249. package/src/plugins/search/plugin.search.js +347 -397
  250. package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
  251. package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
  252. package/src/plugins/search/utils.js +50 -0
  253. package/src/plugins/search/view.js +51 -69
  254. package/src/plugins/translate/TranslationManager.js +164 -0
  255. package/src/plugins/translate/plugin.translate.js +559 -0
  256. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  257. package/src/plugins/tts/FestivalTTSEngine.js +20 -30
  258. package/src/plugins/tts/PageChunk.js +117 -23
  259. package/src/plugins/tts/PageChunkIterator.js +11 -17
  260. package/src/plugins/tts/WebTTSEngine.js +132 -92
  261. package/src/plugins/tts/plugin.tts.js +341 -351
  262. package/src/plugins/tts/utils.js +76 -67
  263. package/src/plugins/url/UrlPlugin.js +213 -0
  264. package/src/plugins/{plugin.url.js → url/plugin.url.js} +54 -18
  265. package/src/util/TextSelectionManager.js +1464 -0
  266. package/src/util/browserSniffing.js +42 -1
  267. package/src/util/cache.js +20 -0
  268. package/src/util/docCookies.js +21 -2
  269. package/src/util/dom.js +88 -0
  270. package/src/util/generators.js +89 -0
  271. package/src/util/lit.js +15 -0
  272. package/src/util/strings.js +11 -0
  273. package/.babelrc +0 -12
  274. package/.dependabot/config.yml +0 -6
  275. package/.eslintrc.js +0 -50
  276. package/.gitattributes +0 -2
  277. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  278. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  279. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  280. package/.github/workflows/node.js.yml +0 -37
  281. package/.github/workflows/npm-publish.yml +0 -47
  282. package/.testcaferc.json +0 -5
  283. package/BookReader/BookReader.js +0 -21613
  284. package/BookReader/BookReader.js.map +0 -1
  285. package/BookReader/bookreader-component-bundle.js +0 -14497
  286. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  287. package/BookReader/bookreader-component-bundle.js.map +0 -1
  288. package/BookReader/jquery-1.10.1.js +0 -108
  289. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  290. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  291. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  292. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  293. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  294. package/BookReaderDemo/BookReaderDemo.css +0 -41
  295. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  296. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  297. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  298. package/BookReaderDemo/IIIFBookReader.js +0 -207
  299. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  300. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  301. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  302. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  303. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  304. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  305. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  306. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  307. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  308. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  309. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  310. package/BookReaderDemo/demo-advanced.html +0 -33
  311. package/BookReaderDemo/demo-autoplay.html +0 -38
  312. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  313. package/BookReaderDemo/demo-embed.html +0 -26
  314. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  315. package/BookReaderDemo/demo-fullscreen.html +0 -33
  316. package/BookReaderDemo/demo-iiif.html +0 -34
  317. package/BookReaderDemo/demo-iiif.js +0 -26
  318. package/BookReaderDemo/demo-internetarchive.html +0 -74
  319. package/BookReaderDemo/demo-multiple.html +0 -43
  320. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  321. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  322. package/BookReaderDemo/demo-simple.html +0 -34
  323. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  324. package/BookReaderDemo/immersion-1up.html +0 -64
  325. package/BookReaderDemo/immersion-mode.html +0 -35
  326. package/BookReaderDemo/toggle_controls.html +0 -53
  327. package/BookReaderDemo/view_mode.html +0 -39
  328. package/BookReaderDemo/viewmode-cycle.html +0 -41
  329. package/CHANGELOG.md +0 -499
  330. package/CONTRIBUTING.md +0 -7
  331. package/codecov.yml +0 -17
  332. package/index.html +0 -31
  333. package/karma.conf.js +0 -23
  334. package/screenshot.png +0 -0
  335. package/scripts/postversion.js +0 -10
  336. package/scripts/preversion.js +0 -14
  337. package/scripts/version.js +0 -26
  338. package/src/BookNavigator/BookModel.js +0 -14
  339. package/src/BookNavigator/BookNavigator.js +0 -459
  340. package/src/BookNavigator/assets/book-loader.js +0 -27
  341. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  342. package/src/BookNavigator/assets/icon_close.js +0 -3
  343. package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
  344. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  345. package/src/BookNavigator/assets/icon_sort_neutral.js +0 -5
  346. package/src/BookNavigator/assets/icon_volumes.js +0 -11
  347. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  348. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  349. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  350. package/src/BookNavigator/search/a-search-result.js +0 -55
  351. package/src/BookNavigator/volumes/volumes-provider.js +0 -83
  352. package/src/BookNavigator/volumes/volumes.js +0 -178
  353. package/src/BookReader/DebugConsole.js +0 -54
  354. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  355. package/src/ItemNavigator/ItemNavigator.js +0 -376
  356. package/src/ItemNavigator/providers/sharing.js +0 -33
  357. package/src/css/_MobileNav.scss +0 -194
  358. package/src/dragscrollable-br.js +0 -261
  359. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  360. package/src/plugins/plugin.mobile_nav.js +0 -287
  361. package/tests/BookReader/BookModel.test.js +0 -312
  362. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  363. package/tests/BookReader/DebugConsole.test.js +0 -25
  364. package/tests/BookReader/ImageCache.test.js +0 -150
  365. package/tests/BookReader/Mode1Up.test.js +0 -164
  366. package/tests/BookReader/Mode2Up.test.js +0 -247
  367. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  368. package/tests/BookReader/PageContainer.test.js +0 -115
  369. package/tests/BookReader/ReduceSet.test.js +0 -38
  370. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  371. package/tests/BookReader/utils/classes.test.js +0 -88
  372. package/tests/BookReader/utils.test.js +0 -109
  373. package/tests/BookReader.options.test.js +0 -39
  374. package/tests/BookReader.test.js +0 -301
  375. package/tests/e2e/README.md +0 -75
  376. package/tests/e2e/autoplay.test.js +0 -13
  377. package/tests/e2e/base.test.js +0 -35
  378. package/tests/e2e/helpers/base.js +0 -263
  379. package/tests/e2e/helpers/debug.js +0 -13
  380. package/tests/e2e/helpers/desktopSearch.js +0 -72
  381. package/tests/e2e/helpers/mobileSearch.js +0 -85
  382. package/tests/e2e/helpers/mockSearch.js +0 -93
  383. package/tests/e2e/helpers/rightToLeft.js +0 -29
  384. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  385. package/tests/e2e/models/BookReader.js +0 -11
  386. package/tests/e2e/models/Navigation.js +0 -56
  387. package/tests/e2e/rightToLeft.test.js +0 -20
  388. package/tests/e2e/viewmode.test.js +0 -37
  389. package/tests/karma/BookNavigator/book-navigator.test.js +0 -139
  390. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  391. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  392. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  393. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  394. package/tests/karma/BookNavigator/sharing/sharing-provider.test.js +0 -40
  395. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  396. package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +0 -141
  397. package/tests/karma/BookNavigator/volumes/volumes.test.js +0 -98
  398. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  399. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  400. package/tests/plugins/plugin.autoplay.test.js +0 -52
  401. package/tests/plugins/plugin.chapters.test.js +0 -130
  402. package/tests/plugins/plugin.iframe.test.js +0 -42
  403. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  404. package/tests/plugins/plugin.resume.test.js +0 -98
  405. package/tests/plugins/plugin.text_selection.test.js +0 -203
  406. package/tests/plugins/plugin.url.test.js +0 -129
  407. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  408. package/tests/plugins/search/plugin.search.test.js +0 -173
  409. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  410. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  411. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  412. package/tests/plugins/tts/PageChunk.test.js +0 -57
  413. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  414. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  415. package/tests/plugins/tts/utils.test.js +0 -133
  416. package/tests/util/browserSniffing.test.js +0 -56
  417. package/tests/util/docCookies.test.js +0 -15
  418. package/tests/util/strings.test.js +0 -63
  419. package/tests/utils.js +0 -42
  420. package/webpack.config.js +0 -86
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.text_selection.js","webpack://@internetarchive/bookreader/./src/util/browserSniffing.js","webpack://@internetarchive/bookreader/./src/util/strings.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/function-bind.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/whitespaces.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.assign.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.reflect.construct.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.reflect.get.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js"],"names":["BookReader","window","DEFAULT_OPTIONS","enabled","fullDjvuXmlUrl","singlePageDjvuXmlUrl","Cache","maxSize","entries","entry","length","shift","push","TextSelectionPlugin","options","optionVariables","avoidTspans","isFirefox","pointerEventsOnParagraph","isSafari","djvuPagesPromise","svgParagraphElement","svgWordElement","insertNewlines","pageTextCache","maxWordRendered","$","ajax","type","url","applyVariables","dataType","error","e","undefined","then","res","xmlMap","parseXML","find","index","cachedEntry","x","response","pageIndex","xmlDoc","result","add","XMLpagesArr","$container","addEventListener","event","selection","document","getSelection","clipboardData","setData","toString","preventDefault","svg","classList","remove","on","target","is","stopPropagation","one","off","textSelectingMode","removeAllRanges","defaultMode","$svg","each","i","s","interceptCopy","$svgLayers","getPageText","XMLpage","XMLwidth","attr","XMLheight","totalWords","console","log","createElementNS","setAttribute","append","css","paragraph","words","paragSvg","style","pointerEvents","wordHeightArr","currWord","split","map","parseFloat","left","bottom","right","top","wordHeight","wordTspan","textContent","appendChild","nextWord","leftNext","bottomNext","rightNext","topNext","spaceTspan","createTextNode","sort","paragWordHeight","Math","floor","stopPageFlip","BookreaderWithTextSelection","Object","assign","plugins","textSelection","textSelectionPlugin","vars","init","pageContainer","lastPageIndex","getNumLeafs","mode","constModeThumb","createTextLayer","isChrome","userAgent","navigator","vendor","test","template","overrides","possibleFilters","APPLY_FILTERS","replace","$0","$1","expression","trim","varName","filterNames","defined","value","filters","n","reduce","acc","cur","urlencode","encodeURIComponent"],"mappings":"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","file":"plugins/plugin.text_selection.js","sourcesContent":["//@ts-check\nimport { isFirefox, isSafari } from '../util/browserSniffing.js';\nimport { applyVariables } from '../util/strings.js';\n/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\nexport const DEFAULT_OPTIONS = {\n enabled: true,\n /** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */\n fullDjvuXmlUrl: null,\n /** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */\n singlePageDjvuXmlUrl: null,\n};\n/** @typedef {typeof DEFAULT_OPTIONS} TextSelectionPluginOptions */\n\n/**\n * @template T\n */\nexport class Cache {\n constructor(maxSize = 10) {\n this.maxSize = maxSize;\n /** @type {T[]} */\n this.entries = [];\n }\n\n /**\n * @param {T} entry\n */\n add(entry) {\n if (this.entries.length >= this.maxSize) {\n this.entries.shift();\n }\n this.entries.push(entry);\n }\n}\n\nexport class TextSelectionPlugin {\n\n constructor(options = DEFAULT_OPTIONS, optionVariables, avoidTspans = isFirefox(), pointerEventsOnParagraph = isSafari()) {\n this.options = options;\n this.optionVariables = optionVariables;\n /**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */\n this.djvuPagesPromise = null;\n // Using text elements instead of tspans for words because Firefox does not allow svg tspan stretch.\n // Tspans are necessary on Chrome because they prevent newline character after every word when copying\n this.svgParagraphElement = \"text\";\n this.svgWordElement = \"tspan\";\n this.insertNewlines = avoidTspans;\n // Safari has a bug where `pointer-events` doesn't work on `<tspans>`. So\n // there we will set `pointer-events: all` on the paragraph element. We don't\n // do this everywhere, because it's a worse experience. Thanks Safari :/\n this.pointerEventsOnParagraph = pointerEventsOnParagraph;\n if (avoidTspans) {\n this.svgParagraphElement = \"g\";\n this.svgWordElement = \"text\";\n }\n\n /** @type {Cache<{index: number, response: any}>} */\n this.pageTextCache = new Cache();\n\n /**\n * Sometimes there are too many words on a page, and the browser becomes near\n * unusable. For now don't render text layer for pages with too many words.\n */\n this.maxWordRendered = 2500;\n }\n\n init() {\n // Only fetch the full djvu xml if the single page url isn't there\n if (this.options.singlePageDjvuXmlUrl) return;\n this.djvuPagesPromise = $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.fullDjvuXmlUrl, this.optionVariables),\n dataType: \"html\",\n error: (e) => undefined\n }).then((res) => {\n try {\n const xmlMap = $.parseXML(res);\n return xmlMap && $(xmlMap).find(\"OBJECT\");\n } catch (e) {\n return undefined;\n }\n });\n }\n\n /**\n * @param {number} index\n * @returns {Promise<HTMLElement|undefined>}\n */\n async getPageText(index) {\n if (this.options.singlePageDjvuXmlUrl) {\n const cachedEntry = this.pageTextCache.entries.find(x => x.index == index);\n if (cachedEntry) {\n return cachedEntry.response;\n }\n return $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.singlePageDjvuXmlUrl, this.optionVariables, { pageIndex: index }),\n dataType: \"html\",\n error: (e) => undefined,\n }).then((res) => {\n try {\n const xmlDoc = $.parseXML(res);\n const result = xmlDoc && $(xmlDoc).find(\"OBJECT\")[0];\n this.pageTextCache.add({ index, response: result });\n return result;\n } catch (e) {\n return undefined;\n }\n });\n } else {\n const XMLpagesArr = await this.djvuPagesPromise;\n if (XMLpagesArr) return XMLpagesArr[index];\n }\n }\n\n /**\n * Intercept copied text to remove any styling applied to it\n * @param {JQuery} $container\n */\n interceptCopy($container) {\n $container[0].addEventListener('copy', (event) => {\n const selection = document.getSelection();\n event.clipboardData.setData('text/plain', selection.toString());\n event.preventDefault();\n });\n }\n\n /**\n * Applies mouse events when in default mode\n * @param {SVGElement} svg\n */\n defaultMode(svg) {\n svg.classList.remove(\"selectingSVG\");\n $(svg).on(\"mousedown.textSelectPluginHandler\", (event) => {\n if (!$(event.target).is(\".BRwordElement\")) return;\n event.stopPropagation();\n svg.classList.add(\"selectingSVG\");\n $(svg).one(\"mouseup.textSelectPluginHandler\", (event) => {\n if (window.getSelection().toString() != \"\") {\n event.stopPropagation();\n $(svg).off(\".textSelectPluginHandler\");\n this.textSelectingMode(svg);\n }\n else svg.classList.remove(\"selectingSVG\");\n });\n });\n }\n\n /**\n * Applies mouse events when in textSelecting mode\n * @param {SVGElement} svg\n */\n textSelectingMode(svg) {\n $(svg).on('mousedown.textSelectPluginHandler', (event) => {\n if (!$(event.target).is(\".BRwordElement\")) {\n if (window.getSelection().toString() != \"\") window.getSelection().removeAllRanges();\n }\n event.stopPropagation();\n });\n $(svg).on('mouseup.textSelectPluginHandler', (event) => {\n event.stopPropagation();\n if (window.getSelection().toString() == \"\") {\n $(svg).off(\".textSelectPluginHandler\");\n this.defaultMode(svg); }\n });\n }\n\n /**\n * Initializes text selection modes if there is an svg on the page\n * @param {JQuery} $container\n */\n stopPageFlip($container) {\n /** @type {JQuery<SVGElement>} */\n const $svg = $container.find('svg.textSelectionSVG');\n if (!$svg.length) return;\n $svg.each((i, s) => this.defaultMode(s));\n this.interceptCopy($container);\n }\n\n /**\n * @param {number} pageIndex\n * @param {JQuery} $container\n */\n async createTextLayer(pageIndex, $container) {\n const $svgLayers = $container.find('.textSelectionSVG');\n if ($svgLayers.length) return;\n const XMLpage = await this.getPageText(pageIndex);\n if (!XMLpage) return;\n const XMLwidth = $(XMLpage).attr(\"width\");\n const XMLheight = $(XMLpage).attr(\"height\");\n\n const totalWords = $(XMLpage).find(\"WORD\").length;\n if (totalWords > this.maxWordRendered) {\n console.log(`Page ${pageIndex} has too many words (${totalWords} > ${this.maxWordRendered}). Not rendering text layer.`);\n return;\n }\n\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n svg.setAttribute(\"viewBox\", `0 0 ${XMLwidth} ${XMLheight}`);\n $container.append(svg);\n svg.setAttribute('class', 'textSelectionSVG');\n svg.setAttribute('preserveAspectRatio', 'none');\n $(svg).css({\n \"width\": \"100%\",\n \"position\": \"absolute\",\n \"height\": \"100%\",\n \"top\": \"0\",\n \"left\": \"0\",\n });\n\n $(XMLpage).find(\"PARAGRAPH\").each((i, paragraph) => {\n // Adding text element for each paragraph in the page\n const words = $(paragraph).find(\"WORD\");\n if (!words.length) return;\n const paragSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", this.svgParagraphElement);\n paragSvg.setAttribute(\"class\", \"BRparagElement\");\n if (this.pointerEventsOnParagraph) {\n paragSvg.style.pointerEvents = \"all\";\n }\n\n const wordHeightArr = [];\n\n for (let i = 0; i < words.length; i++) {\n // Adding tspan for each word in paragraph\n const currWord = words[i];\n // eslint-disable-next-line no-unused-vars\n const [left, bottom, right, top] = $(currWord).attr(\"coords\").split(',').map(parseFloat);\n const wordHeight = bottom - top;\n wordHeightArr.push(wordHeight);\n\n const wordTspan = document.createElementNS(\"http://www.w3.org/2000/svg\", this.svgWordElement);\n wordTspan.setAttribute(\"class\", \"BRwordElement\");\n wordTspan.setAttribute(\"x\", left.toString());\n wordTspan.setAttribute(\"y\", bottom.toString());\n wordTspan.setAttribute(\"textLength\", (right - left).toString());\n wordTspan.setAttribute(\"lengthAdjust\", \"spacingAndGlyphs\");\n wordTspan.textContent = currWord.textContent;\n paragSvg.appendChild(wordTspan);\n\n // Adding spaces after words except at the end of the paragraph\n // TODO: assumes left-to-right text\n if (i < words.length - 1) {\n const nextWord = words[i + 1];\n // eslint-disable-next-line no-unused-vars\n const [leftNext, bottomNext, rightNext, topNext] = $(nextWord).attr(\"coords\").split(',').map(parseFloat);\n const spaceTspan = document.createElementNS(\"http://www.w3.org/2000/svg\", this.svgWordElement);\n spaceTspan.setAttribute(\"class\", \"BRwordElement\");\n spaceTspan.setAttribute(\"x\", right.toString());\n spaceTspan.setAttribute(\"y\", bottom.toString());\n if ((leftNext - right) > 0) spaceTspan.setAttribute(\"textLength\", (leftNext - right).toString());\n spaceTspan.setAttribute(\"lengthAdjust\", \"spacingAndGlyphs\");\n spaceTspan.textContent = \" \";\n paragSvg.appendChild(spaceTspan);\n }\n\n // Adds newline at the end of paragraph on Firefox\n if ((i == words.length - 1 && (this.insertNewlines))) {\n paragSvg.appendChild(document.createTextNode(\"\\n\"));\n }\n }\n\n wordHeightArr.sort();\n const paragWordHeight = wordHeightArr[Math.floor(wordHeightArr.length * 0.85)];\n paragSvg.setAttribute(\"font-size\", paragWordHeight.toString());\n svg.appendChild(paragSvg);\n });\n this.stopPageFlip($container);\n }\n}\n\nexport class BookreaderWithTextSelection extends BookReader {\n init() {\n const options = Object.assign({}, DEFAULT_OPTIONS, this.options.plugins.textSelection);\n if (options.enabled) {\n this.textSelectionPlugin = new TextSelectionPlugin(options, this.options.vars);\n // Write this back; this way the plugin is the source of truth, and BR just\n // contains a reference to it.\n this.options.plugins.textSelection = options;\n this.textSelectionPlugin.init();\n }\n super.init();\n }\n\n /**\n * @param {number} index\n */\n _createPageContainer(index) {\n const pageContainer = super._createPageContainer(index);\n // Disable if thumb mode; it's too janky\n // index can be -1 for \"pre-cover\" region\n // Added checking of lastPageIndex to avoid loop around index value\n const lastPageIndex = this.getNumLeafs() - 1;\n if (this.mode !== this.constModeThumb && (index >= 0 && index <= lastPageIndex)) {\n this.textSelectionPlugin?.createTextLayer(index, pageContainer.$container);\n }\n return pageContainer;\n }\n}\nwindow.BookReader = BookreaderWithTextSelection;\nexport default BookreaderWithTextSelection;\n","\n/**\n * Checks whether the current browser is a Chrome/Chromium browser\n * Code from https://stackoverflow.com/a/4565120/2317712\n * @param {string} [userAgent]\n * @param {string} [vendor]\n * @return {boolean}\n */\nexport function isChrome(userAgent = navigator.userAgent, vendor = navigator.vendor) {\n return /chrome/i.test(userAgent) && /google inc/i.test(vendor);\n}\n\n/**\n * Checks whether the current browser is firefox\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isFirefox(userAgent = navigator.userAgent) {\n return /firefox/i.test(userAgent);\n}\n\n/**\n * Checks whether the current browser is safari\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent#Browser_Name\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isSafari(userAgent = navigator.userAgent) {\n return /safari/i.test(userAgent) && !/chrome|chromium/i.test(userAgent);\n}\n","/**\n * @typedef {String} StringWithVars\n * A template string with {{foo}} style variables\n * Also supports filters, like {{bookPath|urlencode}} (See APPLY_FILTERS for the\n * supported list of filters)\n **/\n\n/**\n * @param {StringWithVars|String} template\n * @param { {[varName: string]: { toString: () => string} } } vars\n * @param { {[varName: string]: { toString: () => string} } } [overrides]\n */\nexport function applyVariables(template, vars, overrides = {}, possibleFilters = APPLY_FILTERS) {\n return template?.replace(/\\{\\{([^}]*?)\\}\\}/g, ($0, $1) => {\n if (!$1) return $0;\n /** @type {string} */\n const expression = $1;\n const [varName, ...filterNames] = expression.split('|').map(x => x.trim());\n const defined = varName in overrides || varName in vars;\n\n // If it's not defined, don't expand it at all\n if (!defined) return $0;\n\n const value = varName in overrides ? overrides[varName]\n : varName in vars ? vars[varName] : null;\n const filters = filterNames.map(n => possibleFilters[n]);\n return filters.reduce((acc, cur) => cur(acc), value && value.toString());\n });\n}\n\n/** @type { {[filterName: String]:( string => string)} } */\nexport const APPLY_FILTERS = {\n urlencode: encodeURIComponent,\n};\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aFunction = require('../internals/a-function');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar bind = require('../internals/function-bind');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","var $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar has = require('../internals/has');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var descriptor, prototype;\n if (anObject(target) === receiver) return target[propertyKey];\n if (descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey)) return has(descriptor, 'value')\n ? descriptor.value\n : descriptor.get === undefined\n ? undefined\n : descriptor.get.call(receiver);\n if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n get: get\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.text_selection.js","mappings":"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A,uDACA,mDACA,+BACA,2CACA,+CACA,2EAAiD,kBACjD,+BACA,uCACA,gDACA,6CACA,0CACA,yHACA,iCACA,sCACA,mDACA,wCACA,qCACA,uCACA,gDACA,4DACA,mCACA,gDACA,4CACA,0CACA,qCACA,2CACA,sCACA,gEACA,6CACA,qCACA,uDACA,sDACA,mCACA,2CACA,oCACA,0CACA,wCACA,0CACA,4CACA,+CACA,kDACA,8CACA,wCACA,gDACA,qCACA,2DACA,wCACA,4CACA,mEACA,2CACA,wCACA,oDACA,+CACA,kDACA,oCACA,yDACA,yDACA,uCACA,uCACA,kCACA,wCACA,4CACA,mDACA,yDACA,uCACA,wCACA,sCACA,+CACA,wCACA,8DACA,4CACA,yCACA,2CACA,2CACA,wCACA,qCACA,uCACA,0CACA,wCACA,2CACA,gDACA,+EACA,qCACA,gDACA,yCACA,6CACA,gDACA,6DACA,kCACA,mDACA,mEACA,qCACA,iEACA,uCACA,mCACA,iDACA,0CACA,mDACA,wCACA,qCACA,gDACA,kDACA,qCACA,qCACA,mDACA,oDACA,+CACA,wDACA,4CACA,kDACA,uCACA,kDACA,qDACA,gDACA,4CACA,wDACA,sCACA,gDACA,0DACA,sDACA,8CACA,kDACA,4CACA,uCACA,mCACA,qCACA,oDACA,gCACA,qCACA,gDACA,uCACA,yDACA,sCACA,uCACA,oDACA,0DACA,4CACA,iCACA,uCACA,6CACA,qCACA,qCACA,oCACA,sCACA,qCACA,qCAQAC,QAAAC,IACA,IAAAC,EAAA,CACAjY,KAAAgY,EAAA,GACAE,WAAAF,EAAA,GACAG,SAAAH,EAAA,GACAI,UAAAJ,EAAA,GACAK,UAAAL,EAAA,IAEAJ,EAAAI,EAAA,IAAAH,EAAAG,EAAA,IAAAF,EAAAE,EAAA,IAAAC,EACAN,EAAA1a,KAAAgb,KAEA,IAAAK,EAAAX,EC3MA,SAAA/H,EAAAvO,EAAAF,GAAA,IAAAC,EAAA,oBAAAE,QAAAD,EAAAC,OAAAE,WAAAH,EAAA,kBAAAD,EAAA,IAAAkT,MAAAiE,QAAAlX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","sources":["webpack://@internetarchive/bookreader/./src/css/_TextSelection.scss","webpack://@internetarchive/bookreader/./node_modules/css-loader/dist/runtime/api.js","webpack://@internetarchive/bookreader/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.text_selection.js","webpack://@internetarchive/bookreader/./node_modules/iso-language-codes/dist/index.mjs","webpack://@internetarchive/bookreader/./src/plugins/tts/utils.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.regexp.flags.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match-all.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.raw.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/esnext.string.match-all.js","webpack://@internetarchive/bookreader/./src/BookReader/utils/SelectionObserver.js","webpack://@internetarchive/bookreader/./src/util/TextSelectionManager.js","webpack://@internetarchive/bookreader/./src/util/cache.js","webpack://@internetarchive/bookreader/./src/util/generators.js","webpack://@internetarchive/bookreader/./src/util/strings.js"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".BRtextLayer,.BRtranslateLayer{z-index:2;position:absolute;top:0;left:0;color:rgba(0,0,0,0);transform-origin:0 0;pointer-events:none;cursor:text}.BRtextLayer{mix-blend-mode:multiply}.BRtranslateLayer{hyphens:auto}.BRparagraphElement{margin:0;cursor:text;font-family:Georgia,serif;line-height:0}.BRlineElement{pointer-events:all;white-space:nowrap;display:inline-block}.BRtextLayer[dir=ltr] .BRlineElement{margin-right:100%}.BRtextLayer[dir=rtl] .BRlineElement{margin-left:100%}.BRwordElement::selection,.BRspace::selection,.BRparagraphElement::selection,.BRparagraphElement br::selection{background:hsla(210,74%,62%,.4)}.BRwordElement::-moz-selection,.BRspace::-moz-selection,.BRparagraphElement::-moz-selection,.BRparagraphElement br::-moz-selection{background:hsla(210,74%,62%,.4);color:rgba(0,0,0,0)}.BRtranslateLayer ::selection{background:hsla(210,74%,62%,.4)}.BRtranslateLayer ::-moz-selection{background:hsla(210,74%,62%,.4)}.BRparagraphElement br{visibility:hidden}.BRwordElement--hyphen::after{content:\\\"-\\\"}.BRsmooth-zooming .BRpagecontainer:not(.BRpagecontainer--hasSelection):not(:has(hypothesis-highlight)):not(:has(.BRhighlight)) .BRtextLayer,.BRscrolling-active .BRpagecontainer:not(.BRpagecontainer--hasSelection):not(:has(hypothesis-highlight)):not(:has(.BRhighlight)) .BRtextLayer{display:none}.BRmode1up .BRpagecontainer:not(.BRpage-visible) .BRtextLayer{display:none}.BRpagecontainer img{-webkit-user-select:none;-moz-user-select:none;user-select:none}.BRtextLayer:has([_istranslated=\\\"1\\\"],msreadoutspan){mix-blend-mode:normal}.BRwordElement[_istranslated=\\\"1\\\"],.BRwordElement[_msttexthash],.BRspace[_istranslated=\\\"1\\\"],.BRspace[_msttexthash]{color:#000;letter-spacing:unset !important}.BRlineElement:has([_istranslated=\\\"1\\\"],[_msttexthash]){background:rgba(248,237,192,.8);backdrop-filter:blur(8px);color:#000;text-align:justify;width:inherit}.BRlineElement:has([_istranslated=\\\"1\\\"],[_msttexthash]):not(:nth-last-child(2)){text-align-last:justify}.BRlineElement[_msttexthash]{word-spacing:unset !important}.BRtranslateLayer .BRparagraphElement{pointer-events:auto;overflow-y:auto;background:rgba(248,237,192,.8);backdrop-filter:blur(8px);color:#000;line-height:1em;text-align:justify}.BRtranslateLayer .BRparagraphElement .BRlineElement{white-space:break-spaces;display:inline-block}.BRtextLayer.showingTranslation{display:none}.BRtranslateLayer .BRparagraphElement.BRtranslateHidden{display:none}.br-select-menu__root{display:none;color:#fff;color-scheme:dark;padding:2px;overflow:hidden;opacity:1;transition:opacity .2s;gap:5px}.br-select-menu__root[open]{display:flex}.br-select-menu__root[showextended]{display:block;gap:0px;background-color:#333;border-radius:10px}@starting-style{.br-select-menu__root{opacity:0}}.br-select-menu__root--scrolling{opacity:0;pointer-events:none}.br-select-menu__option{--iconWidth: 15px;--iconHeight: 15px;--iconFillColor: currentColor;background:rgba(0,0,0,0);display:flex;align-items:center;border-radius:25px;font-family:inherit;color:inherit;border:0;cursor:pointer;text-wrap:nowrap;background-color:#333;position:relative}@media(pointer: coarse)and (hover: none){.br-select-menu__option{padding:4px 8px}#br-select-more .br-select-menu__option{padding:4px}}.br-select-menu__option:hover:after{position:absolute;left:2px;right:2px;top:2px;bottom:2px;content:\\\"\\\";pointer-events:none;background-color:rgba(255,255,255,.1);border-radius:23px}.br-select-menu__root[showextended] .br-select-menu__option{width:100%}.br-select-menu__root[showextended] .br-select-menu__option:hover:after{border-radius:8px}.br-select-menu__icon{display:block;flex-shrink:0;width:17px;height:17px;padding:2px}.br-select-menu__label{margin-left:4px;font-size:12px;margin-right:4px}@media(hover: hover){.br-select-menu__option{padding:4px}.br-select-menu__label{width:0px;margin:0;opacity:0;interpolate-size:allow-keywords;transition:width .2s}.br-select-menu__root:hover .br-select-menu__label{width:auto;margin:0 4px;opacity:1}}.BRtextLayer .BRhighlight{background-color:#ff0;pointer-events:all;color:rgba(0,0,0,0)}@keyframes highlightTargetFlash{to{background-color:hsl(45,80%,66%)}}.BRtextLayer .BRhighlight--target-text,.BRtextLayer ::target-text{background-color:hsla(45,80%,66%,.6);color:rgba(0,0,0,0);animation:highlightTargetFlash 600ms 1 reverse}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/css/_TextSelection.scss\"],\"names\":[],\"mappings\":\"AAAA,+BACI,SAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,mBAAA,CACA,oBAAA,CAEA,mBAAA,CACA,WAAA,CAGJ,aACI,uBAAA,CAGJ,kBACI,YAAA,CAGJ,oBACI,QAAA,CACA,WAAA,CACA,yBAAA,CACA,aAAA,CAGJ,eACI,kBAAA,CACA,kBAAA,CACA,oBAAA,CASA,qCAAA,iBAAA,CACA,qCAAA,gBAAA,CAMA,+GACI,+BAAA,CAGJ,mIACI,+BAAA,CACA,mBAAA,CAIR,8BACI,+BAAA,CAGJ,mCACI,+BAAA,CAGJ,uBACI,iBAAA,CAKJ,8BACI,WAAA,CAMA,0RACI,YAAA,CAKR,8DACI,YAAA,CAIJ,qBACI,wBAAA,CACA,qBAAA,CACA,gBAAA,CAOJ,oDACI,qBAAA,CAIA,kHACI,UAAA,CACA,+BAAA,CAIR,uDACI,+BAAA,CACA,yBAAA,CACA,UAAA,CACA,kBAAA,CACA,aAAA,CACA,+EACI,uBAAA,CAIR,6BACI,6BAAA,CAGJ,sCACI,mBAAA,CACA,eAAA,CACA,+BAAA,CACA,yBAAA,CACA,UAAA,CACA,eAAA,CACA,kBAAA,CAGJ,qDACI,wBAAA,CACA,oBAAA,CAGJ,gCACI,YAAA,CAGJ,wDACI,YAAA,CAMJ,sBACE,YAAA,CACA,UAAA,CACA,iBAAA,CACA,WAAA,CACA,eAAA,CACA,SAAA,CACA,sBAAA,CACA,OAAA,CAEA,4BACE,YAAA,CAGF,oCACE,aAAA,CACA,OAAA,CACA,qBAAA,CACA,kBAnB0B,CAsB5B,gBArBF,sBAsBI,SAAA,CAAA,CAGJ,iCACE,SAAA,CACA,mBAAA,CAGF,wBACE,iBAAA,CACA,kBAAA,CACA,6BAAA,CACA,wBAAA,CACA,YAAA,CACA,kBAAA,CACA,kBAvCmB,CAwCnB,mBAAA,CACA,aAAA,CACA,QAAA,CACA,cAAA,CACA,gBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,yCAhBF,wBAiBI,eAAA,CACA,wCACI,WAAA,CAAA,CAIN,oCACE,iBAAA,CACA,QAAA,CACA,SAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CACA,mBAAA,CACA,qCAAA,CACA,kBAAA,CAGF,4DACI,UAAA,CACA,wEACE,iBAAA,CAKR,sBACE,aAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,WAAA,CAGF,uBACE,eAAA,CACA,cAAA,CACA,gBAAA,CAGF,qBACI,wBACI,WAAA,CAEJ,uBACI,SAAA,CACA,QAAA,CACA,SAAA,CACA,+BAAA,CACA,oBAAA,CAEJ,mDACI,UAAA,CACA,YAAA,CACA,SAAA,CAAA,CAIR,0BACI,qBAAA,CACA,kBAAA,CACA,mBAAA,CAGJ,gCACE,GAAA,gCAAA,CAAA,CAIF,kEAEI,oCAAA,CACA,mBAAA,CACA,8CAAA\",\"sourcesContent\":[\".BRtextLayer, .BRtranslateLayer {\\n z-index: 2;\\n position: absolute;\\n top: 0;\\n left: 0;\\n color: transparent;\\n transform-origin: 0 0;\\n // Make it so right-clicking on \\\"blank\\\" part of text layer sends events to the image (for saving)\\n pointer-events: none;\\n cursor: text;\\n}\\n\\n.BRtextLayer {\\n mix-blend-mode: multiply;\\n}\\n\\n.BRtranslateLayer {\\n hyphens: auto;\\n}\\n\\n.BRparagraphElement {\\n margin: 0;\\n cursor: text;\\n font-family: Georgia, serif;\\n line-height: 0;\\n}\\n\\n.BRlineElement {\\n pointer-events: all;\\n white-space: nowrap;\\n display: inline-block;\\n\\n // We use display: inline-block, otherwise this causes every line\\n // to have newlines at the end in safari. BUT, since they're inline,\\n // if the OCR has to short line in the same paragraph, they can wrap\\n // and one can go onto the other. This adds an arbitrary margin to\\n // the right of each line, forcing things to wrap.\\n // See eg https://www-drini.archive.org/details/countofmontecris00duma_7/page/261/mode/2up\\n // Page 261, second last line on the page.\\n .BRtextLayer[dir=ltr] & { margin-right: 100%; }\\n .BRtextLayer[dir=rtl] & { margin-left: 100%; }\\n}\\n\\n// Highlight colors for text selection layer\\n.BRwordElement, .BRspace, .BRparagraphElement, .BRparagraphElement br {\\n // these 2 properties do not work if joined\\n &::selection {\\n background: hsla(210, 74%, 62%, 0.4);\\n }\\n\\n &::-moz-selection {\\n background: hsla(210, 74%, 62%, 0.4);\\n color:transparent;\\n }\\n}\\n\\n.BRtranslateLayer ::selection {\\n background: hsla(210, 74%, 62%, 0.4);\\n}\\n\\n.BRtranslateLayer ::-moz-selection {\\n background: hsla(210, 74%, 62%, 0.4);\\n}\\n\\n.BRparagraphElement br {\\n visibility: hidden;\\n}\\n\\n// Use CSS pseudo-elements to render the hyphens. This makes them\\n// not selectable, so copy/pasting text doesn't include them.\\n.BRwordElement--hyphen::after {\\n content: \\\"-\\\";\\n}\\n\\n// Hide text layer for performance during zooming & scrolling\\n.BRsmooth-zooming, .BRscrolling-active {\\n // If the text layer has an annotation, don't hide it\\n .BRpagecontainer:not(.BRpagecontainer--hasSelection):not(:has(hypothesis-highlight)):not(:has(.BRhighlight)) .BRtextLayer {\\n display: none;\\n }\\n}\\n\\n// Hide text selection layers of off-screen pages\\n.BRmode1up .BRpagecontainer:not(.BRpage-visible) .BRtextLayer {\\n display: none;\\n}\\n\\n// Makes page image unselectable\\n.BRpagecontainer img {\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n\\n\\n// These are Microsoft Edge specific fixed to make some of the\\n// browsers features work well. These are for the in-place\\n// translation.\\n.BRtextLayer:has([_istranslated=\\\"1\\\"], msreadoutspan) {\\n mix-blend-mode: normal;\\n}\\n\\n.BRwordElement, .BRspace {\\n &[_istranslated=\\\"1\\\"], &[_msttexthash] {\\n color: black;\\n letter-spacing: unset !important;\\n }\\n}\\n\\n.BRlineElement:has([_istranslated=\\\"1\\\"], [_msttexthash]) {\\n background: rgba(248, 237, 192, 0.8);\\n backdrop-filter: blur(8px);\\n color: black;\\n text-align: justify;\\n width: inherit;\\n &:not(:nth-last-child(2)) {\\n text-align-last: justify;\\n }\\n}\\n\\n.BRlineElement[_msttexthash] {\\n word-spacing: unset !important;\\n}\\n\\n.BRtranslateLayer .BRparagraphElement {\\n pointer-events: auto;\\n overflow-y: auto;\\n background: rgba(248, 237, 192, 0.8);\\n backdrop-filter: blur(8px);\\n color:black;\\n line-height: 1em;\\n text-align: justify;\\n}\\n\\n.BRtranslateLayer .BRparagraphElement .BRlineElement {\\n white-space: break-spaces;\\n display: inline-block;\\n}\\n\\n.BRtextLayer.showingTranslation {\\n display: none;\\n}\\n\\n.BRtranslateLayer .BRparagraphElement.BRtranslateHidden {\\n display: none;\\n}\\n\\n\\n$select-menu-radius: 25px;\\n$select-menu-extended-radius: 10px;\\n.br-select-menu__root {\\n display: none;\\n color: white;\\n color-scheme: dark;\\n padding: 2px;\\n overflow: hidden;\\n opacity: 1;\\n transition: opacity 0.2s;\\n gap: 5px;\\n\\n &[open] {\\n display: flex;\\n }\\n\\n &[showextended] {\\n display: block;\\n gap: 0px;\\n background-color: #333;\\n border-radius: $select-menu-extended-radius;\\n }\\n\\n @starting-style {\\n opacity: 0;\\n }\\n}\\n.br-select-menu__root--scrolling {\\n opacity: 0;\\n pointer-events: none;\\n}\\n\\n.br-select-menu__option {\\n --iconWidth: 15px;\\n --iconHeight: 15px;\\n --iconFillColor: currentColor;\\n background: transparent;\\n display: flex;\\n align-items: center;\\n border-radius: $select-menu-radius;\\n font-family: inherit;\\n color: inherit;\\n border: 0;\\n cursor: pointer;\\n text-wrap: nowrap;\\n background-color: #333;\\n position: relative;\\n\\n @media (pointer: coarse) and (hover: none) {\\n padding: 4px 8px;\\n #br-select-more & {\\n padding: 4px;\\n }\\n }\\n\\n &:hover:after {\\n position: absolute;\\n left: 2px;\\n right: 2px;\\n top: 2px;\\n bottom: 2px;\\n content: \\\"\\\";\\n pointer-events: none;\\n background-color: rgba(255, 255, 255, 0.1);\\n border-radius: calc($select-menu-radius - 2px);\\n }\\n\\n .br-select-menu__root[showextended] & {\\n width:100%;\\n &:hover:after {\\n border-radius: calc($select-menu-extended-radius - 2px);\\n }\\n }\\n}\\n\\n.br-select-menu__icon {\\n display: block;\\n flex-shrink: 0;\\n width: 17px;\\n height: 17px;\\n padding: 2px;\\n}\\n\\n.br-select-menu__label {\\n margin-left: 4px;\\n font-size: 12px;\\n margin-right: 4px;\\n}\\n\\n@media (hover: hover) {\\n .br-select-menu__option {\\n padding: 4px;\\n }\\n .br-select-menu__label {\\n width: 0px;\\n margin: 0;\\n opacity: 0;\\n interpolate-size: allow-keywords;\\n transition: width 0.2s;\\n }\\n .br-select-menu__root:hover .br-select-menu__label {\\n width: auto;\\n margin: 0 4px;\\n opacity: 1;\\n }\\n}\\n\\n.BRtextLayer .BRhighlight {\\n background-color: yellow;\\n pointer-events: all;\\n color: transparent;\\n}\\n\\n@keyframes highlightTargetFlash {\\n to { background-color: hsla(45, 80%, 66%, 1); }\\n}\\n\\n// Style URI TextFragments, eg ?text=example\\n.BRtextLayer .BRhighlight--target-text, .BRtextLayer ::target-text {\\n // Similar colour to the default one used in Safari, Firefox. Note Chrome uses a purple colour\\n background-color: hsla(45, 80%, 66%, 0.6);\\n color: transparent;\\n animation: highlightTargetFlash 600ms 1 reverse;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","//@ts-check\nimport { createDIVPageLayer } from '../BookReader/PageContainer.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport { applyVariables } from '../util/strings.js';\nimport { Cache } from '../util/cache.js';\nimport { toISO6391 } from './tts/utils.js';\nimport { BookReaderTextFragment, renderHighlight, TextSelectionManager } from '../util/TextSelectionManager.js';\nimport { genMap, lookAroundWindow, zip } from '../util/generators.js';\nimport textSelectionCss from '../css/_TextSelection.scss';\n/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */\n/** @typedef {import('../BookReader/PageContainer.js').PageContainer} PageContainer */\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n\nexport class TextSelectionPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */\n fullDjvuXmlUrl: null,\n /** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */\n singlePageDjvuXmlUrl: null,\n /** Whether to fetch the XML as a jsonp */\n jsonp: false,\n /** Mox words that can be selected when the text layer is protected */\n maxProtectedWords: 200,\n }\n\n /**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */\n djvuPagesPromise = null;\n\n /** @type {Cache<{index: number, response: any}>} */\n pageTextCache = new Cache();\n\n /**\n * Sometimes there are too many words on a page, and the browser becomes near\n * unusable. For now don't render text layer for pages with too many words.\n */\n maxWordRendered = 2500;\n\n _jumpedToHighlight = false;\n\n /**\n * Isolated document/layout used to performantly measure OCR text-layer\n * elements.\n * @type {Document}\n */\n _measurementDocument;\n\n /**\n * @param {import('../BookReader.js').default} br\n */\n constructor(br) {\n super(br);\n // In the future this should be in the ocr file\n // since a book being right to left doesn't mean the ocr is right to left. But for\n // now we do make that assumption.\n /** Whether the book is right-to-left */\n this.rtl = this.br.pageProgression === 'rl';\n this.textSelectionManager = new TextSelectionManager('.BRtextLayer', this.br, {selectionElement: ['.BRwordElement', '.BRspace', 'mark']}, this.options.maxProtectedWords);\n }\n\n /** @override */\n init() {\n if (!this.options.enabled) return;\n\n // Setup measurement iframe for OCR\n const measurementIframe = document.createElement('iframe');\n measurementIframe.setAttribute('aria-hidden', 'true');\n measurementIframe.tabIndex = -1;\n measurementIframe.style.cssText = 'position:fixed; top:-99999px; left:-99999px; width:2000px; height:4000px; border:0; visibility:hidden;';\n document.body.appendChild(measurementIframe);\n this._measurementDocument = measurementIframe.contentDocument;\n // Injects _TextSelection.scss so measurements match the real\n // rendering\n const style = this._measurementDocument.createElement('style');\n style.textContent = textSelectionCss;\n this._measurementDocument.head.appendChild(style);\n\n this.br.on('pageVisible', (_, {pageContainerEl}) => {\n const textLayer = pageContainerEl.querySelector('.BRtextLayer');\n if (textLayer) {\n this.br.trigger('textLayerVisible', {pageContainerEl, textLayer});\n }\n });\n\n this.loadData();\n this.textSelectionManager.init();\n\n // Init text fragment\n const textParam = new URLSearchParams(location.search).get('text');\n if (textParam) {\n // save on global BR\n this.br.targetTextFragment = BookReaderTextFragment.fromString(textParam, this.br.book, this.br.firstIndex);\n this.initTextFragment();\n }\n }\n\n async initTextFragment() {\n if (this.br.options.verifyTextFragment && !await this.br.options.verifyTextFragment(this.br.targetTextFragment)) {\n return;\n }\n\n const targetTextFragment = this.br.targetTextFragment;\n this.br.on('textLayerVisible', async (_, {pageContainerEl, textLayer}) => {\n const pageIndex = targetTextFragment.pageIndex;\n const hasTargetText = pageIndex === parseFloat(pageContainerEl.getAttribute('data-index'));\n if (hasTargetText) {\n const markEls = renderHighlight(textLayer, targetTextFragment, 'BRhighlight--target-text');\n // Only jump once; presumably on first page load.\n if (!this._jumpedToHighlight) {\n this.br.scrollIntoView(markEls[0], {behavior: 'smooth', block: 'center'});\n this._jumpedToHighlight = true;\n }\n }\n });\n\n // Now jump to the page and open a slot if necessary\n const page = this.br.book.getPage(this.br.targetTextFragment.pageIndex);\n if (!page.isViewable) {\n await this.br.requestPage(page);\n this.br.jumpToIndex(page.index, { ariaLive: true, allowUnviewable: true });\n }\n }\n\n /**\n * @override\n * @param {PageContainer} pageContainer\n * @returns {PageContainer}\n */\n _configurePageContainer(pageContainer) {\n // Disable if thumb mode; it's too janky\n // .page can be null for \"pre-cover\" region\n if (this.options.enabled && this.br.mode !== this.br.constModeThumb && pageContainer.page?.isViewable) {\n this.createTextLayer(pageContainer);\n }\n return pageContainer;\n }\n\n loadData() {\n // Only fetch the full djvu xml if the single page url isn't there\n if (this.options.singlePageDjvuXmlUrl) return;\n this.djvuPagesPromise = $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.fullDjvuXmlUrl, this.br.options.vars),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n }).then((res) => {\n try {\n const xmlMap = $.parseXML(res);\n return xmlMap && $(xmlMap).find(\"OBJECT\");\n } catch (e) {\n return undefined;\n }\n });\n }\n\n /**\n * @param {number} index\n * @returns {Promise<HTMLElement|undefined>}\n */\n async getPageText(index) {\n if (this.options.singlePageDjvuXmlUrl) {\n const cachedEntry = this.pageTextCache.entries.find(x => x.index == index);\n if (cachedEntry) {\n return cachedEntry.response;\n }\n const res = await $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.singlePageDjvuXmlUrl, this.br.options.vars, { pageIndex: index }),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n });\n try {\n const xmlDoc = $.parseXML(res);\n const result = xmlDoc && $(xmlDoc).find(\"OBJECT\")[0];\n this.pageTextCache.add({ index, response: result });\n return result;\n } catch (e) {\n return undefined;\n }\n } else {\n const XMLpagesArr = await this.djvuPagesPromise;\n if (XMLpagesArr) return XMLpagesArr[index];\n }\n }\n\n /**\n * @param {PageContainer} pageContainer\n */\n async createTextLayer(pageContainer) {\n const pageIndex = pageContainer.page.index;\n const $container = pageContainer.$container;\n const $textLayers = $container.find('.BRtextLayer');\n if ($textLayers.length) return;\n const XMLpage = await this.getPageText(pageIndex);\n if (!XMLpage) return;\n // Seeing some 0 left and 0 top coordinates in OCR, remove it entirely to prevent odd rendering\n // eg https://archive.org/details/illustratedbooko00robe/page/n11/mode/2up\n $(XMLpage).find(\"WORD\").filter((_, ele) => {\n const [left, , , top] = ele.getAttribute('coords').split(\",\").map(parseFloat);\n if (left == 0 && top == 0) {\n console.error(\"Found invalid ocr word coordinates\");\n return true;\n }\n }).remove();\n recursivelyAddCoords(XMLpage);\n\n const totalWords = $(XMLpage).find(\"WORD\").length;\n if (totalWords > this.maxWordRendered) {\n console.log(`Page ${pageIndex} has too many words (${totalWords} > ${this.maxWordRendered}). Not rendering text layer.`);\n return;\n }\n\n const textLayer = createDIVPageLayer(pageContainer.page, 'BRtextLayer');\n // Have to wait to make sure the page container is actually rendered,\n // otherwise width/height are unset after a mode change.\n await Promise.resolve();\n const ratioW = parseFloat(pageContainer.$container[0].style.width) / pageContainer.page.width;\n const ratioH = parseFloat(pageContainer.$container[0].style.height) / pageContainer.page.height;\n textLayer.style.transform = `scale(${ratioW}, ${ratioH})`;\n const bookLangCode = toISO6391(this.br.options.bookLanguage);\n if (bookLangCode) {\n textLayer.setAttribute(\"lang\", bookLangCode);\n }\n textLayer.setAttribute(\"dir\", this.rtl ? \"rtl\" : \"ltr\");\n\n const ocrParagraphs = $(XMLpage).find(\"PARAGRAPH[coords]\").toArray();\n const paragEls = ocrParagraphs.map(p => {\n const el = this.renderParagraph(p);\n textLayer.appendChild(el);\n return el;\n });\n\n // Fix up paragraph positions\n const paragraphRects = determineRealRects(textLayer, '.BRparagraphElement', this._measurementDocument);\n let yAdded = 0;\n for (const [ocrParagraph, paragEl] of zip(ocrParagraphs, paragEls)) {\n const ocrParagBounds = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const realRect = paragraphRects.get(paragEl);\n const [ocrLeft, , ocrRight, ocrTop] = ocrParagBounds;\n const newStartMargin = this.rtl ? (realRect.right - ocrRight) : (ocrLeft - realRect.left);\n const newTop = ocrTop - (realRect.top + yAdded);\n\n paragEl.style[this.rtl ? 'marginRight' : 'marginLeft'] = `${newStartMargin}px`;\n paragEl.style.marginTop = `${newTop}px`;\n yAdded += newTop;\n textLayer.appendChild(paragEl);\n textLayer.appendChild(document.createTextNode('\\n'));\n }\n $container.append(textLayer);\n this.textSelectionManager.stopPageFlip($container);\n this.br.trigger('textLayerRendered', {\n pageIndex,\n pageContainer,\n });\n\n // Check if page is visible\n if ($container.hasClass('BRpage-visible')) {\n this.br.trigger('textLayerVisible', {pageContainerEl: $container[0], textLayer});\n }\n }\n\n /**\n * @param {HTMLElement} ocrParagraph\n * @returns {HTMLParagraphElement}\n */\n renderParagraph(ocrParagraph) {\n const paragEl = document.createElement('p');\n paragEl.classList.add('BRparagraphElement');\n if (ocrParagraph.getAttribute(\"x-role\")) {\n paragEl.classList.add('ocr-role-header-footer');\n paragEl.ariaHidden = \"true\";\n }\n const [paragLeft, paragBottom, paragRight, paragTop] = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const wordHeightArr = [];\n const lines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n if (!lines.length) return paragEl;\n\n\n for (const [prevLine, line, nextLine] of lookAroundWindow(genMap(lines, augmentLine))) {\n const isLastLineOfParagraph = line.ocrElement == lines[lines.length - 1];\n const lineEl = document.createElement('span');\n lineEl.classList.add('BRlineElement');\n\n for (const [wordIndex, currWord] of line.words.entries()) {\n const [, bottom, right, top] = $(currWord).attr(\"coords\").split(',').map(parseFloat);\n const wordHeight = bottom - top;\n wordHeightArr.push(wordHeight);\n\n if (wordIndex == 0 && prevLine?.lastWord.textContent.trim().endsWith('-')) {\n // ideally prefer the next line to determine the left position,\n // since the previous line could be the first line of the paragraph\n // and hence have an incorrectly indented first word.\n // E.g. https://archive.org/details/driitaleofdaring00bachuoft/page/360/mode/2up\n const [newLeft, , , ] = $((nextLine || prevLine).firstWord).attr(\"coords\").split(',').map(parseFloat);\n $(currWord).attr(\"coords\", `${newLeft},${bottom},${right},${top}`);\n }\n\n const wordEl = document.createElement('span');\n wordEl.setAttribute(\"class\", \"BRwordElement\");\n wordEl.textContent = currWord.textContent.trim();\n\n if (wordIndex > 0) {\n const space = document.createElement('span');\n space.classList.add('BRspace');\n space.textContent = ' ';\n // Hack to make screen readers (eg NVDA) read spaces correctly;\n // otherwise they ignore elements with just whitespace.\n space.setAttribute('aria-label', '\\u00A0');\n lineEl.append(space);\n\n // Edge ignores empty elements (like BRspace), so add another\n // space to ensure Edge's ReadAloud works correctly.\n lineEl.appendChild(document.createTextNode(' '));\n }\n\n lineEl.appendChild(wordEl);\n }\n\n const hasHyphen = line.lastWord.textContent.trim().endsWith('-');\n const lastWordEl = lineEl.children[lineEl.children.length - 1];\n if (hasHyphen && !isLastLineOfParagraph) {\n lastWordEl.textContent = lastWordEl.textContent.trim().slice(0, -1);\n lastWordEl.classList.add('BRwordElement--hyphen');\n }\n\n paragEl.appendChild(lineEl);\n if (!isLastLineOfParagraph && !hasHyphen) {\n // Edge does not correctly have spaces between the lines.\n paragEl.appendChild(document.createTextNode(' '));\n }\n }\n\n wordHeightArr.sort((a, b) => a - b);\n const paragWordHeight = wordHeightArr[Math.floor(wordHeightArr.length * 0.85)] + 4;\n paragEl.style.left = `${paragLeft}px`;\n paragEl.style.top = `${paragTop}px`;\n paragEl.style.width = `${paragRight - paragLeft}px`;\n paragEl.style.height = `${paragBottom - paragTop}px`;\n paragEl.style.fontSize = `${paragWordHeight}px`;\n\n // Fix up sizes - stretch/crush words as necessary using letter spacing\n let wordRects = determineRealRects(paragEl, '.BRwordElement', this._measurementDocument);\n const ocrWords = $(ocrParagraph).find(\"WORD\").toArray();\n const wordEls = paragEl.querySelectorAll('.BRwordElement');\n for (const [ocrWord, wordEl] of zip(ocrWords, wordEls)) {\n const realRect = wordRects.get(wordEl);\n const [left, , right ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n let ocrWidth = right - left;\n // Some books (eg theworksofplato01platiala) have a space _inside_ the <WORD>\n // element. That makes it impossible to determine the correct positining\n // of everything, but to avoid the BRspace's being width 0, which makes selection\n // janky on Chrome Android, assume the space is the same width as one of the\n // letters.\n if (ocrWord.textContent.endsWith(' ')) {\n ocrWidth = ocrWidth * (ocrWord.textContent.length - 1) / ocrWord.textContent.length;\n }\n const diff = ocrWidth - realRect.width;\n wordEl.style.letterSpacing = `${diff / (ocrWord.textContent.length - 1)}px`;\n }\n\n // Stretch/crush lines as necessary using line spacing\n // Recompute rects after letter spacing\n wordRects = determineRealRects(paragEl, '.BRwordElement', this._measurementDocument);\n const spaceRects = determineRealRects(paragEl, '.BRspace', this._measurementDocument);\n\n const ocrLines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n const lineEls = Array.from(paragEl.querySelectorAll('.BRlineElement'));\n\n let ySoFar = paragTop;\n for (const [ocrLine, lineEl] of zip(ocrLines, lineEls)) {\n // shift words using marginLeft to align with the correct x position\n const words = $(ocrLine).find(\"WORD\").toArray();\n // const ocrLineLeft = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[0])));\n let xSoFar = this.rtl ? paragRight : paragLeft;\n for (const [ocrWord, wordEl] of zip(words, lineEl.querySelectorAll('.BRwordElement'))) {\n // start of line, need to compute the offset relative to the OCR words\n const wordRect = wordRects.get(wordEl);\n const [ocrLeft, , ocrRight ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n const diff = (this.rtl ? -(ocrRight - xSoFar) : ocrLeft - xSoFar);\n\n if (wordEl.previousElementSibling) {\n const space = wordEl.previousElementSibling;\n space.style.letterSpacing = `${diff - spaceRects.get(space).width}px`;\n } else {\n wordEl.style[this.rtl ? 'paddingRight' : 'paddingLeft'] = `${diff}px`;\n }\n if (this.rtl) xSoFar -= diff + wordRect.width;\n else xSoFar += diff + wordRect.width;\n }\n // And also fix y position\n const ocrLineTop = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[3])));\n const diff = ocrLineTop - ySoFar;\n if (lineEl.previousElementSibling) {\n lineEl.previousElementSibling.style.lineHeight = `${diff}px`;\n ySoFar += diff;\n }\n }\n\n // The last line will have a line height subtracting from the paragraph height\n lineEls[lineEls.length - 1].style.lineHeight = `${paragBottom - ySoFar}px`;\n\n // Edge does not include a newline for some reason when copying/pasting the <p> els\n paragEl.appendChild(document.createElement('br'));\n return paragEl;\n }\n}\n\nBookReader?.registerPlugin('textSelection', TextSelectionPlugin);\n\n\n/**\n * @param {HTMLElement} parentEl\n * @param {string} selector\n * @param {Document} measurementDocument Isolated document to measure within\n * (see TextSelectionPlugin#_measurementDocument for why).\n * @returns {Map<Element, Rect>}\n */\nfunction determineRealRects(parentEl, selector, measurementDocument) {\n const initals = {\n position: parentEl.style.position,\n visibility: parentEl.style.visibility,\n top: parentEl.style.top,\n left: parentEl.style.left,\n transform: parentEl.style.transform,\n };\n parentEl.style.position = 'absolute';\n parentEl.style.visibility = 'hidden';\n parentEl.style.top = '0';\n parentEl.style.left = '0';\n parentEl.style.transform = 'none';\n measurementDocument.body.appendChild(parentEl);\n const rects = new Map(\n Array.from(parentEl.querySelectorAll(selector))\n .map(wordEl => {\n const origRect = wordEl.getBoundingClientRect();\n return [wordEl, new Rect(\n origRect.left + measurementDocument.defaultView.scrollX,\n origRect.top + measurementDocument.defaultView.scrollY,\n origRect.width,\n origRect.height,\n )];\n }),\n );\n measurementDocument.body.removeChild(parentEl);\n Object.assign(parentEl.style, initals);\n // Need to restore the document to the main window document\n document.adoptNode(parentEl);\n return rects;\n}\n\n/**\n * @param {HTMLElement} line\n */\nfunction augmentLine(line) {\n const words = $(line).find(\"WORD\").toArray();\n return {\n ocrElement: line,\n words,\n firstWord: words[0],\n lastWord: words[words.length - 1],\n };\n}\n\n/**\n * [left, bottom, right, top]\n * @param {Array<[number, number, number, number]>} bounds\n * @returns {[number, number, number, number]}\n */\nfunction determineBounds(bounds) {\n let leftMost = Infinity;\n let bottomMost = -Infinity;\n let rightMost = -Infinity;\n let topMost = Infinity;\n\n for (const [left, bottom, right, top] of bounds) {\n leftMost = Math.min(leftMost, left);\n bottomMost = Math.max(bottomMost, bottom);\n rightMost = Math.max(rightMost, right);\n topMost = Math.min(topMost, top);\n }\n\n return [leftMost, bottomMost, rightMost, topMost];\n}\n\n/**\n * Recursively traverses the XML tree and adds coords\n * which are the bounding box of all child coords\n * @param {Element} xmlEl\n */\nfunction recursivelyAddCoords(xmlEl) {\n if ($(xmlEl).attr('coords') || !xmlEl.children) {\n return;\n }\n\n const children = $(xmlEl).children().toArray();\n if (children.length === 0) {\n return;\n }\n\n for (const child of children) {\n recursivelyAddCoords(child);\n }\n\n const childCoords = [];\n\n for (const child of children) {\n if (!$(child).attr('coords')) continue;\n childCoords.push($(child).attr('coords').split(',').map(parseFloat));\n }\n\n const boundingCoords = determineBounds(childCoords);\n if (Math.abs(boundingCoords[0]) != Infinity) {\n $(xmlEl).attr('coords', boundingCoords.join(','));\n }\n}\n\n/**\n * Basically a polyfill for the native DOMRect class\n */\nclass Rect {\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n constructor(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n get right() { return this.x + this.width; }\n get bottom() { return this.y + this.height; }\n get top() { return this.y; }\n get left() { return this.x; }\n}\n","// src/data.ts\nvar data_default = [\n [\"Serbian\", \"\\u0441\\u0440\\u043F\\u0441\\u043A\\u0438 \\u0458\\u0435\\u0437\\u0438\\u043A\", \"sr\", \"srp\", \"srp\"],\n [\"Romanian, Moldavian, Moldovan\", \"Rom\\xE2n\\u0103\", \"ro\", \"ron\", \"rum\"],\n [\"Sichuan Yi, Nuosu\", \"\\uA188\\uA320\\uA4BF Nuosuhxop\", \"ii\", \"iii\", \"iii\"],\n [\"Tahitian\", \"Reo Tahiti\", \"ty\", \"tah\", \"tah\"],\n [\"Tagalog\", \"Wikang Tagalog\", \"tl\", \"tgl\", \"tgl\"],\n [\"Yiddish\", \"\\u05D9\\u05D9\\u05B4\\u05D3\\u05D9\\u05E9\", \"yi\", \"yid\", \"yid\"],\n [\"Akan\", \"Akan\", \"ak\", \"aka\", \"aka\"],\n [\"Malay\", \"Bahasa Melayu, \\u0628\\u0647\\u0627\\u0633 \\u0645\\u0644\\u0627\\u064A\\u0648\", \"ms\", \"msa\", \"may\"],\n [\"Arabic\", \"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064A\\u0629\", \"ar\", \"ara\", \"ara\"],\n [\"Norwegian\", \"Norsk\", \"no\", \"nor\", \"nor\"],\n [\"Ojibwa\", \"\\u140A\\u14C2\\u1511\\u14C8\\u142F\\u14A7\\u140E\\u14D0\", \"oj\", \"oji\", \"oji\"],\n [\"Fulah\", \"Fulfulde, Pulaar, Pular\", \"ff\", \"ful\", \"ful\"],\n [\"Persian\", \"\\u0641\\u0627\\u0631\\u0633\\u06CC\", \"fa\", \"fas\", \"per\"],\n [\"Albanian\", \"Shqip\", \"sq\", \"sqi\", \"alb\"],\n [\"Aymara\", \"aymar aru\", \"ay\", \"aym\", \"aym\"],\n [\"Azerbaijani\", \"az\\u0259rbaycan dili\", \"az\", \"aze\", \"aze\"],\n [\"Chinese\", \"\\u4E2D\\u6587 (Zh\\u014Dngw\\xE9n), \\u6C49\\u8BED, \\u6F22\\u8A9E\", \"zh\", \"zho\", \"chi\"],\n [\"Cree\", \"\\u14C0\\u1426\\u1403\\u152D\\u140D\\u140F\\u1423\", \"cr\", \"cre\", \"cre\"],\n [\"Estonian\", \"eesti, eesti keel\", \"et\", \"est\", \"est\"],\n [\"Guaran\\xED\", \"Ava\\xF1e'\\u1EBD\", \"gn\", \"grn\", \"grn\"],\n [\"Inupiaq\", \"I\\xF1upiaq, I\\xF1upiatun\", \"ik\", \"ipk\", \"ipk\"],\n [\"Inuktitut\", \"\\u1403\\u14C4\\u1483\\u144E\\u1450\\u1466\", \"iu\", \"iku\", \"iku\"],\n [\"Kanuri\", \"Kanuri\", \"kr\", \"kau\", \"kau\"],\n [\"Komi\", \"\\u043A\\u043E\\u043C\\u0438 \\u043A\\u044B\\u0432\", \"kv\", \"kom\", \"kom\"],\n [\"Kongo\", \"Kikongo\", \"kg\", \"kon\", \"kon\"],\n [\"Kurdish\", \"Kurd\\xEE, \\u0623\\u06C7\\u0632\\u0628\\u06D0\\u0643\", \"ku\", \"kur\", \"kur\"],\n [\"Latvian\", \"latvie\\u0161u valoda\", \"lv\", \"lav\", \"lav\"],\n [\"Malagasy\", \"fiteny malagasy\", \"mg\", \"mlg\", \"mlg\"],\n [\"Mongolian\", \"\\u041C\\u043E\\u043D\\u0433\\u043E\\u043B \\u0445\\u044D\\u043B\", \"mn\", \"mon\", \"mon\"],\n [\"Oromo\", \"Afaan Oromoo\", \"om\", \"orm\", \"orm\"],\n [\"Pashto, Pushto\", \"\\u067E\\u069A\\u062A\\u0648\", \"ps\", \"pus\", \"pus\"],\n [\"Quechua\", \"Runa Simi, Kichwa\", \"qu\", \"que\", \"que\"],\n [\"Sardinian\", \"sardu\", \"sc\", \"srd\", \"srd\"],\n [\"Swahili\", \"Kiswahili\", \"sw\", \"swa\", \"swa\"],\n [\"Uzbek\", \"O\\u02BBzbek, \\u040E\\u0437\\u0431\\u0435\\u043A, \", \"uz\", \"uzb\", \"uzb\"],\n [\"Zhuang, Chuang\", \"Sa\\u026F cue\\u014B\\u0185, Saw cuengh\", \"za\", \"zha\", \"zha\"],\n [\"Bislama\", \"Bislama\", \"bi\", \"bis\", \"bis\"],\n [\"Norwegian Bokm\\xE5l\", \"Norsk Bokm\\xE5l\", \"nb\", \"nob\", \"nob\"],\n [\"Norwegian Nynorsk\", \"Norsk Nynorsk\", \"nn\", \"nno\", \"nno\"],\n [\"Indonesian\", \"Bahasa Indonesia\", \"id\", \"ind\", \"ind\"],\n [\"Twi\", \"Twi\", \"tw\", \"twi\", \"twi\"],\n [\"Esperanto\", \"Esperanto\", \"eo\", \"epo\", \"epo\"],\n [\"Interlingua\", \"Interlingua\", \"ia\", \"ina\", \"ina\"],\n [\"Interlingue\", \"Originally called Occidental; then Interlingue after WWII\", \"ie\", \"ile\", \"ile\"],\n [\"Ido\", \"Ido\", \"io\", \"ido\", \"ido\"],\n [\"Volap\\xFCk\", \"Volap\\xFCk\", \"vo\", \"vol\", \"vol\"],\n [\"Bihari languages\", \"\\u092D\\u094B\\u091C\\u092A\\u0941\\u0930\\u0940\", \"bh\", \"bih\", \"bih\"],\n [\"Hebrew (modern)\", \"\\u05E2\\u05D1\\u05E8\\u05D9\\u05EA\", \"he\", \"heb\", \"heb\"],\n [\"Sanskrit\", \"\\u0938\\u0902\\u0938\\u094D\\u0915\\u0943\\u0924\\u092E\\u094D\", \"sa\", \"san\", \"san\"],\n [\"Church Slavic, Church Slavonic, Old Church Slavonic, Old Slavonic, Old Bulgarian\", \"\\u0469\\u0437\\u044B\\u043A\\u044A \\u0441\\u043B\\u043E\\u0432\\u0463\\u043D\\u044C\\u0441\\u043A\\u044A\", \"cu\", \"chu\", \"chu\"],\n [\"Pali\", \"\\u092A\\u093E\\u0934\\u093F\", \"pi\", \"pli\", \"pli\"],\n [\"Avestan\", \"avesta\", \"ae\", \"ave\", \"ave\"],\n [\"Latin\", \"latine, lingua latina\", \"la\", \"lat\", \"lat\"],\n [\"Armenian\", \"\\u0540\\u0561\\u0575\\u0565\\u0580\\u0565\\u0576\", \"hy\", \"hye\", \"arm\"],\n [\"Swati\", \"SiSwati\", \"ss\", \"ssw\", \"ssw\"],\n [\"Tibetan\", \"\\u0F56\\u0F7C\\u0F51\\u0F0B\\u0F61\\u0F72\\u0F42\", \"bo\", \"bod\", \"tib\"],\n [\"South Ndebele\", \"isiNdebele\", \"nr\", \"nbl\", \"nbl\"],\n [\"Slovene\", \"Slovenski Jezik, Sloven\\u0161\\u010Dina\", \"sl\", \"slv\", \"slv\"],\n [\"Oriya\", \"\\u0B13\\u0B21\\u0B3C\\u0B3F\\u0B06\", \"or\", \"ori\", \"ori\"],\n [\"North Ndebele\", \"isiNdebele\", \"nd\", \"nde\", \"nde\"],\n [\"Nauru\", \"Dorerin Naoero\", \"na\", \"nau\", \"nau\"],\n [\"Maori\", \"te reo M\\u0101ori\", \"mi\", \"mri\", \"mao\"],\n [\"Marathi\", \"\\u092E\\u0930\\u093E\\u0920\\u0940\", \"mr\", \"mar\", \"mar\"],\n [\"Luba-Katanga\", \"Kiluba\", \"lu\", \"lub\", \"lub\"],\n [\"Rundi\", \"Ikirundi\", \"rn\", \"run\", \"run\"],\n [\"Central Khmer\", \"\\u1781\\u17D2\\u1798\\u17C2\\u179A, \\u1781\\u17C1\\u1798\\u179A\\u1797\\u17B6\\u179F\\u17B6, \\u1797\\u17B6\\u179F\\u17B6\\u1781\\u17D2\\u1798\\u17C2\\u179A\", \"km\", \"khm\", \"khm\"],\n [\"Western Frisian\", \"Frysk\", \"fy\", \"fry\", \"fry\"],\n [\"Bengali\", \"\\u09AC\\u09BE\\u0982\\u09B2\\u09BE\", \"bn\", \"ben\", \"ben\"],\n [\"Avaric\", \"\\u0430\\u0432\\u0430\\u0440 \\u043C\\u0430\\u0446\\u04C0, \\u043C\\u0430\\u0433\\u04C0\\u0430\\u0440\\u0443\\u043B \\u043C\\u0430\\u0446\\u04C0\", \"av\", \"ava\", \"ava\"],\n [\"Abkhazian\", \"\\u0430\\u04A7\\u0441\\u0443\\u0430 \\u0431\\u044B\\u0437\\u0448\\u04D9\\u0430, \\u0430\\u04A7\\u0441\\u0448\\u04D9\\u0430\", \"ab\", \"abk\", \"abk\"],\n [\"Afar\", \"Afaraf\", \"aa\", \"aar\", \"aar\"],\n [\"Afrikaans\", \"Afrikaans\", \"af\", \"afr\", \"afr\"],\n [\"Amharic\", \"\\u12A0\\u121B\\u122D\\u129B\", \"am\", \"amh\", \"amh\"],\n [\"Aragonese\", \"aragon\\xE9s\", \"an\", \"arg\", \"arg\"],\n [\"Assamese\", \"\\u0985\\u09B8\\u09AE\\u09C0\\u09AF\\u09BC\\u09BE\", \"as\", \"asm\", \"asm\"],\n [\"Bambara\", \"bamanankan\", \"bm\", \"bam\", \"bam\"],\n [\"Bashkir\", \"\\u0431\\u0430\\u0448\\u04A1\\u043E\\u0440\\u0442 \\u0442\\u0435\\u043B\\u0435\", \"ba\", \"bak\", \"bak\"],\n [\"Basque\", \"euskara, euskera\", \"eu\", \"eus\", \"baq\"],\n [\"Belarusian\", \"\\u0431\\u0435\\u043B\\u0430\\u0440\\u0443\\u0441\\u043A\\u0430\\u044F \\u043C\\u043E\\u0432\\u0430\", \"be\", \"bel\", \"bel\"],\n [\"Bosnian\", \"bosanski jezik\", \"bs\", \"bos\", \"bos\"],\n [\"Breton\", \"brezhoneg\", \"br\", \"bre\", \"bre\"],\n [\"Bulgarian\", \"\\u0431\\u044A\\u043B\\u0433\\u0430\\u0440\\u0441\\u043A\\u0438 \\u0435\\u0437\\u0438\\u043A\", \"bg\", \"bul\", \"bul\"],\n [\"Burmese\", \"\\u1017\\u1019\\u102C\\u1005\\u102C\", \"my\", \"mya\", \"bur\"],\n [\"Catalan, Valencian\", \"catal\\xE0, valenci\\xE0\", \"ca\", \"cat\", \"cat\"],\n [\"Chamorro\", \"Chamoru\", \"ch\", \"cha\", \"cha\"],\n [\"Chechen\", \"\\u043D\\u043E\\u0445\\u0447\\u0438\\u0439\\u043D \\u043C\\u043E\\u0442\\u0442\", \"ce\", \"che\", \"che\"],\n [\"Chichewa, Chewa, Nyanja\", \"chiChe\\u0175a, chinyanja\", \"ny\", \"nya\", \"nya\"],\n [\"Chuvash\", \"\\u0447\\u04D1\\u0432\\u0430\\u0448 \\u0447\\u04D7\\u043B\\u0445\\u0438\", \"cv\", \"chv\", \"chv\"],\n [\"Cornish\", \"Kernewek\", \"kw\", \"cor\", \"cor\"],\n [\"Corsican\", \"corsu, lingua corsa\", \"co\", \"cos\", \"cos\"],\n [\"Croatian\", \"hrvatski jezik\", \"hr\", \"hrv\", \"hrv\"],\n [\"Czech\", \"\\u010De\\u0161tina, \\u010Desk\\xFD jazyk\", \"cs\", \"ces\", \"cze\"],\n [\"Danish\", \"dansk\", \"da\", \"dan\", \"dan\"],\n [\"Divehi, Dhivehi, Maldivian\", \"\\u078B\\u07A8\\u0788\\u07AC\\u0780\\u07A8\", \"dv\", \"div\", \"div\"],\n [\"Dutch, Flemish\", \"Nederlands, Vlaams\", \"nl\", \"nld\", \"dut\"],\n [\"Dzongkha\", \"\\u0F62\\u0FAB\\u0F7C\\u0F44\\u0F0B\\u0F41\", \"dz\", \"dzo\", \"dzo\"],\n [\"English\", \"English\", \"en\", \"eng\", \"eng\"],\n [\"Ewe\", \"E\\u028Begbe\", \"ee\", \"ewe\", \"ewe\"],\n [\"Faroese\", \"f\\xF8royskt\", \"fo\", \"fao\", \"fao\"],\n [\"Fijian\", \"vosa Vakaviti\", \"fj\", \"fij\", \"fij\"],\n [\"Finnish\", \"suomi, suomen kieli\", \"fi\", \"fin\", \"fin\"],\n [\"French\", \"fran\\xE7ais, langue fran\\xE7aise\", \"fr\", \"fra\", \"fre\"],\n [\"Galician\", \"Galego\", \"gl\", \"glg\", \"glg\"],\n [\"Georgian\", \"\\u10E5\\u10D0\\u10E0\\u10D7\\u10E3\\u10DA\\u10D8\", \"ka\", \"kat\", \"geo\"],\n [\"German\", \"Deutsch\", \"de\", \"deu\", \"ger\"],\n [\"Greek (modern)\", \"\\u03B5\\u03BB\\u03BB\\u03B7\\u03BD\\u03B9\\u03BA\\u03AC\", \"el\", \"ell\", \"gre\"],\n [\"Gujarati\", \"\\u0A97\\u0AC1\\u0A9C\\u0AB0\\u0ABE\\u0AA4\\u0AC0\", \"gu\", \"guj\", \"guj\"],\n [\"Haitian, Haitian Creole\", \"Krey\\xF2l ayisyen\", \"ht\", \"hat\", \"hat\"],\n [\"Hausa\", \"(Hausa) \\u0647\\u064E\\u0648\\u064F\\u0633\\u064E\", \"ha\", \"hau\", \"hau\"],\n [\"Herero\", \"Otjiherero\", \"hz\", \"her\", \"her\"],\n [\"Hindi\", \"\\u0939\\u093F\\u0928\\u094D\\u0926\\u0940, \\u0939\\u093F\\u0902\\u0926\\u0940\", \"hi\", \"hin\", \"hin\"],\n [\"Hiri Motu\", \"Hiri Motu\", \"ho\", \"hmo\", \"hmo\"],\n [\"Hungarian\", \"magyar\", \"hu\", \"hun\", \"hun\"],\n [\"Irish\", \"Gaeilge\", \"ga\", \"gle\", \"gle\"],\n [\"Igbo\", \"As\\u1EE5s\\u1EE5 Igbo\", \"ig\", \"ibo\", \"ibo\"],\n [\"Icelandic\", \"\\xCDslenska\", \"is\", \"isl\", \"ice\"],\n [\"Italian\", \"Italiano\", \"it\", \"ita\", \"ita\"],\n [\"Japanese\", \"\\u65E5\\u672C\\u8A9E (\\u306B\\u307B\\u3093\\u3054)\", \"ja\", \"jpn\", \"jpn\"],\n [\"Javanese\", \"\\uA9A7\\uA9B1\\uA997\\uA9AE, Basa Jawa\", \"jv\", \"jav\", \"jav\"],\n [\"Kalaallisut, Greenlandic\", \"kalaallisut, kalaallit oqaasii\", \"kl\", \"kal\", \"kal\"],\n [\"Kannada\", \"\\u0C95\\u0CA8\\u0CCD\\u0CA8\\u0CA1\", \"kn\", \"kan\", \"kan\"],\n [\"Kashmiri\", \"\\u0915\\u0936\\u094D\\u092E\\u0940\\u0930\\u0940, \\u0643\\u0634\\u0645\\u064A\\u0631\\u064A\", \"ks\", \"kas\", \"kas\"],\n [\"Kazakh\", \"\\u049B\\u0430\\u0437\\u0430\\u049B \\u0442\\u0456\\u043B\\u0456\", \"kk\", \"kaz\", \"kaz\"],\n [\"Kikuyu, Gikuyu\", \"G\\u0129k\\u0169y\\u0169\", \"ki\", \"kik\", \"kik\"],\n [\"Kinyarwanda\", \"Ikinyarwanda\", \"rw\", \"kin\", \"kin\"],\n [\"Kirghiz, Kyrgyz\", \"\\u041A\\u044B\\u0440\\u0433\\u044B\\u0437\\u0447\\u0430, \\u041A\\u044B\\u0440\\u0433\\u044B\\u0437 \\u0442\\u0438\\u043B\\u0438\", \"ky\", \"kir\", \"kir\"],\n [\"Korean\", \"\\uD55C\\uAD6D\\uC5B4\", \"ko\", \"kor\", \"kor\"],\n [\"Kuanyama, Kwanyama\", \"Kuanyama\", \"kj\", \"kua\", \"kua\"],\n [\"Luxembourgish, Letzeburgesch\", \"L\\xEBtzebuergesch\", \"lb\", \"ltz\", \"ltz\"],\n [\"Ganda\", \"Luganda\", \"lg\", \"lug\", \"lug\"],\n [\"Limburgan, Limburger, Limburgish\", \"Limburgs\", \"li\", \"lim\", \"lim\"],\n [\"Lingala\", \"Ling\\xE1la\", \"ln\", \"lin\", \"lin\"],\n [\"Lao\", \"\\u0E9E\\u0EB2\\u0EAA\\u0EB2\\u0EA5\\u0EB2\\u0EA7\", \"lo\", \"lao\", \"lao\"],\n [\"Lithuanian\", \"lietuvi\\u0173 kalba\", \"lt\", \"lit\", \"lit\"],\n [\"Manx\", \"Gaelg, Gailck\", \"gv\", \"glv\", \"glv\"],\n [\"Macedonian\", \"\\u043C\\u0430\\u043A\\u0435\\u0434\\u043E\\u043D\\u0441\\u043A\\u0438 \\u0458\\u0430\\u0437\\u0438\\u043A\", \"mk\", \"mkd\", \"mac\"],\n [\"Malayalam\", \"\\u0D2E\\u0D32\\u0D2F\\u0D3E\\u0D33\\u0D02\", \"ml\", \"mal\", \"mal\"],\n [\"Maltese\", \"Malti\", \"mt\", \"mlt\", \"mlt\"],\n [\"Marshallese\", \"Kajin M\\u0327aje\\u013C\", \"mh\", \"mah\", \"mah\"],\n [\"Navajo, Navaho\", \"Din\\xE9 bizaad\", \"nv\", \"nav\", \"nav\"],\n [\"Nepali\", \"\\u0928\\u0947\\u092A\\u093E\\u0932\\u0940\", \"ne\", \"nep\", \"nep\"],\n [\"Ndonga\", \"Owambo\", \"ng\", \"ndo\", \"ndo\"],\n [\"Occitan\", \"occitan, lenga d'\\xF2c\", \"oc\", \"oci\", \"oci\"],\n [\"Ossetian, Ossetic\", \"\\u0438\\u0440\\u043E\\u043D \\xE6\\u0432\\u0437\\u0430\\u0433\", \"os\", \"oss\", \"oss\"],\n [\"Panjabi, Punjabi\", \"\\u0A2A\\u0A70\\u0A1C\\u0A3E\\u0A2C\\u0A40\", \"pa\", \"pan\", \"pan\"],\n [\"Polish\", \"j\\u0119zyk polski, polszczyzna\", \"pl\", \"pol\", \"pol\"],\n [\"Portuguese\", \"Portugu\\xEAs\", \"pt\", \"por\", \"por\"],\n [\"Romansh\", \"Rumantsch Grischun\", \"rm\", \"roh\", \"roh\"],\n [\"Russian\", \"\\u0440\\u0443\\u0441\\u0441\\u043A\\u0438\\u0439\", \"ru\", \"rus\", \"rus\"],\n [\"Sindhi\", \"\\u0938\\u093F\\u0928\\u094D\\u0927\\u0940, \\u0633\\u0646\\u068C\\u064A\\u060C \\u0633\\u0646\\u062F\\u06BE\\u06CC\", \"sd\", \"snd\", \"snd\"],\n [\"Northern Sami\", \"Davvis\\xE1megiella\", \"se\", \"sme\", \"sme\"],\n [\"Samoan\", \"gagana fa'a Samoa\", \"sm\", \"smo\", \"smo\"],\n [\"Sango\", \"y\\xE2ng\\xE2 t\\xEE s\\xE4ng\\xF6\", \"sg\", \"sag\", \"sag\"],\n [\"Gaelic, Scottish Gaelic\", \"G\\xE0idhlig\", \"gd\", \"gla\", \"gla\"],\n [\"Shona\", \"chiShona\", \"sn\", \"sna\", \"sna\"],\n [\"Sinhala, Sinhalese\", \"\\u0DC3\\u0DD2\\u0D82\\u0DC4\\u0DBD\", \"si\", \"sin\", \"sin\"],\n [\"Slovak\", \"Sloven\\u010Dina, Slovensk\\xFD Jazyk\", \"sk\", \"slk\", \"slo\"],\n [\"Somali\", \"Soomaaliga, af Soomaali\", \"so\", \"som\", \"som\"],\n [\"Southern Sotho\", \"Sesotho\", \"st\", \"sot\", \"sot\"],\n [\"Spanish, Castilian\", \"Espa\\xF1ol\", \"es\", \"spa\", \"spa\"],\n [\"Sundanese\", \"Basa Sunda\", \"su\", \"sun\", \"sun\"],\n [\"Swedish\", \"Svenska\", \"sv\", \"swe\", \"swe\"],\n [\"Tamil\", \"\\u0BA4\\u0BAE\\u0BBF\\u0BB4\\u0BCD\", \"ta\", \"tam\", \"tam\"],\n [\"Telugu\", \"\\u0C24\\u0C46\\u0C32\\u0C41\\u0C17\\u0C41\", \"te\", \"tel\", \"tel\"],\n [\"Tajik\", \"\\u0442\\u043E\\u04B7\\u0438\\u043A\\u04E3, to\\xE7ik\\u012B, \\u062A\\u0627\\u062C\\u06CC\\u06A9\\u06CC\", \"tg\", \"tgk\", \"tgk\"],\n [\"Thai\", \"\\u0E44\\u0E17\\u0E22\", \"th\", \"tha\", \"tha\"],\n [\"Tigrinya\", \"\\u1275\\u130D\\u122D\\u129B\", \"ti\", \"tir\", \"tir\"],\n [\"Turkmen\", \"T\\xFCrkmen, \\u0422\\u04AF\\u0440\\u043A\\u043C\\u0435\\u043D\", \"tk\", \"tuk\", \"tuk\"],\n [\"Tswana\", \"Setswana\", \"tn\", \"tsn\", \"tsn\"],\n [\"Tongan (Tonga Islands)\", \"Faka Tonga\", \"to\", \"ton\", \"ton\"],\n [\"Turkish\", \"T\\xFCrk\\xE7e\", \"tr\", \"tur\", \"tur\"],\n [\"Tsonga\", \"Xitsonga\", \"ts\", \"tso\", \"tso\"],\n [\"Tatar\", \"\\u0442\\u0430\\u0442\\u0430\\u0440 \\u0442\\u0435\\u043B\\u0435, tatar tele\", \"tt\", \"tat\", \"tat\"],\n [\"Uighur, Uyghur\", \"\\u0626\\u06C7\\u064A\\u063A\\u06C7\\u0631\\u0686\\u06D5, Uyghurche\", \"ug\", \"uig\", \"uig\"],\n [\"Ukrainian\", \"\\u0423\\u043A\\u0440\\u0430\\u0457\\u043D\\u0441\\u044C\\u043A\\u0430\", \"uk\", \"ukr\", \"ukr\"],\n [\"Urdu\", \"\\u0627\\u0631\\u062F\\u0648\", \"ur\", \"urd\", \"urd\"],\n [\"Venda\", \"Tshiven\\u1E13a\", \"ve\", \"ven\", \"ven\"],\n [\"Vietnamese\", \"Ti\\u1EBFng Vi\\u1EC7t\", \"vi\", \"vie\", \"vie\"],\n [\"Walloon\", \"Walon\", \"wa\", \"wln\", \"wln\"],\n [\"Welsh\", \"Cymraeg\", \"cy\", \"cym\", \"wel\"],\n [\"Wolof\", \"Wollof\", \"wo\", \"wol\", \"wol\"],\n [\"Xhosa\", \"isiXhosa\", \"xh\", \"xho\", \"xho\"],\n [\"Yoruba\", \"Yor\\xF9b\\xE1\", \"yo\", \"yor\", \"yor\"],\n [\"Zulu\", \"isiZulu\", \"zu\", \"zul\", \"zul\"]\n];\n\n// src/index.ts\nvar codes = [];\nvar by639_1 = {};\nvar by639_2T = {};\nvar by639_2B = {};\ndata_default.forEach((row) => {\n var code = {\n name: row[0],\n nativeName: row[1],\n iso639_1: row[2],\n iso639_2T: row[3],\n iso639_2B: row[4]\n };\n by639_1[row[2]] = by639_2T[row[3]] = by639_2B[row[4]] = code;\n codes.push(code);\n});\nvar src_default = codes;\nexport {\n by639_1,\n by639_2B,\n by639_2T,\n codes,\n src_default as default\n};\n//# sourceMappingURL=index.mjs.map","// @ts-check\nimport langs from 'iso-language-codes';\n\n/** @type {{[lang: string]: string}} */\n// Handle odd one-off language pairs that might show up over time\nconst specialLangs = {\n \"zh-hans\": \"中文 (Zhōngwén)\",\n};\n\n/**\n * @typedef {string} ISO6391\n * Language code in ISO 639-1 format. e.g. en, fr, zh\n **/\n\n/**\n * @param {string} language in some format\n * @return {ISO6391?}\n */\nexport function toISO6391(language) {\n if (!language) return null;\n language = language.toLocaleLowerCase();\n if (specialLangs[language]) {\n return language;\n }\n const codeObj = (\n findLanguage(language, ['iso639_1']) ||\n findLanguage(language, ['iso639_2T']) ||\n findLanguage(language, ['iso639_2B', 'name', 'nativeName'])\n );\n if (codeObj) return codeObj.iso639_1;\n return null;\n}\n\n/**\n *\n * @param {string} language\n * @returns {string | null}\n */\nexport function toNativeName(language) {\n if (!language) return null;\n language = language.toLocaleLowerCase();\n if (specialLangs[language]) {\n return specialLangs[language];\n }\n const codeObj = (\n findLanguage(language, ['iso639_1']) ||\n findLanguage(language, ['iso639_2T']) ||\n findLanguage(language, ['iso639_2B', 'name', 'nativeName'])\n );\n if (codeObj?.nativeName) return codeObj.nativeName.split(\", \")[0];\n return null;\n}\n\n/** @typedef {import('iso-language-codes').Code} Code */\n\n/**\n * @param {string} language\n * @param {Array<'iso639_1' | 'iso639_2T' | 'iso639_2B' | 'nativeName' | 'name'>} fields\n * @returns {Code | null}\n */\nfunction findLanguage(language, fields) {\n if (!language) return null;\n language = language.toLowerCase();\n for (const lang of langs) {\n for (const codeType of fields) {\n if (lang[codeType]?.toLowerCase().split(\", \").includes(language)) {\n return lang;\n }\n }\n }\n return null;\n}\n\n/**\n * Checks whether the current browser supports localStorage or\n * if the current context has access to it.\n * @return {boolean}\n */\nexport function hasLocalStorage() {\n try {\n return !!window.localStorage;\n } catch (e) {\n // Will throw in sandboxed iframe\n // DOMException: Window.localStorage getter: Forbidden in a sandboxed document without the 'allow-same-origin' flag.\n return false;\n }\n}\n\nexport const DEBUG_READ_ALOUD = location.toString().indexOf('_debugReadAloud=true') != -1;\n\nexport async function checkIfFiresPause() {\n // Pick some random text so that if it accidentally speaks, it's not too annoying\n const u = new SpeechSynthesisUtterance(\"Loading\");\n let calledPause = false;\n u.addEventListener('pause', () => calledPause = true);\n speechSynthesis.speak(u);\n await new Promise(res => setTimeout(res, 10));\n speechSynthesis.pause();\n return calledPause;\n}\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlagsDetection = require('../internals/regexp-flags-detection');\nvar regExpFlagsGetterImplementation = require('../internals/regexp-flags');\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (DESCRIPTORS && !regExpFlagsDetection.correct) {\n defineBuiltInAccessor(RegExp.prototype, 'flags', {\n configurable: true,\n get: regExpFlagsGetterImplementation\n });\n\n regExpFlagsDetection.correct = true;\n}\n","'use strict';\n/* eslint-disable es/no-string-prototype-matchall -- safe */\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar isRegExp = require('../internals/is-regexp');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar getMethod = require('../internals/get-method');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar InternalStateModule = require('../internals/internal-state');\nvar IS_PURE = require('../internals/is-pure');\n\nvar MATCH_ALL = wellKnownSymbol('matchAll');\nvar REGEXP_STRING = 'RegExp String';\nvar REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);\nvar RegExpPrototype = RegExp.prototype;\nvar $TypeError = TypeError;\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar nativeMatchAll = uncurryThis(''.matchAll);\n\nvar WORKS_WITH_NON_GLOBAL_REGEX = !!nativeMatchAll && !fails(function () {\n nativeMatchAll('a', /./);\n});\n\nvar $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {\n setInternalState(this, {\n type: REGEXP_STRING_ITERATOR,\n regexp: regexp,\n string: string,\n global: $global,\n unicode: fullUnicode,\n done: false\n });\n}, REGEXP_STRING, function next() {\n var state = getInternalState(this);\n if (state.done) return createIterResultObject(undefined, true);\n var R = state.regexp;\n var S = state.string;\n var match = regExpExec(R, S);\n if (match === null) {\n state.done = true;\n return createIterResultObject(undefined, true);\n }\n if (state.global) {\n if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);\n return createIterResultObject(match, false);\n }\n state.done = true;\n return createIterResultObject(match, false);\n});\n\nvar $matchAll = function (string) {\n var R = anObject(this);\n var S = toString(string);\n var C = speciesConstructor(R, RegExp);\n var flags = toString(getRegExpFlags(R));\n var matcher, $global, fullUnicode;\n matcher = new C(C === RegExp ? R.source : R, flags);\n $global = !!~stringIndexOf(flags, 'g');\n fullUnicode = !!~stringIndexOf(flags, 'u') || !!~stringIndexOf(flags, 'v');\n matcher.lastIndex = toLength(R.lastIndex);\n return new $RegExpStringIterator(matcher, S, $global, fullUnicode);\n};\n\n// `String.prototype.matchAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.matchall\n$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {\n matchAll: function matchAll(regexp) {\n var O = requireObjectCoercible(this);\n var flags, S, matcher, rx;\n if (isObject(regexp)) {\n if (isRegExp(regexp)) {\n flags = toString(requireObjectCoercible(getRegExpFlags(regexp)));\n if (!~stringIndexOf(flags, 'g')) throw new $TypeError('`.matchAll` does not allow non-global regexes');\n }\n if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);\n matcher = getMethod(regexp, MATCH_ALL);\n if (matcher === undefined && IS_PURE && classof(regexp) === 'RegExp') matcher = $matchAll;\n if (matcher) return call(matcher, regexp, O);\n } else if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);\n S = toString(O);\n rx = new RegExp(regexp, 'g');\n return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);\n }\n});\n\nIS_PURE || MATCH_ALL in RegExpPrototype || defineBuiltIn(RegExpPrototype, MATCH_ALL, $matchAll);\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toObject = require('../internals/to-object');\nvar toString = require('../internals/to-string');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar push = uncurryThis([].push);\nvar join = uncurryThis([].join);\n\n// `String.raw` method\n// https://tc39.es/ecma262/#sec-string.raw\n$({ target: 'String', stat: true }, {\n raw: function raw(template) {\n var rawTemplate = toIndexedObject(toObject(template).raw);\n var literalSegments = lengthOfArrayLike(rawTemplate);\n if (!literalSegments) return '';\n var argumentsLength = arguments.length;\n var elements = [];\n var i = 0;\n while (true) {\n push(elements, toString(rawTemplate[i++]));\n if (i === literalSegments) return join(elements, '');\n if (i < argumentsLength) push(elements, toString(arguments[i]));\n }\n }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nrequire('../modules/es.string.match-all');\n","// @ts-check\n/**\n * Like `Selection.isCollapsed`, but checks the ranges too. WebKit reports\n * `isCollapsed` as true for any selection inside a shadow root, even when\n * it has text.\n * https://bugs.webkit.org/show_bug.cgi?id=281587\n * @param {Selection} selection\n * @returns {boolean}\n */\nexport function isSelectionCollapsed(selection) {\n if (!selection.isCollapsed) return false;\n for (let i = 0; i < selection.rangeCount; i++) {\n if (!selection.getRangeAt(i).collapsed) return false;\n }\n return true;\n}\n\nexport class SelectionObserver {\n selecting = false;\n startedInSelector = false;\n /** @type {HTMLElement} */\n target = null;\n /** @type {Node | null} */\n lastKnownFocusNode = null;\n\n /**\n * @param {string} selector\n * @param {function('started' | 'cleared' | 'changed', HTMLElement): any} handler\n */\n constructor(selector, handler) {\n this.selector = selector;\n this.handler = handler;\n }\n\n attach() {\n // We can't just use selectstart, because safari on iOS just\n // randomly decides when to fire it 😤\n // document.addEventListener(\"selectstart\", this._onSelectStart);\n // This has to be on document :/\n document.addEventListener(\"selectionchange\", this._onSelectionChange);\n }\n\n detach() {\n document.removeEventListener(\"selectionchange\", this._onSelectionChange);\n }\n\n _onSelectionChange = () => {\n const sel = window.getSelection();\n if (!sel) return;\n const isCollapsed = isSelectionCollapsed(sel);\n\n if (!this.selecting && sel.toString()) {\n const target = $(sel.anchorNode).closest(this.selector)[0];\n if (!target) return;\n this.target = target;\n this.selecting = true;\n this.lastKnownFocusNode = sel.focusNode;\n this.handler('started', this.target);\n }\n\n if (this.selecting && this.lastKnownFocusNode != sel.focusNode && sel.toString() && !isCollapsed) {\n this.lastKnownFocusNode = sel.focusNode;\n this.handler('changed', this.target);\n }\n\n if (this.selecting && (isCollapsed || !sel.toString() || !$(sel.anchorNode).closest(this.selector)[0])) {\n this.selecting = false;\n this.lastKnownFocusNode = null;\n this.handler('cleared', this.target);\n }\n };\n}\n","// @ts-check\nimport { countWords } from './strings.js';\nimport { SelectionObserver } from \"../BookReader/utils/SelectionObserver.js\";\nimport { clamp } from \"../BookReader/utils.js\";\nimport { html, LitElement } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport '@internetarchive/icon-share';\nimport '@internetarchive/icon-edit-pencil/icon-edit-pencil.js';\nimport '@internetarchive/icon-ellipses';\nimport { isIOS, isAndroid } from './browserSniffing.js';\nimport { genAt, genFilter } from './generators.js';\n\nconst BR_HIGHLIGHTS_LOCAL_STORAGE_KEY = \"BRhighlightStorage\";\nconst MAX_FULL_QUOTE_URL_CHARS = 80;\nconst TRUNCATED_QUOTE_WORD_COUNT = 3;\n\nexport class TextSelectionManager {\n options = {\n // Current Translation plugin implementation does not have words, will limit to one BRlineElement for now\n maxProtectedWords: 200,\n }\n\n /** @type {BRSelectMenu} */\n selectMenu;\n\n get selectMenuEnabled() {\n return this.br.plugins.experiments?.isEnabled('copyLinkToHighlight') || this.br.plugins.experiments?.isEnabled('annotateHighlight');\n }\n\n /**\n * @param {string} layer Selector for the text layer to manage\n * @param {import('../BookReader.js').default} br\n * @param {Object} options\n * @param {string[]} options.selectionElement CSS selector for elements that count as \"words\" for selection limiting\n * @param {number} [maxWords] Maximum number of words allowed to be selected\n */\n constructor (layer, br, { selectionElement }, maxWords) {\n /** @type {string} */\n this.layer = layer;\n /** @type {import('../BookReader.js').default} */\n this.br = br;\n /** @type {string[]} */\n this.selectionElement = selectionElement;\n this.selectionObserver = new SelectionObserver(this.layer, this._onSelectionChange);\n this.options.maxProtectedWords = maxWords ? maxWords : 200;\n\n this.selectMenu = new BRSelectMenu(br);\n this.selectMenu.className = \"br-select-menu__root\";\n }\n\n init() {\n this.attach();\n new SelectionObserver(this.layer, (selectEvent) => {\n // Track how often selection is used\n if (selectEvent == 'started') {\n this.br.plugins.archiveAnalytics?.sendEvent('BookReader', 'SelectStart');\n\n // Set a class on the page to avoid hiding it when zooming/etc\n this.br.refs.$br.find('.BRpagecontainer--hasSelection').removeClass('BRpagecontainer--hasSelection');\n $(window.getSelection().anchorNode).closest('.BRpagecontainer').addClass('BRpagecontainer--hasSelection');\n // Don't show while still doing selection\n if (!this.mouseIsDown) this.showSelectMenu();\n }\n\n if (selectEvent == 'changed') {\n if (!this.mouseIsDown && window.getSelection()?.toString()) {\n this.showSelectMenu();\n }\n }\n\n if (selectEvent == 'cleared') {\n this.hideSelectMenu();\n }\n }).attach();\n }\n\n // Need attach + detach methods to toggle w/ Translation plugin\n attach() {\n this.selectionObserver.attach();\n\n if (this.br.protected) {\n document.addEventListener('selectionchange', this._limitSelection);\n // Prevent right clicking when selected text\n $(document.body).on('contextmenu dragstart copy', (e) => {\n const selection = document.getSelection();\n if (selection?.toString()) {\n const intersectsTextLayer = $(this.layer)\n .toArray()\n .some(el => selection.containsNode(el, true));\n if (intersectsTextLayer) {\n e.preventDefault();\n return false;\n }\n }\n });\n }\n }\n\n detach() {\n this.selectionObserver.detach();\n if (this.br.protected) {\n document.removeEventListener('selectionchange', this._limitSelection);\n }\n }\n\n /**\n * @param {'started' | 'cleared' | 'changed'} type\n * @param {HTMLElement} target\n */\n _onSelectionChange = (type, target) => {\n if (type === 'started') {\n this.textSelectingMode(target);\n } else if (type === 'cleared') {\n this.defaultMode(target);\n } else if (type === 'changed') {\n // do nothing, just wait for the mouseup to trigger the styling change\n } else {\n throw new Error(`Unknown type ${type}`);\n }\n }\n\n /**\n * Intercept copied text to remove any styling applied to it\n * @param {JQuery} $container\n */\n interceptCopy ($container) {\n $container[0].addEventListener('copy', (event) => {\n const selection = document.getSelection();\n event.clipboardData.setData('text/plain', selection.toString());\n event.preventDefault();\n });\n }\n\n /**\n * Initializes text selection modes if there is a text layer on the page\n * @param {JQuery} $container\n */\n stopPageFlip($container) {\n /** @type {JQuery<HTMLElement>} */\n const $textLayer = $container.find(this.layer);\n if (!$textLayer.length) return;\n $textLayer.each((i, s) => this.defaultMode(s));\n if (!this.br.protected) {\n this.interceptCopy($container);\n }\n }\n\n /**\n * Applies mouse events when in default mode\n * @param {HTMLElement} textLayer\n */\n defaultMode (textLayer) {\n const $pageContainer = $(textLayer).closest('.BRpagecontainer');\n textLayer.style.pointerEvents = \"none\";\n $pageContainer.find(\"img\").css(\"pointer-events\", \"auto\");\n\n $(textLayer).off(\".textSelectPluginHandler\");\n const startedMouseDown = this.mouseIsDown;\n let skipNextMouseup = this.mouseIsDown;\n if (startedMouseDown) {\n textLayer.style.pointerEvents = \"auto\";\n }\n\n // Need to stop propagation to prevent DragScrollable from\n // blocking selection\n $(textLayer).on(\"mousedown.textSelectPluginHandler\", (event) => {\n this.mouseIsDown = true;\n if ($(event.target).is(this.selectionElement.join(\", \"))) {\n event.stopPropagation();\n }\n });\n\n $(textLayer).on(\"mouseup.textSelectPluginHandler\", (event) => {\n this.mouseIsDown = false;\n textLayer.style.pointerEvents = \"none\";\n if (skipNextMouseup) {\n skipNextMouseup = false;\n event.stopPropagation();\n }\n });\n }\n\n /**\n * This mode is active while there is a selection on the given textLayer\n * @param {HTMLElement} textLayer\n */\n textSelectingMode(textLayer) {\n const $pageContainer = $(textLayer).closest('.BRpagecontainer');\n // Make text layer consume all events\n textLayer.style.pointerEvents = \"all\";\n // Block img from getting long-press to save while selecting\n $pageContainer.find(\"img\").css(\"pointer-events\", \"none\");\n\n $(textLayer).off(\".textSelectPluginHandler\");\n\n $(textLayer).on(\"mousedown.textSelectPluginHandler\", (event) => {\n if (event.which != 1) return;\n this.mouseIsDown = true;\n event.stopPropagation();\n });\n\n // Prevent page flip on click\n $(textLayer).on('mouseup.textSelectPluginHandler', (event) => {\n this.mouseIsDown = false;\n if (event.which != 1) return;\n event.stopPropagation();\n this.showSelectMenu();\n });\n }\n\n showSelectMenu() {\n if (!this.selectMenuEnabled) return;\n\n this.selectMenu.copyLinkToHighlightEnabled = this.br.plugins.experiments.isEnabled('copyLinkToHighlight');\n this.selectMenu.highlightAnnotationEnabled = this.br.plugins.experiments.isEnabled('annotateHighlight');\n\n if (!this.selectMenu.isConnected) {\n document.body.append(this.selectMenu);\n }\n\n if (this.selectMenu.open) {\n this.selectMenu.repositionToSelection();\n } else {\n this.selectMenu.show();\n }\n }\n\n hideSelectMenu() {\n this.selectMenu.hide();\n }\n\n _limitSelection = () => {\n const selection = window.getSelection();\n if (!selection.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n\n // Check if range.startContainer is inside the sub-tree of .BRContainer\n const startInBr = !!range.startContainer.parentElement.closest('.BRcontainer');\n const endInBr = !!range.endContainer.parentElement.closest('.BRcontainer');\n if (!startInBr && !endInBr) return;\n if (!startInBr || !endInBr) {\n // weird case, just clear the selection\n selection.removeAllRanges();\n return;\n }\n\n // Find the last allowed word in the selection\n const lastAllowedWord = genAt(\n genFilter(\n treeWalkRange(range, 'element'),\n (node) => node.classList.contains(\n this.selectionElement[0].replace(\".\", \"\"),\n ),\n ),\n this.options.maxProtectedWords - 1,\n );\n\n if (!lastAllowedWord || range.endContainer.parentNode == lastAllowedWord) return;\n\n const newRange = document.createRange();\n newRange.setStart(range.startContainer, range.startOffset);\n newRange.setEnd(lastAllowedWord.firstChild, lastAllowedWord.textContent.length);\n\n selection.removeAllRanges();\n selection.addRange(newRange);\n };\n}\n\n/**\n * @overload\n * @param {Range} range\n * @param {'text'} filter\n * @returns {Generator<Text>}\n */\n/**\n * @overload\n * @param {Range} range\n * @param {'element'} filter\n * @returns {Generator<Element>}\n */\n/**\n * @overload\n * @param {Range} range\n * @param {'text+element'} [filter]\n * @returns {Generator<Text | Element>}\n */\n/**\n * Depth traverse the DOM tree starting at `start`, and ending at `end`.\n * @param {Range} range\n * @param {'text' | 'element' | 'text+element'} [filter]\n * @returns {Generator<Node>}\n */\nexport function* treeWalkRange(range, filter = 'text+element') {\n const start = range.startContainer;\n const end = range.endContainer;\n let done = false;\n\n /**\n * @param {Node} node\n */\n const passesFilter = node => {\n return (\n (filter === 'text' && node.nodeType === Node.TEXT_NODE) ||\n (filter === 'element' && node.nodeType === Node.ELEMENT_NODE) ||\n (filter === 'text+element')\n );\n };\n\n /**\n * @param {Node} node\n * @returns {Generator<Node>}\n */\n function* walk(node, {children = true, parents = true, siblings = true} = {}) {\n if (node === end) {\n done = true;\n if (passesFilter(node)) yield node;\n return;\n }\n\n // yield self\n if (passesFilter(node)) yield node;\n\n // First iterate children (depth-first traversal)\n if (children && node.firstChild) {\n yield* walk(node.firstChild, {children: true, parents: false, siblings: true});\n if (done) return;\n }\n\n // Then iterate siblings\n if (siblings) {\n for (let sib = node.nextSibling; sib; sib = sib.nextSibling) {\n yield* walk(sib, {children: true, parents: false, siblings: false});\n if (done) return;\n }\n }\n\n // Finally, move up the tree\n if (parents && node.parentNode) {\n yield* walk(node.parentNode, {children: false, parents: true, siblings: true});\n if (done) return;\n }\n }\n\n yield* walk(start);\n}\n\n@customElement('br-menu-option')\nexport class BRSelectMenuOption extends LitElement {\n @property({type: String})\n icon = '';\n\n @property({type: String})\n label = '';\n\n /** @type {string | null} */\n temporaryText = null;\n\n @property({type: Number, attribute: 'temporary-text-duration'})\n temporaryTextDuration = 1200;\n\n @property({type: String, attribute: 'aria-label'})\n ariaLabel = '';\n\n @property({type: Boolean, attribute: 'live-label'})\n liveLabel = false;\n\n @property({type: Boolean})\n temporaryTextVisible = false;\n\n /** @type {number | null} */\n temporaryTextTimeoutId = null;\n\n /** @override */\n createRenderRoot() {\n // Keep styles from existing stylesheet by opting out of shadow DOM\n return this;\n }\n\n /** @override */\n disconnectedCallback() {\n if (this.temporaryTextTimeoutId != null) {\n window.clearTimeout(this.temporaryTextTimeoutId);\n this.temporaryTextTimeoutId = null;\n }\n super.disconnectedCallback();\n }\n\n /**\n * @param {string} text\n */\n showTemporaryText(text) {\n if (!text?.trim()) return;\n\n this.temporaryText = text;\n\n this.temporaryTextVisible = true;\n if (this.temporaryTextTimeoutId != null) {\n window.clearTimeout(this.temporaryTextTimeoutId);\n }\n this.temporaryTextTimeoutId = window.setTimeout(() => {\n this.temporaryTextVisible = false;\n this.temporaryText = null;\n this.temporaryTextTimeoutId = null;\n }, this.temporaryTextDuration);\n }\n\n renderIcon() {\n if (this.icon === 'share') {\n return html`<ia-icon-share class=\"br-select-menu__icon\" aria-hidden=\"true\"></ia-icon-share>`;\n }\n if (this.icon === 'edit-pencil') {\n return html`<ia-icon-edit-pencil class=\"br-select-menu__icon\" aria-hidden=\"true\"></ia-icon-edit-pencil>`;\n }\n if (this.icon === 'ellipses') {\n return html`<ia-icon-ellipses class=\"br-select-menu__icon\" aria-hidden=\"true\"></ia-icon-ellipses>`;\n }\n return '';\n }\n\n render() {\n const baseLabel = this.label ?? '';\n const hasTemporaryText = !!this.temporaryText;\n const temporaryLabel = hasTemporaryText ? this.temporaryText : baseLabel;\n const showTemporaryLabel = hasTemporaryText && this.temporaryTextVisible;\n const visibleLabel = showTemporaryLabel ? temporaryLabel : baseLabel;\n const providedAriaLabel = this.ariaLabel?.trim();\n const accessibleLabel = providedAriaLabel && providedAriaLabel !== visibleLabel.trim() ? providedAriaLabel : undefined;\n const sizingLabel = baseLabel.length >= temporaryLabel.length ? baseLabel : temporaryLabel;\n\n return html`\n <button\n type=\"button\"\n class=\"br-select-menu__option\"\n role=\"menuitem\"\n aria-label=${ifDefined(accessibleLabel)}\n >\n ${this.renderIcon()}\n ${\n !hasTemporaryText && !baseLabel ? '' :\n hasTemporaryText ? html`\n <span class=\"br-select-menu__label-wrap\" style=\"display: inline-flex; position: relative; align-items: center;\">\n <span\n class=\"br-select-menu__label\"\n style=\"visibility: hidden;\"\n aria-hidden=\"true\"\n >${sizingLabel}</span>\n <span\n class=\"br-select-menu__label\"\n style=\"position: absolute; inset: 0; display: inline-flex; align-items: center;\"\n aria-live=${this.liveLabel ? 'polite' : 'off'}\n >${showTemporaryLabel ? temporaryLabel : baseLabel}</span>\n </span>\n ` : html`\n <span class=\"br-select-menu__label\" aria-live=${this.liveLabel ? 'polite' : 'off'}>${baseLabel}</span>\n `}\n </button>\n `;\n }\n}\n\n@customElement('br-select-menu')\nclass BRSelectMenu extends LitElement {\n /** @type {import('../BookReader.js').default} */\n br;\n\n /** @type {boolean} */\n @property({type: Boolean, reflect: true})\n showExtended = false;\n\n /** @type {BRSelectMenuOption | null} */\n @query('#br-select-copy-link-option')\n copyLinkOption;\n\n @property({type: Boolean, reflect: true})\n open = false;\n\n @property({type: Boolean})\n copyLinkToHighlightEnabled = true;\n\n @property({type: Boolean})\n highlightAnnotationEnabled = true;\n\n /**\n * @param {import('../BookReader.js').default} br\n */\n constructor(br) {\n super();\n this.br = br;\n }\n\n /** @override */\n createRenderRoot() {\n // Disable shadow DOM; that would require a huge rejiggering of CSS\n return this;\n }\n\n /** @type {number | null} */\n _scrollTimeoutId = null;\n\n _onScroll = () => {\n this.classList.add('br-select-menu__root--scrolling');\n if (this._scrollTimeoutId != null) clearTimeout(this._scrollTimeoutId);\n this._scrollTimeoutId = window.setTimeout(() => {\n this._scrollTimeoutId = null;\n this.repositionToSelection();\n this.classList.remove('br-select-menu__root--scrolling');\n }, 150);\n };\n\n /** @override */\n connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'menu');\n this.setAttribute('aria-label', 'Text selection actions');\n this.setAttribute('aria-orientation', 'vertical');\n }\n\n /** @override */\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener('scroll', this._onScroll, { capture: true });\n if (this._scrollTimeoutId != null) {\n clearTimeout(this._scrollTimeoutId);\n this._scrollTimeoutId = null;\n }\n }\n\n renderCopyLinkToHighlightOption() {\n // Mousedown needed to prevent selection from being cleared on iOS\n return html`\n <br-menu-option\n id=\"br-select-copy-link-option\"\n @mousedown=${/** @param {MouseEvent} e */ (e) => e.preventDefault()}\n @click=${this.handleCopyLinkToHighlight}\n icon=\"share\"\n label=\"Copy Link to Highlight\"\n live-label\n ></br-menu-option>\n `;\n }\n\n renderRemoveOption() {\n return html`\n <br-menu-option\n @click=${this.handleDeleteHighlight}\n icon=\"share\"\n label=\"Delete Highlight and Annotation\"\n ></br-menu-option>\n `;\n }\n\n renderAddAnnotationOption() {\n return html`\n <br-menu-option\n @click=${this.handleAddAnnotation}\n icon=\"edit-pencil\"\n label=\"Annotate\"\n ></br-menu-option>\n `;\n }\n\n renderHighlightOption() {\n return html`\n <br-menu-option\n @click=${this.handleHighlightSave}\n icon=\"edit-pencil\"\n label=\"Highlight Selection\"\n ></br-menu-option>\n `;\n }\n\n renderShowMoreOption() {\n return html`\n <br-menu-option\n id=\"br-select-more\"\n @mousedown=${/** @param {MouseEvent} e */ (e) => e.preventDefault()}\n @click=${this.toggleExtendedMenu}\n icon=\"ellipses\"\n aria-label=\"Show more options\"\n ></br-menu-option>\n `;\n }\n\n renderLocalStorageOptions() {\n return html`\n <br-menu-option\n @click=${this.renderSavedHighlights}\n icon=\"share\"\n label=\"Load Highlights\"\n ></br-menu-option>\n <br-menu-option\n @click=${() => {window.localStorage.removeItem(BR_HIGHLIGHTS_LOCAL_STORAGE_KEY);}}\n icon=\"share\"\n label=\"Remove Stored Highlights\"\n ></br-menu-option>`;\n }\n\n renderDefaultOptions() {\n return html`\n ${this.copyLinkToHighlightEnabled ? this.renderCopyLinkToHighlightOption() : ''}\n ${this.highlightAnnotationEnabled && !this.nodesForRemoval ? this.renderHighlightOption() : ''}\n ${this.nodesForRemoval ? this.renderRemoveOption() : ''}\n `;\n }\n\n renderExtendedOptions() {\n return html`\n ${this.renderDefaultOptions()}\n ${this.renderLocalStorageOptions()}\n `;\n }\n\n render() {\n const hasMoreOptions = this.br.plugins.experiments?.isEnabled('annotateHighlight');\n // TODO change the second button to use a different icon\n return html`\n ${this.showExtended ? this.renderExtendedOptions() : this.renderDefaultOptions()}\n ${!this.showExtended && hasMoreOptions ? this.renderShowMoreOption() : \"\"}\n `;\n }\n\n /**\n * @param {MouseEvent} e\n */\n async handleCopyLinkToHighlight(e) {\n e.preventDefault();\n const currentSelection = /** @type {Selection} */ (window.getSelection());\n const range = currentSelection.getRangeAt(0);\n const textLayer = this.getNodeTextLayer(range.startContainer);\n if (!textLayer) {\n console.warn(\"No text layer found for selection\");\n return;\n }\n const textFragment = BookReaderTextFragment.fromSelection(currentSelection, [textLayer]);\n const linkToHighlight = textFragment.toUrl();\n\n await navigator.clipboard.writeText(linkToHighlight);\n this.copyLinkOption?.showTemporaryText('Copied!');\n this.br.trigger('copyLinkToHighlight', { textFragment, link: linkToHighlight });\n }\n\n /**\n * @param {MouseEvent} e\n */\n toggleExtendedMenu(e) {\n e.preventDefault();\n this.showExtended = !this.showExtended;\n }\n\n /**\n * Returns the closest BRtextLayer element on the page that contains the target node\n * @param {Node} node\n * @returns {Element | null}\n */\n getNodeTextLayer(node) {\n if (!node) return null;\n const element = node instanceof Element ? node : node.parentElement;\n return element?.closest('.BRtextLayer') ?? null;\n }\n\n /**\n * Retrieves the current selected text on the page and serializes the quote contents + context\n * The selection is also changed in the DOM to highlight the words\n */\n handleHighlightSave() {\n const currentSelection = window.getSelection();\n const start = currentSelection.direction === 'backward' ? currentSelection.focusNode.parentElement : currentSelection.anchorNode.parentElement;\n const textLayer = this.getNodeTextLayer(start);\n const highlight = BookReaderTextFragment.fromSelection(currentSelection, [textLayer.parentElement]);\n highlight.uuid = `id-${crypto.randomUUID().split(\"-\")[4]}`;\n const highlights = this.loadHighlightsFromLocalStorage();\n highlights.push(highlight);\n this.saveToLocalStorage(highlights);\n this.renderSavedHighlights();\n }\n\n handleAddAnnotation(e) {\n // TODO\n }\n\n handleDeleteHighlight() {\n if (this.nodesForRemoval) {\n const uuid = retrieveUUID(this.nodesForRemoval[0]);\n for (const ele of this.nodesForRemoval) {\n const tempText = ele.textContent;\n const parent = ele.parentElement;\n if (parent.classList.contains('BRwordElement') || parent.classList.contains('BRspace')) {\n ele.remove();\n parent.textContent = tempText;\n } else {\n console.log(\"This element did not match removal criteria:\", parent, ele);\n }\n }\n this.deleteHighlight(uuid);\n this.clearNodesForRemoval();\n } else {\n console.log(\"there is nothing to remove\");\n }\n }\n\n /**\n * @param {string} uuid\n */\n deleteHighlight(uuid) {\n const highlights = this.loadHighlightsFromLocalStorage();\n for (let idx = 0; idx < highlights.length; idx++) {\n if (highlights[idx].uuid === uuid) {\n highlights.splice(idx, 1);\n this.saveToLocalStorage(highlights);\n return;\n }\n }\n }\n\n /**\n * Saves all the highlights in an array to localStorage\n * @param {BookReaderSavedHighlight[]} highlights\n */\n saveToLocalStorage(highlights) {\n window.localStorage.setItem(BR_HIGHLIGHTS_LOCAL_STORAGE_KEY, JSON.stringify(highlights.map(hl => hl.toJSON())));\n }\n\n /**\n * @returns {BookReaderSavedHighlight[]}\n */\n loadHighlightsFromLocalStorage() {\n return JSON.parse(window.localStorage.getItem(BR_HIGHLIGHTS_LOCAL_STORAGE_KEY) || \"[]\")\n .map(item => BookReaderTextFragment.fromJSON(item));\n }\n\n renderSavedHighlights() {\n for (const hl of this.loadHighlightsFromLocalStorage()) {\n const textLayer = /** @type {HTMLElement} */ (this.br.$(`.pagediv${hl.pageIndex} .BRtextLayer`)[0]);\n if (!textLayer) continue;\n renderHighlight(textLayer, hl);\n // Attach click behaviour here? Only need one handler per text layer\n $(textLayer)\n .off('mouseup.BRHighlightClick')\n .on('mouseup.BRHighlightClick', (e) => {\n if (!e.target.classList.contains(\"BRhighlight\")) return;\n e.stopPropagation();\n this.handleHighlightClick(e.target);\n });\n }\n }\n\n /**\n * @param {HTMLElement} target\n */\n handleHighlightClick(target) {\n const textLayer = this.getNodeTextLayer(target);\n const identifier = retrieveUUID(target);\n const selectedQuoteNodes = textLayer.querySelectorAll(`.${identifier}`);\n\n const firstNode = selectedQuoteNodes[0];\n const lastNode = selectedQuoteNodes[selectedQuoteNodes.length - 1];\n\n const highlightRange = document.createRange();\n highlightRange.setStart(firstNode, 0);\n highlightRange.setEnd(lastNode, 1);\n\n const currentSelection = window.getSelection();\n currentSelection.removeAllRanges();\n currentSelection.addRange(highlightRange);\n this.show();\n }\n\n repositionToSelection() {\n const SCREEN_MARGIN = 10;\n const currentSelection = /** @type {Selection} */ (window.getSelection());\n const range = currentSelection.getRangeAt(0);\n const selectionRect = range.getBoundingClientRect();\n\n const isMobile = isIOS() || isAndroid();\n // Leave room for mobile teardrop selection handles\n const SELECTION_PADDING = isAndroid() ? 25 : isIOS() ? 15 : 10;\n // On mobile, avoid the native OS text-selection bar which appears near the top of the screen\n const OS_BAR_H = isMobile ? 60 : 0;\n const idealTop = (selectionRect.top < OS_BAR_H\n ? selectionRect.bottom + OS_BAR_H\n : selectionRect.bottom) + SELECTION_PADDING;\n const top = Math.max(SCREEN_MARGIN, idealTop) + window.scrollY;\n\n const menuWidth = this.getBoundingClientRect().width;\n // Excludes scrollbars\n const windowWidth = document.documentElement.clientWidth;\n const idealLeft = menuWidth > selectionRect.width\n ? selectionRect.left + selectionRect.width / 2 - menuWidth / 2\n : selectionRect.left;\n const left = clamp(idealLeft, SCREEN_MARGIN, windowWidth - menuWidth - SCREEN_MARGIN) + window.scrollX;\n\n this.style.top = `${top}px`;\n this.style.left = `${left}px`;\n }\n\n // Will always show the simplified menu when rendered after hiding\n async show() {\n if (this.br.plugins.translate?.userToggleTranslate) return;\n\n this.style.zIndex = '1';\n this.style.position = 'absolute';\n this.open = true;\n this.classList.remove('br-select-menu__root--scrolling');\n window.removeEventListener('scroll', this._onScroll, { capture: true });\n window.addEventListener('scroll', this._onScroll, { capture: true, passive: true });\n await this.updateComplete; // ensure Lit has rendered so getBoundingClientRect() returns real width\n this.repositionToSelection();\n this.clearNodesForRemoval();\n }\n\n hide() {\n if (!this.open) return;\n this.showExtended = false;\n this.open = false;\n window.removeEventListener('scroll', this._onScroll, { capture: true });\n this.clearNodesForRemoval();\n return;\n }\n\n /**\n * Remove temporary storage for the currently selected highlight and updates selection menu options\n */\n clearNodesForRemoval = () => {\n this.nodesForRemoval = null;\n this.requestUpdate();\n }\n}\n\n/**\n * @param {number} numWords\n * @param {string} text\n * @return {string}\n */\nexport function getFirstWords(numWords, text) {\n text = text.trim();\n const re = new RegExp(String.raw`^(\\S+(\\s+|$)){1,${numWords}}`);\n const m = text.match(re);\n return m ? m[0].trim() : \"\";\n}\n\n/**\n * @param {number} numWords\n * @param {string} text\n * @return {string}\n */\nexport function getLastWords(numWords, text) {\n text = text.trim();\n const re = new RegExp(String.raw`((^|\\s+)\\S+){1,${numWords}}\\s*?$`);\n const m = text.match(re);\n return m ? m[0].trim() : \"\";\n}\n\n/**\n * @param {Node} parent\n * @returns {Node}\n */\nexport function getFirstMostNode(parent) {\n while (parent.firstChild) {\n parent = parent.firstChild;\n }\n return parent;\n}\n\n/**\n * @param {Node} parent\n * @returns {Node}\n */\nexport function getLastMostNode(parent) {\n while (parent.lastChild) {\n parent = parent.lastChild;\n }\n return parent;\n}\n\n/**\n * Normalizes text fragment whitespace and removes special delimiter characters\n * to allow for reliable url encoding/decoding\n *\n * Note: It's very important this *does not* change the length of the string to\n * ensure matching works smoothly later.\n *\n * @param {String} string\n */\nexport function replaceTextFragmentDelimiters(string) {\n return string.replace(/(:|-,|,-|,|\\n)/g, s => s.length === 1 ? ' ' : ' ');\n}\n\n/**\n * @param {String} s\n */\nexport function collapseWhitespace(s) {\n return s.replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * Finds all regex matches within a range and returns their ranges.\n * @param {RegExp} regex\n * @param {Range} range - the range to search in\n * @param {Node[]} textNodes - visible text nodes within the range\n * @param {{ normalize?: function(string): string }} [options]\n * @returns {Range[] | undefined} Range for each match, or undefined if no matches are found\n */\nexport function findRangeForRegExp(regex, range, textNodes, { normalize = (s) => s } = {}) {\n if (!textNodes.length) return undefined;\n\n const startOffset = textNodes[0] === range.startContainer ?\n range.startOffset :\n 0;\n const normalizedWholePageString = normalize(textLayerRangeToString(range));\n const normalizedStartOffset = normalize(textNodes[0].textContent.slice(0, startOffset)).length;\n const matchRegex = new RegExp(regex.source, regex.flags.includes('g') ? regex.flags : `${regex.flags}g`);\n\n const matches = Array.from(normalizedWholePageString.matchAll(matchRegex));\n const resultRanges = matches.map((match) => {\n const start = getBoundaryPointAtIndex(\n normalizedStartOffset + match.index,\n textNodes,\n false,\n { normalize },\n );\n const end = getBoundaryPointAtIndex(\n normalizedStartOffset + match.index + match[0].length,\n textNodes,\n true,\n { normalize },\n );\n\n if (!start || !end) {\n console.warn(\"Could not find boundary points for regex match, skipping this match\", {match, start, end});\n return undefined;\n }\n\n const foundRange = new Range();\n foundRange.setStart(start.node, start.offset);\n foundRange.setEnd(end.node, end.offset);\n return foundRange;\n });\n\n const definedRanges = resultRanges.filter((matchRange) => !!matchRange);\n if (!definedRanges?.length) return undefined;\n return definedRanges;\n}\n\n/**\n * Maps an index from \"normalized-space\" (concatenated and normalized text) to a \"node-space\" index (node + offset).\n * @param {Number} index\n * @param {Node[]} nodes\n * @param {boolean} isEnd\n * @param {{ normalize?: function(string): string }} [options]\n */\nexport function getBoundaryPointAtIndex(index, nodes, isEnd, { normalize = (s) => s } = {}) {\n // Rename to have consistent wording\n const normalizedTargetIndex = index;\n /** Characters in node-space counted so far */\n let normalizedI = 0;\n\n for (const node of nodes) {\n const nodeText = node.textContent || '';\n const normalizedText = normalize(nodeText);\n const nodeNormalizedStart = normalizedI;\n const nodeNormalizedEnd = nodeNormalizedStart + normalizedText.length + (isEnd ? 1 : 0);\n\n if (nodeNormalizedEnd > normalizedTargetIndex) {\n // We have found the node that contains the normalizedTargetIndex we are looking for!\n const normalizedOffset = normalizedTargetIndex - nodeNormalizedStart;\n\n // But the normalized text could be a shorter length than the node text,\n // so we try to continually increase the nodeOffset\n let nodeOffset = Math.min(normalizedOffset, nodeText.length);\n\n const normalizedSubstring = isEnd ?\n normalizedText.substring(0, normalizedOffset) :\n normalizedText.substring(normalizedOffset);\n\n let nodeSubstring = isEnd ?\n normalize(nodeText.substring(0, normalizedOffset)) :\n normalize(nodeText.substring(normalizedOffset));\n\n const direction = (isEnd ? -1 : 1) * (normalizedSubstring.length > nodeSubstring.length ? -1 : 1);\n while (nodeOffset >= 0 && nodeOffset <= nodeText.length) {\n if (nodeSubstring.length === normalizedSubstring.length) {\n return {node, offset: nodeOffset};\n }\n nodeOffset += direction;\n\n nodeSubstring = isEnd ?\n normalize(nodeText.substring(0, nodeOffset)) :\n normalize(nodeText.substring(nodeOffset));\n }\n }\n normalizedI += normalizedText.length;\n }\n return undefined;\n}\n\n/**\n * @param {Range} range\n */\nexport function textLayerRangeToString(range) {\n const textNodes = Array.from(genFilter(treeWalkRange(range, 'text'), isBRVisibleTextNode));\n let result = textNodes.map(node => node.textContent).join('');\n const firstTextNode = textNodes[0];\n const lastTextNode = textNodes[textNodes.length - 1];\n if (range.startContainer === firstTextNode) {\n result = result.substring(range.startOffset);\n }\n if (range.endContainer === lastTextNode) {\n result = result.substring(0, result.length - (lastTextNode.textContent.length - range.endOffset));\n }\n return result;\n}\n\n/**\n * Takes a text quote object and a container element, and wraps the quote\n * within the container element in a span to apply highlight-like styling\n *\n * Iterate through the range and determine the \"start\" and \"end\" nodes\n * Example of how this is done via polyfill\n * https://github.com/GoogleChromeLabs/text-fragments-polyfill/blob/main/src/text-fragment-utils.js#L743\n *\n * @param {HTMLElement} textLayer\n * @param {BookReaderTextFragment} textFragment\n * @param {string | null} cssClassName optional css class to add to the highlight span element\n * @return {Element[]} the elements that were created to highlight the text\n */\nexport function renderHighlight(textLayer, textFragment, cssClassName = null) {\n // Create a range that encompasses the entire text content\n const firstPageNode = getFirstMostNode(textLayer);\n const lastPageNode = getLastMostNode(textLayer);\n const wholePageRange = new Range();\n wholePageRange.setStart(firstPageNode, 0);\n wholePageRange.setEnd(lastPageNode, lastPageNode.textContent.length);\n\n const pageWordNodes = Array.from(genFilter(treeWalkRange(wholePageRange, 'text'), isBRVisibleTextNode));\n\n const broadRanges = findRangeForRegExp(\n textFragment.toRegExp({ context: true }),\n wholePageRange,\n pageWordNodes,\n { normalize: replaceTextFragmentDelimiters },\n );\n if (!broadRanges) {\n console.warn(\"Could not find quote with context in page\");\n return;\n }\n\n const broadRangeWordNodes = Array.from(genFilter(treeWalkRange(broadRanges[0], 'text'), isBRVisibleTextNode));\n\n // At which point the quote should now be unambiguous!\n // FIXME: Alas no, it is ambiguous ; need to likely extract prefix and suffix separately?\n const exactRanges = findRangeForRegExp(\n textFragment.toRegExp({ context: false }),\n broadRanges[0],\n broadRangeWordNodes,\n { normalize: replaceTextFragmentDelimiters },\n );\n if (!exactRanges) {\n throw new Error(\"Could not find quote in page\");\n }\n const startTextNode = getFirstMostNode(exactRanges[0].startContainer);\n const endTextNode = getFirstMostNode(exactRanges[0].endContainer);\n\n // markRange requires the range to start and end within text nodes\n const exactRangeTextNodes = new Range();\n exactRangeTextNodes.setStart(startTextNode, 0);\n exactRangeTextNodes.setEnd(endTextNode, endTextNode.textContent.length);\n\n // Don't mark if already marked\n if (startTextNode.parentElement.classList.contains(\"BRhighlight\") ||\n endTextNode.parentElement.classList.contains(\"BRhighlight\")) {\n return;\n }\n\n return markRange(exactRangeTextNodes, () => {\n const mark = document.createElement(\"mark\");\n mark.classList.add(\"BRhighlight\");\n if (cssClassName) mark.classList.add(cssClassName);\n if (textFragment.uuid) mark.classList.add(textFragment.uuid);\n return mark;\n });\n}\n\n/**\n * @param {Text} node\n */\nexport function isBRVisibleTextNode(node) {\n // Exclude the duplicated spaces between words for MS Edge\n return !node.previousElementSibling?.classList.contains(\"BRspace\");\n}\n\n/**\n * Given a Range, wraps its text contents in one or more <mark> elements.\n * <mark> elements can't cross block boundaries, so this function walks the\n * tree to find all the relevant text nodes and wraps them.\n * @param {Range} range - the range to mark. Must start and end inside of\n * text nodes.\n * @param {function(): Element} createWrappingElement - a function that creates\n * the element to wrap text nodes in. This is called once per text node.\n * @return {Element[]} The <mark> nodes that were created.\n *\n * Lightly adapted from https://github.com/GoogleChromeLabs/text-fragments-polyfill/blob/abc6ed408b3f20e91d9cbda9977748459f5e3877/src/text-fragment-utils.js#L456\n */\nfunction markRange(\n range,\n createWrappingElement = () => document.createElement(\"mark\"),\n) {\n if (range.startContainer.nodeType != Node.TEXT_NODE ||\n range.endContainer.nodeType != Node.TEXT_NODE)\n return [];\n\n // If the range is entirely within a single node, just surround it.\n if (range.startContainer === range.endContainer) {\n const trivialMark = createWrappingElement();\n range.surroundContents(trivialMark);\n return [trivialMark];\n }\n\n // Start node -- special case\n const startNode = range.startContainer;\n const startNodeSubrange = range.cloneRange();\n startNodeSubrange.setEndAfter(startNode);\n\n // End node -- special case\n const endNode = range.endContainer;\n const endNodeSubrange = range.cloneRange();\n endNodeSubrange.setStartBefore(endNode);\n\n // In between nodes\n const marks = [];\n range.setStartAfter(startNode);\n range.setEndBefore(endNode);\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT,\n {\n acceptNode: function(node) {\n if (!range.intersectsNode(node)) return NodeFilter.FILTER_REJECT;\n\n if (node.nodeType === Node.TEXT_NODE)\n return NodeFilter.FILTER_ACCEPT;\n return NodeFilter.FILTER_SKIP;\n },\n },\n );\n let node = walker.nextNode();\n while (node) {\n if (node.nodeType === Node.TEXT_NODE) {\n const mark = createWrappingElement();\n node.parentNode.insertBefore(mark, node);\n mark.appendChild(node);\n marks.push(mark);\n }\n node = walker.nextNode();\n }\n\n const startMark = createWrappingElement();\n startNodeSubrange.surroundContents(startMark);\n const endMark = createWrappingElement();\n endNodeSubrange.surroundContents(endMark);\n\n return [startMark, ...marks, endMark];\n}\n\n/**\n * Get UUID assigned to the highlight element from class list\n * @param {HTMLElement} ele\n * @returns\n */\nfunction retrieveUUID(ele) {\n if (!ele) return null;\n const findUUID = Array.from(ele?.classList).filter((name) => {\n if (name.slice(0, 2).includes('id')) {\n return name;\n }\n });\n if (findUUID.length) {\n return findUUID[0];\n }\n return null;\n}\n\n/**\n * An extension of the fields defined by the browser-native TextFragment;\n * See https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment/Text_fragments\n *\n * Text fragment string format: `pageNumber:prefix-,quote,-suffix`\n * Or for long quotes: `pageNumber:prefix-,quoteStart,quoteEnd,-suffix`\n * Note the ':' and ',' separators must not be encoded, but\n * the pageNumber, prefix, quote/quoteStart/quoteEnd, and suffix text can be encoded.\n */\nexport class BookReaderTextFragment {\n /**\n * @param {object} params\n * @param {string | null}params.prefix\n * @param {string | null} [params.quote]\n * @param {string | null} [params.quoteStart]\n * @param {string | null} [params.quoteEnd]\n * @param {string | null} params.suffix\n * @param {string | null} params.pageNumber Page number; e.g. asserted page number or the n-prefixed page index\n * @param {number} params.pageIndex Page index; e.g. zero-based index of the page\n * @param {string | null} [params.uuid] UUID for the text fragment if it has one\n */\n constructor({ prefix, quote, quoteStart, quoteEnd, suffix, pageNumber, pageIndex, uuid }) {\n /** @type {string|null} */\n this.prefix = prefix;\n /** @type {string | null} */\n this.quote = quote ?? null;\n /** @type {string | null} */\n this.quoteStart = quoteStart ?? null;\n /** @type {string | null} */\n this.quoteEnd = quoteEnd ?? null;\n /** @type {string|null} */\n this.suffix = suffix;\n /** @type {string|null} Page number; e.g. asserted page number or the n-prefixed page index */\n this.pageNumber = pageNumber;\n /** @type {number} Page index; e.g. zero-based index of the page */\n this.pageIndex = pageIndex;\n /** @type {string | null} UUID for the text fragment if it has one */\n this.uuid = uuid ?? null;\n }\n\n /**\n * Parse a text fragment from its string value (the part after `text=`), already\n * URI-decoded (e.g. as returned by `URLSearchParams.get`).\n * Expected format: `pageNumber:prefix-,quote,-suffix`\n * @param {string} str\n * @param {import('@/src/BookReader/BookModel.js').BookModel} book\n * @param {number} fallbackPageIndex A fallback page index to use if the text\n * fragment does not specify a page number or page index.\n * @returns {BookReaderTextFragment}\n */\n static fromString(str, book, fallbackPageIndex) {\n // Basically matches:\n // (stuff):(stuff)-,(stuff),-(stuff)\n const match = str.match(/^(?:(.*?):)?(?:(.*?)-,)?(.*?)(?:,-(.*))?$/);\n if (!match) {\n throw new Error(`Invalid text fragment format: ${str}`);\n }\n const pageNumber = match[1] || null;\n const prefix = match[2] || null;\n const quoteRegion = match[3] || '';\n const quoteParts = quoteRegion.split(',');\n let quote = null;\n let quoteStart = null;\n let quoteEnd = null;\n\n if (quoteParts.length === 1) {\n quote = quoteParts[0];\n } else if (quoteParts.length === 2) {\n quoteStart = quoteParts[0];\n quoteEnd = quoteParts[1];\n } else {\n throw new Error(`Invalid text fragment quote format: ${str}`);\n }\n\n const suffix = match[4] || null;\n const pageIndex = pageNumber ? book.getPageIndex(pageNumber) : fallbackPageIndex;\n if (typeof pageIndex !== 'number') {\n throw new Error(`Could not determine page index for text fragment with page number ${pageNumber}`);\n }\n\n if (!quote && (!quoteStart || !quoteEnd)) {\n throw new Error(`Invalid text fragment quote format: ${str}`);\n }\n\n return new BookReaderTextFragment({\n prefix,\n quote,\n quoteStart,\n quoteEnd,\n suffix,\n pageNumber,\n pageIndex,\n });\n }\n\n /**\n * Generates a URL pointing to the page with the text fragment highlighted. Maintains all existing\n * parameters in the url.\n */\n toUrl() {\n const params = new URLSearchParams(window.location.search);\n params.set('text', this.toNormalizedString());\n\n const currentUrl = window.location;\n const pageNum = this.pageNumber || `n${this.pageIndex}`;\n const adjustedUrlPageNumPath = currentUrl.pathname.replace(/((?:^|[#/])page)\\/[^/]+/, `$1/${pageNum}`);\n const hash = currentUrl.hash ? currentUrl.hash.replace(/((?:^|[#/])page)\\/[^/]+/, `$1/${pageNum}`) : '';\n return `${currentUrl.origin}${adjustedUrlPageNumPath}?${params}${hash}`;\n }\n\n /**\n * Outputs a normalized, auto-truncated string representation of the text fragment,\n * suitable for use in a URL. This is the inverse of `fromString`. Not URI-encoded; that\n * is left to the caller (e.g. URLSearchParams).\n *\n * Format: `pageNumber:prefix-,quote,-suffix`\n * Or for long quotes: `pageNumber:prefix-,quoteStart,quoteEnd,-suffix`\n * The prefix and suffix are optional. Whitespace is collapsed and any text fragment\n * delimiters (`:`, `,`, `-,`, `,-`) in the text are replaced with spaces.\n *\n * @returns {string}\n */\n toNormalizedString() {\n // When constructing to url, we can collapse the whitespace since the corresponding\n // toRegExp method is resilient to multiple whitespace characters.\n /** @param {string} s */\n const normalize = s => collapseWhitespace(replaceTextFragmentDelimiters(s).trim());\n\n // First the page number or index\n let str = this.pageNumber ? this.pageNumber : `n${this.pageIndex}`;\n str += ':';\n\n if (this.prefix) {\n str += normalize(this.prefix);\n str += '-,';\n }\n\n const quote = this.quote ? normalize(this.quote) : null;\n let shortenedQuoteParts = null;\n if (quote && quote.length > MAX_FULL_QUOTE_URL_CHARS) {\n const words = quote.match(/\\S+/g) || [];\n if (words.length >= TRUNCATED_QUOTE_WORD_COUNT * 2) {\n const quoteStart = getFirstWords(TRUNCATED_QUOTE_WORD_COUNT, quote);\n const quoteEnd = getLastWords(TRUNCATED_QUOTE_WORD_COUNT, quote);\n if (quoteStart && quoteEnd) {\n shortenedQuoteParts = { quoteStart, quoteEnd };\n }\n }\n }\n\n if (quote && !shortenedQuoteParts) {\n str += quote;\n } else if (shortenedQuoteParts) {\n str += `${shortenedQuoteParts.quoteStart},${shortenedQuoteParts.quoteEnd}`;\n } else if (this.quoteStart && this.quoteEnd) {\n str += `${this.quoteStart},${this.quoteEnd}`;\n } else {\n throw new Error('Text fragment requires either a quote or quoteStart/quoteEnd');\n }\n\n if (this.suffix) {\n str += ',-';\n str += normalize(this.suffix);\n }\n\n return str;\n }\n\n /**\n * Build a regex that matches this quote payload.\n * @param {{ context?: boolean }} [options]\n * @returns {RegExp}\n */\n toRegExp({ context = false } = {}) {\n /** @type {[String] | [String, String]} */\n const quotes = this.quote ? [this.quote] : [this.quoteStart, this.quoteEnd];\n\n if (context) {\n if (this.prefix) quotes[0] = this.prefix + ' ' + quotes[0];\n if (this.suffix) quotes[quotes.length - 1] = quotes[quotes.length - 1] + ' ' + this.suffix;\n }\n\n // Make it resilient to extra whitespace\n /** @param {String} quote */\n const quoteToRegExpString = (quote) => RegExp.escape(replaceTextFragmentDelimiters(quote)).replace(/(\\\\x20)+/g, '\\\\s+');\n\n if (quotes.length === 1) {\n return new RegExp(quoteToRegExpString(quotes[0]), 'gi');\n } else {\n return new RegExp(\n quoteToRegExpString(quotes[0]) + '[\\\\s\\\\S]*?' + quoteToRegExpString(quotes[1]),\n 'gi',\n );\n }\n }\n\n toJSON() {\n return {\n prefix: this.prefix,\n quote: this.quote,\n quoteStart: this.quoteStart,\n quoteEnd: this.quoteEnd,\n suffix: this.suffix,\n pageNumber: this.pageNumber,\n pageIndex: this.pageIndex,\n uuid: this.uuid,\n };\n }\n\n /**\n * Create a BookReaderTextFragment instance from a JSON object.\n * @param {object} json\n * @returns {BookReaderTextFragment}\n */\n static fromJSON(json) {\n return new BookReaderTextFragment(json);\n }\n\n /**\n * Builds a TextFragment string from a given text selection.\n * @param {Selection} selection currently selected text, eg `document.getSelection()`\n * @param {Element[]} contextElements elements providing context for the selection\n * @returns {BookReaderTextFragment}\n */\n static fromSelection(selection, contextElements) {\n const range = selection.getRangeAt(0);\n\n // Partially selected words need to be captured completely\n const fullQuoteRange = new Range();\n const startTextNode = getLastMostNode(range.startContainer);\n const endTextNode = getFirstMostNode(range.endContainer);\n fullQuoteRange.setStart(startTextNode, 0);\n fullQuoteRange.setEnd(endTextNode, range.endOffset == 0 ? 0 : (endTextNode.textContent?.length ?? 0));\n\n const preStartRange = document.createRange();\n preStartRange.setStart(getFirstMostNode(contextElements[0]), 0);\n preStartRange.setEnd(startTextNode, 0);\n\n const postEndRange = document.createRange();\n postEndRange.setStart(endTextNode, fullQuoteRange.endOffset);\n const lastWordOfPageEl = getLastMostNode(contextElements[contextElements.length - 1]);\n postEndRange.setEnd(lastWordOfPageEl, Math.max(0, lastWordOfPageEl.textContent.length - 1));\n\n const CONTEXT_WORD_COUNT = 3;\n\n const preStartText = textLayerRangeToString(preStartRange);\n let prefix = getLastWords(CONTEXT_WORD_COUNT, preStartText);\n let prefixWords = countWords(prefix);\n\n const postEndText = textLayerRangeToString(postEndRange);\n let suffix = getFirstWords(CONTEXT_WORD_COUNT, postEndText);\n let suffixWords = countWords(suffix);\n\n if (prefixWords < CONTEXT_WORD_COUNT) {\n // Ran out of words! To reduce the risk of ambiguity, try extending suffix\n suffix = getFirstWords(2 * CONTEXT_WORD_COUNT - prefixWords, postEndText);\n suffixWords = countWords(suffix);\n }\n\n if (suffixWords < CONTEXT_WORD_COUNT) {\n // Ran out of words on the suffix side as well, try extending prefix\n prefix = getLastWords(2 * CONTEXT_WORD_COUNT - suffixWords, preStartText);\n prefixWords = countWords(prefix);\n }\n\n const quote = textLayerRangeToString(fullQuoteRange);\n const pageContainerEl = startTextNode.parentElement.closest(\".BRpagecontainer\");\n\n return new BookReaderTextFragment({\n quote,\n prefix,\n suffix,\n pageNumber: pageContainerEl.getAttribute(\"data-page-num\"),\n pageIndex: parseFloat(pageContainerEl.getAttribute(\"data-index\")),\n });\n }\n}\n\n/**\n * @typedef {BookReaderTextFragment & { uuid: string }} BookReaderSavedHighlight\n */\n","/**\n * @template T\n */\nexport class Cache {\n constructor(maxSize = 10) {\n this.maxSize = maxSize;\n /** @type {T[]} */\n this.entries = [];\n }\n\n /**\n * @param {T} entry\n */\n add(entry) {\n if (this.entries.length >= this.maxSize) {\n this.entries.shift();\n }\n this.entries.push(entry);\n }\n}\n","// @ts-check\n\n/**\n * @template T\n * Get the i-th element of an iterable\n * @param {Iterable<T>} iterable\n * @param {number} index\n */\nexport function genAt(iterable, index) {\n let i = 0;\n for (const x of iterable) {\n if (i == index) return x;\n i++;\n }\n return undefined;\n}\n\n/**\n * @template T\n * Generator version of filter\n * @param {Iterable<T>} iterable\n * @param {function(T): boolean} fn\n */\nexport function* genFilter(iterable, fn) {\n for (const x of iterable) {\n if (fn(x)) yield x;\n }\n}\n\n/**\n * @template TFrom, TTo\n * Generator version of map\n * @param {Iterable<TFrom>} gen\n * @param {function(TFrom): TTo} fn\n * @returns {Iterable<TTo>}\n */\nexport function* genMap(gen, fn) {\n for (const x of gen) yield fn(x);\n}\n\n/**\n * @template T\n * Generator that provides a sliding window of 3 elements,\n * prev, current, and next.\n * @param {Iterable<T>} gen\n * @returns {Iterable<[T | undefined, T, T | undefined]>}\n */\nexport function* lookAroundWindow(gen) {\n let prev = undefined;\n let cur = undefined;\n let next = undefined;\n for (const x of gen) {\n if (typeof cur !== 'undefined') {\n next = x;\n yield [prev, cur, next];\n }\n prev = cur;\n cur = x;\n next = undefined;\n }\n\n if (typeof cur !== 'undefined') {\n yield [prev, cur, next];\n }\n}\n\n/**\n * @template T1, T2\n * Lazy zip implementation to avoid importing lodash\n * Expects iterators to be of the same length\n * @param {Iterable<T1>} gen1\n * @param {Iterable<T2>} gen2\n * @returns {Iterable<[T1, T2]>}\n */\nexport function* zip(gen1, gen2) {\n const it1 = gen1[Symbol.iterator]();\n const it2 = gen2[Symbol.iterator]();\n while (true) {\n const r1 = it1.next();\n const r2 = it2.next();\n if (r1.done && r2.done) {\n return;\n }\n if (r1.done || r2.done) {\n throw new Error('zip: one of the iterators is done');\n }\n yield [r1.value, r2.value];\n }\n}\n","/**\n * @typedef {String} StringWithVars\n * A template string with {{foo}} style variables\n * Also supports filters, like {{bookPath|urlencode}} (See APPLY_FILTERS for the\n * supported list of filters)\n **/\n\n/**\n * Count whitespace-delimited words in a string.\n * @param {string} text\n * @return {number}\n */\nexport function countWords(text) {\n const matches = text.match(/\\S+/g);\n return matches ? matches.length : 0;\n}\n\n/**\n * @param {StringWithVars|String} template\n * @param { {[varName: string]: { toString: () => string} } } vars\n * @param { {[varName: string]: { toString: () => string} } } [overrides]\n * @returns {StringWithVars|string}\n */\nexport function applyVariables(template, vars, overrides = {}, possibleFilters = APPLY_FILTERS) {\n return template?.replace(/\\{\\{([^}]*?)\\}\\}/g, ($0, $1) => {\n if (!$1) return $0;\n /** @type {string} */\n const expression = $1;\n const [varName, ...filterNames] = expression.split('|').map(x => x.trim());\n const defined = varName in overrides || varName in vars;\n\n // If it's not defined, don't expand it at all\n if (!defined) return $0;\n\n const value = varName in overrides ? overrides[varName]\n : varName in vars ? vars[varName] : null;\n const filters = filterNames.map(n => possibleFilters[n]);\n return filters.reduce((acc, cur) => cur(acc), value && value.toString());\n });\n}\n\n/** @type { {[filterName: String]:( string => string)} } */\nexport const APPLY_FILTERS = {\n urlencode: encodeURIComponent,\n};\n"],"names":["___CSS_LOADER_EXPORT___","_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default","_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default","push","module","id","version","sources","names","mappings","sourcesContent","sourceRoot","__webpack_exports__","A","toString","exports","cssWithMappingToString","list","this","map","item","content","needLayer","concat","length","join","i","modules","media","dedupe","supports","layer","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","PROPER_FUNCTION_NAME","__webpack_require__","fails","whitespaces","METHOD_NAME","name","$","$trim","target","proto","forced","forcedStringTrimMethod","trim","BookReaderPlugin","br","_classCallCheck","options","key","value","Object","assign","pageContainer","$toolbarElement","$navBar","e","t","r","Symbol","n","iterator","o","toStringTag","c","prototype","Generator","u","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","l","TypeError","call","done","return","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_defineProperties","_toPropertyKey","_createClass","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_getPrototypeOf","_setPrototypeOf","_defineProperty","_typeof","toPrimitive","String","_toPrimitive","BookReader","window","TextSelectionPlugin","_BookReaderPlugin","_this","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","constructor","enabled","fullDjvuXmlUrl","singlePageDjvuXmlUrl","jsonp","maxProtectedWords","Cache","rtl","pageProgression","textSelectionManager","TextSelectionManager","selectionElement","_inherits","_this2","measurementIframe","document","createElement","setAttribute","tabIndex","style","cssText","body","appendChild","_measurementDocument","contentDocument","textContent","textSelectionCss","head","on","_","_ref","pageContainerEl","textLayer","querySelector","trigger","loadData","init","textParam","URLSearchParams","location","search","get","targetTextFragment","BookReaderTextFragment","fromString","book","firstIndex","initTextFragment","_initTextFragment","_callee2","page","_t","_this3","_context2","verifyTextFragment","_ref3","_callee","_ref2","markEls","_context","pageIndex","parseFloat","getAttribute","renderHighlight","_jumpedToHighlight","scrollIntoView","behavior","block","_x","_x2","getPage","isViewable","requestPage","jumpToIndex","index","ariaLive","allowUnviewable","_pageContainer$page","mode","constModeThumb","createTextLayer","djvuPagesPromise","ajax","type","url","applyVariables","vars","dataType","cache","xhrFields","withCredentials","protected","error","res","xmlMap","parseXML","find","_getPageText","_callee3","cachedEntry","xmlDoc","result","XMLpagesArr","_context3","pageTextCache","entries","x","response","add","_x3","_createTextLayer","_callee4","$container","XMLpage","totalWords","ratioW","ratioH","bookLangCode","ocrParagraphs","paragEls","paragraphRects","yAdded","_iterator","_step","_step$value","ocrParagraph","paragEl","ocrParagBounds","realRect","_ocrParagBounds","ocrLeft","ocrRight","ocrTop","newStartMargin","newTop","_this4","_context4","getPageText","filter","ele","_ele$getAttribute$spl2","_slicedToArray","split","left","top","console","remove","recursivelyAddCoords","maxWordRendered","log","createDIVPageLayer","width","height","transform","toISO6391","bookLanguage","toArray","el","renderParagraph","determineRealRects","_createForOfIteratorHelper","zip","s","attr","right","marginTop","createTextNode","err","append","stopPageFlip","hasClass","_x4","classList","ariaHidden","_$$attr$split$map2","paragLeft","paragBottom","paragRight","paragTop","wordHeightArr","lines","_step2","_iterator2","lookAroundWindow","genMap","augmentLine","_step2$value","prevLine","line","nextLine","isLastLineOfParagraph","ocrElement","lineEl","_step5","_iterator5","words","_step5$value","wordIndex","currWord","_$$attr$split$map4","bottom","wordHeight","lastWord","endsWith","newLeft","firstWord","wordEl","space","hasHyphen","lastWordEl","children","slice","sort","b","paragWordHeight","Math","floor","fontSize","_step3","wordRects","ocrWords","wordEls","querySelectorAll","_iterator3","_step3$value","ocrWord","_$$attr$split$map8","ocrWidth","diff","letterSpacing","_step4","spaceRects","ocrLines","lineEls","Array","from","ySoFar","_iterator4","_step6","_step4$value","ocrLine","xSoFar","_iterator6","_step6$value","wordRect","_$$attr$split$map0","previousElementSibling","min","_toConsumableArray","lineHeight","parentEl","selector","measurementDocument","initals","position","visibility","rects","Map","origRect","getBoundingClientRect","Rect","defaultView","scrollX","scrollY","removeChild","adoptNode","xmlEl","_step8","_iterator8","_step9","childCoords","_iterator9","child","boundingCoords","bounds","_step7","leftMost","Infinity","bottomMost","rightMost","topMost","_iterator7","_step7$value","max","determineBounds","abs","registerPlugin","codes","by639_1","by639_2T","by639_2B","forEach","row","code","nativeName","iso639_1","iso639_2T","iso639_2B","src_default","isArray","_arrayLikeToArray","test","_unsupportedIterableToArray","_n","F","next","specialLangs","language","toLocaleLowerCase","codeObj","findLanguage","toNativeName","fields","toLowerCase","langs","lang","_lang$codeType","includes","hasLocalStorage","localStorage","DEBUG_READ_ALOUD","indexOf","DESCRIPTORS","defineBuiltInAccessor","regExpFlagsDetection","regExpFlagsGetterImplementation","correct","RegExp","export_namespaceFn","uncurryThis","createIteratorConstructor","createIterResultObject","requireObjectCoercible","toLength","to_string_namespaceFn","anObject","isObject","classof","isRegExp","getRegExpFlags","getMethod","defineBuiltIn","wellKnownSymbol","speciesConstructor","advanceStringIndex","regExpExec","InternalStateModule","IS_PURE","MATCH_ALL","REGEXP_STRING","REGEXP_STRING_ITERATOR","setInternalState","set","getInternalState","getterFor","RegExpPrototype","$TypeError","stringIndexOf","nativeMatchAll","matchAll","WORKS_WITH_NON_GLOBAL_REGEX","$RegExpStringIterator","regexp","string","$global","fullUnicode","global","unicode","state","R","S","match","lastIndex","$matchAll","matcher","C","flags","source","rx","O","toIndexedObject","toObject","lengthOfArrayLike","stat","raw","template","rawTemplate","literalSegments","argumentsLength","elements","es_string_match_all_namespaceFn","SelectionObserver","handler","sel","getSelection","isCollapsed","selection","rangeCount","getRangeAt","collapsed","isSelectionCollapsed","selecting","anchorNode","closest","lastKnownFocusNode","focusNode","addEventListener","_onSelectionChange","removeEventListener","BR_HIGHLIGHTS_LOCAL_STORAGE_KEY","maxWords","textSelectingMode","defaultMode","Error","range","startInBr","startContainer","parentElement","endInBr","endContainer","lastAllowedWord","genAt","genFilter","treeWalkRange","node","contains","replace","parentNode","newRange","createRange","setStart","startOffset","setEnd","firstChild","removeAllRanges","addRange","selectionObserver","selectMenu","BRSelectMenu","className","_this$br$plugins$expe","_this$br$plugins$expe2","plugins","experiments","isEnabled","attach","selectEvent","_this2$br$plugins$arc","_window$getSelection","archiveAnalytics","sendEvent","refs","$br","removeClass","addClass","mouseIsDown","showSelectMenu","hideSelectMenu","_limitSelection","some","containsNode","preventDefault","detach","event","clipboardData","setData","$textLayer","each","interceptCopy","_this5","$pageContainer","pointerEvents","css","off","startedMouseDown","skipNextMouseup","is","stopPropagation","_this6","which","selectMenuEnabled","copyLinkToHighlightEnabled","highlightAnnotationEnabled","isConnected","open","repositionToSelection","show","hide","start","end","passesFilter","walk","_ref2$children","_ref2$parents","parents","_ref2$siblings","siblings","sib","_regeneratorValues","nextSibling","nodeType","Node","TEXT_NODE","ELEMENT_NODE","_decorate","customElement","_initialize","_LitElement","BRSelectMenuOption","_LitElement2","_this7","_len","args","_key","_callSuper","kind","decorators","property","Number","attribute","temporaryTextTimeoutId","clearTimeout","_superPropGet","text","_this8","temporaryText","temporaryTextVisible","setTimeout","temporaryTextDuration","icon","html","_templateObject","_taggedTemplateLiteral","_templateObject2","_templateObject3","_this$label","_this$ariaLabel","baseLabel","label","hasTemporaryText","temporaryLabel","showTemporaryLabel","visibleLabel","providedAriaLabel","ariaLabel","accessibleLabel","sizingLabel","_templateObject4","ifDefined","renderIcon","_templateObject5","liveLabel","_templateObject6","LitElement","_initialize2","_LitElement3","_show","_handleCopyLinkToHighlight","_LitElement4","_this9","reflect","query","_this0","_scrollTimeoutId","_onScroll","capture","_templateObject7","handleCopyLinkToHighlight","_templateObject8","handleDeleteHighlight","_templateObject9","handleAddAnnotation","_templateObject0","handleHighlightSave","_templateObject1","toggleExtendedMenu","_templateObject10","renderSavedHighlights","removeItem","_templateObject11","renderCopyLinkToHighlightOption","nodesForRemoval","renderHighlightOption","renderRemoveOption","_templateObject12","renderDefaultOptions","renderLocalStorageOptions","_this$br$plugins$expe3","hasMoreOptions","_templateObject13","showExtended","renderExtendedOptions","renderShowMoreOption","_this$copyLinkOption","currentSelection","textFragment","linkToHighlight","getNodeTextLayer","warn","fromSelection","toUrl","navigator","clipboard","writeText","copyLinkOption","showTemporaryText","link","_element$closest","element","Element","direction","highlight","uuid","crypto","randomUUID","highlights","loadHighlightsFromLocalStorage","saveToLocalStorage","retrieveUUID","tempText","parent","deleteHighlight","clearNodesForRemoval","idx","splice","setItem","hl","toJSON","parse","getItem","fromJSON","_this1","handleHighlightClick","identifier","selectedQuoteNodes","firstNode","lastNode","highlightRange","selectionRect","isMobile","isIOS","isAndroid","SELECTION_PADDING","OS_BAR_H","idealTop","menuWidth","windowWidth","documentElement","clientWidth","idealLeft","clamp","_this$br$plugins$tran","translate","userToggleTranslate","zIndex","passive","updateComplete","_this10","requestUpdate","getFirstWords","numWords","re","_templateObject14","getLastWords","_templateObject15","getFirstMostNode","getLastMostNode","lastChild","replaceTextFragmentDelimiters","findRangeForRegExp","regex","textNodes","_ref3$normalize","normalize","normalizedWholePageString","textLayerRangeToString","normalizedStartOffset","matchRegex","definedRanges","getBoundaryPointAtIndex","foundRange","Range","offset","matchRange","nodes","isEnd","_ref4$normalize","normalizedTargetIndex","normalizedI","nodeText","normalizedText","nodeNormalizedStart","normalizedOffset","nodeOffset","normalizedSubstring","substring","nodeSubstring","isBRVisibleTextNode","firstTextNode","lastTextNode","endOffset","cssClassName","firstPageNode","lastPageNode","wholePageRange","pageWordNodes","broadRanges","toRegExp","context","broadRangeWordNodes","exactRanges","startTextNode","endTextNode","exactRangeTextNodes","createWrappingElement","trivialMark","surroundContents","startNode","startNodeSubrange","cloneRange","setEndAfter","endNode","endNodeSubrange","setStartBefore","marks","setStartAfter","setEndBefore","walker","createTreeWalker","commonAncestorContainer","NodeFilter","SHOW_ELEMENT","SHOW_TEXT","acceptNode","intersectsNode","FILTER_ACCEPT","FILTER_SKIP","FILTER_REJECT","nextNode","mark","insertBefore","startMark","endMark","markRange","_node$previousElement","findUUID","_ref5","prefix","quote","quoteStart","quoteEnd","suffix","pageNumber","params","toNormalizedString","currentUrl","pageNum","adjustedUrlPageNumPath","pathname","hash","origin","collapseWhitespace","str","shortenedQuoteParts","TRUNCATED_QUOTE_WORD_COUNT","_ref6$context","quotes","quoteToRegExpString","escape","fallbackPageIndex","quoteParts","getPageIndex","json","contextElements","_endTextNode$textCont","_endTextNode$textCont2","fullQuoteRange","preStartRange","postEndRange","lastWordOfPageEl","preStartText","prefixWords","countWords","postEndText","suffixWords","maxSize","entry","shift","_marked","_marked2","_marked3","_marked4","iterable","fn","gen","_t2","prev","cur","_t3","gen1","gen2","it1","it2","r1","r2","matches","overrides","possibleFilters","APPLY_FILTERS","$0","$1","_expression$split$map2","varName","filterNames","reduce","acc","urlencode"],"sourceRoot":""}