@internetarchive/bookreader 5.0.0-9-multiple-files → 5.0.0-90

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 (333) hide show
  1. package/.eslintrc.js +21 -19
  2. package/.github/workflows/node.js.yml +81 -7
  3. package/.github/workflows/npm-publish.yml +6 -20
  4. package/.testcaferc.js +10 -0
  5. package/BookReader/BookReader.css +505 -1442
  6. package/BookReader/BookReader.js +2 -21564
  7. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  8. package/BookReader/BookReader.js.map +1 -1
  9. package/BookReader/ia-bookreader-bundle.js +1782 -0
  10. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +7 -0
  11. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  12. package/BookReader/icons/1up.svg +1 -12
  13. package/BookReader/icons/2up.svg +1 -15
  14. package/BookReader/icons/advance.svg +3 -26
  15. package/BookReader/icons/chevron-right.svg +1 -1
  16. package/BookReader/icons/close-circle-dark.svg +1 -0
  17. package/BookReader/icons/close-circle.svg +1 -1
  18. package/BookReader/icons/fullscreen.svg +1 -17
  19. package/BookReader/icons/fullscreen_exit.svg +1 -17
  20. package/BookReader/icons/hamburger.svg +1 -15
  21. package/BookReader/icons/left-arrow.svg +1 -12
  22. package/BookReader/icons/magnify-minus.svg +1 -16
  23. package/BookReader/icons/magnify-plus.svg +1 -17
  24. package/BookReader/icons/magnify.svg +1 -15
  25. package/BookReader/icons/pause.svg +1 -23
  26. package/BookReader/icons/play.svg +1 -22
  27. package/BookReader/icons/playback-speed.svg +1 -34
  28. package/BookReader/icons/read-aloud.svg +1 -22
  29. package/BookReader/icons/review.svg +3 -22
  30. package/BookReader/icons/thumbnails.svg +1 -17
  31. package/BookReader/icons/voice.svg +1 -0
  32. package/BookReader/icons/volume-full.svg +1 -22
  33. package/BookReader/images/BRicons.svg +5 -94
  34. package/BookReader/images/books_graphic.svg +1 -177
  35. package/BookReader/images/icon_book.svg +1 -12
  36. package/BookReader/images/icon_bookmark.svg +1 -12
  37. package/BookReader/images/icon_gear.svg +1 -14
  38. package/BookReader/images/icon_hamburger.svg +1 -20
  39. package/BookReader/images/icon_home.svg +1 -21
  40. package/BookReader/images/icon_info.svg +1 -11
  41. package/BookReader/images/icon_one_page.svg +1 -8
  42. package/BookReader/images/icon_pause.svg +1 -1
  43. package/BookReader/images/icon_play.svg +1 -1
  44. package/BookReader/images/icon_playback-rate.svg +1 -15
  45. package/BookReader/images/icon_search_button.svg +1 -8
  46. package/BookReader/images/icon_share.svg +1 -9
  47. package/BookReader/images/icon_skip-ahead.svg +1 -6
  48. package/BookReader/images/icon_skip-back.svg +2 -13
  49. package/BookReader/images/icon_speaker.svg +1 -18
  50. package/BookReader/images/icon_speaker_open.svg +1 -10
  51. package/BookReader/images/icon_thumbnails.svg +1 -12
  52. package/BookReader/images/icon_toc.svg +1 -5
  53. package/BookReader/images/icon_two_pages.svg +1 -9
  54. package/BookReader/images/marker_chap-off.svg +1 -11
  55. package/BookReader/images/marker_chap-on.svg +1 -11
  56. package/BookReader/images/marker_srch-on.svg +1 -11
  57. package/BookReader/images/unviewable_page.png +0 -0
  58. package/BookReader/jquery-3.js +2 -0
  59. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  60. package/BookReader/plugins/plugin.archive_analytics.js +1 -172
  61. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  62. package/BookReader/plugins/plugin.autoplay.js +1 -165
  63. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  64. package/BookReader/plugins/plugin.chapters.js +22 -301
  65. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  66. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  67. package/BookReader/plugins/plugin.iframe.js +1 -74
  68. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  69. package/BookReader/plugins/plugin.iiif.js +2 -0
  70. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  71. package/BookReader/plugins/plugin.resume.js +1 -368
  72. package/BookReader/plugins/plugin.resume.js.map +1 -1
  73. package/BookReader/plugins/plugin.search.js +2 -1420
  74. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  75. package/BookReader/plugins/plugin.search.js.map +1 -1
  76. package/BookReader/plugins/plugin.text_selection.js +2 -1080
  77. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  78. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  79. package/BookReader/plugins/plugin.tts.js +2 -9193
  80. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  81. package/BookReader/plugins/plugin.tts.js.map +1 -1
  82. package/BookReader/plugins/plugin.url.js +1 -269
  83. package/BookReader/plugins/plugin.url.js.map +1 -1
  84. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  85. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  86. package/BookReader/webcomponents-bundle.js +3 -0
  87. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  88. package/BookReader/webcomponents-bundle.js.map +1 -0
  89. package/BookReaderDemo/BookReaderDemo.css +18 -19
  90. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -3
  91. package/BookReaderDemo/BookReaderJSSimple.js +1 -0
  92. package/BookReaderDemo/IADemoBr.js +144 -0
  93. package/BookReaderDemo/demo-advanced.html +2 -2
  94. package/BookReaderDemo/demo-embed-iframe-src.html +2 -1
  95. package/BookReaderDemo/demo-fullscreen-mobile.html +3 -5
  96. package/BookReaderDemo/demo-fullscreen.html +2 -4
  97. package/BookReaderDemo/demo-iiif.html +99 -12
  98. package/BookReaderDemo/demo-internetarchive.html +214 -18
  99. package/BookReaderDemo/demo-multiple.html +2 -1
  100. package/BookReaderDemo/demo-preview-pages.html +526 -525
  101. package/BookReaderDemo/demo-simple.html +2 -1
  102. package/BookReaderDemo/demo-vendor-fullscreen.html +2 -4
  103. package/BookReaderDemo/ia-multiple-volumes-manifest.js +170 -0
  104. package/BookReaderDemo/immersion-1up.html +2 -2
  105. package/BookReaderDemo/immersion-mode.html +2 -4
  106. package/BookReaderDemo/toggle_controls.html +3 -2
  107. package/BookReaderDemo/view_mode.html +2 -1
  108. package/BookReaderDemo/viewmode-cycle.html +2 -3
  109. package/CHANGELOG.md +595 -33
  110. package/README.md +14 -1
  111. package/babel.config.js +20 -0
  112. package/codecov.yml +6 -0
  113. package/index.html +5 -2
  114. package/jsconfig.json +19 -0
  115. package/netlify.toml +9 -0
  116. package/package.json +70 -62
  117. package/renovate.json +52 -0
  118. package/scripts/preversion.js +0 -1
  119. package/src/BookNavigator/assets/bookmark-colors.js +1 -1
  120. package/src/BookNavigator/assets/button-base.js +10 -2
  121. package/src/BookNavigator/assets/ia-logo.js +17 -0
  122. package/src/BookNavigator/assets/icon_checkmark.js +1 -1
  123. package/src/BookNavigator/assets/icon_close.js +1 -1
  124. package/src/BookNavigator/book-navigator.js +590 -0
  125. package/src/BookNavigator/bookmarks/bookmark-button.js +3 -2
  126. package/src/BookNavigator/bookmarks/bookmark-edit.js +3 -4
  127. package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
  128. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +4 -9
  129. package/src/BookNavigator/bookmarks/bookmarks-provider.js +27 -17
  130. package/src/BookNavigator/bookmarks/ia-bookmarks.js +116 -67
  131. package/src/BookNavigator/delete-modal-actions.js +1 -1
  132. package/src/BookNavigator/downloads/downloads-provider.js +36 -21
  133. package/src/BookNavigator/downloads/downloads.js +29 -25
  134. package/src/BookNavigator/search/search-provider.js +80 -28
  135. package/src/BookNavigator/search/search-results.js +29 -26
  136. package/src/BookNavigator/sharing.js +27 -0
  137. package/src/BookNavigator/viewable-files.js +95 -0
  138. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +13 -12
  139. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +7 -7
  140. package/src/BookReader/BookModel.js +76 -41
  141. package/src/BookReader/DragScrollable.js +233 -0
  142. package/src/BookReader/ImageCache.js +48 -15
  143. package/src/BookReader/Mode1Up.js +56 -351
  144. package/src/BookReader/Mode1UpLit.js +388 -0
  145. package/src/BookReader/Mode2Up.js +73 -1318
  146. package/src/BookReader/Mode2UpLit.js +777 -0
  147. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  148. package/src/BookReader/ModeSmoothZoom.js +312 -0
  149. package/src/BookReader/ModeThumb.js +19 -13
  150. package/src/BookReader/Navbar/Navbar.js +70 -54
  151. package/src/BookReader/PageContainer.js +116 -22
  152. package/src/BookReader/ReduceSet.js +3 -3
  153. package/src/BookReader/Toolbar/Toolbar.js +14 -41
  154. package/src/BookReader/events.js +2 -3
  155. package/src/BookReader/options.js +73 -15
  156. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  157. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  158. package/src/BookReader/utils/SelectionObserver.js +45 -0
  159. package/src/BookReader/utils/classes.js +1 -1
  160. package/src/BookReader/utils.js +128 -13
  161. package/src/BookReader.js +562 -1078
  162. package/src/BookReaderPlugin.js +44 -0
  163. package/src/assets/icons/close-circle-dark.svg +1 -0
  164. package/src/assets/icons/magnify-minus.svg +3 -7
  165. package/src/assets/icons/magnify-plus.svg +3 -7
  166. package/src/assets/icons/voice.svg +1 -0
  167. package/src/assets/images/unviewable_page.png +0 -0
  168. package/src/css/BookReader.scss +1 -17
  169. package/src/css/_BRBookmarks.scss +1 -1
  170. package/src/css/_BRComponent.scss +1 -1
  171. package/src/css/_BRicon.scss +8 -2
  172. package/src/css/_BRmain.scss +33 -27
  173. package/src/css/_BRnav.scss +12 -42
  174. package/src/css/_BRpages.scss +170 -42
  175. package/src/css/_BRsearch.scss +68 -230
  176. package/src/css/_BRtoolbar.scss +5 -5
  177. package/src/css/_TextSelection.scss +87 -27
  178. package/src/css/_colorbox.scss +2 -2
  179. package/src/css/_controls.scss +24 -7
  180. package/src/css/_icons.scss +7 -1
  181. package/src/ia-bookreader/ia-bookreader.js +224 -0
  182. package/src/plugins/plugin.archive_analytics.js +84 -78
  183. package/src/plugins/plugin.autoplay.js +99 -104
  184. package/src/plugins/plugin.chapters.js +237 -191
  185. package/src/plugins/plugin.iframe.js +1 -1
  186. package/src/plugins/plugin.iiif.js +141 -0
  187. package/src/plugins/plugin.resume.js +53 -50
  188. package/src/plugins/plugin.text_selection.js +503 -175
  189. package/src/plugins/plugin.vendor-fullscreen.js +7 -7
  190. package/src/plugins/search/plugin.search.js +183 -121
  191. package/src/plugins/search/utils.js +43 -0
  192. package/src/plugins/search/view.js +67 -202
  193. package/src/plugins/tts/AbstractTTSEngine.js +75 -45
  194. package/src/plugins/tts/FestivalTTSEngine.js +21 -31
  195. package/src/plugins/tts/PageChunk.js +16 -23
  196. package/src/plugins/tts/PageChunkIterator.js +11 -17
  197. package/src/plugins/tts/WebTTSEngine.js +88 -72
  198. package/src/plugins/tts/plugin.tts.js +310 -350
  199. package/src/plugins/tts/utils.js +16 -26
  200. package/src/plugins/url/UrlPlugin.js +191 -0
  201. package/src/plugins/{plugin.url.js → url/plugin.url.js} +47 -18
  202. package/src/util/browserSniffing.js +22 -0
  203. package/src/util/docCookies.js +21 -2
  204. package/src/util/strings.js +1 -0
  205. package/tests/e2e/README.md +37 -0
  206. package/tests/e2e/autoplay.test.js +9 -6
  207. package/tests/e2e/base.test.js +8 -16
  208. package/tests/e2e/helpers/base.js +55 -50
  209. package/tests/e2e/helpers/debug.js +1 -1
  210. package/tests/e2e/helpers/mockSearch.js +19 -22
  211. package/tests/e2e/helpers/params.js +17 -0
  212. package/tests/e2e/helpers/rightToLeft.js +8 -14
  213. package/tests/e2e/helpers/search.js +73 -0
  214. package/tests/e2e/models/Navigation.js +20 -37
  215. package/tests/e2e/rightToLeft.test.js +4 -5
  216. package/tests/e2e/viewmode.test.js +40 -33
  217. package/tests/jest/BookNavigator/book-navigator.test.js +661 -0
  218. package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +43 -0
  219. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmark-edit.test.js +25 -26
  220. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmarks-list.test.js +41 -42
  221. package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +45 -0
  222. package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +67 -0
  223. package/tests/jest/BookNavigator/downloads/downloads.test.js +53 -0
  224. package/tests/jest/BookNavigator/search/search-provider.test.js +167 -0
  225. package/tests/{karma/BookNavigator → jest/BookNavigator/search}/search-results.test.js +109 -60
  226. package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +49 -0
  227. package/tests/jest/BookNavigator/viewable-files/viewable-files-provider.test.js +80 -0
  228. package/tests/jest/BookNavigator/visual-adjustments.test.js +200 -0
  229. package/tests/{BookReader → jest/BookReader}/BookModel.test.js +74 -14
  230. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +193 -0
  231. package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +4 -4
  232. package/tests/jest/BookReader/Mode1UpLit.test.js +73 -0
  233. package/tests/jest/BookReader/Mode2Up.test.js +98 -0
  234. package/tests/jest/BookReader/Mode2UpLit.test.js +190 -0
  235. package/tests/jest/BookReader/ModeCoordinateSpace.test.js +16 -0
  236. package/tests/jest/BookReader/ModeSmoothZoom.test.js +218 -0
  237. package/tests/jest/BookReader/ModeThumb.test.js +71 -0
  238. package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +42 -29
  239. package/tests/jest/BookReader/PageContainer.test.js +238 -0
  240. package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +1 -1
  241. package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +3 -3
  242. package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
  243. package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +49 -0
  244. package/tests/jest/BookReader/utils/SelectionObserver.test.js +57 -0
  245. package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +1 -1
  246. package/tests/jest/BookReader/utils.test.js +250 -0
  247. package/tests/jest/BookReader.keyboard.test.js +190 -0
  248. package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +10 -2
  249. package/tests/{BookReader.test.js → jest/BookReader.test.js} +43 -53
  250. package/tests/jest/plugins/plugin.archive_analytics.test.js +20 -0
  251. package/tests/jest/plugins/plugin.autoplay.test.js +35 -0
  252. package/tests/jest/plugins/plugin.chapters.test.js +195 -0
  253. package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +4 -4
  254. package/tests/{plugins → jest/plugins}/plugin.resume.test.js +22 -35
  255. package/tests/jest/plugins/plugin.text_selection.test.js +316 -0
  256. package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +2 -2
  257. package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +26 -47
  258. package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +42 -9
  259. package/tests/jest/plugins/search/utils.js +25 -0
  260. package/tests/jest/plugins/search/utils.test.js +29 -0
  261. package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +30 -10
  262. package/tests/{plugins → jest/plugins}/tts/FestivalTTSEngine.test.js +4 -4
  263. package/tests/{plugins → jest/plugins}/tts/PageChunk.test.js +1 -1
  264. package/tests/{plugins → jest/plugins}/tts/PageChunkIterator.test.js +3 -3
  265. package/tests/{plugins → jest/plugins}/tts/WebTTSEngine.test.js +47 -1
  266. package/tests/{plugins → jest/plugins}/tts/utils.test.js +1 -60
  267. package/tests/jest/plugins/url/UrlPlugin.test.js +198 -0
  268. package/tests/{plugins → jest/plugins/url}/plugin.url.test.js +57 -18
  269. package/tests/jest/setup.js +3 -0
  270. package/tests/{util → jest/util}/browserSniffing.test.js +1 -1
  271. package/tests/jest/util/docCookies.test.js +24 -0
  272. package/tests/{util → jest/util}/strings.test.js +1 -1
  273. package/tests/{utils.js → jest/utils.js} +38 -0
  274. package/webpack.config.js +16 -10
  275. package/.babelrc +0 -12
  276. package/.dependabot/config.yml +0 -6
  277. package/.testcaferc.json +0 -5
  278. package/BookReader/bookreader-component-bundle.js +0 -14330
  279. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  280. package/BookReader/bookreader-component-bundle.js.map +0 -1
  281. package/BookReader/icons/sort-ascending.svg +0 -1
  282. package/BookReader/icons/sort-descending.svg +0 -1
  283. package/BookReader/jquery-1.10.1.js +0 -108
  284. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  285. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  286. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  287. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  288. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  289. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  290. package/BookReaderDemo/IIIFBookReader.js +0 -207
  291. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  292. package/BookReaderDemo/demo-autoplay.html +0 -38
  293. package/BookReaderDemo/demo-iiif.js +0 -26
  294. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  295. package/karma.conf.js +0 -23
  296. package/src/BookNavigator/BookModel.js +0 -14
  297. package/src/BookNavigator/BookNavigator.js +0 -452
  298. package/src/BookNavigator/assets/book-loader.js +0 -27
  299. package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
  300. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  301. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  302. package/src/BookNavigator/search/a-search-result.js +0 -55
  303. package/src/BookNavigator/volumes/volumes-provider.js +0 -108
  304. package/src/BookNavigator/volumes/volumes.js +0 -162
  305. package/src/BookReader/DebugConsole.js +0 -54
  306. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  307. package/src/ItemNavigator/ItemNavigator.js +0 -372
  308. package/src/ItemNavigator/providers/sharing.js +0 -29
  309. package/src/assets/icons/sort-ascending.svg +0 -1
  310. package/src/assets/icons/sort-descending.svg +0 -1
  311. package/src/css/_MobileNav.scss +0 -194
  312. package/src/dragscrollable-br.js +0 -261
  313. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  314. package/src/plugins/plugin.mobile_nav.js +0 -287
  315. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  316. package/tests/BookReader/DebugConsole.test.js +0 -25
  317. package/tests/BookReader/Mode1Up.test.js +0 -164
  318. package/tests/BookReader/Mode2Up.test.js +0 -247
  319. package/tests/BookReader/PageContainer.test.js +0 -115
  320. package/tests/BookReader/utils.test.js +0 -109
  321. package/tests/e2e/helpers/desktopSearch.js +0 -72
  322. package/tests/e2e/helpers/mobileSearch.js +0 -85
  323. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  324. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  325. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  326. package/tests/karma/BookNavigator/volumes.test.js +0 -133
  327. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  328. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  329. package/tests/plugins/plugin.autoplay.test.js +0 -52
  330. package/tests/plugins/plugin.chapters.test.js +0 -130
  331. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  332. package/tests/plugins/plugin.text_selection.test.js +0 -203
  333. package/tests/util/docCookies.test.js +0 -15
@@ -1,10 +1,9 @@
1
1
  import {
2
2
  html,
3
3
  fixture,
4
- expect,
5
4
  oneEvent,
6
- } from '@open-wc/testing';
7
- import '../../../../src/BookNavigator/bookmarks/bookmark-edit.js';
5
+ } from '@open-wc/testing-helpers';
6
+ import '@/src/BookNavigator/bookmarks/bookmark-edit.js';
8
7
 
9
8
  const bookmarkColors = [{
10
9
  id: 0,
@@ -36,42 +35,42 @@ const bookmark = {
36
35
  };
37
36
 
38
37
  describe('<ia-bookmark-edit>', () => {
39
- it('sets default properties', async () => {
38
+ test('sets default properties', async () => {
40
39
  const el = await fixture(container(bookmark));
41
40
 
42
- expect(el.bookmark).to.equal(bookmark);
43
- expect(el.renderHeader).to.be.false;
41
+ expect(el.bookmark).toEqual(bookmark);
42
+ expect(el.renderHeader).toBeFalsy();
44
43
  });
45
44
 
46
- it('renders bookmark thumb and page number', async () => {
45
+ test('renders bookmark thumb and page number', async () => {
47
46
  const el = await fixture(container(bookmark));
48
47
 
49
- expect(el.shadowRoot.querySelector('img').getAttribute('src')).to.equal(bookmark.thumbnail);
50
- expect(el.shadowRoot.querySelector('h4').innerText).to.equal(`Page ${bookmark.page}`);
48
+ expect(el.shadowRoot.querySelector('img').getAttribute('src')).toEqual(bookmark.thumbnail);
49
+ expect(el.shadowRoot.querySelector('h4').textContent).toEqual(`Page ${bookmark.page}`);
51
50
  });
52
51
 
53
- it('renders an optional header section', async () => {
52
+ test('renders an optional header section', async () => {
54
53
  const el = await fixture(container(bookmark));
55
54
  el.renderHeader = true;
56
55
 
57
56
  await el.updateComplete;
58
57
 
59
- expect(el.shadowRoot.querySelector('header')).to.exist;
58
+ expect(el.shadowRoot.querySelector('header')).toBeDefined();
60
59
  });
61
60
 
62
- it('toggles rendering of the bookmark thumbnail and page number', async () => {
61
+ test('toggles rendering of the bookmark thumbnail and page number', async () => {
63
62
  const el = await fixture(container(bookmark));
64
- expect(el.shadowRoot.querySelector('img')).to.exist;
65
- expect(el.shadowRoot.querySelector('h4')).to.exist;
63
+ expect(el.shadowRoot.querySelector('img')).toBeDefined();
64
+ expect(el.shadowRoot.querySelector('h4')).toBeDefined();
66
65
 
67
66
  el.showBookmark = false;
68
67
  await el.updateComplete;
69
68
 
70
- expect(el.shadowRoot.querySelector('img')).to.not.exist;
71
- expect(el.shadowRoot.querySelector('h4')).to.not.exist;
69
+ expect(el.shadowRoot.querySelector('img')).toBe(null);
70
+ expect(el.shadowRoot.querySelector('h4')).toBe(null);
72
71
  });
73
72
 
74
- it('emits a custom event when the bookmark color is changed', async () => {
73
+ test('emits a custom event when the bookmark color is changed', async () => {
75
74
  const el = await fixture(container(bookmark));
76
75
 
77
76
  setTimeout(() => (
@@ -79,10 +78,10 @@ describe('<ia-bookmark-edit>', () => {
79
78
  ));
80
79
  const response = await oneEvent(el, 'bookmarkColorChanged');
81
80
 
82
- expect(response).to.exist;
81
+ expect(response).toBeDefined();
83
82
  });
84
83
 
85
- it('emits a custom event when the edit form is submitted', async () => {
84
+ test('emits a custom event when the edit form is submitted', async () => {
86
85
  const el = await fixture(container(bookmark));
87
86
 
88
87
  setTimeout(() => (
@@ -90,10 +89,10 @@ describe('<ia-bookmark-edit>', () => {
90
89
  ));
91
90
  const response = await oneEvent(el, 'saveBookmark');
92
91
 
93
- expect(response).to.exist;
92
+ expect(response).toBeDefined();
94
93
  });
95
94
 
96
- it('emits a custom event when the delete button is clicked', async () => {
95
+ test('emits a custom event when the delete button is clicked', async () => {
97
96
  const el = await fixture(container(bookmark));
98
97
 
99
98
  setTimeout(() => (
@@ -101,10 +100,10 @@ describe('<ia-bookmark-edit>', () => {
101
100
  ));
102
101
  const response = await oneEvent(el, 'deleteBookmark');
103
102
 
104
- expect(response).to.exist;
103
+ expect(response).toBeDefined();
105
104
  });
106
105
 
107
- it('updates bookmark color when a color input changed', async () => {
106
+ test('updates bookmark color when a color input changed', async () => {
108
107
  const el = await fixture(container(bookmark));
109
108
 
110
109
  setTimeout(() => (
@@ -112,10 +111,10 @@ describe('<ia-bookmark-edit>', () => {
112
111
  ));
113
112
  await oneEvent(el, 'bookmarkColorChanged');
114
113
 
115
- expect(el.bookmark.color).to.equal(2);
114
+ expect(el.bookmark.color).toEqual(2);
116
115
  });
117
116
 
118
- it('updates bookmark note when the note textarea changed', async () => {
117
+ test('updates bookmark note when the note textarea changed', async () => {
119
118
  const el = await fixture(container(bookmark));
120
119
  const textarea = el.shadowRoot.querySelector('textarea');
121
120
  const updatedNote = 'New note';
@@ -128,6 +127,6 @@ describe('<ia-bookmark-edit>', () => {
128
127
 
129
128
  await oneEvent(textarea, 'change');
130
129
 
131
- expect(el.bookmark.note).to.contain(updatedNote);
130
+ expect(el.bookmark.note).toContain(updatedNote);
132
131
  });
133
132
  });
@@ -1,10 +1,9 @@
1
1
  import {
2
2
  html,
3
3
  fixture,
4
- expect,
5
4
  oneEvent,
6
- } from '@open-wc/testing';
7
- import '../../../../src/BookNavigator/bookmarks/bookmarks-list.js';
5
+ } from '@open-wc/testing-helpers';
6
+ import '@/src/BookNavigator/bookmarks/bookmarks-list.js';
8
7
 
9
8
  const bookmarks = [{
10
9
  id: 1,
@@ -41,24 +40,24 @@ describe('<ia-bookmarks-list>', () => {
41
40
  it('sets default properties', async () => {
42
41
  const el = await fixture(container(bookmarks));
43
42
 
44
- expect(el.bookmarks).to.equal(bookmarks);
45
- expect(el.activeBookmarkID).to.be.undefined;
46
- expect(el.renderHeader).to.be.false;
43
+ expect(el.bookmarks).toEqual(bookmarks);
44
+ expect(el.activeBookmarkID).toBeUndefined();
45
+ expect(el.renderHeader).toBeFalsy();
47
46
  });
48
47
 
49
- it('renders bookmarks that contain page numbers', async () => {
48
+ test('renders bookmarks that contain page numbers', async () => {
50
49
  const el = await fixture(container(bookmarks));
51
50
 
52
- expect(el.shadowRoot.innerHTML).to.include(`Page ${bookmarks[0].page}`);
51
+ expect(el.shadowRoot.textContent).toContain(`Page ${bookmarks[0].page}`);
53
52
  });
54
53
 
55
- it('renders bookmarks that contain an optional note', async () => {
54
+ test('renders bookmarks that contain an optional note', async () => {
56
55
  const el = await fixture(container(bookmarks));
57
56
 
58
- expect(el.shadowRoot.innerHTML).to.include(bookmarks[1].note);
57
+ expect(el.shadowRoot.innerHTML).toContain(bookmarks[1].note);
59
58
  });
60
59
 
61
- it('emits a custom event when a bookmark is clicked', async () => {
60
+ test('emits a custom event when a bookmark is clicked', async () => {
62
61
  const el = await fixture(container(bookmarks));
63
62
 
64
63
  setTimeout(() => (
@@ -66,10 +65,10 @@ describe('<ia-bookmarks-list>', () => {
66
65
  ));
67
66
  const response = await oneEvent(el, 'bookmarkSelected');
68
67
 
69
- expect(response).to.exist;
68
+ expect(response).toBeDefined();
70
69
  });
71
70
 
72
- it('emits a custom event when an edit button is clicked', async () => {
71
+ test('emits a custom event when an edit button is clicked', async () => {
73
72
  const el = await fixture(container(bookmarks));
74
73
 
75
74
  setTimeout(() => (
@@ -77,10 +76,10 @@ describe('<ia-bookmarks-list>', () => {
77
76
  ));
78
77
  const response = await oneEvent(el, 'bookmarkEdited');
79
78
 
80
- expect(response).to.exist;
79
+ expect(response).toBeDefined();
81
80
  });
82
81
 
83
- it('emits a saveBookmark event', async () => {
82
+ test('emits a saveBookmark event', async () => {
84
83
  const el = await fixture(container(bookmarks));
85
84
 
86
85
  setTimeout(() => (
@@ -88,10 +87,10 @@ describe('<ia-bookmarks-list>', () => {
88
87
  ));
89
88
  const response = await oneEvent(el, 'saveBookmark');
90
89
 
91
- expect(response).to.exist;
90
+ expect(response).toBeDefined();
92
91
  });
93
92
 
94
- it('emits a deleteBookmark event', async () => {
93
+ test('emits a deleteBookmark event', async () => {
95
94
  const el = await fixture(container(bookmarks));
96
95
 
97
96
  setTimeout(() => (
@@ -99,10 +98,10 @@ describe('<ia-bookmarks-list>', () => {
99
98
  ));
100
99
  const response = await oneEvent(el, 'deleteBookmark');
101
100
 
102
- expect(response).to.exist;
101
+ expect(response).toBeDefined();
103
102
  });
104
103
 
105
- it('emits a bookmarkColorChanged event', async () => {
104
+ test('emits a bookmarkColorChanged event', async () => {
106
105
  const el = await fixture(container(bookmarks));
107
106
 
108
107
  setTimeout(() => (
@@ -110,18 +109,18 @@ describe('<ia-bookmarks-list>', () => {
110
109
  ));
111
110
  const response = await oneEvent(el, 'bookmarkColorChanged');
112
111
 
113
- expect(response).to.exist;
112
+ expect(response).toBeDefined();
114
113
  });
115
114
 
116
- it('sets editedBookmark when an edit button is clicked', async () => {
115
+ test('sets editedBookmark when an edit button is clicked', async () => {
117
116
  const el = await fixture(container(bookmarks));
118
117
  let prevState = el.editedBookmark;
119
118
 
120
119
  el.shadowRoot.querySelector('li button').click();
121
120
  await el.updateComplete;
122
121
 
123
- expect(el.editedBookmark).not.to.equal(prevState);
124
- expect(el.editedBookmark.page).to.equal(bookmarks[0].page);
122
+ expect(el.editedBookmark).not.toEqual(prevState);
123
+ expect(el.editedBookmark.page).toEqual(bookmarks[0].page);
125
124
 
126
125
  // When clicking the same edit button while in edit mode, should toggle
127
126
  // edit mode off and remove editedBookmark pointer
@@ -129,11 +128,11 @@ describe('<ia-bookmarks-list>', () => {
129
128
  el.shadowRoot.querySelector('li button').click();
130
129
  await el.updateComplete;
131
130
 
132
- expect(el.editedBookmark).not.to.equal(prevState);
133
- expect(el.editedBookmark.page).not.to.equal(bookmarks[0].page);
131
+ expect(el.editedBookmark).not.toEqual(prevState);
132
+ expect(el.editedBookmark.page).not.toEqual(bookmarks[0].page);
134
133
  });
135
134
 
136
- it('resets editedBookmark when saveBookmark callback called', async () => {
135
+ test('resets editedBookmark when saveBookmark callback called', async () => {
137
136
  const el = await fixture(container(bookmarks));
138
137
 
139
138
  [el.editedBookmark] = bookmarks;
@@ -141,11 +140,11 @@ describe('<ia-bookmarks-list>', () => {
141
140
  el.saveBookmark({ detail: { bookmark: bookmarks[0] } });
142
141
  await el.updateComplete;
143
142
 
144
- expect(el.editedBookmark).not.to.equal(bookmarks[0]);
145
- expect(el.editedBookmark).not.to.have.keys(['page', 'thumbnail', 'id']);
143
+ expect(el.editedBookmark).not.toEqual(bookmarks[0]);
144
+ expect(el.editedBookmark).not.toHaveProperty('page', 'thumbnail', 'id');
146
145
  });
147
146
 
148
- it('resets editedBookmark when deleteBookmark callback called', async () => {
147
+ test('resets editedBookmark when deleteBookmark callback called', async () => {
149
148
  const el = await fixture(container(bookmarks));
150
149
 
151
150
  [el.editedBookmark] = bookmarks;
@@ -153,33 +152,33 @@ describe('<ia-bookmarks-list>', () => {
153
152
  el.deleteBookmark({ detail: { id: bookmarks[0].id } });
154
153
  await el.updateComplete;
155
154
 
156
- expect(el.editedBookmark).not.to.equal(bookmarks[0]);
157
- expect(el.editedBookmark).not.to.have.keys(['page', 'thumbnail', 'id']);
155
+ expect(el.editedBookmark).not.toEqual(bookmarks[0]);
156
+ expect(el.editedBookmark).not.toHaveProperty('page', 'thumbnail', 'id');
158
157
  });
159
158
 
160
- it('renders the bookmarks count', async () => {
159
+ test('renders the bookmarks count', async () => {
161
160
  const el = await fixture(container([bookmarks[0]]));
162
161
  const bookmarksCount = await fixture(el.bookmarksCount);
163
162
 
164
- expect(bookmarksCount.innerHTML).to.include('(1)');
163
+ expect(bookmarksCount.textContent).toContain('(1)');
165
164
  });
166
165
 
167
- it('does not render the bookmarks count when no bookmarks present', async () => {
166
+ test('does not render the bookmarks count when no bookmarks present', async () => {
168
167
  const el = await fixture(container());
169
168
  el.renderHeader = true;
170
169
 
171
170
  await el.updateComplete;
172
171
 
173
- expect(el.shadowRoot.querySelector('header small')).not.to.exist;
172
+ expect(el.shadowRoot.querySelector('header small')).toBe(null);
174
173
  });
175
174
 
176
- it('renders an optional header section', async () => {
175
+ test('renders an optional header section', async () => {
177
176
  const el = await fixture(container(bookmarks));
178
177
  el.renderHeader = true;
179
178
 
180
179
  await el.updateComplete;
181
180
 
182
- expect(el.shadowRoot.querySelector('header')).to.exist;
181
+ expect(el.shadowRoot.querySelector('header')).toBeDefined();
183
182
  });
184
183
 
185
184
  // skipped:
@@ -192,7 +191,7 @@ describe('<ia-bookmarks-list>', () => {
192
191
  ));
193
192
  const response = await oneEvent(el, 'addBookmark');
194
193
 
195
- expect(response).to.exist;
194
+ expect(response).toBeDefined();
196
195
  });
197
196
 
198
197
  // skipped:
@@ -200,23 +199,23 @@ describe('<ia-bookmarks-list>', () => {
200
199
  xit('renders an optional add bookmark button', async () => {
201
200
  const el = await fixture(container(bookmarks));
202
201
 
203
- expect(el.shadowRoot.querySelector('.add-bookmark')).to.exist;
202
+ expect(el.shadowRoot.querySelector('.add-bookmark')).toBeDefined();
204
203
 
205
204
  el.renderAddBookmarkButton = false;
206
205
  await el.updateComplete;
207
206
 
208
- expect(el.shadowRoot.querySelector('.add-bookmark')).not.to.exist;
207
+ expect(el.shadowRoot.querySelector('.add-bookmark')).not.toBeDefined();
209
208
  });
210
209
 
211
210
  // skipped:
212
211
  // TypeError: Cannot read property 'getAttribute' of null
213
212
  xit('can toggle disable behavior of add bookmark button', async () => {
214
213
  const el = await fixture(container(bookmarks));
215
- expect(el.shadowRoot.querySelector('.add-bookmark').getAttribute('disabled')).to.be.null;
214
+ expect(el.shadowRoot.querySelector('.add-bookmark').getAttribute('disabled')).toBeNull();
216
215
 
217
216
  el.disableAddBookmarkButton = true;
218
217
  await el.updateComplete;
219
218
 
220
- expect(el.shadowRoot.querySelector('.add-bookmark').getAttribute('disabled')).to.equal('disabled');
219
+ expect(el.shadowRoot.querySelector('.add-bookmark').getAttribute('disabled')).toEqual('disabled');
221
220
  });
222
221
  });
@@ -0,0 +1,45 @@
1
+ import {
2
+ html,
3
+ fixtureSync,
4
+ fixtureCleanup,
5
+ } from '@open-wc/testing-helpers';
6
+ import '@/src/BookNavigator/bookmarks/ia-bookmarks.js';
7
+ import sinon from 'sinon';
8
+
9
+ afterEach(() => {
10
+ sinon.restore();
11
+ fixtureCleanup();
12
+ });
13
+
14
+ describe('<ia-bookmarks>', () => {
15
+ test('uses `setup` to start component', async () => {
16
+ const el = fixtureSync(html`<ia-bookmarks displayMode="bookmarks"></ia-bookmarks>`);
17
+ el.bookreader = {
18
+ bookId: 'foo',
19
+ $,
20
+ currentIndex: () => 0,
21
+ };
22
+ await el.updateComplete;
23
+ const fetchUserBookmarks = sinon.spy(el, 'fetchUserBookmarks');
24
+ const fetchBookmarks = sinon.stub(el, 'fetchBookmarks');
25
+
26
+ el.setup();
27
+ await el.updateComplete;
28
+
29
+ expect(fetchUserBookmarks.callCount).toEqual(1);
30
+ expect(fetchBookmarks.callCount).toEqual(1);
31
+ });
32
+
33
+ test('does not fetch user bookmarks if displayMode = login', async () => {
34
+ const el = fixtureSync(html`<ia-bookmarks displayMode="login"></ia-bookmarks>`);
35
+ await el.updateComplete;
36
+ const fetchSpy = sinon.spy(el, 'fetchUserBookmarks');
37
+ const fetchBookmarks = sinon.stub(el, 'fetchBookmarks');
38
+
39
+ el.setup();
40
+ await el.updateComplete;
41
+
42
+ expect(fetchSpy.callCount).toEqual(0);
43
+ expect(fetchBookmarks.callCount).toEqual(0);
44
+ });
45
+ });
@@ -0,0 +1,67 @@
1
+ import { fixtureCleanup, fixtureSync } from '@open-wc/testing-helpers';
2
+ import sinon from 'sinon';
3
+ import DownloadsProvider from '@/src/BookNavigator/downloads/downloads-provider';
4
+
5
+ const downloadableTypes = [
6
+ ["PDF", "//archive.org/download/theworksofplato01platiala/theworksofplato01platiala.pdf"],
7
+ ["ePub", "//archive.org/download/theworksofplato01platiala/theworksofplato01platiala.epub"],
8
+ ["Plain Text", "//archive.org/download/theworksofplato01platiala/theworksofplato01platiala_djvu.txt"],
9
+ ["DAISY", "//archive.org/download/theworksofplato01platiala/theworksofplato01platiala_daisy.zip"],
10
+ ["Kindle", "//archive.org/download/theworksofplato01platiala/theworksofplato01platiala.mobi"],
11
+ ];
12
+
13
+ const downloads = [
14
+ {
15
+ type: "PDF",
16
+ url: "//archive.org/download/theworksofplato01platiala/theworksofplato01platiala.pdf",
17
+ note: "PDF files contain high quality images of pages.",
18
+ },
19
+ {
20
+ type: "ePub",
21
+ url: "//archive.org/download/theworksofplato01platiala/theworksofplato01platiala.epub",
22
+ note: "ePub files are smaller in size, but may contain errors.",
23
+ },
24
+ ];
25
+
26
+ afterEach(() => {
27
+ sinon.restore();
28
+ fixtureCleanup();
29
+ });
30
+
31
+ describe('Downloads Provider', () => {
32
+ test('constructor - initial setup', () => {
33
+ const isBookProtected = false;
34
+ const provider = new DownloadsProvider(isBookProtected);
35
+
36
+ expect(provider.id).toEqual('downloads');
37
+ expect(provider.icon).toBeDefined();
38
+ expect(fixtureSync(provider.icon).tagName).toEqual('IA-ICON-DL');
39
+ expect(provider.label).toEqual('Downloadable files');
40
+ expect(provider.menuDetails).toBeDefined();
41
+ expect(provider.component).toBeDefined();
42
+
43
+ provider.update(downloadableTypes);
44
+
45
+ expect(provider.isBookProtected).toEqual(false);
46
+
47
+ expect(provider.downloads[0].type).toEqual("PDF");
48
+ expect(provider.downloads[1].type).toEqual("ePub");
49
+
50
+ expect(provider.menuDetails).toEqual(`(${downloads.length} formats)`);
51
+ });
52
+
53
+ test('render view if book is protected', () => {
54
+ const provider = new DownloadsProvider({
55
+ bookreader: { options: { isProtected: true } },
56
+ });
57
+
58
+ expect(provider.isBookProtected).toEqual(true);
59
+
60
+ provider.update(downloadableTypes);
61
+
62
+ expect(provider.downloads[0].type).toEqual("Encrypted Adobe PDF");
63
+ expect(provider.downloads[1].type).toEqual("Encrypted Adobe ePub");
64
+
65
+ expect(provider.downloads.length).toEqual(downloads.length);
66
+ });
67
+ });
@@ -0,0 +1,53 @@
1
+ import {
2
+ html,
3
+ fixture,
4
+ fixtureCleanup,
5
+ } from '@open-wc/testing-helpers';
6
+ import sinon from 'sinon';
7
+ import '@/src/BookNavigator/downloads/downloads';
8
+
9
+
10
+ const downloads = [
11
+ {
12
+ type: "PDF",
13
+ url: "//archive.org/download/theworksofplato01platiala/theworksofplato01platiala.pdf",
14
+ note: "PDF files contain high quality images of pages.",
15
+ },
16
+ {
17
+ type: "ePub",
18
+ url: "//archive.org/download/theworksofplato01platiala/theworksofplato01platiala.epub",
19
+ note: "ePub files are smaller in size, but may contain errors.",
20
+ },
21
+ ];
22
+
23
+
24
+ const container = (downloads) => (
25
+ html`
26
+ <ia-book-downloads .downloads=${downloads}></ia-book-downloads>
27
+ `
28
+ );
29
+
30
+ beforeEach(() => {
31
+ const body = document.querySelector('body');
32
+ const brHook = document.createElement('div');
33
+ brHook.setAttribute('id', 'BookReader');
34
+ body.appendChild(brHook);
35
+ });
36
+
37
+ afterEach(() => {
38
+ sinon.restore();
39
+ fixtureCleanup();
40
+ });
41
+
42
+ describe('<ia-book-downloads>', () => {
43
+ test('sets default properties', async () => {
44
+ const el = await fixture(container(downloads));
45
+ await el.updateComplete;
46
+
47
+ expect(el.downloads.length).toEqual(2);
48
+ expect(el.shadowRoot.querySelector("ul").childElementCount).toEqual(2);
49
+ expect(el.isBookProtected).toEqual(false);
50
+
51
+ expect(el.shadowRoot.querySelector("ul li a").textContent).toContain("Get PDF");
52
+ });
53
+ });