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