@internetarchive/bookreader 5.0.0-11-multiple-files → 5.0.0-110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +616 -1467
  4. package/BookReader/BookReader.js +2 -21564
  5. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  6. package/BookReader/BookReader.js.map +1 -1
  7. package/BookReader/bergamot-translator-worker.js +2966 -0
  8. package/BookReader/bergamot-translator-worker.wasm +0 -0
  9. package/BookReader/hypothesis/LICENSE +50 -0
  10. package/BookReader/hypothesis/README.md +55 -0
  11. package/BookReader/hypothesis/build/boot.js +1 -0
  12. package/BookReader/hypothesis/build/manifest.json +20 -0
  13. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
  14. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  15. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
  16. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  17. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
  18. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  19. package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
  20. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  35. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  36. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  37. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  38. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  39. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  40. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  41. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  42. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  43. package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
  44. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  45. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
  46. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  47. package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
  48. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  49. package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
  50. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  51. package/BookReader/hypothesis/package.json +126 -0
  52. package/BookReader/ia-bookreader-bundle.js +1907 -0
  53. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
  54. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  55. package/BookReader/icons/1up.svg +1 -12
  56. package/BookReader/icons/2up.svg +1 -15
  57. package/BookReader/icons/advance.svg +3 -26
  58. package/BookReader/icons/chevron-right.svg +1 -1
  59. package/BookReader/icons/close-circle-dark.svg +1 -0
  60. package/BookReader/icons/close-circle.svg +1 -1
  61. package/BookReader/icons/fullscreen.svg +1 -17
  62. package/BookReader/icons/fullscreen_exit.svg +1 -17
  63. package/BookReader/icons/hamburger.svg +1 -15
  64. package/BookReader/icons/left-arrow.svg +1 -12
  65. package/BookReader/icons/magnify-minus.svg +1 -16
  66. package/BookReader/icons/magnify-plus.svg +1 -17
  67. package/BookReader/icons/magnify.svg +1 -15
  68. package/BookReader/icons/pause.svg +1 -23
  69. package/BookReader/icons/play.svg +1 -22
  70. package/BookReader/icons/playback-speed.svg +1 -34
  71. package/BookReader/icons/read-aloud.svg +1 -22
  72. package/BookReader/icons/review.svg +3 -22
  73. package/BookReader/icons/slider-toggle.svg +1 -0
  74. package/BookReader/icons/thumbnails.svg +1 -17
  75. package/BookReader/icons/voice.svg +1 -0
  76. package/BookReader/icons/volume-full.svg +1 -22
  77. package/BookReader/images/BRicons.svg +5 -94
  78. package/BookReader/images/books_graphic.svg +1 -177
  79. package/BookReader/images/hypothesis.ico +0 -0
  80. package/BookReader/images/icon_book.svg +1 -12
  81. package/BookReader/images/icon_bookmark.svg +1 -12
  82. package/BookReader/images/icon_experiment.svg +1 -0
  83. package/BookReader/images/icon_gear.svg +1 -14
  84. package/BookReader/images/icon_hamburger.svg +1 -20
  85. package/BookReader/images/icon_home.svg +1 -21
  86. package/BookReader/images/icon_info.svg +1 -11
  87. package/BookReader/images/icon_one_page.svg +1 -8
  88. package/BookReader/images/icon_pause.svg +1 -1
  89. package/BookReader/images/icon_play.svg +1 -1
  90. package/BookReader/images/icon_playback-rate.svg +1 -15
  91. package/BookReader/images/icon_search_button.svg +1 -8
  92. package/BookReader/images/icon_share.svg +1 -9
  93. package/BookReader/images/icon_skip-ahead.svg +1 -6
  94. package/BookReader/images/icon_skip-back.svg +2 -13
  95. package/BookReader/images/icon_speaker.svg +1 -18
  96. package/BookReader/images/icon_speaker_open.svg +1 -10
  97. package/BookReader/images/icon_thumbnails.svg +1 -12
  98. package/BookReader/images/icon_toc.svg +1 -5
  99. package/BookReader/images/icon_two_pages.svg +1 -9
  100. package/BookReader/images/marker_chap-off.svg +1 -11
  101. package/BookReader/images/marker_chap-on.svg +1 -11
  102. package/BookReader/images/marker_srch-on.svg +1 -11
  103. package/BookReader/images/translate.svg +1 -0
  104. package/BookReader/images/unviewable_page.png +0 -0
  105. package/BookReader/jquery-3.js +2 -0
  106. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  107. package/BookReader/plugins/plugin.archive_analytics.js +1 -172
  108. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js +1 -165
  110. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  111. package/BookReader/plugins/plugin.chapters.js +19 -301
  112. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  113. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  114. package/BookReader/plugins/plugin.experiments.js +3 -0
  115. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  116. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  117. package/BookReader/plugins/plugin.iframe.js +1 -74
  118. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  119. package/BookReader/plugins/plugin.iiif.js +2 -0
  120. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  121. package/BookReader/plugins/plugin.resume.js +1 -368
  122. package/BookReader/plugins/plugin.resume.js.map +1 -1
  123. package/BookReader/plugins/plugin.search.js +2 -1420
  124. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  125. package/BookReader/plugins/plugin.search.js.map +1 -1
  126. package/BookReader/plugins/plugin.text_selection.js +2 -1080
  127. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  128. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  129. package/BookReader/plugins/plugin.translate.js +137 -0
  130. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  131. package/BookReader/plugins/plugin.translate.js.map +1 -0
  132. package/BookReader/plugins/plugin.tts.js +2 -9193
  133. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  134. package/BookReader/plugins/plugin.tts.js.map +1 -1
  135. package/BookReader/plugins/plugin.url.js +1 -269
  136. package/BookReader/plugins/plugin.url.js.map +1 -1
  137. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  138. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  139. package/BookReader/plugins/translator-worker.js +2 -0
  140. package/BookReader/plugins/translator-worker.js.map +1 -0
  141. package/BookReader/silence.mp3 +0 -0
  142. package/BookReader/translator-worker.js +475 -0
  143. package/BookReader/webcomponents-bundle.js +3 -0
  144. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  145. package/BookReader/webcomponents-bundle.js.map +1 -0
  146. package/README.md +14 -3
  147. package/jsconfig.json +19 -0
  148. package/package.json +92 -70
  149. package/src/BookReader/BookModel.js +92 -46
  150. package/src/BookReader/DragScrollable.js +233 -0
  151. package/src/BookReader/ImageCache.js +49 -16
  152. package/src/BookReader/Mode1Up.js +66 -356
  153. package/src/BookReader/Mode1UpLit.js +392 -0
  154. package/src/BookReader/Mode2Up.js +87 -1315
  155. package/src/BookReader/Mode2UpLit.js +788 -0
  156. package/src/BookReader/ModeAbstract.js +43 -0
  157. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  158. package/src/BookReader/ModeSmoothZoom.js +312 -0
  159. package/src/BookReader/ModeThumb.js +30 -16
  160. package/src/BookReader/Navbar/Navbar.js +201 -76
  161. package/src/BookReader/PageContainer.js +120 -23
  162. package/src/BookReader/ReduceSet.js +3 -3
  163. package/src/BookReader/Toolbar/Toolbar.js +19 -41
  164. package/src/BookReader/events.js +3 -3
  165. package/src/BookReader/options.js +94 -17
  166. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  167. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  168. package/src/BookReader/utils/SelectionObserver.js +45 -0
  169. package/src/BookReader/utils/classes.js +1 -1
  170. package/src/BookReader/utils.js +141 -13
  171. package/src/BookReader.js +711 -1241
  172. package/src/BookReaderPlugin.js +52 -0
  173. package/src/assets/icons/close-circle-dark.svg +1 -0
  174. package/src/assets/icons/magnify-minus.svg +3 -7
  175. package/src/assets/icons/magnify-plus.svg +3 -7
  176. package/src/assets/icons/slider-toggle.svg +1 -0
  177. package/src/assets/icons/voice.svg +1 -0
  178. package/src/assets/images/hypothesis.ico +0 -0
  179. package/src/assets/images/icon_experiment.svg +1 -0
  180. package/src/assets/images/translate.svg +1 -0
  181. package/src/assets/images/unviewable_page.png +0 -0
  182. package/src/assets/silence.mp3 +0 -0
  183. package/src/css/BookReader.scss +1 -17
  184. package/src/css/_BRBookmarks.scss +1 -1
  185. package/src/css/_BRComponent.scss +1 -1
  186. package/src/css/_BRicon.scss +8 -2
  187. package/src/css/_BRmain.scss +33 -27
  188. package/src/css/_BRnav.scss +74 -70
  189. package/src/css/_BRpages.scss +171 -42
  190. package/src/css/_BRsearch.scss +69 -235
  191. package/src/css/_BRtoolbar.scss +5 -5
  192. package/src/css/_TextSelection.scss +129 -24
  193. package/src/css/_colorbox.scss +2 -2
  194. package/src/css/_controls.scss +24 -7
  195. package/src/css/_icons.scss +14 -1
  196. package/src/{BookNavigator/assets → css}/button-base.js +10 -3
  197. package/src/css/icon_checkmark.js +9 -0
  198. package/src/css/sharedStyles.js +15 -0
  199. package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
  200. package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +29 -25
  201. package/src/ia-bookreader/ia-bookreader.js +666 -0
  202. package/src/ia-bookreader/sharing.js +27 -0
  203. package/src/ia-bookreader/viewable-files.js +98 -0
  204. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
  205. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
  206. package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
  207. package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
  208. package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +44 -32
  209. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  210. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +5 -10
  211. package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
  212. package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
  213. package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
  214. package/src/plugins/plugin.archive_analytics.js +84 -78
  215. package/src/plugins/plugin.autoplay.js +99 -104
  216. package/src/plugins/plugin.chapters.js +310 -201
  217. package/src/plugins/plugin.experiments.js +321 -0
  218. package/src/plugins/plugin.iframe.js +1 -1
  219. package/src/plugins/plugin.iiif.js +141 -0
  220. package/src/plugins/plugin.resume.js +53 -50
  221. package/src/plugins/plugin.text_selection.js +522 -219
  222. package/src/plugins/plugin.vendor-fullscreen.js +7 -7
  223. package/src/plugins/search/plugin.search.js +380 -360
  224. package/src/{BookNavigator → plugins}/search/search-provider.js +94 -32
  225. package/src/{BookNavigator → plugins}/search/search-results.js +108 -90
  226. package/src/plugins/search/utils.js +50 -0
  227. package/src/plugins/search/view.js +79 -210
  228. package/src/plugins/translate/TranslationManager.js +164 -0
  229. package/src/plugins/translate/plugin.translate.js +512 -0
  230. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  231. package/src/plugins/tts/FestivalTTSEngine.js +21 -31
  232. package/src/plugins/tts/PageChunk.js +33 -21
  233. package/src/plugins/tts/PageChunkIterator.js +11 -17
  234. package/src/plugins/tts/WebTTSEngine.js +131 -91
  235. package/src/plugins/tts/plugin.tts.js +345 -350
  236. package/src/plugins/tts/utils.js +77 -49
  237. package/src/plugins/url/UrlPlugin.js +191 -0
  238. package/src/plugins/{plugin.url.js → url/plugin.url.js} +47 -18
  239. package/src/util/TextSelectionManager.js +282 -0
  240. package/src/util/browserSniffing.js +33 -1
  241. package/src/util/cache.js +20 -0
  242. package/src/util/docCookies.js +21 -2
  243. package/src/util/lit.js +15 -0
  244. package/src/util/strings.js +1 -0
  245. package/.babelrc +0 -12
  246. package/.dependabot/config.yml +0 -6
  247. package/.eslintrc.js +0 -49
  248. package/.gitattributes +0 -2
  249. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  250. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  251. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  252. package/.github/workflows/node.js.yml +0 -28
  253. package/.github/workflows/npm-publish.yml +0 -47
  254. package/.testcaferc.json +0 -5
  255. package/BookReader/bookreader-component-bundle.js +0 -14330
  256. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  257. package/BookReader/bookreader-component-bundle.js.map +0 -1
  258. package/BookReader/icons/sort-ascending.svg +0 -1
  259. package/BookReader/icons/sort-descending.svg +0 -1
  260. package/BookReader/jquery-1.10.1.js +0 -108
  261. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  262. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  263. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  264. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  265. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  266. package/BookReaderDemo/BookReaderDemo.css +0 -41
  267. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  268. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  269. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  270. package/BookReaderDemo/IIIFBookReader.js +0 -207
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  273. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  274. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  275. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  276. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  277. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  278. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  279. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  280. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  281. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  282. package/BookReaderDemo/demo-advanced.html +0 -33
  283. package/BookReaderDemo/demo-autoplay.html +0 -38
  284. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  285. package/BookReaderDemo/demo-embed.html +0 -26
  286. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  287. package/BookReaderDemo/demo-fullscreen.html +0 -33
  288. package/BookReaderDemo/demo-iiif.html +0 -34
  289. package/BookReaderDemo/demo-iiif.js +0 -26
  290. package/BookReaderDemo/demo-internetarchive.html +0 -74
  291. package/BookReaderDemo/demo-multiple.html +0 -43
  292. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  293. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  294. package/BookReaderDemo/demo-simple.html +0 -34
  295. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  296. package/BookReaderDemo/immersion-1up.html +0 -64
  297. package/BookReaderDemo/immersion-mode.html +0 -35
  298. package/BookReaderDemo/toggle_controls.html +0 -53
  299. package/BookReaderDemo/view_mode.html +0 -39
  300. package/BookReaderDemo/viewmode-cycle.html +0 -41
  301. package/CHANGELOG.md +0 -476
  302. package/CONTRIBUTING.md +0 -7
  303. package/codecov.yml +0 -17
  304. package/index.html +0 -31
  305. package/karma.conf.js +0 -23
  306. package/screenshot.png +0 -0
  307. package/scripts/postversion.js +0 -10
  308. package/scripts/preversion.js +0 -14
  309. package/scripts/version.js +0 -26
  310. package/src/BookNavigator/BookModel.js +0 -14
  311. package/src/BookNavigator/BookNavigator.js +0 -451
  312. package/src/BookNavigator/assets/book-loader.js +0 -27
  313. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  314. package/src/BookNavigator/assets/icon_close.js +0 -3
  315. package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
  316. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  317. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  318. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  319. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  320. package/src/BookNavigator/search/a-search-result.js +0 -55
  321. package/src/BookNavigator/volumes/volumes-provider.js +0 -75
  322. package/src/BookNavigator/volumes/volumes.js +0 -161
  323. package/src/BookReader/DebugConsole.js +0 -54
  324. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  325. package/src/ItemNavigator/ItemNavigator.js +0 -372
  326. package/src/ItemNavigator/providers/sharing.js +0 -29
  327. package/src/assets/icons/sort-ascending.svg +0 -1
  328. package/src/assets/icons/sort-descending.svg +0 -1
  329. package/src/css/_MobileNav.scss +0 -194
  330. package/src/dragscrollable-br.js +0 -261
  331. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  332. package/src/plugins/plugin.mobile_nav.js +0 -287
  333. package/tests/BookReader/BookModel.test.js +0 -312
  334. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  335. package/tests/BookReader/DebugConsole.test.js +0 -25
  336. package/tests/BookReader/ImageCache.test.js +0 -150
  337. package/tests/BookReader/Mode1Up.test.js +0 -164
  338. package/tests/BookReader/Mode2Up.test.js +0 -247
  339. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  340. package/tests/BookReader/PageContainer.test.js +0 -115
  341. package/tests/BookReader/ReduceSet.test.js +0 -38
  342. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  343. package/tests/BookReader/utils/classes.test.js +0 -88
  344. package/tests/BookReader/utils.test.js +0 -109
  345. package/tests/BookReader.options.test.js +0 -39
  346. package/tests/BookReader.test.js +0 -301
  347. package/tests/e2e/README.md +0 -75
  348. package/tests/e2e/autoplay.test.js +0 -13
  349. package/tests/e2e/base.test.js +0 -35
  350. package/tests/e2e/helpers/base.js +0 -258
  351. package/tests/e2e/helpers/debug.js +0 -13
  352. package/tests/e2e/helpers/desktopSearch.js +0 -72
  353. package/tests/e2e/helpers/mobileSearch.js +0 -85
  354. package/tests/e2e/helpers/mockSearch.js +0 -93
  355. package/tests/e2e/helpers/rightToLeft.js +0 -29
  356. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  357. package/tests/e2e/models/BookReader.js +0 -11
  358. package/tests/e2e/models/Navigation.js +0 -56
  359. package/tests/e2e/rightToLeft.test.js +0 -20
  360. package/tests/e2e/viewmode.test.js +0 -37
  361. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  362. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  363. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  364. package/tests/karma/BookNavigator/search-results.test.js +0 -240
  365. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  366. package/tests/karma/BookNavigator/volumes.test.js +0 -133
  367. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  368. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  369. package/tests/plugins/plugin.autoplay.test.js +0 -52
  370. package/tests/plugins/plugin.chapters.test.js +0 -130
  371. package/tests/plugins/plugin.iframe.test.js +0 -42
  372. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  373. package/tests/plugins/plugin.resume.test.js +0 -98
  374. package/tests/plugins/plugin.text_selection.test.js +0 -203
  375. package/tests/plugins/plugin.url.test.js +0 -129
  376. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  377. package/tests/plugins/search/plugin.search.test.js +0 -166
  378. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  379. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  380. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  381. package/tests/plugins/tts/PageChunk.test.js +0 -57
  382. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  383. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  384. package/tests/plugins/tts/utils.test.js +0 -133
  385. package/tests/util/browserSniffing.test.js +0 -56
  386. package/tests/util/docCookies.test.js +0 -15
  387. package/tests/util/strings.test.js +0 -63
  388. package/tests/utils.js +0 -42
  389. package/webpack.config.js +0 -86
@@ -1,247 +0,0 @@
1
-
2
- import sinon from 'sinon';
3
- import { deepCopy } from '../utils.js';
4
- import BookReader from '../../src/BookReader.js';
5
- /** @typedef {import('../../src/BookReader/options.js').BookReaderOptions} BookReaderOptions */
6
-
7
- beforeAll(() => {
8
- global.alert = jest.fn();
9
- })
10
- afterEach(() => {
11
- jest.restoreAllMocks();
12
- sinon.restore();
13
- });
14
-
15
- /** @type {BookReaderOptions['data']} */
16
- const SAMPLE_DATA = [
17
- [
18
- { width: 123, height: 123, uri: 'https://archive.org/image0.jpg', pageNum: '1' },
19
- ],
20
- [
21
- { width: 123, height: 123, uri: 'https://archive.org/image1.jpg', pageNum: '2' },
22
- { width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '3' },
23
- ],
24
- [
25
- { width: 123, height: 123, uri: 'https://archive.org/image3.jpg', pageNum: '4' },
26
- { width: 123, height: 123, uri: 'https://archive.org/image4.jpg', pageNum: '5' },
27
- ],
28
- [
29
- { width: 123, height: 123, uri: 'https://archive.org/image5.jpg', pageNum: '6' },
30
- ],
31
- ];
32
-
33
-
34
- describe('zoom', () => {
35
- const br = new BookReader({ data: SAMPLE_DATA });
36
- br.init();
37
-
38
- const stopAnim = sinon.spy(br, 'stopFlipAnimations');
39
- const resizeSpread = sinon.spy(br._modes.mode2Up, 'resizeSpread');
40
- br._modes.mode2Up.zoom('in');
41
-
42
- test('stops animations when zooming', () => {
43
- expect(stopAnim.callCount).toBe(1);
44
- });
45
- test('always redraws when zooming', () => {
46
- expect(resizeSpread.callCount).toBe(0);
47
- });
48
- });
49
-
50
- describe('prefetch', () => {
51
- test('loads nearby pages', () => {
52
- const br = new BookReader({ data: SAMPLE_DATA });
53
- const mode2Up = br._modes.mode2Up;
54
- br.init();
55
- mode2Up.prefetch();
56
- expect(Object.keys(mode2Up.pageContainers).length).toBeGreaterThan(2);
57
- });
58
-
59
- test('works when at end of book', () => {
60
- const br = new BookReader({ data: SAMPLE_DATA });
61
- const mode2Up = br._modes.mode2Up;
62
- br.init();
63
- br.jumpToIndex(-1);
64
- mode2Up.prefetch();
65
- expect(Object.keys(mode2Up.pageContainers).length).toBeGreaterThan(2);
66
- });
67
-
68
- test('skips consecutive unviewables', () => {
69
- const data = deepCopy(SAMPLE_DATA);
70
- data[1].forEach(page => page.viewable = false);
71
- const br = new BookReader({ data });
72
- const mode2Up = br._modes.mode2Up;
73
- br.init();
74
- mode2Up.prefetch();
75
- expect(mode2Up.pageContainers).not.toContain(2);
76
- });
77
- });
78
-
79
- describe('draw 2up leaves', () => {
80
- test('calls `drawLeafs` on init as default', () => {
81
- const br = new BookReader({ data: SAMPLE_DATA });
82
- const drawLeafs = sinon.spy(br._modes.mode2Up, 'drawLeafs');
83
-
84
- br.init();
85
- expect(drawLeafs.callCount).toBe(1);
86
- })
87
-
88
- test('sets `this.displayedIndices`', () => {
89
- const extremelyWrongValueForDisplayedIndices = null;
90
- const br = new BookReader({ data: SAMPLE_DATA });
91
-
92
- br.init();
93
- br.displayedIndices = extremelyWrongValueForDisplayedIndices;
94
- expect(br.displayedIndices).toBe(extremelyWrongValueForDisplayedIndices);
95
-
96
- br._modes.mode2Up.drawLeafs();
97
-
98
- expect(br.displayedIndices).not.toBe(extremelyWrongValueForDisplayedIndices);
99
- expect(br.displayedIndices.length).toBe(2); // is array
100
- expect(br.displayedIndices).toEqual([-1, 0]); // default to starting index on right, placeholder for left
101
- })
102
- });
103
-
104
- describe('resizeSpread', () => {
105
- test('only resizes spread', () => {
106
- const br = new BookReader({ data: SAMPLE_DATA });
107
- br.init();
108
- const resizeBRcontainer = sinon.spy(br, 'resizeBRcontainer');
109
- const calculateSpreadSize = sinon.spy(br._modes.mode2Up, 'calculateSpreadSize');
110
- const drawLeafs = sinon.spy(br._modes.mode2Up, 'drawLeafs');
111
- const centerView = sinon.spy(br._modes.mode2Up, 'centerView');
112
-
113
- br._modes.mode2Up.resizeSpread();
114
- expect(drawLeafs.callCount).toBe(0); // no draw
115
- expect(resizeBRcontainer.callCount).toBe(1);
116
- expect(calculateSpreadSize.callCount).toBe(1);
117
- expect(centerView.callCount).toBe(1);
118
- });
119
- });
120
-
121
- describe('2up Container sizing', () => {
122
- test('baseLeafCss', () => {
123
- const br = new BookReader({ data: SAMPLE_DATA });
124
- br.init();
125
- br.calculateSpreadSize();
126
- expect(Object.keys(br._modes.mode2Up.baseLeafCss)).toEqual(['position', 'right', 'top', 'zIndex']);
127
- });
128
- test('heightCss', () => {
129
- const br = new BookReader({ data: SAMPLE_DATA });
130
- br.init();
131
- br.calculateSpreadSize();
132
- const heightStub = 1000;
133
- br.twoPage.height = heightStub;
134
- expect(Object.keys(br._modes.mode2Up.heightCss)).toEqual(['height']);
135
- expect(br._modes.mode2Up.heightCss).toEqual({height: `${heightStub}px`});
136
- });
137
- describe('left side', () => {
138
- const br = new BookReader({ data: SAMPLE_DATA });
139
- br.init();
140
- br.calculateSpreadSize();
141
-
142
- test('leftLeafCss', () => {
143
- expect(Object.keys(br._modes.mode2Up.leftLeafCss)).toEqual([
144
- 'position',
145
- 'right',
146
- 'top',
147
- 'zIndex',
148
- 'height',
149
- 'left',
150
- 'width',
151
- ]);
152
- });
153
- test('leafEdgeLCss', () => {
154
- expect(Object.keys(br._modes.mode2Up.leafEdgeLCss)).toEqual([
155
- 'height',
156
- 'width',
157
- 'left',
158
- 'top',
159
- 'border'
160
- ]);
161
- });
162
- });
163
- describe('right side', () => {
164
- const br = new BookReader({ data: SAMPLE_DATA });
165
- br.init();
166
- br.calculateSpreadSize();
167
-
168
- test('rightLeafCss', () => {
169
- expect(Object.keys(br._modes.mode2Up.rightLeafCss)).toEqual([
170
- 'position',
171
- 'right',
172
- 'top',
173
- 'zIndex',
174
- 'height',
175
- 'left',
176
- 'width',
177
- ]);
178
- });
179
- test('leafEdgeRCss', () => {
180
- expect(Object.keys(br._modes.mode2Up.leafEdgeRCss)).toEqual([
181
- 'height',
182
- 'width',
183
- 'left',
184
- 'top',
185
- 'border'
186
- ]);
187
- });
188
- });
189
- describe('full width container, overlay + spine', () => {
190
- test('mainContainerCss', () => {
191
- const br = new BookReader({ data: SAMPLE_DATA });
192
- br.init();
193
- br.calculateSpreadSize();
194
-
195
- expect(Object.keys(br._modes.mode2Up.mainContainerCss)).toEqual(['height', 'width', 'position']);
196
- });
197
- test('spreadCoverCss', () => {
198
- const br = new BookReader({ data: SAMPLE_DATA });
199
- br.init();
200
- br.calculateSpreadSize();
201
- expect(Object.keys(br._modes.mode2Up.spreadCoverCss)).toEqual(['width', 'height', 'visibility']);
202
- });
203
- test('spineCss', () => {
204
- const br = new BookReader({ data: SAMPLE_DATA });
205
- br.init();
206
- br.calculateSpreadSize();
207
- expect(Object.keys(br._modes.mode2Up.spineCss)).toEqual(['width', 'height', 'left', 'top']);
208
- });
209
- });
210
- });
211
-
212
- describe('prepareTwoPageView', () => {
213
- describe('drawing spread', () => {
214
- test('always draws new spread if `drawNewSpread` is true ', () => {
215
- const br = new BookReader({ data: SAMPLE_DATA });
216
- const mode2Up = br._modes.mode2Up;
217
- br.init();
218
- const drawLeafs = sinon.spy(mode2Up, 'drawLeafs');
219
- const resizeSpread = sinon.spy(mode2Up, 'resizeSpread');
220
- const calculateSpreadSize = sinon.spy(mode2Up, 'calculateSpreadSize');
221
- const prunePageContainers = sinon.spy(mode2Up, 'prunePageContainers');
222
- const prefetch = sinon.spy(mode2Up, 'prefetch');
223
- const bindGestures = sinon.spy(br, 'bindGestures');
224
- const centerView = sinon.spy(mode2Up, 'centerView');
225
- const preparePopUp = sinon.spy(mode2Up, 'preparePopUp');
226
- const updateBrClasses = sinon.spy(br, 'updateBrClasses');
227
-
228
- br.prepareTwoPageView(undefined, undefined, true);
229
- expect(prefetch.callCount).toBe(1);
230
-
231
- expect(resizeSpread.callCount).toBe(0);
232
- expect(drawLeafs.callCount).toBe(1);
233
- expect(calculateSpreadSize.callCount).toBe(1);
234
- expect(prunePageContainers.callCount).toBe(1);
235
- expect(bindGestures.callCount).toBe(1);
236
- expect(centerView.callCount).toBe(1);
237
- expect(preparePopUp.callCount).toBe(1);
238
- expect(updateBrClasses.callCount).toBe(1);
239
- });
240
- });
241
- });
242
-
243
- test('uses ImageCache', () => {
244
- const br = new BookReader({ data: SAMPLE_DATA });
245
- br.init();
246
- expect(Object.keys(br.imageCache.cache).length).toBeGreaterThan(2);
247
- });
@@ -1,169 +0,0 @@
1
- import sinon from 'sinon';
2
- import { getNavPageNumHtml } from '../../../src/BookReader/Navbar/Navbar.js';
3
- import BookReader from '../../../src/BookReader.js';
4
-
5
- describe('getNavPageNumHtml', () => {
6
- const f = getNavPageNumHtml;
7
- test('handle n-prefixed page numbers', () => {
8
- expect(f(3, 40, 'n3', '', 40)).toBe('Page (4 of 40)');
9
- });
10
-
11
- test('handle regular page numbers', () => {
12
- expect(f(3, 40, '14', '', 40)).toBe('Page 14 of 40');
13
- });
14
-
15
- test('handle no max page', () => {
16
- expect(f(3, 40, '14', '', null)).toBe('Page 14');
17
- });
18
- });
19
-
20
- /** @type {BookReader} */
21
- let br;
22
- /** @type {Navbar} */
23
- let navbar;
24
- beforeEach(() => {
25
- document.body.innerHTML = '<div id="BookReader">';
26
- br = new BookReader({
27
- data: [
28
- [
29
- { width: 800, height: 1200,
30
- uri: '//archive.org/download/BookReader/img/page001.jpg' },
31
- ],
32
- [
33
- { width: 800, height: 1200,
34
- uri: '//archive.org/download/BookReader/img/page002.jpg' },
35
- { width: 800, height: 1200,
36
- uri: '//archive.org/download/BookReader/img/page003.jpg' },
37
- ],
38
- [
39
- { width: 800, height: 1200,
40
- uri: '//archive.org/download/BookReader/img/page004.jpg' },
41
- { width: 800, height: 1200,
42
- uri: '//archive.org/download/BookReader/img/page005.jpg' },
43
- ]
44
- ],
45
- });
46
- br.init();
47
- navbar = br._components.navbar;
48
- });
49
-
50
- afterEach(() => sinon.restore());
51
-
52
- describe('Navbar slider', () => {
53
- test('while sliding, visible page number updates, but does not flip', () => {
54
- const $slider = navbar.$root.find('.BRpager');
55
- const jumpToIndexSpy = sinon.spy(br, 'jumpToIndex');
56
- expect(br.currentIndex()).toBe(0);
57
-
58
- $slider.trigger('slide', { value: 3 });
59
-
60
- expect(navbar.$root.find('.BRcurrentpage').text().includes('3'));
61
- expect(jumpToIndexSpy.callCount).toBe(0);
62
- });
63
-
64
- test('on slide change, actual page changes', () => {
65
- const $slider = navbar.$root.find('.BRpager');
66
- const jumpToIndexSpy = sinon.spy(br, 'jumpToIndex');
67
- expect(br.currentIndex()).toBe(0);
68
-
69
- $slider.trigger('slidechange', { value: 3 });
70
-
71
- expect(navbar.$root.find('.BRcurrentpage').text().includes('3'));
72
- expect(jumpToIndexSpy.callCount).toBe(1);
73
- expect(jumpToIndexSpy.args[0][0]).toBe(3);
74
- });
75
- });
76
-
77
- describe('Navbar controls overrides', () => {
78
- const createBRWithOverrides = (overrides) => {
79
- br = new BookReader($.extend(true, br.options, overrides));
80
- br.init();
81
- navbar = br._components.navbar;
82
- };
83
-
84
- test(`when a view mode is excluded,
85
- the mode should not be used in viewport toggling`, () => {
86
- const overrides = {
87
- controls: {
88
- viewmode: {
89
- visible: true,
90
- className: 'viewmode',
91
- excludedModes: [1],
92
- }
93
- }
94
- };
95
- createBRWithOverrides(overrides);
96
-
97
- const $viewMode = navbar.$root.find('.viewmode');
98
-
99
- expect($viewMode.find('.icon-thumb').length).toBe(1);
100
- $viewMode.click();
101
- expect($viewMode.find('.icon-twopg').length).toBe(1);
102
- $viewMode.click();
103
- expect($viewMode.find('.icon-thumb').length).toBe(1);
104
- });
105
-
106
- test('when a control is set to visible: false, do not return a button template', () => {
107
- const overrides = {
108
- controls: {
109
- onePage: {
110
- visible: false
111
- }
112
- }
113
- };
114
- createBRWithOverrides(overrides);
115
-
116
- expect(navbar.$root.find('.onepg').length).toBe(0);
117
- expect(navbar.$root.find('.twopg').length).toBe(1);
118
- });
119
-
120
- test(`when a control's className is overridden,
121
- the class should be used in place of the default`, () => {
122
- const overrides = {
123
- controls: {
124
- onePage: {
125
- className: 'foo'
126
- }
127
- }
128
- };
129
- createBRWithOverrides(overrides);
130
-
131
- expect(navbar.$root.find(`.${overrides.controls.onePage.className}`).length).toBe(1);
132
- expect(navbar.$root.find('.onepg').length).toBe(0);
133
- });
134
-
135
- test(`when a control's template is overridden,
136
- the HTML output should match the template provided`, () => {
137
- const overrides = {
138
- controls: {
139
- onePage: {
140
- template: () => (
141
- '<button id="foo"></button>'
142
- )
143
- }
144
- }
145
- };
146
- createBRWithOverrides(overrides);
147
-
148
- expect(navbar.$root.find('#foo').length).toBe(1);
149
- expect(navbar.$root.find('.onepg').length).toBe(0);
150
- });
151
-
152
- test(`when viewmode control set to visible,
153
- the individual view mode controls are not rendered`, () => {
154
- const overrides = {
155
- controls: {
156
- viewmode: {
157
- visible: true
158
- },
159
- onePage: {
160
- visible: false
161
- }
162
- }
163
- };
164
- createBRWithOverrides(overrides);
165
-
166
- expect(navbar.$root.find('.viewmode').length).toBe(1);
167
- expect(navbar.$root.find('.onepg').length).toBe(0);
168
- });
169
- });
@@ -1,115 +0,0 @@
1
- import {PageContainer} from '../../src/BookReader/PageContainer.js';
2
-
3
- describe('constructor', () => {
4
- test('protected books', () => {
5
- const pc = new PageContainer(null, {isProtected: true});
6
- expect(pc.$container.hasClass('protected')).toBe(true);
7
- expect(pc.$container.find('.BRscreen').length).toBe(1);
8
- });
9
-
10
- test('non-protected books', () => {
11
- const pc = new PageContainer(null, {isProtected: false});
12
- expect(pc.$container.hasClass('protected')).toBe(false);
13
- expect(pc.$container.find('.BRscreen').length).toBe(0);
14
- });
15
-
16
- test('empty page', () => {
17
- const pc = new PageContainer(null, {isProtected: false});
18
- expect(pc.$container.hasClass('BRemptypage')).toBe(true);
19
- });
20
-
21
- test('non-empty page', () => {
22
- const pc = new PageContainer({index: 7}, {isProtected: false});
23
- expect(pc.$container.hasClass('BRemptypage')).toBe(false);
24
- expect(pc.$container.hasClass('pagediv7')).toBe(true);
25
- });
26
-
27
- test('adds side attribute', () => {
28
- const pc = new PageContainer({index: 7, pageSide: 'R'}, {isProtected: false});
29
- expect(pc.$container.hasClass('BRemptypage')).toBe(false);
30
- expect(pc.$container.attr('data-side')).toBe('R');
31
- });
32
- });
33
-
34
- describe('update', async () => {
35
- test('dimensions sets CSS', () => {
36
- const pc = new PageContainer(null, {});
37
- pc.update({ dimensions: { left: 20 } });
38
- expect(pc.$container[0].style.left).toBe('20px');
39
- });
40
-
41
- test('does not create image if empty page', () => {
42
- const pc = new PageContainer(null, {});
43
- pc.update({ reduce: null });
44
- expect(pc.$img).toBeNull();
45
- pc.update({ reduce: 7 });
46
- expect(pc.$img).toBeNull();
47
- });
48
-
49
- test('does not create image if no reduce', () => {
50
- const pc = new PageContainer({index: 17}, {});
51
- pc.update({ reduce: null });
52
- expect(pc.$img).toBeNull();
53
- });
54
-
55
- test('does not set background image if already loaded', () => {
56
- const fakeImageCache = {
57
- imageLoaded: () => true,
58
- image: () => $('<img/>'),
59
- };
60
- const pc = new PageContainer({index: 12}, {imageCache: fakeImageCache});
61
- pc.update({ reduce: 7 });
62
- expect(pc.$img[0].style.background).toBe('');
63
- });
64
-
65
- test('removes image between updates', () => {
66
- const fakeImageCache = {
67
- imageLoaded: () => true,
68
- image: () => $('<img/>'),
69
- };
70
- const pc = new PageContainer({index: 12}, {imageCache: fakeImageCache});
71
- pc.update({ reduce: 7 });
72
- const $im1 = pc.$img;
73
- pc.update({ reduce: 7 });
74
- const $im2 = pc.$img;
75
- expect($im1).not.toBe($im2);
76
- expect($im1.parent().length).toBe(0);
77
- });
78
-
79
- test('adds/removes loading indicators while loading', () => {
80
- const fakeImageCache = {
81
- imageLoaded: () => false,
82
- image: () => $('<img/>'),
83
- getBestLoadedReduce: () => undefined,
84
- };
85
- const pc = new PageContainer({index: 12}, {imageCache: fakeImageCache, loadingImage: 'loading.gif'});
86
- pc.update({ reduce: 7 });
87
- expect(pc.$container.hasClass('BRpageloading')).toBe(true);
88
- // See https://github.com/jsdom/jsdom/issues/3169
89
- // expect(pc.$img.css('background')).toBeTruthy();
90
- // expect(pc.$img.css('background').includes('loading.gif')).toBe(true);
91
- // expect(pc.$img.css('background').includes(',')).toBe(false);
92
-
93
- pc.$img.trigger('loadend');
94
- expect(pc.$container.hasClass('BRpageloading')).toBe(false);
95
- expect(pc.$img.css('background')).toBeFalsy();
96
- });
97
-
98
- test('shows lower res image while loading if one available', () => {
99
- const fakeImageCache = {
100
- imageLoaded: () => false,
101
- image: () => $('<img/>'),
102
- getBestLoadedReduce: () => 3,
103
- };
104
- const fakePage = {
105
- index: 12,
106
- getURI: () => 'page12.jpg',
107
- };
108
- const pc = new PageContainer(fakePage, {imageCache: fakeImageCache, loadingImage: 'loading.gif'});
109
- pc.update({ reduce: 7 });
110
- // See https://github.com/jsdom/jsdom/issues/3169
111
- // expect(pc.$img.css('background').includes('page12.jpg')).toBe(true);
112
- pc.$img.trigger('loadend');
113
- expect(pc.$img.css('background')).toBeFalsy();
114
- });
115
- });
@@ -1,38 +0,0 @@
1
- import {IntegerReduceSet, Pow2ReduceSet} from '../../src/BookReader/ReduceSet.js';
2
-
3
- describe('IntegerReduceSet', () => {
4
- test('floor', () => {
5
- const f = IntegerReduceSet.floor;
6
- expect(f(1)).toBe(1);
7
- expect(f(3)).toBe(3);
8
- expect(f(3.1)).toBe(3);
9
- expect(f(3.5)).toBe(3);
10
- expect(f(3.9)).toBe(3);
11
- });
12
-
13
- test('decr', () => {
14
- const f = IntegerReduceSet.decr;
15
- expect(f(1)).toBe(0);
16
- expect(f(3)).toBe(2);
17
- expect(f(0)).toBe(-1);
18
- });
19
- });
20
-
21
- describe('Pow2ReduceSet', () => {
22
- test('floor', () => {
23
- const f = Pow2ReduceSet.floor;
24
- expect(f(1)).toBe(1);
25
- expect(f(3)).toBe(2);
26
- expect(f(3.5)).toBe(2);
27
- expect(f(4.1)).toBe(4);
28
- expect(f(8)).toBe(8);
29
- });
30
-
31
- test('decr', () => {
32
- const f = Pow2ReduceSet.decr;
33
- expect(f(1)).toBe(0.5);
34
- expect(f(2)).toBe(1);
35
- expect(f(4)).toBe(2);
36
- expect(f(8)).toBe(4);
37
- });
38
- });
@@ -1,26 +0,0 @@
1
- import sinon from 'sinon';
2
-
3
- import { createPopup } from '../../../src/BookReader/Toolbar/Toolbar.js';
4
-
5
- afterEach(() => {
6
- sinon.restore();
7
- })
8
-
9
- describe('createPopup', () => {
10
- test('calls window.open', () => {
11
- const openStub = sinon.stub(window, 'open');
12
- createPopup('openlibrary.org', 100, 100, 'Open Library');
13
- expect(openStub.callCount).toBe(1);
14
- });
15
-
16
- test('opens in center', () => {
17
- const openStub = sinon.stub(window, 'open');
18
- createPopup('openlibrary.org', 100, 100, 'Open Library');
19
- // jest default window size is 1024x768
20
- expect(openStub.args[0]).toEqual([
21
- 'openlibrary.org',
22
- 'Open Library',
23
- 'status=1,width=100,height=100,top=334,left=462'
24
- ]);
25
- });
26
- });
@@ -1,88 +0,0 @@
1
- import { exposeOverrideable } from '../../../src/BookReader/utils/classes.js';
2
-
3
- describe('exposeOverrideable', () => {
4
- test('adds method to To class', () => {
5
- class From { foo() { return 3; } }
6
- class To { }
7
- exposeOverrideable(From, 'foo', x => x, To, 'foo', x => x);
8
- expect(To.prototype).toHaveProperty('foo');
9
- expect(new To().foo()).toBe(3);
10
- });
11
-
12
- test('modifying To method modifies original class', () => {
13
- class From { foo() { return 3; } }
14
- class To { }
15
- const originalFoo = From.prototype.foo;
16
- exposeOverrideable(From, 'foo', x => x, To, 'foo', x => x);
17
- To.prototype.foo = () => 7;
18
- expect(originalFoo).not.toBe(From.prototype.foo);
19
- expect(new To().foo()).toBe(7);
20
- expect(new From().foo()).toBe(7);
21
- });
22
-
23
- test('can transform this', () => {
24
- class From { foo() { return this; } }
25
- class To { }
26
- exposeOverrideable(From, 'foo', x => 'fake-this1', To, 'foo', x => 'fake-this2');
27
- const f = new From();
28
- expect(f.foo()).toBe(f);
29
- expect(new To().foo()).toBe('fake-this2');
30
- });
31
-
32
- test('can transform this both ways if overriden', () => {
33
- class From { foo() { return [this]; } }
34
- class To { }
35
- exposeOverrideable(From, 'foo', x => 'fake-this1', To, 'foo', x => 'fake-this2');
36
- // Override pattern common in bookreader
37
- To.prototype.foo = function(_super) {
38
- return function() {
39
- return [this, ..._super.call(this)];
40
- };
41
- }(To.prototype.foo);
42
-
43
- const calledFromTo = new To().foo();
44
- expect(calledFromTo).toHaveLength(2);
45
- expect(calledFromTo[0]).toBeInstanceOf(To);
46
- expect(calledFromTo[1]).toBe('fake-this2');
47
-
48
- const calledFromFrom = new From().foo();
49
- expect(calledFromFrom).toHaveLength(2);
50
- expect(calledFromFrom[0]).toBe('fake-this1');
51
- expect(calledFromFrom[1]).toBe('fake-this2');
52
- });
53
-
54
- test('BookReader override pattern', () => {
55
- class Component {
56
- constructor(br) { this.br = br; }
57
- createButton() { return 'root button'; }
58
- // need to test that when called through a
59
- // Component method, that it work correctly
60
- initToolbar() { return [this.createButton()]; }
61
- }
62
- class BookReader {
63
- constructor() {
64
- this.component = new Component(this);
65
- }
66
- }
67
-
68
- exposeOverrideable(Component, 'createButton', c => c.br, BookReader, 'createButton', br => br.component);
69
-
70
- expect(new BookReader().createButton()).toBe('root button');
71
- expect(new BookReader().component.initToolbar()).toEqual(['root button']);
72
-
73
- // And then a bunch of plugins come along!
74
- for (const plugin of ['plugin 1', 'plugin 2']) {
75
- BookReader.prototype.createButton = function(_super) {
76
- return function() {
77
- return plugin + ' ' + _super.call(this);
78
- };
79
- }(BookReader.prototype.createButton);
80
- }
81
-
82
- const br = new BookReader();
83
- expect(br.createButton()).toBe('plugin 2 plugin 1 root button');
84
- expect(br.component.createButton()).toBe('plugin 2 plugin 1 root button');
85
- // Calls the overridden method on BookReader!
86
- expect(br.component.initToolbar()).toEqual(['plugin 2 plugin 1 root button']);
87
- });
88
- });