@internetarchive/bookreader 5.0.0-11 → 5.0.0-110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/BookReader/474.js +2 -0
  2. package/BookReader/474.js.map +1 -0
  3. package/BookReader/BookReader.css +604 -1239
  4. package/BookReader/BookReader.js +1 -1
  5. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  6. package/BookReader/BookReader.js.map +1 -1
  7. package/BookReader/bergamot-translator-worker.js +2966 -0
  8. package/BookReader/bergamot-translator-worker.wasm +0 -0
  9. package/BookReader/hypothesis/LICENSE +50 -0
  10. package/BookReader/hypothesis/README.md +55 -0
  11. package/BookReader/hypothesis/build/boot.js +1 -0
  12. package/BookReader/hypothesis/build/manifest.json +20 -0
  13. package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
  14. package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
  15. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
  16. package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
  17. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
  18. package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
  19. package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
  20. package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
  21. package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  22. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  23. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  24. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  25. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  26. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
  27. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  28. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
  29. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
  30. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  31. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
  32. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  33. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  34. package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  35. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
  36. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  37. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  38. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  39. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  40. package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  41. package/BookReader/hypothesis/build/styles/highlights.css +2 -0
  42. package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
  43. package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
  44. package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
  45. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
  46. package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
  47. package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
  48. package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
  49. package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
  50. package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
  51. package/BookReader/hypothesis/package.json +126 -0
  52. package/BookReader/ia-bookreader-bundle.js +1907 -0
  53. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
  54. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  55. package/BookReader/icons/1up.svg +1 -1
  56. package/BookReader/icons/2up.svg +1 -1
  57. package/BookReader/icons/advance.svg +1 -1
  58. package/BookReader/icons/chevron-right.svg +1 -1
  59. package/BookReader/icons/close-circle-dark.svg +1 -1
  60. package/BookReader/icons/close-circle.svg +1 -1
  61. package/BookReader/icons/fullscreen.svg +1 -1
  62. package/BookReader/icons/fullscreen_exit.svg +1 -1
  63. package/BookReader/icons/hamburger.svg +1 -1
  64. package/BookReader/icons/left-arrow.svg +1 -1
  65. package/BookReader/icons/magnify-minus.svg +1 -1
  66. package/BookReader/icons/magnify-plus.svg +1 -1
  67. package/BookReader/icons/magnify.svg +1 -1
  68. package/BookReader/icons/pause.svg +1 -1
  69. package/BookReader/icons/play.svg +1 -1
  70. package/BookReader/icons/playback-speed.svg +1 -1
  71. package/BookReader/icons/read-aloud.svg +1 -1
  72. package/BookReader/icons/review.svg +1 -1
  73. package/BookReader/icons/slider-toggle.svg +1 -0
  74. package/BookReader/icons/thumbnails.svg +1 -1
  75. package/BookReader/icons/voice.svg +1 -0
  76. package/BookReader/icons/volume-full.svg +1 -1
  77. package/BookReader/images/BRicons.svg +3 -3
  78. package/BookReader/images/books_graphic.svg +1 -1
  79. package/BookReader/images/hypothesis.ico +0 -0
  80. package/BookReader/images/icon_book.svg +1 -1
  81. package/BookReader/images/icon_bookmark.svg +1 -1
  82. package/BookReader/images/icon_experiment.svg +1 -0
  83. package/BookReader/images/icon_gear.svg +1 -1
  84. package/BookReader/images/icon_hamburger.svg +1 -1
  85. package/BookReader/images/icon_home.svg +1 -1
  86. package/BookReader/images/icon_info.svg +1 -1
  87. package/BookReader/images/icon_one_page.svg +1 -1
  88. package/BookReader/images/icon_pause.svg +1 -1
  89. package/BookReader/images/icon_play.svg +1 -1
  90. package/BookReader/images/icon_playback-rate.svg +1 -1
  91. package/BookReader/images/icon_search_button.svg +1 -1
  92. package/BookReader/images/icon_share.svg +1 -1
  93. package/BookReader/images/icon_skip-ahead.svg +1 -1
  94. package/BookReader/images/icon_skip-back.svg +1 -1
  95. package/BookReader/images/icon_speaker.svg +1 -1
  96. package/BookReader/images/icon_speaker_open.svg +1 -1
  97. package/BookReader/images/icon_thumbnails.svg +1 -1
  98. package/BookReader/images/icon_toc.svg +1 -1
  99. package/BookReader/images/icon_two_pages.svg +1 -1
  100. package/BookReader/images/marker_chap-off.svg +1 -1
  101. package/BookReader/images/marker_chap-on.svg +1 -1
  102. package/BookReader/images/marker_srch-on.svg +1 -1
  103. package/BookReader/images/translate.svg +1 -0
  104. package/BookReader/images/unviewable_page.png +0 -0
  105. package/BookReader/jquery-3.js +2 -0
  106. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  107. package/BookReader/plugins/plugin.archive_analytics.js +1 -1
  108. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  109. package/BookReader/plugins/plugin.autoplay.js +1 -1
  110. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  111. package/BookReader/plugins/plugin.chapters.js +22 -1
  112. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  113. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  114. package/BookReader/plugins/plugin.experiments.js +3 -0
  115. package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
  116. package/BookReader/plugins/plugin.experiments.js.map +1 -0
  117. package/BookReader/plugins/plugin.iframe.js +1 -1
  118. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  119. package/BookReader/plugins/plugin.iiif.js +2 -0
  120. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  121. package/BookReader/plugins/plugin.resume.js +1 -1
  122. package/BookReader/plugins/plugin.resume.js.map +1 -1
  123. package/BookReader/plugins/plugin.search.js +2 -1
  124. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  125. package/BookReader/plugins/plugin.search.js.map +1 -1
  126. package/BookReader/plugins/plugin.text_selection.js +2 -1
  127. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  128. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  129. package/BookReader/plugins/plugin.translate.js +137 -0
  130. package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
  131. package/BookReader/plugins/plugin.translate.js.map +1 -0
  132. package/BookReader/plugins/plugin.tts.js +1 -1
  133. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  134. package/BookReader/plugins/plugin.tts.js.map +1 -1
  135. package/BookReader/plugins/plugin.url.js +1 -1
  136. package/BookReader/plugins/plugin.url.js.map +1 -1
  137. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
  138. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  139. package/BookReader/plugins/translator-worker.js +2 -0
  140. package/BookReader/plugins/translator-worker.js.map +1 -0
  141. package/BookReader/silence.mp3 +0 -0
  142. package/BookReader/translator-worker.js +475 -0
  143. package/BookReader/webcomponents-bundle.js +3 -0
  144. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  145. package/BookReader/webcomponents-bundle.js.map +1 -0
  146. package/README.md +14 -3
  147. package/jsconfig.json +19 -0
  148. package/package.json +92 -70
  149. package/src/BookReader/BookModel.js +92 -46
  150. package/src/BookReader/DragScrollable.js +233 -0
  151. package/src/BookReader/ImageCache.js +49 -16
  152. package/src/BookReader/Mode1Up.js +66 -365
  153. package/src/BookReader/Mode1UpLit.js +392 -0
  154. package/src/BookReader/Mode2Up.js +87 -1315
  155. package/src/BookReader/Mode2UpLit.js +788 -0
  156. package/src/BookReader/ModeAbstract.js +43 -0
  157. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  158. package/src/BookReader/ModeSmoothZoom.js +312 -0
  159. package/src/BookReader/ModeThumb.js +29 -15
  160. package/src/BookReader/Navbar/Navbar.js +201 -76
  161. package/src/BookReader/PageContainer.js +120 -23
  162. package/src/BookReader/ReduceSet.js +2 -2
  163. package/src/BookReader/Toolbar/Toolbar.js +18 -40
  164. package/src/BookReader/events.js +3 -3
  165. package/src/BookReader/options.js +94 -17
  166. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  167. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  168. package/src/BookReader/utils/SelectionObserver.js +45 -0
  169. package/src/BookReader/utils/classes.js +1 -1
  170. package/src/BookReader/utils.js +136 -12
  171. package/src/BookReader.js +678 -1226
  172. package/src/BookReaderPlugin.js +52 -0
  173. package/src/assets/icons/magnify-minus.svg +3 -7
  174. package/src/assets/icons/magnify-plus.svg +3 -7
  175. package/src/assets/icons/slider-toggle.svg +1 -0
  176. package/src/assets/icons/voice.svg +1 -0
  177. package/src/assets/images/hypothesis.ico +0 -0
  178. package/src/assets/images/icon_experiment.svg +1 -0
  179. package/src/assets/images/translate.svg +1 -0
  180. package/src/assets/images/unviewable_page.png +0 -0
  181. package/src/assets/silence.mp3 +0 -0
  182. package/src/css/BookReader.scss +1 -5
  183. package/src/css/_BRBookmarks.scss +1 -1
  184. package/src/css/_BRComponent.scss +1 -1
  185. package/src/css/_BRicon.scss +8 -2
  186. package/src/css/_BRmain.scss +16 -3
  187. package/src/css/_BRnav.scss +74 -70
  188. package/src/css/_BRpages.scss +171 -42
  189. package/src/css/_BRsearch.scss +69 -30
  190. package/src/css/_BRtoolbar.scss +5 -5
  191. package/src/css/_TextSelection.scss +129 -24
  192. package/src/css/_colorbox.scss +2 -2
  193. package/src/css/_controls.scss +24 -7
  194. package/src/css/_icons.scss +8 -1
  195. package/src/{BookNavigator/assets → css}/button-base.js +2 -2
  196. package/src/css/icon_checkmark.js +9 -0
  197. package/src/css/sharedStyles.js +15 -0
  198. package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
  199. package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +25 -5
  200. package/src/ia-bookreader/ia-bookreader.js +666 -0
  201. package/src/ia-bookreader/sharing.js +27 -0
  202. package/src/ia-bookreader/viewable-files.js +98 -0
  203. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
  204. package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
  205. package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
  206. package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
  207. package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +43 -31
  208. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
  209. package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +3 -3
  210. package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
  211. package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
  212. package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
  213. package/src/plugins/plugin.archive_analytics.js +84 -78
  214. package/src/plugins/plugin.autoplay.js +99 -104
  215. package/src/plugins/plugin.chapters.js +314 -205
  216. package/src/plugins/plugin.experiments.js +321 -0
  217. package/src/plugins/plugin.iframe.js +1 -1
  218. package/src/plugins/plugin.iiif.js +141 -0
  219. package/src/plugins/plugin.resume.js +54 -51
  220. package/src/plugins/plugin.text_selection.js +522 -219
  221. package/src/plugins/plugin.vendor-fullscreen.js +5 -5
  222. package/src/plugins/search/plugin.search.js +374 -392
  223. package/src/{BookNavigator → plugins}/search/search-provider.js +59 -27
  224. package/src/{BookNavigator → plugins}/search/search-results.js +105 -76
  225. package/src/plugins/search/utils.js +50 -0
  226. package/src/plugins/search/view.js +50 -68
  227. package/src/plugins/translate/TranslationManager.js +164 -0
  228. package/src/plugins/translate/plugin.translate.js +512 -0
  229. package/src/plugins/tts/AbstractTTSEngine.js +78 -49
  230. package/src/plugins/tts/FestivalTTSEngine.js +20 -30
  231. package/src/plugins/tts/PageChunk.js +33 -21
  232. package/src/plugins/tts/PageChunkIterator.js +11 -17
  233. package/src/plugins/tts/WebTTSEngine.js +131 -91
  234. package/src/plugins/tts/plugin.tts.js +345 -350
  235. package/src/plugins/tts/utils.js +77 -49
  236. package/src/plugins/url/UrlPlugin.js +191 -0
  237. package/src/plugins/{plugin.url.js → url/plugin.url.js} +44 -15
  238. package/src/util/TextSelectionManager.js +282 -0
  239. package/src/util/browserSniffing.js +33 -1
  240. package/src/util/cache.js +20 -0
  241. package/src/util/docCookies.js +21 -2
  242. package/src/util/lit.js +15 -0
  243. package/src/util/strings.js +1 -0
  244. package/.babelrc +0 -12
  245. package/.dependabot/config.yml +0 -6
  246. package/.eslintrc.js +0 -50
  247. package/.gitattributes +0 -2
  248. package/.github/ISSUE_TEMPLATE/bug.md +0 -32
  249. package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
  250. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
  251. package/.github/workflows/node.js.yml +0 -37
  252. package/.github/workflows/npm-publish.yml +0 -47
  253. package/.testcaferc.json +0 -5
  254. package/BookReader/bookreader-component-bundle.js +0 -1450
  255. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  256. package/BookReader/bookreader-component-bundle.js.map +0 -1
  257. package/BookReader/jquery-1.10.1.js +0 -2
  258. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  259. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  260. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  261. package/BookReader/plugins/plugin.mobile_nav.js +0 -2
  262. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  263. package/BookReaderDemo/BookReaderDemo.css +0 -41
  264. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
  265. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  266. package/BookReaderDemo/BookReaderJSSimple.js +0 -55
  267. package/BookReaderDemo/IIIFBookReader.js +0 -207
  268. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
  269. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
  270. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  271. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  272. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  273. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
  274. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
  275. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  276. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  277. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  278. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  279. package/BookReaderDemo/demo-advanced.html +0 -33
  280. package/BookReaderDemo/demo-autoplay.html +0 -38
  281. package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
  282. package/BookReaderDemo/demo-embed.html +0 -26
  283. package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
  284. package/BookReaderDemo/demo-fullscreen.html +0 -33
  285. package/BookReaderDemo/demo-iiif.html +0 -34
  286. package/BookReaderDemo/demo-iiif.js +0 -26
  287. package/BookReaderDemo/demo-internetarchive.html +0 -74
  288. package/BookReaderDemo/demo-multiple.html +0 -43
  289. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  290. package/BookReaderDemo/demo-preview-pages.html +0 -1092
  291. package/BookReaderDemo/demo-simple.html +0 -34
  292. package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
  293. package/BookReaderDemo/immersion-1up.html +0 -64
  294. package/BookReaderDemo/immersion-mode.html +0 -35
  295. package/BookReaderDemo/toggle_controls.html +0 -53
  296. package/BookReaderDemo/view_mode.html +0 -39
  297. package/BookReaderDemo/viewmode-cycle.html +0 -41
  298. package/CHANGELOG.md +0 -495
  299. package/CONTRIBUTING.md +0 -7
  300. package/codecov.yml +0 -17
  301. package/index.html +0 -31
  302. package/karma.conf.js +0 -23
  303. package/screenshot.png +0 -0
  304. package/scripts/postversion.js +0 -10
  305. package/scripts/preversion.js +0 -14
  306. package/scripts/version.js +0 -26
  307. package/src/BookNavigator/BookModel.js +0 -14
  308. package/src/BookNavigator/BookNavigator.js +0 -446
  309. package/src/BookNavigator/assets/book-loader.js +0 -27
  310. package/src/BookNavigator/assets/icon_checkmark.js +0 -6
  311. package/src/BookNavigator/assets/icon_close.js +0 -3
  312. package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
  313. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  314. package/src/BookNavigator/downloads/downloads-provider.js +0 -66
  315. package/src/BookNavigator/search/a-search-result.js +0 -55
  316. package/src/BookReader/DebugConsole.js +0 -54
  317. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  318. package/src/ItemNavigator/ItemNavigator.js +0 -376
  319. package/src/ItemNavigator/providers/sharing.js +0 -29
  320. package/src/css/_MobileNav.scss +0 -194
  321. package/src/dragscrollable-br.js +0 -261
  322. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  323. package/src/plugins/plugin.mobile_nav.js +0 -287
  324. package/tests/BookReader/BookModel.test.js +0 -312
  325. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  326. package/tests/BookReader/DebugConsole.test.js +0 -25
  327. package/tests/BookReader/ImageCache.test.js +0 -150
  328. package/tests/BookReader/Mode1Up.test.js +0 -164
  329. package/tests/BookReader/Mode2Up.test.js +0 -247
  330. package/tests/BookReader/Navbar/Navbar.test.js +0 -169
  331. package/tests/BookReader/PageContainer.test.js +0 -115
  332. package/tests/BookReader/ReduceSet.test.js +0 -38
  333. package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
  334. package/tests/BookReader/utils/classes.test.js +0 -88
  335. package/tests/BookReader/utils.test.js +0 -109
  336. package/tests/BookReader.options.test.js +0 -39
  337. package/tests/BookReader.test.js +0 -301
  338. package/tests/e2e/README.md +0 -75
  339. package/tests/e2e/autoplay.test.js +0 -13
  340. package/tests/e2e/base.test.js +0 -35
  341. package/tests/e2e/helpers/base.js +0 -263
  342. package/tests/e2e/helpers/debug.js +0 -13
  343. package/tests/e2e/helpers/desktopSearch.js +0 -72
  344. package/tests/e2e/helpers/mobileSearch.js +0 -85
  345. package/tests/e2e/helpers/mockSearch.js +0 -93
  346. package/tests/e2e/helpers/rightToLeft.js +0 -29
  347. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  348. package/tests/e2e/models/BookReader.js +0 -11
  349. package/tests/e2e/models/Navigation.js +0 -56
  350. package/tests/e2e/rightToLeft.test.js +0 -20
  351. package/tests/e2e/viewmode.test.js +0 -37
  352. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  353. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
  354. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
  355. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  356. package/tests/karma/BookNavigator/search/search-results.test.js +0 -240
  357. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  358. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  359. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  360. package/tests/plugins/plugin.autoplay.test.js +0 -52
  361. package/tests/plugins/plugin.chapters.test.js +0 -130
  362. package/tests/plugins/plugin.iframe.test.js +0 -42
  363. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  364. package/tests/plugins/plugin.resume.test.js +0 -98
  365. package/tests/plugins/plugin.text_selection.test.js +0 -203
  366. package/tests/plugins/plugin.url.test.js +0 -129
  367. package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
  368. package/tests/plugins/search/plugin.search.test.js +0 -173
  369. package/tests/plugins/search/plugin.search.view.test.js +0 -106
  370. package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
  371. package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
  372. package/tests/plugins/tts/PageChunk.test.js +0 -57
  373. package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
  374. package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
  375. package/tests/plugins/tts/utils.test.js +0 -133
  376. package/tests/util/browserSniffing.test.js +0 -56
  377. package/tests/util/docCookies.test.js +0 -15
  378. package/tests/util/strings.test.js +0 -63
  379. package/tests/utils.js +0 -42
  380. package/webpack.config.js +0 -86
@@ -0,0 +1,282 @@
1
+ // @ts-check
2
+ import { SelectionObserver } from "../BookReader/utils/SelectionObserver.js";
3
+
4
+ export class TextSelectionManager {
5
+ options = {
6
+ // Current Translation plugin implementation does not have words, will limit to one BRlineElement for now
7
+ maxProtectedWords: 200,
8
+ }
9
+
10
+ /**
11
+ * @param {string} layer Selector for the text layer to manage
12
+ * @param {import('../BookReader.js').default} br
13
+ * @param {Object} options
14
+ * @param {string[]} options.selectionElement CSS selector for elements that count as "words" for selection limiting
15
+ * @param {number} [maxWords] Maximum number of words allowed to be selected
16
+ */
17
+ constructor (layer, br, { selectionElement }, maxWords) {
18
+ /** @type {string} */
19
+ this.layer = layer;
20
+ /** @type {import('../BookReader.js').default} */
21
+ this.br = br;
22
+ /** @type {string[]} */
23
+ this.selectionElement = selectionElement;
24
+ this.selectionObserver = new SelectionObserver(this.layer, this._onSelectionChange);
25
+ this.options.maxProtectedWords = maxWords ? maxWords : 200;
26
+ }
27
+
28
+ init() {
29
+ this.attach();
30
+ new SelectionObserver(this.layer, (selectEvent) => {
31
+ // Track how often selection is used
32
+ if (selectEvent == 'started') {
33
+ this.br.plugins.archiveAnalytics?.sendEvent('BookReader', 'SelectStart');
34
+
35
+ // Set a class on the page to avoid hiding it when zooming/etc
36
+ this.br.refs.$br.find('.BRpagecontainer--hasSelection').removeClass('BRpagecontainer--hasSelection');
37
+ $(window.getSelection().anchorNode).closest('.BRpagecontainer').addClass('BRpagecontainer--hasSelection');
38
+ }
39
+ }).attach();
40
+ }
41
+
42
+ // Need attach + detach methods to toggle w/ Translation plugin
43
+ attach() {
44
+ this.selectionObserver.attach();
45
+ if (this.br.protected) {
46
+ document.addEventListener('selectionchange', this._limitSelection);
47
+ // Prevent right clicking when selected text
48
+ $(document.body).on('contextmenu dragstart copy', (e) => {
49
+ const selection = document.getSelection();
50
+ if (selection?.toString()) {
51
+ const intersectsTextLayer = $(this.layer)
52
+ .toArray()
53
+ .some(el => selection.containsNode(el, true));
54
+ if (intersectsTextLayer) {
55
+ e.preventDefault();
56
+ return false;
57
+ }
58
+ }
59
+ });
60
+ }
61
+ }
62
+
63
+ detach() {
64
+ this.selectionObserver.detach();
65
+ if (this.br.protected) {
66
+ document.removeEventListener('selectionchange', this._limitSelection);
67
+ }
68
+ }
69
+
70
+ /**
71
+ * @param {'started' | 'cleared'} type
72
+ * @param {HTMLElement} target
73
+ */
74
+ _onSelectionChange = (type, target) => {
75
+ if (type === 'started') {
76
+ this.textSelectingMode(target);
77
+ } else if (type === 'cleared') {
78
+ this.defaultMode(target);
79
+ } else {
80
+ throw new Error(`Unknown type ${type}`);
81
+ }
82
+ }
83
+
84
+ /**
85
+ * Intercept copied text to remove any styling applied to it
86
+ * @param {JQuery} $container
87
+ */
88
+ interceptCopy ($container) {
89
+ $container[0].addEventListener('copy', (event) => {
90
+ const selection = document.getSelection();
91
+ event.clipboardData.setData('text/plain', selection.toString());
92
+ event.preventDefault();
93
+ });
94
+ }
95
+
96
+ /**
97
+ * Initializes text selection modes if there is a text layer on the page
98
+ * @param {JQuery} $container
99
+ */
100
+ stopPageFlip($container) {
101
+ /** @type {JQuery<HTMLElement>} */
102
+ const $textLayer = $container.find(this.layer);
103
+ if (!$textLayer.length) return;
104
+ $textLayer.each((i, s) => this.defaultMode(s));
105
+ if (!this.br.protected) {
106
+ this.interceptCopy($container);
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Applies mouse events when in default mode
112
+ * @param {HTMLElement} textLayer
113
+ */
114
+ defaultMode (textLayer) {
115
+ const $pageContainer = $(textLayer).closest('.BRpagecontainer');
116
+ textLayer.style.pointerEvents = "none";
117
+ $pageContainer.find("img").css("pointer-events", "auto");
118
+
119
+ $(textLayer).off(".textSelectPluginHandler");
120
+ const startedMouseDown = this.mouseIsDown;
121
+ let skipNextMouseup = this.mouseIsDown;
122
+ if (startedMouseDown) {
123
+ textLayer.style.pointerEvents = "auto";
124
+ }
125
+
126
+ // Need to stop propagation to prevent DragScrollable from
127
+ // blocking selection
128
+ $(textLayer).on("mousedown.textSelectPluginHandler", (event) => {
129
+ this.mouseIsDown = true;
130
+ if ($(event.target).is(this.selectionElement.join(", "))) {
131
+ event.stopPropagation();
132
+ }
133
+ });
134
+
135
+ $(textLayer).on("mouseup.textSelectPluginHandler", (event) => {
136
+ this.mouseIsDown = false;
137
+ textLayer.style.pointerEvents = "none";
138
+ if (skipNextMouseup) {
139
+ skipNextMouseup = false;
140
+ event.stopPropagation();
141
+ }
142
+ });
143
+ }
144
+
145
+ /**
146
+ * This mode is active while there is a selection on the given textLayer
147
+ * @param {HTMLElement} textLayer
148
+ */
149
+ textSelectingMode(textLayer) {
150
+ const $pageContainer = $(textLayer).closest('.BRpagecontainer');
151
+ // Make text layer consume all events
152
+ textLayer.style.pointerEvents = "all";
153
+ // Block img from getting long-press to save while selecting
154
+ $pageContainer.find("img").css("pointer-events", "none");
155
+
156
+ $(textLayer).off(".textSelectPluginHandler");
157
+
158
+ $(textLayer).on("mousedown.textSelectPluginHandler", (event) => {
159
+ this.mouseIsDown = true;
160
+ event.stopPropagation();
161
+ });
162
+
163
+ // Prevent page flip on click
164
+ $(textLayer).on('mouseup.textSelectPluginHandler', (event) => {
165
+ this.mouseIsDown = false;
166
+ event.stopPropagation();
167
+ });
168
+ }
169
+
170
+
171
+ _limitSelection = () => {
172
+ const selection = window.getSelection();
173
+ if (!selection.rangeCount) return;
174
+
175
+ const range = selection.getRangeAt(0);
176
+
177
+ // Check if range.startContainer is inside the sub-tree of .BRContainer
178
+ const startInBr = !!range.startContainer.parentElement.closest('.BRcontainer');
179
+ const endInBr = !!range.endContainer.parentElement.closest('.BRcontainer');
180
+ if (!startInBr && !endInBr) return;
181
+ if (!startInBr || !endInBr) {
182
+ // weird case, just clear the selection
183
+ selection.removeAllRanges();
184
+ return;
185
+ }
186
+
187
+ // Find the last allowed word in the selection
188
+ const lastAllowedWord = genAt(
189
+ genFilter(
190
+ walkBetweenNodes(range.startContainer, range.endContainer),
191
+ (node) => node.classList?.contains(
192
+ this.selectionElement[0].replace(".", ""),
193
+ ),
194
+ ),
195
+ this.options.maxProtectedWords - 1,
196
+ );
197
+
198
+ if (!lastAllowedWord || range.endContainer.parentNode == lastAllowedWord) return;
199
+
200
+ const newRange = document.createRange();
201
+ newRange.setStart(range.startContainer, range.startOffset);
202
+ newRange.setEnd(lastAllowedWord.firstChild, lastAllowedWord.textContent.length);
203
+
204
+ selection.removeAllRanges();
205
+ selection.addRange(newRange);
206
+ };
207
+ }
208
+
209
+ /**
210
+ * @template T
211
+ * Get the i-th element of an iterable
212
+ * @param {Iterable<T>} iterable
213
+ * @param {number} index
214
+ */
215
+ export function genAt(iterable, index) {
216
+ let i = 0;
217
+ for (const x of iterable) {
218
+ if (i == index) {
219
+ return x;
220
+ }
221
+ i++;
222
+ }
223
+ return undefined;
224
+ }
225
+
226
+ /**
227
+ * @template T
228
+ * Generator version of filter
229
+ * @param {Iterable<T>} iterable
230
+ * @param {function(T): boolean} fn
231
+ */
232
+ export function* genFilter(iterable, fn) {
233
+ for (const x of iterable) {
234
+ if (fn(x)) yield x;
235
+ }
236
+ }
237
+
238
+ /**
239
+ * Depth traverse the DOM tree starting at `start`, and ending at `end`.
240
+ * @param {Node} start
241
+ * @param {Node} end
242
+ * @returns {Generator<Node>}
243
+ */
244
+ export function* walkBetweenNodes(start, end) {
245
+ let done = false;
246
+
247
+ /**
248
+ * @param {Node} node
249
+ */
250
+ function* walk(node, {children = true, parents = true, siblings = true} = {}) {
251
+ if (node === end) {
252
+ done = true;
253
+ yield node;
254
+ return;
255
+ }
256
+
257
+ // yield self
258
+ yield node;
259
+
260
+ // First iterate children (depth-first traversal)
261
+ if (children && node.firstChild) {
262
+ yield* walk(node.firstChild, {children: true, parents: false, siblings: true});
263
+ if (done) return;
264
+ }
265
+
266
+ // Then iterate siblings
267
+ if (siblings) {
268
+ for (let sib = node.nextSibling; sib; sib = sib.nextSibling) {
269
+ yield* walk(sib, {children: true, parents: false, siblings: false});
270
+ if (done) return;
271
+ }
272
+ }
273
+
274
+ // Finally, move up the tree
275
+ if (parents && node.parentNode) {
276
+ yield* walk(node.parentNode, {children: false, parents: true, siblings: true});
277
+ if (done) return;
278
+ }
279
+ }
280
+
281
+ yield* walk(start);
282
+ }
@@ -7,7 +7,17 @@
7
7
  * @return {boolean}
8
8
  */
9
9
  export function isChrome(userAgent = navigator.userAgent, vendor = navigator.vendor) {
10
- return /chrome/i.test(userAgent) && /google inc/i.test(vendor);
10
+ return /chrome/i.test(userAgent) && /google inc/i.test(vendor) && !isEdge(userAgent);
11
+ }
12
+
13
+ /**
14
+ * Checks whether the current browser is a Edge browser
15
+ * See https://learn.microsoft.com/en-us/microsoft-edge/web-platform/user-agent-guidance
16
+ * @param {string} [userAgent]
17
+ * @return {boolean}
18
+ */
19
+ export function isEdge(userAgent = navigator.userAgent) {
20
+ return /chrome/i.test(userAgent) && /\bEdg(e|A|iOS)?\b/i.test(userAgent);
11
21
  }
12
22
 
13
23
  /**
@@ -28,3 +38,25 @@ export function isFirefox(userAgent = navigator.userAgent) {
28
38
  export function isSafari(userAgent = navigator.userAgent) {
29
39
  return /safari/i.test(userAgent) && !/chrome|chromium/i.test(userAgent);
30
40
  }
41
+
42
+ /**
43
+ * Checks whether the current browser is iOS (and hence iOS webkit)
44
+ * @return {boolean}
45
+ */
46
+ export function isIOS() {
47
+ // We can't just check the userAgent because as of iOS 13,
48
+ // the userAgent is the same as desktop Safari because
49
+ // they wanted iPad's to be served the same version of websites
50
+ // as desktops.
51
+ return 'ongesturestart' in window && navigator.maxTouchPoints > 0;
52
+ }
53
+
54
+ /**
55
+ * Checks whether the current browser is Samsung Internet
56
+ * https://stackoverflow.com/a/40684162/2317712
57
+ * @param {string} [userAgent]
58
+ * @return {boolean}
59
+ */
60
+ export function isSamsungInternet(userAgent = navigator.userAgent) {
61
+ return /SamsungBrowser/i.test(userAgent);
62
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @template T
3
+ */
4
+ export class Cache {
5
+ constructor(maxSize = 10) {
6
+ this.maxSize = maxSize;
7
+ /** @type {T[]} */
8
+ this.entries = [];
9
+ }
10
+
11
+ /**
12
+ * @param {T} entry
13
+ */
14
+ add(entry) {
15
+ if (this.entries.length >= this.maxSize) {
16
+ this.entries.shift();
17
+ }
18
+ this.entries.push(entry);
19
+ }
20
+ }
@@ -9,6 +9,22 @@
9
9
  * http://www.gnu.org/licenses/gpl-3.0-standalone.html
10
10
  */
11
11
 
12
+ /**
13
+ * Check to see if the browser has cookies enabled.
14
+ * Accessing document.cookies errors if eg iframe with sandbox enabled.
15
+ * @returns {boolean}
16
+ */
17
+ export function areCookiesBlocked(doc = document) {
18
+ try {
19
+ doc.cookie;
20
+ return false;
21
+ } catch (e) {
22
+ return true;
23
+ }
24
+ }
25
+
26
+ const COOKIES_BLOCKED = areCookiesBlocked();
27
+
12
28
  /**
13
29
  * Get specific key's value stored in cookie
14
30
  *
@@ -17,7 +33,7 @@
17
33
  * @returns {string|null}
18
34
  */
19
35
  export function getItem(sKey) {
20
- if (!sKey) return null;
36
+ if (COOKIES_BLOCKED || !sKey) return null;
21
37
 
22
38
  return decodeURIComponent(
23
39
  // eslint-disable-next-line no-useless-escape
@@ -34,9 +50,11 @@ export function getItem(sKey) {
34
50
  * @param {string} [sDomain] domain name
35
51
  * @param {boolean} [bSecure]
36
52
  *
37
- * @returns {true}
53
+ * @returns {boolean}
38
54
  */
39
55
  export function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {
56
+ if (COOKIES_BLOCKED) return false;
57
+
40
58
  document.cookie = encodeURIComponent(sKey) + '=' + encodeURIComponent(sValue)
41
59
  + (vEnd ? `; expires=${vEnd.toUTCString()}` : '')
42
60
  + (sDomain ? `; domain=${sDomain}` : '')
@@ -56,6 +74,7 @@ export function setItem(sKey, sValue, vEnd, sPath, sDomain, bSecure) {
56
74
  * @returns {boolean}
57
75
  */
58
76
  export function removeItem(sKey, sPath, sDomain) {
77
+ if (COOKIES_BLOCKED) return false;
59
78
  // eslint-disable-next-line
60
79
  if (!hasItem(sKey)) return false;
61
80
 
@@ -0,0 +1,15 @@
1
+ import { css } from 'lit';
2
+
3
+ /**
4
+ * Convert an SVG string to a data URL usable in CSS
5
+ * @param {import('lit').TemplateResult} svgTemplate - The SVG template to convert
6
+ * @returns {import('lit').CSSResult}
7
+ */
8
+ export function svgToDataUrl(svgTemplate) {
9
+ // No clue why, on prod the template from the close icon comes in as a class instead of a TemplateResult.
10
+ // Might be a discrepancy with lit versions.
11
+ if (svgTemplate.prototype) svgTemplate = svgTemplate.prototype.render();
12
+
13
+ const svgString = svgTemplate.strings[0];
14
+ return css([`data:image/svg+xml;base64,${btoa(svgString.replace(/\n/g, ' '))}`]);
15
+ }
@@ -9,6 +9,7 @@
9
9
  * @param {StringWithVars|String} template
10
10
  * @param { {[varName: string]: { toString: () => string} } } vars
11
11
  * @param { {[varName: string]: { toString: () => string} } } [overrides]
12
+ * @returns {StringWithVars|string}
12
13
  */
13
14
  export function applyVariables(template, vars, overrides = {}, possibleFilters = APPLY_FILTERS) {
14
15
  return template?.replace(/\{\{([^}]*?)\}\}/g, ($0, $1) => {
package/.babelrc DELETED
@@ -1,12 +0,0 @@
1
- {
2
- "presets": [
3
- [
4
- "@babel/preset-env",
5
- {
6
- "targets": "> 2%, ie 11, edge 14, samsung > 9, OperaMini all, UCAndroid > 12",
7
- "useBuiltIns": "usage",
8
- "corejs": 3
9
- }
10
- ]
11
- ]
12
- }
@@ -1,6 +0,0 @@
1
- version: 1
2
-
3
- update_configs:
4
- - package_manager: "javascript"
5
- directory: "/"
6
- update_schedule: "monthly"
package/.eslintrc.js DELETED
@@ -1,50 +0,0 @@
1
- module.exports = {
2
- "env": {
3
- "browser": true,
4
- "jquery": true,
5
- "es6": true,
6
- "node": true,
7
- "jest": true
8
- },
9
- "plugins": [
10
- "testcafe"
11
- ],
12
- "extends": [
13
- "eslint:recommended",
14
- "plugin:testcafe/recommended"
15
- ],
16
- "globals": {
17
- // Browser API
18
- "MediaMetadata": "readonly"
19
- },
20
- "parserOptions": {
21
- "ecmaVersion": 2020,
22
- "sourceType": "module"
23
- },
24
- "rules": {
25
- "comma-dangle": ["error", "only-multiline"],
26
- "semi": ["error", "always"],
27
- "space-before-blocks": ["error"],
28
- "keyword-spacing": [2, {"before": true, "after": true}],
29
- "indent": ["error", 2],
30
- "no-console": "off", // Used too often behind `debug` options; not dealing with this now
31
- "no-empty": ["error", { "allowEmptyCatch": true }],
32
- "no-trailing-spaces": ["error"],
33
- "no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": false }], // set args:none; this is generally more annoying than useful
34
- "no-var": ["error"],
35
- "prefer-const": ["error"],
36
- "space-infix-ops": ["error", { "int32Hint": false }],
37
- "eol-last": ["error", "always"]
38
- },
39
- "overrides": [
40
- { // TODO; these should be cleaned up as well
41
- "files": [
42
- "src/BookReader.js",
43
- "src/dragscrollable-br.js"
44
- ],
45
- "rules": {
46
- "no-var": ["off"],
47
- }
48
- },
49
- ],
50
- };
package/.gitattributes DELETED
@@ -1,2 +0,0 @@
1
- # Build files
2
- BookReader/**/* binary
@@ -1,32 +0,0 @@
1
- ---
2
- name: Bug
3
- about: A general problem with website functionality
4
- title: ''
5
- labels: Bug
6
- assignees: ''
7
-
8
- ---
9
-
10
- **Description**
11
-
12
- > What problem are we solving? What does the experience look like today? What are the symptoms? How can one reproduce the problem?
13
-
14
- **Evidence / Screenshot (if possible)**
15
-
16
- > Include evidence of the problem or provide a screenshot.
17
-
18
- **Expectation**
19
-
20
- > What should be happening? What will it look like / how will it behave when fixed?
21
-
22
- **Context**
23
-
24
- > What operating system? What browser type and version?
25
-
26
- **Proposal & Constraints**
27
-
28
- > What is the proposed solution / implementation? Is there a precedent of this approach succeeding elsewhere?
29
-
30
- **Stakeholders**
31
-
32
- > @-tag any stakeholders of this bug
@@ -1,30 +0,0 @@
1
- ---
2
- name: Feature Request
3
- about: A request for an entirely new feature
4
- title: ''
5
- labels: Feature Request
6
- assignees: ''
7
-
8
- ---
9
-
10
- **Context**
11
-
12
- > Is your feature request related to a problem? What is the motivation for implementing this feature?
13
-
14
- **Proposal & Constraints**
15
-
16
- > What is the proposed solution / implementation? Is there a precedent for this approach succeeding elsewhere?
17
-
18
- > Which suggestions or requirements should be considered for how this feature needs to appear or be implemented?
19
-
20
- **Additional Resources**
21
-
22
- > Add any other screenshots or assets related to the feature request.
23
-
24
- **Success Metrics**
25
-
26
- > How will you know if this change is successful? What specific metrics are relevant and how do you expect them to change?
27
-
28
- **Stakeholders**
29
-
30
- > @-tag stakeholders of this feature
@@ -1,15 +0,0 @@
1
- **Description**
2
-
3
- > What does this PR achieve? Is it a feature/bugfix/refactor? Does it close an Issue? If so, use `Closes #<issue number>`.
4
-
5
- **Technical**
6
-
7
- > What should be noted about the implementation?
8
-
9
- **Testing**
10
-
11
- > What steps should the reviewer take to verify this PR resolves the issue?
12
-
13
- **Screenshots/Videos**
14
-
15
- > Add a screenshot or video/GIF if the fix can be seen visually. This is helpful for reviewers to get context for the fix.
@@ -1,37 +0,0 @@
1
- # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
2
- # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3
-
4
- name: Node.js CI
5
-
6
- on:
7
- push:
8
- branches: [ master ]
9
- pull_request:
10
- branches: [ master ]
11
-
12
- jobs:
13
- build:
14
- runs-on: ubuntu-latest
15
-
16
- steps:
17
- - uses: actions/checkout@v2
18
- - uses: actions/setup-node@v1
19
- with:
20
- node-version: 14.x
21
- - uses: actions/cache@v2
22
- with:
23
- # Caching node_modules isn't recommended because it can break across
24
- # Node versions and won't work with npm ci (See https://github.com/actions/cache/blob/main/examples.md#node---npm )
25
- # But we pin the node version, and we don't update it that often anyways. And
26
- # we don't use `npm ci` specifically to try to get faster CI flows. So caching
27
- # `node_modules` directly.
28
- path: 'node_modules'
29
- key: ${{ runner.os }}-node-${{ hashFiles('package*.json') }}
30
- - run: npm install
31
- - run: npm run build
32
- - run: npm run lint
33
- - run: npm run test
34
- - run: npm run codecov
35
- # Travis machines usually have 2 cores (see https://docs.travis-ci.com/user/reference/overview/#virtualisation-environment-vs-operating-system )
36
- # Quarantine mode (sigh) to catch unstable tests (see https://devexpress.github.io/testcafe/documentation/guides/basic-guides/run-tests.html#quarantine-mode )
37
- - run: BASE_URL=http://127.0.0.1:8000/BookReaderDemo/ npx testcafe --concurrency 2 --quarantine-mode
@@ -1,47 +0,0 @@
1
- # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
2
- # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
3
-
4
- name: Node.js Package
5
-
6
- on:
7
- release:
8
- types: [created]
9
-
10
- jobs:
11
- build:
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v2
15
- - uses: actions/setup-node@v2
16
- with:
17
- node-version: 14
18
- - run: npm ci
19
- - run: npm test
20
-
21
- publish-npm:
22
- needs: build
23
- runs-on: ubuntu-latest
24
- steps:
25
- - uses: actions/checkout@v2
26
- - uses: actions/setup-node@v2
27
- with:
28
- node-version: 14
29
- registry-url: https://registry.npmjs.org/
30
- - run: npm ci
31
- - run: npm publish --tag next
32
- env:
33
- NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
34
-
35
- publish-gpr:
36
- needs: build
37
- runs-on: ubuntu-latest
38
- steps:
39
- - uses: actions/checkout@v2
40
- - uses: actions/setup-node@v2
41
- with:
42
- node-version: 14
43
- registry-url: https://npm.pkg.github.com/
44
- - run: npm ci
45
- - run: npm publish --tag next
46
- env:
47
- NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
package/.testcaferc.json DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "appCommand": "npm run serve",
3
- "browsers": ["chrome:headless", "firefox:headless"],
4
- "src": ["tests/e2e/**/*test.js"]
5
- }