@internetarchive/bookreader 5.0.0-18

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 (428) hide show
  1. package/.eslintrc.js +58 -0
  2. package/.gitattributes +2 -0
  3. package/.github/ISSUE_TEMPLATE/bug.md +32 -0
  4. package/.github/ISSUE_TEMPLATE/feature-request.md +30 -0
  5. package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +15 -0
  6. package/.github/dependabot.yml +8 -0
  7. package/.github/workflows/node.js.yml +37 -0
  8. package/.github/workflows/npm-publish.yml +47 -0
  9. package/.testcaferc.json +5 -0
  10. package/BookReader/BookReader.css +2983 -0
  11. package/BookReader/BookReader.js +3 -0
  12. package/BookReader/BookReader.js.LICENSE.txt +117 -0
  13. package/BookReader/BookReader.js.map +1 -0
  14. package/BookReader/bookreader-component-bundle.js +1436 -0
  15. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +27 -0
  16. package/BookReader/bookreader-component-bundle.js.map +1 -0
  17. package/BookReader/icons/1up.svg +1 -0
  18. package/BookReader/icons/2up.svg +1 -0
  19. package/BookReader/icons/advance.svg +3 -0
  20. package/BookReader/icons/chevron-right.svg +1 -0
  21. package/BookReader/icons/close-circle-dark.svg +1 -0
  22. package/BookReader/icons/close-circle.svg +1 -0
  23. package/BookReader/icons/fullscreen.svg +1 -0
  24. package/BookReader/icons/fullscreen_exit.svg +1 -0
  25. package/BookReader/icons/hamburger.svg +1 -0
  26. package/BookReader/icons/left-arrow.svg +1 -0
  27. package/BookReader/icons/magnify-minus.svg +1 -0
  28. package/BookReader/icons/magnify-plus.svg +1 -0
  29. package/BookReader/icons/magnify.svg +1 -0
  30. package/BookReader/icons/pause.svg +1 -0
  31. package/BookReader/icons/play.svg +1 -0
  32. package/BookReader/icons/playback-speed.svg +1 -0
  33. package/BookReader/icons/read-aloud.svg +1 -0
  34. package/BookReader/icons/review.svg +3 -0
  35. package/BookReader/icons/thumbnails.svg +1 -0
  36. package/BookReader/icons/volume-full.svg +1 -0
  37. package/BookReader/images/BRicons.png +0 -0
  38. package/BookReader/images/BRicons.svg +5 -0
  39. package/BookReader/images/BRicons_ia.png +0 -0
  40. package/BookReader/images/back_pages.png +0 -0
  41. package/BookReader/images/book_bottom_icon.png +0 -0
  42. package/BookReader/images/book_down_icon.png +0 -0
  43. package/BookReader/images/book_left_icon.png +0 -0
  44. package/BookReader/images/book_leftmost_icon.png +0 -0
  45. package/BookReader/images/book_right_icon.png +0 -0
  46. package/BookReader/images/book_rightmost_icon.png +0 -0
  47. package/BookReader/images/book_top_icon.png +0 -0
  48. package/BookReader/images/book_up_icon.png +0 -0
  49. package/BookReader/images/books_graphic.svg +1 -0
  50. package/BookReader/images/booksplit.png +0 -0
  51. package/BookReader/images/control_pause_icon.png +0 -0
  52. package/BookReader/images/control_play_icon.png +0 -0
  53. package/BookReader/images/embed_icon.png +0 -0
  54. package/BookReader/images/icon-home-ia.png +0 -0
  55. package/BookReader/images/icon_OL-logo-xs.png +0 -0
  56. package/BookReader/images/icon_alert-xs.png +0 -0
  57. package/BookReader/images/icon_book.svg +1 -0
  58. package/BookReader/images/icon_bookmark.svg +1 -0
  59. package/BookReader/images/icon_close-pop.png +0 -0
  60. package/BookReader/images/icon_download.png +0 -0
  61. package/BookReader/images/icon_gear.svg +1 -0
  62. package/BookReader/images/icon_hamburger.svg +1 -0
  63. package/BookReader/images/icon_home.png +0 -0
  64. package/BookReader/images/icon_home.svg +1 -0
  65. package/BookReader/images/icon_home_ia.png +0 -0
  66. package/BookReader/images/icon_indicator.png +0 -0
  67. package/BookReader/images/icon_info.svg +1 -0
  68. package/BookReader/images/icon_one_page.svg +1 -0
  69. package/BookReader/images/icon_pause.svg +1 -0
  70. package/BookReader/images/icon_play.svg +1 -0
  71. package/BookReader/images/icon_playback-rate.svg +1 -0
  72. package/BookReader/images/icon_return.png +0 -0
  73. package/BookReader/images/icon_search_button.svg +1 -0
  74. package/BookReader/images/icon_share.svg +1 -0
  75. package/BookReader/images/icon_skip-ahead.svg +1 -0
  76. package/BookReader/images/icon_skip-back.svg +2 -0
  77. package/BookReader/images/icon_speaker.svg +1 -0
  78. package/BookReader/images/icon_speaker_open.svg +1 -0
  79. package/BookReader/images/icon_thumbnails.svg +1 -0
  80. package/BookReader/images/icon_toc.svg +1 -0
  81. package/BookReader/images/icon_two_pages.svg +1 -0
  82. package/BookReader/images/icon_zoomer.png +0 -0
  83. package/BookReader/images/loading.gif +0 -0
  84. package/BookReader/images/logo_icon.png +0 -0
  85. package/BookReader/images/marker_chap-off.png +0 -0
  86. package/BookReader/images/marker_chap-off.svg +1 -0
  87. package/BookReader/images/marker_chap-off_ia.png +0 -0
  88. package/BookReader/images/marker_chap-on.png +0 -0
  89. package/BookReader/images/marker_chap-on.svg +1 -0
  90. package/BookReader/images/marker_srch-on.svg +1 -0
  91. package/BookReader/images/marker_srchchap-off.png +0 -0
  92. package/BookReader/images/marker_srchchap-on.png +0 -0
  93. package/BookReader/images/nav_control-dn.png +0 -0
  94. package/BookReader/images/nav_control-dn_ia.png +0 -0
  95. package/BookReader/images/nav_control-up.png +0 -0
  96. package/BookReader/images/nav_control-up_ia.png +0 -0
  97. package/BookReader/images/nav_control.png +0 -0
  98. package/BookReader/images/one_page_mode_icon.png +0 -0
  99. package/BookReader/images/paper-badge.png +0 -0
  100. package/BookReader/images/print_icon.png +0 -0
  101. package/BookReader/images/progressbar.gif +0 -0
  102. package/BookReader/images/right_edges.png +0 -0
  103. package/BookReader/images/slider.png +0 -0
  104. package/BookReader/images/slider_ia.png +0 -0
  105. package/BookReader/images/thumbnail_mode_icon.png +0 -0
  106. package/BookReader/images/transparent.png +0 -0
  107. package/BookReader/images/two_page_mode_icon.png +0 -0
  108. package/BookReader/images/zoom_in_icon.png +0 -0
  109. package/BookReader/images/zoom_out_icon.png +0 -0
  110. package/BookReader/jquery-1.10.1.js +2 -0
  111. package/BookReader/jquery-1.10.1.js.LICENSE.txt +24 -0
  112. package/BookReader/plugins/plugin.archive_analytics.js +2 -0
  113. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -0
  114. package/BookReader/plugins/plugin.autoplay.js +2 -0
  115. package/BookReader/plugins/plugin.autoplay.js.map +1 -0
  116. package/BookReader/plugins/plugin.chapters.js +2 -0
  117. package/BookReader/plugins/plugin.chapters.js.map +1 -0
  118. package/BookReader/plugins/plugin.iframe.js +2 -0
  119. package/BookReader/plugins/plugin.iframe.js.map +1 -0
  120. package/BookReader/plugins/plugin.mobile_nav.js +2 -0
  121. package/BookReader/plugins/plugin.mobile_nav.js.map +1 -0
  122. package/BookReader/plugins/plugin.resume.js +2 -0
  123. package/BookReader/plugins/plugin.resume.js.map +1 -0
  124. package/BookReader/plugins/plugin.search.js +2 -0
  125. package/BookReader/plugins/plugin.search.js.map +1 -0
  126. package/BookReader/plugins/plugin.text_selection.js +2 -0
  127. package/BookReader/plugins/plugin.text_selection.js.map +1 -0
  128. package/BookReader/plugins/plugin.tts.js +3 -0
  129. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +27 -0
  130. package/BookReader/plugins/plugin.tts.js.map +1 -0
  131. package/BookReader/plugins/plugin.url.js +2 -0
  132. package/BookReader/plugins/plugin.url.js.map +1 -0
  133. package/BookReader/plugins/plugin.vendor-fullscreen.js +2 -0
  134. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -0
  135. package/BookReaderDemo/BookReaderDemo.css +41 -0
  136. package/BookReaderDemo/BookReaderJSAdvanced.js +115 -0
  137. package/BookReaderDemo/BookReaderJSAutoplay.js +56 -0
  138. package/BookReaderDemo/BookReaderJSSimple.js +55 -0
  139. package/BookReaderDemo/IIIFBookReader.js +207 -0
  140. package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +1 -0
  141. package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +1 -0
  142. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
  143. package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
  144. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
  145. package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +1 -0
  146. package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +1 -0
  147. package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
  148. package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
  149. package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
  150. package/BookReaderDemo/bookreader-template-bundle.js +7178 -0
  151. package/BookReaderDemo/demo-advanced.html +32 -0
  152. package/BookReaderDemo/demo-autoplay.html +38 -0
  153. package/BookReaderDemo/demo-embed-iframe-src.html +84 -0
  154. package/BookReaderDemo/demo-embed.html +26 -0
  155. package/BookReaderDemo/demo-fullscreen-mobile.html +36 -0
  156. package/BookReaderDemo/demo-fullscreen.html +33 -0
  157. package/BookReaderDemo/demo-iiif.html +34 -0
  158. package/BookReaderDemo/demo-iiif.js +26 -0
  159. package/BookReaderDemo/demo-internetarchive.html +74 -0
  160. package/BookReaderDemo/demo-multiple.html +43 -0
  161. package/BookReaderDemo/demo-preview-pages.html +1092 -0
  162. package/BookReaderDemo/demo-simple.html +34 -0
  163. package/BookReaderDemo/demo-vendor-fullscreen.html +36 -0
  164. package/BookReaderDemo/immersion-1up.html +64 -0
  165. package/BookReaderDemo/immersion-mode.html +35 -0
  166. package/BookReaderDemo/toggle_controls.html +53 -0
  167. package/BookReaderDemo/view_mode.html +39 -0
  168. package/BookReaderDemo/viewmode-cycle.html +41 -0
  169. package/CHANGELOG.md +540 -0
  170. package/CONTRIBUTING.md +7 -0
  171. package/LICENSE +661 -0
  172. package/README.md +205 -0
  173. package/babel.config.js +18 -0
  174. package/codecov.yml +17 -0
  175. package/index.html +31 -0
  176. package/jsconfig.json +14 -0
  177. package/karma.conf.js +23 -0
  178. package/package.json +129 -0
  179. package/screenshot.png +0 -0
  180. package/scripts/postversion.js +10 -0
  181. package/scripts/preversion.js +14 -0
  182. package/scripts/version.js +26 -0
  183. package/src/BookNavigator/BookModel.js +14 -0
  184. package/src/BookNavigator/BookNavigator.js +468 -0
  185. package/src/BookNavigator/assets/book-loader.js +27 -0
  186. package/src/BookNavigator/assets/bookmark-colors.js +15 -0
  187. package/src/BookNavigator/assets/button-base.js +61 -0
  188. package/src/BookNavigator/assets/icon_checkmark.js +6 -0
  189. package/src/BookNavigator/assets/icon_close.js +3 -0
  190. package/src/BookNavigator/assets/icon_sort_asc.js +5 -0
  191. package/src/BookNavigator/assets/icon_sort_desc.js +5 -0
  192. package/src/BookNavigator/assets/icon_sort_neutral.js +5 -0
  193. package/src/BookNavigator/assets/icon_volumes.js +11 -0
  194. package/src/BookNavigator/bookmarks/bookmark-button.js +64 -0
  195. package/src/BookNavigator/bookmarks/bookmark-edit.js +215 -0
  196. package/src/BookNavigator/bookmarks/bookmarks-list.js +285 -0
  197. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +28 -0
  198. package/src/BookNavigator/bookmarks/bookmarks-provider.js +53 -0
  199. package/src/BookNavigator/bookmarks/ia-bookmarks.js +500 -0
  200. package/src/BookNavigator/br-fullscreen-mgr.js +83 -0
  201. package/src/BookNavigator/delete-modal-actions.js +49 -0
  202. package/src/BookNavigator/downloads/downloads-provider.js +76 -0
  203. package/src/BookNavigator/downloads/downloads.js +138 -0
  204. package/src/BookNavigator/search/a-search-result.js +55 -0
  205. package/src/BookNavigator/search/search-provider.js +180 -0
  206. package/src/BookNavigator/search/search-results.js +360 -0
  207. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +93 -0
  208. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +280 -0
  209. package/src/BookNavigator/volumes/volumes-provider.js +83 -0
  210. package/src/BookNavigator/volumes/volumes.js +178 -0
  211. package/src/BookReader/BookModel.js +518 -0
  212. package/src/BookReader/DebugConsole.js +54 -0
  213. package/src/BookReader/ImageCache.js +116 -0
  214. package/src/BookReader/Mode1Up.js +90 -0
  215. package/src/BookReader/Mode1UpLit.js +434 -0
  216. package/src/BookReader/Mode2Up.js +1372 -0
  217. package/src/BookReader/ModeSmoothZoom.js +177 -0
  218. package/src/BookReader/ModeThumb.js +336 -0
  219. package/src/BookReader/Navbar/Navbar.js +339 -0
  220. package/src/BookReader/PageContainer.js +120 -0
  221. package/src/BookReader/ReduceSet.js +26 -0
  222. package/src/BookReader/Toolbar/Toolbar.js +384 -0
  223. package/src/BookReader/events.js +20 -0
  224. package/src/BookReader/options.js +320 -0
  225. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  226. package/src/BookReader/utils/classes.js +36 -0
  227. package/src/BookReader/utils.js +240 -0
  228. package/src/BookReader.js +2546 -0
  229. package/src/BookReaderComponent/BookReaderComponent.js +112 -0
  230. package/src/ItemNavigator/ItemNavigator.js +376 -0
  231. package/src/ItemNavigator/providers/sharing.js +33 -0
  232. package/src/assets/icons/1up.svg +12 -0
  233. package/src/assets/icons/2up.svg +15 -0
  234. package/src/assets/icons/advance.svg +26 -0
  235. package/src/assets/icons/chevron-right.svg +1 -0
  236. package/src/assets/icons/close-circle-dark.svg +1 -0
  237. package/src/assets/icons/close-circle.svg +1 -0
  238. package/src/assets/icons/fullscreen.svg +17 -0
  239. package/src/assets/icons/fullscreen_exit.svg +17 -0
  240. package/src/assets/icons/hamburger.svg +15 -0
  241. package/src/assets/icons/left-arrow.svg +12 -0
  242. package/src/assets/icons/magnify-minus.svg +16 -0
  243. package/src/assets/icons/magnify-plus.svg +17 -0
  244. package/src/assets/icons/magnify.svg +15 -0
  245. package/src/assets/icons/pause.svg +23 -0
  246. package/src/assets/icons/play.svg +22 -0
  247. package/src/assets/icons/playback-speed.svg +34 -0
  248. package/src/assets/icons/read-aloud.svg +22 -0
  249. package/src/assets/icons/review.svg +22 -0
  250. package/src/assets/icons/thumbnails.svg +17 -0
  251. package/src/assets/icons/volume-full.svg +22 -0
  252. package/src/assets/images/BRicons.png +0 -0
  253. package/src/assets/images/BRicons.svg +94 -0
  254. package/src/assets/images/BRicons_ia.png +0 -0
  255. package/src/assets/images/back_pages.png +0 -0
  256. package/src/assets/images/book_bottom_icon.png +0 -0
  257. package/src/assets/images/book_down_icon.png +0 -0
  258. package/src/assets/images/book_left_icon.png +0 -0
  259. package/src/assets/images/book_leftmost_icon.png +0 -0
  260. package/src/assets/images/book_right_icon.png +0 -0
  261. package/src/assets/images/book_rightmost_icon.png +0 -0
  262. package/src/assets/images/book_top_icon.png +0 -0
  263. package/src/assets/images/book_up_icon.png +0 -0
  264. package/src/assets/images/books_graphic.svg +177 -0
  265. package/src/assets/images/booksplit.png +0 -0
  266. package/src/assets/images/control_pause_icon.png +0 -0
  267. package/src/assets/images/control_play_icon.png +0 -0
  268. package/src/assets/images/embed_icon.png +0 -0
  269. package/src/assets/images/icon-home-ia.png +0 -0
  270. package/src/assets/images/icon_OL-logo-xs.png +0 -0
  271. package/src/assets/images/icon_alert-xs.png +0 -0
  272. package/src/assets/images/icon_book.svg +12 -0
  273. package/src/assets/images/icon_bookmark.svg +12 -0
  274. package/src/assets/images/icon_close-pop.png +0 -0
  275. package/src/assets/images/icon_download.png +0 -0
  276. package/src/assets/images/icon_gear.svg +14 -0
  277. package/src/assets/images/icon_hamburger.svg +20 -0
  278. package/src/assets/images/icon_home.png +0 -0
  279. package/src/assets/images/icon_home.svg +21 -0
  280. package/src/assets/images/icon_home_ia.png +0 -0
  281. package/src/assets/images/icon_indicator.png +0 -0
  282. package/src/assets/images/icon_info.svg +11 -0
  283. package/src/assets/images/icon_one_page.svg +8 -0
  284. package/src/assets/images/icon_pause.svg +1 -0
  285. package/src/assets/images/icon_play.svg +1 -0
  286. package/src/assets/images/icon_playback-rate.svg +15 -0
  287. package/src/assets/images/icon_return.png +0 -0
  288. package/src/assets/images/icon_search_button.svg +8 -0
  289. package/src/assets/images/icon_share.svg +9 -0
  290. package/src/assets/images/icon_skip-ahead.svg +6 -0
  291. package/src/assets/images/icon_skip-back.svg +13 -0
  292. package/src/assets/images/icon_speaker.svg +18 -0
  293. package/src/assets/images/icon_speaker_open.svg +10 -0
  294. package/src/assets/images/icon_thumbnails.svg +12 -0
  295. package/src/assets/images/icon_toc.svg +5 -0
  296. package/src/assets/images/icon_two_pages.svg +9 -0
  297. package/src/assets/images/icon_zoomer.png +0 -0
  298. package/src/assets/images/loading.gif +0 -0
  299. package/src/assets/images/logo_icon.png +0 -0
  300. package/src/assets/images/marker_chap-off.png +0 -0
  301. package/src/assets/images/marker_chap-off.svg +11 -0
  302. package/src/assets/images/marker_chap-off_ia.png +0 -0
  303. package/src/assets/images/marker_chap-on.png +0 -0
  304. package/src/assets/images/marker_chap-on.svg +11 -0
  305. package/src/assets/images/marker_srch-on.svg +11 -0
  306. package/src/assets/images/marker_srchchap-off.png +0 -0
  307. package/src/assets/images/marker_srchchap-on.png +0 -0
  308. package/src/assets/images/nav_control-dn.png +0 -0
  309. package/src/assets/images/nav_control-dn_ia.png +0 -0
  310. package/src/assets/images/nav_control-up.png +0 -0
  311. package/src/assets/images/nav_control-up_ia.png +0 -0
  312. package/src/assets/images/nav_control.png +0 -0
  313. package/src/assets/images/one_page_mode_icon.png +0 -0
  314. package/src/assets/images/paper-badge.png +0 -0
  315. package/src/assets/images/print_icon.png +0 -0
  316. package/src/assets/images/progressbar.gif +0 -0
  317. package/src/assets/images/right_edges.png +0 -0
  318. package/src/assets/images/slider.png +0 -0
  319. package/src/assets/images/slider_ia.png +0 -0
  320. package/src/assets/images/thumbnail_mode_icon.png +0 -0
  321. package/src/assets/images/transparent.png +0 -0
  322. package/src/assets/images/two_page_mode_icon.png +0 -0
  323. package/src/assets/images/zoom_in_icon.png +0 -0
  324. package/src/assets/images/zoom_out_icon.png +0 -0
  325. package/src/css/BookReader.scss +89 -0
  326. package/src/css/_BRBookmarks.scss +29 -0
  327. package/src/css/_BRComponent.scss +13 -0
  328. package/src/css/_BRfloat.scss +197 -0
  329. package/src/css/_BRicon.scss +48 -0
  330. package/src/css/_BRmain.scss +251 -0
  331. package/src/css/_BRnav.scss +382 -0
  332. package/src/css/_BRpages.scss +139 -0
  333. package/src/css/_BRsearch.scss +226 -0
  334. package/src/css/_BRtoolbar.scss +84 -0
  335. package/src/css/_BRvendor.scss +5 -0
  336. package/src/css/_MobileNav.scss +194 -0
  337. package/src/css/_TextSelection.scss +32 -0
  338. package/src/css/_colorbox.scss +52 -0
  339. package/src/css/_controls.scss +244 -0
  340. package/src/css/_icons.scss +121 -0
  341. package/src/dragscrollable-br.js +261 -0
  342. package/src/jquery-wrapper.js +4 -0
  343. package/src/plugins/plugin.archive_analytics.js +86 -0
  344. package/src/plugins/plugin.autoplay.js +129 -0
  345. package/src/plugins/plugin.chapters.js +251 -0
  346. package/src/plugins/plugin.iframe.js +48 -0
  347. package/src/plugins/plugin.mobile_nav.js +287 -0
  348. package/src/plugins/plugin.resume.js +68 -0
  349. package/src/plugins/plugin.text_selection.js +291 -0
  350. package/src/plugins/plugin.url.js +198 -0
  351. package/src/plugins/plugin.vendor-fullscreen.js +247 -0
  352. package/src/plugins/search/plugin.search.js +439 -0
  353. package/src/plugins/search/view.js +440 -0
  354. package/src/plugins/tts/AbstractTTSEngine.js +242 -0
  355. package/src/plugins/tts/FestivalTTSEngine.js +169 -0
  356. package/src/plugins/tts/PageChunk.js +107 -0
  357. package/src/plugins/tts/PageChunkIterator.js +163 -0
  358. package/src/plugins/tts/WebTTSEngine.js +352 -0
  359. package/src/plugins/tts/plugin.tts.js +335 -0
  360. package/src/plugins/tts/tooltip_dict.js +15 -0
  361. package/src/plugins/tts/utils.js +91 -0
  362. package/src/util/browserSniffing.js +30 -0
  363. package/src/util/debouncer.js +26 -0
  364. package/src/util/docCookies.js +67 -0
  365. package/src/util/strings.js +34 -0
  366. package/tests/BookReader/BookModel.test.js +312 -0
  367. package/tests/BookReader/BookReaderPublicFunctions.test.js +164 -0
  368. package/tests/BookReader/DebugConsole.test.js +25 -0
  369. package/tests/BookReader/ImageCache.test.js +150 -0
  370. package/tests/BookReader/Mode1UpLit.test.js +87 -0
  371. package/tests/BookReader/Mode2Up.test.js +245 -0
  372. package/tests/BookReader/ModeSmoothZoom.test.js +149 -0
  373. package/tests/BookReader/Navbar/Navbar.test.js +169 -0
  374. package/tests/BookReader/PageContainer.test.js +187 -0
  375. package/tests/BookReader/ReduceSet.test.js +38 -0
  376. package/tests/BookReader/Toolbar/Toolbar.test.js +26 -0
  377. package/tests/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
  378. package/tests/BookReader/utils/classes.test.js +88 -0
  379. package/tests/BookReader/utils.test.js +136 -0
  380. package/tests/BookReader.options.test.js +39 -0
  381. package/tests/BookReader.test.js +301 -0
  382. package/tests/e2e/README.md +75 -0
  383. package/tests/e2e/autoplay.test.js +13 -0
  384. package/tests/e2e/base.test.js +35 -0
  385. package/tests/e2e/helpers/base.js +263 -0
  386. package/tests/e2e/helpers/debug.js +13 -0
  387. package/tests/e2e/helpers/desktopSearch.js +72 -0
  388. package/tests/e2e/helpers/mobileSearch.js +85 -0
  389. package/tests/e2e/helpers/mockSearch.js +93 -0
  390. package/tests/e2e/helpers/rightToLeft.js +29 -0
  391. package/tests/e2e/ia-production/ia-prod-base.js +17 -0
  392. package/tests/e2e/models/BookReader.js +11 -0
  393. package/tests/e2e/models/Navigation.js +56 -0
  394. package/tests/e2e/rightToLeft.test.js +20 -0
  395. package/tests/e2e/viewmode.test.js +37 -0
  396. package/tests/karma/BookNavigator/book-navigator.test.js +180 -0
  397. package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +133 -0
  398. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +222 -0
  399. package/tests/karma/BookNavigator/downloads/downloads-provider.test.js +64 -0
  400. package/tests/karma/BookNavigator/downloads/downloads.test.js +54 -0
  401. package/tests/karma/BookNavigator/search/search-provider.test.js +23 -0
  402. package/tests/karma/BookNavigator/search/search-results.test.js +240 -0
  403. package/tests/karma/BookNavigator/sharing/sharing-provider.test.js +40 -0
  404. package/tests/karma/BookNavigator/visual-adjustments.test.js +201 -0
  405. package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +160 -0
  406. package/tests/karma/BookNavigator/volumes/volumes.test.js +98 -0
  407. package/tests/plugins/plugin.archive_analytics.test.js +23 -0
  408. package/tests/plugins/plugin.autoplay.test.js +52 -0
  409. package/tests/plugins/plugin.chapters.test.js +130 -0
  410. package/tests/plugins/plugin.iframe.test.js +42 -0
  411. package/tests/plugins/plugin.mobile_nav.test.js +66 -0
  412. package/tests/plugins/plugin.resume.test.js +98 -0
  413. package/tests/plugins/plugin.text_selection.test.js +193 -0
  414. package/tests/plugins/plugin.url.test.js +129 -0
  415. package/tests/plugins/plugin.vendor-fullscreen.test.js +65 -0
  416. package/tests/plugins/search/plugin.search.test.js +173 -0
  417. package/tests/plugins/search/plugin.search.view.test.js +106 -0
  418. package/tests/plugins/tts/AbstractTTSEngine.test.js +153 -0
  419. package/tests/plugins/tts/FestivalTTSEngine.test.js +59 -0
  420. package/tests/plugins/tts/PageChunk.test.js +57 -0
  421. package/tests/plugins/tts/PageChunkIterator.test.js +179 -0
  422. package/tests/plugins/tts/WebTTSEngine.test.js +126 -0
  423. package/tests/plugins/tts/utils.test.js +133 -0
  424. package/tests/util/browserSniffing.test.js +56 -0
  425. package/tests/util/docCookies.test.js +15 -0
  426. package/tests/util/strings.test.js +63 -0
  427. package/tests/utils.js +80 -0
  428. package/webpack.config.js +85 -0
package/README.md ADDED
@@ -0,0 +1,205 @@
1
+ # Internet Archive BookReader
2
+
3
+ ![Build Status](https://github.com/internetarchive/bookreader/actions/workflows/node.js.yml/badge.svg?branch=master) [![codecov](https://codecov.io/gh/internetarchive/bookreader/branch/master/graph/badge.svg)](https://codecov.io/gh/internetarchive/bookreader)
4
+
5
+ **Disclaimer: BookReader v5 is currently in beta. It's stable enough for production use (and is what is being used on archive.org), but there will be some breaking changes in the next ~month or so to public BookReader APIs.**
6
+
7
+
8
+ <p align="center">
9
+ <img width="200" src="./BookReaderDemo/assets/v5/Bookreader-logo-lines.svg" alt="Internet Archive BookReader full logo">
10
+ </p>
11
+
12
+
13
+ <div style="border: 1px solid gray; padding: 2px; margin-bottom: 20px"><img src="./BookReaderDemo/assets/v5/bookreader-v5-screenshot.png" alt="BookReader v5 interface screenshot"></div>
14
+
15
+
16
+ The Internet Archive BookReader is used to view books from the Internet Archive online and can also be used to view other books.
17
+
18
+ See live examples:
19
+ - On details page: https://archive.org/details/birdbookillustra00reedrich
20
+ - Full window: https://archive.org/details/birdbookillustra00reedrich?view=theater
21
+ - Embedded url for iFrames: https://archive.org/embed/birdbookillustra00reedrich
22
+
23
+ ## Demos
24
+
25
+ See `BookReaderDemo` directory. These can be tested by building the source files (make sure [Node.js is installed](https://nodejs.org/en/download/)):
26
+
27
+ ```bash
28
+ npm run build
29
+ ```
30
+
31
+ and starting a simple web server in the root directory:
32
+
33
+ ```
34
+ npm run serve
35
+ ```
36
+
37
+ And then open `http://localhost:8000/BookReaderDemo/demo-simple.html`.
38
+
39
+
40
+ ## Usage
41
+
42
+ Here is a short example.
43
+
44
+ ```js
45
+ // Create the BookReader object
46
+ var options = {
47
+ data: [
48
+ [
49
+ { width: 800, height: 1200,
50
+ uri: '//archive.org/download/BookReader/img/page001.jpg' },
51
+ ],
52
+ [
53
+ { width: 800, height: 1200,
54
+ uri: '//archive.org/download/BookReader/img/page002.jpg' },
55
+ { width: 800, height: 1200,
56
+ uri: '//archive.org/download/BookReader/img/page003.jpg' },
57
+ ],
58
+ [
59
+ { width: 800, height: 1200,
60
+ uri: '//archive.org/download/BookReader/img/page004.jpg' },
61
+ { width: 800, height: 1200,
62
+ uri: '//archive.org/download/BookReader/img/page005.jpg' },
63
+ ]
64
+ ],
65
+
66
+ bookTitle: 'Simple BookReader Presentation',
67
+
68
+ // thumbnail is optional, but it is used in the info dialog
69
+ thumbnail: '//archive.org/download/BookReader/img/page014.jpg',
70
+
71
+ // Metadata is optional, but it is used in the info dialog
72
+ metadata: [
73
+ {label: 'Title', value: 'Open Library BookReader Presentation'},
74
+ {label: 'Author', value: 'Internet Archive'},
75
+ {label: 'Demo Info', value: 'This demo shows how one could use BookReader with their own content.'},
76
+ ],
77
+
78
+ ui: 'full', // embed, full (responsive)
79
+
80
+ };
81
+ var br = new BookReader(options);
82
+
83
+ // Let's go!
84
+ br.init();
85
+
86
+ ```
87
+ ## Architecture Overview
88
+ Starting at v5, BookReader introduces hybrid architecture that merges the core code written in jQuery closer to its evolution as a web component. As we march toward the future of BookReader as a web component, we are taking an Event Driven approach to connect the two together.
89
+
90
+ Approach:
91
+ - Event driven
92
+ - BookReader's (BR) core code emits [custom events](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent), reporting the actions it takes:
93
+ - UI changes
94
+ - Core Events [src/BookReader/events.js](https://github.com/internetarchive/bookreader/tree/master/src/BookReader/events.js)
95
+ - API returns
96
+ - Search API [src/BookReader/events.js](https://github.com/internetarchive/bookreader/tree/master/src/BookReader/events.js)
97
+ - BookNavigator, BR's web components controller, listens and reacts to these events in order to populate the side menu panels
98
+ - Control BR from the outside by using public methods
99
+ - When BookNavigator reacts to BR's events, BookNavigator can directly control BR core using public functions.
100
+ - As we continue to decouple the UI from drawing/calculating logic, these logical methods will become easier to spot, raise as a public method, and create unit tests for them.
101
+
102
+ ### Menu panels: Web Components via LitElement
103
+ BookReader's side navigation is powered by LitElement flavored web components.
104
+
105
+
106
+ ### Core: jQuery
107
+ BookReader's core functionality is in jQuery.
108
+ This includes:
109
+ - drawing & resizing the book and the various modes (1up, 2 page spread, gallery view)
110
+ - the horizontal navigation
111
+ - search API service
112
+ - plugins
113
+
114
+ A peek in how to use/extend core functionality:
115
+ - Properties
116
+ - TODO (for now see [src/BookReader/options.js](https://github.com/internetarchive/bookreader/tree/master/src/BookReader/options.js))
117
+ - Plugins
118
+ - A basic plugin system is used. See the examples in the plugins directory. The general idea is that they are mixins that augment the BookReader prototype. See the plugins directory for all the included plugins, but here are some examples:
119
+ - plugin.autoplay.js - autoplay mode. Flips pages at set intervals.
120
+ - plugin.chapters.js - render chapter markers
121
+ - plugin.search.js - add search ui, and callbacks
122
+ - plugin.tts.js - add tts (read aloud) ui, sound library, and callbacks
123
+ - plugin.url.js - automatically updates the browser url
124
+ - plugin.resume.js - uses cookies to remember the current page
125
+ - plugin.vendor-fullscreen.js - replaces fullscreen mode with vendor native fullscreen
126
+ - see plugin directory for current plugin files ()[https://github.com/internetarchive/bookreader/tree/master/src/plugins]
127
+
128
+ ### Embedding BookReader in an iFrame
129
+
130
+ BookReader can be embedded within an `<iframe>`. If you use the IFrame Plugin inside the `<iframe>`, the reader will send notifications about changes in the state of the reader via [`window.postMessage()`](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage). The parent window can send messages of its own (also via `window.postMessage()`) and the IFrame Plugin will handle updating the reader to match.
131
+
132
+ ### Message Events
133
+
134
+ #### Fragment Change
135
+ The Fragment Change message is sent to the parent window when the embedded BookReader moves between pages/modes. When the `<iframe>` receives this message, it moves to the specified page/mode. The “fragment” is formatted in accordance with the [BookReader URL spec](http://openlibrary.org/dev/docs/bookurls).
136
+
137
+ ```json
138
+ {
139
+ "type": "bookReaderFragmentChange",
140
+ "fragment": "page/n1/mode/2up"
141
+ }
142
+ ```
143
+
144
+ ## Development
145
+
146
+ (updates?)
147
+
148
+ The source JavaScript is written in ES6 (located in the `src/js` directory) and in ES5 (located in `BookReader`). `npm run serve-dev` starts an auto-reloading dev server, that builds js/css that has been edited at `localhost:8000`.
149
+
150
+ Until the next major version bump, we have to store the build files inside the repo to maintain backwards compatibility. Please _DO NOT_ include these files in your PR. Anything in the `BookReader/` directory should not be committed.
151
+
152
+ ## Releases
153
+
154
+ To version bump the repo and prepare a release, run `npm version major|minor|patch` (following [semver](https://semver.org/)), then (something like) `git push origin HEAD --tags`. It'll automatically update the version number where it appears, build the files, and ask you to update the CHANGELOG.
155
+
156
+ We release BookReader [in-repo as tags](https://github.com/internetarchive/bookreader/releases) & also as a node module [@internetarchive/bookreader](https://www.npmjs.com/package/@internetarchive/bookreader)
157
+
158
+ ## Tests
159
+ We would like to get to 100% test coverage and are tracking our progress in this project: [BookReader Fidelity](https://github.com/internetarchive/bookreader/projects/5)
160
+
161
+ ### End to end tests
162
+ We also have end to end tests using [Testcafe](https://devexpress.github.io/testcafe/documentation/getting-started/). We write tests for the repo itself and also for our use on archive.org. You can read about them in [here](./tests/e2e/README.md). These are relatively easy to do, and a fantastic way of getting introduced to the wonders of BookReader. Check the project board for open tickets to work on. And if you don't see a test for something you spotted, feel free to make an issue.
163
+
164
+ To run all local end to end tests, run command: `npm run test:e2e`
165
+
166
+ To keep end to end test server on while developing, run command: `npm run test:e2e:dev`
167
+
168
+ ### Unit tests
169
+ We have unit tests and use Jest to run them.
170
+ For mocks, we use Jest's internal mocking mechanism and Sinon to set spies.
171
+
172
+ To run all local unit tests, run command: `npm run test`
173
+
174
+ ## Ways to contribute
175
+
176
+ We can always use a hand building BookReader. Check out the issues and see what interests you. If you have an idea for an improvement, open an issue.
177
+
178
+ ## More info
179
+
180
+ Developer documentation:
181
+ https://openlibrary.org/dev/docs/bookreader
182
+
183
+ Hosted source code:
184
+ https://github.com/internetarchive/bookreader
185
+
186
+ IIIF (http://iiif.io)
187
+ See `BookReaderDemo/demo-iiif.html` to see an example of how to load an IIIF manifest in BookReader.
188
+
189
+
190
+ ## Target Devices
191
+
192
+ Note that BookReader is a core part of Archive.org's mission of Universal Access to All Knowledge. Therefore, care must be taken to support legacy browsers. It should still work and be useable on old devices.
193
+
194
+
195
+ ## Areas for improvement
196
+ - Change libraries to be NPM dependencies rather than included in the source code
197
+
198
+ See [CHANGELOG.md](CHANGELOG.md) for history of the project.
199
+
200
+
201
+ ## License
202
+ The source code license is AGPL v3, as described in the LICENSE file.
203
+
204
+ ## Other credits
205
+ The ability to test on multiple devices is provided courtesy of [Browser Stack](https://www.browserstack.com).
@@ -0,0 +1,18 @@
1
+ module.exports = {
2
+ presets: [
3
+ [
4
+ "@babel/preset-env",
5
+ {
6
+ targets: "> 2%, ie 11, edge 14, samsung > 9, OperaMini all, UCAndroid > 12",
7
+ useBuiltIns: "usage",
8
+ corejs: 3
9
+ }
10
+ ]
11
+ ],
12
+ plugins: [
13
+ ["@babel/plugin-proposal-decorators", {decoratorsBeforeExport: true}],
14
+ ["@babel/plugin-proposal-class-properties", {loose: true}],
15
+ ["@babel/plugin-proposal-private-property-in-object", { loose: true }],
16
+ ["@babel/plugin-proposal-private-methods", { loose: true }]
17
+ ]
18
+ };
package/codecov.yml ADDED
@@ -0,0 +1,17 @@
1
+ codecov:
2
+ notify:
3
+ require_ci_to_pass: yes
4
+
5
+ coverage:
6
+ precision: 2
7
+ round: down
8
+ range: "70...100"
9
+
10
+ parsers:
11
+ javascript:
12
+ enable_partials: yes
13
+
14
+ ignore:
15
+ - "BookReader"
16
+ - "tests"
17
+
package/index.html ADDED
@@ -0,0 +1,31 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>BookReader Demos</title>
5
+
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
7
+ <meta name="apple-mobile-web-app-capable" content="yes">
8
+ </head>
9
+ <body>
10
+ <ul>
11
+ <li><a href="BookReaderDemo/demo-simple.html">Simple</a></li>
12
+ <li><a href="BookReaderDemo/view_mode.html">Set initial view mode</a></li>
13
+ <li><a href="BookReaderDemo/toggle_controls.html">Toggle and override individual controls</a></li>
14
+ <li><a href="BookReaderDemo/demo-fullscreen.html">Fullscreen with mobile nav</a></li>
15
+ <li><a href="BookReaderDemo/demo-fullscreen-mobile.html">Inline on page, with mobile nav on fullscreen</a></li>
16
+ <li><a href="BookReaderDemo/demo-vendor-fullscreen.html">Vendor native fullscreen</a></li>
17
+ <li><a href="BookReaderDemo/demo-advanced.html">Advanced</a></li>
18
+ <li><a href="BookReaderDemo/demo-preview-pages.html">Preview Pages</a></li>
19
+ <li><a href="BookReaderDemo/demo-embed.html">Embed</a></li>
20
+ <li><a href="BookReaderDemo/demo-multiple.html">Multiple on same page</a></li>
21
+ <li><a href="BookReaderDemo/demo-internetarchive.html?ocaid=theworksofplato01platiala">From Internet Archive</a></li>
22
+ <li><a href="BookReaderDemo/demo-internetarchive.html?ocaid=adventuresofoli00dick">From Internet Archive - a book with CHAPTERS</a></li>
23
+ <li><a href="BookReaderDemo/demo-iiif.html">IIIF</a></li>
24
+ <li><a href="BookReaderDemo/demo-autoplay.html">Autoplay (kiosk mode)</a></li>
25
+ <li><a href="BookReaderDemo/demo-plugin-menu-toggle.html">Plugin: Full screen menu toggle</a></li>
26
+ <li><a href="BookReaderDemo/immersion-mode.html">Start in immersion (fullscreen) mode</a></li>
27
+ <li><a href="BookReaderDemo/immersion-1up.html">Start in immersion mode on 1up default item</a></li>
28
+ <li><a href="BookReaderDemo/viewmode-cycle.html">Replace view mode buttons with view mode cycler</a></li>
29
+ </ul>
30
+ </body>
31
+ </html>
package/jsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es6",
4
+ "moduleResolution": "node",
5
+ "experimentalDecorators": true
6
+ },
7
+ "include": [
8
+ "src/**/*.js"
9
+ ],
10
+ "exclude": [
11
+ "node_modules",
12
+ "BookReader"
13
+ ]
14
+ }
package/karma.conf.js ADDED
@@ -0,0 +1,23 @@
1
+ const { createDefaultConfig } = require('@open-wc/testing-karma');
2
+ const merge = require('deepmerge');
3
+
4
+ module.exports = (config) => {
5
+ config.set(
6
+ merge(createDefaultConfig(config), {
7
+ files: [
8
+ // runs all files ending with .test in the test folder,
9
+ // can be overwritten by passing a --grep flag. examples:
10
+ //
11
+ // npm run test -- --grep test/foo/bar.test.js
12
+ // npm run test -- --grep test/bar/*
13
+ { pattern: config.grep ? config.grep : 'tests/karma/**/*.test.js', type: 'module' },
14
+ ],
15
+
16
+ esm: {
17
+ nodeResolve: true,
18
+ },
19
+ // you can overwrite/extend the config further
20
+ }),
21
+ );
22
+ return config;
23
+ };
package/package.json ADDED
@@ -0,0 +1,129 @@
1
+ {
2
+ "name": "@internetarchive/bookreader",
3
+ "version": "5.0.0-18",
4
+ "description": "The Internet Archive BookReader.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/internetarchive/bookreader.git"
8
+ },
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "module": "src/BookNavigator/BookNavigator.js",
13
+ "keywords": [
14
+ "online",
15
+ "bookreader",
16
+ "interface",
17
+ "ebooks",
18
+ "internet archive"
19
+ ],
20
+ "author": "Internet Archive",
21
+ "license": "AGPL-3.0",
22
+ "bugs": {
23
+ "url": "https://github.com/internetarchive/bookreader/issues"
24
+ },
25
+ "homepage": "https://github.com/internetarchive/bookreader#readme",
26
+ "private": false,
27
+ "dependencies": {
28
+ "@internetarchive/ia-activity-indicator": "^0.0.1",
29
+ "@internetarchive/ia-icons": "^1.2.2",
30
+ "@internetarchive/ia-menu-slider": "^1.1.0",
31
+ "@internetarchive/ia-sharing-options": "^0.1.2",
32
+ "@internetarchive/icon-bookmark": "^1.1.3",
33
+ "@internetarchive/icon-collapse-sidebar": "^1.1.0",
34
+ "@internetarchive/icon-edit-pencil": "1.1.5",
35
+ "@internetarchive/icon-magnify-minus": "^1.2.3",
36
+ "@internetarchive/icon-magnify-plus": "^1.2.3",
37
+ "@internetarchive/icon-search": "^1.2.3",
38
+ "@internetarchive/modal-manager": "^0.1.0",
39
+ "lit-element": "^2.4.0",
40
+ "lit-html": "^1.3.0"
41
+ },
42
+ "devDependencies": {
43
+ "@babel/core": "7.15.0",
44
+ "@babel/plugin-proposal-class-properties": "^7.14.5",
45
+ "@babel/plugin-proposal-decorators": "^7.14.5",
46
+ "@babel/preset-env": "7.15.0",
47
+ "@open-wc/testing": "^2.5.33",
48
+ "@open-wc/testing-karma": "^4.0.9",
49
+ "@types/jest": "27.0.1",
50
+ "babel-eslint": "^10.1.0",
51
+ "babel-loader": "8.2.2",
52
+ "codecov": "3.8.3",
53
+ "concurrently": "6.0.2",
54
+ "core-js": "3.16.2",
55
+ "cpx2": "3.0.0",
56
+ "eslint": "^7.32.0",
57
+ "eslint-plugin-no-jquery": "^2.6.0",
58
+ "eslint-plugin-testcafe": "0.2.1",
59
+ "hammerjs": "^2.0.8",
60
+ "http-server": "0.12.3",
61
+ "iso-language-codes": "1.1.0",
62
+ "jest": "27.0.6",
63
+ "jquery": "1.11.3",
64
+ "jquery-colorbox": "1.6.4",
65
+ "jquery-ui": "1.12.1",
66
+ "jquery-ui-touch-punch": "0.2.3",
67
+ "jquery.browser": "0.1.0",
68
+ "jquery.mmenu": "5.6.5",
69
+ "karma-coverage": "^2.0.3",
70
+ "live-server": "1.2.1",
71
+ "node-fetch": "2.6.1",
72
+ "regenerator-runtime": "0.13.9",
73
+ "sass": "1.38.2",
74
+ "sinon": "11.1.2",
75
+ "soundmanager2": "2.97.20170602",
76
+ "svgo": "2.4.0",
77
+ "testcafe": "1.15.3",
78
+ "webpack": "5.51.1",
79
+ "webpack-cli": "4.8.0"
80
+ },
81
+ "jest": {
82
+ "testEnvironment": "jsdom",
83
+ "transformIgnorePatterns": [
84
+ "node_modules/(?!(lit-html|lit-element|lit)/)"
85
+ ],
86
+ "setupFiles": [
87
+ "./src/jquery-wrapper.js"
88
+ ],
89
+ "roots": [
90
+ "<rootDir>/src/",
91
+ "<rootDir>/tests/"
92
+ ],
93
+ "testPathIgnorePatterns": [
94
+ "<rootDir>/tests/e2e/",
95
+ "<rootDir>/tests/karma/"
96
+ ],
97
+ "coverageDirectory": "<rootDir>/coverage-jest"
98
+ },
99
+ "scripts": {
100
+ "preversion": "npm run test && node scripts/preversion.js",
101
+ "version": "node scripts/version.js",
102
+ "postversion": "node scripts/postversion.js",
103
+ "build": "npm run clean && npm run build-js && npm run build-css && npm run build-assets",
104
+ "build-assets": "npx cpx \"src/assets/**/*\" BookReader && npx svgo -f BookReader/icons && npx svgo -f BookReader/images",
105
+ "build-assets:watch": "npx cpx --watch --verbose \"src/assets/**/*\" BookReader",
106
+ "build-js": "npx webpack",
107
+ "build-js:watch": "npx webpack --mode=development --watch",
108
+ "build-css": "npx sass --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
109
+ "build-css:watch": "npx sass --watch --no-source-map ./src/css/BookReader.scss ./BookReader/BookReader.css",
110
+ "clean": "rm -r BookReader/ || true",
111
+ "lint": "npx eslint src/ tests/ *.js",
112
+ "lint:fix": "npx eslint --fix src/ tests/ *.js",
113
+ "serve": "npx http-server . --port 8000",
114
+ "serve-live": "npx live-server . --port 8000 --watch=index.html,BookReader,BookReaderDemo",
115
+ "serve-dev": "npm run build-css && npx concurrently --kill-others npm:serve-live npm:build-*:watch",
116
+ "test": "npm run test-jest && npm run test-karma",
117
+ "test:e2e": "npm run build && env BASE_URL=http://127.0.0.1:8000/BookReaderDemo/ npx testcafe",
118
+ "test:e2e:dev": "env BASE_URL=http://127.0.0.1:8000/BookReaderDemo/ npx testcafe --live --dev",
119
+ "test-jest:watch": "npx jest --watch",
120
+ "test-jest": "npx jest --coverage --colors",
121
+ "test-karma": "npx karma start --coverage",
122
+ "test-karma:watch": "npx karma start --auto-watch=true --single-run=false",
123
+ "DOCS:update:test-deps": "If CI succeeds, these should be good to update",
124
+ "update:test-deps": "npm i @open-wc/testing@latest @open-wc/testing-karma@latest @types/jest@latest babel-eslint@latest codecov@latest eslint@latest eslint-plugin-testcafe@latest jest@latest karma-coverage@latest sinon@latest testcafe@latest",
125
+ "DOCS:update:build-deps": "These can cause strange changes, so do an npm run build + check file size (git diff --stat), and check the site is as expected",
126
+ "update:build-deps": "npm i @babel/core@latest @babel/preset-env@latest babel-loader@latest core-js@latest regenerator-runtime@latest sass@latest svgo@latest webpack@latest webpack-cli@latest",
127
+ "codecov": "npx codecov"
128
+ }
129
+ }
package/screenshot.png ADDED
Binary file
@@ -0,0 +1,10 @@
1
+ const fs = require('fs');
2
+ const { version: NEW_VERSION } = require('../package.json');
3
+
4
+ const tag = `v${NEW_VERSION}`;
5
+ const releaseBody = fs.readFileSync('CHANGELOG.md').toString()
6
+ .split(/\n# /)[0] // split at headings and get first heading
7
+ .split('\n').slice(1).join('\n'); // remove heading line
8
+
9
+ const GITHUB_RELEASE_URL = `https://github.com/internetarchive/bookreader/releases/new?tag=${tag}&title=${tag}&body=${encodeURIComponent(releaseBody)}`;
10
+ console.log(`After you push/merge, use this link to release: ${GITHUB_RELEASE_URL}`);
@@ -0,0 +1,14 @@
1
+ const { version: OLD_VERSION } = require('../package.json');
2
+ const fetch = require('node-fetch');
3
+ const OLD_RELEASE_URL = `https://api.github.com/repos/internetarchive/bookreader/releases/tags/v${OLD_VERSION}`;
4
+
5
+ async function main() {
6
+ const {created_at} = await fetch(OLD_RELEASE_URL).then(r => r.json());
7
+ const today = new Date().toISOString().slice(0, -5);
8
+ const searchUrl = 'https://github.com/internetarchive/bookreader/pulls?' + new URLSearchParams({
9
+ q: `is:pr is:merged merged:${created_at}..${today}Z sort:updated-asc`
10
+ }).toString();
11
+ console.log(`Here are all the PRs that were merged since the last version: ${searchUrl}`);
12
+ }
13
+
14
+ main();
@@ -0,0 +1,26 @@
1
+ const fs = require('fs');
2
+ const { execSync } = require('child_process');
3
+ const { version: NEW_VERSION } = require('../package.json');
4
+
5
+ async function main() {
6
+ // Update the changelog
7
+ const old_changelog = fs.readFileSync('CHANGELOG.md').toString();
8
+ const new_changelog = `# ${NEW_VERSION}\n<!-- Write here... -->\n\n` + old_changelog;
9
+ fs.writeFileSync('CHANGELOG.md', new_changelog);
10
+ while (fs.readFileSync('CHANGELOG.md').toString().includes('<!-- Write here... -->')) {
11
+ console.log('Changelog contains dummy text. Update the changelog, and press ENTER continue.');
12
+ await new Promise(res => process.stdin.once("data", res));
13
+ }
14
+ execSync('git add CHANGELOG.md');
15
+
16
+ // npm install to make sure deps are correct
17
+ execSync('npm install', { stdio: "inherit" });
18
+
19
+ // build
20
+ execSync('npm run build', { stdio: "inherit" });
21
+
22
+ // Add build files
23
+ execSync('git add ./BookReader');
24
+ }
25
+
26
+ main().then(() => process.exit());
@@ -0,0 +1,14 @@
1
+ export class Book {
2
+ constructor() {
3
+ this.metadata = {};
4
+ this.isRestricted = null;
5
+ }
6
+
7
+ setMetadata(itemMetadata) {
8
+ this.metadata = itemMetadata;
9
+ }
10
+
11
+ setRestriction(isRestricted) {
12
+ this.isRestricted = isRestricted;
13
+ }
14
+ }