@internetarchive/bookreader 5.0.0-26 → 5.0.0-29

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 (236) 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/bookreader-component-bundle.js +570 -542
  6. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +23 -0
  7. package/BookReader/bookreader-component-bundle.js.map +1 -1
  8. package/BookReader/plugins/plugin.search.js +1 -1
  9. package/BookReader/plugins/plugin.search.js.map +1 -1
  10. package/BookReader/plugins/plugin.tts.js.map +1 -1
  11. package/BookReader/plugins/plugin.url.js +1 -1
  12. package/BookReader/plugins/plugin.url.js.map +1 -1
  13. package/BookReaderDemo/BookReaderDemo.css +14 -1
  14. package/BookReaderDemo/IADemoBr.js +104 -0
  15. package/BookReaderDemo/demo-internetarchive.html +65 -98
  16. package/CHANGELOG.md +10 -0
  17. package/package.json +9 -6
  18. package/src/BookNavigator/assets/ia-logo.js +17 -0
  19. package/src/BookNavigator/book-navigator.js +521 -0
  20. package/src/BookNavigator/bookmarks/bookmark-button.js +2 -1
  21. package/src/BookNavigator/bookmarks/bookmarks-provider.js +20 -8
  22. package/src/BookNavigator/bookmarks/ia-bookmarks.js +84 -51
  23. package/src/BookNavigator/downloads/downloads-provider.js +5 -9
  24. package/src/BookNavigator/downloads/downloads.js +1 -0
  25. package/src/BookNavigator/search/search-provider.js +15 -8
  26. package/src/BookNavigator/sharing.js +27 -0
  27. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +9 -8
  28. package/src/BookNavigator/volumes/volumes-provider.js +44 -13
  29. package/src/BookNavigator/volumes/volumes.js +14 -3
  30. package/src/BookReader/options.js +6 -0
  31. package/src/BookReader.js +20 -8
  32. package/src/BookReaderComponent/BookReaderComponent.js +53 -32
  33. package/src/css/_BRComponent.scss +1 -1
  34. package/src/plugins/search/plugin.search.js +10 -9
  35. package/src/plugins/tts/FestivalTTSEngine.js +1 -1
  36. package/src/plugins/url/UrlPlugin.js +184 -0
  37. package/src/plugins/url/plugin.url.js +220 -0
  38. package/{src → stat}/BookNavigator/BookModel.js +0 -0
  39. package/{src → stat}/BookNavigator/BookNavigator.js +109 -102
  40. package/stat/BookNavigator/assets/bookmark-colors.js +15 -0
  41. package/stat/BookNavigator/assets/button-base.js +61 -0
  42. package/stat/BookNavigator/assets/ia-logo.js +17 -0
  43. package/stat/BookNavigator/assets/icon_checkmark.js +6 -0
  44. package/stat/BookNavigator/assets/icon_close.js +3 -0
  45. package/stat/BookNavigator/assets/icon_sort_asc.js +5 -0
  46. package/stat/BookNavigator/assets/icon_sort_desc.js +5 -0
  47. package/stat/BookNavigator/assets/icon_sort_neutral.js +5 -0
  48. package/stat/BookNavigator/assets/icon_volumes.js +11 -0
  49. package/stat/BookNavigator/bookmarks/bookmark-button.js +64 -0
  50. package/stat/BookNavigator/bookmarks/bookmark-edit.js +215 -0
  51. package/stat/BookNavigator/bookmarks/bookmarks-list.js +285 -0
  52. package/stat/BookNavigator/bookmarks/bookmarks-loginCTA.js +28 -0
  53. package/stat/BookNavigator/bookmarks/bookmarks-provider.js +56 -0
  54. package/stat/BookNavigator/bookmarks/ia-bookmarks.js +523 -0
  55. package/{src → stat}/BookNavigator/br-fullscreen-mgr.js +1 -2
  56. package/stat/BookNavigator/delete-modal-actions.js +49 -0
  57. package/stat/BookNavigator/downloads/downloads-provider.js +72 -0
  58. package/stat/BookNavigator/downloads/downloads.js +139 -0
  59. package/stat/BookNavigator/provider-config.js +0 -0
  60. package/stat/BookNavigator/search/a-search-result.js +55 -0
  61. package/stat/BookNavigator/search/search-provider.js +180 -0
  62. package/stat/BookNavigator/search/search-results.js +360 -0
  63. package/{src/ItemNavigator/providers → stat/BookNavigator}/sharing.js +3 -5
  64. package/stat/BookNavigator/visual-adjustments/visual-adjustments-provider.js +94 -0
  65. package/stat/BookNavigator/visual-adjustments/visual-adjustments.js +280 -0
  66. package/stat/BookNavigator/volumes/volumes-provider.js +83 -0
  67. package/stat/BookNavigator/volumes/volumes.js +178 -0
  68. package/stat/BookReader/BookModel.js +518 -0
  69. package/stat/BookReader/DebugConsole.js +54 -0
  70. package/stat/BookReader/DragScrollable.js +233 -0
  71. package/stat/BookReader/ImageCache.js +116 -0
  72. package/stat/BookReader/Mode1Up.js +102 -0
  73. package/stat/BookReader/Mode1UpLit.js +434 -0
  74. package/stat/BookReader/Mode2Up.js +1372 -0
  75. package/stat/BookReader/ModeSmoothZoom.js +177 -0
  76. package/stat/BookReader/ModeThumb.js +344 -0
  77. package/stat/BookReader/Navbar/Navbar.js +310 -0
  78. package/stat/BookReader/PageContainer.js +120 -0
  79. package/stat/BookReader/ReduceSet.js +26 -0
  80. package/stat/BookReader/Toolbar/Toolbar.js +384 -0
  81. package/stat/BookReader/events.js +20 -0
  82. package/stat/BookReader/options.js +324 -0
  83. package/stat/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  84. package/stat/BookReader/utils/classes.js +36 -0
  85. package/stat/BookReader/utils.js +240 -0
  86. package/stat/BookReader.js +2550 -0
  87. package/stat/BookReaderComponent/BookReaderComponent.js +117 -0
  88. package/stat/assets/icons/1up.svg +12 -0
  89. package/stat/assets/icons/2up.svg +15 -0
  90. package/stat/assets/icons/advance.svg +26 -0
  91. package/stat/assets/icons/chevron-right.svg +1 -0
  92. package/stat/assets/icons/close-circle-dark.svg +1 -0
  93. package/stat/assets/icons/close-circle.svg +1 -0
  94. package/stat/assets/icons/fullscreen.svg +17 -0
  95. package/stat/assets/icons/fullscreen_exit.svg +17 -0
  96. package/stat/assets/icons/hamburger.svg +15 -0
  97. package/stat/assets/icons/left-arrow.svg +12 -0
  98. package/stat/assets/icons/magnify-minus.svg +16 -0
  99. package/stat/assets/icons/magnify-plus.svg +17 -0
  100. package/stat/assets/icons/magnify.svg +15 -0
  101. package/stat/assets/icons/pause.svg +23 -0
  102. package/stat/assets/icons/play.svg +22 -0
  103. package/stat/assets/icons/playback-speed.svg +34 -0
  104. package/stat/assets/icons/read-aloud.svg +22 -0
  105. package/stat/assets/icons/review.svg +22 -0
  106. package/stat/assets/icons/thumbnails.svg +17 -0
  107. package/stat/assets/icons/voice.svg +1 -0
  108. package/stat/assets/icons/volume-full.svg +22 -0
  109. package/stat/assets/images/BRicons.png +0 -0
  110. package/stat/assets/images/BRicons.svg +94 -0
  111. package/stat/assets/images/BRicons_ia.png +0 -0
  112. package/stat/assets/images/back_pages.png +0 -0
  113. package/stat/assets/images/book_bottom_icon.png +0 -0
  114. package/stat/assets/images/book_down_icon.png +0 -0
  115. package/stat/assets/images/book_left_icon.png +0 -0
  116. package/stat/assets/images/book_leftmost_icon.png +0 -0
  117. package/stat/assets/images/book_right_icon.png +0 -0
  118. package/stat/assets/images/book_rightmost_icon.png +0 -0
  119. package/stat/assets/images/book_top_icon.png +0 -0
  120. package/stat/assets/images/book_up_icon.png +0 -0
  121. package/stat/assets/images/books_graphic.svg +177 -0
  122. package/stat/assets/images/booksplit.png +0 -0
  123. package/stat/assets/images/control_pause_icon.png +0 -0
  124. package/stat/assets/images/control_play_icon.png +0 -0
  125. package/stat/assets/images/embed_icon.png +0 -0
  126. package/stat/assets/images/icon-home-ia.png +0 -0
  127. package/stat/assets/images/icon_OL-logo-xs.png +0 -0
  128. package/stat/assets/images/icon_alert-xs.png +0 -0
  129. package/stat/assets/images/icon_book.svg +12 -0
  130. package/stat/assets/images/icon_bookmark.svg +12 -0
  131. package/stat/assets/images/icon_close-pop.png +0 -0
  132. package/stat/assets/images/icon_download.png +0 -0
  133. package/stat/assets/images/icon_gear.svg +14 -0
  134. package/stat/assets/images/icon_hamburger.svg +20 -0
  135. package/stat/assets/images/icon_home.png +0 -0
  136. package/stat/assets/images/icon_home.svg +21 -0
  137. package/stat/assets/images/icon_home_ia.png +0 -0
  138. package/stat/assets/images/icon_indicator.png +0 -0
  139. package/stat/assets/images/icon_info.svg +11 -0
  140. package/stat/assets/images/icon_one_page.svg +8 -0
  141. package/stat/assets/images/icon_pause.svg +1 -0
  142. package/stat/assets/images/icon_play.svg +1 -0
  143. package/stat/assets/images/icon_playback-rate.svg +15 -0
  144. package/stat/assets/images/icon_return.png +0 -0
  145. package/stat/assets/images/icon_search_button.svg +8 -0
  146. package/stat/assets/images/icon_share.svg +9 -0
  147. package/stat/assets/images/icon_skip-ahead.svg +6 -0
  148. package/stat/assets/images/icon_skip-back.svg +13 -0
  149. package/stat/assets/images/icon_speaker.svg +18 -0
  150. package/stat/assets/images/icon_speaker_open.svg +10 -0
  151. package/stat/assets/images/icon_thumbnails.svg +12 -0
  152. package/stat/assets/images/icon_toc.svg +5 -0
  153. package/stat/assets/images/icon_two_pages.svg +9 -0
  154. package/stat/assets/images/icon_zoomer.png +0 -0
  155. package/stat/assets/images/loading.gif +0 -0
  156. package/stat/assets/images/logo_icon.png +0 -0
  157. package/stat/assets/images/marker_chap-off.png +0 -0
  158. package/stat/assets/images/marker_chap-off.svg +11 -0
  159. package/stat/assets/images/marker_chap-off_ia.png +0 -0
  160. package/stat/assets/images/marker_chap-on.png +0 -0
  161. package/stat/assets/images/marker_chap-on.svg +11 -0
  162. package/stat/assets/images/marker_srch-on.svg +11 -0
  163. package/stat/assets/images/marker_srchchap-off.png +0 -0
  164. package/stat/assets/images/marker_srchchap-on.png +0 -0
  165. package/stat/assets/images/nav_control-dn.png +0 -0
  166. package/stat/assets/images/nav_control-dn_ia.png +0 -0
  167. package/stat/assets/images/nav_control-up.png +0 -0
  168. package/stat/assets/images/nav_control-up_ia.png +0 -0
  169. package/stat/assets/images/nav_control.png +0 -0
  170. package/stat/assets/images/one_page_mode_icon.png +0 -0
  171. package/stat/assets/images/paper-badge.png +0 -0
  172. package/stat/assets/images/print_icon.png +0 -0
  173. package/stat/assets/images/progressbar.gif +0 -0
  174. package/stat/assets/images/right_edges.png +0 -0
  175. package/stat/assets/images/slider.png +0 -0
  176. package/stat/assets/images/slider_ia.png +0 -0
  177. package/stat/assets/images/thumbnail_mode_icon.png +0 -0
  178. package/stat/assets/images/transparent.png +0 -0
  179. package/stat/assets/images/two_page_mode_icon.png +0 -0
  180. package/stat/assets/images/zoom_in_icon.png +0 -0
  181. package/stat/assets/images/zoom_out_icon.png +0 -0
  182. package/stat/css/BookReader.scss +89 -0
  183. package/stat/css/_BRBookmarks.scss +29 -0
  184. package/stat/css/_BRComponent.scss +13 -0
  185. package/stat/css/_BRfloat.scss +197 -0
  186. package/stat/css/_BRicon.scss +48 -0
  187. package/stat/css/_BRmain.scss +251 -0
  188. package/stat/css/_BRnav.scss +359 -0
  189. package/stat/css/_BRpages.scss +139 -0
  190. package/stat/css/_BRsearch.scss +226 -0
  191. package/stat/css/_BRtoolbar.scss +84 -0
  192. package/stat/css/_BRvendor.scss +5 -0
  193. package/stat/css/_MobileNav.scss +194 -0
  194. package/stat/css/_TextSelection.scss +32 -0
  195. package/stat/css/_colorbox.scss +52 -0
  196. package/stat/css/_controls.scss +253 -0
  197. package/stat/css/_icons.scss +121 -0
  198. package/stat/jquery-wrapper.js +4 -0
  199. package/stat/plugins/plugin.archive_analytics.js +86 -0
  200. package/stat/plugins/plugin.autoplay.js +129 -0
  201. package/stat/plugins/plugin.chapters.js +248 -0
  202. package/stat/plugins/plugin.iframe.js +48 -0
  203. package/stat/plugins/plugin.mobile_nav.js +288 -0
  204. package/stat/plugins/plugin.resume.js +68 -0
  205. package/stat/plugins/plugin.text_selection.js +291 -0
  206. package/{src → stat}/plugins/plugin.url.js +0 -0
  207. package/stat/plugins/plugin.vendor-fullscreen.js +247 -0
  208. package/stat/plugins/search/plugin.search.js +439 -0
  209. package/stat/plugins/search/view.js +439 -0
  210. package/stat/plugins/tts/AbstractTTSEngine.js +249 -0
  211. package/stat/plugins/tts/FestivalTTSEngine.js +169 -0
  212. package/stat/plugins/tts/PageChunk.js +107 -0
  213. package/stat/plugins/tts/PageChunkIterator.js +163 -0
  214. package/stat/plugins/tts/WebTTSEngine.js +357 -0
  215. package/stat/plugins/tts/plugin.tts.js +357 -0
  216. package/stat/plugins/tts/tooltip_dict.js +15 -0
  217. package/stat/plugins/tts/utils.js +91 -0
  218. package/stat/util/browserSniffing.js +30 -0
  219. package/stat/util/debouncer.js +26 -0
  220. package/stat/util/docCookies.js +67 -0
  221. package/stat/util/strings.js +34 -0
  222. package/tests/e2e/viewmode.test.js +30 -30
  223. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +64 -52
  224. package/tests/jest/BookReader.test.js +1 -1
  225. package/tests/jest/plugins/url/UrlPlugin.test.js +175 -0
  226. package/tests/jest/plugins/{plugin.url.test.js → url/plugin.url.test.js} +3 -2
  227. package/tests/karma/BookNavigator/book-navigator.test.js +413 -108
  228. package/tests/karma/BookNavigator/bookmarks/bookmark-button.test.js +44 -0
  229. package/tests/karma/BookNavigator/downloads/downloads-provider.test.js +6 -3
  230. package/tests/karma/BookNavigator/search/search-provider.test.js +106 -6
  231. package/tests/karma/BookNavigator/search/search-results.test.js +0 -2
  232. package/tests/karma/BookNavigator/sharing/sharing-provider.test.js +29 -20
  233. package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +46 -22
  234. package/webpack.config.js +1 -1
  235. package/src/BookNavigator/assets/book-loader.js +0 -27
  236. 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,11 +65,15 @@ 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
- expect(provider.sortOrderBy).to.equal("orig_sort");
76
+ expect(provider.sortOrderBy).to.equal("default");
68
77
 
69
78
  provider.sortVolumes("title_asc");
70
79
  expect(provider.sortOrderBy).to.equal("title_asc");
@@ -74,23 +83,27 @@ describe('Volumes Provider', () => {
74
83
  expect(provider.sortOrderBy).to.equal("title_desc");
75
84
  expect(provider.sortButton.getHTML()).includes("sort-by desc-icon");
76
85
 
77
- provider.sortVolumes("orig_sort");
78
- expect(provider.sortOrderBy).to.equal("orig_sort");
86
+ provider.sortVolumes("default");
87
+ expect(provider.sortOrderBy).to.equal("default");
79
88
  expect(provider.sortButton.getHTML()).includes("sort-by neutral-icon");
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);
89
102
  const origSortTitles = files.map(item => item.title);
90
103
 
91
- provider.sortVolumes("orig_sort");
104
+ provider.sortVolumes("default");
92
105
 
93
- expect(provider.sortOrderBy).to.equal("orig_sort");
106
+ expect(provider.sortOrderBy).to.equal("default");
94
107
  expect(provider.actionButton).to.exist;
95
108
 
96
109
  const providerFileTitles = provider.viewableFiles.map(item => item.title);
@@ -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);
165
+ const provider = new volumesProvider({
166
+ baseHost,
167
+ bookreader: brOptions,
168
+ onProviderChange
169
+ });
170
+ provider.sortOrderBy = 'default';
146
171
 
147
- provider.sortOrderBy = 'orig_sort';
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
@@ -51,7 +51,7 @@ module.exports = [
51
51
  'plugins/plugin.search.js': { import: './src/plugins/search/plugin.search.js', dependOn: 'BookReader.js' },
52
52
  'plugins/plugin.text_selection.js': { import: './src/plugins/plugin.text_selection.js', dependOn: 'BookReader.js' },
53
53
  'plugins/plugin.tts.js': { import: './src/plugins/tts/plugin.tts.js', dependOn: 'BookReader.js' },
54
- 'plugins/plugin.url.js': { import: './src/plugins/plugin.url.js', dependOn: 'BookReader.js' },
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
56
  'bookreader-component-bundle.js': { import: './src/BookReaderComponent/BookReaderComponent.js', dependOn: 'BookReader.js' }
57
57
  },
@@ -1,27 +0,0 @@
1
- import { html } from 'lit-element';
2
-
3
- export default html`
4
- <svg
5
- height="100"
6
- viewBox="0 0 100 100"
7
- width="100"
8
- xmlns="http://www.w3.org/2000/svg"
9
- aria-labelledby="bookreader-loading"
10
- >
11
- <title id="bookreader-loading">Currently loading viewer.</title>
12
- <desc>Please wait while we load book reader.</desc>
13
- <g fill="#333" fill-rule="evenodd" class="book-icon">
14
- <g transform="matrix(1 0 0 -1 28 67.362264)">
15
- <path d="m44.71698 31.6981124v-29.99320678s-18.0956599.30735848-18.6322637-.7171698c-.0633962-.12226414-1.890566-.59207545-2.9745282-.59207545-1.3228302 0-3.5122641 0-4.1286791.74547168-.9707547 1.17452827-18.82811278.71660375-18.82811278.71660375v30.040754l1.83849052.7867924.29094339-28.48188608s15.94981097.15339622 17.09094297-1.10716978c.8145283-.90056602 4.997547-.91641507 5.3450942-.3526415.9611321 1.55716977 14.7101883 1.31716978 17.6077354 1.45981128l.3266038 28.22830118z"/>
16
- <path d="m40.1129424 33.5957539h-12.8337733c-1.8690565 0-3.1098112-.7545283-3.9299999-1.6279245v-26.70452764l1.2362264-.00792453c.4584906.72962262 3.0922641 1.39415091 3.0922641 1.39415091h10.1298111s1.0381131.01754717 1.5141509.47377357c.5643396.54056602.7913207 1.36981129.7913207 1.36981129z"/>
17
- <path d="m17.3354713 33.5957539h-12.8337733v-25.37660316s0-.75283017.49358489-1.14113205c.52867924-.41433961 1.3415094-.42849055 1.3415094-.42849055h10.59905631s2.2075471-.52698112 3.0928301-1.39415091l1.2.00792453v26.74245214c-.8201886.8581132-2.0530188 1.59-3.8932074 1.59"/>
18
- </g>
19
- <path
20
- class="ring"
21
- d="m17.8618849 11.6970233c18.5864635-15.59603144 45.6875867-15.59603102 64.2740497.000001 1.9271446 1.6170806 2.1785128 4.4902567.5614466 6.4174186-1.6170661 1.9271618-4.4902166 2.1785323-6.4173612.5614517-15.1996922-12.75416882-37.3625282-12.75416916-52.5622206-.000001-15.19969387 12.7541707-19.04823077 34.5805019-9.1273354 51.7641499 9.9208955 17.183646 30.7471499 24.7638499 49.3923323 17.9774983 18.6451823-6.7863521 29.7266014-25.9801026 26.2811129-45.5206248-.436848-2.4775114 1.2174186-4.8400696 3.6949079-5.2769215 2.4774893-.4368518 4.8400264 1.2174296 5.2768744 3.694941 4.2132065 23.8945096-9.3373563 47.3649806-32.137028 55.6634567-22.799672 8.2984758-48.2663986-.9707372-60.39785211-21.9832155-12.1314534-21.012481-7.42539173-47.7021198 11.16107351-63.2981544z"
22
- fill-rule="nonzero"
23
- />
24
- </g>
25
- </svg>
26
- `;
27
-