@internetarchive/bookreader 5.0.0-26 → 5.0.0-29

Sign up to get free protection for your applications and to get access to all the features.
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
-