@internetarchive/bookreader 5.0.0-95 → 5.0.0-97

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 (330) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +2257 -0
  4. package/BookReader/BookReader.js +3 -0
  5. package/BookReader/BookReader.js.LICENSE.txt +72 -0
  6. package/BookReader/BookReader.js.map +1 -0
  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 -0
  56. package/BookReader/icons/2up.svg +1 -0
  57. package/BookReader/icons/advance.svg +3 -0
  58. package/BookReader/icons/chevron-right.svg +1 -0
  59. package/BookReader/icons/close-circle-dark.svg +1 -0
  60. package/BookReader/icons/close-circle.svg +1 -0
  61. package/BookReader/icons/fullscreen.svg +1 -0
  62. package/BookReader/icons/fullscreen_exit.svg +1 -0
  63. package/BookReader/icons/hamburger.svg +1 -0
  64. package/BookReader/icons/left-arrow.svg +1 -0
  65. package/BookReader/icons/magnify-minus.svg +1 -0
  66. package/BookReader/icons/magnify-plus.svg +1 -0
  67. package/BookReader/icons/magnify.svg +1 -0
  68. package/BookReader/icons/pause.svg +1 -0
  69. package/BookReader/icons/play.svg +1 -0
  70. package/BookReader/icons/playback-speed.svg +1 -0
  71. package/BookReader/icons/read-aloud.svg +1 -0
  72. package/BookReader/icons/review.svg +3 -0
  73. package/BookReader/icons/thumbnails.svg +1 -0
  74. package/BookReader/icons/voice.svg +1 -0
  75. package/BookReader/icons/volume-full.svg +1 -0
  76. package/BookReader/images/BRicons.png +0 -0
  77. package/BookReader/images/BRicons.svg +5 -0
  78. package/BookReader/images/BRicons_ia.png +0 -0
  79. package/BookReader/images/back_pages.png +0 -0
  80. package/BookReader/images/book_bottom_icon.png +0 -0
  81. package/BookReader/images/book_down_icon.png +0 -0
  82. package/BookReader/images/book_left_icon.png +0 -0
  83. package/BookReader/images/book_leftmost_icon.png +0 -0
  84. package/BookReader/images/book_right_icon.png +0 -0
  85. package/BookReader/images/book_rightmost_icon.png +0 -0
  86. package/BookReader/images/book_top_icon.png +0 -0
  87. package/BookReader/images/book_up_icon.png +0 -0
  88. package/BookReader/images/books_graphic.svg +1 -0
  89. package/BookReader/images/booksplit.png +0 -0
  90. package/BookReader/images/control_pause_icon.png +0 -0
  91. package/BookReader/images/control_play_icon.png +0 -0
  92. package/BookReader/images/embed_icon.png +0 -0
  93. package/BookReader/images/hypothesis.ico +0 -0
  94. package/BookReader/images/icon-home-ia.png +0 -0
  95. package/BookReader/images/icon_OL-logo-xs.png +0 -0
  96. package/BookReader/images/icon_alert-xs.png +0 -0
  97. package/BookReader/images/icon_book.svg +1 -0
  98. package/BookReader/images/icon_bookmark.svg +1 -0
  99. package/BookReader/images/icon_close-pop.png +0 -0
  100. package/BookReader/images/icon_download.png +0 -0
  101. package/BookReader/images/icon_experiment.svg +1 -0
  102. package/BookReader/images/icon_gear.svg +1 -0
  103. package/BookReader/images/icon_hamburger.svg +1 -0
  104. package/BookReader/images/icon_home.png +0 -0
  105. package/BookReader/images/icon_home.svg +1 -0
  106. package/BookReader/images/icon_home_ia.png +0 -0
  107. package/BookReader/images/icon_indicator.png +0 -0
  108. package/BookReader/images/icon_info.svg +1 -0
  109. package/BookReader/images/icon_one_page.svg +1 -0
  110. package/BookReader/images/icon_pause.svg +1 -0
  111. package/BookReader/images/icon_play.svg +1 -0
  112. package/BookReader/images/icon_playback-rate.svg +1 -0
  113. package/BookReader/images/icon_return.png +0 -0
  114. package/BookReader/images/icon_search_button.svg +1 -0
  115. package/BookReader/images/icon_share.svg +1 -0
  116. package/BookReader/images/icon_skip-ahead.svg +1 -0
  117. package/BookReader/images/icon_skip-back.svg +2 -0
  118. package/BookReader/images/icon_speaker.svg +1 -0
  119. package/BookReader/images/icon_speaker_open.svg +1 -0
  120. package/BookReader/images/icon_thumbnails.svg +1 -0
  121. package/BookReader/images/icon_toc.svg +1 -0
  122. package/BookReader/images/icon_two_pages.svg +1 -0
  123. package/BookReader/images/icon_zoomer.png +0 -0
  124. package/BookReader/images/loading.gif +0 -0
  125. package/BookReader/images/logo_icon.png +0 -0
  126. package/BookReader/images/marker_chap-off.png +0 -0
  127. package/BookReader/images/marker_chap-off.svg +1 -0
  128. package/BookReader/images/marker_chap-off_ia.png +0 -0
  129. package/BookReader/images/marker_chap-on.png +0 -0
  130. package/BookReader/images/marker_chap-on.svg +1 -0
  131. package/BookReader/images/marker_srch-on.svg +1 -0
  132. package/BookReader/images/marker_srchchap-off.png +0 -0
  133. package/BookReader/images/marker_srchchap-on.png +0 -0
  134. package/BookReader/images/nav_control-dn.png +0 -0
  135. package/BookReader/images/nav_control-dn_ia.png +0 -0
  136. package/BookReader/images/nav_control-up.png +0 -0
  137. package/BookReader/images/nav_control-up_ia.png +0 -0
  138. package/BookReader/images/nav_control.png +0 -0
  139. package/BookReader/images/one_page_mode_icon.png +0 -0
  140. package/BookReader/images/paper-badge.png +0 -0
  141. package/BookReader/images/print_icon.png +0 -0
  142. package/BookReader/images/progressbar.gif +0 -0
  143. package/BookReader/images/right_edges.png +0 -0
  144. package/BookReader/images/slider.png +0 -0
  145. package/BookReader/images/slider_ia.png +0 -0
  146. package/BookReader/images/thumbnail_mode_icon.png +0 -0
  147. package/BookReader/images/translate.svg +1 -0
  148. package/BookReader/images/transparent.png +0 -0
  149. package/BookReader/images/two_page_mode_icon.png +0 -0
  150. package/BookReader/images/unviewable_page.png +0 -0
  151. package/BookReader/images/zoom_in_icon.png +0 -0
  152. package/BookReader/images/zoom_out_icon.png +0 -0
  153. package/BookReader/jquery-3.js +2 -0
  154. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  155. package/BookReader/plugins/plugin.archive_analytics.js +2 -0
  156. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -0
  157. package/BookReader/plugins/plugin.autoplay.js +2 -0
  158. package/BookReader/plugins/plugin.autoplay.js.map +1 -0
  159. package/BookReader/plugins/plugin.chapters.js +26 -0
  160. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  161. package/BookReader/plugins/plugin.chapters.js.map +1 -0
  162. package/BookReader/plugins/plugin.experiments.js +3 -0
  163. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  164. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  165. package/BookReader/plugins/plugin.iframe.js +2 -0
  166. package/BookReader/plugins/plugin.iframe.js.map +1 -0
  167. package/BookReader/plugins/plugin.iiif.js +2 -0
  168. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  169. package/BookReader/plugins/plugin.resume.js +2 -0
  170. package/BookReader/plugins/plugin.resume.js.map +1 -0
  171. package/BookReader/plugins/plugin.search.js +3 -0
  172. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  173. package/BookReader/plugins/plugin.search.js.map +1 -0
  174. package/BookReader/plugins/plugin.text_selection.js +3 -0
  175. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  176. package/BookReader/plugins/plugin.text_selection.js.map +1 -0
  177. package/BookReader/plugins/plugin.translate.js +3 -0
  178. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  179. package/BookReader/plugins/plugin.translate.js.map +1 -0
  180. package/BookReader/plugins/plugin.tts.js +3 -0
  181. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +29 -0
  182. package/BookReader/plugins/plugin.tts.js.map +1 -0
  183. package/BookReader/plugins/plugin.url.js +2 -0
  184. package/BookReader/plugins/plugin.url.js.map +1 -0
  185. package/BookReader/plugins/plugin.vendor-fullscreen.js +2 -0
  186. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -0
  187. package/BookReader/plugins/translator-worker.js +2 -0
  188. package/BookReader/plugins/translator-worker.js.map +1 -0
  189. package/BookReader/translator-worker.js +475 -0
  190. package/BookReader/webcomponents-bundle.js +3 -0
  191. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  192. package/BookReader/webcomponents-bundle.js.map +1 -0
  193. package/package.json +11 -3
  194. package/src/BookNavigator/book-navigator.js +1 -0
  195. package/src/BookReader/BookModel.js +564 -0
  196. package/src/BookReader/DragScrollable.js +233 -0
  197. package/src/BookReader/ImageCache.js +149 -0
  198. package/src/BookReader/Mode1Up.js +110 -0
  199. package/src/BookReader/Mode1UpLit.js +393 -0
  200. package/src/BookReader/Mode2Up.js +107 -0
  201. package/src/BookReader/Mode2UpLit.js +787 -0
  202. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  203. package/src/BookReader/ModeSmoothZoom.js +312 -0
  204. package/src/BookReader/ModeThumb.js +344 -0
  205. package/src/BookReader/Navbar/Navbar.js +416 -0
  206. package/src/BookReader/PageContainer.js +172 -0
  207. package/src/BookReader/ReduceSet.js +26 -0
  208. package/src/BookReader/Toolbar/Toolbar.js +362 -0
  209. package/src/BookReader/events.js +19 -0
  210. package/src/BookReader/options.js +387 -0
  211. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  212. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  213. package/src/BookReader/utils/SelectionObserver.js +45 -0
  214. package/src/BookReader/utils/classes.js +36 -0
  215. package/src/BookReader/utils.js +313 -0
  216. package/src/BookReader.js +22 -139
  217. package/src/assets/images/icon_experiment.svg +1 -0
  218. package/src/assets/images/translate.svg +1 -0
  219. package/src/css/_BRnav.scss +0 -24
  220. package/src/css/_BRsearch.scss +0 -5
  221. package/src/css/_TextSelection.scss +32 -1
  222. package/src/plugins/plugin.experiments.js +34 -9
  223. package/src/plugins/plugin.text_selection.js +8 -20
  224. package/src/plugins/translate/TranslationManager.js +167 -0
  225. package/src/plugins/translate/plugin.translate.js +414 -0
  226. package/src/plugins/tts/utils.js +9 -20
  227. package/src/util/cache.js +20 -0
  228. package/.eslintrc.cjs +0 -51
  229. package/.gitattributes +0 -2
  230. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  231. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  232. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  233. package/.github/workflows/node.js.yml +0 -102
  234. package/.github/workflows/npm-publish.yml +0 -23
  235. package/.testcaferc.cjs +0 -10
  236. package/BookReaderDemo/BookReaderDemo.css +0 -40
  237. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -112
  238. package/BookReaderDemo/BookReaderJSSimple.js +0 -56
  239. package/BookReaderDemo/IADemoBr.js +0 -149
  240. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  241. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  242. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  243. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  244. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  245. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  246. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  247. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  248. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  249. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  250. package/BookReaderDemo/demo-advanced.html +0 -33
  251. package/BookReaderDemo/demo-embed-iframe-src.html +0 -85
  252. package/BookReaderDemo/demo-embed.html +0 -26
  253. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -34
  254. package/BookReaderDemo/demo-fullscreen.html +0 -31
  255. package/BookReaderDemo/demo-iiif.html +0 -121
  256. package/BookReaderDemo/demo-internetarchive.html +0 -271
  257. package/BookReaderDemo/demo-multiple.html +0 -44
  258. package/BookReaderDemo/demo-preview-pages.html +0 -1093
  259. package/BookReaderDemo/demo-simple.html +0 -35
  260. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -34
  261. package/BookReaderDemo/ia-multiple-volumes-manifest.js +0 -169
  262. package/BookReaderDemo/immersion-1up.html +0 -64
  263. package/BookReaderDemo/immersion-mode.html +0 -33
  264. package/BookReaderDemo/toggle_controls.html +0 -54
  265. package/BookReaderDemo/view_mode.html +0 -40
  266. package/BookReaderDemo/viewmode-cycle.html +0 -40
  267. package/CHANGELOG.md +0 -1087
  268. package/CONTRIBUTING.md +0 -7
  269. package/babel.config.cjs +0 -20
  270. package/codecov.yml +0 -23
  271. package/index.html +0 -34
  272. package/netlify.toml +0 -9
  273. package/renovate.json +0 -52
  274. package/screenshot.png +0 -0
  275. package/scripts/postversion.js +0 -11
  276. package/scripts/preversion.js +0 -15
  277. package/scripts/version.js +0 -24
  278. package/tests/e2e/README.md +0 -112
  279. package/tests/e2e/autoplay.test.js +0 -16
  280. package/tests/e2e/base.test.js +0 -27
  281. package/tests/e2e/helpers/base.js +0 -263
  282. package/tests/e2e/helpers/debug.js +0 -13
  283. package/tests/e2e/helpers/mockSearch.js +0 -90
  284. package/tests/e2e/helpers/params.js +0 -17
  285. package/tests/e2e/helpers/rightToLeft.js +0 -23
  286. package/tests/e2e/helpers/search.js +0 -73
  287. package/tests/e2e/models/BookReader.js +0 -11
  288. package/tests/e2e/models/Navigation.js +0 -39
  289. package/tests/e2e/rightToLeft.test.js +0 -19
  290. package/tests/e2e/viewmode.test.js +0 -44
  291. package/tests/jest/BookNavigator/book-navigator.test.js +0 -653
  292. package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +0 -43
  293. package/tests/jest/BookNavigator/bookmarks/bookmark-edit.test.js +0 -132
  294. package/tests/jest/BookNavigator/bookmarks/bookmarks-list.test.js +0 -221
  295. package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +0 -45
  296. package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +0 -67
  297. package/tests/jest/BookNavigator/downloads/downloads.test.js +0 -53
  298. package/tests/jest/BookNavigator/search/search-provider.test.js +0 -179
  299. package/tests/jest/BookNavigator/search/search-results.test.js +0 -289
  300. package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +0 -49
  301. package/tests/jest/BookNavigator/viewable-files/viewable-files-provider.test.js +0 -80
  302. package/tests/jest/BookNavigator/visual-adjustments.test.js +0 -200
  303. package/tests/jest/BookReader.keyboard.test.js +0 -190
  304. package/tests/jest/BookReader.options.test.js +0 -47
  305. package/tests/jest/BookReader.test.js +0 -316
  306. package/tests/jest/plugins/plugin.archive_analytics.test.js +0 -20
  307. package/tests/jest/plugins/plugin.autoplay.test.js +0 -35
  308. package/tests/jest/plugins/plugin.chapters.test.js +0 -193
  309. package/tests/jest/plugins/plugin.iframe.test.js +0 -42
  310. package/tests/jest/plugins/plugin.resume.test.js +0 -85
  311. package/tests/jest/plugins/plugin.text_selection.test.js +0 -447
  312. package/tests/jest/plugins/plugin.vendor-fullscreen.test.js +0 -65
  313. package/tests/jest/plugins/search/plugin.search.test.js +0 -120
  314. package/tests/jest/plugins/search/plugin.search.view.test.js +0 -131
  315. package/tests/jest/plugins/search/utils.js +0 -25
  316. package/tests/jest/plugins/search/utils.test.js +0 -29
  317. package/tests/jest/plugins/tts/AbstractTTSEngine.test.js +0 -173
  318. package/tests/jest/plugins/tts/FestivalTTSEngine.test.js +0 -59
  319. package/tests/jest/plugins/tts/PageChunk.test.js +0 -57
  320. package/tests/jest/plugins/tts/PageChunkIterator.test.js +0 -179
  321. package/tests/jest/plugins/tts/WebTTSEngine.test.js +0 -178
  322. package/tests/jest/plugins/tts/utils.test.js +0 -74
  323. package/tests/jest/plugins/url/UrlPlugin.test.js +0 -198
  324. package/tests/jest/plugins/url/plugin.url.test.js +0 -168
  325. package/tests/jest/setup.js +0 -3
  326. package/tests/jest/util/browserSniffing.test.js +0 -62
  327. package/tests/jest/util/docCookies.test.js +0 -24
  328. package/tests/jest/util/strings.test.js +0 -63
  329. package/tests/jest/utils.js +0 -83
  330. package/webpack.config.js +0 -97
@@ -1,178 +0,0 @@
1
- import sinon from 'sinon';
2
- import WebTTSEngine, { WebTTSSound } from '@/src/plugins/tts/WebTTSEngine.js';
3
- import { afterEventLoop, eventTargetMixin } from '../../utils.js';
4
-
5
- beforeEach(() => {
6
- window.speechSynthesis = {
7
- cancel: sinon.stub(),
8
- speak: sinon.stub(),
9
- pause: sinon.stub(),
10
- resume: sinon.stub(),
11
-
12
- ...eventTargetMixin(),
13
- };
14
- window.SpeechSynthesisUtterance = function (text) {
15
- this.text = text;
16
- Object.assign(this, eventTargetMixin());
17
- };
18
- });
19
-
20
- afterEach(() => {
21
- delete window.speechSynthesis;
22
- delete window.SpeechSynthesisUtterance;
23
- });
24
-
25
- describe('WebTTSEngine', () => {
26
- test('getVoices should include default voice when no actual default', () => {
27
- // iOS devices set all the voices to default -_-
28
- speechSynthesis.getVoices = () => [
29
- {
30
- default: true,
31
- lang: "ar-001",
32
- localService: true,
33
- name: "Majed",
34
- voiceURI: "com.apple.voice.compact.ar-001.Maged",
35
- },
36
- {
37
- default: true,
38
- lang: "bg-BG",
39
- localService: true,
40
- name: "Daria",
41
- voiceURI: "com.apple.voice.compact.bg-BG.Daria",
42
- },
43
- ];
44
- const voices = WebTTSEngine.prototype.getVoices();
45
- expect(voices.length).toBe(3);
46
- expect(voices[0].voiceURI).toBe('bookreader.SystemDefault');
47
- });
48
-
49
- test('getVoices should not include default voice when there is a default', () => {
50
- speechSynthesis.getVoices = () => [
51
- {
52
- default: true,
53
- lang: "ar-001",
54
- localService: true,
55
- name: "Majed",
56
- voiceURI: "com.apple.voice.compact.ar-001.Maged",
57
- },
58
- {
59
- default: false,
60
- lang: "bg-BG",
61
- localService: true,
62
- name: "Daria",
63
- voiceURI: "com.apple.voice.compact.bg-BG.Daria",
64
- },
65
- ];
66
- const voices = WebTTSEngine.prototype.getVoices();
67
- expect(voices.length).toBe(2);
68
- });
69
- });
70
-
71
- describe('WebTTSSound', () => {
72
- describe('setPlaybackRate', () => {
73
- test('works if not playing', () => {
74
- const sound = new WebTTSSound('hello world');
75
- sound.load();
76
- expect(sound.rate).toBe(1);
77
- sound.setPlaybackRate(2);
78
- expect(sound.rate).toBe(2);
79
- });
80
-
81
- test('reloading does not resolve the original promise', async () => {
82
- const sound = new WebTTSSound('hello world');
83
- sound.load();
84
- const finishSpy = sinon.spy();
85
- sound.play().then(finishSpy);
86
- sound.reload();
87
- sound.utterance.dispatchEvent('pause', {});
88
- await afterEventLoop();
89
- sound.utterance.dispatchEvent('end', {});
90
- await afterEventLoop();
91
- expect(finishSpy.callCount).toBe(0);
92
- });
93
- });
94
-
95
- describe('_chromePausingBugFix', () => {
96
- /** @type {sinon.SinonFakeTimers} */
97
- let clock = null;
98
-
99
- beforeEach(() => {
100
- clock = sinon.useFakeTimers();
101
- });
102
-
103
- afterEach(() => {
104
- clock.restore();
105
- });
106
-
107
- test('if speech less than 15s, nothing special', async () => {
108
- const sound = new WebTTSSound('hello world foo bar');
109
- sound.load();
110
- sound.play();
111
- sound._chromePausingBugFix();
112
- clock.tick(10000);
113
- sound.utterance.dispatchEvent('end', {});
114
- await afterEventLoop();
115
- expect(speechSynthesis.pause.callCount).toBe(0);
116
- });
117
-
118
- test('if speech greater than 15s, pause called', async () => {
119
- const sound = new WebTTSSound('foo bah');
120
- sound.load();
121
- sound.play();
122
- sound._chromePausingBugFix();
123
- clock.tick(20000);
124
-
125
- await afterEventLoop();
126
- expect(speechSynthesis.pause.callCount).toBe(1);
127
- });
128
-
129
- test('on pause, stops sound if timed out', async () => {
130
- const sound = new WebTTSSound('foo bah');
131
- sound.load();
132
- sound.play();
133
- sound.stop = sinon.stub();
134
- sound._chromePausingBugFix();
135
- clock.tick(5000);
136
- sound.utterance.dispatchEvent('pause', {});
137
- await afterEventLoop();
138
- clock.tick(15000);
139
-
140
- await afterEventLoop();
141
- expect(sound.stop.callCount).toBe(1);
142
- });
143
- });
144
-
145
- test('fire pause if browser does not do it', async () => {
146
- const clock = sinon.useFakeTimers();
147
- const sound = new WebTTSSound('foo bah');
148
- sound.load();
149
- sound.play();
150
- const dispatchSpy = sinon.spy(sound.utterance, 'dispatchEvent');
151
- sound.pause();
152
- clock.tick(1000);
153
- clock.restore();
154
-
155
- await afterEventLoop();
156
- expect(dispatchSpy.callCount).toBe(1);
157
- expect(dispatchSpy.args[0][0].type).toBe('pause');
158
- });
159
-
160
- test('fire resume if browser does not do it', async () => {
161
- const clock = sinon.useFakeTimers();
162
- const languageGetter = jest.spyOn(window.navigator, 'userAgent', 'get');
163
- languageGetter.mockReturnValue('firefox android');
164
- const sound = new WebTTSSound('foo bah');
165
- sound.load();
166
- sound.play();
167
- sound.started = true;
168
- sound.paused = true;
169
- const dispatchSpy = sinon.spy(sound.utterance, 'dispatchEvent');
170
- sound.resume();
171
- clock.tick(1000);
172
- clock.restore();
173
-
174
- await afterEventLoop();
175
- expect(dispatchSpy.callCount).toBe(1);
176
- expect(dispatchSpy.args[0][0].type).toBe('resume');
177
- });
178
- });
@@ -1,74 +0,0 @@
1
- import * as utils from '@/src/plugins/tts/utils.js';
2
-
3
- describe('approximateWordCount', () => {
4
- const { approximateWordCount } = utils;
5
-
6
- test('Empties', () => {
7
- expect(approximateWordCount('')).toBe(0);
8
- expect(approximateWordCount(' ')).toBe(0);
9
- });
10
-
11
- test('Spaceless', () => {
12
- expect(approximateWordCount('supercalifragilisticexpialidocious')).toBe(1);
13
- });
14
-
15
- test('Basic', () => {
16
- expect(approximateWordCount('the quick brown fox jumped over the lazy dog')).toBe(9);
17
- expect(approximateWordCount('to be or not to be that is the question')).toBe(10);
18
- });
19
-
20
- test('Spacing', () => {
21
- expect(approximateWordCount(' the quick brown fox jumped over the lazy dog ')).toBe(9);
22
- });
23
-
24
- test('Punctuation not separate word (unless separate)', () => {
25
- expect(approximateWordCount('the. quick brown. fox. jumped. over the. lazy dog.')).toBe(9);
26
- expect(approximateWordCount(' . . . . . ')).toBe(5);
27
- });
28
-
29
- test('Realword examples', () => {
30
- expect(approximateWordCount("Albert\u2019s cats had a .large blue dish of milk for breakfast.")).toBe(11);
31
- expect(approximateWordCount("FARM FOLK O nce upon a time there was a sturdy little boy who lived in Belgium. Every morning after he milked the cows, he gave his cats a large blue dish of milk for breakfast.")).toBe(36);
32
- });
33
- });
34
-
35
- describe('toISO6391', () => {
36
- const { toISO6391 } = utils;
37
-
38
- test('ISO 639-1', () => {
39
- expect(toISO6391('en')).toBe('en');
40
- expect(toISO6391('fr')).toBe('fr');
41
- expect(toISO6391('SQ')).toBe('sq');
42
- expect(toISO6391('aa')).toBe('aa');
43
- });
44
-
45
- test('ISO 639-2/T', () => {
46
- expect(toISO6391('amh')).toBe('am');
47
- expect(toISO6391('BIH')).toBe('bh');
48
- });
49
-
50
- test('ISO 639-2/B', () => {
51
- expect(toISO6391('BAQ')).toBe('eu');
52
- expect(toISO6391('chi')).toBe('zh');
53
- });
54
-
55
- test('Name', () => {
56
- expect(toISO6391('english')).toBe('en');
57
- expect(toISO6391('German')).toBe('de');
58
- });
59
-
60
- test('Endonym', () => {
61
- expect(toISO6391('français')).toBe('fr');
62
- expect(toISO6391('汉语')).toBe('zh');
63
- });
64
-
65
- test('Mismatch', () => {
66
- expect(toISO6391('Parseltongue')).toBe(null);
67
- expect(toISO6391('Pig Latin')).toBe(null);
68
- });
69
-
70
- test('Falsey inputs', () => {
71
- expect(toISO6391(null)).toBe(null);
72
- expect(toISO6391('')).toBe(null);
73
- });
74
- });
@@ -1,198 +0,0 @@
1
- import { UrlPlugin } from '@/src/plugins/url/UrlPlugin.js';
2
-
3
- afterEach(() => {
4
- jest.clearAllMocks();
5
- });
6
-
7
- describe('UrlPlugin tests', () => {
8
- const urlPlugin = new UrlPlugin();
9
-
10
- describe('urlStateToUrlString tests', () => {
11
- test('urlStateToUrlString with known states in schema', () => {
12
- const urlState = { page: 'n7', mode: '1up', search: 'foo' };
13
- const urlStateWithQueries = { page: 'n7', mode: '1up', q: 'hello', view: 'theater', sort: 'title_asc' };
14
-
15
- const expectedUrlFromState = 'page/n7/mode/1up?q=foo';
16
- const expectedUrlFromStateWithQueries = 'page/n7/mode/1up?q=hello&view=theater&sort=title_asc';
17
-
18
- expect(urlPlugin.urlStateToUrlString(urlState)).toBe(expectedUrlFromState);
19
- expect(urlPlugin.urlStateToUrlString(urlStateWithQueries)).toBe(expectedUrlFromStateWithQueries);
20
- });
21
-
22
- test('encodes page number', () => {
23
- expect(urlPlugin.urlStateToUrlString({ page: '12/46' })).toBe(`page/12%2F46`);
24
- });
25
-
26
- test('urlStateToUrlString with unknown states in schema', () => {
27
- const urlState = { page: 'n7', mode: '1up' };
28
- const urlStateWithQueries = { page: 'n7', mode: '1up', q: 'hello', viewer: 'theater', sortBy: 'title_asc' };
29
-
30
- const expectedUrlFromState = 'page/n7/mode/1up';
31
- const expectedUrlFromStateWithQueries = 'page/n7/mode/1up?q=hello&viewer=theater&sortBy=title_asc';
32
-
33
- expect(urlPlugin.urlStateToUrlString(urlState)).toBe(expectedUrlFromState);
34
- expect(urlPlugin.urlStateToUrlString(urlStateWithQueries)).toBe(expectedUrlFromStateWithQueries);
35
- });
36
-
37
- test('urlStateToUrlString with boolean value', () => {
38
- const urlState = { page: 'n7', mode: '1up', search: 'foo', view: 'theater', wrapper: 'false' };
39
- const expectedUrlFromState = 'page/n7/mode/1up?q=foo&view=theater&wrapper=false';
40
-
41
- expect(urlPlugin.urlStateToUrlString(urlState)).toBe(expectedUrlFromState);
42
- });
43
- });
44
-
45
- describe('urlStringToUrlState tests', () => {
46
- test('urlStringToUrlState without query string', () => {
47
- const url = '/page/n7/mode/2up';
48
- const url1 = '/page/n7/mode/1up';
49
-
50
- expect(urlPlugin.urlStringToUrlState(url)).toEqual({page: 'n7', mode: '2up'});
51
- expect(urlPlugin.urlStringToUrlState(url1)).toEqual({page: 'n7', mode: '1up'});
52
- });
53
-
54
- test('decodes page number', () => {
55
- expect(urlPlugin.urlStringToUrlState('/page/12%2F46')).toStrictEqual({ page: '12/46' });
56
- });
57
-
58
- test('urlStringToUrlState with deprecated_for', () => {
59
- const url = '/page/n7/mode/2up/search/hello';
60
-
61
- expect(urlPlugin.urlStringToUrlState(url)).toEqual({page: 'n7', mode: '2up', q: 'hello'});
62
- });
63
-
64
- test('urlStringToUrlState with query string', () => {
65
- const url = '/page/n7/mode/2up/search/hello?view=theather&foo=bar&sort=title_asc';
66
- const url1 = '/mode/2up?ref=ol&ui=embed&wrapper=false&view=theater';
67
-
68
- expect(urlPlugin.urlStringToUrlState(url)).toEqual(
69
- {page: 'n7', mode: '2up', q: 'hello', view: 'theather', foo: 'bar', sort: 'title_asc'},
70
- );
71
- expect(urlPlugin.urlStringToUrlState(url1)).toEqual(
72
- {mode: '2up', ref: 'ol', ui: 'embed', wrapper: 'false', view: 'theater'},
73
- );
74
- });
75
-
76
- test('urlStringToUrlState compare search and ?q', () => {
77
- const url = '/page/n7/mode/2up/search/hello';
78
- urlPlugin.urlState = { q: 'hello' };
79
-
80
- expect(urlPlugin.urlStringToUrlState(url)).toEqual({page: 'n7', mode: '2up', q: 'hello'});
81
- });
82
- });
83
-
84
- describe('url plugin helper functions', () => {
85
- test('setUrlParam', () => {
86
- urlPlugin.urlState = {};
87
- urlPlugin.setUrlParam('page', '20');
88
- urlPlugin.setUrlParam('mode', '2up');
89
-
90
- expect(urlPlugin.urlState).toEqual({page: '20', mode: '2up'});
91
- });
92
-
93
- test('removeUrlParam', () => {
94
- urlPlugin.setUrlParam('page', '20');
95
- urlPlugin.setUrlParam('mode', '2up');
96
- urlPlugin.removeUrlParam('mode');
97
-
98
- expect(urlPlugin.urlState).toEqual({page: '20'});
99
- });
100
-
101
- test('getUrlParam', () => {
102
- urlPlugin.setUrlParam('page', '20');
103
- urlPlugin.setUrlParam('mode', '2up');
104
- expect(urlPlugin.getUrlParam('page')).toEqual('20');
105
- expect(urlPlugin.getUrlParam('mode')).toEqual('2up');
106
- });
107
- });
108
-
109
- describe('pullFromAddressBar and pushToAddressBar - hash mode', () => {
110
- test('url first load - empty state', () => {
111
- urlPlugin.urlState = {};
112
- urlPlugin.urlMode = 'hash';
113
-
114
- urlPlugin.pullFromAddressBar({ pathname: '', search: '', hash: '#' });
115
- expect(urlPlugin.urlState).toEqual({});
116
-
117
- urlPlugin.pushToAddressBar();
118
- expect(window.location.hash).toEqual('');
119
- });
120
-
121
- test('url without mode state value - use default', () => {
122
- urlPlugin.urlState = {};
123
- urlPlugin.urlMode = 'hash';
124
-
125
- urlPlugin.pullFromAddressBar({ pathname: '', search: '', hash: '#page/12' });
126
- expect(urlPlugin.urlState).toEqual({page: '12'});
127
-
128
- urlPlugin.pushToAddressBar();
129
- expect(window.location.hash).toEqual('#page/12');
130
- });
131
-
132
- test('url with query param', () => {
133
- urlPlugin.urlState = {};
134
- urlPlugin.urlMode = 'hash';
135
-
136
- urlPlugin.pullFromAddressBar({ pathname: '', search: '', hash: '#page/12?q=hello&view=theater' });
137
- expect(urlPlugin.urlState).toEqual({page: '12', q: 'hello', view: 'theater'});
138
-
139
- urlPlugin.pushToAddressBar();
140
- expect(window.location.hash).toEqual('#page/12?q=hello&view=theater');
141
- });
142
- });
143
-
144
- describe('pullFromAddressBar and pushToAddressBar - history mode', () => {
145
- test('url first load - empty state', () => {
146
- urlPlugin.urlState = {};
147
- urlPlugin.urlHistoryBasePath = '/details/foo';
148
- urlPlugin.urlMode = 'history';
149
-
150
- urlPlugin.pullFromAddressBar({ pathname: '', search: '', hash: '' });
151
- expect(urlPlugin.urlState).toEqual({});
152
-
153
- urlPlugin.pushToAddressBar();
154
- expect(window.location.pathname).toEqual('/details/foo');
155
- });
156
-
157
- test('url without mode state value', () => {
158
- urlPlugin.urlState = {};
159
- urlPlugin.urlHistoryBasePath = '/details/foo/';
160
- urlPlugin.urlMode = 'history';
161
-
162
- urlPlugin.pullFromAddressBar({ pathname: '/details/foo/page/12', search: '', hash: '' });
163
- expect(urlPlugin.urlState).toEqual({page: '12'});
164
-
165
- urlPlugin.pushToAddressBar();
166
- expect(window.location.pathname).toEqual('/details/foo/page/12');
167
- });
168
-
169
- test('url with query param', () => {
170
- urlPlugin.urlState = {};
171
- urlPlugin.urlHistoryBasePath = '/details/foo/';
172
- urlPlugin.urlMode = 'history';
173
-
174
- urlPlugin.pullFromAddressBar({ pathname: '/details/foo/page/12', search: '?q=hello&view=theater', hash: '' });
175
- expect(urlPlugin.urlState).toEqual({page: '12', q: 'hello', view: 'theater'});
176
-
177
- urlPlugin.pushToAddressBar();
178
- const locationUrl = `${window.location.pathname}${window.location.search}`;
179
- expect(locationUrl).toEqual('/details/foo/page/12?q=hello&view=theater');
180
- });
181
-
182
- test('strips leading slash of incoming path name for no double slash', () => {
183
- const urlPlugin = new UrlPlugin();
184
- urlPlugin.urlMode = 'history';
185
-
186
- urlPlugin.urlHistoryBasePath = '/details/SubBookTest/book1/GPORFP/';
187
- urlPlugin.urlState = {
188
- "mode": "1up",
189
- };
190
-
191
- urlPlugin.setUrlParam('sort', 'title_asc');
192
- urlPlugin.setUrlParam('mode', 'thumb');
193
-
194
- expect(window.location.href).toEqual('http://localhost/details/SubBookTest/book1/GPORFP/mode/thumb?sort=title_asc');
195
- });
196
- });
197
-
198
- });
@@ -1,168 +0,0 @@
1
- import BookReader from '@/src/BookReader.js';
2
- import '@/src/plugins/url/plugin.url.js';
3
- import sinon from 'sinon';
4
-
5
- let br;
6
- beforeAll(() => {
7
- document.body.innerHTML = '<div id="BookReader">';
8
- br = new BookReader();
9
- });
10
-
11
- afterEach(() => {
12
- jest.clearAllMocks();
13
- sinon.restore();
14
- });
15
-
16
- describe('Plugin: URL controller', () => {
17
- test('has default option flag', () => {
18
- expect(BookReader.defaultOptions.enableUrlPlugin).toEqual(true);
19
- });
20
-
21
- test('adds url specific fields to BR', () => {
22
- const { defaultOptions } = BookReader;
23
- expect(defaultOptions).toHaveProperty('urlTrackIndex0');
24
- expect(defaultOptions).toHaveProperty('urlTrackedParams');
25
- expect(defaultOptions).toHaveProperty('urlHistoryBasePath');
26
- expect(defaultOptions).toHaveProperty('urlMode');
27
- expect(defaultOptions).toHaveProperty('updateWindowTitle');
28
- expect(defaultOptions).toHaveProperty('defaults');
29
- expect(defaultOptions).toHaveProperty('bookId');
30
- });
31
-
32
- test('has a whitelist of params that it tracks', () => {
33
- ['page', 'search', 'mode', 'region', 'highlight'];
34
- const { defaultOptions: { urlTrackedParams } } = BookReader;
35
- expect(Array.isArray(urlTrackedParams)).toEqual(true);
36
- expect(urlTrackedParams.find(param => param === 'page')).toBeTruthy();
37
- expect(urlTrackedParams.find(param => param === 'search')).toBeTruthy();
38
- expect(urlTrackedParams.find(param => param === 'mode')).toBeTruthy();
39
- expect(urlTrackedParams.find(param => param === 'region')).toBeTruthy();
40
- expect(urlTrackedParams.find(param => param === 'highlight')).toBeTruthy();
41
- expect(urlTrackedParams.find(param => param === 'view')).toBeTruthy();
42
- });
43
-
44
- test('initializes polling for url changes if using hash', () => {
45
- BookReader.prototype.urlStartLocationPolling = jest.fn();
46
- br.init();
47
-
48
- expect(br.urlStartLocationPolling).toHaveBeenCalled();
49
- });
50
-
51
- test('updates URL when index changes', () => {
52
- window.history.replaceState = jest.fn();
53
- BookReader.prototype.currentIndex = jest.fn(() => 1);
54
- BookReader.prototype.urlReadFragment = jest.fn(() => '/page/2/mode/1up');
55
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
56
- index: 88,
57
- mode: 1,
58
- search: '',
59
- }));
60
- br.options.urlMode = 'history';
61
- br.init();
62
- br.urlUpdateFragment();
63
-
64
- expect(window.history.replaceState).toHaveBeenCalled();
65
- });
66
-
67
- test('updates URL when mode changes', () => {
68
- window.history.replaceState = jest.fn();
69
- BookReader.prototype.currentIndex = jest.fn(() => 1);
70
- BookReader.prototype.urlReadFragment = jest.fn(() => '/page/2/mode/1up');
71
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
72
- index: 2,
73
- mode: 2,
74
- search: '',
75
- }));
76
- br.options.urlMode = 'history';
77
- br.init();
78
- br.urlUpdateFragment();
79
-
80
- expect(window.history.replaceState).toHaveBeenCalled();
81
- });
82
-
83
- test('updates URL when search changes', () => {
84
- window.history.replaceState = jest.fn();
85
- BookReader.prototype.currentIndex = jest.fn(() => 1);
86
- BookReader.prototype.urlReadFragment = jest.fn(() => '');
87
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
88
- index: 1,
89
- mode: 2,
90
- search: 'foo',
91
- }));
92
- BookReader.prototype.search = jest.fn();
93
- br.options.urlMode = 'history';
94
- br.init();
95
- br.urlUpdateFragment();
96
-
97
- expect(window.history.replaceState).toHaveBeenCalled();
98
- });
99
-
100
- test('updates URL when view changes', () => {
101
- window.history.replaceState = jest.fn();
102
- BookReader.prototype.currentIndex = jest.fn(() => 1);
103
- BookReader.prototype.urlReadFragment = jest.fn(() => '');
104
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
105
- index: 1,
106
- mode: 2,
107
- view: 'theater',
108
- }));
109
- BookReader.prototype.search = jest.fn();
110
- br.options.urlMode = 'history';
111
- br.init();
112
- br.urlUpdateFragment();
113
-
114
- expect(window.history.replaceState).toHaveBeenCalled();
115
- });
116
-
117
- test('switches to hashMode if replaceState errors', () => {
118
- window.history.replaceState = jest.fn(() => {
119
- throw new Error('foo');
120
- });
121
- BookReader.prototype.currentIndex = jest.fn(() => 1);
122
- BookReader.prototype.urlReadFragment = jest.fn(() => '');
123
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
124
- index: 1,
125
- mode: 2,
126
- view: 'theater',
127
- }));
128
- BookReader.prototype.search = jest.fn();
129
- br.options.urlMode = 'history';
130
- br.init();
131
- br.urlUpdateFragment();
132
-
133
- expect(window.history.replaceState).toHaveBeenCalled();
134
- expect(br.options.urlMode).toEqual('hash');
135
- });
136
-
137
- test('does not update URL when search in query string', () => {
138
- window.history.replaceState = jest.fn();
139
- BookReader.prototype.currentIndex = jest.fn(() => 1);
140
- BookReader.prototype.urlReadFragment = jest.fn(() => 'mode/2up');
141
- BookReader.prototype.getLocationSearch = jest.fn(() => '?q=foo');
142
- BookReader.prototype.paramsFromCurrent = jest.fn(() => ({
143
- index: 1,
144
- mode: 2,
145
- search: 'foo',
146
- }));
147
- BookReader.prototype.search = jest.fn();
148
- br.options.plugins.search = { initialSearchTerm: 'foo' };
149
- br.options.urlMode = 'history';
150
- br.init();
151
- br.urlUpdateFragment();
152
-
153
- expect(window.history.replaceState).toHaveBeenCalledTimes(0);
154
- });
155
-
156
- test('only q= param is selected from url query params', () => {
157
- const INTIAL_URL = "http://127.0.0.1:8080/BookReaderDemo/demo-internetarchive.html?ocaid=adventuresofoli00dick&q=foo";
158
- const result = br.urlParamsFiltersOnlySearch(INTIAL_URL);
159
- expect(result).toBe("?q=foo");
160
- });
161
-
162
- test('only q= param is selected from url query params with special character', () => {
163
- const INTIAL_URL = "http://127.0.0.1:8080/BookReaderDemo/demo-internetarchive.html?ocaid=adventuresofoli00dick&q=foo%24%24";
164
- const result = br.urlParamsFiltersOnlySearch(INTIAL_URL);
165
- expect(result).toBe("?q=foo%24%24");
166
- });
167
- });
168
-
@@ -1,3 +0,0 @@
1
- process.on("unhandledRejection", (error) => {
2
- throw error;
3
- });
@@ -1,62 +0,0 @@
1
- import {
2
- isChrome, isEdge, isFirefox, isSafari,
3
- } from '@/src/util/browserSniffing.js';
4
-
5
- const TESTS = [
6
- {
7
- name: 'Firefox on Windows 10',
8
- userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0',
9
- vendor: '',
10
- machingFn: isFirefox,
11
- },
12
- {
13
- name: 'Chrome on Windows 10',
14
- userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
15
- vendor: 'Google Inc.',
16
- machingFn: isChrome,
17
- },
18
- {
19
- name: 'Edge on Windows 10',
20
- userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362',
21
- vendor: '',
22
- machingFn: isEdge,
23
- },
24
- {
25
- name: 'Edge on Windows 11',
26
- userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0',
27
- vendor: 'Google Inc.',
28
- machingFn: isEdge,
29
- },
30
- {
31
- name: 'IE11 on Windows 10',
32
- userAgent: 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; .NET4.0C; .NET4.0E; Tablet PC 2.0; Zoom 3.6.0; rv:11.0) like Gecko',
33
- vendor: '',
34
- machingFn: null,
35
- },
36
- {
37
- name: 'Chromium on Windows 10',
38
- userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3923.0 Safari/537.36',
39
- vendor: 'Google Inc.',
40
- machingFn: isChrome,
41
- },
42
- {
43
- name: 'Safari 12 on Mojave',
44
- userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15',
45
- vendor: 'Apple Computer, Inc.',
46
- machingFn: isSafari,
47
- },
48
- {
49
- name: 'Safari 10 on iPhone 7',
50
- userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
51
- vendor: 'Apple Computer, Inc.',
52
- machingFn: isSafari,
53
- },
54
- ];
55
-
56
- for (const fn of [isChrome, isEdge, isFirefox, isSafari]) {
57
- describe(fn.name, () => {
58
- for (const { name, userAgent, vendor, machingFn } of TESTS) {
59
- test(name, () => expect(fn(userAgent, vendor)).toBe(machingFn == fn));
60
- }
61
- });
62
- }