@internetarchive/bookreader 5.0.0-8-multiple-files → 5.0.0-80

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 (321) hide show
  1. package/.eslintrc.js +17 -15
  2. package/.github/workflows/node.js.yml +78 -6
  3. package/.github/workflows/npm-publish.yml +6 -20
  4. package/.testcaferc.js +10 -0
  5. package/BookReader/BookReader.css +442 -1393
  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/jquery-3.js +2 -0
  58. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  59. package/BookReader/plugins/plugin.archive_analytics.js +1 -172
  60. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  61. package/BookReader/plugins/plugin.autoplay.js +1 -165
  62. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  63. package/BookReader/plugins/plugin.chapters.js +22 -301
  64. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  65. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  66. package/BookReader/plugins/plugin.iframe.js +1 -74
  67. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  68. package/BookReader/plugins/plugin.iiif.js +2 -0
  69. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  70. package/BookReader/plugins/plugin.resume.js +1 -368
  71. package/BookReader/plugins/plugin.resume.js.map +1 -1
  72. package/BookReader/plugins/plugin.search.js +2 -1420
  73. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  74. package/BookReader/plugins/plugin.search.js.map +1 -1
  75. package/BookReader/plugins/plugin.text_selection.js +2 -1080
  76. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  77. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  78. package/BookReader/plugins/plugin.tts.js +2 -9193
  79. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  80. package/BookReader/plugins/plugin.tts.js.map +1 -1
  81. package/BookReader/plugins/plugin.url.js +1 -269
  82. package/BookReader/plugins/plugin.url.js.map +1 -1
  83. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  84. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  85. package/BookReader/webcomponents-bundle.js +3 -0
  86. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  87. package/BookReader/webcomponents-bundle.js.map +1 -0
  88. package/BookReaderDemo/BookReaderDemo.css +18 -19
  89. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -3
  90. package/BookReaderDemo/BookReaderJSAutoplay.js +4 -1
  91. package/BookReaderDemo/BookReaderJSSimple.js +1 -0
  92. package/BookReaderDemo/IADemoBr.js +147 -0
  93. package/BookReaderDemo/demo-advanced.html +2 -2
  94. package/BookReaderDemo/demo-autoplay.html +2 -3
  95. package/BookReaderDemo/demo-embed-iframe-src.html +2 -1
  96. package/BookReaderDemo/demo-fullscreen-mobile.html +3 -5
  97. package/BookReaderDemo/demo-fullscreen.html +2 -4
  98. package/BookReaderDemo/demo-iiif.html +99 -12
  99. package/BookReaderDemo/demo-internetarchive.html +214 -18
  100. package/BookReaderDemo/demo-multiple.html +2 -1
  101. package/BookReaderDemo/demo-preview-pages.html +2 -1
  102. package/BookReaderDemo/demo-simple.html +2 -1
  103. package/BookReaderDemo/demo-vendor-fullscreen.html +2 -4
  104. package/BookReaderDemo/ia-multiple-volumes-manifest.js +170 -0
  105. package/BookReaderDemo/immersion-1up.html +2 -2
  106. package/BookReaderDemo/immersion-mode.html +2 -4
  107. package/BookReaderDemo/toggle_controls.html +3 -2
  108. package/BookReaderDemo/view_mode.html +2 -1
  109. package/BookReaderDemo/viewmode-cycle.html +2 -3
  110. package/CHANGELOG.md +545 -33
  111. package/README.md +14 -1
  112. package/babel.config.js +20 -0
  113. package/codecov.yml +6 -0
  114. package/index.html +4 -1
  115. package/jsconfig.json +19 -0
  116. package/netlify.toml +9 -0
  117. package/package.json +70 -60
  118. package/renovate.json +52 -0
  119. package/scripts/preversion.js +0 -1
  120. package/src/BookNavigator/assets/bookmark-colors.js +1 -1
  121. package/src/BookNavigator/assets/button-base.js +9 -2
  122. package/src/BookNavigator/assets/ia-logo.js +17 -0
  123. package/src/BookNavigator/assets/icon_checkmark.js +1 -1
  124. package/src/BookNavigator/assets/icon_close.js +1 -1
  125. package/src/BookNavigator/book-navigator.js +590 -0
  126. package/src/BookNavigator/bookmarks/bookmark-button.js +3 -2
  127. package/src/BookNavigator/bookmarks/bookmark-edit.js +3 -4
  128. package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
  129. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +3 -8
  130. package/src/BookNavigator/bookmarks/bookmarks-provider.js +27 -17
  131. package/src/BookNavigator/bookmarks/ia-bookmarks.js +116 -67
  132. package/src/BookNavigator/delete-modal-actions.js +1 -1
  133. package/src/BookNavigator/downloads/downloads-provider.js +36 -21
  134. package/src/BookNavigator/downloads/downloads.js +41 -25
  135. package/src/BookNavigator/search/search-provider.js +80 -28
  136. package/src/BookNavigator/search/search-results.js +28 -25
  137. package/src/BookNavigator/sharing.js +27 -0
  138. package/src/BookNavigator/viewable-files.js +95 -0
  139. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +11 -10
  140. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +3 -3
  141. package/src/BookReader/BookModel.js +64 -34
  142. package/src/BookReader/DragScrollable.js +233 -0
  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 +776 -0
  147. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  148. package/src/BookReader/ModeSmoothZoom.js +312 -0
  149. package/src/BookReader/ModeThumb.js +18 -12
  150. package/src/BookReader/Navbar/Navbar.js +14 -40
  151. package/src/BookReader/PageContainer.js +81 -6
  152. package/src/BookReader/ReduceSet.js +1 -1
  153. package/src/BookReader/Toolbar/Toolbar.js +10 -37
  154. package/src/BookReader/events.js +2 -3
  155. package/src/BookReader/options.js +27 -2
  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.js +118 -13
  160. package/src/BookReader.js +446 -1062
  161. package/src/assets/icons/close-circle-dark.svg +1 -0
  162. package/src/assets/icons/magnify-minus.svg +3 -7
  163. package/src/assets/icons/magnify-plus.svg +3 -7
  164. package/src/assets/icons/voice.svg +1 -0
  165. package/src/css/BookReader.scss +1 -17
  166. package/src/css/_BRBookmarks.scss +1 -1
  167. package/src/css/_BRComponent.scss +1 -1
  168. package/src/css/_BRmain.scss +33 -27
  169. package/src/css/_BRnav.scss +12 -39
  170. package/src/css/_BRpages.scss +149 -40
  171. package/src/css/_BRsearch.scss +68 -230
  172. package/src/css/_BRtoolbar.scss +5 -5
  173. package/src/css/_TextSelection.scss +87 -27
  174. package/src/css/_colorbox.scss +2 -2
  175. package/src/css/_controls.scss +20 -7
  176. package/src/css/_icons.scss +7 -1
  177. package/src/ia-bookreader/ia-bookreader.js +224 -0
  178. package/src/plugins/plugin.archive_analytics.js +3 -3
  179. package/src/plugins/plugin.autoplay.js +5 -11
  180. package/src/plugins/plugin.chapters.js +237 -191
  181. package/src/plugins/plugin.iiif.js +151 -0
  182. package/src/plugins/plugin.resume.js +3 -3
  183. package/src/plugins/plugin.text_selection.js +464 -134
  184. package/src/plugins/plugin.vendor-fullscreen.js +4 -4
  185. package/src/plugins/search/plugin.search.js +175 -120
  186. package/src/plugins/search/utils.js +43 -0
  187. package/src/plugins/search/view.js +64 -202
  188. package/src/plugins/tts/AbstractTTSEngine.js +71 -40
  189. package/src/plugins/tts/FestivalTTSEngine.js +13 -14
  190. package/src/plugins/tts/PageChunk.js +15 -21
  191. package/src/plugins/tts/PageChunkIterator.js +8 -12
  192. package/src/plugins/tts/WebTTSEngine.js +87 -71
  193. package/src/plugins/tts/plugin.tts.js +96 -127
  194. package/src/plugins/tts/utils.js +15 -25
  195. package/src/plugins/url/UrlPlugin.js +191 -0
  196. package/src/plugins/{plugin.url.js → url/plugin.url.js} +45 -16
  197. package/src/util/browserSniffing.js +22 -0
  198. package/src/util/docCookies.js +21 -2
  199. package/tests/e2e/README.md +37 -0
  200. package/tests/e2e/autoplay.test.js +2 -2
  201. package/tests/e2e/base.test.js +8 -16
  202. package/tests/e2e/helpers/base.js +53 -48
  203. package/tests/e2e/helpers/debug.js +1 -1
  204. package/tests/e2e/helpers/params.js +17 -0
  205. package/tests/e2e/helpers/rightToLeft.js +8 -14
  206. package/tests/e2e/helpers/search.js +73 -0
  207. package/tests/e2e/models/Navigation.js +20 -37
  208. package/tests/e2e/rightToLeft.test.js +4 -5
  209. package/tests/e2e/viewmode.test.js +40 -33
  210. package/tests/jest/BookNavigator/book-navigator.test.js +661 -0
  211. package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +43 -0
  212. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmark-edit.test.js +25 -26
  213. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmarks-list.test.js +41 -42
  214. package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +45 -0
  215. package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +67 -0
  216. package/tests/jest/BookNavigator/downloads/downloads.test.js +53 -0
  217. package/tests/jest/BookNavigator/search/search-provider.test.js +167 -0
  218. package/tests/{karma/BookNavigator → jest/BookNavigator/search}/search-results.test.js +109 -60
  219. package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +49 -0
  220. package/tests/jest/BookNavigator/viewable-files/viewable-files-provider.test.js +80 -0
  221. package/tests/jest/BookNavigator/visual-adjustments.test.js +200 -0
  222. package/tests/{BookReader → jest/BookReader}/BookModel.test.js +74 -14
  223. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +193 -0
  224. package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +4 -4
  225. package/tests/jest/BookReader/Mode1UpLit.test.js +73 -0
  226. package/tests/jest/BookReader/Mode2Up.test.js +98 -0
  227. package/tests/jest/BookReader/Mode2UpLit.test.js +190 -0
  228. package/tests/jest/BookReader/ModeCoordinateSpace.test.js +16 -0
  229. package/tests/jest/BookReader/ModeSmoothZoom.test.js +218 -0
  230. package/tests/jest/BookReader/ModeThumb.test.js +71 -0
  231. package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +10 -10
  232. package/tests/{BookReader → jest/BookReader}/PageContainer.test.js +88 -6
  233. package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +1 -1
  234. package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +2 -2
  235. package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
  236. package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +49 -0
  237. package/tests/jest/BookReader/utils/SelectionObserver.test.js +57 -0
  238. package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +1 -1
  239. package/tests/jest/BookReader/utils.test.js +229 -0
  240. package/tests/jest/BookReader.keyboard.test.js +190 -0
  241. package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +9 -1
  242. package/tests/{BookReader.test.js → jest/BookReader.test.js} +26 -37
  243. package/tests/{plugins → jest/plugins}/plugin.archive_analytics.test.js +2 -2
  244. package/tests/{plugins → jest/plugins}/plugin.autoplay.test.js +4 -4
  245. package/tests/jest/plugins/plugin.chapters.test.js +195 -0
  246. package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +2 -2
  247. package/tests/{plugins → jest/plugins}/plugin.resume.test.js +3 -3
  248. package/tests/jest/plugins/plugin.text_selection.test.js +317 -0
  249. package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +2 -2
  250. package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +26 -47
  251. package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +39 -6
  252. package/tests/jest/plugins/search/utils.js +25 -0
  253. package/tests/jest/plugins/search/utils.test.js +29 -0
  254. package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +29 -9
  255. package/tests/{plugins → jest/plugins}/tts/FestivalTTSEngine.test.js +4 -4
  256. package/tests/{plugins → jest/plugins}/tts/PageChunk.test.js +1 -1
  257. package/tests/{plugins → jest/plugins}/tts/PageChunkIterator.test.js +3 -3
  258. package/tests/{plugins → jest/plugins}/tts/WebTTSEngine.test.js +47 -1
  259. package/tests/{plugins → jest/plugins}/tts/utils.test.js +1 -60
  260. package/tests/jest/plugins/url/UrlPlugin.test.js +198 -0
  261. package/tests/{plugins → jest/plugins/url}/plugin.url.test.js +53 -14
  262. package/tests/jest/setup.js +3 -0
  263. package/tests/{util → jest/util}/browserSniffing.test.js +1 -1
  264. package/tests/jest/util/docCookies.test.js +24 -0
  265. package/tests/{util → jest/util}/strings.test.js +1 -1
  266. package/tests/{utils.js → jest/utils.js} +38 -0
  267. package/webpack.config.js +12 -6
  268. package/.babelrc +0 -12
  269. package/.dependabot/config.yml +0 -6
  270. package/.testcaferc.json +0 -5
  271. package/BookReader/bookreader-component-bundle.js +0 -14312
  272. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  273. package/BookReader/bookreader-component-bundle.js.map +0 -1
  274. package/BookReader/icons/sort-ascending.svg +0 -1
  275. package/BookReader/icons/sort-descending.svg +0 -1
  276. package/BookReader/jquery-1.10.1.js +0 -108
  277. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  278. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  279. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  280. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  281. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  282. package/BookReaderDemo/IIIFBookReader.js +0 -207
  283. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  284. package/BookReaderDemo/demo-iiif.js +0 -26
  285. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  286. package/karma.conf.js +0 -23
  287. package/src/BookNavigator/BookModel.js +0 -14
  288. package/src/BookNavigator/BookNavigator.js +0 -452
  289. package/src/BookNavigator/assets/book-loader.js +0 -27
  290. package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
  291. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  292. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  293. package/src/BookNavigator/search/a-search-result.js +0 -55
  294. package/src/BookNavigator/volumes/volumes-provider.js +0 -76
  295. package/src/BookNavigator/volumes/volumes.js +0 -161
  296. package/src/BookReader/DebugConsole.js +0 -54
  297. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  298. package/src/ItemNavigator/ItemNavigator.js +0 -372
  299. package/src/ItemNavigator/providers/sharing.js +0 -29
  300. package/src/assets/icons/sort-ascending.svg +0 -1
  301. package/src/assets/icons/sort-descending.svg +0 -1
  302. package/src/css/_MobileNav.scss +0 -194
  303. package/src/dragscrollable-br.js +0 -261
  304. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  305. package/src/plugins/plugin.mobile_nav.js +0 -287
  306. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  307. package/tests/BookReader/DebugConsole.test.js +0 -25
  308. package/tests/BookReader/Mode1Up.test.js +0 -164
  309. package/tests/BookReader/Mode2Up.test.js +0 -247
  310. package/tests/BookReader/utils.test.js +0 -109
  311. package/tests/e2e/helpers/desktopSearch.js +0 -72
  312. package/tests/e2e/helpers/mobileSearch.js +0 -85
  313. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  314. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  315. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  316. package/tests/karma/BookNavigator/volumes.test.js +0 -101
  317. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  318. package/tests/plugins/plugin.chapters.test.js +0 -130
  319. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  320. package/tests/plugins/plugin.text_selection.test.js +0 -203
  321. package/tests/util/docCookies.test.js +0 -15
@@ -1,201 +0,0 @@
1
- import {
2
- html,
3
- fixture,
4
- expect,
5
- oneEvent,
6
- } from '@open-wc/testing';
7
- import sinon from 'sinon';
8
- import { IABookVisualAdjustments } from '../../../src/BookNavigator/visual-adjustments/visual-adjustments.js';
9
-
10
- const options = [{
11
- id: 'contrast',
12
- name: 'Adjust contrast',
13
- active: true,
14
- min: 0,
15
- max: 150,
16
- step: 1,
17
- value: 100,
18
- }, {
19
- id: 'invert',
20
- name: 'Invert colors',
21
- active: false,
22
- }, {
23
- id: 'brightness',
24
- name: 'Adjust brightness',
25
- active: false,
26
- value: 100,
27
- }];
28
-
29
- const container = (renderHeader = false) => (
30
- html`<ia-book-visual-adjustments .options=${options} ?renderHeader=${renderHeader}></ia-book-visual-adjustments>`
31
- );
32
-
33
- describe('<ia-book-visual-adjustments>', () => {
34
- afterEach(() => {
35
- sinon.restore();
36
- });
37
-
38
- it('sets default properties', async () => {
39
- const el = await fixture(container());
40
-
41
- expect(el.options).to.exist;
42
- expect(el.options.length).to.equal(options.length);
43
- expect(el.renderHeader).to.exist;
44
- expect(el.renderHeader).to.be.false;
45
- expect(el.activeCount).to.exist;
46
- expect(el.showZoomControls).to.be.true;
47
- });
48
-
49
- it('renders all properties of a visual adjustment option', async () => {
50
- const el = await fixture(container());
51
-
52
- await el.updateComplete;
53
-
54
- const label = el.shadowRoot.querySelector('label');
55
- const name = label.querySelector('.name');
56
- const checkbox = label.querySelector('input');
57
- expect(name.innerText).to.equal(options[0].name);
58
- expect(checkbox.checked).to.equal(true);
59
- });
60
-
61
- it('can render header with active options count', async () => {
62
- const renderHeader = true;
63
- const el = await fixture(container(renderHeader));
64
- expect(el.shadowRoot.querySelector('header p').innerText).to.include('1');
65
- });
66
-
67
- it('does not render active options count element when none are selected', async () => {
68
- const el = await fixture(container());
69
-
70
- el.options = [options[1]];
71
- await el.updateComplete;
72
-
73
- expect(el.shadowRoot.querySelector('header p')).not.to.exist;
74
- });
75
-
76
- it('changes option\'s active state when input changed', async () => {
77
- const el = await fixture(container());
78
-
79
- el.shadowRoot.querySelector('li input').dispatchEvent(new Event('change'));
80
- await el.updateComplete;
81
-
82
- expect(el.options[0].active).to.equal(false);
83
- });
84
-
85
- it('renders zoom in and out controls when enabled', async () => {
86
- const el = await fixture(container());
87
-
88
- expect(el.shadowRoot.querySelector('.zoom_out')).to.exist;
89
- expect(el.shadowRoot.querySelector('.zoom_in')).to.exist;
90
- });
91
-
92
- it('does not render zoom controls when disabled', async () => {
93
- const el = await fixture(container());
94
-
95
- el.showZoomControls = false;
96
- await el.updateComplete;
97
-
98
- expect(el.shadowRoot.querySelector('.zoom_out')).not.to.exist;
99
- expect(el.shadowRoot.querySelector('.zoom_in')).not.to.exist;
100
- });
101
-
102
- describe('Custom events', () => {
103
- it('prepareEventDetails returns proper params', async () => {
104
- const el = await fixture(container());
105
- await el.updateComplete;
106
- const params = el.prepareEventDetails();
107
-
108
- expect(params.activeCount).to.exist;
109
- expect(typeof (params.activeCount)).to.be.equal('number');
110
- expect(params.changedOptionId).to.exist;
111
- expect(typeof (params.changedOptionId)).to.be.equal('string');
112
- expect(params.options).to.exist;
113
- expect(params.options.length).to.exist;
114
- expect(params.options.length).to.be.greaterThan(0);
115
- });
116
- it('emitOptionChangedEvent calls for the params', async () => {
117
- IABookVisualAdjustments.prototype.prepareEventDetails = sinon.fake();
118
- const el = await fixture(container());
119
- await el.updateComplete;
120
-
121
- expect(el.prepareEventDetails.callCount).to.equal(1);
122
- });
123
- it('triggers an emitOptionChangedEvent event at firstUpdate', async () => {
124
- IABookVisualAdjustments.prototype.emitOptionChangedEvent = sinon.fake();
125
- const el = await fixture(container());
126
-
127
- expect(el.emitOptionChangedEvent.callCount).to.equal(1);
128
- });
129
-
130
- it('triggers an emitOptionChangedEvent event when a checkbox\'s change event fires', async () => {
131
- IABookVisualAdjustments.prototype.emitOptionChangedEvent = sinon.fake();
132
- const el = await fixture(container());
133
-
134
- expect(el.emitOptionChangedEvent.callCount).to.equal(1); // firstUpdate fire
135
-
136
- el.shadowRoot.querySelector('li input').dispatchEvent(new Event('change'));
137
- expect(el.emitOptionChangedEvent.callCount).to.equal(2);
138
- });
139
-
140
- it('triggers an emitOptionChangedEvent event when a range\'s change event fires', async () => {
141
- IABookVisualAdjustments.prototype.emitOptionChangedEvent = sinon.fake();
142
-
143
- const el = await fixture(container());
144
- expect(el.emitOptionChangedEvent.callCount).to.equal(1); // firstUpdate fire
145
-
146
- el.shadowRoot.querySelector('[name="brightness_range"]').dispatchEvent(new Event('change'));
147
- expect(el.emitOptionChangedEvent.callCount).to.equal(2);
148
- });
149
-
150
- it('emits a zoom out event when zoom out button clicked', async () => {
151
- const el = await fixture(container());
152
-
153
- setTimeout(() => (
154
- el.shadowRoot.querySelector('.zoom_out').click()
155
- ));
156
- const response = await oneEvent(el, 'visualAdjustmentZoomOut');
157
-
158
- expect(response).to.exist;
159
- });
160
-
161
- it('emits a zoom in event when zoom in button clicked', async () => {
162
- const el = await fixture(container());
163
-
164
- setTimeout(() => (
165
- el.shadowRoot.querySelector('.zoom_in').click()
166
- ));
167
- const response = await oneEvent(el, 'visualAdjustmentZoomIn');
168
-
169
- expect(response).to.exist;
170
- });
171
- });
172
-
173
- it('sets range defaults when none supplied', async () => {
174
- const el = await fixture(container());
175
- const brightnessRange = el.shadowRoot.querySelector('[name="brightness_range"]');
176
-
177
- expect(brightnessRange.getAttribute('min')).to.equal('0');
178
- expect(brightnessRange.getAttribute('max')).to.equal('100');
179
- expect(brightnessRange.getAttribute('step')).to.equal('1');
180
- });
181
-
182
- it('sets the updated range value on the options prop', async () => {
183
- const el = await fixture(container());
184
- const { id } = options[0];
185
- const newValue = 120;
186
-
187
- el.setRangeValue(id, newValue);
188
- await el.updateComplete;
189
-
190
- expect(el.options[0].value).to.equal(newValue);
191
- });
192
-
193
- it('triggers a setRangeValue event when a range\'s input event fires', async () => {
194
- IABookVisualAdjustments.prototype.setRangeValue = sinon.fake();
195
-
196
- const el = await fixture(container());
197
-
198
- el.shadowRoot.querySelector('[name="brightness_range"]').dispatchEvent(new Event('input'));
199
- expect(el.setRangeValue.callCount).to.equal(1);
200
- });
201
- });
@@ -1,101 +0,0 @@
1
- import {
2
- html,
3
- fixture,
4
- expect
5
- } from '@open-wc/testing';
6
- import sinon from 'sinon';
7
- // import { Volumes } from '../../../src/BookNavigator/volumes/volumes.js';
8
-
9
- const options = [{
10
- id: 'contrast',
11
- name: 'Adjust contrast',
12
- active: true,
13
- min: 0,
14
- max: 150,
15
- step: 1,
16
- value: 100,
17
- }, {
18
- id: 'invert',
19
- name: 'Invert colors',
20
- active: false,
21
- }, {
22
- id: 'brightness',
23
- name: 'Adjust brightness',
24
- active: false,
25
- value: 100,
26
- }];
27
-
28
- const container = (hostUrl = false) => (
29
- html`<viewable-files .viewableFiles=${options}} .hostUrl="https://archive.org"></viewable-files>`
30
- );
31
-
32
- describe('<viewable-files>', () => {
33
- afterEach(() => {
34
- sinon.restore();
35
- });
36
-
37
- it('sets default properties', async () => {
38
- const el = await fixture(container());
39
-
40
- expect(el.options).to.exist;
41
- expect(el.options.length).to.equal(options.length);
42
- expect(el.renderHeader).to.exist;
43
- expect(el.renderHeader).to.be.false;
44
- expect(el.activeCount).to.exist;
45
- expect(el.showZoomControls).to.be.true;
46
- });
47
-
48
- // it('renders all properties of a visual adjustment option', async () => {
49
- // const el = await fixture(container());
50
-
51
- // await el.updateComplete;
52
-
53
- // const label = el.shadowRoot.querySelector('label');
54
- // const name = label.querySelector('.name');
55
- // const checkbox = label.querySelector('input');
56
- // expect(name.innerText).to.equal(options[0].name);
57
- // expect(checkbox.checked).to.equal(true);
58
- // });
59
-
60
- // it('can render header with active options count', async () => {
61
- // const renderHeader = true;
62
- // const el = await fixture(container(renderHeader));
63
- // expect(el.shadowRoot.querySelector('header p').innerText).to.include('1');
64
- // });
65
-
66
- // it('does not render active options count element when none are selected', async () => {
67
- // const el = await fixture(container());
68
-
69
- // el.options = [options[1]];
70
- // await el.updateComplete;
71
-
72
- // expect(el.shadowRoot.querySelector('header p')).not.to.exist;
73
- // });
74
-
75
- // it('changes option\'s active state when input changed', async () => {
76
- // const el = await fixture(container());
77
-
78
- // el.shadowRoot.querySelector('li input').dispatchEvent(new Event('change'));
79
- // await el.updateComplete;
80
-
81
- // expect(el.options[0].active).to.equal(false);
82
- // });
83
-
84
- // it('renders zoom in and out controls when enabled', async () => {
85
- // const el = await fixture(container());
86
-
87
- // expect(el.shadowRoot.querySelector('.zoom_out')).to.exist;
88
- // expect(el.shadowRoot.querySelector('.zoom_in')).to.exist;
89
- // });
90
-
91
- // it('does not render zoom controls when disabled', async () => {
92
- // const el = await fixture(container());
93
-
94
- // el.showZoomControls = false;
95
- // await el.updateComplete;
96
-
97
- // expect(el.shadowRoot.querySelector('.zoom_out')).not.to.exist;
98
- // expect(el.shadowRoot.querySelector('.zoom_in')).not.to.exist;
99
- // });
100
-
101
- });
@@ -1,68 +0,0 @@
1
-
2
- import BookReader from '../../../src/BookReader.js';
3
- import '../../../src/plugins/menu_toggle/plugin.menu_toggle.js';
4
-
5
-
6
- let br;
7
- let hideFlag;
8
- beforeAll(() => {
9
- $.fx.off = true;
10
- const OGSpeed = $.speed;
11
- $.speed = function(_speed, easing, callback) {
12
- return OGSpeed(0, easing, callback);
13
- };
14
- document.body.innerHTML = '<div id="BookReader">';
15
- br = new BookReader();
16
- br.init();
17
- });
18
-
19
- afterEach(() => {
20
- $.fx.off = false;
21
- jest.clearAllMocks();
22
- });
23
-
24
- describe('Plugin: Menu Toggle', () => {
25
- test('has option flag', () => {
26
- expect(BookReader.defaultOptions.enableMenuToggle).toEqual(true);
27
- });
28
-
29
- test('core code has animation consts', () => {
30
- expect(BookReader.constNavAnimationDuration).toEqual(300);
31
- expect(BookReader.constResizeAnimationDuration).toEqual(100);
32
- })
33
-
34
- test('core code has registered event: `navToggled`', () => {
35
- expect(BookReader.eventNames.navToggled).toBeTruthy();
36
- })
37
-
38
- test('when bookreader loads, the menu shows', () => {
39
- expect($('.BRfooter').hasClass('js-menu-hide')).toEqual(false);
40
- expect($('.BRtoolbar').hasClass('js-menu-hide')).toEqual(false);
41
- })
42
-
43
- test('clicking on background hides the menu', () => {
44
- expect($('.BRfooter').hasClass('js-menu-hide')).toEqual(false);
45
- expect($('.BRtoolbar').hasClass('js-menu-hide')).toEqual(false);
46
- $('.BRcontainer').click();
47
- expect($('.BRfooter').hasClass('js-menu-hide')).toEqual(true);
48
- expect($('.BRtoolbar').hasClass('js-menu-hide')).toEqual(true);
49
- });
50
-
51
- test('core function `setNavigationView` is called `hideNavigation` is called', () => {
52
- br.setNavigationView = jest.fn((arg) => hideFlag = arg);
53
-
54
- br.hideNavigation();
55
- expect(br.setNavigationView).toHaveBeenCalled();
56
- expect(hideFlag).toEqual(true);
57
- });
58
-
59
- test('core function `setNavigationView` is called `showNavigation` is called', () => {
60
- br.setNavigationView = jest.fn((arg) => hideFlag = arg);
61
- br.navigationIsVisible = jest.fn(() => false);
62
-
63
- br.showNavigation();
64
- expect(br.setNavigationView).toHaveBeenCalled();
65
- expect(br.navigationIsVisible).toHaveBeenCalled();
66
- expect(hideFlag).toEqual(undefined);
67
- });
68
- });
@@ -1,130 +0,0 @@
1
- import sinon from 'sinon';
2
-
3
- import BookReader from '../../src/BookReader.js';
4
- import '../../src/plugins/plugin.mobile_nav.js';
5
- import '../../src/plugins/plugin.chapters.js';
6
-
7
- const SAMPLE_TOC = [{
8
- "pagenum": "3",
9
- "level": 1,
10
- "label": "CHAPTER I",
11
- "type": {"key": "/type/toc_item"},
12
- "title": "THE COUNTRY AND THE MISSION 1",
13
- "pageIndex": 3,
14
- },{
15
- "pagenum": "17",
16
- "level": 1,
17
- "label": "CHAPTER II",
18
- "type": {"key": "/type/toc_item"},
19
- "title": "THE COUNTRY AND THE MISSION 2",
20
- "pageIndex": 17,
21
- },
22
- {
23
- "pagenum": "undefined",
24
- "level": 1,
25
- "label": "CHAPTER III",
26
- "type": {"key": "/type/toc_item"},
27
- "title": "THE COUNTRY AND THE MISSION 3",
28
- "pageIndex": undefined,
29
- },
30
- {
31
- "pagenum": "40",
32
- "level": 1,
33
- "label": "CHAPTER IV",
34
- "type": {"key": "/type/toc_item"},
35
- "title": "THE COUNTRY AND THE MISSION 4",
36
- "pageIndex": 40,
37
- }];
38
-
39
- const SAMPLE_TOC_UNDEF = [
40
- {
41
- "pagenum": "undefined",
42
- "level": 1,
43
- "label": "CHAPTER I",
44
- "type": {"key": "/type/toc_item"},
45
- "title": "THE COUNTRY AND THE MISSION 1",
46
- "pageIndex": undefined,
47
- },
48
- {
49
- "pagenum": "undefined",
50
- "level": 1,
51
- "label": "CHAPTER II",
52
- "type": {"key": "/type/toc_item"},
53
- "title": "THE COUNTRY AND THE MISSION 2",
54
- "pageIndex": undefined,
55
- }
56
- ]
57
-
58
- let br;
59
- beforeEach(() => {
60
- $.ajax = jest.fn().mockImplementation((args) => {
61
- return Promise.resolve([{
62
- table_of_contents: SAMPLE_TOC,
63
- }]);
64
- });
65
- document.body.innerHTML = '<div id="BookReader">';
66
- br = new BookReader();
67
- });
68
-
69
- afterEach(() => {
70
- jest.clearAllMocks();
71
- });
72
-
73
- describe('Plugin: Menu Toggle', () => {
74
- test('has option flag', () => {
75
- expect(BookReader.defaultOptions.enableChaptersPlugin).toEqual(true);
76
- });
77
- test('has added BR property: olHost', () => {
78
- expect(br).toHaveProperty('olHost');
79
- expect(br.olHost).toBeTruthy();
80
- });
81
- test('has added BR property: bookId', () => {
82
- expect(br).toHaveProperty('bookId');
83
- expect(br.bookId).toBeFalsy();
84
- });
85
- test('fetches OL Book Record on init', () => {
86
- br.getOpenLibraryRecord = jest.fn();
87
- br.init();
88
- expect(br.getOpenLibraryRecord).toHaveBeenCalled();
89
- });
90
- test('Updates Table of Contents when available', () => {
91
- br.init();
92
- expect($.ajax).toHaveBeenCalled();
93
- });
94
- });
95
-
96
- describe('updateTOCState', () => {
97
-
98
- beforeEach(() => {
99
- window.HTMLElement.prototype.scrollIntoView = sinon.stub();
100
- //Sinon is not used because this function is imported from BookModel with exposeOverrideableMethod()
101
- //which has a getter and setter
102
- br.getPageIndex = (str) => parseFloat(str);
103
- br.init();
104
- });
105
-
106
- test('Test page is one of TOC', () => {
107
- br.updateTOCState(20, SAMPLE_TOC);
108
- expect($('li.BRtable-contents-el')[1].classList.contains('current-chapter'));
109
- });
110
-
111
- test('Only one element has .current-chapter', () => {
112
- br.updateTOCState(9, SAMPLE_TOC);
113
- expect($('li.BRtable-contents-el.current-chapter').length).toBe(1);
114
- })
115
-
116
- test('No chapter has .current-chapter if current index is < than any chapter index', () => {
117
- br.updateTOCState(1, SAMPLE_TOC);
118
- expect($('li.BRtable-contents-el.current-chapter').length).toBe(0);
119
- })
120
-
121
- test('if current index == chapter index ', () => {
122
- br.updateTOCState(17, SAMPLE_TOC);
123
- expect($('li.BRtable-contents-el')[1].classList.contains('current-chapter'));
124
- })
125
-
126
- test('No chapter has .current-chapter if all chapter have undefined pageIndex ', () => {
127
- br.updateTOCState(10, SAMPLE_TOC_UNDEF);
128
- expect($('li.BRtable-contents-el.current-chapter').length).toBe(0);
129
- })
130
- });
@@ -1,66 +0,0 @@
1
-
2
- import BookReader from '../../src/BookReader.js';
3
- import '../../src/plugins/plugin.mobile_nav.js';
4
-
5
- /** @type {BookReader} */
6
- let br;
7
- beforeEach(() => {
8
- document.body.innerHTML = '<div id="BookReader">';
9
- br = new BookReader();
10
- br.init();
11
- });
12
-
13
- afterEach(() => {
14
- jest.clearAllMocks();
15
- });
16
-
17
- describe('Plugin: Mobile Nav', () => {
18
- test('has option flag', () => {
19
- expect(BookReader.defaultOptions.enableMobileNav).toEqual(true);
20
- });
21
- test('has added BR property: mobileNavTitle', () => {
22
- expect(br).toHaveProperty('mobileNavTitle');
23
- expect(br.mobileNavTitle).toBeTruthy();
24
- });
25
- test('has added BR property: mobileNavFullscreenOnly', () => {
26
- expect(br).toHaveProperty('mobileNavFullscreenOnly');
27
- expect(br.mobileNavFullscreenOnly).toEqual(false);
28
- });
29
- test('has a referenced copy of nav in BookReader', () => {
30
- expect(br.refs).toHaveProperty('$mmenu');
31
- });
32
- test('draws toolbar on init', () => {
33
- let callCount = 0;
34
- // Since we have a custom setter set in utils/classes.js, we can't
35
- // use regular spying; need to "override" the function with a watcher.
36
- BookReader.prototype.initToolbar = function(_super) {
37
- return function() {
38
- callCount++;
39
- _super.apply(this, arguments);
40
- }
41
- }(BookReader.prototype.initToolbar);
42
- const br = new BookReader();
43
- br.init();
44
- expect(callCount).toBe(1);
45
- });
46
- test('sets a class on body to signal it has attached', () => {
47
- expect($(document.body).hasClass('BRbodyMobileNavEnabled')).toEqual(true);
48
- });
49
- test('loads the navbar on init', () => {
50
- expect($('#BRmobileMenu')).toHaveLength(1)
51
- });
52
- test('There is a Settings Section', () => {
53
- expect($('.BRmobileMenu__settings')).toHaveLength(1);
54
- });
55
- test('There is a More Info Section', () => {
56
- expect($('.BRmobileMenu__moreInfoRow')).toHaveLength(1);
57
- });
58
- test('There is a Sharing Section', () => {
59
- expect($('.BRmobileMenu__share')).toHaveLength(1);
60
- });
61
- test('clicking on hamburger opens menu', () => {
62
- expect($('html').hasClass('mm-opened')).toEqual(false);
63
- $('.BRmobileHamburger').click();
64
- expect($('html').hasClass('mm-opened')).toEqual(true);
65
- });
66
- });