@internetarchive/bookreader 5.0.0-48-alpha2 → 5.0.0-49-a1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/BookReader/BookReader.js +1 -1
  2. package/BookReader/BookReader.js.map +1 -1
  3. package/BookReader/ia-bookreader-bundle.js +89 -89
  4. package/BookReader/ia-bookreader-bundle.js.map +1 -1
  5. package/BookReaderDemo/IADemoBr.js +2 -0
  6. package/CHANGELOG.md +4 -0
  7. package/package.json +2 -2
  8. package/src/BookNavigator/book-navigator.js +2 -2
  9. package/src/BookNavigator/bookmarks/ia-bookmarks.js +4 -4
  10. package/src/BookNavigator/downloads/downloads-provider.js +42 -10
  11. package/src/BookNavigator/downloads/downloads.js +47 -83
  12. package/src/BookNavigator/volumes/volumes-provider.js +1 -1
  13. package/src/BookReader/BookModel.js +0 -29
  14. package/src/BookReader/Mode1UpLit.js +1 -1
  15. package/src/BookReader/Mode2Up.js +9 -34
  16. package/src/BookReader/ModeThumb.js +1 -3
  17. package/src/BookReader/Navbar/Navbar.js +8 -5
  18. package/src/BookReader/Toolbar/Toolbar.js +3 -30
  19. package/src/BookReader.js +65 -338
  20. package/src/plugins/plugin.autoplay.js +4 -4
  21. package/src/plugins/plugin.chapters.js +2 -2
  22. package/src/plugins/search/plugin.search.js +6 -6
  23. package/src/plugins/search/view.js +2 -2
  24. package/src/plugins/tts/plugin.tts.js +2 -2
  25. package/src/util/manifestGenerator.js +0 -0
  26. package/tests/e2e/models/Navigation.js +1 -1
  27. package/tests/jest/BookNavigator/book-navigator.test.js +19 -15
  28. package/tests/jest/BookReader/BookModel.test.js +31 -11
  29. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +4 -4
  30. package/tests/jest/BookReader/Mode1UpLit.test.js +5 -1
  31. package/tests/jest/BookReader/Mode2Up.test.js +8 -8
  32. package/tests/jest/BookReader.test.js +0 -35
  33. package/tests/jest/plugins/plugin.autoplay.test.js +2 -2
  34. package/tests/jest/plugins/plugin.chapters.test.js +2 -3
  35. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
@@ -81,7 +81,7 @@ BookReader.prototype.autoToggle = function(overrides) {
81
81
  }
82
82
 
83
83
  // Change to autofit if book is too large
84
- if (this.reduce < this.twoPageGetAutofitReduce()) {
84
+ if (this.reduce < this._modes.mode2Up.getAutofitReduce()) {
85
85
  this.zoom('auto');
86
86
  }
87
87
 
@@ -94,7 +94,7 @@ BookReader.prototype.autoToggle = function(overrides) {
94
94
  // don't flip immediately -- wait until timer fires
95
95
  } else {
96
96
  // flip immediately
97
- this.flipFwdToIndex();
97
+ this.next({ triggerStop: false });
98
98
  }
99
99
 
100
100
  this.$('.play').hide();
@@ -103,9 +103,9 @@ BookReader.prototype.autoToggle = function(overrides) {
103
103
  if (this.animating) return;
104
104
 
105
105
  if (Math.max(this.twoPage.currentIndexL, this.twoPage.currentIndexR) >= this.lastDisplayableIndex()) {
106
- this.flipBackToIndex(1); // $$$ really what we want?
106
+ this.prev({ triggerStop: false }); // $$$ really what we want?
107
107
  } else {
108
- this.flipFwdToIndex();
108
+ this.next({ triggerStop: false });
109
109
  }
110
110
  }, this.flipDelay);
111
111
  } else {
@@ -53,7 +53,7 @@ BookReader.prototype.init = (function(super_) {
53
53
  */
54
54
  BookReader.prototype.addChapter = function(chapterTitle, pageNumber, pageIndex) {
55
55
  const uiStringPage = 'Page'; // i18n
56
- const percentThrough = BookReader.util.cssPercentage(pageIndex, this.getNumLeafs() - 1);
56
+ const percentThrough = BookReader.util.cssPercentage(pageIndex, this.book.getNumLeafs() - 1);
57
57
  const jumpToChapter = (event) => {
58
58
  this.jumpToIndex($(event.delegateTarget).data('pageIndex'));
59
59
  $('.current-chapter').removeClass('current-chapter');
@@ -151,7 +151,7 @@ BookReader.prototype.updateTOC = function(tocEntries) {
151
151
  * @param {TocEntry} tocEntryObject
152
152
  */
153
153
  BookReader.prototype.addChapterFromEntry = function(tocEntryObject) {
154
- tocEntryObject.pageIndex = this.getPageIndex(tocEntryObject['pagenum']);
154
+ tocEntryObject.pageIndex = this.book.getPageIndex(tocEntryObject['pagenum']);
155
155
  //creates a string with non-void tocEntryObject.label and tocEntryObject.title
156
156
  const chapterStr = [tocEntryObject.label, tocEntryObject.title]
157
157
  .filter(x => x)
@@ -297,7 +297,7 @@ export function marshallSearchResults(results, displayPageNumberFn) {
297
297
  * @param {boolean} options.goToFirstResult
298
298
  */
299
299
  BookReader.prototype.BRSearchCallback = function(results, options) {
300
- marshallSearchResults(results, pageNum => this.getPageNum(this.leafNumToIndex(pageNum)));
300
+ marshallSearchResults(results, pageNum => this.book.getPageNum(this.book.leafNumToIndex(pageNum)));
301
301
  this.searchResults = results || [];
302
302
 
303
303
  this.updateSearchHilites();
@@ -357,7 +357,7 @@ BookReader.prototype.updateSearchHilites = function() {
357
357
  // Group by pageIndex
358
358
  for (const match of matches) {
359
359
  for (const box of match.par[0].boxes) {
360
- const pageIndex = this.leafNumToIndex(box.page);
360
+ const pageIndex = this.book.leafNumToIndex(box.page);
361
361
  const pageBoxes = boxesByIndex[pageIndex] || (boxesByIndex[pageIndex] = []);
362
362
  pageBoxes.push(box);
363
363
  }
@@ -366,7 +366,7 @@ BookReader.prototype.updateSearchHilites = function() {
366
366
  // update any already created pages
367
367
  for (const [pageIndexString, boxes] of Object.entries(boxesByIndex)) {
368
368
  const pageIndex = parseFloat(pageIndexString);
369
- const page = this._models.book.getPage(pageIndex);
369
+ const page = this.book.getPage(pageIndex);
370
370
  const pageContainers = this.getActivePageContainerElementsForIndex(pageIndex);
371
371
  for (const container of pageContainers) {
372
372
  renderBoxesInPageContainerLayer('searchHiliteLayer', boxes, page, container, boxes.map(b => `match-index-${b.matchIndex}`));
@@ -392,8 +392,8 @@ BookReader.prototype.removeSearchHilites = function() {
392
392
  */
393
393
  BookReader.prototype._searchPluginGoToResult = async function (matchIndex) {
394
394
  const match = this.searchResults?.matches[matchIndex];
395
- const pageIndex = this.leafNumToIndex(match.par[0].page);
396
- const { book } = this._models;
395
+ const book = this.book;
396
+ const pageIndex = book.leafNumToIndex(match.par[0].page);
397
397
  const page = book.getPage(pageIndex);
398
398
  const onNearbyPage = Math.abs(this.currentIndex() - pageIndex) < 3;
399
399
  let makeUnviewableAtEnd = false;
@@ -478,7 +478,7 @@ BookReader.prototype.searchHighlightVisible = function() {
478
478
 
479
479
  results.matches.some(match => {
480
480
  return match.par[0].boxes.some(box => {
481
- const pageIndex = this.leafNumToIndex(box.page);
481
+ const pageIndex = this.book.leafNumToIndex(box.page);
482
482
  if (jQuery.inArray(pageIndex, visiblePages) >= 0) {
483
483
  return true;
484
484
  }
@@ -231,10 +231,10 @@ class SearchView {
231
231
  renderPins(matches) {
232
232
  matches.forEach((match) => {
233
233
  const queryString = match.text;
234
- const pageIndex = this.br.leafNumToIndex(match.par[0].page);
234
+ const pageIndex = this.br.book.leafNumToIndex(match.par[0].page);
235
235
  const uiStringSearch = "Search result"; // i18n
236
236
 
237
- const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.getNumLeafs() - 1);
237
+ const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.book.getNumLeafs() - 1);
238
238
 
239
239
  const escapedQueryString = escapeHTML(queryString);
240
240
  const queryStringWithB = escapedQueryString.replace(this.matcher, '<b>$1</b>');
@@ -224,7 +224,7 @@ BookReader.prototype.ttsStart = function (startTTSEngine = true) {
224
224
  this.$('.BRicon.read').addClass('unread active');
225
225
  this.ttsSendAnalyticsEvent('Start');
226
226
  if (startTTSEngine)
227
- this.ttsEngine.start(this.currentIndex(), this.getNumLeafs());
227
+ this.ttsEngine.start(this.currentIndex(), this.book.getNumLeafs());
228
228
  };
229
229
 
230
230
  BookReader.prototype.ttsJumpForward = function () {
@@ -326,7 +326,7 @@ BookReader.prototype.ttsHighlightChunk = function(chunk) {
326
326
  // update any already created pages
327
327
  for (const [pageIndexString, boxes] of Object.entries(this._ttsBoxesByIndex)) {
328
328
  const pageIndex = parseFloat(pageIndexString);
329
- const page = this._models.book.getPage(pageIndex);
329
+ const page = this.book.getPage(pageIndex);
330
330
  const pageContainers = this.getActivePageContainerElementsForIndex(pageIndex);
331
331
  pageContainers.forEach(container => renderBoxesInPageContainerLayer('ttsHiliteLayer', boxes, page, container));
332
332
  }
File without changes
@@ -17,7 +17,7 @@ export default class Navigation {
17
17
  * @class
18
18
  * @classdesc defines DesktopNav base elements
19
19
  */
20
- class DesktopNav {
20
+ export class DesktopNav {
21
21
  /**
22
22
  * @param {Selector} bottomToolbar
23
23
  * @param {Selector} itemNav
@@ -46,6 +46,13 @@ window.ResizeObserver = class ResizeObserver {
46
46
  disconnect = sinon.fake()
47
47
  };
48
48
 
49
+ beforeEach(() => {
50
+ window.archive_analytics = {
51
+ send_event_no_sampling: sinon.fake(),
52
+ send_event: sinon.fake()
53
+ };
54
+ });
55
+
49
56
  afterEach(() => {
50
57
  window.br = null;
51
58
  fixtureCleanup();
@@ -516,8 +523,6 @@ describe('<book-navigator>', () => {
516
523
  describe('Handles Restricted Books', () => {
517
524
  describe('contextMenu is prevented when book is restricted', () => {
518
525
  it('watches on `div.BRscreen`', async () => {
519
- window.archive_analytics = { send_event_no_sampling: sinon.fake() };
520
-
521
526
  const el = fixtureSync(container());
522
527
  const brStub = {
523
528
  options: { restricted: true },
@@ -529,9 +534,8 @@ describe('<book-navigator>', () => {
529
534
  const elSpy = sinon.spy(el.manageContextMenuVisibility);
530
535
  await el.elementUpdated;
531
536
 
532
- expect(window.archive_analytics.send_event_no_sampling.called).toEqual(
533
- false
534
- );
537
+ expect(window.archive_analytics.send_event_no_sampling.called).toEqual(false);
538
+ expect(window.archive_analytics.send_event.called).toEqual(false);
535
539
  expect(elSpy.called).toEqual(false);
536
540
 
537
541
  const body = document.querySelector('body');
@@ -550,14 +554,13 @@ describe('<book-navigator>', () => {
550
554
 
551
555
  // analytics fires
552
556
  expect(window.archive_analytics.send_event_no_sampling.called).toEqual(
553
- true
557
+ false
554
558
  );
559
+ expect(window.archive_analytics.send_event.called).toEqual(true);
555
560
  // we prevent default
556
561
  expect(preventDefaultSpy.called).toEqual(true);
557
562
  });
558
563
  it('watches on `img.BRpageimage`', async () => {
559
- window.archive_analytics = { send_event_no_sampling: sinon.fake() };
560
-
561
564
  const el = fixtureSync(container());
562
565
  const brStub = {
563
566
  options: { restricted: true },
@@ -568,9 +571,8 @@ describe('<book-navigator>', () => {
568
571
 
569
572
  await el.elementUpdated;
570
573
 
571
- expect(window.archive_analytics.send_event_no_sampling.called).toEqual(
572
- false
573
- );
574
+ expect(window.archive_analytics.send_event_no_sampling.called).toEqual(false);
575
+ expect(window.archive_analytics.send_event.called).toEqual(false);
574
576
 
575
577
  const body = document.querySelector('body');
576
578
  // const element stub for img.BRpageimage
@@ -586,14 +588,13 @@ describe('<book-navigator>', () => {
586
588
  imgBRpageimage.dispatchEvent(contextMenuEvent);
587
589
 
588
590
  // analytics fires
589
- expect(window.archive_analytics.send_event_no_sampling.called).toEqual(true);
591
+ expect(window.archive_analytics.send_event_no_sampling.called).toEqual(false);
592
+ expect(window.archive_analytics.send_event.called).toEqual(true);
590
593
  // we prevent default
591
594
  expect(preventDefaultSpy.called).toEqual(true);
592
595
  });
593
596
  });
594
597
  it('Allows unrestricted books access to context menu', async () => {
595
- window.archive_analytics = { send_event_no_sampling: sinon.fake() };
596
-
597
598
  const el = fixtureSync(container());
598
599
  const brStub = {
599
600
  options: { restricted: false },
@@ -607,6 +608,8 @@ describe('<book-navigator>', () => {
607
608
  expect(window.archive_analytics.send_event_no_sampling.called).toEqual(
608
609
  false
609
610
  );
611
+ expect(window.archive_analytics.send_event.called).toEqual(false);
612
+
610
613
 
611
614
  const body = document.querySelector('body');
612
615
  // const element stub for img.BRpageimage
@@ -622,7 +625,8 @@ describe('<book-navigator>', () => {
622
625
  imgBRpageimage.dispatchEvent(contextMenuEvent);
623
626
 
624
627
  // analytics fires
625
- expect(window.archive_analytics.send_event_no_sampling.called).toEqual(true);
628
+ expect(window.archive_analytics.send_event_no_sampling.called).toEqual(false);
629
+ expect(window.archive_analytics.send_event.called).toEqual(true);
626
630
  // we do not prevent default
627
631
  expect(preventDefaultSpy.called).toEqual(false);
628
632
  });
@@ -1,6 +1,7 @@
1
1
  import sinon from 'sinon';
2
2
  import { deepCopy } from '../utils.js';
3
3
  import { BookModel } from '@/src/BookReader/BookModel.js';
4
+ import { NAMED_REDUCE_SETS } from '@/src/BookReader/ReduceSet.js';
4
5
  /** @typedef {import('@/src/BookReader/options.js').BookReaderOptions} BookReaderOptions */
5
6
 
6
7
  afterEach(() => {
@@ -21,10 +22,10 @@ const SAMPLE_DATA = [
21
22
  ],
22
23
  ];
23
24
 
24
- describe('getMedianPageSize', () => {
25
+ describe('getMedianPageSizeInches', () => {
25
26
  test('handles single page data', () => {
26
- const bm = new BookModel({ data: SAMPLE_DATA.slice(0, 1) });
27
- expect(bm.getMedianPageSize()).toEqual({ width: 123, height: 123 });
27
+ const bm = new BookModel({ data: SAMPLE_DATA.slice(0, 1), options: {ppi: 1} });
28
+ expect(bm.getMedianPageSizeInches()).toEqual({ width: 123, height: 123 });
28
29
  });
29
30
 
30
31
  test('handles odd pages data', () => {
@@ -38,8 +39,8 @@ describe('getMedianPageSize', () => {
38
39
  Object.assign(data[0][0], sizes[0]);
39
40
  Object.assign(data[1][0], sizes[1]);
40
41
  Object.assign(data[1][1], sizes[2]);
41
- const bm = new BookModel({ data });
42
- expect(bm.getMedianPageSize()).toEqual({ width: 200, height: 2200 });
42
+ const bm = new BookModel({ data, options: {ppi: 1} });
43
+ expect(bm.getMedianPageSizeInches()).toEqual({ width: 200, height: 2200 });
43
44
  });
44
45
 
45
46
 
@@ -55,16 +56,16 @@ describe('getMedianPageSize', () => {
55
56
  Object.assign(data[1][0], sizes[1]);
56
57
  Object.assign(data[1][1], sizes[2]);
57
58
  Object.assign(data[2][0], sizes[3]);
58
- const bm = new BookModel({ data });
59
- expect(bm.getMedianPageSize()).toEqual({ width: 300, height: 2300 });
59
+ const bm = new BookModel({ data, options: {ppi: 1} });
60
+ expect(bm.getMedianPageSizeInches()).toEqual({ width: 300, height: 2300 });
60
61
  });
61
62
 
62
63
  test('caches result', () => {
63
64
  const bm = new BookModel({ data: SAMPLE_DATA });
64
- const firstResult = bm.getMedianPageSize();
65
- expect(bm.getMedianPageSize()).toBe(firstResult);
66
- expect(bm.getMedianPageSize()).toBe(firstResult);
67
- expect(bm.getMedianPageSize()).toBe(firstResult);
65
+ const firstResult = bm.getMedianPageSizeInches();
66
+ expect(bm.getMedianPageSizeInches()).toBe(firstResult);
67
+ expect(bm.getMedianPageSizeInches()).toBe(firstResult);
68
+ expect(bm.getMedianPageSizeInches()).toBe(firstResult);
68
69
  });
69
70
  });
70
71
 
@@ -309,4 +310,23 @@ describe('PageModel', () => {
309
310
  expect(bm.getPage(0).findPrev({ combineConsecutiveUnviewables: true })).toBeUndefined();
310
311
  });
311
312
  });
313
+
314
+ describe('getURISrcSet', () => {
315
+ const data = deepCopy(SAMPLE_DATA);
316
+ const bm = new BookModel({ data, reduceSet: NAMED_REDUCE_SETS.pow2 });
317
+ bm.getPageURI = (index, scale, rotate) => `correctURL.png?scale=${scale}`;
318
+ const page = bm.getPage(0);
319
+
320
+ test('with 0 elements in srcset', () => {
321
+ expect(page.getURISrcSet(1)).toBe("");
322
+ });
323
+
324
+ test('with 2 elements in srcset', () => {
325
+ expect(page.getURISrcSet(5)).toBe("correctURL.png?scale=2 2x, correctURL.png?scale=1 4x");
326
+ });
327
+
328
+ test('with the most elements in srcset', () => {
329
+ expect(page.getURISrcSet(35)).toBe("correctURL.png?scale=16 2x, correctURL.png?scale=8 4x, correctURL.png?scale=4 8x, correctURL.png?scale=2 16x, correctURL.png?scale=1 32x");
330
+ });
331
+ });
312
332
  });
@@ -140,14 +140,14 @@ describe('`BookReader.prototype.prev`', () => {
140
140
  const br = new BookReader();
141
141
  global.br = br;
142
142
  br.trigger = sinon.fake();
143
- br.flipBackToIndex = sinon.fake();
143
+ br._modes.mode2Up.flipBackToIndex = sinon.fake();
144
144
  br.jumpToIndex = sinon.fake();
145
145
 
146
146
  test('does not take action if user is on front page', () => {
147
147
  br.firstIndex = 0;
148
148
  br.prev();
149
149
  expect(br.trigger.callCount).toBe(0);
150
- expect(br.flipBackToIndex.callCount).toBe(0);
150
+ expect(br._modes.mode2Up.flipBackToIndex.callCount).toBe(0);
151
151
  expect(br.jumpToIndex.callCount).toBe(0);
152
152
  });
153
153
 
@@ -158,7 +158,7 @@ describe('`BookReader.prototype.prev`', () => {
158
158
  br.prev();
159
159
  expect(br.jumpToIndex.callCount).toBe(0); // <-- does not get called
160
160
  expect(br.trigger.callCount).toBe(1);
161
- expect(br.flipBackToIndex.callCount).toBe(1);
161
+ expect(br._modes.mode2Up.flipBackToIndex.callCount).toBe(1);
162
162
  });
163
163
  });
164
164
 
@@ -169,7 +169,7 @@ describe('`BookReader.prototype.prev`', () => {
169
169
  br.prev();
170
170
  expect(br.jumpToIndex.callCount).toBe(1); // <-- gets called
171
171
  expect(br.trigger.callCount).toBe(1); // <-- gets called by `jumpToIndex` internally
172
- expect(br.flipBackToIndex.callCount).toBe(1); // <-- gets called by `jumpToIndex` internally
172
+ expect(br._modes.mode2Up.flipBackToIndex.callCount).toBe(1); // <-- gets called by `jumpToIndex` internally
173
173
  });
174
174
  });
175
175
  });
@@ -22,7 +22,11 @@ const SAMPLE_DATA = [
22
22
  function make_dummy_br(overrides = {}) {
23
23
  return Object.assign({
24
24
  updateFirstIndex() {},
25
- updateNavIndexThrottled() {},
25
+ _components: {
26
+ navbar: {
27
+ updateNavIndexThrottled() {},
28
+ }
29
+ },
26
30
  data: []
27
31
  }, overrides);
28
32
  }
@@ -145,13 +145,13 @@ describe('2up Container sizing', () => {
145
145
  test('baseLeafCss', () => {
146
146
  const br = new BookReader({ data: SAMPLE_DATA });
147
147
  br.init();
148
- br.calculateSpreadSize();
148
+ br._modes.mode2Up.calculateSpreadSize();
149
149
  expect(Object.keys(br._modes.mode2Up.baseLeafCss)).toEqual(['position', 'right', 'top', 'zIndex']);
150
150
  });
151
151
  test('heightCss', () => {
152
152
  const br = new BookReader({ data: SAMPLE_DATA });
153
153
  br.init();
154
- br.calculateSpreadSize();
154
+ br._modes.mode2Up.calculateSpreadSize();
155
155
  const heightStub = 1000;
156
156
  br.twoPage.height = heightStub;
157
157
  expect(Object.keys(br._modes.mode2Up.heightCss)).toEqual(['height']);
@@ -160,7 +160,7 @@ describe('2up Container sizing', () => {
160
160
  describe('left side', () => {
161
161
  const br = new BookReader({ data: SAMPLE_DATA });
162
162
  br.init();
163
- br.calculateSpreadSize();
163
+ br._modes.mode2Up.calculateSpreadSize();
164
164
 
165
165
  test('leftLeafCss', () => {
166
166
  expect(Object.keys(br._modes.mode2Up.leftLeafCss)).toEqual([
@@ -186,7 +186,7 @@ describe('2up Container sizing', () => {
186
186
  describe('right side', () => {
187
187
  const br = new BookReader({ data: SAMPLE_DATA });
188
188
  br.init();
189
- br.calculateSpreadSize();
189
+ br._modes.mode2Up.calculateSpreadSize();
190
190
 
191
191
  test('rightLeafCss', () => {
192
192
  expect(Object.keys(br._modes.mode2Up.rightLeafCss)).toEqual([
@@ -213,20 +213,20 @@ describe('2up Container sizing', () => {
213
213
  test('mainContainerCss', () => {
214
214
  const br = new BookReader({ data: SAMPLE_DATA });
215
215
  br.init();
216
- br.calculateSpreadSize();
216
+ br._modes.mode2Up.calculateSpreadSize();
217
217
 
218
218
  expect(Object.keys(br._modes.mode2Up.mainContainerCss)).toEqual(['height', 'width', 'position']);
219
219
  });
220
220
  test('spreadCoverCss', () => {
221
221
  const br = new BookReader({ data: SAMPLE_DATA });
222
222
  br.init();
223
- br.calculateSpreadSize();
223
+ br._modes.mode2Up.calculateSpreadSize();
224
224
  expect(Object.keys(br._modes.mode2Up.spreadCoverCss)).toEqual(['width', 'height', 'visibility']);
225
225
  });
226
226
  test('spineCss', () => {
227
227
  const br = new BookReader({ data: SAMPLE_DATA });
228
228
  br.init();
229
- br.calculateSpreadSize();
229
+ br._modes.mode2Up.calculateSpreadSize();
230
230
  expect(Object.keys(br._modes.mode2Up.spineCss)).toEqual(['width', 'height', 'left', 'top']);
231
231
  });
232
232
  });
@@ -247,7 +247,7 @@ describe('prepareTwoPageView', () => {
247
247
  const preparePopUp = sinon.spy(mode2Up, 'preparePopUp');
248
248
  const updateBrClasses = sinon.spy(br, 'updateBrClasses');
249
249
 
250
- br.prepareTwoPageView(undefined, undefined, true);
250
+ mode2Up.prepare(undefined, undefined, true);
251
251
  expect(prefetch.callCount).toBe(1);
252
252
 
253
253
  expect(resizeSpread.callCount).toBe(0);
@@ -157,41 +157,6 @@ test('does not add q= term to urlMode=hash query string', () => {
157
157
  )).toBe('?name=value');
158
158
  });
159
159
 
160
- test('_getPageURISrcset with 0 page book', () => {
161
- br._models.book.getNumLeafs = jest.fn(() => 0);
162
- br._models.book.getPageURI = jest.fn((index, scale, rotate) => "correctURL.png&scale=" + scale);
163
- br.init();
164
- expect(br._getPageURISrcset(5, undefined, undefined)).toBe("");
165
- });
166
-
167
- test('_getPageURISrcset with negative index', () => {
168
- br._models.book.getNumLeafs = jest.fn(() => 0);
169
- br._models.book.getPageURI = jest.fn((index, scale, rotate) => "correctURL.png&scale=" + scale);
170
- br.init();
171
- expect(br._getPageURISrcset(-7, undefined, undefined)).toBe("");
172
- });
173
-
174
- test('_getPageURISrcset with 0 elements in srcset', () => {
175
- br._models.book.getNumLeafs = jest.fn(() => 30);
176
- br._models.book.getPageURI = jest.fn((index, scale, rotate) => "correctURL.png&scale=" + scale);
177
- br.init();
178
- expect(br._getPageURISrcset(5, 1, undefined)).toBe("");
179
- });
180
-
181
- test('_getPageURISrcset with 2 elements in srcset', () => {
182
- br._models.book.getNumLeafs = jest.fn(() => 30);
183
- br._models.book.getPageURI = jest.fn((index, scale, rotate) => "correctURL.png&scale=" + scale);
184
- br.init();
185
- expect(br._getPageURISrcset(5, 5, undefined)).toBe("correctURL.png&scale=2 2x, correctURL.png&scale=1 4x");
186
- });
187
-
188
- test('_getPageURISrcset with the most elements in srcset', () => {
189
- br._models.book.getNumLeafs = jest.fn(() => 30);
190
- br._models.book.getPageURI = jest.fn((index, scale, rotate) => "correctURL.png&scale=" + scale);
191
- br.init();
192
- expect(br._getPageURISrcset(5, 35, undefined)).toBe("correctURL.png&scale=16 2x, correctURL.png&scale=8 4x, correctURL.png&scale=4 8x, correctURL.png&scale=2 16x, correctURL.png&scale=1 32x");
193
- });
194
-
195
160
  describe('Navigation Bars', () => {
196
161
  test('Standard navigation is being used by default', () => {
197
162
  br.initNavbar = jest.fn();
@@ -38,12 +38,12 @@ describe('Plugin: Menu Toggle', () => {
38
38
  });
39
39
  test('autoplay will run without `flipSpeed` parameters', () => {
40
40
  const initialAutoTimer = br.autoTimer;
41
- br.flipFwdToIndex = jest.fn();
41
+ br.next = jest.fn();
42
42
  br.autoStop = jest.fn();
43
43
  br.init();
44
44
  br.autoToggle();
45
45
  // internally referenced functions that fire
46
- expect(br.flipFwdToIndex).toHaveBeenCalledTimes(1);
46
+ expect(br.next).toHaveBeenCalledTimes(1);
47
47
 
48
48
  expect(initialAutoTimer).toBeFalsy();
49
49
  // br.autoTimer changes when autoToggle turns on
@@ -55,6 +55,7 @@ const SAMPLE_TOC_UNDEF = [
55
55
  }
56
56
  ];
57
57
 
58
+ /** @type {BookReader} */
58
59
  let br;
59
60
  beforeEach(() => {
60
61
  $.ajax = jest.fn().mockImplementation((args) => {
@@ -97,9 +98,7 @@ describe('updateTOCState', () => {
97
98
 
98
99
  beforeEach(() => {
99
100
  window.HTMLElement.prototype.scrollIntoView = sinon.stub();
100
- //Sinon is not used because this function is imported from BookModel with exposeOverrideableMethod()
101
- //which has a getter and setter
102
- br.getPageIndex = (str) => parseFloat(str);
101
+ br.book.getPageIndex = (str) => parseFloat(str);
103
102
  br.init();
104
103
  });
105
104
 
@@ -1,17 +0,0 @@
1
- import { runBaseTests } from '../helpers/base';
2
- import BookReader from '../models/BookReader';
3
-
4
- const localURL = 'https://archive.org/details/';
5
- const books = [
6
- 'birdbookillustra00reedrich', // publicDomain
7
- // 'pianoservicingtu00rebl_0', // borrowable,
8
- // 'adventuresoftoms00twaiiala', // has chapter markers
9
- // 'gendaitankashu00meijuoft', // Right to Left book
10
- // 'gov.uspto.patents.application.10074026', // multiple files
11
- ];
12
-
13
- books.forEach(function(page) {
14
- const url = `${localURL}${page}`;
15
- fixture `Archive.org BR Base Tests for: ${page}`.page `${url}`;
16
- runBaseTests(new BookReader());
17
- });