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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +670 -1190
  4. package/BookReader/bergamot-translator-worker.js +2966 -0
  5. package/BookReader/bergamot-translator-worker.wasm +0 -0
  6. package/BookReader/hypothesis/LICENSE +50 -0
  7. package/BookReader/hypothesis/README.md +55 -0
  8. package/BookReader/hypothesis/build/boot-template.js +1 -0
  9. package/BookReader/hypothesis/build/boot.js +1 -0
  10. package/BookReader/hypothesis/build/manifest.json +20 -0
  11. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +199 -0
  12. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  13. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +811 -0
  14. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  15. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +437 -0
  16. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  17. package/BookReader/hypothesis/build/styles/annotator.css +4 -0
  18. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  19. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  20. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  35. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  36. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  37. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  38. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  39. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  40. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  41. package/BookReader/hypothesis/build/styles/katex.min.css +3 -0
  42. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  43. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +14 -0
  44. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  45. package/BookReader/hypothesis/build/styles/sidebar.css +4 -0
  46. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  47. package/BookReader/hypothesis/build/styles/ui-playground.css +4 -0
  48. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  49. package/BookReader/hypothesis/package.json +126 -0
  50. package/BookReader/ia-bookreader.js +1886 -0
  51. package/BookReader/{BookReader.js.LICENSE.txt → ia-bookreader.js.LICENSE.txt} +26 -20
  52. package/BookReader/ia-bookreader.js.map +1 -0
  53. package/BookReader/icons/1up.svg +1 -12
  54. package/BookReader/icons/2up.svg +1 -15
  55. package/BookReader/icons/advance.svg +3 -26
  56. package/BookReader/icons/chevron-right.svg +1 -1
  57. package/BookReader/icons/close-circle-dark.svg +1 -1
  58. package/BookReader/icons/close-circle.svg +1 -1
  59. package/BookReader/icons/fullscreen.svg +1 -17
  60. package/BookReader/icons/fullscreen_exit.svg +1 -17
  61. package/BookReader/icons/hamburger.svg +1 -15
  62. package/BookReader/icons/left-arrow.svg +1 -12
  63. package/BookReader/icons/magnify-minus.svg +1 -16
  64. package/BookReader/icons/magnify-plus.svg +1 -17
  65. package/BookReader/icons/magnify.svg +1 -15
  66. package/BookReader/icons/pause.svg +1 -23
  67. package/BookReader/icons/play.svg +1 -22
  68. package/BookReader/icons/playback-speed.svg +1 -34
  69. package/BookReader/icons/read-aloud.svg +1 -22
  70. package/BookReader/icons/review.svg +3 -22
  71. package/BookReader/icons/slider-toggle.svg +1 -0
  72. package/BookReader/icons/thumbnails.svg +1 -17
  73. package/BookReader/icons/voice.svg +1 -0
  74. package/BookReader/icons/volume-full.svg +1 -22
  75. package/BookReader/images/BRicons.svg +5 -94
  76. package/BookReader/images/books_graphic.svg +1 -177
  77. package/BookReader/images/hypothesis.ico +0 -0
  78. package/BookReader/images/icon_book.svg +1 -12
  79. package/BookReader/images/icon_bookmark.svg +1 -12
  80. package/BookReader/images/icon_experiment.svg +1 -0
  81. package/BookReader/images/icon_gear.svg +1 -14
  82. package/BookReader/images/icon_hamburger.svg +1 -20
  83. package/BookReader/images/icon_home.svg +1 -21
  84. package/BookReader/images/icon_info.svg +1 -11
  85. package/BookReader/images/icon_one_page.svg +1 -8
  86. package/BookReader/images/icon_pause.svg +1 -1
  87. package/BookReader/images/icon_play.svg +1 -1
  88. package/BookReader/images/icon_playback-rate.svg +1 -15
  89. package/BookReader/images/icon_search_button.svg +1 -8
  90. package/BookReader/images/icon_share.svg +1 -9
  91. package/BookReader/images/icon_skip-ahead.svg +1 -6
  92. package/BookReader/images/icon_skip-back.svg +2 -13
  93. package/BookReader/images/icon_speaker.svg +1 -18
  94. package/BookReader/images/icon_speaker_open.svg +1 -10
  95. package/BookReader/images/icon_thumbnails.svg +1 -12
  96. package/BookReader/images/icon_toc.svg +1 -5
  97. package/BookReader/images/icon_two_pages.svg +1 -9
  98. package/BookReader/images/marker_chap-off.svg +1 -11
  99. package/BookReader/images/marker_chap-on.svg +1 -11
  100. package/BookReader/images/marker_srch-on.svg +1 -11
  101. package/BookReader/images/translate.svg +1 -0
  102. package/BookReader/images/unviewable_page.png +0 -0
  103. package/BookReader/jquery-3.js +2 -0
  104. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  105. package/BookReader/plugins/plugin.archive_analytics.js +1 -172
  106. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  107. package/BookReader/plugins/plugin.autoplay.js +1 -165
  108. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  109. package/BookReader/plugins/plugin.chapters.js +19 -301
  110. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  111. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  112. package/BookReader/plugins/plugin.experiments.js +3 -0
  113. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  114. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  115. package/BookReader/plugins/plugin.iframe.js +1 -74
  116. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  117. package/BookReader/plugins/plugin.iiif.js +2 -0
  118. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  119. package/BookReader/plugins/plugin.resume.js +1 -368
  120. package/BookReader/plugins/plugin.resume.js.map +1 -1
  121. package/BookReader/plugins/plugin.search.js +2 -1385
  122. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  123. package/BookReader/plugins/plugin.search.js.map +1 -1
  124. package/BookReader/plugins/plugin.text_selection.js +2 -1080
  125. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  126. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  127. package/BookReader/plugins/plugin.translate.js +3 -0
  128. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  129. package/BookReader/plugins/plugin.translate.js.map +1 -0
  130. package/BookReader/plugins/plugin.tts.js +2 -9193
  131. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  132. package/BookReader/plugins/plugin.tts.js.map +1 -1
  133. package/BookReader/plugins/plugin.url.js +1 -269
  134. package/BookReader/plugins/plugin.url.js.map +1 -1
  135. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  136. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  137. package/BookReader/plugins/translator-worker.js +2 -0
  138. package/BookReader/plugins/translator-worker.js.map +1 -0
  139. package/BookReader/silence.mp3 +0 -0
  140. package/BookReader/translator-worker.js +475 -0
  141. package/BookReader/webcomponents-bundle.js +3 -0
  142. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  143. package/BookReader/webcomponents-bundle.js.map +1 -0
  144. package/README.md +17 -4
  145. package/dist/esm/ia-bookreader.js +3 -0
  146. package/dist/esm/ia-bookreader.js.LICENSE.txt +17 -0
  147. package/dist/esm/ia-bookreader.js.map +1 -0
  148. package/dist/esm/plugins/plugin.archive_analytics.js +2 -0
  149. package/dist/esm/plugins/plugin.archive_analytics.js.map +1 -0
  150. package/dist/esm/plugins/plugin.autoplay.js +2 -0
  151. package/dist/esm/plugins/plugin.autoplay.js.map +1 -0
  152. package/dist/esm/plugins/plugin.chapters.js +2 -0
  153. package/dist/esm/plugins/plugin.chapters.js.map +1 -0
  154. package/dist/esm/plugins/plugin.experiments.js +2 -0
  155. package/dist/esm/plugins/plugin.experiments.js.map +1 -0
  156. package/dist/esm/plugins/plugin.iframe.js +2 -0
  157. package/dist/esm/plugins/plugin.iframe.js.map +1 -0
  158. package/dist/esm/plugins/plugin.iiif.js +2 -0
  159. package/dist/esm/plugins/plugin.iiif.js.map +1 -0
  160. package/dist/esm/plugins/plugin.resume.js +2 -0
  161. package/dist/esm/plugins/plugin.resume.js.map +1 -0
  162. package/dist/esm/plugins/plugin.search.js +2 -0
  163. package/dist/esm/plugins/plugin.search.js.map +1 -0
  164. package/dist/esm/plugins/plugin.text_selection.js +2 -0
  165. package/dist/esm/plugins/plugin.text_selection.js.map +1 -0
  166. package/dist/esm/plugins/plugin.translate.js +2 -0
  167. package/dist/esm/plugins/plugin.translate.js.map +1 -0
  168. package/dist/esm/plugins/plugin.tts.js +2 -0
  169. package/dist/esm/plugins/plugin.tts.js.map +1 -0
  170. package/dist/esm/plugins/plugin.url.js +2 -0
  171. package/dist/esm/plugins/plugin.url.js.map +1 -0
  172. package/dist/esm/plugins/plugin.vendor-fullscreen.js +2 -0
  173. package/dist/esm/plugins/plugin.vendor-fullscreen.js.map +1 -0
  174. package/jsconfig.json +18 -0
  175. package/package.json +113 -71
  176. package/src/BookReader/BookModel.js +92 -46
  177. package/src/BookReader/DragScrollable.js +233 -0
  178. package/src/BookReader/ImageCache.js +49 -16
  179. package/src/BookReader/Mode1Up.js +66 -365
  180. package/src/BookReader/Mode1UpLit.js +392 -0
  181. package/src/BookReader/Mode2Up.js +87 -1315
  182. package/src/BookReader/Mode2UpLit.js +786 -0
  183. package/src/BookReader/ModeAbstract.js +43 -0
  184. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  185. package/src/BookReader/ModeSmoothZoom.js +312 -0
  186. package/src/BookReader/ModeThumb.js +29 -15
  187. package/src/BookReader/Navbar/Navbar.js +204 -84
  188. package/src/BookReader/PageContainer.js +120 -23
  189. package/src/BookReader/ReduceSet.js +2 -2
  190. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  191. package/src/BookReader/events.js +3 -3
  192. package/src/BookReader/options.js +105 -18
  193. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  194. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  195. package/src/BookReader/utils/SelectionObserver.js +72 -0
  196. package/src/BookReader/utils/classes.js +1 -1
  197. package/src/BookReader/utils.js +136 -12
  198. package/src/BookReader.js +732 -1231
  199. package/src/BookReaderPlugin.js +52 -0
  200. package/src/assets/icons/magnify-minus.svg +3 -7
  201. package/src/assets/icons/magnify-plus.svg +3 -7
  202. package/src/assets/icons/slider-toggle.svg +1 -0
  203. package/src/assets/icons/voice.svg +1 -0
  204. package/src/assets/images/hypothesis.ico +0 -0
  205. package/src/assets/images/icon_experiment.svg +1 -0
  206. package/src/assets/images/translate.svg +1 -0
  207. package/src/assets/images/unviewable_page.png +0 -0
  208. package/src/assets/silence.mp3 +0 -0
  209. package/src/css/BookReader.scss +1 -5
  210. package/src/css/_BRBookmarks.scss +1 -1
  211. package/src/css/_BRComponent.scss +1 -1
  212. package/src/css/_BRicon.scss +8 -2
  213. package/src/css/_BRmain.scss +16 -3
  214. package/src/css/_BRnav.scss +74 -70
  215. package/src/css/_BRpages.scss +174 -42
  216. package/src/css/_BRsearch.scss +69 -30
  217. package/src/css/_BRtoolbar.scss +5 -5
  218. package/src/css/_TextSelection.scss +249 -25
  219. package/src/css/_colorbox.scss +2 -2
  220. package/src/css/_controls.scss +24 -7
  221. package/src/css/_icons.scss +8 -1
  222. package/src/{BookNavigator/assets → css}/button-base.js +2 -2
  223. package/src/css/icon_checkmark.js +9 -0
  224. package/src/css/sharedStyles.js +15 -0
  225. package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
  226. package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +25 -5
  227. package/src/ia-bookreader/ia-bookreader.js +686 -0
  228. package/src/ia-bookreader/sharing.js +27 -0
  229. package/src/ia-bookreader/viewable-files.js +98 -0
  230. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
  231. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
  232. package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
  233. package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
  234. package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +43 -31
  235. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  236. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
  237. package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
  238. package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
  239. package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
  240. package/src/plugins/plugin.archive_analytics.js +84 -78
  241. package/src/plugins/plugin.autoplay.js +99 -104
  242. package/src/plugins/plugin.chapters.js +323 -205
  243. package/src/plugins/plugin.experiments.js +375 -0
  244. package/src/plugins/plugin.iframe.js +36 -37
  245. package/src/plugins/plugin.iiif.js +147 -0
  246. package/src/plugins/plugin.resume.js +54 -51
  247. package/src/plugins/plugin.text_selection.js +464 -219
  248. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  249. package/src/plugins/search/plugin.search.js +347 -397
  250. package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
  251. package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
  252. package/src/plugins/search/utils.js +50 -0
  253. package/src/plugins/search/view.js +51 -69
  254. package/src/plugins/translate/TranslationManager.js +164 -0
  255. package/src/plugins/translate/plugin.translate.js +559 -0
  256. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  257. package/src/plugins/tts/FestivalTTSEngine.js +20 -30
  258. package/src/plugins/tts/PageChunk.js +117 -23
  259. package/src/plugins/tts/PageChunkIterator.js +11 -17
  260. package/src/plugins/tts/WebTTSEngine.js +132 -92
  261. package/src/plugins/tts/plugin.tts.js +341 -351
  262. package/src/plugins/tts/utils.js +76 -67
  263. package/src/plugins/url/UrlPlugin.js +213 -0
  264. package/src/plugins/{plugin.url.js → url/plugin.url.js} +54 -18
  265. package/src/util/TextSelectionManager.js +1471 -0
  266. package/src/util/browserSniffing.js +42 -1
  267. package/src/util/cache.js +20 -0
  268. package/src/util/docCookies.js +21 -2
  269. package/src/util/dom.js +88 -0
  270. package/src/util/generators.js +89 -0
  271. package/src/util/lit.js +15 -0
  272. package/src/util/strings.js +11 -0
  273. package/.babelrc +0 -12
  274. package/.dependabot/config.yml +0 -6
  275. package/.eslintrc.js +0 -50
  276. package/.gitattributes +0 -2
  277. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  278. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  279. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  280. package/.github/workflows/node.js.yml +0 -37
  281. package/.github/workflows/npm-publish.yml +0 -47
  282. package/.testcaferc.json +0 -5
  283. package/BookReader/BookReader.js +0 -21613
  284. package/BookReader/BookReader.js.map +0 -1
  285. package/BookReader/bookreader-component-bundle.js +0 -14497
  286. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  287. package/BookReader/bookreader-component-bundle.js.map +0 -1
  288. package/BookReader/jquery-1.10.1.js +0 -108
  289. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  290. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  291. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  292. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  293. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  294. package/BookReaderDemo/BookReaderDemo.css +0 -41
  295. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  296. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  297. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  298. package/BookReaderDemo/IIIFBookReader.js +0 -207
  299. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  300. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  301. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  302. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  303. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  304. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  305. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  306. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  307. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  308. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  309. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  310. package/BookReaderDemo/demo-advanced.html +0 -33
  311. package/BookReaderDemo/demo-autoplay.html +0 -38
  312. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  313. package/BookReaderDemo/demo-embed.html +0 -26
  314. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  315. package/BookReaderDemo/demo-fullscreen.html +0 -33
  316. package/BookReaderDemo/demo-iiif.html +0 -34
  317. package/BookReaderDemo/demo-iiif.js +0 -26
  318. package/BookReaderDemo/demo-internetarchive.html +0 -74
  319. package/BookReaderDemo/demo-multiple.html +0 -43
  320. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  321. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  322. package/BookReaderDemo/demo-simple.html +0 -34
  323. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  324. package/BookReaderDemo/immersion-1up.html +0 -64
  325. package/BookReaderDemo/immersion-mode.html +0 -35
  326. package/BookReaderDemo/toggle_controls.html +0 -53
  327. package/BookReaderDemo/view_mode.html +0 -39
  328. package/BookReaderDemo/viewmode-cycle.html +0 -41
  329. package/CHANGELOG.md +0 -499
  330. package/CONTRIBUTING.md +0 -7
  331. package/codecov.yml +0 -17
  332. package/index.html +0 -31
  333. package/karma.conf.js +0 -23
  334. package/screenshot.png +0 -0
  335. package/scripts/postversion.js +0 -10
  336. package/scripts/preversion.js +0 -14
  337. package/scripts/version.js +0 -26
  338. package/src/BookNavigator/BookModel.js +0 -14
  339. package/src/BookNavigator/BookNavigator.js +0 -459
  340. package/src/BookNavigator/assets/book-loader.js +0 -27
  341. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  342. package/src/BookNavigator/assets/icon_close.js +0 -3
  343. package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
  344. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  345. package/src/BookNavigator/assets/icon_sort_neutral.js +0 -5
  346. package/src/BookNavigator/assets/icon_volumes.js +0 -11
  347. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  348. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  349. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  350. package/src/BookNavigator/search/a-search-result.js +0 -55
  351. package/src/BookNavigator/volumes/volumes-provider.js +0 -83
  352. package/src/BookNavigator/volumes/volumes.js +0 -178
  353. package/src/BookReader/DebugConsole.js +0 -54
  354. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  355. package/src/ItemNavigator/ItemNavigator.js +0 -376
  356. package/src/ItemNavigator/providers/sharing.js +0 -33
  357. package/src/css/_MobileNav.scss +0 -194
  358. package/src/dragscrollable-br.js +0 -261
  359. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  360. package/src/plugins/plugin.mobile_nav.js +0 -287
  361. package/tests/BookReader/BookModel.test.js +0 -312
  362. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  363. package/tests/BookReader/DebugConsole.test.js +0 -25
  364. package/tests/BookReader/ImageCache.test.js +0 -150
  365. package/tests/BookReader/Mode1Up.test.js +0 -164
  366. package/tests/BookReader/Mode2Up.test.js +0 -247
  367. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  368. package/tests/BookReader/PageContainer.test.js +0 -115
  369. package/tests/BookReader/ReduceSet.test.js +0 -38
  370. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  371. package/tests/BookReader/utils/classes.test.js +0 -88
  372. package/tests/BookReader/utils.test.js +0 -109
  373. package/tests/BookReader.options.test.js +0 -39
  374. package/tests/BookReader.test.js +0 -301
  375. package/tests/e2e/README.md +0 -75
  376. package/tests/e2e/autoplay.test.js +0 -13
  377. package/tests/e2e/base.test.js +0 -35
  378. package/tests/e2e/helpers/base.js +0 -263
  379. package/tests/e2e/helpers/debug.js +0 -13
  380. package/tests/e2e/helpers/desktopSearch.js +0 -72
  381. package/tests/e2e/helpers/mobileSearch.js +0 -85
  382. package/tests/e2e/helpers/mockSearch.js +0 -93
  383. package/tests/e2e/helpers/rightToLeft.js +0 -29
  384. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  385. package/tests/e2e/models/BookReader.js +0 -11
  386. package/tests/e2e/models/Navigation.js +0 -56
  387. package/tests/e2e/rightToLeft.test.js +0 -20
  388. package/tests/e2e/viewmode.test.js +0 -37
  389. package/tests/karma/BookNavigator/book-navigator.test.js +0 -139
  390. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  391. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  392. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  393. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  394. package/tests/karma/BookNavigator/sharing/sharing-provider.test.js +0 -40
  395. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  396. package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +0 -141
  397. package/tests/karma/BookNavigator/volumes/volumes.test.js +0 -98
  398. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  399. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  400. package/tests/plugins/plugin.autoplay.test.js +0 -52
  401. package/tests/plugins/plugin.chapters.test.js +0 -130
  402. package/tests/plugins/plugin.iframe.test.js +0 -42
  403. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  404. package/tests/plugins/plugin.resume.test.js +0 -98
  405. package/tests/plugins/plugin.text_selection.test.js +0 -203
  406. package/tests/plugins/plugin.url.test.js +0 -129
  407. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  408. package/tests/plugins/search/plugin.search.test.js +0 -173
  409. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  410. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  411. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  412. package/tests/plugins/tts/PageChunk.test.js +0 -57
  413. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  414. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  415. package/tests/plugins/tts/utils.test.js +0 -133
  416. package/tests/util/browserSniffing.test.js +0 -56
  417. package/tests/util/docCookies.test.js +0 -15
  418. package/tests/util/strings.test.js +0 -63
  419. package/tests/utils.js +0 -42
  420. package/webpack.config.js +0 -86
@@ -1,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('(4 of 40)');
9
- });
10
-
11
- test('handle regular page numbers', () => {
12
- expect(f(3, 40, '14', '', 40)).toBe('14 of 40');
13
- });
14
-
15
- test('handle no max page', () => {
16
- expect(f(3, 40, '14', '', null)).toBe('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
- });