@internetarchive/bookreader 5.0.0-67 → 5.0.0-68
Sign up to get free protection for your applications and to get access to all the features.
- package/BookReader/BookReader.css +53 -891
- package/BookReader/BookReader.js +1 -1
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/ia-bookreader-bundle.js +50 -48
- package/BookReader/ia-bookreader-bundle.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -1
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +1 -1
- package/BookReader/plugins/plugin.chapters.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +1 -1
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +1 -1
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.tts.js +1 -1
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReaderDemo/BookReaderDemo.css +0 -18
- package/BookReaderDemo/BookReaderJSAdvanced.js +0 -3
- package/BookReaderDemo/demo-autoplay.html +0 -2
- package/BookReaderDemo/demo-fullscreen-mobile.html +1 -4
- package/BookReaderDemo/demo-fullscreen.html +0 -3
- package/BookReaderDemo/demo-iiif.js +0 -1
- package/BookReaderDemo/demo-vendor-fullscreen.html +0 -3
- package/BookReaderDemo/immersion-1up.html +0 -1
- package/BookReaderDemo/immersion-mode.html +0 -3
- package/CHANGELOG.md +5 -0
- package/package.json +7 -8
- package/src/BookReader/BookModel.js +0 -12
- package/src/BookReader/Mode1Up.js +1 -1
- package/src/BookReader/Mode1UpLit.js +1 -1
- package/src/BookReader/events.js +0 -1
- package/src/BookReader.js +1 -2
- package/src/css/BookReader.scss +1 -5
- package/src/css/_BRnav.scss +0 -8
- package/src/plugins/plugin.autoplay.js +1 -2
- package/src/plugins/search/plugin.search.js +0 -3
- package/tests/e2e/base.test.js +3 -11
- package/tests/e2e/helpers/base.js +26 -26
- package/tests/e2e/helpers/rightToLeft.js +4 -4
- package/tests/e2e/helpers/{desktopSearch.js → search.js} +19 -19
- package/tests/e2e/models/Navigation.js +16 -42
- package/tests/e2e/viewmode.test.js +3 -3
- package/tests/jest/plugins/plugin.chapters.test.js +0 -1
- package/tests/jest/plugins/search/plugin.search.view.test.js +0 -1
- package/webpack.config.js +0 -1
- package/BookReader/plugins/plugin.mobile_nav.js +0 -2
- package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
- package/src/css/_MobileNav.scss +0 -168
- package/src/plugins/plugin.mobile_nav.js +0 -288
- package/tests/e2e/helpers/mobileSearch.js +0 -85
- package/tests/jest/plugins/plugin.mobile_nav.test.js +0 -66
@@ -36,21 +36,3 @@ ia-bookreader{
|
|
36
36
|
overflow: hidden;
|
37
37
|
margin: 0 auto;
|
38
38
|
}
|
39
|
-
|
40
|
-
@media only screen and (max-width: 799px) {
|
41
|
-
body.BRbodyMobileNavEnabled {
|
42
|
-
margin: 0;
|
43
|
-
width: 100%;
|
44
|
-
overflow: hidden;
|
45
|
-
}
|
46
|
-
.BRbodyMobileNavEnabled .BookReader {
|
47
|
-
top: 0;
|
48
|
-
bottom: 0;
|
49
|
-
left: 0;
|
50
|
-
right: 0;
|
51
|
-
position: absolute;
|
52
|
-
height: 100%;
|
53
|
-
margin: 0;
|
54
|
-
width: 100%;
|
55
|
-
}
|
56
|
-
}
|
@@ -92,9 +92,6 @@ var options = {
|
|
92
92
|
{label: 'Author', value: 'Internet Archive'},
|
93
93
|
{label: 'Demo Info', value: 'This demo shows how one could use BookReader with their own content.'},
|
94
94
|
],
|
95
|
-
// This toggles the mobile drawer (not shown in 'embed' mode)
|
96
|
-
enableMobileNav: false,
|
97
|
-
mobileNavTitle: 'BookReader demo',
|
98
95
|
|
99
96
|
// Override the path used to find UI images
|
100
97
|
imagesBaseURL: '../BookReader/images/',
|
@@ -15,8 +15,6 @@
|
|
15
15
|
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
|
16
16
|
<script src="../BookReader/BookReader.js"></script>
|
17
17
|
|
18
|
-
<!-- Mobile nav plugin -->
|
19
|
-
<script src="../BookReader/plugins/plugin.mobile_nav.js"></script>
|
20
18
|
<!-- Autoplay plugin -->
|
21
19
|
<script src="../BookReader/plugins/plugin.autoplay.js"></script>
|
22
20
|
|
@@ -15,9 +15,6 @@
|
|
15
15
|
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
|
16
16
|
<script src="../BookReader/BookReader.js"></script>
|
17
17
|
|
18
|
-
<!-- Mobile nav plugin -->
|
19
|
-
<script src="../BookReader/plugins/plugin.mobile_nav.js"></script>
|
20
|
-
|
21
18
|
<!-- URL-changing plugin -->
|
22
19
|
<script src="../BookReader/plugins/plugin.url.js"></script>
|
23
20
|
|
@@ -31,7 +28,7 @@ html, body { width: 100%; height: 100%; margin: 0; padding: 0; background: grey;
|
|
31
28
|
<div id="BookReader"></div>
|
32
29
|
<script type="text/javascript" src="BookReaderJSSimple.js"></script>
|
33
30
|
<script>
|
34
|
-
instantiateBookReader('#BookReader'
|
31
|
+
instantiateBookReader('#BookReader');
|
35
32
|
</script>
|
36
33
|
</body>
|
37
34
|
</html>
|
@@ -15,9 +15,6 @@
|
|
15
15
|
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
|
16
16
|
<script src="../BookReader/BookReader.js"></script>
|
17
17
|
|
18
|
-
<!-- Mobile nav plugin -->
|
19
|
-
<script src="../BookReader/plugins/plugin.mobile_nav.js"></script>
|
20
|
-
|
21
18
|
<!-- URL-changing plugin -->
|
22
19
|
<script src="../BookReader/plugins/plugin.url.js"></script>
|
23
20
|
|
@@ -15,9 +15,6 @@
|
|
15
15
|
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
|
16
16
|
<script src="../BookReader/BookReader.js"></script>
|
17
17
|
|
18
|
-
<!-- Mobile nav plugin -->
|
19
|
-
<script src="../BookReader/plugins/plugin.mobile_nav.js"></script>
|
20
|
-
|
21
18
|
<!-- URL-changing plugin -->
|
22
19
|
<script src="../BookReader/plugins/plugin.url.js"></script>
|
23
20
|
|
@@ -14,7 +14,6 @@
|
|
14
14
|
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
|
15
15
|
|
16
16
|
<!-- plugins needed for archive.org, in same order as archive.org -->
|
17
|
-
<script src="../BookReader/plugins/plugin.mobile_nav.js"></script>
|
18
17
|
<script src="../BookReader/plugins/plugin.search.js"></script>
|
19
18
|
<script src="../BookReader/plugins/plugin.chapters.js"></script>
|
20
19
|
<script src="../BookReader/plugins/plugin.tts.js"></script>
|
@@ -15,9 +15,6 @@
|
|
15
15
|
<link rel="stylesheet" href="../BookReader/BookReader.css"/>
|
16
16
|
<script src="../BookReader/BookReader.js"></script>
|
17
17
|
|
18
|
-
<!-- Mobile nav plugin -->
|
19
|
-
<script src="../BookReader/plugins/plugin.mobile_nav.js"></script>
|
20
|
-
|
21
18
|
<!-- URL-changing plugin -->
|
22
19
|
<script src="../BookReader/plugins/plugin.url.js"></script>
|
23
20
|
|
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 5.0.0-68
|
2
|
+
- Fix: 1up zoom wrong on start/entering full screen @cdrini
|
3
|
+
- Dev: BREAKING: delete `plugin.mobile_nav.js` no longer used @cdrini
|
4
|
+
- Dev: Move page 1 label correction logic to BookReaderJSIA @cdrini
|
5
|
+
|
1
6
|
# 5.0.0-67
|
2
7
|
- Feature: Re-enable chapters plugin + migrate off mmenu @cdrini
|
3
8
|
- Fix: Disable tooltips on touchscreens + fix on IA @cdrini
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@internetarchive/bookreader",
|
3
|
-
"version": "5.0.0-
|
3
|
+
"version": "5.0.0-68",
|
4
4
|
"description": "The Internet Archive BookReader.",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -26,7 +26,7 @@
|
|
26
26
|
"private": false,
|
27
27
|
"dependencies": {
|
28
28
|
"@internetarchive/ia-activity-indicator": "^0.0.4",
|
29
|
-
"@internetarchive/ia-item-navigator": "^1.
|
29
|
+
"@internetarchive/ia-item-navigator": "^1.1.1",
|
30
30
|
"@internetarchive/ia-sharing-options": "^1.0.2",
|
31
31
|
"@internetarchive/icon-bookmark": "^1.3.4",
|
32
32
|
"@internetarchive/icon-dl": "^1.3.4",
|
@@ -48,11 +48,11 @@
|
|
48
48
|
"@babel/plugin-proposal-decorators": "7.22.7",
|
49
49
|
"@babel/preset-env": "7.22.9",
|
50
50
|
"@open-wc/testing-helpers": "^2.3.0",
|
51
|
-
"@types/jest": "29.5.
|
51
|
+
"@types/jest": "29.5.4",
|
52
52
|
"@webcomponents/webcomponentsjs": "^2.6.0",
|
53
53
|
"babel-loader": "9.1.3",
|
54
54
|
"codecov": "^3.8.3",
|
55
|
-
"concurrently": "7.
|
55
|
+
"concurrently": "7.6.0",
|
56
56
|
"core-js": "3.27.1",
|
57
57
|
"cpx2": "4.2.3",
|
58
58
|
"eslint": "^7.32.0",
|
@@ -61,16 +61,15 @@
|
|
61
61
|
"http-server": "14.1.1",
|
62
62
|
"interactjs": "^1.10.18",
|
63
63
|
"iso-language-codes": "1.1.0",
|
64
|
-
"jest": "29.6.
|
65
|
-
"jest-environment-jsdom": "^29.4
|
64
|
+
"jest": "29.6.4",
|
65
|
+
"jest-environment-jsdom": "^29.6.4",
|
66
66
|
"jquery": "3.6.1",
|
67
67
|
"jquery-colorbox": "1.6.4",
|
68
68
|
"jquery-ui": "1.12.1",
|
69
69
|
"jquery-ui-touch-punch": "0.2.3",
|
70
70
|
"jquery.browser": "0.1.0",
|
71
|
-
"jquery.mmenu": "5.6.5",
|
72
71
|
"live-server": "1.2.2",
|
73
|
-
"node-fetch": "3.2
|
72
|
+
"node-fetch": "3.3.2",
|
74
73
|
"regenerator-runtime": "0.13.11",
|
75
74
|
"sass": "1.64.2",
|
76
75
|
"sinon": "^15.1.0",
|
@@ -30,18 +30,6 @@ export class BookModel {
|
|
30
30
|
this._medianPageSize = null;
|
31
31
|
/** @type {[PageData[], number]} */
|
32
32
|
this._getDataFlattenedCached = null;
|
33
|
-
|
34
|
-
// Heal missing first page number assertion
|
35
|
-
const pages = this._getDataFlattened();
|
36
|
-
const firstNumberedPageIndex = pages.findIndex(page => page.pageNum != undefined && !isNaN(parseFloat(page.pageNum)));
|
37
|
-
if (firstNumberedPageIndex != -1 && firstNumberedPageIndex > 0) {
|
38
|
-
const pageNum = parseFloat(pages[firstNumberedPageIndex].pageNum);
|
39
|
-
if (!isNaN(pageNum)) {
|
40
|
-
// Note: Since the pages are always sorted in increasing pageNum/index
|
41
|
-
// order, this will work for both left-to-right and right-to-left books
|
42
|
-
pages[firstNumberedPageIndex - 1].pageNum = pageNum - 1;
|
43
|
-
}
|
44
|
-
}
|
45
33
|
}
|
46
34
|
|
47
35
|
/** Get median width/height of page in inches. Memoized for performance. */
|
@@ -77,7 +77,7 @@ export class Mode1Up {
|
|
77
77
|
jumpToIndex(index, pageX, pageY, noAnimate) {
|
78
78
|
// Only smooth for small distances
|
79
79
|
const distance = Math.abs(this.br.currentIndex() - index);
|
80
|
-
const smooth = !noAnimate && distance <= 4;
|
80
|
+
const smooth = !noAnimate && distance > 0 && distance <= 4;
|
81
81
|
this.mode1UpLit.jumpToIndex(index, { smooth });
|
82
82
|
}
|
83
83
|
|
@@ -350,7 +350,7 @@ export class Mode1UpLit extends LitElement {
|
|
350
350
|
*/
|
351
351
|
computeDefaultScale(page) {
|
352
352
|
// Default to real size if it fits, otherwise default to full width
|
353
|
-
const containerWidthIn = this.coordSpace.
|
353
|
+
const containerWidthIn = this.coordSpace.renderedPixelsToWorldUnits(this.clientWidth);
|
354
354
|
return Math.min(1, containerWidthIn / (page.widthInches + 2 * this.SPACING_IN)) || 1;
|
355
355
|
}
|
356
356
|
|
package/src/BookReader/events.js
CHANGED
package/src/BookReader.js
CHANGED
@@ -1355,9 +1355,8 @@ exposeOverrideableMethod(Toolbar, '_components.toolbar', 'getToolBarHeight');
|
|
1355
1355
|
*/
|
1356
1356
|
BookReader.prototype.bindNavigationHandlers = function() {
|
1357
1357
|
const self = this;
|
1358
|
+
const jIcons = this.$('.BRicon');
|
1358
1359
|
|
1359
|
-
// Note the mobile plugin attaches itself to body, so we need to select outside
|
1360
|
-
const jIcons = this.$('.BRicon').add('.BRmobileMenu .BRicon');
|
1361
1360
|
// Map of jIcon class -> click handler
|
1362
1361
|
const navigationControls = {
|
1363
1362
|
book_left: () => {
|
package/src/css/BookReader.scss
CHANGED
@@ -7,7 +7,6 @@ $brFontFamily: "Helvetica Neue", Arial, Verdana, sans-serif;
|
|
7
7
|
$brColorThemeblue: #0074D1;
|
8
8
|
$brColorThemeBlue2: #4990E2;
|
9
9
|
$brColorThemeBlue3: rgb(74,144,226);
|
10
|
-
$brColorThemeBlueDarker: rgb(36,94,131);
|
11
10
|
$brColorDarkGreyBg: #333;
|
12
11
|
$brColorMainBg: black;
|
13
12
|
|
@@ -44,13 +43,11 @@ $mediumBlue: #428bca;
|
|
44
43
|
$lightBlue: #adaedc;
|
45
44
|
$controlsText: $white;
|
46
45
|
$controlsBG: $gray20;
|
47
|
-
$iconStroke: $white;
|
48
46
|
$tooltipBG: $gray20;
|
49
47
|
$activeButtonBG: $white;
|
50
48
|
$controlsBorder: $gray13;
|
51
49
|
$trackColor: $gray40;
|
52
50
|
$trackFillColor: $gray80;
|
53
|
-
$mobileMenuBG: #151515;
|
54
51
|
|
55
52
|
$tooltipBG: $gray20;
|
56
53
|
$tooltipText: $white;
|
@@ -70,7 +67,7 @@ $searchResultBG: $darkBlue;
|
|
70
67
|
}
|
71
68
|
|
72
69
|
// These are the main root elements in BookReader
|
73
|
-
$brScope: ".BookReader, .
|
70
|
+
$brScope: ".BookReader, .BRfloat";
|
74
71
|
|
75
72
|
@import 'colorbox';
|
76
73
|
@import 'BRmain';
|
@@ -80,7 +77,6 @@ $brScope: ".BookReader, .BRmobileMenu, .BRfloat";
|
|
80
77
|
@import 'BRnav';
|
81
78
|
@import 'BRtoolbar';
|
82
79
|
@import 'BRsearch';
|
83
|
-
@import 'MobileNav';
|
84
80
|
@import 'BRvendor';
|
85
81
|
@import 'icons';
|
86
82
|
@import 'controls';
|
package/src/css/_BRnav.scss
CHANGED
@@ -130,14 +130,6 @@
|
|
130
130
|
// Default
|
131
131
|
@include brNavDark;
|
132
132
|
|
133
|
-
/* Full mobile styles */
|
134
|
-
@media (max-width: $brBreakPointMobile) {
|
135
|
-
.BRbodyMobileNavEnabled &,
|
136
|
-
.BRbodyMobileNavEnabledFullscreen.BRfullscreenActive & {
|
137
|
-
@include brNavLight;
|
138
|
-
}
|
139
|
-
}
|
140
|
-
|
141
133
|
&--controls {
|
142
134
|
display: flex;
|
143
135
|
}
|
@@ -41,8 +41,7 @@ BookReader.prototype.bindNavigationHandlers = (function(super_) {
|
|
41
41
|
|
42
42
|
if (!this.options.enableAutoPlayPlugin) return;
|
43
43
|
|
44
|
-
|
45
|
-
const jIcons = this.$('.BRicon').add('.BRmobileMenu .BRicon');
|
44
|
+
const jIcons = this.$('.BRicon');
|
46
45
|
|
47
46
|
jIcons.filter('.play').click(() => {
|
48
47
|
this.autoToggle();
|
@@ -2,9 +2,6 @@
|
|
2
2
|
/* global BookReader */
|
3
3
|
/**
|
4
4
|
* Plugin for Archive.org book search
|
5
|
-
* NOTE: This script must be loaded AFTER `plugin.mobile_nav.js`
|
6
|
-
* as it mutates mobile nav drawer
|
7
|
-
*
|
8
5
|
* Events fired at various points throughout search processing are published
|
9
6
|
* on the document DOM element. These can be subscribed to using jQuery's event
|
10
7
|
* binding method `$.fn.on`. All of the events are prefixed with a BookReader
|
package/tests/e2e/base.test.js
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
import { runBaseTests } from './helpers/base';
|
2
2
|
import BookReader from './models/BookReader';
|
3
|
-
import {
|
4
|
-
// import { runMobileSearchTests } from './helpers/mobileSearch';
|
3
|
+
import { runSearchTests } from './helpers/search';
|
5
4
|
import params from './helpers/params';
|
6
5
|
|
7
6
|
const ocaids = params.ocaids || [
|
@@ -22,14 +21,7 @@ ocaids.forEach(ocaid => {
|
|
22
21
|
runBaseTests(new BookReader());
|
23
22
|
|
24
23
|
|
25
|
-
fixture `
|
24
|
+
fixture `Search Tests for: ${ocaid}`
|
26
25
|
.page `${url}`;
|
27
|
-
|
28
|
-
|
29
|
-
// Todo: deprecated, will remove once mmenu is removed.
|
30
|
-
// fixture `Mobile Search Tests for: ${ocaid}`
|
31
|
-
// .page `${url}`
|
32
|
-
// runMobileSearchTests(new BookReader());
|
33
|
-
|
34
|
-
|
26
|
+
runSearchTests(new BookReader());
|
35
27
|
});
|
@@ -53,14 +53,14 @@ export function runBaseTests (br) {
|
|
53
53
|
test('nav menu displays properly', async t => {
|
54
54
|
const { nav } = br;
|
55
55
|
|
56
|
-
await t.expect(nav.
|
57
|
-
await t.expect(nav.
|
58
|
-
await t.expect(nav.
|
59
|
-
await t.expect(nav.
|
60
|
-
await t.expect(nav.
|
61
|
-
await t.expect(nav.
|
62
|
-
await t.expect(nav.
|
63
|
-
await t.expect(nav.
|
56
|
+
await t.expect(nav.goLeft.visible).ok();
|
57
|
+
await t.expect(nav.goRight.visible).ok();
|
58
|
+
await t.expect(nav.mode1Up.visible).ok();
|
59
|
+
await t.expect(nav.mode2Up.visible).ok();
|
60
|
+
await t.expect(nav.modeThumb.visible).ok();
|
61
|
+
await t.expect(nav.zoomIn.visible).ok();
|
62
|
+
await t.expect(nav.zoomOut.visible).ok();
|
63
|
+
await t.expect(nav.fullScreen.visible).ok();
|
64
64
|
});
|
65
65
|
|
66
66
|
test("Canonical URL has no initial parameters", async t => {
|
@@ -87,7 +87,7 @@ export function runBaseTests (br) {
|
|
87
87
|
const initialUrl = await getUrl();
|
88
88
|
|
89
89
|
// Set Cookie by page navigation, wait for cookie
|
90
|
-
await t.click(nav.
|
90
|
+
await t.click(nav.goNext);
|
91
91
|
await t.wait(PAGE_FLIP_WAIT_TIME);
|
92
92
|
|
93
93
|
// reload canonical URL, wait for URL change
|
@@ -109,9 +109,9 @@ export function runBaseTests (br) {
|
|
109
109
|
const { nav, BRcontainer} = br;
|
110
110
|
|
111
111
|
// Go to next page, so we can go previous if at front cover
|
112
|
-
await t.click(nav.
|
112
|
+
await t.click(nav.goNext);
|
113
113
|
await t.wait(PAGE_FLIP_WAIT_TIME);
|
114
|
-
await t.click(nav.
|
114
|
+
await t.click(nav.goNext);
|
115
115
|
await t.wait(PAGE_FLIP_WAIT_TIME);
|
116
116
|
|
117
117
|
const onLoadBrState = BRcontainer.child(0);
|
@@ -119,7 +119,7 @@ export function runBaseTests (br) {
|
|
119
119
|
const origImg1Src = await initialImages.nth(0).getAttribute('src');
|
120
120
|
const origImg2Src = await initialImages.nth(-1).getAttribute('src');
|
121
121
|
|
122
|
-
await t.click(nav.
|
122
|
+
await t.click(nav.goPrev);
|
123
123
|
await t.wait(PAGE_FLIP_WAIT_TIME);
|
124
124
|
|
125
125
|
const nextBrState = Selector('.BRcontainer').child(0);
|
@@ -144,7 +144,7 @@ export function runBaseTests (br) {
|
|
144
144
|
// Note: this will fail on a R to L book if at front cover
|
145
145
|
const { nav, BRcontainer} = br;
|
146
146
|
// Flip away from cover
|
147
|
-
await t.click(nav.
|
147
|
+
await t.click(nav.goNext);
|
148
148
|
await t.wait(PAGE_FLIP_WAIT_TIME);
|
149
149
|
|
150
150
|
const onLoadBrState = BRcontainer.child(0);
|
@@ -152,7 +152,7 @@ export function runBaseTests (br) {
|
|
152
152
|
const origImg1Src = await initialImages.nth(0).getAttribute('src');
|
153
153
|
const origImg2Src = await initialImages.nth(-1).getAttribute('src');
|
154
154
|
|
155
|
-
await t.click(nav.
|
155
|
+
await t.click(nav.goNext);
|
156
156
|
await t.wait(PAGE_FLIP_WAIT_TIME);
|
157
157
|
|
158
158
|
const nextBrState = Selector('.BRcontainer').child(0);
|
@@ -173,28 +173,28 @@ export function runBaseTests (br) {
|
|
173
173
|
test('Clicking `page flip buttons` updates location', async t => {
|
174
174
|
const { nav } = br;
|
175
175
|
// Page navigation creates params
|
176
|
-
await t.click(nav.
|
176
|
+
await t.click(nav.goNext);
|
177
177
|
await t.expect(isPageInUrl()).eql(true);
|
178
178
|
await t.expect(isModeInUrl('2up')).eql(true);
|
179
179
|
|
180
|
-
await t.click(nav.
|
180
|
+
await t.click(nav.goPrev);
|
181
181
|
await t.expect(isPageInUrl()).eql(true);
|
182
182
|
await t.expect(isModeInUrl('2up')).eql(true);
|
183
183
|
});
|
184
184
|
|
185
185
|
test('Clicking `2 page view` brings up cur page + caching', async t => {
|
186
186
|
const { nav } = br;
|
187
|
-
await t.click(nav.
|
187
|
+
await t.click(nav.mode2Up);
|
188
188
|
await t.expect(Selector('.BRpagecontainer.BRpage-visible').count).eql(1);
|
189
189
|
await t.expect(Selector('.BRpagecontainer').count).eql(3);
|
190
190
|
});
|
191
191
|
|
192
192
|
test('Clicking `1 page view` brings up 1 at a time', async t => {
|
193
193
|
const { nav } = br;
|
194
|
-
await t.click(nav.
|
194
|
+
await t.click(nav.mode1Up);
|
195
195
|
|
196
196
|
// Flip away from cover
|
197
|
-
await t.click(nav.
|
197
|
+
await t.click(nav.goNext);
|
198
198
|
await t.wait(PAGE_FLIP_WAIT_TIME);
|
199
199
|
|
200
200
|
// we usually pre-fetch the page in question & the 2 after it
|
@@ -203,7 +203,7 @@ export function runBaseTests (br) {
|
|
203
203
|
|
204
204
|
test('Clicking `thumbnail view` brings up all of the page thumbnails', async t => {
|
205
205
|
const { nav } = br;
|
206
|
-
await t.click(nav.
|
206
|
+
await t.click(nav.modeThumb);
|
207
207
|
await t.expect(Selector('.BRpagecontainer').count).gte(3);
|
208
208
|
});
|
209
209
|
|
@@ -213,12 +213,12 @@ export function runBaseTests (br) {
|
|
213
213
|
|
214
214
|
await t.expect(br.BRcontainer.visible).ok();
|
215
215
|
await t.expect(page.visible).ok();
|
216
|
-
await t.expect(nav.
|
216
|
+
await t.expect(nav.zoomOut.visible).ok();
|
217
217
|
|
218
218
|
const initialBookHeight = await page.getBoundingClientRectProperty('height');
|
219
219
|
const initialBookWidth = await page.getBoundingClientRectProperty('width');
|
220
220
|
|
221
|
-
await t.click(nav.
|
221
|
+
await t.click(nav.zoomOut);
|
222
222
|
|
223
223
|
const zoomOutBookHeight = await page.getBoundingClientRectProperty('height');
|
224
224
|
const zoomOutBookWidth = await page.getBoundingClientRectProperty('width');
|
@@ -233,12 +233,12 @@ export function runBaseTests (br) {
|
|
233
233
|
|
234
234
|
await t.expect(br.BRcontainer.visible).ok();
|
235
235
|
await t.expect(page.visible).ok();
|
236
|
-
await t.expect(nav.
|
236
|
+
await t.expect(nav.zoomIn.visible).ok();
|
237
237
|
|
238
238
|
const initialBookHeight = await page.getBoundingClientRectProperty('height');
|
239
239
|
const initialBookWidth = await page.getBoundingClientRectProperty('width');
|
240
240
|
|
241
|
-
await t.click(nav.
|
241
|
+
await t.click(nav.zoomIn);
|
242
242
|
|
243
243
|
const zoomInBookHeight = await page.getBoundingClientRectProperty('height');
|
244
244
|
const zoomIntBookWidth = await page.getBoundingClientRectProperty('width');
|
@@ -253,10 +253,10 @@ export function runBaseTests (br) {
|
|
253
253
|
|
254
254
|
// initial in-page
|
255
255
|
await t.expect(BRcontainer.getBoundingClientRectProperty('width')).lte(windowWidth);
|
256
|
-
await t.click(nav.
|
256
|
+
await t.click(nav.fullScreen);
|
257
257
|
// full screen
|
258
258
|
await t.expect(BRcontainer.getBoundingClientRectProperty('width')).eql(windowWidth);
|
259
|
-
await t.click(nav.
|
259
|
+
await t.click(nav.fullScreen);
|
260
260
|
// in-page
|
261
261
|
await t.expect(BRcontainer.getBoundingClientRectProperty('width')).lte(windowWidth);
|
262
262
|
});
|
@@ -4,20 +4,20 @@ const getPageUrl = ClientFunction(() => window.location.href);
|
|
4
4
|
export function runRightToLeftTests (br) {
|
5
5
|
test('Right to Left - correct initialization in two-page view', async t => {
|
6
6
|
const { nav, BRcontainer} = br;
|
7
|
-
await t.click(nav.
|
7
|
+
await t.click(nav.mode2Up);
|
8
8
|
|
9
9
|
//checking right leaf edge is not in tree
|
10
10
|
await t.expect(BRcontainer.find('.br-mode-2up__leafs--left').count).eql(1);
|
11
11
|
await t.expect(BRcontainer.find('.br-mode-2up__leafs--right').count).eql(0);
|
12
12
|
|
13
13
|
//checks slider is in correct position
|
14
|
-
await t.expect(nav.
|
14
|
+
await t.expect(nav.sliderRange.getStyleProperty('width')).eql('0px');
|
15
15
|
});
|
16
16
|
|
17
17
|
test('Right to Left - assuring flipping left goes to next page', async t => {
|
18
18
|
const { nav } = br;
|
19
|
-
await t.click(nav.
|
20
|
-
await t.click(nav.
|
19
|
+
await t.click(nav.mode2Up);
|
20
|
+
await t.click(nav.goLeft);
|
21
21
|
await t.expect(getPageUrl()).match(/page\/n1/);
|
22
22
|
});
|
23
23
|
}
|
@@ -3,7 +3,7 @@ import { SEARCH_INSIDE_URL_RE , mockResponseFound, mockResponseNotFound,
|
|
3
3
|
TEST_TEXT_FOUND, TEST_TEXT_NOT_FOUND, PAGE_FIRST_RESULT, SEARCH_MATCHES_LENGTH } from './mockSearch';
|
4
4
|
|
5
5
|
|
6
|
-
export function
|
6
|
+
export function runSearchTests(br) {
|
7
7
|
//building mock response for successful and unsuccessful search
|
8
8
|
const mockFound = RequestMock()
|
9
9
|
.onRequestTo(SEARCH_INSIDE_URL_RE )
|
@@ -15,32 +15,32 @@ export function runDesktopSearchTests(br) {
|
|
15
15
|
|
16
16
|
|
17
17
|
test
|
18
|
-
.requestHooks(mockFound)('
|
18
|
+
.requestHooks(mockFound)('Search - successful search', async t => {
|
19
19
|
const nav = br.nav;
|
20
20
|
|
21
21
|
//assuring that the search bar is enabled
|
22
|
-
await t.expect(nav.
|
23
|
-
await t.click(nav.
|
22
|
+
await t.expect(nav.searchIcon.visible).ok();
|
23
|
+
await t.click(nav.searchIcon);
|
24
24
|
|
25
25
|
//testing search for a word found in the book
|
26
|
-
await t.selectText(nav.
|
26
|
+
await t.selectText(nav.searchBox).pressKey('delete');
|
27
27
|
// FIXME: Why is it only typing every other letter?!?!
|
28
|
-
await t.typeText(nav.
|
28
|
+
await t.typeText(nav.searchBox, TEST_TEXT_FOUND.split('').join('_'));
|
29
29
|
await t.pressKey('enter');
|
30
30
|
|
31
|
-
await t.expect(nav.
|
32
|
-
await t.expect(nav.
|
33
|
-
await t.expect(nav.
|
34
|
-
await t.expect(nav.
|
35
|
-
await t.expect(nav.
|
36
|
-
await t.expect(nav.
|
31
|
+
await t.expect(nav.searchPin.exists).ok();
|
32
|
+
await t.expect(nav.searchPin.child('.BRquery').child('main').exists).ok();
|
33
|
+
await t.expect(nav.searchPin.child('.BRquery').child('main').innerText).contains(TEST_TEXT_FOUND);
|
34
|
+
await t.expect(nav.searchNavigation.exists).ok();
|
35
|
+
await t.expect(nav.searchNavigation.find('[data-id="resultsCount"]').exists).ok();
|
36
|
+
await t.expect(nav.searchNavigation.find('[data-id="resultsCount"]').innerText).contains(SEARCH_MATCHES_LENGTH);
|
37
37
|
|
38
38
|
//checking url
|
39
39
|
const getPageUrl = ClientFunction(() => window.location.href.toString());
|
40
40
|
await t.expect(getPageUrl()).contains(TEST_TEXT_FOUND);
|
41
41
|
|
42
42
|
//checks clicking on first search pin opens correct page
|
43
|
-
await t.click(nav.
|
43
|
+
await t.click(nav.searchPin);
|
44
44
|
await t.expect(getPageUrl()).contains(PAGE_FIRST_RESULT);
|
45
45
|
|
46
46
|
//checks highlight on result page is visible
|
@@ -51,19 +51,19 @@ export function runDesktopSearchTests(br) {
|
|
51
51
|
|
52
52
|
|
53
53
|
test
|
54
|
-
.requestHooks(mockNotFound)('
|
54
|
+
.requestHooks(mockNotFound)('Search - unsuccessful search', async t => {
|
55
55
|
const nav = br.nav;
|
56
56
|
|
57
57
|
//assuring that the search bar is enabled
|
58
|
-
await t.expect(nav.
|
59
|
-
await t.click(nav.
|
58
|
+
await t.expect(nav.searchIcon.visible).ok();
|
59
|
+
await t.click(nav.searchIcon);
|
60
60
|
|
61
61
|
//testing search for a word not found in the book
|
62
|
-
await t.selectText(nav.
|
62
|
+
await t.selectText(nav.searchBox).pressKey('delete');
|
63
63
|
// FIXME: Why is it only typing every other letter?!?!
|
64
|
-
await t.typeText(nav.
|
64
|
+
await t.typeText(nav.searchBox, TEST_TEXT_NOT_FOUND.split('').join('_'));
|
65
65
|
await t.pressKey('enter');
|
66
|
-
await t.expect(nav.
|
66
|
+
await t.expect(nav.searchPin.child('.BRquery').child('main').withText(TEST_TEXT_NOT_FOUND).exists).notOk();
|
67
67
|
|
68
68
|
const getPageUrl = ClientFunction(() => window.location.href.toString());
|
69
69
|
await t.expect(getPageUrl()).contains(TEST_TEXT_NOT_FOUND);
|