@internetarchive/bookreader 5.0.0-3 → 5.0.0-30-d

Sign up to get free protection for your applications and to get access to all the features.
Files changed (391) hide show
  1. package/.eslintrc.js +17 -5
  2. package/.github/dependabot.yml +8 -0
  3. package/.github/workflows/node.js.yml +10 -1
  4. package/.husky/_/husky.sh +30 -0
  5. package/.testcaferc.js +10 -0
  6. package/BookReader/BookReader.css +75 -323
  7. package/BookReader/BookReader.js +32261 -2
  8. package/BookReader/BookReader.js.map +1 -1
  9. package/BookReader/ia-bookreader-bundle.js +15235 -0
  10. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  11. package/BookReader/icons/close-circle-dark.svg +1 -0
  12. package/BookReader/icons/voice.svg +1 -0
  13. package/BookReader/jquery-1.10.1.js +108 -2
  14. package/BookReader/plugins/plugin.archive_analytics.js +170 -1
  15. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  16. package/BookReader/plugins/plugin.autoplay.js +163 -1
  17. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  18. package/BookReader/plugins/plugin.chapters.js +333 -1
  19. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  20. package/BookReader/plugins/plugin.iframe.js +72 -1
  21. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  22. package/BookReader/plugins/plugin.mobile_nav.js +332 -1
  23. package/BookReader/plugins/plugin.mobile_nav.js.map +1 -1
  24. package/BookReader/plugins/plugin.resume.js +241 -1
  25. package/BookReader/plugins/plugin.resume.js.map +1 -1
  26. package/BookReader/plugins/plugin.search.js +1261 -1
  27. package/BookReader/plugins/plugin.search.js.map +1 -1
  28. package/BookReader/plugins/plugin.text_selection.js +839 -1
  29. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  30. package/BookReader/plugins/plugin.tts.js +9115 -2
  31. package/BookReader/plugins/plugin.tts.js.map +1 -1
  32. package/BookReader/plugins/plugin.url.js +811 -1
  33. package/BookReader/plugins/plugin.url.js.map +1 -1
  34. package/BookReader/plugins/plugin.vendor-fullscreen.js +326 -1
  35. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  36. package/BookReader/webcomponents-bundle.js +412 -0
  37. package/BookReader/webcomponents-bundle.js.map +1 -0
  38. package/BookReaderDemo/BookReaderDemo.css +14 -1
  39. package/BookReaderDemo/IADemoBr.js +107 -0
  40. package/BookReaderDemo/demo-advanced.html +1 -1
  41. package/BookReaderDemo/demo-autoplay.html +1 -0
  42. package/BookReaderDemo/demo-embed-iframe-src.html +1 -0
  43. package/BookReaderDemo/demo-fullscreen-mobile.html +1 -0
  44. package/BookReaderDemo/demo-fullscreen.html +1 -0
  45. package/BookReaderDemo/demo-iiif.html +1 -0
  46. package/BookReaderDemo/demo-internetarchive.html +66 -18
  47. package/BookReaderDemo/demo-multiple.html +1 -0
  48. package/BookReaderDemo/demo-preview-pages.html +1 -0
  49. package/BookReaderDemo/demo-simple.html +1 -0
  50. package/BookReaderDemo/demo-vendor-fullscreen.html +1 -0
  51. package/BookReaderDemo/immersion-1up.html +1 -0
  52. package/BookReaderDemo/immersion-mode.html +1 -0
  53. package/BookReaderDemo/toggle_controls.html +1 -0
  54. package/BookReaderDemo/view_mode.html +1 -0
  55. package/BookReaderDemo/viewmode-cycle.html +1 -2
  56. package/CHANGELOG.md +114 -0
  57. package/babel.config.js +18 -0
  58. package/index.html +3 -0
  59. package/jsconfig.json +19 -0
  60. package/package.json +45 -27
  61. package/src/BookNavigator/assets/button-base.js +8 -1
  62. package/src/BookNavigator/assets/ia-logo.js +17 -0
  63. package/src/BookNavigator/assets/icon_sort_asc.js +5 -0
  64. package/src/BookNavigator/assets/icon_sort_desc.js +5 -0
  65. package/src/BookNavigator/assets/icon_sort_neutral.js +5 -0
  66. package/src/BookNavigator/assets/icon_volumes.js +11 -0
  67. package/src/BookNavigator/book-navigator.js +528 -0
  68. package/src/BookNavigator/bookmarks/bookmark-button.js +2 -1
  69. package/src/BookNavigator/bookmarks/bookmark-edit.js +2 -1
  70. package/src/BookNavigator/bookmarks/bookmarks-list.js +1 -0
  71. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +4 -9
  72. package/src/BookNavigator/bookmarks/bookmarks-provider.js +32 -11
  73. package/src/BookNavigator/bookmarks/ia-bookmarks.js +88 -43
  74. package/src/BookNavigator/downloads/downloads-provider.js +22 -16
  75. package/src/BookNavigator/downloads/downloads.js +16 -23
  76. package/src/BookNavigator/search/a-search-result.js +1 -0
  77. package/src/BookNavigator/search/search-provider.js +54 -20
  78. package/src/BookNavigator/search/search-results.js +7 -18
  79. package/src/BookNavigator/sharing.js +27 -0
  80. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +10 -12
  81. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +1 -0
  82. package/src/BookNavigator/volumes/volumes-provider.js +114 -0
  83. package/src/BookNavigator/volumes/volumes.js +189 -0
  84. package/src/BookReader/DebugConsole.js +3 -3
  85. package/src/BookReader/DragScrollable.js +233 -0
  86. package/src/BookReader/Mode1Up.js +50 -351
  87. package/src/BookReader/Mode1UpLit.js +434 -0
  88. package/src/BookReader/Mode2Up.js +94 -72
  89. package/src/BookReader/ModeSmoothZoom.js +177 -0
  90. package/src/BookReader/ModeThumb.js +16 -8
  91. package/src/BookReader/Navbar/Navbar.js +2 -31
  92. package/src/BookReader/PageContainer.js +47 -2
  93. package/src/BookReader/ReduceSet.js +1 -1
  94. package/src/BookReader/Toolbar/Toolbar.js +5 -5
  95. package/src/BookReader/options.js +10 -0
  96. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  97. package/src/BookReader/utils.js +68 -13
  98. package/src/BookReader.js +316 -232
  99. package/src/assets/icons/close-circle-dark.svg +1 -0
  100. package/src/assets/icons/voice.svg +1 -0
  101. package/src/css/BookReader.scss +0 -12
  102. package/src/css/_BRComponent.scss +1 -1
  103. package/src/css/_BRmain.scss +19 -24
  104. package/src/css/_BRnav.scss +4 -26
  105. package/src/css/_BRpages.scss +35 -0
  106. package/src/css/_BRsearch.scss +11 -215
  107. package/src/css/_TextSelection.scss +1 -17
  108. package/src/css/_controls.scss +16 -3
  109. package/src/css/_icons.scss +6 -0
  110. package/src/ia-bookreader/ia-bookreader.js +206 -0
  111. package/src/plugins/plugin.chapters.js +15 -18
  112. package/src/plugins/plugin.mobile_nav.js +11 -10
  113. package/src/plugins/plugin.resume.js +3 -3
  114. package/src/plugins/plugin.text_selection.js +17 -29
  115. package/src/plugins/plugin.vendor-fullscreen.js +4 -4
  116. package/src/plugins/search/plugin.search.js +113 -104
  117. package/src/plugins/search/view.js +48 -163
  118. package/src/plugins/tts/AbstractTTSEngine.js +7 -0
  119. package/src/plugins/tts/FestivalTTSEngine.js +2 -2
  120. package/src/plugins/tts/WebTTSEngine.js +5 -0
  121. package/src/plugins/tts/plugin.tts.js +67 -102
  122. package/src/plugins/url/UrlPlugin.js +184 -0
  123. package/src/plugins/url/plugin.url.js +220 -0
  124. package/{src → stat}/BookNavigator/BookModel.js +0 -0
  125. package/{src → stat}/BookNavigator/BookNavigator.js +151 -104
  126. package/stat/BookNavigator/assets/bookmark-colors.js +15 -0
  127. package/stat/BookNavigator/assets/button-base.js +61 -0
  128. package/stat/BookNavigator/assets/ia-logo.js +17 -0
  129. package/stat/BookNavigator/assets/icon_checkmark.js +6 -0
  130. package/stat/BookNavigator/assets/icon_close.js +3 -0
  131. package/stat/BookNavigator/assets/icon_sort_asc.js +5 -0
  132. package/stat/BookNavigator/assets/icon_sort_desc.js +5 -0
  133. package/stat/BookNavigator/assets/icon_sort_neutral.js +5 -0
  134. package/stat/BookNavigator/assets/icon_volumes.js +11 -0
  135. package/stat/BookNavigator/bookmarks/bookmark-button.js +64 -0
  136. package/stat/BookNavigator/bookmarks/bookmark-edit.js +215 -0
  137. package/stat/BookNavigator/bookmarks/bookmarks-list.js +285 -0
  138. package/stat/BookNavigator/bookmarks/bookmarks-loginCTA.js +28 -0
  139. package/stat/BookNavigator/bookmarks/bookmarks-provider.js +56 -0
  140. package/stat/BookNavigator/bookmarks/ia-bookmarks.js +523 -0
  141. package/{src → stat}/BookNavigator/br-fullscreen-mgr.js +1 -2
  142. package/stat/BookNavigator/delete-modal-actions.js +49 -0
  143. package/stat/BookNavigator/downloads/downloads-provider.js +72 -0
  144. package/stat/BookNavigator/downloads/downloads.js +139 -0
  145. package/stat/BookNavigator/provider-config.js +0 -0
  146. package/stat/BookNavigator/search/a-search-result.js +55 -0
  147. package/stat/BookNavigator/search/search-provider.js +180 -0
  148. package/stat/BookNavigator/search/search-results.js +360 -0
  149. package/stat/BookNavigator/sharing.js +31 -0
  150. package/stat/BookNavigator/visual-adjustments/visual-adjustments-provider.js +94 -0
  151. package/stat/BookNavigator/visual-adjustments/visual-adjustments.js +280 -0
  152. package/stat/BookNavigator/volumes/volumes-provider.js +83 -0
  153. package/stat/BookNavigator/volumes/volumes.js +178 -0
  154. package/stat/BookReader/BookModel.js +518 -0
  155. package/stat/BookReader/DebugConsole.js +54 -0
  156. package/stat/BookReader/DragScrollable.js +233 -0
  157. package/stat/BookReader/ImageCache.js +116 -0
  158. package/stat/BookReader/Mode1Up.js +102 -0
  159. package/stat/BookReader/Mode1UpLit.js +434 -0
  160. package/stat/BookReader/Mode2Up.js +1372 -0
  161. package/stat/BookReader/ModeSmoothZoom.js +177 -0
  162. package/stat/BookReader/ModeThumb.js +344 -0
  163. package/stat/BookReader/Navbar/Navbar.js +310 -0
  164. package/stat/BookReader/PageContainer.js +120 -0
  165. package/stat/BookReader/ReduceSet.js +26 -0
  166. package/stat/BookReader/Toolbar/Toolbar.js +384 -0
  167. package/stat/BookReader/events.js +20 -0
  168. package/stat/BookReader/options.js +324 -0
  169. package/stat/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  170. package/stat/BookReader/utils/classes.js +36 -0
  171. package/stat/BookReader/utils.js +240 -0
  172. package/stat/BookReader.js +2550 -0
  173. package/{src → stat}/BookReaderComponent/BookReaderComponent.js +16 -11
  174. package/stat/assets/icons/1up.svg +12 -0
  175. package/stat/assets/icons/2up.svg +15 -0
  176. package/stat/assets/icons/advance.svg +26 -0
  177. package/stat/assets/icons/chevron-right.svg +1 -0
  178. package/stat/assets/icons/close-circle-dark.svg +1 -0
  179. package/stat/assets/icons/close-circle.svg +1 -0
  180. package/stat/assets/icons/fullscreen.svg +17 -0
  181. package/stat/assets/icons/fullscreen_exit.svg +17 -0
  182. package/stat/assets/icons/hamburger.svg +15 -0
  183. package/stat/assets/icons/left-arrow.svg +12 -0
  184. package/stat/assets/icons/magnify-minus.svg +16 -0
  185. package/stat/assets/icons/magnify-plus.svg +17 -0
  186. package/stat/assets/icons/magnify.svg +15 -0
  187. package/stat/assets/icons/pause.svg +23 -0
  188. package/stat/assets/icons/play.svg +22 -0
  189. package/stat/assets/icons/playback-speed.svg +34 -0
  190. package/stat/assets/icons/read-aloud.svg +22 -0
  191. package/stat/assets/icons/review.svg +22 -0
  192. package/stat/assets/icons/thumbnails.svg +17 -0
  193. package/stat/assets/icons/voice.svg +1 -0
  194. package/stat/assets/icons/volume-full.svg +22 -0
  195. package/stat/assets/images/BRicons.png +0 -0
  196. package/stat/assets/images/BRicons.svg +94 -0
  197. package/stat/assets/images/BRicons_ia.png +0 -0
  198. package/stat/assets/images/back_pages.png +0 -0
  199. package/stat/assets/images/book_bottom_icon.png +0 -0
  200. package/stat/assets/images/book_down_icon.png +0 -0
  201. package/stat/assets/images/book_left_icon.png +0 -0
  202. package/stat/assets/images/book_leftmost_icon.png +0 -0
  203. package/stat/assets/images/book_right_icon.png +0 -0
  204. package/stat/assets/images/book_rightmost_icon.png +0 -0
  205. package/stat/assets/images/book_top_icon.png +0 -0
  206. package/stat/assets/images/book_up_icon.png +0 -0
  207. package/stat/assets/images/books_graphic.svg +177 -0
  208. package/stat/assets/images/booksplit.png +0 -0
  209. package/stat/assets/images/control_pause_icon.png +0 -0
  210. package/stat/assets/images/control_play_icon.png +0 -0
  211. package/stat/assets/images/embed_icon.png +0 -0
  212. package/stat/assets/images/icon-home-ia.png +0 -0
  213. package/stat/assets/images/icon_OL-logo-xs.png +0 -0
  214. package/stat/assets/images/icon_alert-xs.png +0 -0
  215. package/stat/assets/images/icon_book.svg +12 -0
  216. package/stat/assets/images/icon_bookmark.svg +12 -0
  217. package/stat/assets/images/icon_close-pop.png +0 -0
  218. package/stat/assets/images/icon_download.png +0 -0
  219. package/stat/assets/images/icon_gear.svg +14 -0
  220. package/stat/assets/images/icon_hamburger.svg +20 -0
  221. package/stat/assets/images/icon_home.png +0 -0
  222. package/stat/assets/images/icon_home.svg +21 -0
  223. package/stat/assets/images/icon_home_ia.png +0 -0
  224. package/stat/assets/images/icon_indicator.png +0 -0
  225. package/stat/assets/images/icon_info.svg +11 -0
  226. package/stat/assets/images/icon_one_page.svg +8 -0
  227. package/stat/assets/images/icon_pause.svg +1 -0
  228. package/stat/assets/images/icon_play.svg +1 -0
  229. package/stat/assets/images/icon_playback-rate.svg +15 -0
  230. package/stat/assets/images/icon_return.png +0 -0
  231. package/stat/assets/images/icon_search_button.svg +8 -0
  232. package/stat/assets/images/icon_share.svg +9 -0
  233. package/stat/assets/images/icon_skip-ahead.svg +6 -0
  234. package/stat/assets/images/icon_skip-back.svg +13 -0
  235. package/stat/assets/images/icon_speaker.svg +18 -0
  236. package/stat/assets/images/icon_speaker_open.svg +10 -0
  237. package/stat/assets/images/icon_thumbnails.svg +12 -0
  238. package/stat/assets/images/icon_toc.svg +5 -0
  239. package/stat/assets/images/icon_two_pages.svg +9 -0
  240. package/stat/assets/images/icon_zoomer.png +0 -0
  241. package/stat/assets/images/loading.gif +0 -0
  242. package/stat/assets/images/logo_icon.png +0 -0
  243. package/stat/assets/images/marker_chap-off.png +0 -0
  244. package/stat/assets/images/marker_chap-off.svg +11 -0
  245. package/stat/assets/images/marker_chap-off_ia.png +0 -0
  246. package/stat/assets/images/marker_chap-on.png +0 -0
  247. package/stat/assets/images/marker_chap-on.svg +11 -0
  248. package/stat/assets/images/marker_srch-on.svg +11 -0
  249. package/stat/assets/images/marker_srchchap-off.png +0 -0
  250. package/stat/assets/images/marker_srchchap-on.png +0 -0
  251. package/stat/assets/images/nav_control-dn.png +0 -0
  252. package/stat/assets/images/nav_control-dn_ia.png +0 -0
  253. package/stat/assets/images/nav_control-up.png +0 -0
  254. package/stat/assets/images/nav_control-up_ia.png +0 -0
  255. package/stat/assets/images/nav_control.png +0 -0
  256. package/stat/assets/images/one_page_mode_icon.png +0 -0
  257. package/stat/assets/images/paper-badge.png +0 -0
  258. package/stat/assets/images/print_icon.png +0 -0
  259. package/stat/assets/images/progressbar.gif +0 -0
  260. package/stat/assets/images/right_edges.png +0 -0
  261. package/stat/assets/images/slider.png +0 -0
  262. package/stat/assets/images/slider_ia.png +0 -0
  263. package/stat/assets/images/thumbnail_mode_icon.png +0 -0
  264. package/stat/assets/images/transparent.png +0 -0
  265. package/stat/assets/images/two_page_mode_icon.png +0 -0
  266. package/stat/assets/images/zoom_in_icon.png +0 -0
  267. package/stat/assets/images/zoom_out_icon.png +0 -0
  268. package/stat/css/BookReader.scss +89 -0
  269. package/stat/css/_BRBookmarks.scss +29 -0
  270. package/stat/css/_BRComponent.scss +13 -0
  271. package/stat/css/_BRfloat.scss +197 -0
  272. package/stat/css/_BRicon.scss +48 -0
  273. package/stat/css/_BRmain.scss +251 -0
  274. package/stat/css/_BRnav.scss +359 -0
  275. package/stat/css/_BRpages.scss +139 -0
  276. package/stat/css/_BRsearch.scss +226 -0
  277. package/stat/css/_BRtoolbar.scss +84 -0
  278. package/stat/css/_BRvendor.scss +5 -0
  279. package/stat/css/_MobileNav.scss +194 -0
  280. package/stat/css/_TextSelection.scss +32 -0
  281. package/stat/css/_colorbox.scss +52 -0
  282. package/stat/css/_controls.scss +253 -0
  283. package/stat/css/_icons.scss +121 -0
  284. package/stat/jquery-wrapper.js +4 -0
  285. package/stat/plugins/plugin.archive_analytics.js +86 -0
  286. package/stat/plugins/plugin.autoplay.js +129 -0
  287. package/stat/plugins/plugin.chapters.js +248 -0
  288. package/stat/plugins/plugin.iframe.js +48 -0
  289. package/stat/plugins/plugin.mobile_nav.js +288 -0
  290. package/stat/plugins/plugin.resume.js +68 -0
  291. package/stat/plugins/plugin.text_selection.js +291 -0
  292. package/{src → stat}/plugins/plugin.url.js +4 -4
  293. package/stat/plugins/plugin.vendor-fullscreen.js +247 -0
  294. package/stat/plugins/search/plugin.search.js +439 -0
  295. package/stat/plugins/search/view.js +439 -0
  296. package/stat/plugins/tts/AbstractTTSEngine.js +249 -0
  297. package/stat/plugins/tts/FestivalTTSEngine.js +169 -0
  298. package/stat/plugins/tts/PageChunk.js +107 -0
  299. package/stat/plugins/tts/PageChunkIterator.js +163 -0
  300. package/stat/plugins/tts/WebTTSEngine.js +357 -0
  301. package/stat/plugins/tts/plugin.tts.js +357 -0
  302. package/stat/plugins/tts/tooltip_dict.js +15 -0
  303. package/stat/plugins/tts/utils.js +91 -0
  304. package/stat/util/browserSniffing.js +30 -0
  305. package/stat/util/debouncer.js +26 -0
  306. package/stat/util/docCookies.js +67 -0
  307. package/stat/util/strings.js +34 -0
  308. package/tests/e2e/README.md +37 -0
  309. package/tests/e2e/autoplay.test.js +2 -2
  310. package/tests/e2e/base.test.js +5 -7
  311. package/tests/e2e/helpers/base.js +8 -3
  312. package/tests/e2e/helpers/debug.js +1 -1
  313. package/tests/e2e/helpers/desktopSearch.js +1 -1
  314. package/tests/e2e/helpers/mobileSearch.js +3 -3
  315. package/tests/e2e/helpers/params.js +17 -0
  316. package/tests/e2e/rightToLeft.test.js +4 -5
  317. package/tests/e2e/viewmode.test.js +30 -31
  318. package/tests/{BookReader → jest/BookReader}/BookModel.test.js +3 -3
  319. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +176 -0
  320. package/tests/{BookReader → jest/BookReader}/DebugConsole.test.js +1 -1
  321. package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +4 -4
  322. package/tests/jest/BookReader/Mode1UpLit.test.js +87 -0
  323. package/tests/{BookReader → jest/BookReader}/Mode2Up.test.js +5 -7
  324. package/tests/jest/BookReader/ModeSmoothZoom.test.js +149 -0
  325. package/tests/jest/BookReader/ModeThumb.test.js +71 -0
  326. package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +7 -7
  327. package/tests/{BookReader → jest/BookReader}/PageContainer.test.js +74 -2
  328. package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +1 -1
  329. package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +2 -2
  330. package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
  331. package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +1 -1
  332. package/tests/jest/BookReader/utils.test.js +136 -0
  333. package/tests/jest/BookReader.keyboard.test.js +190 -0
  334. package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +9 -1
  335. package/tests/{BookReader.test.js → jest/BookReader.test.js} +20 -4
  336. package/tests/{plugins → jest/plugins}/plugin.archive_analytics.test.js +2 -2
  337. package/tests/{plugins → jest/plugins}/plugin.autoplay.test.js +2 -2
  338. package/tests/{plugins → jest/plugins}/plugin.chapters.test.js +8 -8
  339. package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +2 -2
  340. package/tests/{plugins → jest/plugins}/plugin.mobile_nav.test.js +5 -5
  341. package/tests/{plugins → jest/plugins}/plugin.resume.test.js +3 -3
  342. package/tests/{plugins → jest/plugins}/plugin.text_selection.test.js +14 -24
  343. package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +2 -2
  344. package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +12 -5
  345. package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +6 -6
  346. package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +3 -3
  347. package/tests/{plugins → jest/plugins}/tts/FestivalTTSEngine.test.js +4 -4
  348. package/tests/{plugins → jest/plugins}/tts/PageChunk.test.js +1 -1
  349. package/tests/{plugins → jest/plugins}/tts/PageChunkIterator.test.js +3 -3
  350. package/tests/{plugins → jest/plugins}/tts/WebTTSEngine.test.js +1 -1
  351. package/tests/{plugins → jest/plugins}/tts/utils.test.js +3 -3
  352. package/tests/jest/plugins/url/UrlPlugin.test.js +175 -0
  353. package/tests/{plugins → jest/plugins/url}/plugin.url.test.js +33 -14
  354. package/tests/{util → jest/util}/browserSniffing.test.js +1 -1
  355. package/tests/{util → jest/util}/docCookies.test.js +1 -1
  356. package/tests/{util → jest/util}/strings.test.js +1 -1
  357. package/tests/{utils.js → jest/utils.js} +38 -0
  358. package/tests/karma/BookNavigator/book-navigator.test.js +485 -0
  359. package/tests/karma/BookNavigator/bookmarks/bookmark-button.test.js +44 -0
  360. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +1 -3
  361. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +1 -2
  362. package/tests/karma/BookNavigator/downloads/downloads-provider.test.js +67 -0
  363. package/tests/karma/BookNavigator/downloads/downloads.test.js +54 -0
  364. package/tests/karma/BookNavigator/search/search-provider.test.js +123 -0
  365. package/tests/karma/BookNavigator/{search-results.test.js → search/search-results.test.js} +1 -4
  366. package/tests/karma/BookNavigator/sharing/sharing-provider.test.js +49 -0
  367. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -2
  368. package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +184 -0
  369. package/tests/karma/BookNavigator/volumes/volumes.test.js +98 -0
  370. package/webpack.config.js +11 -5
  371. package/.babelrc +0 -12
  372. package/.dependabot/config.yml +0 -6
  373. package/.testcaferc.json +0 -5
  374. package/BookReader/BookReader.js.LICENSE.txt +0 -72
  375. package/BookReader/bookreader-component-bundle.js +0 -1450
  376. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  377. package/BookReader/bookreader-component-bundle.js.map +0 -1
  378. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  379. package/BookReader/plugins/plugin.menu_toggle.js +0 -2
  380. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  381. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +0 -27
  382. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  383. package/src/BookNavigator/assets/book-loader.js +0 -27
  384. package/src/ItemNavigator/ItemNavigator.js +0 -372
  385. package/src/ItemNavigator/providers/sharing.js +0 -29
  386. package/src/dragscrollable-br.js +0 -261
  387. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  388. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  389. package/tests/BookReader/Mode1Up.test.js +0 -164
  390. package/tests/BookReader/utils.test.js +0 -109
  391. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
@@ -0,0 +1,52 @@
1
+ /* COLORBOX POP-UP */
2
+
3
+ #colorbox, #cboxOverlay, #cboxWrapper {
4
+ position: absolute;
5
+ top: 0;
6
+ left: 0;
7
+ z-index: $brZindexPopup;
8
+ }
9
+ #cboxOverlay {
10
+ position: fixed;
11
+ width: 100%;
12
+ height: 100%;
13
+ background: #000;
14
+ opacity:0.75; filter:Alpha(Opacity=75);
15
+ }
16
+ #cboxMiddleLeft, #cboxBottomLeft { clear:left; }
17
+ #cboxContent { position:relative; }
18
+ #cboxLoadedContent { overflow: hidden!important; }
19
+ #cboxLoadedContent iframe { display: block; border: 0; }
20
+ #cboxTitle { margin: 0; display: none !important; }
21
+ #cboxLoadingOverlay, #cboxLoadingGraphic {
22
+ position: absolute;
23
+ top: 25px;
24
+ left: 25px;
25
+ width: 100%;
26
+ }
27
+ #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow { cursor:pointer; }
28
+ #cboxClose { display: none !important; }
29
+
30
+ #colorbox{
31
+ background: white;
32
+ border: 2px solid #ccc;
33
+ -webkit-border-radius:12px;
34
+ -moz-border-radius:12px;
35
+ border-radius:12px;
36
+ -webkit-box-shadow: 0px 0px 27px 6px rgba(66, 66, 66, 0.8);
37
+ -moz-box-shadow: 0px 0px 27px 6px rgba(66, 66, 66, 0.8);
38
+ box-shadow: 0px 0px 27px 6px rgba(66, 66, 66, 0.8);
39
+ }
40
+ #cboxWrapper {}
41
+ #cboxContent {
42
+ padding:0;
43
+ }
44
+ #cboxLoadedContent{
45
+ margin:0;
46
+ }
47
+ #cboxLoadingOverlay{background:transparent;}
48
+
49
+ .shift{
50
+ position: absolute !important;
51
+ left: -10000px !important;
52
+ }
@@ -0,0 +1,253 @@
1
+ .BRcontrols {
2
+ width: 100%;
3
+
4
+ .tooltip {
5
+ display: none;
6
+ position: absolute;
7
+ width: auto;
8
+ left: 50%;
9
+ bottom: calc(100% + 10px);
10
+ transform: translateX(-50%);
11
+ padding: 5px 10px;
12
+ font-weight: bold;
13
+ white-space: nowrap;
14
+ color: $controlsText;
15
+ border-radius: 3px;
16
+ background: $tooltipBG;
17
+ }
18
+
19
+ .full .tooltip {
20
+ left: auto;
21
+ right: 0;
22
+ transform: translateX(0);
23
+ }
24
+
25
+ .BRfullscreenActive & {
26
+ .icon-fullscreen {
27
+ background-image: url("icons/fullscreen_exit.svg");
28
+ }
29
+ }
30
+
31
+ select.playback-speed, select.playback-voices {
32
+ padding-top: 18px;
33
+ -moz-appearance: none;
34
+ -webkit-appearance: none;
35
+ appearance: none;
36
+ font-size: 10px;
37
+ text-align: center;
38
+ text-align-last: center;
39
+ color: $controlsText;
40
+ border: none;
41
+ cursor: pointer;
42
+ option {
43
+ background: $controlsBG;
44
+ }
45
+ }
46
+
47
+ select.playback-speed {
48
+ width: 30px;
49
+ background: transparent url("icons/playback-speed.svg") 50% 0 no-repeat;
50
+ }
51
+
52
+ select.playback-voices {
53
+ width: 30px;
54
+ background: transparent url("icons/voice.svg") 50% 0 no-repeat;
55
+ background-size: 18px;
56
+ }
57
+
58
+ .active {
59
+ background: $activeButtonBG;
60
+ }
61
+
62
+ li {
63
+ position: relative;
64
+ }
65
+
66
+ .controls {
67
+ position: relative;
68
+ z-index: 2;
69
+ display: flex;
70
+ padding: 2px 10px;
71
+ margin: 0;
72
+ list-style: none;
73
+ background: $controlsBG;
74
+ @media (max-width: $brBreakPointMobile) {
75
+ padding-left: 0;
76
+ }
77
+ }
78
+
79
+ .controls button {
80
+ width: 30px;
81
+ height: 30px;
82
+ }
83
+
84
+ @keyframes slideUp {
85
+ from {
86
+ opacity: 0;
87
+ transform: translateY(10px);
88
+ }
89
+ to {
90
+ opacity: 1;
91
+ transform: translateY(0);
92
+ }
93
+ }
94
+
95
+ .read-aloud {
96
+ display: none;
97
+ position: absolute;
98
+ bottom: 100%;
99
+ right: 0;
100
+ left: 0;
101
+ z-index: 1;
102
+ padding: 5px 0;
103
+ margin: 0;
104
+ align-items: center;
105
+ justify-content: center;
106
+ list-style: none;
107
+ background: $controlsBG;
108
+
109
+ &.visible {
110
+ display: flex;
111
+ animation: slideUp 0.2s;
112
+ }
113
+
114
+ li {
115
+ padding: 0 10px;
116
+ }
117
+
118
+ [name="play"] {
119
+ .icon-pause {
120
+ display: none;
121
+ }
122
+ &.playing {
123
+ .icon-play {
124
+ display: none;
125
+ }
126
+ .icon-pause {
127
+ display: inline-block;
128
+ }
129
+ }
130
+ }
131
+ }
132
+
133
+ .scrubber {
134
+ display: flex;
135
+ width: 100%;
136
+ height: 30px;
137
+ }
138
+
139
+ .frame {
140
+ position: relative;
141
+ width: 100%;
142
+ }
143
+
144
+ .color-fill {
145
+ position: absolute;
146
+ top: 50%;
147
+ left: 0;
148
+ transform: translateY(-50%);
149
+ width: 100%;
150
+ height: 8px;
151
+ border-radius: 8px;
152
+ }
153
+
154
+ .scrubber input[type=range] {
155
+ position: absolute;
156
+ top: 50%;
157
+ left: 0;
158
+ transform: translateY(-50%);
159
+ width: 100%;
160
+ background-color: transparent;
161
+ -webkit-appearance: none;
162
+ }
163
+
164
+ .scrubber input[type=range]:focus {
165
+ outline: none;
166
+ }
167
+
168
+ .scrubber input[type=range]::-webkit-slider-runnable-track {
169
+ background: transparent;
170
+ border: 0px solid rgba(204, 204, 204, 0);
171
+ border: 0;
172
+ border-radius: 8px;
173
+ width: 100%;
174
+ height: 8px;
175
+ cursor: pointer;
176
+ }
177
+
178
+ .scrubber input[type=range]::-webkit-slider-thumb {
179
+ margin-top: -4px;
180
+ width: 16px;
181
+ height: 16px;
182
+ background: #ffffff;
183
+ border: 0px solid rgba(0, 0, 0, 0);
184
+ border: 0;
185
+ border-radius: 8px;
186
+ cursor: pointer;
187
+ -webkit-appearance: none;
188
+ }
189
+
190
+ .scrubber input[type=range]::-moz-range-track {
191
+ background: #666666;
192
+ border: 0px solid rgba(204, 204, 204, 0);
193
+ border: 0;
194
+ border-radius: 8px;
195
+ width: 100%;
196
+ height: 8px;
197
+ cursor: pointer;
198
+ }
199
+
200
+ .scrubber input[type=range]::-moz-range-progress {
201
+ height: 8px;
202
+ background: #ccc;
203
+ }
204
+
205
+ .scrubber input[type=range]::-ms-track {
206
+ border: none;
207
+ color: transparent;
208
+ background: #666;
209
+ }
210
+
211
+ .scrubber input[type=range]::-ms-fill-lower {
212
+ background: #ccc;
213
+ }
214
+
215
+ .scrubber input[type=range]::-ms-tooltip {
216
+ display: none;
217
+ }
218
+
219
+ .scrubber input[type=range]::-moz-range-thumb {
220
+ width: 16px;
221
+ height: 16px;
222
+ background: #ffffff;
223
+ border: 0px solid rgba(0, 0, 0, 0);
224
+ border: 0;
225
+ border-radius: 8px;
226
+ cursor: pointer;
227
+ }
228
+
229
+ .scrubber p {
230
+ padding: 0 20px 0 13px;
231
+ margin: 0;
232
+ align-self: stretch;
233
+ font-weight: 700;
234
+ line-height: 26px;
235
+ color: $controlsText;
236
+ @media (max-width: $brBreakPointMobile) {
237
+ padding: 0;
238
+ }
239
+ }
240
+
241
+ /* BookReader defaults overrides */
242
+ .BRnavline {
243
+ top: -4px;
244
+ }
245
+
246
+ .scrubber .BRpager.ui-slider {
247
+ top: 10px;
248
+ background-color: $trackColor;
249
+ }
250
+ .scrubber .BRpager.ui-slider .ui-slider-range {
251
+ background-color: $trackFillColor;
252
+ }
253
+ }
@@ -0,0 +1,121 @@
1
+ .icon {
2
+ display: inline-block;
3
+ background: transparent 50% 50% no-repeat;
4
+ }
5
+
6
+ .icon.hflip {
7
+ transform: scaleX(-1);
8
+ }
9
+
10
+ .active .icon {
11
+ filter: brightness(.2);
12
+ }
13
+
14
+ .icon-read-aloud {
15
+ width: 20px;
16
+ height: 16px;
17
+ background-image: url("icons/read-aloud.svg");
18
+ }
19
+
20
+ .icon-onepg {
21
+ width: 11px;
22
+ height: 19px;
23
+ background-image: url("icons/1up.svg");
24
+ }
25
+
26
+ .icon-twopg {
27
+ width: 20px;
28
+ height: 19px;
29
+ background-image: url("icons/2up.svg");
30
+ }
31
+
32
+ .icon-fullscreen,
33
+ .icon-fullscreen-exit {
34
+ width: 18px;
35
+ height: 18px;
36
+ background-image: url("icons/fullscreen.svg");
37
+ }
38
+
39
+ .icon-fullscreen-exit {
40
+ background-image: url("icons/fullscreen-exit.svg");
41
+ }
42
+
43
+ .icon-thumb {
44
+ width: 17px;
45
+ height: 19px;
46
+ background-image: url("icons/thumbnails.svg");
47
+ }
48
+
49
+ .icon-playback-speed {
50
+ width: 24px;
51
+ height: 32px;
52
+ background-image: url("icons/playback-speed.svg");
53
+ }
54
+
55
+ .icon-review,
56
+ .icon-advance {
57
+ width: 21px;
58
+ height: 19px;
59
+ background-image: url("icons/review.svg");
60
+ }
61
+
62
+ .icon-advance {
63
+ background-image: url("icons/advance.svg");
64
+ }
65
+
66
+ .icon-volume-full {
67
+ width: 23px;
68
+ height: 22px;
69
+ background-image: url("icons/volume-full.svg");
70
+ }
71
+
72
+ .icon-play,
73
+ .icon-pause {
74
+ width: 40px;
75
+ height: 40px;
76
+ background-image: url("icons/play.svg");
77
+ }
78
+
79
+ .icon-pause {
80
+ background-image: url("icons/pause.svg");
81
+ }
82
+
83
+ .icon-left-arrow {
84
+ width: 12px;
85
+ height: 14px;
86
+ background-image: url("icons/left-arrow.svg");
87
+ }
88
+
89
+ .icon-magnify {
90
+ position: relative;
91
+ width: 18px;
92
+ height: 18px;
93
+ background-image: url("icons/magnify-minus.svg");
94
+ &.plus{
95
+ background-image: url("icons/magnify-plus.svg");
96
+ }
97
+ }
98
+
99
+ .icon-search {
100
+ width: 19px;
101
+ height: 19px;
102
+ background-image: url("images/icon_search_button.svg");
103
+ }
104
+
105
+ .icon-chevron {
106
+ width: 5px;
107
+ height: 8px;
108
+ background-image: url("icons/chevron-right.svg");
109
+ }
110
+
111
+ .icon-close {
112
+ width: 12px;
113
+ height: 12px;
114
+ background-image: url("icons/close-circle.svg");
115
+ }
116
+
117
+ .icon-close-dark {
118
+ width: 12px;
119
+ height: 12px;
120
+ background-image: url("icons/close-circle-dark.svg");
121
+ }
@@ -0,0 +1,4 @@
1
+ import $ from 'jquery';
2
+
3
+ window.jQuery = $;
4
+ window.$ = $;
@@ -0,0 +1,86 @@
1
+ /* global BookReader, archive_analytics */
2
+ /**
3
+ * Plugin for Archive.org analytics
4
+ */
5
+ jQuery.extend(BookReader.defaultOptions, {
6
+ enableArchiveAnalytics: true,
7
+ /** Provide a means of debugging, cause otherwise it's impossible to test locally */
8
+ debugArchiveAnaltyics: false,
9
+ });
10
+
11
+ BookReader.prototype.init = (function(super_) {
12
+ return function() {
13
+ super_.call(this);
14
+
15
+ if (this.options.enableArchiveAnalytics) {
16
+ this.bind(BookReader.eventNames.fragmentChange, () => this.archiveAnalyticsSendFragmentChange());
17
+ }
18
+ };
19
+ })(BookReader.prototype.init);
20
+
21
+ /** @private */
22
+ BookReader.prototype.archiveAnalyticsSendFragmentChange = function() {
23
+ if (!window.archive_analytics) {
24
+ return;
25
+ }
26
+
27
+ const prevFragment = this.archiveAnalyticsSendFragmentChange.prevFragment;
28
+
29
+ const params = this.paramsFromCurrent();
30
+ const newFragment = this.fragmentFromParams(params);
31
+
32
+ if (prevFragment != newFragment) {
33
+ const values = {
34
+ bookreader: "user_changed_view",
35
+ itemid: this.bookId,
36
+ cache_bust: Math.random()
37
+ };
38
+ // EEK! offsite embedding and /details/ page books look the same in analytics, otherwise!
39
+ values.offsite = 1;
40
+ values.details = 0;
41
+ try {
42
+ values.offsite = window.top.location.hostname.match(/\.archive.org$/)
43
+ ? 0
44
+ : 1;
45
+ values.details =
46
+ !values.offsite && window.top.location.pathname.match(/^\/details\//)
47
+ ? 1
48
+ : 0;
49
+ } catch (e) {}
50
+ // avoids embed cross site exceptions -- but on (+) side, means it is and keeps marked offite!
51
+
52
+ // Send bookreader ping
53
+ archive_analytics.send_ping(values, null, "augment_for_ao_site");
54
+
55
+ // Also send tracking event ping
56
+ const additionalEventParams = this.options.lendingInfo && this.options.lendingInfo.loanId
57
+ ? { loanId: this.options.lendingInfo.loanId }
58
+ : {};
59
+ archive_analytics.send_event('BookReader', 'UserChangedView', window.location.pathname, additionalEventParams);
60
+
61
+ this.archiveAnalyticsSendFragmentChange.prevFragment = newFragment;
62
+ }
63
+ };
64
+
65
+ /**
66
+ * Sends a tracking "Event". See https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#events
67
+ * @param {string} category
68
+ * @param {string} action
69
+ * @param {number} [value] (must be an int)
70
+ * @param {Object} [additionalEventParams]
71
+ */
72
+ BookReader.prototype.archiveAnalyticsSendEvent = function(category, action, value, additionalEventParams) {
73
+ if (!this.options.enableArchiveAnalytics) return;
74
+
75
+ if (this.options.debugArchiveAnaltyics) {
76
+ console.log("archiveAnalyticsSendEvent", arguments, window.archive_analytics);
77
+ }
78
+
79
+ if (!window.archive_analytics) return;
80
+
81
+ additionalEventParams = additionalEventParams || {};
82
+ if (typeof(value) == 'number') {
83
+ additionalEventParams.ev = value;
84
+ }
85
+ window.archive_analytics.send_event(category, action, null, additionalEventParams);
86
+ };
@@ -0,0 +1,129 @@
1
+ /*global BookReader */
2
+
3
+ /**
4
+ * Plugin which adds an autoplay feature. Useful for kiosk situations.
5
+ */
6
+ jQuery.extend(BookReader.defaultOptions, {
7
+ enableAutoPlayPlugin: true
8
+ });
9
+
10
+ /**
11
+ * @override BookReader.setup
12
+ */
13
+ BookReader.prototype.setup = (function(super_) {
14
+ return function (options) {
15
+ super_.call(this, options);
16
+
17
+ this.auto = false;
18
+ this.autoTimer = null;
19
+ this.flipDelay = 5000;
20
+ };
21
+ })(BookReader.prototype.setup);
22
+
23
+ /**
24
+ * @override BookReader.init
25
+ */
26
+ BookReader.prototype.init = (function(super_) {
27
+ return function (options) {
28
+ super_.call(this, options);
29
+
30
+ if (!this.options.enableAutoPlayPlugin) return;
31
+ this.bind(BookReader.eventNames.stop, () => this.autoStop());
32
+ };
33
+ })(BookReader.prototype.init);
34
+
35
+ /**
36
+ * @override BookReader.bindNavigationHandlers
37
+ */
38
+ BookReader.prototype.bindNavigationHandlers = (function(super_) {
39
+ return function() {
40
+ super_.call(this);
41
+
42
+ if (!this.options.enableAutoPlayPlugin) return;
43
+
44
+ // Note the mobile plugin attaches itself to body, so we need to select outside
45
+ const jIcons = this.$('.BRicon').add('.BRmobileMenu .BRicon');
46
+
47
+ jIcons.filter('.play').click(() => {
48
+ this.autoToggle();
49
+ return false;
50
+ });
51
+
52
+ jIcons.filter('.pause').click(() => {
53
+ this.autoToggle();
54
+ return false;
55
+ });
56
+ };
57
+ })(BookReader.prototype.bindNavigationHandlers);
58
+
59
+ /**
60
+ * Starts autoplay mode
61
+ * @param {object} overrides
62
+ * @param {number} overrides.flipSpeed
63
+ * @param {number} overrides.flipDelay
64
+ */
65
+ BookReader.prototype.autoToggle = function(overrides) {
66
+ if (!this.options.enableAutoPlayPlugin) return;
67
+
68
+ const options = $.extend({
69
+ flipSpeed: this.flipSpeed,
70
+ flipDelay: this.flipDelay
71
+ }, overrides);
72
+
73
+ this.flipSpeed = typeof options.flipSpeed === "number" ? options.flipSpeed : this.flipSpeed;
74
+ this.flipDelay = typeof options.flipDelay === "number" ? options.flipDelay : this.flipDelay;
75
+ this.trigger(BookReader.eventNames.stop);
76
+
77
+ let bComingFrom1up = false;
78
+ if (this.constMode2up != this.mode) {
79
+ bComingFrom1up = true;
80
+ this.switchMode(this.constMode2up);
81
+ }
82
+
83
+ // Change to autofit if book is too large
84
+ if (this.reduce < this.twoPageGetAutofitReduce()) {
85
+ this.zoom('auto');
86
+ }
87
+
88
+ if (null == this.autoTimer) {
89
+ // $$$ Draw events currently cause layout problems when they occur during animation.
90
+ // There is a specific problem when changing from 1-up immediately to autoplay in RTL so
91
+ // we workaround for now by not triggering immediate animation in that case.
92
+ // See https://bugs.launchpad.net/gnubook/+bug/328327
93
+ if (('rl' == this.pageProgression) && bComingFrom1up) {
94
+ // don't flip immediately -- wait until timer fires
95
+ } else {
96
+ // flip immediately
97
+ this.flipFwdToIndex();
98
+ }
99
+
100
+ this.$('.play').hide();
101
+ this.$('.pause').show();
102
+ this.autoTimer = setInterval(() => {
103
+ if (this.animating) return;
104
+
105
+ if (Math.max(this.twoPage.currentIndexL, this.twoPage.currentIndexR) >= this.lastDisplayableIndex()) {
106
+ this.flipBackToIndex(1); // $$$ really what we want?
107
+ } else {
108
+ this.flipFwdToIndex();
109
+ }
110
+ }, this.flipDelay);
111
+ } else {
112
+ this.autoStop();
113
+ }
114
+ };
115
+
116
+ /**
117
+ * Stop autoplay mode, allowing animations to finish
118
+ */
119
+ BookReader.prototype.autoStop = function() {
120
+ if (!this.options.enableAutoPlayPlugin) return;
121
+
122
+ if (null != this.autoTimer) {
123
+ clearInterval(this.autoTimer);
124
+ this.flipSpeed = 'fast';
125
+ this.$('.pause').hide();
126
+ this.$('.play').show();
127
+ this.autoTimer = null;
128
+ }
129
+ };