@internetarchive/bookreader 5.0.0-10-alpha-3 → 5.0.0-101

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 (374) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +431 -1134
  4. package/BookReader/BookReader.js +1 -1
  5. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  6. package/BookReader/BookReader.js.map +1 -1
  7. package/BookReader/bergamot-translator-worker.js +2966 -0
  8. package/BookReader/bergamot-translator-worker.wasm +0 -0
  9. package/BookReader/hypothesis/LICENSE +50 -0
  10. package/BookReader/hypothesis/README.md +55 -0
  11. package/BookReader/hypothesis/build/boot.js +1 -0
  12. package/BookReader/hypothesis/build/manifest.json +20 -0
  13. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
  14. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  15. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
  16. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  17. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
  18. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  19. package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
  20. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  35. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  36. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  37. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  38. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  39. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  40. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  41. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  42. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  43. package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
  44. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  45. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
  46. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  47. package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
  48. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  49. package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
  50. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  51. package/BookReader/hypothesis/package.json +126 -0
  52. package/BookReader/ia-bookreader-bundle.js +1782 -0
  53. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +7 -0
  54. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  55. package/BookReader/icons/1up.svg +1 -1
  56. package/BookReader/icons/2up.svg +1 -1
  57. package/BookReader/icons/advance.svg +1 -1
  58. package/BookReader/icons/chevron-right.svg +1 -1
  59. package/BookReader/icons/close-circle-dark.svg +1 -1
  60. package/BookReader/icons/close-circle.svg +1 -1
  61. package/BookReader/icons/fullscreen.svg +1 -1
  62. package/BookReader/icons/fullscreen_exit.svg +1 -1
  63. package/BookReader/icons/hamburger.svg +1 -1
  64. package/BookReader/icons/left-arrow.svg +1 -1
  65. package/BookReader/icons/magnify-minus.svg +1 -1
  66. package/BookReader/icons/magnify-plus.svg +1 -1
  67. package/BookReader/icons/magnify.svg +1 -1
  68. package/BookReader/icons/pause.svg +1 -1
  69. package/BookReader/icons/play.svg +1 -1
  70. package/BookReader/icons/playback-speed.svg +1 -1
  71. package/BookReader/icons/read-aloud.svg +1 -1
  72. package/BookReader/icons/review.svg +1 -1
  73. package/BookReader/icons/thumbnails.svg +1 -1
  74. package/BookReader/icons/voice.svg +1 -0
  75. package/BookReader/icons/volume-full.svg +1 -1
  76. package/BookReader/images/BRicons.svg +3 -3
  77. package/BookReader/images/books_graphic.svg +1 -1
  78. package/BookReader/images/hypothesis.ico +0 -0
  79. package/BookReader/images/icon_book.svg +1 -1
  80. package/BookReader/images/icon_bookmark.svg +1 -1
  81. package/BookReader/images/icon_experiment.svg +1 -0
  82. package/BookReader/images/icon_gear.svg +1 -1
  83. package/BookReader/images/icon_hamburger.svg +1 -1
  84. package/BookReader/images/icon_home.svg +1 -1
  85. package/BookReader/images/icon_info.svg +1 -1
  86. package/BookReader/images/icon_one_page.svg +1 -1
  87. package/BookReader/images/icon_pause.svg +1 -1
  88. package/BookReader/images/icon_play.svg +1 -1
  89. package/BookReader/images/icon_playback-rate.svg +1 -1
  90. package/BookReader/images/icon_search_button.svg +1 -1
  91. package/BookReader/images/icon_share.svg +1 -1
  92. package/BookReader/images/icon_skip-ahead.svg +1 -1
  93. package/BookReader/images/icon_skip-back.svg +1 -1
  94. package/BookReader/images/icon_speaker.svg +1 -1
  95. package/BookReader/images/icon_speaker_open.svg +1 -1
  96. package/BookReader/images/icon_thumbnails.svg +1 -1
  97. package/BookReader/images/icon_toc.svg +1 -1
  98. package/BookReader/images/icon_two_pages.svg +1 -1
  99. package/BookReader/images/marker_chap-off.svg +1 -1
  100. package/BookReader/images/marker_chap-on.svg +1 -1
  101. package/BookReader/images/marker_srch-on.svg +1 -1
  102. package/BookReader/images/translate.svg +1 -0
  103. package/BookReader/images/unviewable_page.png +0 -0
  104. package/BookReader/jquery-3.js +2 -0
  105. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  106. package/BookReader/plugins/plugin.archive_analytics.js +1 -1
  107. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  108. package/BookReader/plugins/plugin.autoplay.js +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  110. package/BookReader/plugins/plugin.chapters.js +25 -1
  111. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  112. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  113. package/BookReader/plugins/plugin.experiments.js +3 -0
  114. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  115. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  116. package/BookReader/plugins/plugin.iframe.js +1 -1
  117. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  118. package/BookReader/plugins/plugin.iiif.js +2 -0
  119. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  120. package/BookReader/plugins/plugin.resume.js +1 -1
  121. package/BookReader/plugins/plugin.resume.js.map +1 -1
  122. package/BookReader/plugins/plugin.search.js +2 -1
  123. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  124. package/BookReader/plugins/plugin.search.js.map +1 -1
  125. package/BookReader/plugins/plugin.text_selection.js +2 -1
  126. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  127. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  128. package/BookReader/plugins/plugin.translate.js +137 -0
  129. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  130. package/BookReader/plugins/plugin.translate.js.map +1 -0
  131. package/BookReader/plugins/plugin.tts.js +1 -1
  132. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  133. package/BookReader/plugins/plugin.tts.js.map +1 -1
  134. package/BookReader/plugins/plugin.url.js +1 -1
  135. package/BookReader/plugins/plugin.url.js.map +1 -1
  136. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
  137. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  138. package/BookReader/plugins/translator-worker.js +2 -0
  139. package/BookReader/plugins/translator-worker.js.map +1 -0
  140. package/BookReader/silence.mp3 +0 -0
  141. package/BookReader/translator-worker.js +475 -0
  142. package/BookReader/webcomponents-bundle.js +3 -0
  143. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  144. package/BookReader/webcomponents-bundle.js.map +1 -0
  145. package/README.md +14 -3
  146. package/jsconfig.json +19 -0
  147. package/package.json +84 -64
  148. package/src/BookNavigator/assets/bookmark-colors.js +1 -1
  149. package/src/BookNavigator/assets/button-base.js +2 -1
  150. package/src/BookNavigator/assets/ia-logo.js +17 -0
  151. package/src/BookNavigator/assets/icon_checkmark.js +1 -1
  152. package/src/BookNavigator/assets/icon_close.js +1 -1
  153. package/src/BookNavigator/book-navigator.js +620 -0
  154. package/src/BookNavigator/bookmarks/bookmark-button.js +3 -2
  155. package/src/BookNavigator/bookmarks/bookmark-edit.js +2 -3
  156. package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
  157. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +2 -2
  158. package/src/BookNavigator/bookmarks/bookmarks-provider.js +27 -17
  159. package/src/BookNavigator/bookmarks/ia-bookmarks.js +116 -67
  160. package/src/BookNavigator/delete-modal-actions.js +1 -1
  161. package/src/BookNavigator/downloads/downloads-provider.js +36 -21
  162. package/src/BookNavigator/downloads/downloads.js +24 -4
  163. package/src/BookNavigator/search/search-provider.js +55 -27
  164. package/src/BookNavigator/search/search-results.js +25 -11
  165. package/src/BookNavigator/sharing.js +27 -0
  166. package/src/BookNavigator/viewable-files.js +95 -0
  167. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +13 -12
  168. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +9 -9
  169. package/src/BookReader/BookModel.js +92 -46
  170. package/src/BookReader/DragScrollable.js +233 -0
  171. package/src/BookReader/ImageCache.js +49 -16
  172. package/src/BookReader/Mode1Up.js +58 -360
  173. package/src/BookReader/Mode1UpLit.js +393 -0
  174. package/src/BookReader/Mode2Up.js +75 -1318
  175. package/src/BookReader/Mode2UpLit.js +787 -0
  176. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  177. package/src/BookReader/ModeSmoothZoom.js +312 -0
  178. package/src/BookReader/ModeThumb.js +20 -12
  179. package/src/BookReader/Navbar/Navbar.js +130 -53
  180. package/src/BookReader/PageContainer.js +120 -23
  181. package/src/BookReader/ReduceSet.js +2 -2
  182. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  183. package/src/BookReader/events.js +2 -3
  184. package/src/BookReader/options.js +87 -16
  185. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  186. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  187. package/src/BookReader/utils/SelectionObserver.js +45 -0
  188. package/src/BookReader/utils/classes.js +1 -1
  189. package/src/BookReader/utils.js +136 -12
  190. package/src/BookReader.js +641 -1192
  191. package/src/BookReaderPlugin.js +52 -0
  192. package/src/assets/icons/magnify-minus.svg +3 -7
  193. package/src/assets/icons/magnify-plus.svg +3 -7
  194. package/src/assets/icons/voice.svg +1 -0
  195. package/src/assets/images/hypothesis.ico +0 -0
  196. package/src/assets/images/icon_experiment.svg +1 -0
  197. package/src/assets/images/translate.svg +1 -0
  198. package/src/assets/images/unviewable_page.png +0 -0
  199. package/src/assets/silence.mp3 +0 -0
  200. package/src/css/BookReader.scss +1 -5
  201. package/src/css/_BRBookmarks.scss +1 -1
  202. package/src/css/_BRComponent.scss +1 -1
  203. package/src/css/_BRicon.scss +8 -2
  204. package/src/css/_BRmain.scss +16 -3
  205. package/src/css/_BRnav.scss +12 -66
  206. package/src/css/_BRpages.scss +171 -42
  207. package/src/css/_BRsearch.scss +69 -30
  208. package/src/css/_BRtoolbar.scss +5 -5
  209. package/src/css/_TextSelection.scss +129 -24
  210. package/src/css/_colorbox.scss +2 -2
  211. package/src/css/_controls.scss +24 -7
  212. package/src/css/_icons.scss +1 -1
  213. package/src/ia-bookreader/ia-bookreader.js +224 -0
  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 +314 -205
  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 +54 -51
  221. package/src/plugins/plugin.text_selection.js +510 -219
  222. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  223. package/src/plugins/search/plugin.search.js +370 -392
  224. package/src/plugins/search/utils.js +43 -0
  225. package/src/plugins/search/view.js +49 -67
  226. package/src/plugins/translate/TranslationManager.js +162 -0
  227. package/src/plugins/translate/plugin.translate.js +523 -0
  228. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  229. package/src/plugins/tts/FestivalTTSEngine.js +20 -30
  230. package/src/plugins/tts/PageChunk.js +33 -21
  231. package/src/plugins/tts/PageChunkIterator.js +11 -17
  232. package/src/plugins/tts/WebTTSEngine.js +131 -91
  233. package/src/plugins/tts/plugin.tts.js +344 -350
  234. package/src/plugins/tts/utils.js +49 -47
  235. package/src/plugins/url/UrlPlugin.js +191 -0
  236. package/src/plugins/{plugin.url.js → url/plugin.url.js} +44 -15
  237. package/src/util/TextSelectionManager.js +282 -0
  238. package/src/util/browserSniffing.js +33 -1
  239. package/src/util/cache.js +20 -0
  240. package/src/util/docCookies.js +21 -2
  241. package/src/util/strings.js +1 -0
  242. package/.babelrc +0 -12
  243. package/.dependabot/config.yml +0 -6
  244. package/.eslintrc.js +0 -50
  245. package/.gitattributes +0 -2
  246. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  247. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  248. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  249. package/.github/workflows/node.js.yml +0 -37
  250. package/.github/workflows/npm-publish.yml +0 -47
  251. package/.testcaferc.json +0 -5
  252. package/BookReader/bookreader-component-bundle.js +0 -1450
  253. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  254. package/BookReader/bookreader-component-bundle.js.map +0 -1
  255. package/BookReader/jquery-1.10.1.js +0 -2
  256. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  257. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  258. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  259. package/BookReader/plugins/plugin.mobile_nav.js +0 -2
  260. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  261. package/BookReaderDemo/BookReaderDemo.css +0 -41
  262. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  263. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  264. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  265. package/BookReaderDemo/IIIFBookReader.js +0 -207
  266. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  267. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  268. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  269. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  270. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  273. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  274. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  275. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  276. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  277. package/BookReaderDemo/demo-advanced.html +0 -33
  278. package/BookReaderDemo/demo-autoplay.html +0 -38
  279. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  280. package/BookReaderDemo/demo-embed.html +0 -26
  281. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  282. package/BookReaderDemo/demo-fullscreen.html +0 -33
  283. package/BookReaderDemo/demo-iiif.html +0 -34
  284. package/BookReaderDemo/demo-iiif.js +0 -26
  285. package/BookReaderDemo/demo-internetarchive.html +0 -74
  286. package/BookReaderDemo/demo-multiple.html +0 -43
  287. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  288. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  289. package/BookReaderDemo/demo-simple.html +0 -34
  290. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  291. package/BookReaderDemo/immersion-1up.html +0 -64
  292. package/BookReaderDemo/immersion-mode.html +0 -35
  293. package/BookReaderDemo/toggle_controls.html +0 -53
  294. package/BookReaderDemo/view_mode.html +0 -39
  295. package/BookReaderDemo/viewmode-cycle.html +0 -41
  296. package/CHANGELOG.md +0 -493
  297. package/CONTRIBUTING.md +0 -7
  298. package/codecov.yml +0 -17
  299. package/index.html +0 -31
  300. package/karma.conf.js +0 -23
  301. package/screenshot.png +0 -0
  302. package/scripts/postversion.js +0 -10
  303. package/scripts/preversion.js +0 -14
  304. package/scripts/version.js +0 -26
  305. package/src/BookNavigator/BookModel.js +0 -14
  306. package/src/BookNavigator/BookNavigator.js +0 -446
  307. package/src/BookNavigator/assets/book-loader.js +0 -27
  308. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  309. package/src/BookNavigator/search/a-search-result.js +0 -55
  310. package/src/BookReader/DebugConsole.js +0 -54
  311. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  312. package/src/ItemNavigator/ItemNavigator.js +0 -376
  313. package/src/ItemNavigator/providers/sharing.js +0 -29
  314. package/src/css/_MobileNav.scss +0 -194
  315. package/src/dragscrollable-br.js +0 -261
  316. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  317. package/src/plugins/plugin.mobile_nav.js +0 -287
  318. package/tests/BookReader/BookModel.test.js +0 -312
  319. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  320. package/tests/BookReader/DebugConsole.test.js +0 -25
  321. package/tests/BookReader/ImageCache.test.js +0 -150
  322. package/tests/BookReader/Mode1Up.test.js +0 -164
  323. package/tests/BookReader/Mode2Up.test.js +0 -247
  324. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  325. package/tests/BookReader/PageContainer.test.js +0 -115
  326. package/tests/BookReader/ReduceSet.test.js +0 -38
  327. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  328. package/tests/BookReader/utils/classes.test.js +0 -88
  329. package/tests/BookReader/utils.test.js +0 -109
  330. package/tests/BookReader.options.test.js +0 -39
  331. package/tests/BookReader.test.js +0 -301
  332. package/tests/e2e/README.md +0 -75
  333. package/tests/e2e/autoplay.test.js +0 -13
  334. package/tests/e2e/base.test.js +0 -35
  335. package/tests/e2e/helpers/base.js +0 -263
  336. package/tests/e2e/helpers/debug.js +0 -13
  337. package/tests/e2e/helpers/desktopSearch.js +0 -72
  338. package/tests/e2e/helpers/mobileSearch.js +0 -85
  339. package/tests/e2e/helpers/mockSearch.js +0 -93
  340. package/tests/e2e/helpers/rightToLeft.js +0 -29
  341. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  342. package/tests/e2e/models/BookReader.js +0 -11
  343. package/tests/e2e/models/Navigation.js +0 -56
  344. package/tests/e2e/rightToLeft.test.js +0 -20
  345. package/tests/e2e/viewmode.test.js +0 -37
  346. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  347. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  348. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  349. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  350. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  351. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  352. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  353. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  354. package/tests/plugins/plugin.autoplay.test.js +0 -52
  355. package/tests/plugins/plugin.chapters.test.js +0 -130
  356. package/tests/plugins/plugin.iframe.test.js +0 -42
  357. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  358. package/tests/plugins/plugin.resume.test.js +0 -98
  359. package/tests/plugins/plugin.text_selection.test.js +0 -203
  360. package/tests/plugins/plugin.url.test.js +0 -129
  361. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  362. package/tests/plugins/search/plugin.search.test.js +0 -173
  363. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  364. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  365. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  366. package/tests/plugins/tts/PageChunk.test.js +0 -57
  367. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  368. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  369. package/tests/plugins/tts/utils.test.js +0 -133
  370. package/tests/util/browserSniffing.test.js +0 -56
  371. package/tests/util/docCookies.test.js +0 -15
  372. package/tests/util/strings.test.js +0 -63
  373. package/tests/utils.js +0 -42
  374. package/webpack.config.js +0 -86
@@ -1,171 +0,0 @@
1
- import BookReader from '../../src/BookReader';
2
-
3
- beforeAll(() => {
4
- global.alert = jest.fn();
5
- });
6
- afterEach(() => {
7
- jest.restoreAllMocks();
8
- });
9
-
10
- describe('BookReader.prototype.toggleFullscreen', () => {
11
- test('uses `isFullscreen` to check fullscreen state', () => {
12
- const isFSmock = jest.fn();
13
- isFSmock.mockReturnValueOnce(false);
14
- const br = new BookReader();
15
- br.mode = br.constMode1up;
16
- br.enterFullscreen = jest.fn();
17
- br.isFullscreen = isFSmock;
18
-
19
- br.toggleFullscreen();
20
- expect(br.isFullscreen).toHaveBeenCalled();
21
- expect(br.isFullscreen).toHaveBeenCalled();
22
- });
23
-
24
- test('will always emit an event', () => {
25
- const br = new BookReader();
26
- br.mode = br.constMode1up;
27
- br.enterFullscreen = jest.fn();
28
- br.trigger = jest.fn();
29
- br.refs.$brContainer = {
30
- css: jest.fn(),
31
- animate: jest.fn()
32
- };
33
-
34
- br.toggleFullscreen();
35
- expect(br.enterFullscreen).toHaveBeenCalled();
36
- });
37
-
38
- test('will start with opening fullscreen', () => {
39
- const br = new BookReader();
40
- br.mode = br.constMode1up;
41
- br.enterFullscreen = jest.fn();
42
-
43
- br.toggleFullscreen();
44
- expect(br.enterFullscreen).toHaveBeenCalled();
45
- });
46
-
47
- test('will close fullscreen if BookReader is in fullscreen', () => {
48
- const br = new BookReader();
49
- br.mode = br.constMode1up;
50
- br.exitFullScreen = jest.fn();
51
- br.isFullscreenActive = true;
52
-
53
- br.toggleFullscreen();
54
- expect(br.exitFullScreen).toHaveBeenCalled();
55
- });
56
- });
57
-
58
- describe('BookReader.prototype.enterFullscreen', () => {
59
- test('will bind `_fullscreenCloseHandler` by default', () => {
60
- const br = new BookReader();
61
- br.mode = br.constMode1up;
62
- br.switchMode = jest.fn();
63
- br.updateBrClasses = jest.fn();
64
- br.refs.$brContainer = {
65
- css: jest.fn(),
66
- animate: jest.fn(),
67
- };
68
- expect(br._fullscreenCloseHandler).toBeUndefined();
69
-
70
- br.enterFullscreen();
71
- expect(br._fullscreenCloseHandler).toBeDefined();
72
- });
73
-
74
- test('fires certain events when called', () => {
75
- const br = new BookReader();
76
- br.mode = br.constMode1up;
77
- br.switchMode = jest.fn();
78
- br.updateBrClasses = jest.fn();
79
- br.trigger = jest.fn();
80
- br.resize = jest.fn();
81
- br.jumpToIndex = jest.fn();
82
- const animateMock = (options, speed, style, callback) => {
83
- callback();
84
- };
85
- br.refs.$brContainer = {
86
- css: jest.fn(),
87
- animate: animateMock,
88
- };
89
-
90
- br.enterFullscreen();
91
- expect(br.switchMode).toHaveBeenCalledTimes(1);
92
- expect(br.updateBrClasses).toHaveBeenCalledTimes(0); // book nav's fullscreen manager will set these classes
93
- expect(br.trigger).toHaveBeenCalledTimes(1);
94
- expect(br.resize).toHaveBeenCalledTimes(1);
95
- expect(br.jumpToIndex).toHaveBeenCalledTimes(1);
96
- });
97
- });
98
-
99
- describe('BookReader.prototype.exitFullScreen', () => {
100
- test('fires certain events when called', () => {
101
- const br = new BookReader();
102
- br.mode = br.constMode1up;
103
- br.switchMode = jest.fn();
104
- br.updateBrClasses = jest.fn();
105
- br.trigger = jest.fn();
106
- br.resize = jest.fn();
107
- const animateMock = (options, speed, style, callback) => {
108
- callback();
109
- };
110
- br.refs.$brContainer = {
111
- css: jest.fn(),
112
- animate: animateMock,
113
- };
114
- br.exitFullScreen();
115
- expect(br.switchMode).toHaveBeenCalledTimes(1);
116
- expect(br.updateBrClasses).toHaveBeenCalledTimes(1);
117
- expect(br.trigger).toHaveBeenCalledTimes(1);
118
- expect(br.resize).toHaveBeenCalledTimes(1);
119
- });
120
- });
121
-
122
- describe('BookReader.prototype.trigger', () => {
123
- test('fires custom event', () => {
124
- const br = new BookReader();
125
- global.br = br;
126
- global.dispatchEvent = jest.fn();
127
-
128
- const props = {bar: 1};
129
- br.trigger('foo', props);
130
- expect(global.dispatchEvent.mock.calls.length).toBe(1);
131
- });
132
- });
133
-
134
- describe('`BookReader.prototype.prev`', () => {
135
- const br = new BookReader();
136
- global.br = br;
137
- br.trigger = jest.fn();
138
- br.flipBackToIndex = jest.fn();
139
- br.jumpToIndex = jest.fn();
140
-
141
- test('does not take action if user is on front page', () => {
142
- br.firstIndex = 0;
143
- br.prev();
144
- expect(br.trigger.mock.calls.length).toBe(0);
145
- expect(br.flipBackToIndex.mock.calls.length).toBe(0);
146
- expect(br.jumpToIndex.mock.calls.length).toBe(0);
147
- });
148
-
149
- describe('2up mode', () => {
150
- test('fires event and turns the page', () => {
151
- br.firstIndex = 10;
152
- br.mode = br.constMode2up;
153
- br.prev();
154
- expect(br.jumpToIndex.mock.calls.length).toBe(0); // <-- does not get called
155
- expect(br.trigger.mock.calls.length).toBe(1);
156
- expect(br.flipBackToIndex.mock.calls.length).toBe(1);
157
- });
158
- });
159
-
160
- describe('non 2up mode', () => {
161
- test('jumps to provided index', () => {
162
- br.firstIndex = 100;
163
- br.mode = br.constMode1up;
164
- br.prev();
165
- expect(br.jumpToIndex.mock.calls.length).toBe(1); // <-- gets called
166
- expect(br.trigger.mock.calls.length).toBe(1); // <-- gets called by `jumpToIndex` internally
167
- expect(br.flipBackToIndex.mock.calls.length).toBe(1); // <-- gets called by `jumpToIndex` internally
168
- });
169
- });
170
- });
171
-
@@ -1,25 +0,0 @@
1
- import sinon from 'sinon';
2
- import { DebugConsole } from '../../src/BookReader/DebugConsole.js';
3
-
4
- beforeEach(() => {
5
- sinon.stub(console, 'log');
6
- });
7
- afterEach(() => {
8
- sinon.restore();
9
- });
10
-
11
- test('hijacks console.log', () => {
12
- const _realLog = console.log;
13
- expect(_realLog).toBe(console.log);
14
- new DebugConsole().init();
15
- expect(_realLog).not.toBe(console.log);
16
- });
17
-
18
- test('logging the same thing twice does not create more entries', () => {
19
- const dc = new DebugConsole();
20
- dc.init();
21
- dc.logToScreen(['hello']);
22
- dc.logToScreen(['hello']);
23
- expect(dc.$log.children('.log-entry')).toHaveLength(1);
24
- expect(dc.$log.find('.count').text()).toBe('(2)');
25
- });
@@ -1,150 +0,0 @@
1
- import sinon from 'sinon';
2
- import { BookModel } from '../../src/BookReader/BookModel.js';
3
- import { ImageCache } from '../../src/BookReader/ImageCache.js';
4
- import { Pow2ReduceSet } from '../../src/BookReader/ReduceSet.js';
5
- /** @typedef {import('../../src/BookReader/options.js').BookReaderOptions} BookReaderOptions */
6
-
7
- afterEach(() => {
8
- jest.restoreAllMocks();
9
- sinon.restore();
10
- });
11
-
12
- const CACHE_MOCK = { 1: [{ reduce: 3, loaded: true }] };
13
- const FIRST_PAGE_MOCK = { width: 123, height: 123, uri: 'https://archive.org/image0.jpg', pageNum: '1' };
14
- /** @type {BookReaderOptions['data']} */
15
- const SAMPLE_DATA = [
16
- [ FIRST_PAGE_MOCK ],
17
- [
18
- { width: 123, height: 123, uri: 'https://archive.org/image1.jpg', pageNum: '2' },
19
- { width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '3' },
20
- ],
21
- [
22
- { width: 123, height: 123, uri: 'https://archive.org/image3.jpg', pageNum: '4' },
23
- { width: 123, height: 123, uri: 'https://archive.org/image4.jpg', pageNum: '5' },
24
- ],
25
- [
26
- { width: 123, height: 123, uri: 'https://archive.org/image5.jpg', pageNum: '6' },
27
- ],
28
- ];
29
-
30
- describe('Image Cache', () => {
31
- describe('`image` call', () => {
32
- test('calling `image` will create an image if none is cached', () => {
33
- const reduceSet = Pow2ReduceSet;
34
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
35
- ic.cache = {};
36
- ic.image(1, 5);
37
- expect(Object.keys(ic.cache).length).toBe(1);
38
- expect(ic.cache['1'].length).toBe(1);
39
- });
40
- test('will pull from cache if image of a good quality has been stored', () => {
41
- const reduceSet = Pow2ReduceSet;
42
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
43
- const serveImgElSpy = sinon.spy(ic, '_serveImageElement');
44
- ic.cache = CACHE_MOCK;
45
- ic.image(1, 5);
46
- expect(serveImgElSpy.callCount).toBe(1);
47
- });
48
- });
49
-
50
- describe('`imageLoaded` call', () => {
51
- test('returns true if image in cache', () => {
52
- const reduceSet = Pow2ReduceSet;
53
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
54
- ic.cache = CACHE_MOCK;
55
- const isImgLoaded = ic.imageLoaded(1, 3);
56
- expect(isImgLoaded).toBe(true);
57
- });
58
- test('returns true if image reducer in cache is good enough', () => {
59
- const reduceSet = Pow2ReduceSet;
60
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
61
- ic.cache = CACHE_MOCK;
62
- const isImgLoaded = ic.imageLoaded(1, 5);
63
- expect(isImgLoaded).toBe(true);
64
- });
65
- test('returns false if no image in cache', () => {
66
- const reduceSet = Pow2ReduceSet;
67
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
68
- ic.cache = CACHE_MOCK;
69
- const isImgLoaded = ic.imageLoaded(2, 3);
70
- expect(isImgLoaded).toBe(false);
71
- });
72
- test('returns false if reducer to check is better than cache', () => {
73
- const reduceSet = Pow2ReduceSet;
74
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
75
- ic.cache = CACHE_MOCK;
76
- const isImgLoaded = ic.imageLoaded(1, 2);
77
- expect(isImgLoaded).toBe(false);
78
- });
79
- test('returns false if image has not loaded', () => {
80
- const reduceSet = Pow2ReduceSet;
81
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
82
- ic.cache = { 1: [{ reduce: 4, loaded: false }] };
83
- const isImgLoaded = ic.imageLoaded(1, 2);
84
- expect(isImgLoaded).toBe(false);
85
- });
86
- });
87
-
88
- describe('`getBestLoadedReduce` call', () => {
89
- test('handles empty cache', () => {
90
- const reduceSet = Pow2ReduceSet;
91
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
92
- ic.cache = {};
93
- expect(ic.getBestLoadedReduce(0)).toBeNull();
94
- });
95
-
96
- test('handles empty page-level cache', () => {
97
- const reduceSet = Pow2ReduceSet;
98
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
99
- ic.cache = { 0: [] };
100
- expect(ic.getBestLoadedReduce(0)).toBeNull();
101
- ic.cache = { 0: [{ reduce: 10, loaded: false }] };
102
- expect(ic.getBestLoadedReduce(0)).toBeNull();
103
- });
104
-
105
- test('chooses highest quality sufficient image', () => {
106
- const reduceSet = Pow2ReduceSet;
107
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
108
- ic.cache = { 0: [{ reduce: 1, loaded: true }, { reduce: 4, loaded: true }, { reduce: 10, loaded: true }] };
109
- expect(ic.getBestLoadedReduce(0, 5)).toBe(10);
110
- });
111
-
112
- test('chooses closest image if no lower images', () => {
113
- const reduceSet = Pow2ReduceSet;
114
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
115
- ic.cache = { 0: [{ reduce: 1, loaded: true }, { reduce: 4, loaded: true }] };
116
- expect(ic.getBestLoadedReduce(0, 5)).toBe(4);
117
- });
118
- });
119
-
120
- describe('`_serveImageElement` call', () => {
121
- test('returns jQuery image element', () => {
122
- const reduceSet = Pow2ReduceSet;
123
- const ic = new ImageCache(new BookModel({ data: SAMPLE_DATA, reduceSet }), reduceSet);
124
- const img = ic._serveImageElement(0);
125
- expect($(img).length).toBe(1);
126
- expect($(img)[0].classList.contains('BRpageimage')).toBe(true);
127
- expect($(img).attr('src')).toBe(FIRST_PAGE_MOCK.uri);
128
- });
129
-
130
- test('does not set srcset when useSrcSet=false', () => {
131
- const reduceSet = Pow2ReduceSet;
132
- const ic = new ImageCache(
133
- new BookModel({ data: SAMPLE_DATA, reduceSet }),
134
- { useSrcSet: false, reduceSet },
135
- );
136
- const $img = ic._serveImageElement(0);
137
- expect($img[0].hasAttribute('srcset')).toBe(false);
138
- });
139
-
140
- test('sets srcset when useSrcSet=true', () => {
141
- const reduceSet = Pow2ReduceSet;
142
- const ic = new ImageCache(
143
- new BookModel({ data: SAMPLE_DATA, reduceSet }),
144
- { useSrcSet: true, reduceSet },
145
- );
146
- const $img = ic._serveImageElement(0, 9);
147
- expect($img.attr('srcset')).toBeTruthy();
148
- });
149
- });
150
- });
@@ -1,164 +0,0 @@
1
- import sinon from 'sinon';
2
- import { deepCopy } from '../utils.js';
3
- import { Mode1Up } from '../../src/BookReader/Mode1Up.js';
4
- import { BookModel } from '../../src/BookReader/BookModel.js';
5
- import { DEFAULT_OPTIONS } from '../../src/BookReader/options.js';
6
- const DEFAULT_PPI = DEFAULT_OPTIONS.ppi;
7
-
8
- /** @type {BookReaderOptions['data']} */
9
- const SAMPLE_DATA = [
10
- [
11
- { width: 123, height: 123, uri: 'https://archive.org/image0.jpg', pageNum: '1' },
12
- ],
13
- [
14
- { width: 123, height: 123, uri: 'https://archive.org/image1.jpg', pageNum: '2' },
15
- { width: 123, height: 123, uri: 'https://archive.org/image2.jpg', pageNum: '3' },
16
- ],
17
- [
18
- { width: 123, height: 123, uri: 'https://archive.org/image3.jpg', pageNum: '4' },
19
- { width: 123, height: 123, uri: 'https://archive.org/image4.jpg', pageNum: '5' },
20
- ],
21
- [
22
- { width: 123, height: 123, uri: 'https://archive.org/image5.jpg', pageNum: '6' },
23
- ],
24
- ];
25
-
26
- describe('pagesWithBounds', () => {
27
- test('Works with empty book', () => {
28
- const br = { data: [] };
29
- const book = new BookModel(br);
30
- const mode = new Mode1Up(br, book);
31
- expect(Array.from(mode.pagesWithBounds())).toHaveLength(0);
32
- });
33
-
34
- test('Iterates all pages', () => {
35
- const br = { data: SAMPLE_DATA };
36
- const book = new BookModel(br);
37
- const mode = new Mode1Up(br, book);
38
- expect(Array.from(mode.pagesWithBounds())).toHaveLength(6);
39
- });
40
-
41
- test('Computes bounds', () => {
42
- const br = { data: SAMPLE_DATA };
43
- const book = new BookModel(br);
44
- const mode = new Mode1Up(br, book);
45
- const x = Array.from(mode.pagesWithBounds());
46
- expect(x.map(({top, bottom}) => [top, bottom].map(x => x.toFixed(1)))).toEqual([
47
- ['0.0', '24.6'],
48
- ['44.6', '69.2'],
49
- ['89.2', '113.8'],
50
- ['133.8', '158.4'],
51
- ['178.4', '203.0'],
52
- ['223.0', '247.6'],
53
- ]);
54
- });
55
- });
56
-
57
- describe('boundIntersection', () => {
58
- const f = Mode1Up.boundIntersection;
59
- test('Exactly equal', () => {
60
- expect(f({top: 0, bottom: 10}, {top: 0, bottom: 10})).toBe(1);
61
- });
62
-
63
- test('A contains B', () => {
64
- expect(f({top: 0, bottom: 10}, {top: 1, bottom: 2})).toBe(0.1);
65
- });
66
- test('A boundary contains B', () => {
67
- expect(f({top: 0, bottom: 10}, {top: 0, bottom: 2})).toBe(0.2);
68
- });
69
- test('A contains top part of B', () => {
70
- expect(f({top: 0, bottom: 10}, {top: 5, bottom: 15})).toBeCloseTo(5 / 15);
71
- });
72
- test('A contains bottom part of B', () => {
73
- expect(f({top: 5, bottom: 10}, {top: 0, bottom: 6})).toBe(0.1);
74
- });
75
- test('A entirely above B', () => {
76
- expect(f({top: 0, bottom: 10}, {top: 20, bottom: 30})).toBe(0);
77
- });
78
- test('A entirely below B', () => {
79
- expect(f({top: 20, bottom: 30}, {top: 0, bottom: 10})).toBe(0);
80
- });
81
- });
82
-
83
- describe('physicalInchesToDisplayPixels', () => {
84
- test('0 case', () => {
85
- const f = Mode1Up.prototype.physicalInchesToDisplayPixels;
86
- expect(f(0, 1, 100)).toBe(0);
87
- });
88
- test('Misc case', () => {
89
- const f = Mode1Up.prototype.physicalInchesToDisplayPixels;
90
- expect(f(1, 1, 100)).toBe(100);
91
- expect(f(1, 2, 100)).toBe(50);
92
- expect(f(1, 1, 78)).toBe(78);
93
- });
94
- });
95
-
96
- describe('calculateViewDimensions', () => {
97
- test('Padding added for each page', () => {
98
- const br = { data: SAMPLE_DATA };
99
- const book = new BookModel(br);
100
- const mode = new Mode1Up(br, book);
101
- const pageSizeIn = 123 / DEFAULT_PPI;
102
- const dims = mode.calculateViewDimensions(1, 2.5);
103
- expect(dims.width).toBeCloseTo(mode.physicalInchesToDisplayPixels(pageSizeIn, 1));
104
- expect(dims.height).toBeCloseTo(mode.physicalInchesToDisplayPixels(6 * pageSizeIn + 5 * 2.5, 1));
105
- });
106
-
107
- test('Reduction factor applied to each page/spacing individually', () => {
108
- const br = { data: SAMPLE_DATA };
109
- const book = new BookModel(br);
110
- const mode = new Mode1Up(br, book);
111
- const pageSizeIn = 123 / DEFAULT_PPI;
112
- const dims = mode.calculateViewDimensions(2, 5);
113
- expect(dims.width).toBeCloseTo(mode.physicalInchesToDisplayPixels(pageSizeIn, 2));
114
- expect(dims.height).toBeCloseTo(mode.physicalInchesToDisplayPixels(6 * pageSizeIn + 5 * 5, 2));
115
- });
116
-
117
- test('Uses maximal width', () => {
118
- const br = { data: deepCopy(SAMPLE_DATA) };
119
- br.data.flat().forEach((page, i) => page.width = i);
120
- const book = new BookModel(br);
121
- const mode = new Mode1Up(br, book);
122
- expect(mode.calculateViewDimensions().width).toBe(mode.physicalInchesToDisplayPixels(5 / DEFAULT_PPI));
123
- });
124
- });
125
-
126
- describe('centerY', () => {
127
- test('Computes the scroll position of the center of the screen', () => {
128
- const $container = $(`
129
- <div style="height: 500px">
130
- <div style="height: 2500px" />
131
- </div>`);
132
- $container.scrollTop(1000);
133
- expect(Mode1Up.prototype.centerY($container)).toBe(1250);
134
- });
135
-
136
- test('Handles no scroll', () => {
137
- const $container = $(`
138
- <div style="height: 1280px">
139
- <div style="height: 500px" />
140
- </div>`);
141
- expect(Mode1Up.prototype.centerY($container)).toBe(640);
142
- });
143
- });
144
-
145
- describe('centerX', () => {
146
- test('Pages narrower than viewport', () => {
147
- const $container = $(`<div style="width: 800px; height: 800px" />`);
148
- const $pagesContainer = $(`<div style="width: 500px; height: 1600px" />`)
149
- .appendTo($container);
150
- // clientWidth doesn't work in jsdom, so stub it
151
- sinon.stub($container, 'prop').returns(800);
152
- expect(Mode1Up.prototype.centerX($container, $pagesContainer)).toBe(500);
153
- });
154
-
155
- test('Pages wider than viewport', () => {
156
- const $container = $(`<div style="width: 800px; height: 800px; overflow: scroll;" />`);
157
- const $pagesContainer = $(`<div style="width: 1200px; height: 1600px" />`)
158
- .appendTo($container);
159
- $container.scrollLeft(10);
160
- // clientWidth doesn't work in jsdom, so stub it
161
- sinon.stub($container, 'prop').returns(800);
162
- expect(Mode1Up.prototype.centerX($container, $pagesContainer)).toBe(410);
163
- });
164
- });