@internetarchive/bookreader 5.0.0-9 → 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.
Files changed (324) hide show
  1. package/.eslintrc.js +21 -19
  2. package/.github/workflows/node.js.yml +76 -11
  3. package/.github/workflows/npm-publish.yml +6 -20
  4. package/.testcaferc.js +10 -0
  5. package/BookReader/BookReader.css +404 -1125
  6. package/BookReader/BookReader.js +1 -1
  7. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  8. package/BookReader/BookReader.js.map +1 -1
  9. package/BookReader/ia-bookreader-bundle.js +1782 -0
  10. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +7 -0
  11. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  12. package/BookReader/icons/1up.svg +1 -1
  13. package/BookReader/icons/2up.svg +1 -1
  14. package/BookReader/icons/advance.svg +1 -1
  15. package/BookReader/icons/chevron-right.svg +1 -1
  16. package/BookReader/icons/close-circle-dark.svg +1 -1
  17. package/BookReader/icons/close-circle.svg +1 -1
  18. package/BookReader/icons/fullscreen.svg +1 -1
  19. package/BookReader/icons/fullscreen_exit.svg +1 -1
  20. package/BookReader/icons/hamburger.svg +1 -1
  21. package/BookReader/icons/left-arrow.svg +1 -1
  22. package/BookReader/icons/magnify-minus.svg +1 -1
  23. package/BookReader/icons/magnify-plus.svg +1 -1
  24. package/BookReader/icons/magnify.svg +1 -1
  25. package/BookReader/icons/pause.svg +1 -1
  26. package/BookReader/icons/play.svg +1 -1
  27. package/BookReader/icons/playback-speed.svg +1 -1
  28. package/BookReader/icons/read-aloud.svg +1 -1
  29. package/BookReader/icons/review.svg +1 -1
  30. package/BookReader/icons/thumbnails.svg +1 -1
  31. package/BookReader/icons/voice.svg +1 -0
  32. package/BookReader/icons/volume-full.svg +1 -1
  33. package/BookReader/images/BRicons.svg +3 -3
  34. package/BookReader/images/books_graphic.svg +1 -1
  35. package/BookReader/images/icon_book.svg +1 -1
  36. package/BookReader/images/icon_bookmark.svg +1 -1
  37. package/BookReader/images/icon_gear.svg +1 -1
  38. package/BookReader/images/icon_hamburger.svg +1 -1
  39. package/BookReader/images/icon_home.svg +1 -1
  40. package/BookReader/images/icon_info.svg +1 -1
  41. package/BookReader/images/icon_one_page.svg +1 -1
  42. package/BookReader/images/icon_pause.svg +1 -1
  43. package/BookReader/images/icon_play.svg +1 -1
  44. package/BookReader/images/icon_playback-rate.svg +1 -1
  45. package/BookReader/images/icon_search_button.svg +1 -1
  46. package/BookReader/images/icon_share.svg +1 -1
  47. package/BookReader/images/icon_skip-ahead.svg +1 -1
  48. package/BookReader/images/icon_skip-back.svg +1 -1
  49. package/BookReader/images/icon_speaker.svg +1 -1
  50. package/BookReader/images/icon_speaker_open.svg +1 -1
  51. package/BookReader/images/icon_thumbnails.svg +1 -1
  52. package/BookReader/images/icon_toc.svg +1 -1
  53. package/BookReader/images/icon_two_pages.svg +1 -1
  54. package/BookReader/images/marker_chap-off.svg +1 -1
  55. package/BookReader/images/marker_chap-on.svg +1 -1
  56. package/BookReader/images/marker_srch-on.svg +1 -1
  57. package/BookReader/images/unviewable_page.png +0 -0
  58. package/BookReader/jquery-3.js +2 -0
  59. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  60. package/BookReader/plugins/plugin.archive_analytics.js +1 -1
  61. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  62. package/BookReader/plugins/plugin.autoplay.js +1 -1
  63. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  64. package/BookReader/plugins/plugin.chapters.js +25 -1
  65. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  66. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  67. package/BookReader/plugins/plugin.iframe.js +1 -1
  68. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  69. package/BookReader/plugins/plugin.iiif.js +2 -0
  70. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  71. package/BookReader/plugins/plugin.resume.js +1 -1
  72. package/BookReader/plugins/plugin.resume.js.map +1 -1
  73. package/BookReader/plugins/plugin.search.js +2 -1
  74. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  75. package/BookReader/plugins/plugin.search.js.map +1 -1
  76. package/BookReader/plugins/plugin.text_selection.js +2 -1
  77. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  78. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  79. package/BookReader/plugins/plugin.tts.js +1 -1
  80. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  81. package/BookReader/plugins/plugin.tts.js.map +1 -1
  82. package/BookReader/plugins/plugin.url.js +1 -1
  83. package/BookReader/plugins/plugin.url.js.map +1 -1
  84. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -1
  85. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  86. package/BookReader/webcomponents-bundle.js +3 -0
  87. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  88. package/BookReader/webcomponents-bundle.js.map +1 -0
  89. package/BookReaderDemo/BookReaderDemo.css +18 -19
  90. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -3
  91. package/BookReaderDemo/BookReaderJSSimple.js +1 -0
  92. package/BookReaderDemo/IADemoBr.js +144 -0
  93. package/BookReaderDemo/demo-advanced.html +2 -2
  94. package/BookReaderDemo/demo-embed-iframe-src.html +2 -1
  95. package/BookReaderDemo/demo-fullscreen-mobile.html +3 -5
  96. package/BookReaderDemo/demo-fullscreen.html +2 -4
  97. package/BookReaderDemo/demo-iiif.html +99 -12
  98. package/BookReaderDemo/demo-internetarchive.html +214 -18
  99. package/BookReaderDemo/demo-multiple.html +2 -1
  100. package/BookReaderDemo/demo-preview-pages.html +526 -525
  101. package/BookReaderDemo/demo-simple.html +2 -1
  102. package/BookReaderDemo/demo-vendor-fullscreen.html +2 -4
  103. package/BookReaderDemo/ia-multiple-volumes-manifest.js +170 -0
  104. package/BookReaderDemo/immersion-1up.html +2 -2
  105. package/BookReaderDemo/immersion-mode.html +2 -4
  106. package/BookReaderDemo/toggle_controls.html +3 -2
  107. package/BookReaderDemo/view_mode.html +2 -1
  108. package/BookReaderDemo/viewmode-cycle.html +2 -3
  109. package/CHANGELOG.md +584 -33
  110. package/README.md +14 -1
  111. package/babel.config.js +20 -0
  112. package/codecov.yml +6 -0
  113. package/index.html +5 -2
  114. package/jsconfig.json +19 -0
  115. package/netlify.toml +9 -0
  116. package/package.json +70 -62
  117. package/renovate.json +52 -0
  118. package/scripts/preversion.js +0 -1
  119. package/src/BookNavigator/assets/bookmark-colors.js +1 -1
  120. package/src/BookNavigator/assets/button-base.js +5 -2
  121. package/src/BookNavigator/assets/ia-logo.js +17 -0
  122. package/src/BookNavigator/assets/icon_checkmark.js +1 -1
  123. package/src/BookNavigator/assets/icon_close.js +1 -1
  124. package/src/BookNavigator/book-navigator.js +590 -0
  125. package/src/BookNavigator/bookmarks/bookmark-button.js +3 -2
  126. package/src/BookNavigator/bookmarks/bookmark-edit.js +3 -4
  127. package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
  128. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +4 -9
  129. package/src/BookNavigator/bookmarks/bookmarks-provider.js +27 -17
  130. package/src/BookNavigator/bookmarks/ia-bookmarks.js +116 -67
  131. package/src/BookNavigator/delete-modal-actions.js +1 -1
  132. package/src/BookNavigator/downloads/downloads-provider.js +36 -21
  133. package/src/BookNavigator/downloads/downloads.js +29 -25
  134. package/src/BookNavigator/search/search-provider.js +50 -28
  135. package/src/BookNavigator/search/search-results.js +24 -10
  136. package/src/BookNavigator/sharing.js +27 -0
  137. package/src/BookNavigator/viewable-files.js +95 -0
  138. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +13 -12
  139. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +7 -7
  140. package/src/BookReader/BookModel.js +76 -41
  141. package/src/BookReader/DragScrollable.js +233 -0
  142. package/src/BookReader/ImageCache.js +48 -15
  143. package/src/BookReader/Mode1Up.js +56 -351
  144. package/src/BookReader/Mode1UpLit.js +388 -0
  145. package/src/BookReader/Mode2Up.js +73 -1318
  146. package/src/BookReader/Mode2UpLit.js +777 -0
  147. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  148. package/src/BookReader/ModeSmoothZoom.js +312 -0
  149. package/src/BookReader/ModeThumb.js +19 -13
  150. package/src/BookReader/Navbar/Navbar.js +70 -54
  151. package/src/BookReader/PageContainer.js +116 -22
  152. package/src/BookReader/ReduceSet.js +3 -3
  153. package/src/BookReader/Toolbar/Toolbar.js +14 -41
  154. package/src/BookReader/events.js +2 -3
  155. package/src/BookReader/options.js +73 -15
  156. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  157. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  158. package/src/BookReader/utils/SelectionObserver.js +45 -0
  159. package/src/BookReader/utils/classes.js +1 -1
  160. package/src/BookReader/utils.js +128 -13
  161. package/src/BookReader.js +544 -1078
  162. package/src/BookReaderPlugin.js +44 -0
  163. package/src/assets/icons/magnify-minus.svg +3 -7
  164. package/src/assets/icons/magnify-plus.svg +3 -7
  165. package/src/assets/icons/voice.svg +1 -0
  166. package/src/assets/images/unviewable_page.png +0 -0
  167. package/src/css/BookReader.scss +1 -5
  168. package/src/css/_BRBookmarks.scss +1 -1
  169. package/src/css/_BRComponent.scss +1 -1
  170. package/src/css/_BRicon.scss +8 -2
  171. package/src/css/_BRmain.scss +16 -3
  172. package/src/css/_BRnav.scss +12 -42
  173. package/src/css/_BRpages.scss +170 -42
  174. package/src/css/_BRsearch.scss +68 -25
  175. package/src/css/_BRtoolbar.scss +5 -5
  176. package/src/css/_TextSelection.scss +87 -27
  177. package/src/css/_colorbox.scss +2 -2
  178. package/src/css/_controls.scss +24 -7
  179. package/src/css/_icons.scss +1 -1
  180. package/src/ia-bookreader/ia-bookreader.js +224 -0
  181. package/src/plugins/plugin.archive_analytics.js +84 -78
  182. package/src/plugins/plugin.autoplay.js +99 -104
  183. package/src/plugins/plugin.chapters.js +237 -191
  184. package/src/plugins/plugin.iframe.js +1 -1
  185. package/src/plugins/plugin.iiif.js +141 -0
  186. package/src/plugins/plugin.resume.js +53 -50
  187. package/src/plugins/plugin.text_selection.js +503 -175
  188. package/src/plugins/plugin.vendor-fullscreen.js +7 -7
  189. package/src/plugins/search/plugin.search.js +151 -127
  190. package/src/plugins/search/utils.js +43 -0
  191. package/src/plugins/search/view.js +37 -59
  192. package/src/plugins/tts/AbstractTTSEngine.js +75 -45
  193. package/src/plugins/tts/FestivalTTSEngine.js +21 -31
  194. package/src/plugins/tts/PageChunk.js +16 -23
  195. package/src/plugins/tts/PageChunkIterator.js +11 -17
  196. package/src/plugins/tts/WebTTSEngine.js +88 -72
  197. package/src/plugins/tts/plugin.tts.js +310 -350
  198. package/src/plugins/tts/utils.js +16 -26
  199. package/src/plugins/url/UrlPlugin.js +191 -0
  200. package/src/plugins/{plugin.url.js → url/plugin.url.js} +47 -18
  201. package/src/util/browserSniffing.js +22 -0
  202. package/src/util/docCookies.js +21 -2
  203. package/src/util/strings.js +1 -0
  204. package/tests/e2e/README.md +37 -0
  205. package/tests/e2e/autoplay.test.js +9 -6
  206. package/tests/e2e/base.test.js +8 -16
  207. package/tests/e2e/helpers/base.js +55 -50
  208. package/tests/e2e/helpers/debug.js +1 -1
  209. package/tests/e2e/helpers/mockSearch.js +19 -22
  210. package/tests/e2e/helpers/params.js +17 -0
  211. package/tests/e2e/helpers/rightToLeft.js +8 -14
  212. package/tests/e2e/helpers/search.js +73 -0
  213. package/tests/e2e/models/Navigation.js +20 -37
  214. package/tests/e2e/rightToLeft.test.js +4 -5
  215. package/tests/e2e/viewmode.test.js +40 -33
  216. package/tests/jest/BookNavigator/book-navigator.test.js +661 -0
  217. package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +43 -0
  218. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmark-edit.test.js +25 -26
  219. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmarks-list.test.js +41 -42
  220. package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +45 -0
  221. package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +67 -0
  222. package/tests/jest/BookNavigator/downloads/downloads.test.js +53 -0
  223. package/tests/jest/BookNavigator/search/search-provider.test.js +167 -0
  224. package/tests/{karma → jest}/BookNavigator/search/search-results.test.js +109 -60
  225. package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +49 -0
  226. package/tests/jest/BookNavigator/viewable-files/viewable-files-provider.test.js +80 -0
  227. package/tests/jest/BookNavigator/visual-adjustments.test.js +200 -0
  228. package/tests/{BookReader → jest/BookReader}/BookModel.test.js +74 -14
  229. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +193 -0
  230. package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +4 -4
  231. package/tests/jest/BookReader/Mode1UpLit.test.js +73 -0
  232. package/tests/jest/BookReader/Mode2Up.test.js +98 -0
  233. package/tests/jest/BookReader/Mode2UpLit.test.js +190 -0
  234. package/tests/jest/BookReader/ModeCoordinateSpace.test.js +16 -0
  235. package/tests/jest/BookReader/ModeSmoothZoom.test.js +218 -0
  236. package/tests/jest/BookReader/ModeThumb.test.js +71 -0
  237. package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +42 -29
  238. package/tests/jest/BookReader/PageContainer.test.js +238 -0
  239. package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +1 -1
  240. package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +3 -3
  241. package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
  242. package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +49 -0
  243. package/tests/jest/BookReader/utils/SelectionObserver.test.js +57 -0
  244. package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +1 -1
  245. package/tests/jest/BookReader/utils.test.js +250 -0
  246. package/tests/jest/BookReader.keyboard.test.js +190 -0
  247. package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +10 -2
  248. package/tests/{BookReader.test.js → jest/BookReader.test.js} +43 -53
  249. package/tests/jest/plugins/plugin.archive_analytics.test.js +20 -0
  250. package/tests/jest/plugins/plugin.autoplay.test.js +35 -0
  251. package/tests/jest/plugins/plugin.chapters.test.js +195 -0
  252. package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +4 -4
  253. package/tests/{plugins → jest/plugins}/plugin.resume.test.js +22 -35
  254. package/tests/jest/plugins/plugin.text_selection.test.js +316 -0
  255. package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +2 -2
  256. package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +19 -47
  257. package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +42 -9
  258. package/tests/jest/plugins/search/utils.js +25 -0
  259. package/tests/jest/plugins/search/utils.test.js +29 -0
  260. package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +30 -10
  261. package/tests/{plugins → jest/plugins}/tts/FestivalTTSEngine.test.js +4 -4
  262. package/tests/{plugins → jest/plugins}/tts/PageChunk.test.js +1 -1
  263. package/tests/{plugins → jest/plugins}/tts/PageChunkIterator.test.js +3 -3
  264. package/tests/{plugins → jest/plugins}/tts/WebTTSEngine.test.js +47 -1
  265. package/tests/{plugins → jest/plugins}/tts/utils.test.js +1 -60
  266. package/tests/jest/plugins/url/UrlPlugin.test.js +198 -0
  267. package/tests/{plugins → jest/plugins/url}/plugin.url.test.js +57 -18
  268. package/tests/jest/setup.js +3 -0
  269. package/tests/{util → jest/util}/browserSniffing.test.js +1 -1
  270. package/tests/jest/util/docCookies.test.js +24 -0
  271. package/tests/{util → jest/util}/strings.test.js +1 -1
  272. package/tests/{utils.js → jest/utils.js} +38 -0
  273. package/webpack.config.js +16 -10
  274. package/.babelrc +0 -12
  275. package/.dependabot/config.yml +0 -6
  276. package/.testcaferc.json +0 -5
  277. package/BookReader/bookreader-component-bundle.js +0 -1450
  278. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  279. package/BookReader/bookreader-component-bundle.js.map +0 -1
  280. package/BookReader/jquery-1.10.1.js +0 -2
  281. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  282. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  283. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  284. package/BookReader/plugins/plugin.mobile_nav.js +0 -2
  285. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  286. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  287. package/BookReaderDemo/IIIFBookReader.js +0 -207
  288. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  289. package/BookReaderDemo/demo-autoplay.html +0 -38
  290. package/BookReaderDemo/demo-iiif.js +0 -26
  291. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  292. package/karma.conf.js +0 -23
  293. package/src/BookNavigator/BookModel.js +0 -14
  294. package/src/BookNavigator/BookNavigator.js +0 -446
  295. package/src/BookNavigator/assets/book-loader.js +0 -27
  296. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  297. package/src/BookNavigator/search/a-search-result.js +0 -55
  298. package/src/BookReader/DebugConsole.js +0 -54
  299. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  300. package/src/ItemNavigator/ItemNavigator.js +0 -376
  301. package/src/ItemNavigator/providers/sharing.js +0 -29
  302. package/src/css/_MobileNav.scss +0 -194
  303. package/src/dragscrollable-br.js +0 -261
  304. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  305. package/src/plugins/plugin.mobile_nav.js +0 -287
  306. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  307. package/tests/BookReader/DebugConsole.test.js +0 -25
  308. package/tests/BookReader/Mode1Up.test.js +0 -164
  309. package/tests/BookReader/Mode2Up.test.js +0 -247
  310. package/tests/BookReader/PageContainer.test.js +0 -115
  311. package/tests/BookReader/utils.test.js +0 -109
  312. package/tests/e2e/helpers/desktopSearch.js +0 -72
  313. package/tests/e2e/helpers/mobileSearch.js +0 -85
  314. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  315. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  316. package/tests/karma/BookNavigator/search/search-provider.test.js +0 -23
  317. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  318. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  319. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  320. package/tests/plugins/plugin.autoplay.test.js +0 -52
  321. package/tests/plugins/plugin.chapters.test.js +0 -130
  322. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  323. package/tests/plugins/plugin.text_selection.test.js +0 -203
  324. package/tests/util/docCookies.test.js +0 -15
@@ -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.desktop.goLeft.visible).ok();
57
- await t.expect(nav.desktop.goRight.visible).ok();
58
- await t.expect(nav.desktop.mode1Up.visible).ok();
59
- await t.expect(nav.desktop.mode2Up.visible).ok();
60
- await t.expect(nav.desktop.modeThumb.visible).ok();
61
- await t.expect(nav.desktop.zoomIn.visible).ok();
62
- await t.expect(nav.desktop.zoomOut.visible).ok();
63
- await t.expect(nav.desktop.fullScreen.visible).ok();
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 => {
@@ -78,8 +78,8 @@ export function runBaseTests (br) {
78
78
 
79
79
  // Check if uses plugin.resume.js
80
80
  const usesResume = ClientFunction(() => {
81
- const hasResumePlugin = typeof(br.getResumeValue) !== "undefined";
82
- const hasResumeValue = hasResumePlugin ? br.getResumeValue() : false;
81
+ const hasResumePlugin = typeof(br._plugins.resume) !== "undefined";
82
+ const hasResumeValue = hasResumePlugin ? br._plugins.resume.getResumeValue() : false;
83
83
  return hasResumeValue;
84
84
  });
85
85
 
@@ -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.desktop.goNext);
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
@@ -96,7 +96,7 @@ export function runBaseTests (br) {
96
96
 
97
97
  if (await usesResume()) {
98
98
  await t.expect(isPageInUrl()).eql(true, initialUrl);
99
- await t.expect(isModeInUrl('2up')).eql(true, initialUrl)
99
+ await t.expect(isModeInUrl('2up')).eql(true, initialUrl);
100
100
  } else {
101
101
  // No plugin, no br-resume cookie
102
102
  await t.expect(getUrl()).notContains('#page/');
@@ -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.desktop.goNext);
112
+ await t.click(nav.goNext);
113
113
  await t.wait(PAGE_FLIP_WAIT_TIME);
114
- await t.click(nav.desktop.goNext);
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.desktop.goPrev);
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);
@@ -138,13 +138,13 @@ export function runBaseTests (br) {
138
138
 
139
139
  // we aren't showing the same image in the new pages
140
140
  await t.expect(prevImg1Src).notEql(prevImg2Src);
141
- })
141
+ });
142
142
 
143
143
  test('2up mode - Clicking `Next page` changes the page', async t => {
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.desktop.goNext);
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.desktop.goNext);
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);
@@ -168,75 +168,80 @@ export function runBaseTests (br) {
168
168
 
169
169
  // we aren't showing the same image in the new pages
170
170
  await t.expect(nextImg1Src).notEql(nextImg2Src);
171
- })
171
+ });
172
172
 
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.desktop.goNext);
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.desktop.goPrev);
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
- test('Clicking `2 page view` brings up 2 pages at a time', async t => {
185
+ test('Clicking `2 page view` brings up cur page + caching', async t => {
186
186
  const { nav } = br;
187
- await t.click(nav.desktop.mode2Up);
188
- await t.expect(Selector('.BRpagecontainer').count).eql(2);
187
+ await t.click(nav.mode2Up);
188
+ await t.expect(Selector('.BRpagecontainer.BRpage-visible').count).eql(1);
189
+ await t.expect(Selector('.BRpagecontainer').count).eql(3);
189
190
  });
190
191
 
191
192
  test('Clicking `1 page view` brings up 1 at a time', async t => {
192
193
  const { nav } = br;
193
- await t.click(nav.desktop.mode1Up);
194
+ await t.click(nav.mode1Up);
195
+
196
+ // Flip away from cover
197
+ await t.click(nav.goNext);
198
+ await t.wait(PAGE_FLIP_WAIT_TIME);
199
+
194
200
  // we usually pre-fetch the page in question & the 2 after it
195
201
  await t.expect(Selector('.BRpagecontainer').count).gte(3);
196
202
  });
197
203
 
198
204
  test('Clicking `thumbnail view` brings up all of the page thumbnails', async t => {
199
205
  const { nav } = br;
200
- await t.click(nav.desktop.modeThumb);
206
+ await t.click(nav.modeThumb);
201
207
  await t.expect(Selector('.BRpagecontainer').count).gte(3);
202
208
  });
203
209
 
204
210
  test('Clicking `zoom out` makes book smaller', async t => {
205
- const { nav, BRcontainer } = br;
206
- const book = BRcontainer.child(0);
211
+ const { nav } = br;
212
+ const page = Selector('.BRpagecontainer.BRpage-visible');
207
213
 
208
214
  await t.expect(br.BRcontainer.visible).ok();
209
- await t.expect(book.visible).ok();
210
- await t.expect(nav.desktop.zoomOut.visible).ok();
215
+ await t.expect(page.visible).ok();
216
+ await t.expect(nav.zoomOut.visible).ok();
211
217
 
212
- const initialBookHeight = await book.getBoundingClientRectProperty('height');
213
- const initialBookWidth = await book.getBoundingClientRectProperty('width');
218
+ const initialBookHeight = await page.getBoundingClientRectProperty('height');
219
+ const initialBookWidth = await page.getBoundingClientRectProperty('width');
214
220
 
215
- await t.click(nav.desktop.zoomOut);
221
+ await t.click(nav.zoomOut);
216
222
 
217
- const zoomOutBookHeight = await book.getBoundingClientRectProperty('height');
218
- const zoomOutBookWidth = await book.getBoundingClientRectProperty('width');
223
+ const zoomOutBookHeight = await page.getBoundingClientRectProperty('height');
224
+ const zoomOutBookWidth = await page.getBoundingClientRectProperty('width');
219
225
 
220
- await t.expect(zoomOutBookHeight).lte(initialBookHeight);
221
- await t.expect(zoomOutBookWidth).lte(initialBookWidth);
226
+ await t.expect(zoomOutBookHeight).lt(initialBookHeight);
227
+ await t.expect(zoomOutBookWidth).lt(initialBookWidth);
222
228
  });
223
229
 
224
230
  test('Clicking `zoom in` makes book larger', async t => {
225
- const { nav, BRcontainer } = br;
226
-
227
- const book = await BRcontainer.child(0);
231
+ const { nav } = br;
232
+ const page = Selector('.BRpagecontainer.BRpage-visible');
228
233
 
229
- await t.expect(BRcontainer.visible).ok();
230
- await t.expect(book.visible).ok();
231
- await t.expect(nav.desktop.zoomIn.visible).ok();
234
+ await t.expect(br.BRcontainer.visible).ok();
235
+ await t.expect(page.visible).ok();
236
+ await t.expect(nav.zoomIn.visible).ok();
232
237
 
233
- const initialBookHeight = await book.getBoundingClientRectProperty('height');
234
- const initialBookWidth = await book.getBoundingClientRectProperty('width');
238
+ const initialBookHeight = await page.getBoundingClientRectProperty('height');
239
+ const initialBookWidth = await page.getBoundingClientRectProperty('width');
235
240
 
236
- await t.click(nav.desktop.zoomIn);
241
+ await t.click(nav.zoomIn);
237
242
 
238
- const zoomInBookHeight = await book.getBoundingClientRectProperty('height');
239
- const zoomIntBookWidth = await book.getBoundingClientRectProperty('width');
243
+ const zoomInBookHeight = await page.getBoundingClientRectProperty('height');
244
+ const zoomIntBookWidth = await page.getBoundingClientRectProperty('width');
240
245
 
241
246
  await t.expect(zoomInBookHeight).gt(initialBookHeight);
242
247
  await t.expect(zoomIntBookWidth).gt(initialBookWidth);
@@ -248,10 +253,10 @@ export function runBaseTests (br) {
248
253
 
249
254
  // initial in-page
250
255
  await t.expect(BRcontainer.getBoundingClientRectProperty('width')).lte(windowWidth);
251
- await t.click(nav.desktop.fullScreen);
256
+ await t.click(nav.fullScreen);
252
257
  // full screen
253
258
  await t.expect(BRcontainer.getBoundingClientRectProperty('width')).eql(windowWidth);
254
- await t.click(nav.desktop.fullScreen);
259
+ await t.click(nav.fullScreen);
255
260
  // in-page
256
261
  await t.expect(BRcontainer.getBoundingClientRectProperty('width')).lte(windowWidth);
257
262
  });
@@ -10,4 +10,4 @@
10
10
  */
11
11
  export default async (t) => {
12
12
  await t.debug().setNativeDialogHandler(() => true);
13
- }
13
+ };
@@ -4,21 +4,18 @@ export const PAGE_FIRST_RESULT = 30;
4
4
 
5
5
  export const SEARCH_INSIDE_URL_RE = /https:\/\/ia[0-9]+\.us\.archive\.org\/fulltext\/inside\.php\?item_id=.*/;
6
6
 
7
- //adding jQueryxxxxxxxx-xxxxxxxx (semi-random numbers) from request url to returned search request object
8
7
  /** Mock response for a matching search term. */
9
8
  export function mockResponseFound(req, res) {
10
- const requestUrl = new URL(req.url);
11
- const jqueryUrl = requestUrl.searchParams.get("callback");
12
- const wholeString = jqueryUrl + '(' + JSON.stringify(MOCKED_RESPONSE_FOUND) + ')';
13
- res.setBody(wholeString);
9
+ res.headers['Access-Control-Allow-Origin'] = '*';
10
+ res.headers['Content-Type'] = 'application/json';
11
+ res.setBody(JSON.stringify(MOCKED_RESPONSE_FOUND));
14
12
  }
15
13
 
16
14
  /** Mock response for a matching search term. */
17
15
  export function mockResponseNotFound(req, res) {
18
- const requestUrl = new URL(req.url);
19
- const jqueryUrl = requestUrl.searchParams.get("callback");
20
- const wholeString = jqueryUrl + '(' + JSON.stringify(MOCKED_RESPONSE_NOT_FOUND) + ')';
21
- res.setBody(wholeString);
16
+ res.headers['Access-Control-Allow-Origin'] = '*';
17
+ res.headers['Content-Type'] = 'application/json';
18
+ res.setBody(JSON.stringify(MOCKED_RESPONSE_NOT_FOUND));
22
19
  }
23
20
 
24
21
  const PAGE_FIRST_RESULT_ADJUSTED = PAGE_FIRST_RESULT + 12;
@@ -30,7 +27,7 @@ const MOCKED_RESPONSE_NOT_FOUND = {
30
27
  "page_count": 1,
31
28
  "body_length": 666,
32
29
  "leaf0_missing": true,
33
- "matches": []
30
+ "matches": [],
34
31
  };
35
32
 
36
33
  const MOCKED_RESPONSE_FOUND = {
@@ -51,8 +48,8 @@ const MOCKED_RESPONSE_FOUND = {
51
48
  "b": 811,
52
49
  "t": 753,
53
50
  "page": PAGE_FIRST_RESULT_ADJUSTED,
54
- "l": 894
55
- }
51
+ "l": 894,
52
+ },
56
53
  ],
57
54
  "b": 1935,
58
55
  "t": 686,
@@ -60,9 +57,9 @@ const MOCKED_RESPONSE_FOUND = {
60
57
  "r": 1704,
61
58
  "l": 148,
62
59
  "page_height": 2940,
63
- "page": PAGE_FIRST_RESULT_ADJUSTED
64
- }
65
- ]
60
+ "page": PAGE_FIRST_RESULT_ADJUSTED,
61
+ },
62
+ ],
66
63
  },
67
64
  {
68
65
  "text": "That when the Dodger, and his accomplished friend Master Bates, joined in the hue-and-cry which was raised at Oliver's heels, in consequence of their executing an illegal conveyance of Mr. Brownlow's personal property, as has been already described, they were actuated by a very laudable and becoming regard for themselves ; and forasmuch as the freedom of the subject and the liberty of the individual are among the first and proudest boasts of a true-hearted Englishman, so, I need hardly beg the reader to observe, that this action should tend to exalt them in the opinion of all jniblic and patriotic men, in almost as great a degree as this strong proof of their anxiety for their own preservation and safety goes to corroborate and confirm the little code of laws which certain profound and sound-judging philosophers have laid down as the mainsprings of all Nature's deeds and actions : the said philosophers very wisely reducing the good lady's proceedings to matters of maxim and {{{" + TEST_TEXT_FOUND + "}}} : and, by a very neat and pretty compliment to her exalted wisdom and understanding, putting entirely out of sight any considerations of heart, or generous impulse and feeling. For, these are matters totally beneath a female who is acknowledged by universal admission to be far above the numerous little foibles and weaknesses of her sex.",
@@ -74,8 +71,8 @@ const MOCKED_RESPONSE_FOUND = {
74
71
  "b": 2567,
75
72
  "t": 2507,
76
73
  "page": 162,
77
- "l": 441
78
- }
74
+ "l": 441,
75
+ },
79
76
  ],
80
77
  "b": 2631,
81
78
  "t": 1439,
@@ -83,11 +80,11 @@ const MOCKED_RESPONSE_FOUND = {
83
80
  "r": 1620,
84
81
  "l": 56,
85
82
  "page_height": 2940,
86
- "page": 162
87
- }
88
- ]
89
- }
90
- ]
83
+ "page": 162,
84
+ },
85
+ ],
86
+ },
87
+ ],
91
88
  };
92
89
 
93
90
  export const SEARCH_MATCHES_LENGTH = MOCKED_RESPONSE_FOUND.matches.length;
@@ -0,0 +1,17 @@
1
+ // @ts-check
2
+ class TestParams {
3
+ baseUrl = process.env.BASE_URL?.replace(/\/+$/, '') ?? 'http://127.0.0.1:8000'
4
+ ocaids = process.env.OCAIDS?.split(',') ?? null;
5
+ /** Whether the url we're testing is a prod (or near prod) IA url, or a demos url */
6
+ isIA = new URL(this.baseUrl).hostname.endsWith('archive.org');
7
+
8
+ /** @param {string} ocaid */
9
+ getArchiveUrl(ocaid) {
10
+ return this.isIA ? `${this.baseUrl}/details/${ocaid}`
11
+ // Otherwise it's a demo page
12
+ : `${this.baseUrl}/BookReaderDemo/demo-internetarchive.html?ocaid=${ocaid}`;
13
+ }
14
+ }
15
+
16
+ const params = new TestParams();
17
+ export default params;
@@ -4,26 +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.desktop.mode2Up);
7
+ await t.click(nav.mode2Up);
8
8
 
9
- //checking right leaf edge has 0 width
10
- await t.expect(BRcontainer.find('.BRleafEdgeR').getStyleProperty('width')).eql('0px');
11
-
12
- //checking empty page before the cover is more to the left than the first page
13
- const rightEmptyPage = BRcontainer.find('.BRpagecontainer.BRemptypage');
14
- const leftPage = BRcontainer.find('.BRpagecontainer.pagediv0');
15
- const leftPageLDistance = leftPage.getBoundingClientRectProperty('left');
16
- const rightPageLDistance = rightEmptyPage.getBoundingClientRectProperty('left');
17
- await t.expect(rightPageLDistance).gt(await leftPageLDistance);
9
+ //checking right leaf edge is not in tree
10
+ await t.expect(BRcontainer.find('.br-mode-2up__leafs--left').count).eql(1);
11
+ await t.expect(BRcontainer.find('.br-mode-2up__leafs--right').count).eql(0);
18
12
 
19
13
  //checks slider is in correct position
20
- await t.expect(nav.desktop.sliderRange.getStyleProperty('width')).eql('0px');
14
+ await t.expect(nav.sliderRange.getStyleProperty('width')).eql('0px');
21
15
  });
22
16
 
23
17
  test('Right to Left - assuring flipping left goes to next page', async t => {
24
18
  const { nav } = br;
25
- await t.click(nav.desktop.mode2Up);
26
- await t.click(nav.desktop.goLeft);
27
- await t.expect(getPageUrl()).match(/page\/n2/);
19
+ await t.click(nav.mode2Up);
20
+ await t.click(nav.goLeft);
21
+ await t.expect(getPageUrl()).match(/page\/n1/);
28
22
  });
29
23
  }
@@ -0,0 +1,73 @@
1
+ import { ClientFunction, RequestMock } from 'testcafe';
2
+ import { SEARCH_INSIDE_URL_RE , mockResponseFound, mockResponseNotFound,
3
+ TEST_TEXT_FOUND, TEST_TEXT_NOT_FOUND, PAGE_FIRST_RESULT, SEARCH_MATCHES_LENGTH } from './mockSearch';
4
+
5
+
6
+ export function runSearchTests(br) {
7
+ //building mock response for successful and unsuccessful search
8
+ const mockFound = RequestMock()
9
+ .onRequestTo(SEARCH_INSIDE_URL_RE )
10
+ .respond(mockResponseFound, 202);
11
+
12
+ const mockNotFound = RequestMock()
13
+ .onRequestTo(SEARCH_INSIDE_URL_RE )
14
+ .respond(mockResponseNotFound, 202);
15
+
16
+
17
+ test
18
+ .requestHooks(mockFound)('Search - successful search', async t => {
19
+ const nav = br.nav;
20
+
21
+ //assuring that the search bar is enabled
22
+ await t.expect(nav.searchIcon.visible).ok();
23
+ await t.click(nav.searchIcon);
24
+
25
+ //testing search for a word found in the book
26
+ await t.selectText(nav.searchBox).pressKey('delete');
27
+ // FIXME: Why is it only typing every other letter?!?!
28
+ await t.typeText(nav.searchBox, TEST_TEXT_FOUND.split('').join('_'));
29
+ await t.pressKey('enter');
30
+
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
+
38
+ //checking url
39
+ const getPageUrl = ClientFunction(() => window.location.href.toString());
40
+ await t.expect(getPageUrl()).contains(TEST_TEXT_FOUND);
41
+
42
+ //checks clicking on first search pin opens correct page
43
+ await t.click(nav.searchPin);
44
+ await t.expect(getPageUrl()).contains(PAGE_FIRST_RESULT);
45
+
46
+ //checks highlight on result page is visible
47
+ const highlight = br.shell.find(".searchHiliteLayer rect");
48
+ await t.expect(highlight.visible).ok();
49
+
50
+ });
51
+
52
+
53
+ test
54
+ .requestHooks(mockNotFound)('Search - unsuccessful search', async t => {
55
+ const nav = br.nav;
56
+
57
+ //assuring that the search bar is enabled
58
+ await t.expect(nav.searchIcon.visible).ok();
59
+ await t.click(nav.searchIcon);
60
+
61
+ //testing search for a word not found in the book
62
+ await t.selectText(nav.searchBox).pressKey('delete');
63
+ // FIXME: Why is it only typing every other letter?!?!
64
+ await t.typeText(nav.searchBox, TEST_TEXT_NOT_FOUND.split('').join('_'));
65
+ await t.pressKey('enter');
66
+ await t.expect(nav.searchPin.child('.BRquery').child('main').withText(TEST_TEXT_NOT_FOUND).exists).notOk();
67
+
68
+ const getPageUrl = ClientFunction(() => window.location.href.toString());
69
+ await t.expect(getPageUrl()).contains(TEST_TEXT_NOT_FOUND);
70
+ });
71
+
72
+
73
+ }
@@ -5,52 +5,35 @@ export default class Navigation {
5
5
  constructor() {
6
6
  this.topNavShell = new Selector('.BRtoolbar');
7
7
  this.bottomNavShell = new Selector('.BRfooter');
8
- this.mobileMenu = new Selector('.BRmobileMenu');
9
- this.desktop = new DesktopNav(this.bottomNavShell, this.topNavShell);
10
- this.mobile = new MobileNav(this.mobileMenu, this.topNavShell);
11
- }
12
- }
8
+ this.itemNav = Selector('ia-bookreader').shadowRoot().find('iaux-item-navigator').shadowRoot();
13
9
 
14
- /**
15
- * DesktopNav Model
16
- * @class
17
- * @classdesc defines DesktopNav base elements
18
- */
19
- class DesktopNav {
20
- constructor(bottomToolbar, topToolbar) {
21
10
  // flipping
22
- this.goLeft = bottomToolbar.find('.BRicon.book_left');
23
- this.goRight = bottomToolbar.find('.BRicon.book_right');
24
- this.goNext = bottomToolbar.find('.BRicon.book_flip_next');
25
- this.goPrev = bottomToolbar.find('.BRicon.book_flip_prev');
11
+ this.goLeft = this.bottomNavShell.find('.BRicon.book_left');
12
+ this.goRight = this.bottomNavShell.find('.BRicon.book_right');
13
+ this.goNext = this.bottomNavShell.find('.BRicon.book_flip_next');
14
+ this.goPrev = this.bottomNavShell.find('.BRicon.book_flip_prev');
26
15
 
27
16
  // mode switching
28
- this.mode1Up = bottomToolbar.find('.BRicon.onepg');
29
- this.mode2Up = bottomToolbar.find('.BRicon.twopg');
30
- this.modeThumb = bottomToolbar.find('.BRicon.thumb');
31
- this.viewmode = bottomToolbar.find('.BRicon.viewmode');
17
+ this.mode1Up = this.bottomNavShell.find('.BRicon.onepg');
18
+ this.mode2Up = this.bottomNavShell.find('.BRicon.twopg');
19
+ this.modeThumb = this.bottomNavShell.find('.BRicon.thumb');
20
+ this.viewmode = this.bottomNavShell.find('.BRicon.viewmode');
32
21
 
33
22
  // zoom
34
- this.zoomIn = bottomToolbar.find('.BRicon.zoom_in');
35
- this.zoomOut = bottomToolbar.find('.BRicon.zoom_out');
23
+ this.zoomIn = this.bottomNavShell.find('.BRicon.zoom_in');
24
+ this.zoomOut = this.bottomNavShell.find('.BRicon.zoom_out');
36
25
 
37
26
  // search
38
- this.searchBox = topToolbar.find('.BRbooksearch.desktop');
39
- this.searchPin = bottomToolbar.find('.BRsearch');
40
- this.searchNavigation = bottomToolbar.find('.BRsearch-navigation');
27
+ this.searchIcon = this.itemNav.find('button.shortcut.search');
28
+ this.searchBox = this.itemNav
29
+ .find('ia-menu-slider').shadowRoot()
30
+ .find('ia-book-search-results').shadowRoot()
31
+ .find('input[name=query]');
32
+ this.searchPin = this.bottomNavShell.find('.BRsearch');
33
+ this.searchNavigation = this.bottomNavShell.find('.BRsearch-navigation');
41
34
 
42
35
  // other
43
- this.fullScreen = bottomToolbar.find('.BRicon.full');
44
- this.sliderRange = bottomToolbar.find('.ui-slider-range');
45
- }
46
- }
47
-
48
- class MobileNav {
49
- constructor(mobileMenu, topToolbar) {
50
- this.hamburgerButton = topToolbar.find('.BRmobileHamburger');
51
- this.menuSearchButton = mobileMenu.find('.BRmobileMenu__search');
52
- this.searchBox = mobileMenu.find('#BRsearch_tray');
53
- this.searchResults = mobileMenu.find('[data-id="results"]');
54
- this.searchResultText = this.searchResults.child(0).find('p');
36
+ this.fullScreen = this.bottomNavShell.find('.BRicon.full');
37
+ this.sliderRange = this.bottomNavShell.find('.ui-slider-range');
55
38
  }
56
39
  }
@@ -1,16 +1,15 @@
1
1
  import { runBaseTests } from './helpers/base';
2
2
  import { runRightToLeftTests } from './helpers/rightToLeft';
3
+ import params from './helpers/params';
3
4
 
4
5
  import BookReader from './models/BookReader';
5
6
 
6
- const { BASE_URL } = process.env;
7
- const DEMO_PATH = 'demo-internetarchive.html?ocaid=';
8
- const OCAIDS = [
7
+ const ocaids = params.ocaids || [
9
8
  'gendaitankashu00meijuoft', // Right to Left book
10
9
  ];
11
10
 
12
- OCAIDS.forEach(ocaid => {
13
- const url = `${BASE_URL}${DEMO_PATH}${ocaid}`;
11
+ ocaids.forEach(ocaid => {
12
+ const url = `${params.getArchiveUrl(ocaid)}`;
14
13
 
15
14
  fixture `Base Tests for right to left book: ${ocaid}`.page `${url}`;
16
15
  runBaseTests(new BookReader({ pageProgression: 'rl' }));
@@ -1,37 +1,44 @@
1
1
  import { Selector } from 'testcafe';
2
2
  import BookReader from './models/BookReader';
3
+ import params from './helpers/params';
3
4
 
4
- const { BASE_URL } = process.env;
5
-
6
- fixture `Viewmode carousel`.page `${BASE_URL}viewmode-cycle.html`;
7
-
8
- test('Clicking `view mode` cycles through view modes', async t => {
9
- const { nav } = (new BookReader());
10
-
11
- // viewmode button only appear on mobile devices
12
- await t.resizeWindow(400, 800);
13
- // Flip forward one
14
- await t.pressKey('right');
15
-
16
- // 2up to thumb
17
- await t.click(nav.desktop.viewmode);
18
- const thumbnailContainer = Selector('.BRmodeThumb');
19
- await t.expect(thumbnailContainer.visible).ok();
20
- const thumbImages = thumbnailContainer.find('.BRpageview img');
21
- await t.expect(thumbImages.count).gt(0);
22
-
23
- // thumb to 1up
24
- await t.click(nav.desktop.viewmode);
25
- const onePageViewContainer = Selector('.BRpageview');
26
- await t.expect(onePageViewContainer.visible).ok();
27
- const onePageImages = onePageViewContainer.find('.BRmode1up .BRpagecontainer');
28
- // we usually pre-fetch the page in question & 1 before/after it
29
- await t.expect(onePageImages.count).gte(3);
30
-
31
- // 1up to 2up
32
- await t.click(nav.desktop.viewmode);
33
- const twoPageContainer = Selector('.BRtwopageview');
34
- await t.expect(twoPageContainer.visible).ok();
35
- const twoPageImages = twoPageContainer.find('img.BRpageimage');
36
- await t.expect(twoPageImages.count).gte(2);
5
+ const ocaids = params.ocaids || ['goody'];
6
+
7
+ ocaids.forEach(ocaid => {
8
+ const url = params.getArchiveUrl(ocaid);
9
+
10
+ fixture `Viewmode carousel`.page `${url}`;
11
+
12
+ test('Clicking `view mode` cycles through view modes', async t => {
13
+ const { nav } = (new BookReader());
14
+
15
+ // viewmode button only appear on mobile devices
16
+ await t.resizeWindow(400, 800);
17
+ // Flip forward one
18
+ await t.pressKey('right');
19
+ await t.pressKey('right');
20
+ await t.pressKey('right');
21
+
22
+ // 1up to 2up
23
+ await t.click(nav.viewmode);
24
+ const twoPageContainer = Selector('.BRmode2up');
25
+ await t.expect(twoPageContainer.visible).ok();
26
+ const twoPageImages = twoPageContainer.find('img.BRpageimage');
27
+ await t.expect(twoPageImages.count).gte(2);
28
+
29
+ // 2up to thumb
30
+ await t.click(nav.viewmode);
31
+ const thumbnailContainer = Selector('.BRmodeThumb');
32
+ await t.expect(thumbnailContainer.visible).ok();
33
+ const thumbImages = thumbnailContainer.find('.BRpageview img');
34
+ await t.expect(thumbImages.count).gt(0);
35
+
36
+ // thumb to 1up
37
+ await t.click(nav.viewmode);
38
+ const onePageViewContainer = Selector('br-mode-1up');
39
+ await t.expect(onePageViewContainer.visible).ok();
40
+ const onePageImages = onePageViewContainer.find('.BRmode1up .BRpagecontainer');
41
+ // we usually pre-fetch the page in question & 1 before/after it
42
+ await t.expect(onePageImages.count).gte(2);
43
+ });
37
44
  });