@internetarchive/bookreader 5.0.0-28 → 5.0.0-30-a

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 (233) hide show
  1. package/.husky/_/husky.sh +30 -0
  2. package/BookReader/BookReader.css +1 -1
  3. package/BookReader/BookReader.js +1 -1
  4. package/BookReader/BookReader.js.map +1 -1
  5. package/BookReader/ia-bookreader-bundle.js +1458 -0
  6. package/BookReader/{bookreader-component-bundle.js.LICENSE.txt → ia-bookreader-bundle.js.LICENSE.txt} +12 -0
  7. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  8. package/BookReader/plugins/plugin.search.js +1 -1
  9. package/BookReader/plugins/plugin.search.js.map +1 -1
  10. package/BookReader/plugins/plugin.url.js +1 -1
  11. package/BookReader/plugins/plugin.url.js.map +1 -1
  12. package/BookReaderDemo/BookReaderDemo.css +14 -1
  13. package/BookReaderDemo/IADemoBr.js +107 -0
  14. package/BookReaderDemo/demo-internetarchive.html +64 -99
  15. package/CHANGELOG.md +4 -0
  16. package/package.json +9 -6
  17. package/src/BookNavigator/assets/ia-logo.js +17 -0
  18. package/src/BookNavigator/book-navigator.js +528 -0
  19. package/src/BookNavigator/bookmarks/bookmark-button.js +2 -1
  20. package/src/BookNavigator/bookmarks/bookmarks-provider.js +20 -8
  21. package/src/BookNavigator/bookmarks/ia-bookmarks.js +84 -51
  22. package/src/BookNavigator/downloads/downloads-provider.js +5 -9
  23. package/src/BookNavigator/downloads/downloads.js +1 -0
  24. package/src/BookNavigator/search/search-provider.js +15 -8
  25. package/src/BookNavigator/sharing.js +27 -0
  26. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +9 -8
  27. package/src/BookNavigator/volumes/volumes-provider.js +3 -4
  28. package/src/BookReader/options.js +6 -0
  29. package/src/BookReader.js +20 -8
  30. package/src/css/_BRComponent.scss +1 -1
  31. package/src/ia-bookreader/ia-bookreader.js +205 -0
  32. package/src/plugins/search/plugin.search.js +9 -9
  33. package/src/plugins/url/UrlPlugin.js +5 -6
  34. package/{src → stat}/BookNavigator/BookModel.js +0 -0
  35. package/{src → stat}/BookNavigator/BookNavigator.js +109 -102
  36. package/stat/BookNavigator/assets/bookmark-colors.js +15 -0
  37. package/stat/BookNavigator/assets/button-base.js +61 -0
  38. package/stat/BookNavigator/assets/ia-logo.js +17 -0
  39. package/stat/BookNavigator/assets/icon_checkmark.js +6 -0
  40. package/stat/BookNavigator/assets/icon_close.js +3 -0
  41. package/stat/BookNavigator/assets/icon_sort_asc.js +5 -0
  42. package/stat/BookNavigator/assets/icon_sort_desc.js +5 -0
  43. package/stat/BookNavigator/assets/icon_sort_neutral.js +5 -0
  44. package/stat/BookNavigator/assets/icon_volumes.js +11 -0
  45. package/stat/BookNavigator/bookmarks/bookmark-button.js +64 -0
  46. package/stat/BookNavigator/bookmarks/bookmark-edit.js +215 -0
  47. package/stat/BookNavigator/bookmarks/bookmarks-list.js +285 -0
  48. package/stat/BookNavigator/bookmarks/bookmarks-loginCTA.js +28 -0
  49. package/stat/BookNavigator/bookmarks/bookmarks-provider.js +56 -0
  50. package/stat/BookNavigator/bookmarks/ia-bookmarks.js +523 -0
  51. package/{src → stat}/BookNavigator/br-fullscreen-mgr.js +1 -2
  52. package/stat/BookNavigator/delete-modal-actions.js +49 -0
  53. package/stat/BookNavigator/downloads/downloads-provider.js +72 -0
  54. package/stat/BookNavigator/downloads/downloads.js +139 -0
  55. package/stat/BookNavigator/provider-config.js +0 -0
  56. package/stat/BookNavigator/search/a-search-result.js +55 -0
  57. package/stat/BookNavigator/search/search-provider.js +180 -0
  58. package/stat/BookNavigator/search/search-results.js +360 -0
  59. package/{src/ItemNavigator/providers → stat/BookNavigator}/sharing.js +3 -5
  60. package/stat/BookNavigator/visual-adjustments/visual-adjustments-provider.js +94 -0
  61. package/stat/BookNavigator/visual-adjustments/visual-adjustments.js +280 -0
  62. package/stat/BookNavigator/volumes/volumes-provider.js +83 -0
  63. package/stat/BookNavigator/volumes/volumes.js +178 -0
  64. package/stat/BookReader/BookModel.js +518 -0
  65. package/stat/BookReader/DebugConsole.js +54 -0
  66. package/stat/BookReader/DragScrollable.js +233 -0
  67. package/stat/BookReader/ImageCache.js +116 -0
  68. package/stat/BookReader/Mode1Up.js +102 -0
  69. package/stat/BookReader/Mode1UpLit.js +434 -0
  70. package/stat/BookReader/Mode2Up.js +1372 -0
  71. package/stat/BookReader/ModeSmoothZoom.js +177 -0
  72. package/stat/BookReader/ModeThumb.js +344 -0
  73. package/stat/BookReader/Navbar/Navbar.js +310 -0
  74. package/stat/BookReader/PageContainer.js +120 -0
  75. package/stat/BookReader/ReduceSet.js +26 -0
  76. package/stat/BookReader/Toolbar/Toolbar.js +384 -0
  77. package/stat/BookReader/events.js +20 -0
  78. package/stat/BookReader/options.js +324 -0
  79. package/stat/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  80. package/stat/BookReader/utils/classes.js +36 -0
  81. package/stat/BookReader/utils.js +240 -0
  82. package/stat/BookReader.js +2550 -0
  83. package/{src → stat}/BookReaderComponent/BookReaderComponent.js +15 -10
  84. package/stat/assets/icons/1up.svg +12 -0
  85. package/stat/assets/icons/2up.svg +15 -0
  86. package/stat/assets/icons/advance.svg +26 -0
  87. package/stat/assets/icons/chevron-right.svg +1 -0
  88. package/stat/assets/icons/close-circle-dark.svg +1 -0
  89. package/stat/assets/icons/close-circle.svg +1 -0
  90. package/stat/assets/icons/fullscreen.svg +17 -0
  91. package/stat/assets/icons/fullscreen_exit.svg +17 -0
  92. package/stat/assets/icons/hamburger.svg +15 -0
  93. package/stat/assets/icons/left-arrow.svg +12 -0
  94. package/stat/assets/icons/magnify-minus.svg +16 -0
  95. package/stat/assets/icons/magnify-plus.svg +17 -0
  96. package/stat/assets/icons/magnify.svg +15 -0
  97. package/stat/assets/icons/pause.svg +23 -0
  98. package/stat/assets/icons/play.svg +22 -0
  99. package/stat/assets/icons/playback-speed.svg +34 -0
  100. package/stat/assets/icons/read-aloud.svg +22 -0
  101. package/stat/assets/icons/review.svg +22 -0
  102. package/stat/assets/icons/thumbnails.svg +17 -0
  103. package/stat/assets/icons/voice.svg +1 -0
  104. package/stat/assets/icons/volume-full.svg +22 -0
  105. package/stat/assets/images/BRicons.png +0 -0
  106. package/stat/assets/images/BRicons.svg +94 -0
  107. package/stat/assets/images/BRicons_ia.png +0 -0
  108. package/stat/assets/images/back_pages.png +0 -0
  109. package/stat/assets/images/book_bottom_icon.png +0 -0
  110. package/stat/assets/images/book_down_icon.png +0 -0
  111. package/stat/assets/images/book_left_icon.png +0 -0
  112. package/stat/assets/images/book_leftmost_icon.png +0 -0
  113. package/stat/assets/images/book_right_icon.png +0 -0
  114. package/stat/assets/images/book_rightmost_icon.png +0 -0
  115. package/stat/assets/images/book_top_icon.png +0 -0
  116. package/stat/assets/images/book_up_icon.png +0 -0
  117. package/stat/assets/images/books_graphic.svg +177 -0
  118. package/stat/assets/images/booksplit.png +0 -0
  119. package/stat/assets/images/control_pause_icon.png +0 -0
  120. package/stat/assets/images/control_play_icon.png +0 -0
  121. package/stat/assets/images/embed_icon.png +0 -0
  122. package/stat/assets/images/icon-home-ia.png +0 -0
  123. package/stat/assets/images/icon_OL-logo-xs.png +0 -0
  124. package/stat/assets/images/icon_alert-xs.png +0 -0
  125. package/stat/assets/images/icon_book.svg +12 -0
  126. package/stat/assets/images/icon_bookmark.svg +12 -0
  127. package/stat/assets/images/icon_close-pop.png +0 -0
  128. package/stat/assets/images/icon_download.png +0 -0
  129. package/stat/assets/images/icon_gear.svg +14 -0
  130. package/stat/assets/images/icon_hamburger.svg +20 -0
  131. package/stat/assets/images/icon_home.png +0 -0
  132. package/stat/assets/images/icon_home.svg +21 -0
  133. package/stat/assets/images/icon_home_ia.png +0 -0
  134. package/stat/assets/images/icon_indicator.png +0 -0
  135. package/stat/assets/images/icon_info.svg +11 -0
  136. package/stat/assets/images/icon_one_page.svg +8 -0
  137. package/stat/assets/images/icon_pause.svg +1 -0
  138. package/stat/assets/images/icon_play.svg +1 -0
  139. package/stat/assets/images/icon_playback-rate.svg +15 -0
  140. package/stat/assets/images/icon_return.png +0 -0
  141. package/stat/assets/images/icon_search_button.svg +8 -0
  142. package/stat/assets/images/icon_share.svg +9 -0
  143. package/stat/assets/images/icon_skip-ahead.svg +6 -0
  144. package/stat/assets/images/icon_skip-back.svg +13 -0
  145. package/stat/assets/images/icon_speaker.svg +18 -0
  146. package/stat/assets/images/icon_speaker_open.svg +10 -0
  147. package/stat/assets/images/icon_thumbnails.svg +12 -0
  148. package/stat/assets/images/icon_toc.svg +5 -0
  149. package/stat/assets/images/icon_two_pages.svg +9 -0
  150. package/stat/assets/images/icon_zoomer.png +0 -0
  151. package/stat/assets/images/loading.gif +0 -0
  152. package/stat/assets/images/logo_icon.png +0 -0
  153. package/stat/assets/images/marker_chap-off.png +0 -0
  154. package/stat/assets/images/marker_chap-off.svg +11 -0
  155. package/stat/assets/images/marker_chap-off_ia.png +0 -0
  156. package/stat/assets/images/marker_chap-on.png +0 -0
  157. package/stat/assets/images/marker_chap-on.svg +11 -0
  158. package/stat/assets/images/marker_srch-on.svg +11 -0
  159. package/stat/assets/images/marker_srchchap-off.png +0 -0
  160. package/stat/assets/images/marker_srchchap-on.png +0 -0
  161. package/stat/assets/images/nav_control-dn.png +0 -0
  162. package/stat/assets/images/nav_control-dn_ia.png +0 -0
  163. package/stat/assets/images/nav_control-up.png +0 -0
  164. package/stat/assets/images/nav_control-up_ia.png +0 -0
  165. package/stat/assets/images/nav_control.png +0 -0
  166. package/stat/assets/images/one_page_mode_icon.png +0 -0
  167. package/stat/assets/images/paper-badge.png +0 -0
  168. package/stat/assets/images/print_icon.png +0 -0
  169. package/stat/assets/images/progressbar.gif +0 -0
  170. package/stat/assets/images/right_edges.png +0 -0
  171. package/stat/assets/images/slider.png +0 -0
  172. package/stat/assets/images/slider_ia.png +0 -0
  173. package/stat/assets/images/thumbnail_mode_icon.png +0 -0
  174. package/stat/assets/images/transparent.png +0 -0
  175. package/stat/assets/images/two_page_mode_icon.png +0 -0
  176. package/stat/assets/images/zoom_in_icon.png +0 -0
  177. package/stat/assets/images/zoom_out_icon.png +0 -0
  178. package/stat/css/BookReader.scss +89 -0
  179. package/stat/css/_BRBookmarks.scss +29 -0
  180. package/stat/css/_BRComponent.scss +13 -0
  181. package/stat/css/_BRfloat.scss +197 -0
  182. package/stat/css/_BRicon.scss +48 -0
  183. package/stat/css/_BRmain.scss +251 -0
  184. package/stat/css/_BRnav.scss +359 -0
  185. package/stat/css/_BRpages.scss +139 -0
  186. package/stat/css/_BRsearch.scss +226 -0
  187. package/stat/css/_BRtoolbar.scss +84 -0
  188. package/stat/css/_BRvendor.scss +5 -0
  189. package/stat/css/_MobileNav.scss +194 -0
  190. package/stat/css/_TextSelection.scss +32 -0
  191. package/stat/css/_colorbox.scss +52 -0
  192. package/stat/css/_controls.scss +253 -0
  193. package/stat/css/_icons.scss +121 -0
  194. package/stat/jquery-wrapper.js +4 -0
  195. package/stat/plugins/plugin.archive_analytics.js +86 -0
  196. package/stat/plugins/plugin.autoplay.js +129 -0
  197. package/stat/plugins/plugin.chapters.js +248 -0
  198. package/stat/plugins/plugin.iframe.js +48 -0
  199. package/stat/plugins/plugin.mobile_nav.js +288 -0
  200. package/stat/plugins/plugin.resume.js +68 -0
  201. package/stat/plugins/plugin.text_selection.js +291 -0
  202. package/stat/plugins/plugin.url.js +198 -0
  203. package/stat/plugins/plugin.vendor-fullscreen.js +247 -0
  204. package/stat/plugins/search/plugin.search.js +439 -0
  205. package/stat/plugins/search/view.js +439 -0
  206. package/stat/plugins/tts/AbstractTTSEngine.js +249 -0
  207. package/stat/plugins/tts/FestivalTTSEngine.js +169 -0
  208. package/stat/plugins/tts/PageChunk.js +107 -0
  209. package/stat/plugins/tts/PageChunkIterator.js +163 -0
  210. package/stat/plugins/tts/WebTTSEngine.js +357 -0
  211. package/stat/plugins/tts/plugin.tts.js +357 -0
  212. package/stat/plugins/tts/tooltip_dict.js +15 -0
  213. package/stat/plugins/tts/utils.js +91 -0
  214. package/stat/util/browserSniffing.js +30 -0
  215. package/stat/util/debouncer.js +26 -0
  216. package/stat/util/docCookies.js +67 -0
  217. package/stat/util/strings.js +34 -0
  218. package/tests/e2e/viewmode.test.js +30 -30
  219. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +64 -52
  220. package/tests/jest/plugins/url/UrlPlugin.test.js +33 -10
  221. package/tests/karma/BookNavigator/book-navigator.test.js +413 -108
  222. package/tests/karma/BookNavigator/bookmarks/bookmark-button.test.js +44 -0
  223. package/tests/karma/BookNavigator/downloads/downloads-provider.test.js +6 -3
  224. package/tests/karma/BookNavigator/search/search-provider.test.js +106 -6
  225. package/tests/karma/BookNavigator/search/search-results.test.js +0 -2
  226. package/tests/karma/BookNavigator/sharing/sharing-provider.test.js +29 -20
  227. package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +41 -17
  228. package/webpack.config.js +1 -1
  229. package/.nvmrc +0 -1
  230. package/BookReader/bookreader-component-bundle.js +0 -1436
  231. package/BookReader/bookreader-component-bundle.js.map +0 -1
  232. package/src/BookNavigator/assets/book-loader.js +0 -27
  233. package/src/ItemNavigator/ItemNavigator.js +0 -377
@@ -1,23 +1,123 @@
1
- import { expect } from '@open-wc/testing';
1
+ import { expect, fixtureCleanup, fixtureSync } from '@open-wc/testing';
2
2
  import sinon from 'sinon';
3
3
  import searchProvider from '../../../../src/BookNavigator/search/search-provider';
4
4
 
5
5
  afterEach(() => {
6
6
  sinon.restore();
7
+ fixtureCleanup();
7
8
  });
8
9
 
9
10
  describe('Search Provider', () => {
10
11
  describe('constructor', () => {
11
- const onSearchChangeCB = sinon.fake();
12
- const br = sinon.fake();
13
- const provider = new searchProvider(onSearchChangeCB, br);
12
+ const provider = new searchProvider({
13
+ onProviderChange: sinon.fake(),
14
+ bookreader: {}
15
+ });
14
16
 
15
- expect(provider.bookreader).to.equal(br);
16
- expect(provider.onSearchChange).to.equal(onSearchChangeCB);
17
+ expect(provider.bookreader).to.exist;
18
+ expect(provider.onProviderChange).to.exist;
17
19
  expect(provider.id).to.equal('search');
18
20
  expect(provider.icon).to.exist;
21
+ expect(fixtureSync(provider.icon).tagName).to.equal('IA-ICON-SEARCH');
19
22
  expect(provider.label).to.equal('Search inside');
20
23
  expect(provider.menuDetails).to.exist;
21
24
  expect(provider.component).to.exist;
22
25
  });
26
+ describe('BR calls', () => {
27
+ it('`advanceToPage', () => {
28
+ const provider = new searchProvider({
29
+ onProviderChange: sinon.fake(),
30
+ bookreader: {
31
+ leafNumToIndex: sinon.fake(),
32
+ _searchPluginGoToResult: sinon.fake()
33
+ }
34
+ });
35
+
36
+ provider.advanceToPage(1);
37
+ expect(provider?.bookreader.leafNumToIndex.callCount).to.equal(1);
38
+ expect(provider?.bookreader._searchPluginGoToResult.callCount).to.equal(1);
39
+ });
40
+ });
41
+ describe('Search request life cycles', () => {
42
+ it('Event: catches `BookReader:SearchStarted`', async() => {
43
+ const provider = new searchProvider({
44
+ onProviderChange: sinon.fake(),
45
+ bookreader: {}
46
+ });
47
+ sinon.spy(provider, 'updateMenu');
48
+ window.dispatchEvent(new CustomEvent('BookReader:SearchStarted', { detail: { props: { term: 'foo' }}}));
49
+ expect(provider.updateMenu.callCount).to.equal(1);
50
+ });
51
+ it('Event: catches `BookReader:SearchCallback`', async() => {
52
+ const provider = new searchProvider({
53
+ onProviderChange: sinon.fake(),
54
+ bookreader: {}
55
+ });
56
+ sinon.spy(provider, 'updateMenu');
57
+ const brStub = {};
58
+ window.dispatchEvent(new CustomEvent('BookReader:SearchCallback', { detail: { props: { instance: brStub, results: { matches: []} }}}));
59
+ expect(provider.updateMenu.callCount).to.equal(1);
60
+ expect(provider.bookreader).to.equal(brStub);
61
+ });
62
+ it('Event: catches `BookReader:SearchCallbackEmpty`', async() => {
63
+ const provider = new searchProvider({
64
+ onProviderChange: sinon.fake(),
65
+ bookreader: {}
66
+ });
67
+ sinon.spy(provider, 'onSearchRequestError');
68
+ sinon.spy(provider, 'updateMenu');
69
+ const brStub = {};
70
+ window.dispatchEvent(new CustomEvent('BookReader:SearchCallbackEmpty', { detail: { props: { instance: brStub }}}));
71
+ expect(provider.onSearchRequestError.getCall(0).args[1]).to.equal('noResults');
72
+ expect(provider.updateMenu.callCount).to.equal(1);
73
+ expect(provider.bookreader).to.equal(brStub);
74
+ });
75
+ it('Event: catches `BookReader:SearchCallbackNotIndexed`', async() => {
76
+ const provider = new searchProvider({
77
+ onProviderChange: sinon.fake(),
78
+ bookreader: {}
79
+ });
80
+ const brStub = {};
81
+ sinon.spy(provider, 'onSearchRequestError');
82
+ sinon.spy(provider, 'updateMenu');
83
+ window.dispatchEvent(new CustomEvent('BookReader:SearchCallbackNotIndexed', { detail: { props: { instance: brStub }}}));
84
+ expect(provider.onSearchRequestError.getCall(0).args[1]).to.equal('notIndexed');
85
+ expect(provider.updateMenu.callCount).to.equal(1);
86
+ expect(provider.bookreader).to.equal(brStub);
87
+ });
88
+ it('Event: catches `BookReader:SearchCallbackError`', async() => {
89
+ const provider = new searchProvider({
90
+ onProviderChange: sinon.fake(),
91
+ bookreader: {}
92
+ });
93
+ sinon.spy(provider, 'onSearchRequestError');
94
+ sinon.spy(provider, 'updateMenu');
95
+ const brStub = {};
96
+ window.dispatchEvent(new CustomEvent('BookReader:SearchCallbackError', { detail: { props: { instance: brStub }}}));
97
+ expect(provider.onSearchRequestError.getCall(0).args[1]).to.equal(undefined);
98
+ expect(provider.updateMenu.callCount).to.equal(1);
99
+ expect(provider.bookreader).to.equal(brStub);
100
+ });
101
+ it('Event: catches `component@resultSelected` - user clicks result in side panel - & turns page', async() => {
102
+ const provider = new searchProvider({
103
+ onProviderChange: sinon.fake(),
104
+ bookreader: {
105
+ leafNumToIndex: sinon.fake(),
106
+ _searchPluginGoToResult: sinon.fake()
107
+ }
108
+ });
109
+ sinon.spy(provider, 'advanceToPage');
110
+
111
+ const searchResultStub = {
112
+ match: { par: [{ text: 'foo', page: 3 }] },
113
+ };
114
+ fixtureSync(provider.component).dispatchEvent(
115
+ new CustomEvent('resultSelected',
116
+ { detail: searchResultStub })
117
+ );
118
+
119
+ expect(provider.advanceToPage.callCount).to.equal(1);
120
+ expect(provider.bookreader._searchPluginGoToResult.callCount).to.equal(1);
121
+ });
122
+ });
23
123
  });
@@ -11,8 +11,6 @@ const container = (results = [], query = '') => (
11
11
  html`<ia-book-search-results .results=${results} .query=${query}></ia-book-search-results>`
12
12
  );
13
13
 
14
- console.log("ia-book-search-results-test");
15
-
16
14
  const searchQuery = 'Bristol';
17
15
 
18
16
  const results = [{
@@ -1,40 +1,49 @@
1
- import { expect } from '@open-wc/testing';
1
+ import { expect, fixtureSync } from '@open-wc/testing';
2
2
  import sinon from 'sinon';
3
- import sharingProvider from '../../../../src/ItemNavigator/providers/sharing.js';
3
+ import SharingProvider from '../../../../src/BookNavigator/sharing.js';
4
4
 
5
5
  afterEach(() => {
6
6
  sinon.restore();
7
7
  });
8
8
 
9
- const mdStub = {
10
- identifier: 'stubby-id'
9
+ const item = {
10
+ metadata: {
11
+ identifier: 'stubby-id',
12
+ creator: 'mr. big',
13
+ title: 'Stubby title',
14
+ }
11
15
  };
12
16
 
13
- const baseHostStub = 'foo.org';
14
- const itemType = 'texts';
17
+ const baseHost = 'foo.org';
15
18
  const subPrefix = 'beep-boop_12 4 5';
16
19
 
17
20
  describe('Sharing Provider', () => {
18
21
  describe('constructor', () => {
19
- const provider = new sharingProvider(mdStub, baseHostStub, itemType, subPrefix);
22
+ const provider = new SharingProvider({
23
+ item,
24
+ baseHost,
25
+ bookreader: {
26
+ options: { subPrefix }
27
+ }
28
+ });
20
29
 
21
30
  expect(provider.id).to.equal('share');
22
31
  expect(provider.icon).to.exist;
23
- expect(provider.label).to.equal('Share this item');
24
- expect(provider.itemType).to.equal(itemType);
25
- expect(provider.idPath).to.exist;
26
- expect(provider.component).to.exist;
32
+ expect(provider.label).to.equal('Share this book');
33
+ expect(fixtureSync(provider.component).tagName).to.contains('IA-SHARING-OPTIONS');
27
34
  });
28
35
 
29
- describe('handles subprefix', () => {
30
- it('encodes the subprefix if it has one', () => {
31
- const provider = new sharingProvider(mdStub, baseHostStub, itemType, subPrefix);
32
- const encodedSubprefix = encodeURIComponent(subPrefix);
33
- expect(provider.idPath).to.equal(`${mdStub.identifier}/${encodedSubprefix}`);
34
- });
35
- it('does not add subprefix to path if subprefix is item id', () => {
36
- const provider = new sharingProvider(mdStub, baseHostStub, itemType, mdStub.identifier);
37
- expect(provider.idPath).to.equal(mdStub.identifier);
36
+ describe('Handles being a sub file/volume', () => {
37
+ it('encodes the subprefix if it has one', async () => {
38
+ const provider = new SharingProvider({
39
+ item,
40
+ baseHost,
41
+ bookreader: {
42
+ options: { subPrefix }
43
+ }
44
+ });
45
+
46
+ expect(fixtureSync(provider.component).fileSubPrefix).to.equal(subPrefix);
38
47
  });
39
48
  });
40
49
  });
@@ -1,4 +1,4 @@
1
- import { expect, fixture } from '@open-wc/testing';
1
+ import { expect, fixture, fixtureCleanup, fixtureSync } from '@open-wc/testing';
2
2
  import sinon from 'sinon';
3
3
  import volumesProvider from '../../../../src/BookNavigator/volumes/volumes-provider';
4
4
 
@@ -35,21 +35,26 @@ const brOptions = {
35
35
 
36
36
  afterEach(() => {
37
37
  sinon.restore();
38
+ fixtureCleanup();
38
39
  });
39
40
 
40
41
  describe('Volumes Provider', () => {
41
42
  it('constructor', () => {
42
- const onSortClick = sinon.fake();
43
+ const onProviderChange = sinon.fake();
43
44
  const baseHost = "https://archive.org";
44
- const provider = new volumesProvider(baseHost, brOptions, onSortClick);
45
+ const provider = new volumesProvider({
46
+ baseHost,
47
+ bookreader: brOptions,
48
+ onProviderChange
49
+ });
45
50
 
46
51
  const files = brOptions.options.multipleBooksList.by_subprefix;
47
52
  const volumeCount = Object.keys(files).length;
48
53
 
49
- expect(provider.optionChange).to.equal(onSortClick);
54
+ expect(provider.onProviderChange).to.equal(onProviderChange);
50
55
  expect(provider.id).to.equal('volumes');
51
56
  expect(provider.icon).to.exist;
52
-
57
+ expect(fixtureSync(provider.icon).tagName).to.equal('svg');
53
58
  expect(provider.label).to.equal(`Viewable files (${volumeCount})`);
54
59
  expect(provider.viewableFiles).to.exist;
55
60
  expect(provider.viewableFiles.length).to.equal(3);
@@ -60,9 +65,13 @@ describe('Volumes Provider', () => {
60
65
  });
61
66
 
62
67
  it('sorting cycles - render sort actionButton', async () => {
63
- const onSortClick = sinon.fake();
68
+ const onProviderChange = sinon.fake();
64
69
  const baseHost = "https://archive.org";
65
- const provider = new volumesProvider(baseHost, brOptions, onSortClick);
70
+ const provider = new volumesProvider({
71
+ baseHost,
72
+ bookreader: brOptions,
73
+ onProviderChange
74
+ });
66
75
 
67
76
  expect(provider.sortOrderBy).to.equal("default");
68
77
 
@@ -80,9 +89,13 @@ describe('Volumes Provider', () => {
80
89
  });
81
90
 
82
91
  it('sort volumes in initial order', async () => {
83
- const onSortClick = sinon.fake();
92
+ const onProviderChange = sinon.fake();
84
93
  const baseHost = "https://archive.org";
85
- const provider = new volumesProvider(baseHost, brOptions, onSortClick);
94
+ const provider = new volumesProvider({
95
+ baseHost,
96
+ bookreader: brOptions,
97
+ onProviderChange
98
+ });
86
99
 
87
100
  const parsedFiles = brOptions.options.multipleBooksList.by_subprefix;
88
101
  const files = Object.keys(parsedFiles).map(item => parsedFiles[item]).sort((a, b) => a.orig_sort - b.orig_sort);
@@ -99,9 +112,13 @@ describe('Volumes Provider', () => {
99
112
  });
100
113
 
101
114
  it('sort volumes in ascending title order', async () => {
102
- const onSortClick = sinon.fake();
115
+ const onProviderChange = sinon.fake();
103
116
  const baseHost = "https://archive.org";
104
- const provider = new volumesProvider(baseHost, brOptions, onSortClick);
117
+ const provider = new volumesProvider({
118
+ baseHost,
119
+ bookreader: brOptions,
120
+ onProviderChange
121
+ });
105
122
 
106
123
  const parsedFiles = brOptions.options.multipleBooksList.by_subprefix;
107
124
  const files = Object.keys(parsedFiles).map(item => parsedFiles[item]);
@@ -118,10 +135,13 @@ describe('Volumes Provider', () => {
118
135
  });
119
136
 
120
137
  it('sort volumes in descending title order', async () => {
121
- const onSortClick = sinon.fake();
138
+ const onProviderChange = sinon.fake();
122
139
  const baseHost = "https://archive.org";
123
- const provider = new volumesProvider(baseHost, brOptions, onSortClick);
124
-
140
+ const provider = new volumesProvider({
141
+ baseHost,
142
+ bookreader: brOptions,
143
+ onProviderChange
144
+ });
125
145
  provider.isSortAscending = false;
126
146
 
127
147
  const parsedFiles = brOptions.options.multipleBooksList.by_subprefix;
@@ -140,11 +160,15 @@ describe('Volumes Provider', () => {
140
160
 
141
161
  describe('Sorting icons', () => {
142
162
  it('has 3 icons', async () => {
143
- const onSortClick = sinon.fake();
163
+ const onProviderChange = sinon.fake();
144
164
  const baseHost = "https://archive.org";
145
- const provider = new volumesProvider(baseHost, brOptions, onSortClick);
146
-
165
+ const provider = new volumesProvider({
166
+ baseHost,
167
+ bookreader: brOptions,
168
+ onProviderChange
169
+ });
147
170
  provider.sortOrderBy = 'default';
171
+
148
172
  const origSortButton = await fixture(provider.sortButton);
149
173
  expect(origSortButton.classList.contains('neutral-icon')).to.be.true;
150
174
 
package/webpack.config.js CHANGED
@@ -53,7 +53,7 @@ module.exports = [
53
53
  'plugins/plugin.tts.js': { import: './src/plugins/tts/plugin.tts.js', dependOn: 'BookReader.js' },
54
54
  'plugins/plugin.url.js': { import: './src/plugins/url/plugin.url.js', dependOn: 'BookReader.js' },
55
55
  'plugins/plugin.vendor-fullscreen.js': { import: './src/plugins/plugin.vendor-fullscreen.js', dependOn: 'BookReader.js' },
56
- 'bookreader-component-bundle.js': { import: './src/BookReaderComponent/BookReaderComponent.js', dependOn: 'BookReader.js' }
56
+ 'ia-bookreader-bundle.js': { import: './src/ia-bookreader/ia-bookreader.js', dependOn: 'BookReader.js' }
57
57
  },
58
58
 
59
59
  externals: {
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- 14