@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
@@ -0,0 +1,112 @@
1
+ /**
2
+ * BookReaderTemplate to load BookNavigator components
3
+ */
4
+
5
+ import { LitElement, html, css } from 'lit-element';
6
+
7
+ import '../ItemNavigator/ItemNavigator.js';
8
+ import '../BookNavigator/BookNavigator.js';
9
+
10
+ export class BookReader extends LitElement {
11
+ static get properties() {
12
+ return {
13
+ base64Json: { type: String },
14
+ baseHost: { type: String },
15
+ };
16
+ }
17
+
18
+ constructor() {
19
+ super();
20
+ this.base64Json = '';
21
+ this.baseHost = 'https://archive.org';
22
+ }
23
+
24
+ firstUpdated() {
25
+ this.fetchData();
26
+ }
27
+
28
+ /**
29
+ * Fetch metadata response from public metadata API
30
+ * convert response to base64 data
31
+ * set base64 data to props
32
+ */
33
+ async fetchData() {
34
+ const ocaid = new URLSearchParams(location.search).get('ocaid');
35
+ const response = await fetch(`${this.baseHost}/metadata/${ocaid}`);
36
+ const bookMetadata = await response.json();
37
+ const jsonBtoa = btoa(JSON.stringify(bookMetadata));
38
+ this.setBaseJSON(jsonBtoa);
39
+ }
40
+
41
+ /**
42
+ * Set base64 data to prop
43
+ * @param {string} value - base64 string format
44
+ */
45
+ setBaseJSON(value) {
46
+ this.base64Json = value;
47
+ }
48
+
49
+ render() {
50
+ return html`
51
+ <div class="ia-bookreader">
52
+ <item-navigator
53
+ itemType="bookreader"
54
+ basehost=${this.baseHost}
55
+ item=${this.base64Json}>
56
+ <div slot="bookreader">
57
+ <slot name="bookreader"></slot>
58
+ </div>
59
+ </item-navigator>
60
+ </div>
61
+ `;
62
+ }
63
+
64
+ static get styles() {
65
+ return css`
66
+ :host {
67
+ display: block;
68
+ --primaryBGColor: var(--black, #000);
69
+ --secondaryBGColor: #222;
70
+ --tertiaryBGColor: #333;
71
+ --primaryTextColor: var(--white, #fff);
72
+ --primaryCTAFill: #194880;
73
+ --primaryCTABorder: #c5d1df;
74
+ --secondaryCTAFill: #333;
75
+ --secondaryCTABorder: #999;
76
+ --primaryErrorCTAFill: #e51c26;
77
+ --primaryErrorCTABorder: #f8c6c8;
78
+ }
79
+
80
+ .ia-bookreader {
81
+ background-color: var(--primaryBGColor);
82
+ position: relative;
83
+ height: auto;
84
+ }
85
+
86
+ item-navigator {
87
+ display: block;
88
+ width: 100%;
89
+ color: var(--primaryTextColor);
90
+ --menuButtonLabelDisplay: block;
91
+ --menuWidth: 320px;
92
+ --menuSliderBg: var(--secondaryBGColor);
93
+ --activeButtonBg: var(--tertiaryBGColor);
94
+ --subpanelRightBorderColor: var(--secondaryCTABorder);
95
+ --animationTiming: 100ms;
96
+ --iconFillColor: var(--primaryTextColor);
97
+ --iconStrokeColor: var(--primaryTextColor);
98
+ --menuSliderHeaderIconHeight: 2rem;
99
+ --menuSliderHeaderIconWidth: 2rem;
100
+ --iconWidth: 2.4rem;
101
+ --iconHeight: 2.4rem;
102
+ --shareLinkColor: var(--primaryTextColor);
103
+ --shareIconBorder: var(--primaryTextColor);
104
+ --shareIconBg: var(--secondaryBGColor);
105
+ --activityIndicatorLoadingDotColor: var(--primaryTextColor);
106
+ --activityIndicatorLoadingRingColor: var(--primaryTextColor);
107
+ }
108
+ `;
109
+ }
110
+ }
111
+
112
+ window.customElements.define("ia-bookreader", BookReader);
@@ -0,0 +1,376 @@
1
+ import { css, html, LitElement } from "lit-element";
2
+ import { nothing } from "lit-html";
3
+ import { IAMenuSlider } from "@internetarchive/ia-menu-slider";
4
+ import IAIcon from "@internetarchive/ia-icons";
5
+ import { ModalConfig } from "@internetarchive/modal-manager";
6
+
7
+ export default class ItemNavigator extends LitElement {
8
+ static get properties() {
9
+ return {
10
+ baseHost: { type: String },
11
+ item: {
12
+ type: Object,
13
+ converter(value) {
14
+ return !value ? {} : JSON.parse(atob(value));
15
+ },
16
+ },
17
+ itemType: { type: String },
18
+ menuShortcuts: {
19
+ type: Array,
20
+ hasChanged(newVal, oldVal) {
21
+ if (newVal !== oldVal) {
22
+ return true;
23
+ }
24
+ return false;
25
+ },
26
+ },
27
+ menuOpened: { type: Boolean },
28
+ menuContents: { type: Array },
29
+ openMenu: { type: String },
30
+ signedIn: {
31
+ type: Boolean,
32
+ converter: (arg) => {
33
+ if (typeof (arg) === 'boolean') {
34
+ return arg;
35
+ }
36
+ return arg === 'true';
37
+ },
38
+ },
39
+ viewportInFullscreen: { type: Boolean },
40
+ };
41
+ }
42
+
43
+ constructor() {
44
+ /** TODO: Request BookModel.js
45
+ * Request BookNavigator.js
46
+ * Show loading spinner
47
+ * When JS assets loaded:
48
+ * - render book-navigator component
49
+ */
50
+ super();
51
+ this.baseHost = 'archive.org';
52
+ this.item = {};
53
+ this.itemType = '';
54
+ this.menuOpened = false;
55
+ this.signedIn = false;
56
+ this.menuShortcuts = [];
57
+ this.menuContents = [];
58
+ this.viewportInFullscreen = false;
59
+ this.openMenu = '';
60
+ this.renderModalManager();
61
+ }
62
+
63
+ showItemNavigatorModal({ detail }) {
64
+ this.modal.showModal({
65
+ config: this.modalConfig,
66
+ customModalContent: detail.customModalContent,
67
+ });
68
+ }
69
+
70
+ closeItemNavigatorModal() {
71
+ this.modal.closeModal();
72
+ }
73
+
74
+ /**
75
+ * Event handler - handles viewport slot going into fullscreen
76
+ * @param {Event} e - custom event object
77
+ */
78
+ manageViewportFullscreen({ detail }) {
79
+ const { isFullScreen } = detail;
80
+ this.viewportInFullscreen = isFullScreen;
81
+ }
82
+
83
+ /**
84
+ * Event handler - handles viewport slot going into fullscreen
85
+ * @param {Event} e - custom event object
86
+ * @param {object} event.detail - custom event detail
87
+ * @param {(open, toggle, close)} detail.action
88
+ * @param {string} detail.menuId - menu id to be shown
89
+ */
90
+ manageSideMenuEvents({ detail }) {
91
+ const { action = '', menuId = '' } = detail;
92
+ if (!menuId) { return; }
93
+ switch (action) {
94
+ case 'open':
95
+ this.openShortcut(menuId);
96
+ break;
97
+ case 'toggle':
98
+ this.openMenu = menuId;
99
+ this.toggleMenu();
100
+ break;
101
+ default:
102
+ this.closeMenu();
103
+ }
104
+ }
105
+
106
+ toggleMenu() {
107
+ this.menuOpened = !this.menuOpened;
108
+ }
109
+
110
+ closeMenu() {
111
+ this.menuOpened = false;
112
+ }
113
+
114
+ /**
115
+ * Opens menu to selected menu
116
+ * @param {string} selectedMenuId
117
+ */
118
+ openShortcut(selectedMenuId = '') {
119
+ // open sidemenu to proper tab
120
+ this.openMenu = selectedMenuId;
121
+ this.menuOpened = true;
122
+ }
123
+
124
+ setOpenMenu({ detail }) {
125
+ const { id } = detail;
126
+ this.openMenu = id === this.openMenu ? '' : id;
127
+ }
128
+
129
+ setMenuContents({ detail }) {
130
+ this.menuContents = [...detail];
131
+ }
132
+
133
+ setMenuShortcuts({ detail }) {
134
+ this.menuShortcuts = [...detail];
135
+ }
136
+
137
+ /**
138
+ * computes classes for item-navigator <section> node
139
+ */
140
+ get menuClass() {
141
+ const drawerState = this.menuOpened ? 'open' : '';
142
+ const fullscreenState = this.viewportInFullscreen ? 'fullscreen' : '';
143
+ return `${drawerState} ${fullscreenState}`;
144
+ }
145
+
146
+ get menuToggleButton() {
147
+ return html`
148
+ <button class="toggle-menu" @click=${this.toggleMenu.bind(this)}>
149
+ <div>
150
+ <ia-icon icon="ellipses" style="width: var(--iconWidth); height: var(--iconHeight);"></ia-icon>
151
+ </div>
152
+ </button>
153
+ `;
154
+ }
155
+
156
+ get menuSlider() {
157
+ return html`
158
+ <div id="menu">
159
+ <ia-menu-slider
160
+ .menus=${this.menuContents}
161
+ .open=${true}
162
+ .selectedMenu=${this.openMenu}
163
+ @menuTypeSelected=${this.setOpenMenu}
164
+ @menuSliderClosed=${this.closeMenu}
165
+ ?manuallyHandleClose=${true}
166
+ ?animateMenuOpen=${false}
167
+ ></ia-menu-slider>
168
+ </div>
169
+ `;
170
+ }
171
+
172
+ /**
173
+ * Returns the shortcut buttons for minimized view
174
+ * @return html
175
+ */
176
+ get shortcuts() {
177
+ // todo: aria tags
178
+ const shortcuts = this.menuShortcuts.map(({
179
+ icon,
180
+ id,
181
+ }) => html`
182
+ <button class="shortcut ${id}" @click="${(e) => { this.openShortcut(id); }}">
183
+ ${icon}
184
+ </button>
185
+ `);
186
+
187
+ return html`<div class="shortcuts">${shortcuts}</div>`;
188
+ }
189
+
190
+ /**
191
+ * Returns the side menu given it's open/close state
192
+ * @return html
193
+ */
194
+ get renderSideMenu() {
195
+ // todo: aria tags
196
+ return html`
197
+ <nav>
198
+ <div class="minimized">
199
+ ${this.shortcuts}
200
+ ${this.menuToggleButton}
201
+ </div>
202
+ ${this.menuSlider}
203
+ </nav>
204
+ `;
205
+ }
206
+
207
+ /**
208
+ * Given a itemType, this chooses the proper viewport component
209
+ * @return html
210
+ */
211
+ get renderViewport() {
212
+ if (this.itemType === 'bookreader') {
213
+ return html`
214
+ <book-navigator
215
+ .baseHost=${this.baseHost}
216
+ .book=${this.item}
217
+ ?signedIn=${this.signedIn}
218
+ ?sideMenuOpen=${this.menuOpened}
219
+ @ViewportInFullScreen=${this.manageViewportFullscreen}
220
+ @updateSideMenu=${this.manageSideMenuEvents}
221
+ @menuUpdated=${this.setMenuContents}
222
+ @menuShortcutsUpdated=${this.setMenuShortcuts}
223
+ @showItemNavigatorModal=${this.showItemNavigatorModal}
224
+ @closeItemNavigatorModal=${this.closeItemNavigatorModal}
225
+ >
226
+ <div slot="bookreader">
227
+ <slot name="bookreader"></slot>
228
+ </div>
229
+ </book-navigator>
230
+ `;
231
+ }
232
+ return html`<div class="viewport"></div>`;
233
+ }
234
+
235
+ renderModalManager() {
236
+ this.modal = document.createElement('modal-manager');
237
+ this.modal.setAttribute('id', 'item-navigator-modal');
238
+ this.modalConfig = new ModalConfig();
239
+ this.modalConfig.title = 'Delete Bookmark';
240
+ this.modalConfig.headline = 'This bookmark contains a note. Deleting it will permanently delete the note. Are you sure?';
241
+ this.modalConfig.headerColor = '#194880';
242
+ document.body.appendChild(this.modal);
243
+ }
244
+
245
+ render() {
246
+ const renderMenu = this.menuContents.length || this.menuShortcuts.length;
247
+ return html`
248
+ <div id="frame" class=${this.menuClass}>
249
+ <slot name="item-nav-header"></slot>
250
+ <div class="menu-and-reader">
251
+ ${renderMenu ? this.renderSideMenu : nothing}
252
+ <div id="reader">
253
+ ${this.renderViewport}
254
+ </div>
255
+ </div>
256
+ </div>
257
+ `;
258
+ }
259
+
260
+ static get styles() {
261
+ const subnavWidth = css`var(--menuWidth, 320px)`;
262
+ const tabletPlusQuery = css`@media (min-width: 640px)`;
263
+ const transitionTiming = css`var(--animationTiming, 200ms)`;
264
+ const transitionEffect = css`transform ${transitionTiming} ease-out`;
265
+
266
+ return css`
267
+ #frame {
268
+ position: relative;
269
+ overflow: hidden;
270
+ }
271
+
272
+ #frame.fullscreen,
273
+ #frame.fullscreen #reader {
274
+ height: 100vh;
275
+ }
276
+
277
+ button {
278
+ cursor: pointer;
279
+ padding: 0;
280
+ border: 0;
281
+ }
282
+
283
+ button:focus,
284
+ button:active {
285
+ outline: none;
286
+ }
287
+
288
+ .menu-and-reader {
289
+ position: relative;
290
+ }
291
+
292
+ nav button {
293
+ background: none;
294
+ }
295
+
296
+ nav .minimized {
297
+ background: rgba(0, 0, 0, .7);
298
+ border-bottom-right-radius: 5%;
299
+ position: absolute;
300
+ padding-top: .6rem;
301
+ left: 0;
302
+ width: 4rem;
303
+ z-index: 2;
304
+ }
305
+
306
+ nav .minimized button {
307
+ width: var(--iconWidth);
308
+ height: var(--iconHeight);
309
+ margin: auto;
310
+ display: inline-flex;
311
+ vertical-align: middle;
312
+ -webkit-box-align: center;
313
+ align-items: center;
314
+ -webkit-box-pack: center;
315
+ justify-content: center;
316
+ width: 4rem;
317
+ height: 4rem;
318
+ }
319
+
320
+ nav .minimized button.toggle-menu > * {
321
+ border: 2px solid var(--iconStrokeColor);
322
+ border-radius: var(--iconWidth);
323
+ width: var(--iconWidth);
324
+ height: var(--iconHeight);
325
+ margin: auto;
326
+ }
327
+
328
+ #menu {
329
+ position: absolute;
330
+ top: 0;
331
+ bottom: 0;
332
+ left: 0;
333
+ z-index: 3;
334
+ overflow: hidden;
335
+ transform: translateX(-${subnavWidth});
336
+ width: ${subnavWidth};
337
+ transform: translateX(calc(${subnavWidth} * -1));
338
+ transition: ${transitionEffect};
339
+ }
340
+
341
+ #reader {
342
+ position: relative;
343
+ z-index: 1;
344
+ transition: ${transitionEffect};
345
+ transform: translateX(0);
346
+ width: 100%;
347
+ }
348
+
349
+ .open #menu {
350
+ width: ${subnavWidth};
351
+ transform: translateX(0);
352
+ transition: ${transitionEffect};
353
+ }
354
+
355
+ ${tabletPlusQuery} {
356
+ .open #reader {
357
+ transition: ${transitionEffect};
358
+ transform: translateX(${subnavWidth});
359
+ width: calc(100% - ${subnavWidth});
360
+ }
361
+ }
362
+
363
+ #loading-indicator {
364
+ display: none;
365
+ }
366
+
367
+ #loading-indicator.visible {
368
+ display: block;
369
+ }
370
+ `;
371
+ }
372
+ }
373
+
374
+ customElements.define('ia-icon', IAIcon);
375
+ customElements.define('ia-menu-slider', IAMenuSlider);
376
+ customElements.define('item-navigator', ItemNavigator);
@@ -0,0 +1,33 @@
1
+ import { html } from 'lit-element';
2
+
3
+ /* register subpanel */
4
+ import { IASharingOptions } from '@internetarchive/ia-sharing-options';
5
+ customElements.define('ia-sharing-options', IASharingOptions);
6
+
7
+ export default class {
8
+ constructor(metadata = {}, baseHost, baseItemType, subPrefix = '') {
9
+ const { identifier, creator, title } = metadata;
10
+ const encodedSubPrefix = encodeURIComponent(subPrefix);
11
+ const urlIdentifier = subPrefix && (subPrefix !== identifier) ? `${identifier}/${encodedSubPrefix}` : identifier;
12
+ this.idPath = urlIdentifier;
13
+ this.itemType = baseItemType;
14
+ const label = `Share this ${this.reconcileItemType}`;
15
+ this.icon = html`<ia-icon icon="share" style="width: var(--iconWidth); height: var(--iconHeight);"></ia-icon>`;
16
+ this.label = label;
17
+ this.id = 'share';
18
+ this.component = html`<ia-sharing-options
19
+ identifier="${urlIdentifier}"
20
+ type="book"
21
+ creator="${creator}"
22
+ description="${title}"
23
+ baseHost="${baseHost}"
24
+ ></ia-sharing-options>`;
25
+ }
26
+
27
+ get reconcileItemType() {
28
+ if (this.itemType === 'bookreader') {
29
+ return 'book';
30
+ }
31
+ return 'item';
32
+ }
33
+ }
@@ -0,0 +1,12 @@
1
+ <svg
2
+ width="11"
3
+ height="19"
4
+ viewBox="0 0 11 19"
5
+ version="1.1"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ aria-labelledby="1upTitleID 1upDescID"
8
+ >
9
+ <title id="1upTitleID">One-page mode</title>
10
+ <desc id="1upDescID">An illustration of a rectangle representing a book page</desc>
11
+ <path d="m9.77194068 1c.10796015 0 .19839954.08352773.2220361.19570997l.00602322.05822495v16.49213018c0 .1202095-.07501651.22091-.17576747.2472283l-.05229185.0067066h-8.54388136c-.10796015 0-.19839954-.0835277-.2220361-.19571l-.00602322-.0582249v-16.49213018c0-.12020948.07501651-.22091.17576747-.24722832l.05229185-.0067066z" fill="none" stroke="#fff" stroke-width="1.5" />
12
+ </svg>
@@ -0,0 +1,15 @@
1
+ <svg
2
+ width="20"
3
+ height="19"
4
+ viewBox="0 0 20 19"
5
+ version="1.1"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ aria-labelledby="2upTitleID 2upDescID"
8
+ >
9
+ <title id="2upTitleID">Two-page mode</title>
10
+ <desc id="2upDescID">An illustration of two rectangles in a row representing an open book</desc>
11
+ <g fill="none" fill-rule="evenodd" stroke="#fff" stroke-width="1.5">
12
+ <path d="m18.5438814 1c.2159203 0 .396799.08352773.4440722.19570997l.0120464.05822495v16.49213018c0 .1202095-.150033.22091-.3515349.2472283l-.1045837.0067066h-17.08776275c-.21592031 0-.3967991-.0835277-.44407221-.19571l-.01204644-.0582249v-16.49213018c0-.12020948.15003302-.22091.35153494-.24722832l.10458371-.0067066z" />
13
+ <path d="m10 2v15" stroke-linecap="square" />
14
+ </g>
15
+ </svg>
@@ -0,0 +1,26 @@
1
+ <svg
2
+ width="21"
3
+ height="19"
4
+ viewBox="0 0 21 19"
5
+ version="1.1"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ aria-labelledby="advanceTitleID advanceDescID"
8
+ >
9
+ <title id="advanceTitleID">Advance icon</title>
10
+ <desc id="advanceDescID">An arrow pointing in a forward direction</desc>
11
+ <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
12
+ <g transform="translate(-200.000000, -15.000000)">
13
+ <g transform="translate(56.922243, 5.000000)">
14
+ <g transform="translate(144.000000, 10.000000)">
15
+ <g transform="translate(11.000000, 10.000000) scale(-1, 1) translate(-11.000000, -10.000000) translate(1.000000, 0.000000)">
16
+ <polyline stroke="#fff" stroke-width="2" stroke-linejoin="round" points="14.4444444 16.6666667 20 16.6666667 20 3.33333333 5.55555556 3.33333333"></polyline>
17
+ <polygon fill="#fff" points="5.55555556 0 5.55555556 6.66666667 1.11111111 3.33333333"></polygon>
18
+ <text transform="translate(6.666667, 13.333333) scale(-1, 1) translate(-6.666667, -13.333333) " font-family="HelveticaNeue, Helvetica Neue, sans-serif" font-size="10" font-weight="normal" fill="#fff">
19
+ <tspan x="0" y="17.3333333">10</tspan>
20
+ </text>
21
+ </g>
22
+ </g>
23
+ </g>
24
+ </g>
25
+ </g>
26
+ </svg>
@@ -0,0 +1 @@
1
+ <svg height="8" viewBox="0 0 5 8" width="5" xmlns="http://www.w3.org/2000/svg"><path d="m.30238333.28352881c.36525795-.3556459.93280829-.37581056 1.32099799-.06558269l.09308988.0844372 3 3.08108108.08194437.09533317c.27484336.36339327.26799481.87009349-.01656959 1.22592581l-.08449101.09308363-3 2.91891892-.09533796.08189041c-.3633964.27465435-.86994721.2677153-1.22568389-.01679019l-.09305904-.08447119-.08189041-.09533796c-.27465435-.3633964-.2677153-.86994722.01679019-1.22568389l.0844712-.09305904 2.28335496-2.22227407-2.30247119-2.36338332-.08192523-.09530804c-.2997677-.39632298-.26447822-.96313393.10077973-1.31877983z" fill="#fff" fill-rule="evenodd"/></svg>
@@ -0,0 +1 @@
1
+ <svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m6 0c3.3137085 0 6 2.6862915 6 6s-2.6862915 6-6 6-6-2.6862915-6-6 2.6862915-6 6-6zm-2.3406945 2.96359116c-.19486814-.13499605-.46429254-.1157109-.63785889.05785545-.19526215.19526215-.19526215.51184463 0 .70710678l2.27155339 2.27144661-2.20567981 2.20557302-.05785545.06924789c-.13499605.19486814-.1157109.46429254.05785545.6378589.19526215.19526214.51184464.19526214.70710679 0l2.20557302-2.20567981 2.20557302 2.20567981.06924789.05785545c.19486814.13499605.46429254.1157109.6378589-.05785545.19526214-.19526215.19526214-.51184464 0-.70710679l-2.20567981-2.20557302 2.27155339-2.27144661.05785545-.06924789c.13499605-.19486814.1157109-.46429254-.05785545-.63785889-.19526215-.19526215-.51184463-.19526215-.70710678 0l-2.27144661 2.27155339-2.27144661-2.27155339z" fill="#222" fill-rule="evenodd"/></svg>
@@ -0,0 +1 @@
1
+ <svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m6 0c3.3137085 0 6 2.6862915 6 6s-2.6862915 6-6 6-6-2.6862915-6-6 2.6862915-6 6-6zm-2.3406945 2.96359116c-.19486814-.13499605-.46429254-.1157109-.63785889.05785545-.19526215.19526215-.19526215.51184463 0 .70710678l2.27155339 2.27144661-2.20567981 2.20557302-.05785545.06924789c-.13499605.19486814-.1157109.46429254.05785545.6378589.19526215.19526214.51184464.19526214.70710679 0l2.20557302-2.20567981 2.20557302 2.20567981.06924789.05785545c.19486814.13499605.46429254.1157109.6378589-.05785545.19526214-.19526215.19526214-.51184464 0-.70710679l-2.20567981-2.20557302 2.27155339-2.27144661.05785545-.06924789c.13499605-.19486814.1157109-.46429254-.05785545-.63785889-.19526215-.19526215-.51184463-.19526215-.70710678 0l-2.27144661 2.27155339-2.27144661-2.27155339z" fill="#fff" fill-rule="evenodd"/></svg>
@@ -0,0 +1,17 @@
1
+ <svg
2
+ width="18"
3
+ height="18"
4
+ viewBox="0 0 18 18"
5
+ version="1.1"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ aria-labelledby="fullscreenTitleID fullscreenDescID"
8
+ >
9
+ <title id="fullscreenTitleID">Fullscreen</title>
10
+ <desc id="fullscreenDescID">An illustration of a square</desc>
11
+ <g fill="none" fill-rule="evenodd" stroke="#fff" stroke-linejoin="round" stroke-width="1.5">
12
+ <path d="m12 1h5v5" />
13
+ <path d="m12 12h5v5" transform="matrix(1 0 0 -1 0 29)" />
14
+ <path d="m1 1h5v5" transform="matrix(-1 0 0 1 7 0)" />
15
+ <path d="m1 12h5v5" transform="matrix(-1 0 0 -1 7 29)" />
16
+ </g>
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg
2
+ width="18"
3
+ height="18"
4
+ viewBox="0 0 18 18"
5
+ version="1.1"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ aria-labelledby="fullscreen-exitTitleID fullscreen-exitDescID"
8
+ >
9
+ <title id="fullscreen-exitTitleID">Exit fullscreen</title>
10
+ <desc id="fullscreen-exitDescID">An illustration of a crosshair</desc>
11
+ <g fill="none" fill-rule="evenodd" stroke="#fff" stroke-linejoin="round" stroke-width="1.5">
12
+ <path d="m12 1h5v5" transform="matrix(-1 0 0 -1 29 7)" />
13
+ <path d="m12 12h5v5" transform="matrix(-1 0 0 1 29 0)" />
14
+ <path d="m1 1h5v5" transform="matrix(1 0 0 -1 0 7)" />
15
+ <path d="m1 12h5v5" />
16
+ </g>
17
+ </svg>
@@ -0,0 +1,15 @@
1
+ <svg
2
+ width="30px"
3
+ height="24px"
4
+ viewBox="0 0 30 24"
5
+ version="1.1"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ aria-labelledby="hamburgerTitle hamburgerDescription">
8
+ <title id="hamburgerTitle">Menu icon</title>
9
+ <desc id="hamburgerDescription">Three parallel horizontal lines in a vertical column</desc>
10
+ <g stroke="none" stroke-width="3" fill="none" fill-rule="evenodd" stroke-linecap="round">
11
+ <path d="M2,2 L28,2" stroke="#fff"></path>
12
+ <path d="M2,12 L28,12" stroke="#fff"></path>
13
+ <path d="M2,22 L28,22" stroke="#fff"></path>
14
+ </g>
15
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg
2
+ width="12"
3
+ height="14"
4
+ viewBox="0 0 12 14"
5
+ version="1.1"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ aria-labelledby="leftArrowTitleID leftArrowDescID"
8
+ >
9
+ <title id="leftArrowTitleID">Left arrow</title>
10
+ <desc id="leftArrowDescID">An arrow pointing left</desc>
11
+ <polygon transform="translate(6.000000, 7.500000) scale(-1, 1) rotate(90.000000) translate(-6.000000, -7.500000) " points="6 2 13 13 -1 13" stroke="none" stroke-width="1" fill-rule="evenodd" fill="#fff"></polygon>
12
+ </svg>
@@ -0,0 +1,16 @@
1
+ <svg
2
+ width="18"
3
+ height="18"
4
+ viewBox="0 0 18 18"
5
+ version="1.1"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ aria-labelledby="magnify-minusTitleID magnify-minusDescID"
8
+ >
9
+ <title id="magnify-minusTitleID">Zoom out</title>
10
+ <desc id="magnify-minusDescID">An icon of a minus symbol</desc>
11
+ <g fill="none" fill-rule="evenodd">
12
+ <circle cx="7" cy="7" r="6" stroke="#fff" stroke-width="2" />
13
+ <path d="m12 12 4.335213 4.335213" stroke="#fff" stroke-linecap="round" stroke-width="2" />
14
+ <path d="m10 7.75v-1.5h-6v1.5z" fill="#fff" fill-rule="nonzero" />
15
+ </g>
16
+ </svg>