@internetarchive/bookreader 5.0.0-11 → 5.0.0-110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +604 -1239
  4. package/BookReader/BookReader.js +1 -1
  5. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  6. package/BookReader/BookReader.js.map +1 -1
  7. package/BookReader/bergamot-translator-worker.js +2966 -0
  8. package/BookReader/bergamot-translator-worker.wasm +0 -0
  9. package/BookReader/hypothesis/LICENSE +50 -0
  10. package/BookReader/hypothesis/README.md +55 -0
  11. package/BookReader/hypothesis/build/boot.js +1 -0
  12. package/BookReader/hypothesis/build/manifest.json +20 -0
  13. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
  14. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  15. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
  16. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  17. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
  18. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  19. package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
  20. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  35. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  36. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  37. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  38. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  39. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  40. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  41. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  42. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  43. package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
  44. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  45. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
  46. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  47. package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
  48. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  49. package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
  50. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  51. package/BookReader/hypothesis/package.json +126 -0
  52. package/BookReader/ia-bookreader-bundle.js +1907 -0
  53. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
  54. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  55. package/BookReader/icons/1up.svg +1 -1
  56. package/BookReader/icons/2up.svg +1 -1
  57. package/BookReader/icons/advance.svg +1 -1
  58. package/BookReader/icons/chevron-right.svg +1 -1
  59. package/BookReader/icons/close-circle-dark.svg +1 -1
  60. package/BookReader/icons/close-circle.svg +1 -1
  61. package/BookReader/icons/fullscreen.svg +1 -1
  62. package/BookReader/icons/fullscreen_exit.svg +1 -1
  63. package/BookReader/icons/hamburger.svg +1 -1
  64. package/BookReader/icons/left-arrow.svg +1 -1
  65. package/BookReader/icons/magnify-minus.svg +1 -1
  66. package/BookReader/icons/magnify-plus.svg +1 -1
  67. package/BookReader/icons/magnify.svg +1 -1
  68. package/BookReader/icons/pause.svg +1 -1
  69. package/BookReader/icons/play.svg +1 -1
  70. package/BookReader/icons/playback-speed.svg +1 -1
  71. package/BookReader/icons/read-aloud.svg +1 -1
  72. package/BookReader/icons/review.svg +1 -1
  73. package/BookReader/icons/slider-toggle.svg +1 -0
  74. package/BookReader/icons/thumbnails.svg +1 -1
  75. package/BookReader/icons/voice.svg +1 -0
  76. package/BookReader/icons/volume-full.svg +1 -1
  77. package/BookReader/images/BRicons.svg +3 -3
  78. package/BookReader/images/books_graphic.svg +1 -1
  79. package/BookReader/images/hypothesis.ico +0 -0
  80. package/BookReader/images/icon_book.svg +1 -1
  81. package/BookReader/images/icon_bookmark.svg +1 -1
  82. package/BookReader/images/icon_experiment.svg +1 -0
  83. package/BookReader/images/icon_gear.svg +1 -1
  84. package/BookReader/images/icon_hamburger.svg +1 -1
  85. package/BookReader/images/icon_home.svg +1 -1
  86. package/BookReader/images/icon_info.svg +1 -1
  87. package/BookReader/images/icon_one_page.svg +1 -1
  88. package/BookReader/images/icon_pause.svg +1 -1
  89. package/BookReader/images/icon_play.svg +1 -1
  90. package/BookReader/images/icon_playback-rate.svg +1 -1
  91. package/BookReader/images/icon_search_button.svg +1 -1
  92. package/BookReader/images/icon_share.svg +1 -1
  93. package/BookReader/images/icon_skip-ahead.svg +1 -1
  94. package/BookReader/images/icon_skip-back.svg +1 -1
  95. package/BookReader/images/icon_speaker.svg +1 -1
  96. package/BookReader/images/icon_speaker_open.svg +1 -1
  97. package/BookReader/images/icon_thumbnails.svg +1 -1
  98. package/BookReader/images/icon_toc.svg +1 -1
  99. package/BookReader/images/icon_two_pages.svg +1 -1
  100. package/BookReader/images/marker_chap-off.svg +1 -1
  101. package/BookReader/images/marker_chap-on.svg +1 -1
  102. package/BookReader/images/marker_srch-on.svg +1 -1
  103. package/BookReader/images/translate.svg +1 -0
  104. package/BookReader/images/unviewable_page.png +0 -0
  105. package/BookReader/jquery-3.js +2 -0
  106. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  107. package/BookReader/plugins/plugin.archive_analytics.js +1 -1
  108. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js +1 -1
  110. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  111. package/BookReader/plugins/plugin.chapters.js +22 -1
  112. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  113. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  114. package/BookReader/plugins/plugin.experiments.js +3 -0
  115. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  116. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  117. package/BookReader/plugins/plugin.iframe.js +1 -1
  118. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  119. package/BookReader/plugins/plugin.iiif.js +2 -0
  120. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  121. package/BookReader/plugins/plugin.resume.js +1 -1
  122. package/BookReader/plugins/plugin.resume.js.map +1 -1
  123. package/BookReader/plugins/plugin.search.js +2 -1
  124. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  125. package/BookReader/plugins/plugin.search.js.map +1 -1
  126. package/BookReader/plugins/plugin.text_selection.js +2 -1
  127. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  128. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  129. package/BookReader/plugins/plugin.translate.js +137 -0
  130. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  131. package/BookReader/plugins/plugin.translate.js.map +1 -0
  132. package/BookReader/plugins/plugin.tts.js +1 -1
  133. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  134. package/BookReader/plugins/plugin.tts.js.map +1 -1
  135. package/BookReader/plugins/plugin.url.js +1 -1
  136. package/BookReader/plugins/plugin.url.js.map +1 -1
  137. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
  138. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  139. package/BookReader/plugins/translator-worker.js +2 -0
  140. package/BookReader/plugins/translator-worker.js.map +1 -0
  141. package/BookReader/silence.mp3 +0 -0
  142. package/BookReader/translator-worker.js +475 -0
  143. package/BookReader/webcomponents-bundle.js +3 -0
  144. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  145. package/BookReader/webcomponents-bundle.js.map +1 -0
  146. package/README.md +14 -3
  147. package/jsconfig.json +19 -0
  148. package/package.json +92 -70
  149. package/src/BookReader/BookModel.js +92 -46
  150. package/src/BookReader/DragScrollable.js +233 -0
  151. package/src/BookReader/ImageCache.js +49 -16
  152. package/src/BookReader/Mode1Up.js +66 -365
  153. package/src/BookReader/Mode1UpLit.js +392 -0
  154. package/src/BookReader/Mode2Up.js +87 -1315
  155. package/src/BookReader/Mode2UpLit.js +788 -0
  156. package/src/BookReader/ModeAbstract.js +43 -0
  157. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  158. package/src/BookReader/ModeSmoothZoom.js +312 -0
  159. package/src/BookReader/ModeThumb.js +29 -15
  160. package/src/BookReader/Navbar/Navbar.js +201 -76
  161. package/src/BookReader/PageContainer.js +120 -23
  162. package/src/BookReader/ReduceSet.js +2 -2
  163. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  164. package/src/BookReader/events.js +3 -3
  165. package/src/BookReader/options.js +94 -17
  166. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  167. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  168. package/src/BookReader/utils/SelectionObserver.js +45 -0
  169. package/src/BookReader/utils/classes.js +1 -1
  170. package/src/BookReader/utils.js +136 -12
  171. package/src/BookReader.js +678 -1226
  172. package/src/BookReaderPlugin.js +52 -0
  173. package/src/assets/icons/magnify-minus.svg +3 -7
  174. package/src/assets/icons/magnify-plus.svg +3 -7
  175. package/src/assets/icons/slider-toggle.svg +1 -0
  176. package/src/assets/icons/voice.svg +1 -0
  177. package/src/assets/images/hypothesis.ico +0 -0
  178. package/src/assets/images/icon_experiment.svg +1 -0
  179. package/src/assets/images/translate.svg +1 -0
  180. package/src/assets/images/unviewable_page.png +0 -0
  181. package/src/assets/silence.mp3 +0 -0
  182. package/src/css/BookReader.scss +1 -5
  183. package/src/css/_BRBookmarks.scss +1 -1
  184. package/src/css/_BRComponent.scss +1 -1
  185. package/src/css/_BRicon.scss +8 -2
  186. package/src/css/_BRmain.scss +16 -3
  187. package/src/css/_BRnav.scss +74 -70
  188. package/src/css/_BRpages.scss +171 -42
  189. package/src/css/_BRsearch.scss +69 -30
  190. package/src/css/_BRtoolbar.scss +5 -5
  191. package/src/css/_TextSelection.scss +129 -24
  192. package/src/css/_colorbox.scss +2 -2
  193. package/src/css/_controls.scss +24 -7
  194. package/src/css/_icons.scss +8 -1
  195. package/src/{BookNavigator/assets → css}/button-base.js +2 -2
  196. package/src/css/icon_checkmark.js +9 -0
  197. package/src/css/sharedStyles.js +15 -0
  198. package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
  199. package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +25 -5
  200. package/src/ia-bookreader/ia-bookreader.js +666 -0
  201. package/src/ia-bookreader/sharing.js +27 -0
  202. package/src/ia-bookreader/viewable-files.js +98 -0
  203. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
  204. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
  205. package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
  206. package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
  207. package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +43 -31
  208. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  209. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
  210. package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
  211. package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
  212. package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
  213. package/src/plugins/plugin.archive_analytics.js +84 -78
  214. package/src/plugins/plugin.autoplay.js +99 -104
  215. package/src/plugins/plugin.chapters.js +314 -205
  216. package/src/plugins/plugin.experiments.js +321 -0
  217. package/src/plugins/plugin.iframe.js +1 -1
  218. package/src/plugins/plugin.iiif.js +141 -0
  219. package/src/plugins/plugin.resume.js +54 -51
  220. package/src/plugins/plugin.text_selection.js +522 -219
  221. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  222. package/src/plugins/search/plugin.search.js +374 -392
  223. package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
  224. package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
  225. package/src/plugins/search/utils.js +50 -0
  226. package/src/plugins/search/view.js +50 -68
  227. package/src/plugins/translate/TranslationManager.js +164 -0
  228. package/src/plugins/translate/plugin.translate.js +512 -0
  229. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  230. package/src/plugins/tts/FestivalTTSEngine.js +20 -30
  231. package/src/plugins/tts/PageChunk.js +33 -21
  232. package/src/plugins/tts/PageChunkIterator.js +11 -17
  233. package/src/plugins/tts/WebTTSEngine.js +131 -91
  234. package/src/plugins/tts/plugin.tts.js +345 -350
  235. package/src/plugins/tts/utils.js +77 -49
  236. package/src/plugins/url/UrlPlugin.js +191 -0
  237. package/src/plugins/{plugin.url.js → url/plugin.url.js} +44 -15
  238. package/src/util/TextSelectionManager.js +282 -0
  239. package/src/util/browserSniffing.js +33 -1
  240. package/src/util/cache.js +20 -0
  241. package/src/util/docCookies.js +21 -2
  242. package/src/util/lit.js +15 -0
  243. package/src/util/strings.js +1 -0
  244. package/.babelrc +0 -12
  245. package/.dependabot/config.yml +0 -6
  246. package/.eslintrc.js +0 -50
  247. package/.gitattributes +0 -2
  248. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  249. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  250. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  251. package/.github/workflows/node.js.yml +0 -37
  252. package/.github/workflows/npm-publish.yml +0 -47
  253. package/.testcaferc.json +0 -5
  254. package/BookReader/bookreader-component-bundle.js +0 -1450
  255. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  256. package/BookReader/bookreader-component-bundle.js.map +0 -1
  257. package/BookReader/jquery-1.10.1.js +0 -2
  258. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  259. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  260. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  261. package/BookReader/plugins/plugin.mobile_nav.js +0 -2
  262. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  263. package/BookReaderDemo/BookReaderDemo.css +0 -41
  264. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  265. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  266. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  267. package/BookReaderDemo/IIIFBookReader.js +0 -207
  268. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  269. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  270. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  273. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  274. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  275. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  276. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  277. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  278. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  279. package/BookReaderDemo/demo-advanced.html +0 -33
  280. package/BookReaderDemo/demo-autoplay.html +0 -38
  281. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  282. package/BookReaderDemo/demo-embed.html +0 -26
  283. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  284. package/BookReaderDemo/demo-fullscreen.html +0 -33
  285. package/BookReaderDemo/demo-iiif.html +0 -34
  286. package/BookReaderDemo/demo-iiif.js +0 -26
  287. package/BookReaderDemo/demo-internetarchive.html +0 -74
  288. package/BookReaderDemo/demo-multiple.html +0 -43
  289. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  290. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  291. package/BookReaderDemo/demo-simple.html +0 -34
  292. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  293. package/BookReaderDemo/immersion-1up.html +0 -64
  294. package/BookReaderDemo/immersion-mode.html +0 -35
  295. package/BookReaderDemo/toggle_controls.html +0 -53
  296. package/BookReaderDemo/view_mode.html +0 -39
  297. package/BookReaderDemo/viewmode-cycle.html +0 -41
  298. package/CHANGELOG.md +0 -495
  299. package/CONTRIBUTING.md +0 -7
  300. package/codecov.yml +0 -17
  301. package/index.html +0 -31
  302. package/karma.conf.js +0 -23
  303. package/screenshot.png +0 -0
  304. package/scripts/postversion.js +0 -10
  305. package/scripts/preversion.js +0 -14
  306. package/scripts/version.js +0 -26
  307. package/src/BookNavigator/BookModel.js +0 -14
  308. package/src/BookNavigator/BookNavigator.js +0 -446
  309. package/src/BookNavigator/assets/book-loader.js +0 -27
  310. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  311. package/src/BookNavigator/assets/icon_close.js +0 -3
  312. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  313. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  314. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  315. package/src/BookNavigator/search/a-search-result.js +0 -55
  316. package/src/BookReader/DebugConsole.js +0 -54
  317. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  318. package/src/ItemNavigator/ItemNavigator.js +0 -376
  319. package/src/ItemNavigator/providers/sharing.js +0 -29
  320. package/src/css/_MobileNav.scss +0 -194
  321. package/src/dragscrollable-br.js +0 -261
  322. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  323. package/src/plugins/plugin.mobile_nav.js +0 -287
  324. package/tests/BookReader/BookModel.test.js +0 -312
  325. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  326. package/tests/BookReader/DebugConsole.test.js +0 -25
  327. package/tests/BookReader/ImageCache.test.js +0 -150
  328. package/tests/BookReader/Mode1Up.test.js +0 -164
  329. package/tests/BookReader/Mode2Up.test.js +0 -247
  330. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  331. package/tests/BookReader/PageContainer.test.js +0 -115
  332. package/tests/BookReader/ReduceSet.test.js +0 -38
  333. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  334. package/tests/BookReader/utils/classes.test.js +0 -88
  335. package/tests/BookReader/utils.test.js +0 -109
  336. package/tests/BookReader.options.test.js +0 -39
  337. package/tests/BookReader.test.js +0 -301
  338. package/tests/e2e/README.md +0 -75
  339. package/tests/e2e/autoplay.test.js +0 -13
  340. package/tests/e2e/base.test.js +0 -35
  341. package/tests/e2e/helpers/base.js +0 -263
  342. package/tests/e2e/helpers/debug.js +0 -13
  343. package/tests/e2e/helpers/desktopSearch.js +0 -72
  344. package/tests/e2e/helpers/mobileSearch.js +0 -85
  345. package/tests/e2e/helpers/mockSearch.js +0 -93
  346. package/tests/e2e/helpers/rightToLeft.js +0 -29
  347. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  348. package/tests/e2e/models/BookReader.js +0 -11
  349. package/tests/e2e/models/Navigation.js +0 -56
  350. package/tests/e2e/rightToLeft.test.js +0 -20
  351. package/tests/e2e/viewmode.test.js +0 -37
  352. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  353. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  354. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  355. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  356. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  357. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  358. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  359. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  360. package/tests/plugins/plugin.autoplay.test.js +0 -52
  361. package/tests/plugins/plugin.chapters.test.js +0 -130
  362. package/tests/plugins/plugin.iframe.test.js +0 -42
  363. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  364. package/tests/plugins/plugin.resume.test.js +0 -98
  365. package/tests/plugins/plugin.text_selection.test.js +0 -203
  366. package/tests/plugins/plugin.url.test.js +0 -129
  367. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  368. package/tests/plugins/search/plugin.search.test.js +0 -173
  369. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  370. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  371. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  372. package/tests/plugins/tts/PageChunk.test.js +0 -57
  373. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  374. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  375. package/tests/plugins/tts/utils.test.js +0 -133
  376. package/tests/util/browserSniffing.test.js +0 -56
  377. package/tests/util/docCookies.test.js +0 -15
  378. package/tests/util/strings.test.js +0 -63
  379. package/tests/utils.js +0 -42
  380. package/webpack.config.js +0 -86
@@ -1,130 +0,0 @@
1
- import sinon from 'sinon';
2
-
3
- import BookReader from '../../src/BookReader.js';
4
- import '../../src/plugins/plugin.mobile_nav.js';
5
- import '../../src/plugins/plugin.chapters.js';
6
-
7
- const SAMPLE_TOC = [{
8
- "pagenum": "3",
9
- "level": 1,
10
- "label": "CHAPTER I",
11
- "type": {"key": "/type/toc_item"},
12
- "title": "THE COUNTRY AND THE MISSION 1",
13
- "pageIndex": 3,
14
- },{
15
- "pagenum": "17",
16
- "level": 1,
17
- "label": "CHAPTER II",
18
- "type": {"key": "/type/toc_item"},
19
- "title": "THE COUNTRY AND THE MISSION 2",
20
- "pageIndex": 17,
21
- },
22
- {
23
- "pagenum": "undefined",
24
- "level": 1,
25
- "label": "CHAPTER III",
26
- "type": {"key": "/type/toc_item"},
27
- "title": "THE COUNTRY AND THE MISSION 3",
28
- "pageIndex": undefined,
29
- },
30
- {
31
- "pagenum": "40",
32
- "level": 1,
33
- "label": "CHAPTER IV",
34
- "type": {"key": "/type/toc_item"},
35
- "title": "THE COUNTRY AND THE MISSION 4",
36
- "pageIndex": 40,
37
- }];
38
-
39
- const SAMPLE_TOC_UNDEF = [
40
- {
41
- "pagenum": "undefined",
42
- "level": 1,
43
- "label": "CHAPTER I",
44
- "type": {"key": "/type/toc_item"},
45
- "title": "THE COUNTRY AND THE MISSION 1",
46
- "pageIndex": undefined,
47
- },
48
- {
49
- "pagenum": "undefined",
50
- "level": 1,
51
- "label": "CHAPTER II",
52
- "type": {"key": "/type/toc_item"},
53
- "title": "THE COUNTRY AND THE MISSION 2",
54
- "pageIndex": undefined,
55
- }
56
- ];
57
-
58
- let br;
59
- beforeEach(() => {
60
- $.ajax = jest.fn().mockImplementation((args) => {
61
- return Promise.resolve([{
62
- table_of_contents: SAMPLE_TOC,
63
- }]);
64
- });
65
- document.body.innerHTML = '<div id="BookReader">';
66
- br = new BookReader();
67
- });
68
-
69
- afterEach(() => {
70
- jest.clearAllMocks();
71
- });
72
-
73
- describe('Plugin: Menu Toggle', () => {
74
- test('has option flag', () => {
75
- expect(BookReader.defaultOptions.enableChaptersPlugin).toEqual(true);
76
- });
77
- test('has added BR property: olHost', () => {
78
- expect(br).toHaveProperty('olHost');
79
- expect(br.olHost).toBeTruthy();
80
- });
81
- test('has added BR property: bookId', () => {
82
- expect(br).toHaveProperty('bookId');
83
- expect(br.bookId).toBeFalsy();
84
- });
85
- test('fetches OL Book Record on init', () => {
86
- br.getOpenLibraryRecord = jest.fn();
87
- br.init();
88
- expect(br.getOpenLibraryRecord).toHaveBeenCalled();
89
- });
90
- test('Updates Table of Contents when available', () => {
91
- br.init();
92
- expect($.ajax).toHaveBeenCalled();
93
- });
94
- });
95
-
96
- describe('updateTOCState', () => {
97
-
98
- beforeEach(() => {
99
- window.HTMLElement.prototype.scrollIntoView = sinon.stub();
100
- //Sinon is not used because this function is imported from BookModel with exposeOverrideableMethod()
101
- //which has a getter and setter
102
- br.getPageIndex = (str) => parseFloat(str);
103
- br.init();
104
- });
105
-
106
- test('Test page is one of TOC', () => {
107
- br.updateTOCState(20, SAMPLE_TOC);
108
- expect($('li.BRtable-contents-el')[1].classList.contains('current-chapter'));
109
- });
110
-
111
- test('Only one element has .current-chapter', () => {
112
- br.updateTOCState(9, SAMPLE_TOC);
113
- expect($('li.BRtable-contents-el.current-chapter').length).toBe(1);
114
- });
115
-
116
- test('No chapter has .current-chapter if current index is < than any chapter index', () => {
117
- br.updateTOCState(1, SAMPLE_TOC);
118
- expect($('li.BRtable-contents-el.current-chapter').length).toBe(0);
119
- });
120
-
121
- test('if current index == chapter index ', () => {
122
- br.updateTOCState(17, SAMPLE_TOC);
123
- expect($('li.BRtable-contents-el')[1].classList.contains('current-chapter'));
124
- });
125
-
126
- test('No chapter has .current-chapter if all chapter have undefined pageIndex ', () => {
127
- br.updateTOCState(10, SAMPLE_TOC_UNDEF);
128
- expect($('li.BRtable-contents-el.current-chapter').length).toBe(0);
129
- });
130
- });
@@ -1,42 +0,0 @@
1
- import sinon from 'sinon';
2
-
3
- import BookReader from '../../src/BookReader.js';
4
- import { _attachEventListeners } from '../../src/plugins/plugin.iframe.js';
5
-
6
- afterEach(() => {
7
- sinon.restore();
8
- });
9
-
10
- test('listens for br events if parent', () => {
11
- const br = new BookReader();
12
- sinon.spy(br, 'bind');
13
- sinon.spy(window, 'addEventListener');
14
-
15
- _attachEventListeners(br, window.parent);
16
- expect(br.bind.callCount).toBe(1);
17
- expect(window.addEventListener.callCount).toBe(1);
18
- expect(window.addEventListener.args[0][0]).toBe('message');
19
- });
20
-
21
- test('does not attach if not in iframe', () => {
22
- const br = new BookReader();
23
- sinon.spy(br, 'bind');
24
- sinon.spy(window, 'addEventListener');
25
-
26
- _attachEventListeners(br, null);
27
- expect(br.bind.callCount).toBe(0);
28
- expect(window.addEventListener.callCount).toBe(0);
29
- });
30
-
31
- test('updates params when window receives a message', () => {
32
- const br = new BookReader();
33
- sinon.spy(br, 'updateFromParams');
34
- _attachEventListeners(br);
35
- window.dispatchEvent(new MessageEvent('message', {
36
- data: {
37
- type: 'bookReaderFragmentChange',
38
- fragment: ''
39
- }
40
- }));
41
- expect(br.updateFromParams.callCount).toBe(1);
42
- });
@@ -1,66 +0,0 @@
1
-
2
- import BookReader from '../../src/BookReader.js';
3
- import '../../src/plugins/plugin.mobile_nav.js';
4
-
5
- /** @type {BookReader} */
6
- let br;
7
- beforeEach(() => {
8
- document.body.innerHTML = '<div id="BookReader">';
9
- br = new BookReader();
10
- br.init();
11
- });
12
-
13
- afterEach(() => {
14
- jest.clearAllMocks();
15
- });
16
-
17
- describe('Plugin: Mobile Nav', () => {
18
- test('has option flag', () => {
19
- expect(BookReader.defaultOptions.enableMobileNav).toEqual(true);
20
- });
21
- test('has added BR property: mobileNavTitle', () => {
22
- expect(br).toHaveProperty('mobileNavTitle');
23
- expect(br.mobileNavTitle).toBeTruthy();
24
- });
25
- test('has added BR property: mobileNavFullscreenOnly', () => {
26
- expect(br).toHaveProperty('mobileNavFullscreenOnly');
27
- expect(br.mobileNavFullscreenOnly).toEqual(false);
28
- });
29
- test('has a referenced copy of nav in BookReader', () => {
30
- expect(br.refs).toHaveProperty('$mmenu');
31
- });
32
- test('draws toolbar on init', () => {
33
- let callCount = 0;
34
- // Since we have a custom setter set in utils/classes.js, we can't
35
- // use regular spying; need to "override" the function with a watcher.
36
- BookReader.prototype.initToolbar = function(_super) {
37
- return function() {
38
- callCount++;
39
- _super.apply(this, arguments);
40
- };
41
- }(BookReader.prototype.initToolbar);
42
- const br = new BookReader();
43
- br.init();
44
- expect(callCount).toBe(1);
45
- });
46
- test('sets a class on body to signal it has attached', () => {
47
- expect($(document.body).hasClass('BRbodyMobileNavEnabled')).toEqual(true);
48
- });
49
- test('loads the navbar on init', () => {
50
- expect($('#BRmobileMenu')).toHaveLength(1);
51
- });
52
- test('There is a Settings Section', () => {
53
- expect($('.BRmobileMenu__settings')).toHaveLength(1);
54
- });
55
- test('There is a More Info Section', () => {
56
- expect($('.BRmobileMenu__moreInfoRow')).toHaveLength(1);
57
- });
58
- test('There is a Sharing Section', () => {
59
- expect($('.BRmobileMenu__share')).toHaveLength(1);
60
- });
61
- test('clicking on hamburger opens menu', () => {
62
- expect($('html').hasClass('mm-opened')).toEqual(false);
63
- $('.BRmobileHamburger').click();
64
- expect($('html').hasClass('mm-opened')).toEqual(true);
65
- });
66
- });
@@ -1,98 +0,0 @@
1
- import BookReader from '../../src/BookReader.js';
2
- import '../../src/plugins/plugin.resume.js';
3
-
4
- import sinon from 'sinon';
5
- import * as docCookies from '../../src/util/docCookies.js';
6
-
7
- let br;
8
- beforeAll(() => {
9
- document.body.innerHTML = '<div id="BookReader">';
10
- br = new BookReader();
11
- br.init();
12
- });
13
-
14
- afterEach(() => {
15
- jest.clearAllMocks();
16
- sinon.restore();
17
- });
18
-
19
- describe('Plugin: Remember Current Page in Cookies', () => {
20
- test('has default option flag', () => {
21
- expect(BookReader.defaultOptions.enablePageResume).toEqual(true);
22
- expect(BookReader.defaultOptions.resumeCookiePath).toEqual(null);
23
- });
24
-
25
- test('has added BR property: getResumeValue', () => {
26
- expect(br).toHaveProperty('getResumeValue');
27
- });
28
-
29
- test('has added BR property: updateResumeValue', () => {
30
- expect(br).toHaveProperty('updateResumeValue');
31
- });
32
- });
33
-
34
- describe('updateResumeValue', () => {
35
- /* Mark 2020-05-02
36
- Skipping while confirming with Neeraj
37
- I'm not sure:
38
- - What this test really does
39
- - If the instantiation of the prototype counts as a call
40
- - If so, why would there be a second call
41
- Can't find in production
42
- In this branch .toHaveBeenCalledTimes() === 1
43
- */
44
- test.skip('starts when BookReaderInit is called', () => {
45
- br.updateResumeValue = jest.fn();
46
- br.init();
47
- expect(br.updateResumeValue).toHaveBeenCalledTimes(2);
48
- });
49
-
50
- test('handles cookieName=null', () => {
51
- const { updateResumeValue } = BookReader.prototype;
52
- const setItemSpy = sinon.spy(docCookies, 'setItem');
53
- const fakeBr = { options: { resumeCookiePath: '/details/goody' } };
54
-
55
- updateResumeValue.call(fakeBr, 16);
56
- expect(setItemSpy.callCount).toBe(1);
57
- expect(setItemSpy.args[0].slice(0, 2)).toEqual(['br-resume', 16]);
58
- expect(setItemSpy.args[0][3]).toEqual('/details/goody');
59
- });
60
-
61
- test('handles resumeCookiePath not set', () => {
62
- const setItemSpy = sinon.spy(docCookies, 'setItem');
63
- // Save function
64
- const saveFn = br.getCookiePath;
65
- br.getCookiePath = jest.fn(() => '/details/foo');
66
- br.updateResumeValue(16);
67
- expect(setItemSpy.args[0][3]).toEqual('/details/foo');
68
- // Restore function
69
- br.getCookiePath = saveFn;
70
- });
71
-
72
- test('handles cookie path from URL with decoration', () => {
73
- const complexPathWithPage = '/details/2008ELMValidityStudyFinalReportRevised/Executive%20Summary%20for%20the%20EPT%26ELM%20Validity%20Studie_20100603%20-%20Copy/page/n1/mode/2up';
74
- const complexPath = '/details/2008ELMValidityStudyFinalReportRevised/Executive%20Summary%20for%20the%20EPT%26ELM%20Validity%20Studie_20100603%20-%20Copy';
75
- expect(br.getCookiePath(complexPathWithPage))
76
- .toEqual(complexPath);
77
-
78
- expect(br.getCookiePath('/details/item/mode/1up'))
79
- .toEqual('/details/item');
80
-
81
- expect(br.getCookiePath('/details/item/inside/a/long/path/model/is/used'))
82
- .toEqual('/details/item/inside/a/long/path/model/is/used');
83
-
84
- expect(br.getCookiePath('/details/item/inside/a/long/path/mode/is/used'))
85
- .toEqual('/details/item/inside/a/long/path');
86
- });
87
-
88
- test('handles cookie path from URL with no decoration', () => {
89
- expect(br.getCookiePath('/details/item'))
90
- .toEqual('/details/item');
91
-
92
- expect(br.getCookiePath('/details/item/'))
93
- .toEqual('/details/item/');
94
-
95
- expect(br.getCookiePath('/details/item/almost/any/kind/of/long/path'))
96
- .toEqual('/details/item/almost/any/kind/of/long/path');
97
- });
98
- });
@@ -1,203 +0,0 @@
1
- import sinon from 'sinon';
2
-
3
- import '../../src/BookReader.js';
4
- import { BookreaderWithTextSelection, TextSelectionPlugin, Cache } from '../../src/plugins/plugin.text_selection.js';
5
-
6
-
7
- /** @type {BookReader} */
8
-
9
- // djvu.xml book infos copied from https://ia803103.us.archive.org/14/items/goodytwoshoes00newyiala/goodytwoshoes00newyiala_djvu.xml
10
- const FAKE_XML_1WORD = `<OBJECT data="file://localhost//tmp/derive/goodytwoshoes00newyiala//goodytwoshoes00newyiala.djvu" height="3192" type="image/x.djvu" usemap="goodytwoshoes00newyiala_0001.djvu" width="2454">
11
- <PARAGRAPH><LINE><WORD coords="1216,2768,1256,2640">test</WORD></LINE></PARAGRAPH>
12
- </OBJECT>`;
13
- const FAKE_XML_MULT_WORDS = `<OBJECT data="file://localhost//tmp/derive/goodytwoshoes00newyiala//goodytwoshoes00newyiala.djvu" height="3192" type="image/x.djvu" usemap="goodytwoshoes00newyiala_0001.djvu" width="2454">
14
- <PARAGRAPH><LINE><WORD coords="1216,2768,1256,2640">test1</WORD>
15
- <WORD coords="1400,2768,1500,2640">test2</WORD>
16
- <WORD coords="1600,2768,1700,2640">test3</WORD></LINE></PARAGRAPH></OBJECT>`;
17
- const FAKE_XML_5COORDS = `<OBJECT data="file://localhost//tmp/derive/goodytwoshoes00newyiala//goodytwoshoes00newyiala.djvu" height="3192" type="image/x.djvu" usemap="goodytwoshoes00newyiala_0001.djvu" width="2454">
18
- <PARAGRAPH><LINE><WORD coords="1216,2768,1256,2640,2690">test</WORD></LINE></PARAGRAPH></OBJECT>`;
19
- const FAKE_XML_EMPTY = '';
20
-
21
- describe("Generic tests", () => {
22
- let br;
23
- beforeEach(() => {
24
- document.body.innerHTML = '<div id="BookReader">';
25
- br = new BookreaderWithTextSelection({
26
- data: [
27
- [
28
- { width: 800, height: 1200,
29
- uri: '//archive.org/download/BookReader/img/page001.jpg' },
30
- ],
31
- [
32
- { width: 800, height: 1200,
33
- uri: '//archive.org/download/BookReader/img/page002.jpg' },
34
- { width: 800, height: 1200,
35
- uri: '//archive.org/download/BookReader/img/page003.jpg' },
36
- ],
37
- [
38
- { width: 800, height: 1200,
39
- uri: '//archive.org/download/BookReader/img/page004.jpg' },
40
- { width: 800, height: 1200,
41
- uri: '//archive.org/download/BookReader/img/page005.jpg' },
42
- ]
43
- ],
44
- });
45
- br.init();
46
- });
47
-
48
- test("_createPageContainer overridden function still creates a BRpagecontainer element", () => {
49
- const spy = sinon.spy(br.textSelectionPlugin, 'createTextLayer');
50
- sinon.stub(br.textSelectionPlugin, "getPageText")
51
- .returns($(new DOMParser().parseFromString(FAKE_XML_1WORD, "text/xml")));
52
- const container = br._createPageContainer(1, {});
53
- expect(container).toBeTruthy();
54
- expect(spy.callCount).toBe(1);
55
- });
56
-
57
- // test loading first object from sample data
58
- test("_createPageContainer handles index 0", () => {
59
- const spy = sinon.spy(br.textSelectionPlugin, 'createTextLayer');
60
- br._createPageContainer(0, {});
61
- expect(spy.callCount).toBe(1);
62
- });
63
-
64
- // test loading last object from sample data
65
- test("_createPageContainer handles index -1", () => {
66
- const spy = sinon.spy(br.textSelectionPlugin, 'createTextLayer');
67
- br._createPageContainer(-1, {});
68
- expect(spy.callCount).toBe(0);
69
- });
70
-
71
- test("createTextLayer will render the last page and create text layer properly", async () => {
72
- const $container = br.refs.$brContainer;
73
- sinon.stub(br.textSelectionPlugin, "getPageText")
74
- .returns($(new DOMParser().parseFromString(FAKE_XML_1WORD, "text/xml")));
75
- const pageIndex = br.data.length - 1;
76
- await br.textSelectionPlugin.createTextLayer(pageIndex, $container);
77
- expect($container.find(".textSelectionSVG").length).toBe(1);
78
- expect($container.find(".BRparagElement").length).toBe(1);
79
- });
80
-
81
- test("createTextLayer will not create text layer if there are too many words", async () => {
82
- const $container = br.refs.$brContainer;
83
- const xml = FAKE_XML_1WORD.replace(/<WORD.*<\/WORD>/, FAKE_XML_1WORD.match(/<WORD.*<\/WORD>/)[0].repeat(3000));
84
- sinon.stub(br.textSelectionPlugin, "getPageText")
85
- .returns($(new DOMParser().parseFromString(xml, "text/xml")));
86
- await br.textSelectionPlugin.createTextLayer(0, $container);
87
- expect($container.find(".textSelectionSVG").length).toBe(0);
88
- expect($container.find(".BRparagElement").length).toBe(0);
89
- expect($container.find(".BRwordElement").length).toBe(0);
90
- });
91
-
92
- // GRRRR!!! This is a useful test :( But can't get it working for some reason,
93
- // and the error output is super cryptic.
94
- test.skip("createTextLayer will not create text layer if index is more than total number of book pages", async () => {
95
- const $container = br.refs.$brContainer;
96
- await br.textSelectionPlugin.createTextLayer(150, $container);
97
- expect($container.find(".textSelectionSVG").length).toBe(0);
98
- expect($container.find(".BRparagElement").length).toBe(0);
99
- expect($container.find(".BRwordElement").length).toBe(0);
100
- });
101
-
102
- test("createTextLayer creates an svg layer with paragraph with 1 word element", async () => {
103
- const $container = br.refs.$brContainer;
104
- sinon.stub(br.textSelectionPlugin, "getPageText")
105
- .returns($(new DOMParser().parseFromString(FAKE_XML_1WORD, "text/xml")));
106
- await br.textSelectionPlugin.createTextLayer(1, $container);
107
- expect($container.find(".textSelectionSVG").length).toBe(1);
108
- expect($container.find(".BRparagElement").length).toBe(1);
109
- expect($container.find(".BRwordElement").length).toBe(1);
110
- expect($container.find(".BRwordElement").text()).toBe("test");
111
- });
112
-
113
- test("createTextLayer creates an svg layer with paragraph with multiple word elements", async () => {
114
- const $container = br.refs.$brContainer;
115
- sinon.stub(br.textSelectionPlugin, "getPageText")
116
- .returns($(new DOMParser().parseFromString(FAKE_XML_MULT_WORDS, "text/xml")));
117
- await br.textSelectionPlugin.createTextLayer(2, $container);
118
- expect($container.find(".textSelectionSVG").length).toBe(1);
119
- expect($container.find(".BRparagElement").length).toBe(1);
120
- expect($container.find(".BRwordElement").length).toBe(5);
121
- expect($container.find(".BRwordElement").last()).not.toBe(" ");
122
- });
123
-
124
- test("createTextLayer creates an svg layer with paragraph with word with 5 params coordinates", async () => {
125
- const $container = br.refs.$brContainer;
126
- sinon.stub(br.textSelectionPlugin, "getPageText")
127
- .returns($(new DOMParser().parseFromString(FAKE_XML_5COORDS, "text/xml")));
128
- await br.textSelectionPlugin.createTextLayer(3, $container);
129
- expect($container.find(".textSelectionSVG").length).toBe(1);
130
- expect($container.find(".BRparagElement").length).toBe(1);
131
- expect($container.find(".BRwordElement").length).toBe(1);
132
- });
133
-
134
- test("createTextLayer can handle empty xml", async () => {
135
- const $container = br.refs.$brContainer;
136
- sinon.stub(br.textSelectionPlugin, "getPageText")
137
- .returns($(new DOMParser().parseFromString(FAKE_XML_EMPTY, "text/xml")));
138
- await br.textSelectionPlugin.createTextLayer(4, $container);
139
- expect($container.find(".textSelectionSVG").length).toBe(1);
140
- expect($container.find(".BRparagElement").length).toBe(0);
141
- expect($container.find(".BRwordElement").length).toBe(0);
142
- });
143
-
144
- const LONG_PRESS_DURATION = 500;
145
- test("calling stopPageFlip does not allow long click to flip the page", () => {
146
- const $container = br.refs.$brContainer;
147
- br.textSelectionPlugin.stopPageFlip($container);
148
- const currIndex = br.currentIndex();
149
- $container.find("BRwordElement").mousedown();
150
- // Waits for long press
151
- setTimeout(() => {
152
- $container.find("BRwordElement").mousedown();
153
- // Waits for flipping animation
154
- setTimeout(() => {
155
- expect(br.currentIndex()).toBe(currIndex);
156
- }, 2000);
157
- }, LONG_PRESS_DURATION);
158
- });
159
- });
160
-
161
- describe("textSelectionPlugin constructor", () => {
162
- test("textSelectionPlugin constructor with firefox browser", () => {
163
- const tsp = new TextSelectionPlugin({}, {}, true);
164
- expect(tsp.djvuPagesPromise).toBe(null);
165
- expect(tsp.svgParagraphElement).toBe("g");
166
- expect(tsp.svgWordElement).toBe("text");
167
- });
168
-
169
- test("textSelectionPlugin constructor not on firefox browser", () => {
170
- const tsp = new TextSelectionPlugin({}, {}, false);
171
- expect(tsp.djvuPagesPromise).toBe(null);
172
- expect(tsp.svgParagraphElement).toBe("text");
173
- expect(tsp.svgWordElement).toBe("tspan");
174
- });
175
- });
176
-
177
- describe("Cache", () => {
178
- test('Adding works', () => {
179
- const c = new Cache(10);
180
- c.add(35);
181
- expect(c.entries).toEqual([35]);
182
- });
183
-
184
- test('Size does not grow beyond limit', () => {
185
- const c = new Cache(2);
186
- c.add(35);
187
- c.add(32);
188
- c.add(12);
189
- c.add(11);
190
- c.add(112);
191
- expect(c.entries).toHaveLength(2);
192
- });
193
-
194
- test('Oldest evicted first', () => {
195
- const c = new Cache(2);
196
- c.add(35);
197
- c.add(32);
198
- c.add(12);
199
- c.add(12);
200
- c.add(10);
201
- expect(c.entries).toEqual([12, 10]);
202
- });
203
- });
@@ -1,129 +0,0 @@
1
-
2
- import BookReader from '../../src/BookReader.js';
3
- import '../../src/plugins/plugin.url.js';
4
-
5
- let br;
6
- beforeAll(() => {
7
- document.body.innerHTML = '<div id="BookReader">';
8
- br = new BookReader();
9
- });
10
-
11
- afterEach(() => {
12
- jest.clearAllMocks();
13
- });
14
-
15
- describe('Plugin: URL controller', () => {
16
- test('has default option flag', () => {
17
- expect(BookReader.defaultOptions.enableUrlPlugin).toEqual(true);
18
- });
19
-
20
- test('adds url specific fields to BR', () => {
21
- const { defaultOptions } = BookReader;
22
- expect(defaultOptions).toHaveProperty('urlTrackIndex0');
23
- expect(defaultOptions).toHaveProperty('urlTrackedParams');
24
- expect(defaultOptions).toHaveProperty('urlHistoryBasePath');
25
- expect(defaultOptions).toHaveProperty('urlMode');
26
- expect(defaultOptions).toHaveProperty('updateWindowTitle');
27
- expect(defaultOptions).toHaveProperty('defaults');
28
- expect(defaultOptions).toHaveProperty('bookId');
29
- });
30
-
31
- test('has a whitelist of params that it tracks', () => {
32
- ['page', 'search', 'mode', 'region', 'highlight'];
33
- const { defaultOptions: { urlTrackedParams } } = BookReader;
34
- expect(Array.isArray(urlTrackedParams)).toEqual(true);
35
- expect(urlTrackedParams.find(param => param === 'page')).toBeTruthy();
36
- expect(urlTrackedParams.find(param => param === 'search')).toBeTruthy();
37
- expect(urlTrackedParams.find(param => param === 'mode')).toBeTruthy();
38
- expect(urlTrackedParams.find(param => param === 'region')).toBeTruthy();
39
- expect(urlTrackedParams.find(param => param === 'highlight')).toBeTruthy();
40
- });
41
-
42
- test('initializes polling for url changes if using hash', () => {
43
- BookReader.prototype.urlStartLocationPolling = jest.fn();
44
- br.init();
45
-
46
- expect(br.urlStartLocationPolling).toHaveBeenCalled();
47
- });
48
-
49
- test('updates URL when index changes', () => {
50
- window.history.replaceState = jest.fn();
51
- BookReader.prototype.currentIndex = jest.fn(() => 1);
52
- BookReader.prototype.urlReadFragment = jest.fn(() => '/page/2/mode/1up');
53
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
54
- index: 88,
55
- mode: 1,
56
- search: ''
57
- }));
58
- br.options.urlMode = 'history';
59
- br.init();
60
- br.urlUpdateFragment();
61
-
62
- expect(window.history.replaceState).toHaveBeenCalled();
63
- });
64
-
65
- test('updates URL when mode changes', () => {
66
- window.history.replaceState = jest.fn();
67
- BookReader.prototype.currentIndex = jest.fn(() => 1);
68
- BookReader.prototype.urlReadFragment = jest.fn(() => '/page/2/mode/1up');
69
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
70
- index: 2,
71
- mode: 2,
72
- search: ''
73
- }));
74
- br.options.urlMode = 'history';
75
- br.init();
76
- br.urlUpdateFragment();
77
-
78
- expect(window.history.replaceState).toHaveBeenCalled();
79
- });
80
-
81
- test('updates URL when search changes', () => {
82
- window.history.replaceState = jest.fn();
83
- BookReader.prototype.currentIndex = jest.fn(() => 1);
84
- BookReader.prototype.urlReadFragment = jest.fn(() => '');
85
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
86
- index: 1,
87
- mode: 2,
88
- search: 'foo'
89
- }));
90
- BookReader.prototype.search = jest.fn();
91
- br.options.urlMode = 'history';
92
- br.init();
93
- br.urlUpdateFragment();
94
-
95
- expect(window.history.replaceState).toHaveBeenCalled();
96
- });
97
-
98
- test('does not update URL when search in query string', () => {
99
- window.history.replaceState = jest.fn();
100
- BookReader.prototype.currentIndex = jest.fn(() => 1);
101
- BookReader.prototype.urlReadFragment = jest.fn(() => 'mode/2up');
102
- BookReader.prototype.getLocationSearch = jest.fn(() => '?q=foo');
103
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
104
- index: 1,
105
- mode: 2,
106
- search: 'foo'
107
- }));
108
- BookReader.prototype.search = jest.fn();
109
- br.options.initialSearchTerm = 'foo';
110
- br.options.urlMode = 'history';
111
- br.init();
112
- br.urlUpdateFragment();
113
-
114
- expect(window.history.replaceState).toHaveBeenCalledTimes(0);
115
- });
116
-
117
- test('only q= param is selected from url query params', () => {
118
- const INTIAL_URL = "http://127.0.0.1:8080/BookReaderDemo/demo-internetarchive.html?ocaid=adventuresofoli00dick&q=foo";
119
- const result = br.urlParamsFiltersOnlySearch(INTIAL_URL);
120
- expect(result).toBe("?q=foo");
121
- });
122
-
123
- test('only q= param is selected from url query params with special character', () => {
124
- const INTIAL_URL = "http://127.0.0.1:8080/BookReaderDemo/demo-internetarchive.html?ocaid=adventuresofoli00dick&q=foo%24%24";
125
- const result = br.urlParamsFiltersOnlySearch(INTIAL_URL);
126
- expect(result).toBe("?q=foo%24%24");
127
- });
128
- });
129
-