@internetarchive/bookreader 5.0.0-9-multiple-files → 5.0.0-90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/.eslintrc.js +21 -19
  2. package/.github/workflows/node.js.yml +81 -7
  3. package/.github/workflows/npm-publish.yml +6 -20
  4. package/.testcaferc.js +10 -0
  5. package/BookReader/BookReader.css +505 -1442
  6. package/BookReader/BookReader.js +2 -21564
  7. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  8. package/BookReader/BookReader.js.map +1 -1
  9. package/BookReader/ia-bookreader-bundle.js +1782 -0
  10. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +7 -0
  11. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  12. package/BookReader/icons/1up.svg +1 -12
  13. package/BookReader/icons/2up.svg +1 -15
  14. package/BookReader/icons/advance.svg +3 -26
  15. package/BookReader/icons/chevron-right.svg +1 -1
  16. package/BookReader/icons/close-circle-dark.svg +1 -0
  17. package/BookReader/icons/close-circle.svg +1 -1
  18. package/BookReader/icons/fullscreen.svg +1 -17
  19. package/BookReader/icons/fullscreen_exit.svg +1 -17
  20. package/BookReader/icons/hamburger.svg +1 -15
  21. package/BookReader/icons/left-arrow.svg +1 -12
  22. package/BookReader/icons/magnify-minus.svg +1 -16
  23. package/BookReader/icons/magnify-plus.svg +1 -17
  24. package/BookReader/icons/magnify.svg +1 -15
  25. package/BookReader/icons/pause.svg +1 -23
  26. package/BookReader/icons/play.svg +1 -22
  27. package/BookReader/icons/playback-speed.svg +1 -34
  28. package/BookReader/icons/read-aloud.svg +1 -22
  29. package/BookReader/icons/review.svg +3 -22
  30. package/BookReader/icons/thumbnails.svg +1 -17
  31. package/BookReader/icons/voice.svg +1 -0
  32. package/BookReader/icons/volume-full.svg +1 -22
  33. package/BookReader/images/BRicons.svg +5 -94
  34. package/BookReader/images/books_graphic.svg +1 -177
  35. package/BookReader/images/icon_book.svg +1 -12
  36. package/BookReader/images/icon_bookmark.svg +1 -12
  37. package/BookReader/images/icon_gear.svg +1 -14
  38. package/BookReader/images/icon_hamburger.svg +1 -20
  39. package/BookReader/images/icon_home.svg +1 -21
  40. package/BookReader/images/icon_info.svg +1 -11
  41. package/BookReader/images/icon_one_page.svg +1 -8
  42. package/BookReader/images/icon_pause.svg +1 -1
  43. package/BookReader/images/icon_play.svg +1 -1
  44. package/BookReader/images/icon_playback-rate.svg +1 -15
  45. package/BookReader/images/icon_search_button.svg +1 -8
  46. package/BookReader/images/icon_share.svg +1 -9
  47. package/BookReader/images/icon_skip-ahead.svg +1 -6
  48. package/BookReader/images/icon_skip-back.svg +2 -13
  49. package/BookReader/images/icon_speaker.svg +1 -18
  50. package/BookReader/images/icon_speaker_open.svg +1 -10
  51. package/BookReader/images/icon_thumbnails.svg +1 -12
  52. package/BookReader/images/icon_toc.svg +1 -5
  53. package/BookReader/images/icon_two_pages.svg +1 -9
  54. package/BookReader/images/marker_chap-off.svg +1 -11
  55. package/BookReader/images/marker_chap-on.svg +1 -11
  56. package/BookReader/images/marker_srch-on.svg +1 -11
  57. package/BookReader/images/unviewable_page.png +0 -0
  58. package/BookReader/jquery-3.js +2 -0
  59. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  60. package/BookReader/plugins/plugin.archive_analytics.js +1 -172
  61. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  62. package/BookReader/plugins/plugin.autoplay.js +1 -165
  63. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  64. package/BookReader/plugins/plugin.chapters.js +22 -301
  65. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  66. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  67. package/BookReader/plugins/plugin.iframe.js +1 -74
  68. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  69. package/BookReader/plugins/plugin.iiif.js +2 -0
  70. package/BookReader/plugins/plugin.iiif.js.map +1 -0
  71. package/BookReader/plugins/plugin.resume.js +1 -368
  72. package/BookReader/plugins/plugin.resume.js.map +1 -1
  73. package/BookReader/plugins/plugin.search.js +2 -1420
  74. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  75. package/BookReader/plugins/plugin.search.js.map +1 -1
  76. package/BookReader/plugins/plugin.text_selection.js +2 -1080
  77. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  78. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  79. package/BookReader/plugins/plugin.tts.js +2 -9193
  80. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  81. package/BookReader/plugins/plugin.tts.js.map +1 -1
  82. package/BookReader/plugins/plugin.url.js +1 -269
  83. package/BookReader/plugins/plugin.url.js.map +1 -1
  84. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  85. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  86. package/BookReader/webcomponents-bundle.js +3 -0
  87. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  88. package/BookReader/webcomponents-bundle.js.map +1 -0
  89. package/BookReaderDemo/BookReaderDemo.css +18 -19
  90. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -3
  91. package/BookReaderDemo/BookReaderJSSimple.js +1 -0
  92. package/BookReaderDemo/IADemoBr.js +144 -0
  93. package/BookReaderDemo/demo-advanced.html +2 -2
  94. package/BookReaderDemo/demo-embed-iframe-src.html +2 -1
  95. package/BookReaderDemo/demo-fullscreen-mobile.html +3 -5
  96. package/BookReaderDemo/demo-fullscreen.html +2 -4
  97. package/BookReaderDemo/demo-iiif.html +99 -12
  98. package/BookReaderDemo/demo-internetarchive.html +214 -18
  99. package/BookReaderDemo/demo-multiple.html +2 -1
  100. package/BookReaderDemo/demo-preview-pages.html +526 -525
  101. package/BookReaderDemo/demo-simple.html +2 -1
  102. package/BookReaderDemo/demo-vendor-fullscreen.html +2 -4
  103. package/BookReaderDemo/ia-multiple-volumes-manifest.js +170 -0
  104. package/BookReaderDemo/immersion-1up.html +2 -2
  105. package/BookReaderDemo/immersion-mode.html +2 -4
  106. package/BookReaderDemo/toggle_controls.html +3 -2
  107. package/BookReaderDemo/view_mode.html +2 -1
  108. package/BookReaderDemo/viewmode-cycle.html +2 -3
  109. package/CHANGELOG.md +595 -33
  110. package/README.md +14 -1
  111. package/babel.config.js +20 -0
  112. package/codecov.yml +6 -0
  113. package/index.html +5 -2
  114. package/jsconfig.json +19 -0
  115. package/netlify.toml +9 -0
  116. package/package.json +70 -62
  117. package/renovate.json +52 -0
  118. package/scripts/preversion.js +0 -1
  119. package/src/BookNavigator/assets/bookmark-colors.js +1 -1
  120. package/src/BookNavigator/assets/button-base.js +10 -2
  121. package/src/BookNavigator/assets/ia-logo.js +17 -0
  122. package/src/BookNavigator/assets/icon_checkmark.js +1 -1
  123. package/src/BookNavigator/assets/icon_close.js +1 -1
  124. package/src/BookNavigator/book-navigator.js +590 -0
  125. package/src/BookNavigator/bookmarks/bookmark-button.js +3 -2
  126. package/src/BookNavigator/bookmarks/bookmark-edit.js +3 -4
  127. package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
  128. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +4 -9
  129. package/src/BookNavigator/bookmarks/bookmarks-provider.js +27 -17
  130. package/src/BookNavigator/bookmarks/ia-bookmarks.js +116 -67
  131. package/src/BookNavigator/delete-modal-actions.js +1 -1
  132. package/src/BookNavigator/downloads/downloads-provider.js +36 -21
  133. package/src/BookNavigator/downloads/downloads.js +29 -25
  134. package/src/BookNavigator/search/search-provider.js +80 -28
  135. package/src/BookNavigator/search/search-results.js +29 -26
  136. package/src/BookNavigator/sharing.js +27 -0
  137. package/src/BookNavigator/viewable-files.js +95 -0
  138. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +13 -12
  139. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +7 -7
  140. package/src/BookReader/BookModel.js +76 -41
  141. package/src/BookReader/DragScrollable.js +233 -0
  142. package/src/BookReader/ImageCache.js +48 -15
  143. package/src/BookReader/Mode1Up.js +56 -351
  144. package/src/BookReader/Mode1UpLit.js +388 -0
  145. package/src/BookReader/Mode2Up.js +73 -1318
  146. package/src/BookReader/Mode2UpLit.js +777 -0
  147. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  148. package/src/BookReader/ModeSmoothZoom.js +312 -0
  149. package/src/BookReader/ModeThumb.js +19 -13
  150. package/src/BookReader/Navbar/Navbar.js +70 -54
  151. package/src/BookReader/PageContainer.js +116 -22
  152. package/src/BookReader/ReduceSet.js +3 -3
  153. package/src/BookReader/Toolbar/Toolbar.js +14 -41
  154. package/src/BookReader/events.js +2 -3
  155. package/src/BookReader/options.js +73 -15
  156. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  157. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  158. package/src/BookReader/utils/SelectionObserver.js +45 -0
  159. package/src/BookReader/utils/classes.js +1 -1
  160. package/src/BookReader/utils.js +128 -13
  161. package/src/BookReader.js +562 -1078
  162. package/src/BookReaderPlugin.js +44 -0
  163. package/src/assets/icons/close-circle-dark.svg +1 -0
  164. package/src/assets/icons/magnify-minus.svg +3 -7
  165. package/src/assets/icons/magnify-plus.svg +3 -7
  166. package/src/assets/icons/voice.svg +1 -0
  167. package/src/assets/images/unviewable_page.png +0 -0
  168. package/src/css/BookReader.scss +1 -17
  169. package/src/css/_BRBookmarks.scss +1 -1
  170. package/src/css/_BRComponent.scss +1 -1
  171. package/src/css/_BRicon.scss +8 -2
  172. package/src/css/_BRmain.scss +33 -27
  173. package/src/css/_BRnav.scss +12 -42
  174. package/src/css/_BRpages.scss +170 -42
  175. package/src/css/_BRsearch.scss +68 -230
  176. package/src/css/_BRtoolbar.scss +5 -5
  177. package/src/css/_TextSelection.scss +87 -27
  178. package/src/css/_colorbox.scss +2 -2
  179. package/src/css/_controls.scss +24 -7
  180. package/src/css/_icons.scss +7 -1
  181. package/src/ia-bookreader/ia-bookreader.js +224 -0
  182. package/src/plugins/plugin.archive_analytics.js +84 -78
  183. package/src/plugins/plugin.autoplay.js +99 -104
  184. package/src/plugins/plugin.chapters.js +237 -191
  185. package/src/plugins/plugin.iframe.js +1 -1
  186. package/src/plugins/plugin.iiif.js +141 -0
  187. package/src/plugins/plugin.resume.js +53 -50
  188. package/src/plugins/plugin.text_selection.js +503 -175
  189. package/src/plugins/plugin.vendor-fullscreen.js +7 -7
  190. package/src/plugins/search/plugin.search.js +183 -121
  191. package/src/plugins/search/utils.js +43 -0
  192. package/src/plugins/search/view.js +67 -202
  193. package/src/plugins/tts/AbstractTTSEngine.js +75 -45
  194. package/src/plugins/tts/FestivalTTSEngine.js +21 -31
  195. package/src/plugins/tts/PageChunk.js +16 -23
  196. package/src/plugins/tts/PageChunkIterator.js +11 -17
  197. package/src/plugins/tts/WebTTSEngine.js +88 -72
  198. package/src/plugins/tts/plugin.tts.js +310 -350
  199. package/src/plugins/tts/utils.js +16 -26
  200. package/src/plugins/url/UrlPlugin.js +191 -0
  201. package/src/plugins/{plugin.url.js → url/plugin.url.js} +47 -18
  202. package/src/util/browserSniffing.js +22 -0
  203. package/src/util/docCookies.js +21 -2
  204. package/src/util/strings.js +1 -0
  205. package/tests/e2e/README.md +37 -0
  206. package/tests/e2e/autoplay.test.js +9 -6
  207. package/tests/e2e/base.test.js +8 -16
  208. package/tests/e2e/helpers/base.js +55 -50
  209. package/tests/e2e/helpers/debug.js +1 -1
  210. package/tests/e2e/helpers/mockSearch.js +19 -22
  211. package/tests/e2e/helpers/params.js +17 -0
  212. package/tests/e2e/helpers/rightToLeft.js +8 -14
  213. package/tests/e2e/helpers/search.js +73 -0
  214. package/tests/e2e/models/Navigation.js +20 -37
  215. package/tests/e2e/rightToLeft.test.js +4 -5
  216. package/tests/e2e/viewmode.test.js +40 -33
  217. package/tests/jest/BookNavigator/book-navigator.test.js +661 -0
  218. package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +43 -0
  219. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmark-edit.test.js +25 -26
  220. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmarks-list.test.js +41 -42
  221. package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +45 -0
  222. package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +67 -0
  223. package/tests/jest/BookNavigator/downloads/downloads.test.js +53 -0
  224. package/tests/jest/BookNavigator/search/search-provider.test.js +167 -0
  225. package/tests/{karma/BookNavigator → jest/BookNavigator/search}/search-results.test.js +109 -60
  226. package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +49 -0
  227. package/tests/jest/BookNavigator/viewable-files/viewable-files-provider.test.js +80 -0
  228. package/tests/jest/BookNavigator/visual-adjustments.test.js +200 -0
  229. package/tests/{BookReader → jest/BookReader}/BookModel.test.js +74 -14
  230. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +193 -0
  231. package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +4 -4
  232. package/tests/jest/BookReader/Mode1UpLit.test.js +73 -0
  233. package/tests/jest/BookReader/Mode2Up.test.js +98 -0
  234. package/tests/jest/BookReader/Mode2UpLit.test.js +190 -0
  235. package/tests/jest/BookReader/ModeCoordinateSpace.test.js +16 -0
  236. package/tests/jest/BookReader/ModeSmoothZoom.test.js +218 -0
  237. package/tests/jest/BookReader/ModeThumb.test.js +71 -0
  238. package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +42 -29
  239. package/tests/jest/BookReader/PageContainer.test.js +238 -0
  240. package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +1 -1
  241. package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +3 -3
  242. package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
  243. package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +49 -0
  244. package/tests/jest/BookReader/utils/SelectionObserver.test.js +57 -0
  245. package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +1 -1
  246. package/tests/jest/BookReader/utils.test.js +250 -0
  247. package/tests/jest/BookReader.keyboard.test.js +190 -0
  248. package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +10 -2
  249. package/tests/{BookReader.test.js → jest/BookReader.test.js} +43 -53
  250. package/tests/jest/plugins/plugin.archive_analytics.test.js +20 -0
  251. package/tests/jest/plugins/plugin.autoplay.test.js +35 -0
  252. package/tests/jest/plugins/plugin.chapters.test.js +195 -0
  253. package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +4 -4
  254. package/tests/{plugins → jest/plugins}/plugin.resume.test.js +22 -35
  255. package/tests/jest/plugins/plugin.text_selection.test.js +316 -0
  256. package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +2 -2
  257. package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +26 -47
  258. package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +42 -9
  259. package/tests/jest/plugins/search/utils.js +25 -0
  260. package/tests/jest/plugins/search/utils.test.js +29 -0
  261. package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +30 -10
  262. package/tests/{plugins → jest/plugins}/tts/FestivalTTSEngine.test.js +4 -4
  263. package/tests/{plugins → jest/plugins}/tts/PageChunk.test.js +1 -1
  264. package/tests/{plugins → jest/plugins}/tts/PageChunkIterator.test.js +3 -3
  265. package/tests/{plugins → jest/plugins}/tts/WebTTSEngine.test.js +47 -1
  266. package/tests/{plugins → jest/plugins}/tts/utils.test.js +1 -60
  267. package/tests/jest/plugins/url/UrlPlugin.test.js +198 -0
  268. package/tests/{plugins → jest/plugins/url}/plugin.url.test.js +57 -18
  269. package/tests/jest/setup.js +3 -0
  270. package/tests/{util → jest/util}/browserSniffing.test.js +1 -1
  271. package/tests/jest/util/docCookies.test.js +24 -0
  272. package/tests/{util → jest/util}/strings.test.js +1 -1
  273. package/tests/{utils.js → jest/utils.js} +38 -0
  274. package/webpack.config.js +16 -10
  275. package/.babelrc +0 -12
  276. package/.dependabot/config.yml +0 -6
  277. package/.testcaferc.json +0 -5
  278. package/BookReader/bookreader-component-bundle.js +0 -14330
  279. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  280. package/BookReader/bookreader-component-bundle.js.map +0 -1
  281. package/BookReader/icons/sort-ascending.svg +0 -1
  282. package/BookReader/icons/sort-descending.svg +0 -1
  283. package/BookReader/jquery-1.10.1.js +0 -108
  284. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  285. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  286. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  287. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  288. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  289. package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
  290. package/BookReaderDemo/IIIFBookReader.js +0 -207
  291. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  292. package/BookReaderDemo/demo-autoplay.html +0 -38
  293. package/BookReaderDemo/demo-iiif.js +0 -26
  294. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  295. package/karma.conf.js +0 -23
  296. package/src/BookNavigator/BookModel.js +0 -14
  297. package/src/BookNavigator/BookNavigator.js +0 -452
  298. package/src/BookNavigator/assets/book-loader.js +0 -27
  299. package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
  300. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  301. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  302. package/src/BookNavigator/search/a-search-result.js +0 -55
  303. package/src/BookNavigator/volumes/volumes-provider.js +0 -108
  304. package/src/BookNavigator/volumes/volumes.js +0 -162
  305. package/src/BookReader/DebugConsole.js +0 -54
  306. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  307. package/src/ItemNavigator/ItemNavigator.js +0 -372
  308. package/src/ItemNavigator/providers/sharing.js +0 -29
  309. package/src/assets/icons/sort-ascending.svg +0 -1
  310. package/src/assets/icons/sort-descending.svg +0 -1
  311. package/src/css/_MobileNav.scss +0 -194
  312. package/src/dragscrollable-br.js +0 -261
  313. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  314. package/src/plugins/plugin.mobile_nav.js +0 -287
  315. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  316. package/tests/BookReader/DebugConsole.test.js +0 -25
  317. package/tests/BookReader/Mode1Up.test.js +0 -164
  318. package/tests/BookReader/Mode2Up.test.js +0 -247
  319. package/tests/BookReader/PageContainer.test.js +0 -115
  320. package/tests/BookReader/utils.test.js +0 -109
  321. package/tests/e2e/helpers/desktopSearch.js +0 -72
  322. package/tests/e2e/helpers/mobileSearch.js +0 -85
  323. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  324. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  325. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  326. package/tests/karma/BookNavigator/volumes.test.js +0 -133
  327. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  328. package/tests/plugins/plugin.archive_analytics.test.js +0 -23
  329. package/tests/plugins/plugin.autoplay.test.js +0 -52
  330. package/tests/plugins/plugin.chapters.test.js +0 -130
  331. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  332. package/tests/plugins/plugin.text_selection.test.js +0 -203
  333. package/tests/util/docCookies.test.js +0 -15
@@ -1,261 +0,0 @@
1
- /*
2
- * jQuery dragscrollable Plugin
3
- * version: 1.0 (25-Jun-2009)
4
- * Copyright (c) 2009 Miquel Herrera
5
- *
6
- * Portions Copyright (c) 2010 Reg Braithwaite
7
- * Copyright (c) 2010 Internet Archive / Michael Ang
8
- * Copyright (c) 2016 Internet Archive / Richard Caceres
9
- *
10
- * Dual licensed under the MIT and GPL licenses:
11
- * http://www.opensource.org/licenses/mit-license.php
12
- * http://www.gnu.org/licenses/gpl.html
13
- *
14
- * Modified by richard@archive.org 2016
15
- * - Added check to disable on touch enabled devices
16
- * - Change dragend handler to bind using event "capturing" instead of "bubbling"
17
- */
18
- (function($) { // secure $ jQuery alias
19
-
20
- /**
21
- * Adds the ability to manage elements scroll by dragging
22
- * one or more of its descendant elements. Options parameter
23
- * allow to specifically select which inner elements will
24
- * respond to the drag events.
25
- *
26
- * options properties:
27
- * ------------------------------------------------------------------------
28
- * dragSelector | jquery selector to apply to each wrapped element
29
- * | to find which will be the dragging elements.
30
- * | Defaults to '>:first' which is the first child of
31
- * | scrollable element
32
- * ------------------------------------------------------------------------
33
- * acceptPropagatedEvent| Will the dragging element accept propagated
34
- * | events? default is yes, a propagated mouse event
35
- * | on a inner element will be accepted and processed.
36
- * | If set to false, only events originated on the
37
- * | draggable elements will be processed.
38
- * ------------------------------------------------------------------------
39
- * preventDefault | Prevents the event to propagate further effectivey
40
- * | disabling other default actions. Defaults to true
41
- * ------------------------------------------------------------------------
42
- * scrollWindow | Scroll the window rather than the element
43
- * | Defaults to false
44
- * ------------------------------------------------------------------------
45
- *
46
- * usage examples:
47
- *
48
- * To add the scroll by drag to the element id=viewport when dragging its
49
- * first child accepting any propagated events
50
- * $('#viewport').dragscrollable();
51
- *
52
- * To add the scroll by drag ability to any element div of class viewport
53
- * when dragging its first descendant of class dragMe responding only to
54
- * evcents originated on the '.dragMe' elements.
55
- * $('div.viewport').dragscrollable({dragSelector:'.dragMe:first',
56
- * acceptPropagatedEvent: false});
57
- *
58
- * Notice that some 'viewports' could be nested within others but events
59
- * would not interfere as acceptPropagatedEvent is set to false.
60
- *
61
- */
62
-
63
- var append_namespace = function (string_of_events, ns) {
64
-
65
- /* IE doesn't have map
66
- return string_of_events
67
- .split(' ')
68
- .map(function (name) { return name + ns; })
69
- .join(' ');
70
- */
71
- var pieces = string_of_events.split(' ');
72
- var ret = new Array();
73
- for (var i = 0; i < pieces.length; i++) {
74
- ret.push(pieces[i] + ns);
75
- }
76
- return ret.join(' ');
77
- };
78
-
79
- var left_top = function(event) {
80
-
81
- var x;
82
- var y;
83
- if (typeof(event.clientX) != 'undefined') {
84
- x = event.clientX;
85
- y = event.clientY;
86
- }
87
- else if (typeof(event.screenX) != 'undefined') {
88
- x = event.screenX;
89
- y = event.screenY;
90
- }
91
- else if (typeof(event.targetTouches) != 'undefined') {
92
- x = event.targetTouches[0].pageX;
93
- y = event.targetTouches[0].pageY;
94
- }
95
- else if (typeof(event.originalEvent) == 'undefined') {
96
- var str = '';
97
- for (const i in event) {
98
- str += ', ' + i + ': ' + event[i];
99
- }
100
- console.error("don't understand x and y for " + event.type + ' event: ' + str);
101
- }
102
- else if (typeof(event.originalEvent.clientX) != 'undefined') {
103
- x = event.originalEvent.clientX;
104
- y = event.originalEvent.clientY;
105
- }
106
- else if (typeof(event.originalEvent.screenX) != 'undefined') {
107
- x = event.originalEvent.screenX;
108
- y = event.originalEvent.screenY;
109
- }
110
- else if (typeof(event.originalEvent.targetTouches) != 'undefined') {
111
- x = event.originalEvent.targetTouches[0].pageX;
112
- y = event.originalEvent.targetTouches[0].pageY;
113
- }
114
-
115
- return {left: x, top:y};
116
- };
117
-
118
- $.fn.dragscrollable = function( options ) {
119
-
120
- var handling_element = $(this);
121
-
122
- var settings = $.extend(
123
- {
124
- dragSelector:'>:first',
125
- acceptPropagatedEvent: true,
126
- preventDefault: true,
127
- dragstart: 'mousedown touchstart',
128
- dragcontinue: 'mousemove touchmove',
129
- dragend: 'mouseup touchend', // mouseleave
130
- dragMinDistance: 5,
131
- namespace: '.ds',
132
- scrollWindow: false,
133
- },options || {});
134
-
135
- settings.dragstart = append_namespace(settings.dragstart, settings.namespace);
136
- settings.dragcontinue = append_namespace(settings.dragcontinue, settings.namespace);
137
- //settings.dragend = append_namespace(settings.dragend, settings.namespace);
138
-
139
- var shouldAbort = function() {
140
- var isTouchDevice = !!('ontouchstart' in window) || !!('msmaxtouchpoints' in window.navigator);
141
- return isTouchDevice;
142
- };
143
-
144
- var dragContinueHandlerProxy;
145
-
146
- var dragscroll = {
147
- dragStartHandler : function(event) {
148
- if (shouldAbort()) { return true; }
149
-
150
- // mousedown, left click, check propagation
151
- if (event.which > 1 ||
152
- (!event.data.acceptPropagatedEvent && event.target != this)) {
153
- return false;
154
- }
155
-
156
- event.data.firstCoord = left_top(event);
157
- // Initial coordinates will be the last when dragging
158
- event.data.lastCoord = event.data.firstCoord;
159
-
160
- handling_element
161
- .bind(settings.dragcontinue, event.data, dragscroll.dragContinueHandler)
162
- //.bind(settings.dragend, event.data, dragscroll.dragEndHandler)
163
- ;
164
-
165
- // Note, we bind using addEventListener so we can use "capture" binding
166
- // instead of "bubble" binding
167
- dragContinueHandlerProxy = function(e) {
168
- e.data = event.data;
169
- dragscroll.dragEndHandler(e);
170
- };
171
- $.each(settings.dragend.split(' '), function(idx, val) {
172
- handling_element.get(0).addEventListener(val, dragContinueHandlerProxy, true);
173
- });
174
-
175
- if (event.data.preventDefault) {
176
- event.preventDefault();
177
- return false;
178
- }
179
- },
180
- dragContinueHandler : function(event) { // User is dragging
181
- // console.log('drag continue');
182
- if (shouldAbort()) { return true; }
183
-
184
- var lt = left_top(event);
185
-
186
- // How much did the mouse move?
187
- var delta = {left: (lt.left - event.data.lastCoord.left),
188
- top: (lt.top - event.data.lastCoord.top)};
189
-
190
- var scrollTarget = event.data.scrollable;
191
- if (event.data.scrollWindow) {
192
- scrollTarget = $(window);
193
- }
194
- // Set the scroll position relative to what ever the scroll is now
195
- scrollTarget.scrollLeft( scrollTarget.scrollLeft() - delta.left );
196
- scrollTarget.scrollTop( scrollTarget.scrollTop() - delta.top );
197
-
198
- // Save where the cursor is
199
- event.data.lastCoord = lt;
200
-
201
- if (event.data.preventDefault) {
202
- event.preventDefault();
203
- return false;
204
- }
205
- },
206
- dragEndHandler : function(event) { // Stop scrolling
207
- //console.log('dragEndHandler');
208
-
209
- if (shouldAbort()) { return true; }
210
-
211
- handling_element
212
- .unbind(settings.dragcontinue)
213
- // Note, for some reason, even though I removeEventListener below,
214
- // this call to unbind is still necessary. I don't know why.
215
- .unbind(settings.dragend)
216
- ;
217
-
218
- // Note, we bind using addEventListener so we can use "capture" binding
219
- // instead of "bubble" binding
220
- $.each(settings.dragend.split(' '), function(idx, val) {
221
- handling_element.get(0).removeEventListener(val, dragContinueHandlerProxy, true);
222
- });
223
-
224
- // How much did the mouse move total?
225
- var delta = {left: Math.abs(event.data.lastCoord.left - event.data.firstCoord.left),
226
- top: Math.abs(event.data.lastCoord.top - event.data.firstCoord.top)};
227
- var distance = Math.max(delta.left, delta.top);
228
-
229
- // Allow event to propagate if min distance was not achieved
230
- if (event.data.preventDefault && distance > settings.dragMinDistance) {
231
- event.preventDefault();
232
- event.stopImmediatePropagation();
233
- event.stopPropagation();
234
- return false;
235
- }
236
- }
237
- };
238
-
239
- // set up the initial events
240
- return this.each(function() {
241
- // closure object data for each scrollable element
242
- var data = {scrollable : $(this),
243
- acceptPropagatedEvent : settings.acceptPropagatedEvent,
244
- preventDefault : settings.preventDefault,
245
- scrollWindow : settings.scrollWindow };
246
- // Set mouse initiating event on the desired descendant
247
- $(this).find(settings.dragSelector).
248
- bind(settings.dragstart, data, dragscroll.dragStartHandler);
249
- });
250
- }; //end plugin dragscrollable
251
-
252
- // Note, this probably doesn't work anymore with our modifications - Nov/8/2016
253
- $.fn.removedragscrollable = function (namespace) {
254
- if (typeof(namespace) == 'undefined')
255
- namespace = '.ds';
256
- return this.each(function() {
257
- $(document).find('*').andSelf().unbind(namespace);
258
- });
259
- };
260
-
261
- })( jQuery ); // confine scope
@@ -1,324 +0,0 @@
1
-
2
- /* global BookReader */
3
- /**
4
- * Plugin for managing menu visibility
5
- * Enabling this plug-in:
6
- * + removes the "menu tab" triangle
7
- * + toggles nav at: book center tap/click
8
- * + toggles nav at: black background tap/click
9
- *
10
- * Handles to events at CAPTURE phase
11
- *
12
- * This uses core BookReader functions and parameters to check its UI state:
13
- * - br.refs = (at best) ui references that are present at any given time
14
- * - br.navigationIsVisible() - checks using refs to confirm the navbar's presence
15
- * - br.showNavigation() & br.hideNavigation()
16
- * - br.constMode1up checks against br.mode;
17
- *
18
- * The list of BookReader custom events this plugin taps into are mainly
19
- * listed in the `.init` function
20
- */
21
-
22
- (function addMenuToggler() {
23
- jQuery.extend(BookReader.defaultOptions, {
24
- enableMenuToggle: true
25
- });
26
-
27
- /**
28
- * `holdOffOnToggle` is used in fn `toggleRouter`
29
- * to determine if menu toggle should happen
30
- * set by `registerDragHandlers`
31
- */
32
- let holdOffOnToggle = false;
33
-
34
- /**
35
- * Hides Nav arrow tab
36
- *
37
- * @param { object } br - BookReader instance
38
- */
39
- function hideArrow(br) {
40
- if (!br.refs || !br.refs.$BRnav) {
41
- return;
42
- }
43
- const $menuTab = br.refs.$BRnav.children('.BRnavCntl');
44
- $menuTab.css('display', 'none');
45
- }
46
-
47
- /**
48
- * Sets up nav - hides arrow tab & adds click events
49
- *
50
- * @param { object } br - BookReader instance
51
- */
52
- function setupNavForToggle(br) {
53
- hideArrow(br);
54
- registerClickHandlers(br);
55
- }
56
-
57
- /**
58
- * Resets nav to always show
59
- * hides arrow tab, removes click events, shows nav chrome
60
- *
61
- * @param { object } br - BookReader instance
62
- */
63
- function alwaysShowNav(br) {
64
- hideArrow(br);
65
- removeClickHandlers(br);
66
- br.showNavigation();
67
- }
68
-
69
- /**
70
- * Removes click handlers on elements that house the book pages
71
- *
72
- * @param { object } br - BookReader instance
73
- */
74
- const removeClickHandlers = function removeClickHandlers(br) {
75
- if (br.refs.$brPageViewEl) {
76
- br.refs.$brPageViewEl[0].removeEventListener('click', onBookClick, true);
77
- }
78
- if (br.refs.$brTwoPageView) {
79
- br.refs.$brTwoPageView[0].removeEventListener('click', onBookClick, true);
80
- }
81
- }
82
-
83
- /**
84
- * Toggle functionality
85
- * Responsible for calling native functions `hideNavigation` & `showNavigation`
86
- * Makes sure only 1 toggle action is taken at a time using `togglingNav` switch.
87
- *
88
- * @params { object } br - bookreader instance
89
- */
90
- let togglingNav = false; /* flag to make sure animations only fire once */
91
- const toggleNav = function toggleNav(br) {
92
- if (togglingNav) {
93
- return;
94
- }
95
-
96
- togglingNav = true;
97
- const navToggled = function navToggled() {
98
- togglingNav = false;
99
- window.removeEventListener('BookReader:navToggled', navToggled);
100
- };
101
- $(document).on('BookReader:navToggled', navToggled);
102
-
103
- const menuIsShowing = br.navigationIsVisible();
104
- if (menuIsShowing) {
105
- br.hideNavigation();
106
- } else {
107
- br.showNavigation();
108
- }
109
- }
110
-
111
- /**
112
- * Check if div `BRcontainer` is scrollable.
113
- * This normally happens when bookreader is zoomed in.
114
- * not using br.refs, because `scrollWidth` & `offsetWidth` is not easily accessible.
115
- */
116
- const isBRcontainerScrollable = function isBRcontainerScrollable() {
117
- const brContainer = document.querySelector('.BRcontainer');
118
- const scrollWidth = brContainer.scrollWidth;
119
- const offsetWidth = brContainer.offsetWidth;
120
-
121
- return scrollWidth > offsetWidth;
122
- }
123
-
124
- /**
125
- * Confirms whether or not the click happened in the nav toggle zone
126
- *
127
- * @param { MouseEvent } event - JS click event object
128
- * @param { DOM } book - DOM element that represents book
129
- */
130
- const isCenterClick = function isCenterClick(event, book) {
131
- const clickPosition = event.clientX;
132
- const bookWidth = book.offsetWidth;
133
- const leftOffset = book.offsetLeft
134
- const bookEndPageFlipArea = Math.round(bookWidth / 3);
135
- const leftThreshold = Math.round(bookEndPageFlipArea + leftOffset); // without it, the click area is small
136
- const rightThreshold = Math.round(bookWidth - bookEndPageFlipArea + leftOffset);
137
- const isOkOnRight = clickPosition > leftThreshold;
138
- const isOkOnLeft = clickPosition < rightThreshold;
139
- const isCenterClick = isOkOnRight && isOkOnLeft;
140
-
141
- return isCenterClick;
142
- }
143
-
144
- /**
145
- * Confirms whether or not the click happened in the background
146
- *
147
- * @param { DOM } element
148
- */
149
- const isBackground = function isBackground(element) {
150
- const isBackgroundClick = $(element).hasClass('BookReader')
151
- || $(element).hasClass('BRcontainer') /* main black theatre */
152
- || $(element).hasClass('BRemptypage') /* empty page placeholder */
153
- || $(element).hasClass('BRpageview') /* empty page placeholder, 1up */
154
- || $(element).hasClass('BRtwopageview'); /* empty page placeholder, 2up */
155
- return isBackgroundClick;
156
- };
157
-
158
- /**
159
- * Main hook into toggle functionality
160
- * This is the only function that should be called by the event handlers
161
- *
162
- * @param { object } br - BookReader instance
163
- * @param { MouseEvent } e - JS event object
164
- * @param { boolean } atBookCenter - optional
165
- */
166
- const toggleRouter = function toggleRouter (br, e, atBookCenter) {
167
- if (holdOffOnToggle) {
168
- return;
169
- }
170
-
171
- const book = isBRcontainerScrollable() ? br.refs.$brContainer[0] : e.currentTarget;
172
- const is1UpMode = br.constMode1up === br.mode;
173
- const validBookClick = is1UpMode || isCenterClick(e, book);
174
- const isValidClickArea = atBookCenter ? validBookClick : isBackground(e.target);
175
- if (isValidClickArea) {
176
- toggleNav(br, atBookCenter);
177
-
178
- if (atBookCenter) {
179
- e.stopPropagation(); // don't turn the page. this takes prescendence
180
- }
181
- }
182
- }
183
-
184
- /**
185
- * background click event handler
186
- * @param { object } br - BookReader instance
187
- * @param { MouseEvent } e - JS event object
188
- */
189
- function onBackgroundClick(br, e) {
190
- toggleRouter(br, e);
191
- }
192
-
193
- /**
194
- * actual book container click event handler
195
- *
196
- * @param { object } br - BookReader instance
197
- * @param { MouseEvent } e - JS event object
198
- */
199
- function onBookClick(br, e) {
200
-
201
- const atBookCenter = true;
202
- toggleRouter(br, e, atBookCenter);
203
- }
204
-
205
- let initialX;
206
- let initialY;
207
- /**
208
- * attaches mouseup & mousedown event handlers to assess if user is dragging
209
- * sets `initialX`, `initialY`, and `holdOffOnToggle`
210
- */
211
- function registerDragHandlers() {
212
- const background = document.querySelector('.BookReader');
213
- if (!background) {
214
- return;
215
- }
216
-
217
- background.addEventListener('mousedown', function (e) {
218
- initialX = e.screenX;
219
- initialY = e.screenY;
220
-
221
- holdOffOnToggle = true;
222
- }, true);
223
- background.addEventListener('mouseup', function (e) {
224
- const isDrag = (Math.abs(initialX - e.screenX) > 5 || Math.abs(initialY - e.screenY) > 5);
225
-
226
- if (!isDrag) {
227
- holdOffOnToggle = false;
228
- initialX = 0;
229
- initialY = 0;
230
- }
231
- }, true);
232
- }
233
-
234
- /**
235
- * attaches click handlers to background & book
236
- * @param { object } br - BookReader instance
237
- */
238
- function registerClickHandlers(br) {
239
- const background = document.querySelector('.BookReader');
240
- if (!background) {
241
- return;
242
- }
243
-
244
- background.addEventListener('click', onBackgroundClick.bind(null, br), { capture: true, passive: true });
245
-
246
- const desk = document.querySelector('.BRcontainer') || {};
247
- const book = desk.firstChild;
248
-
249
- if (book) {
250
- book.addEventListener('click', onBookClick.bind(null, br), true);
251
- registerDragHandlers();
252
- }
253
- }
254
-
255
- /**
256
- * Install menu toggle
257
- * attaches event handlers, sets up DOM on load
258
- */
259
- const installMenuToggle = function installMenuToggle(br) {
260
- let hasNav = false;
261
-
262
- try {
263
- hasNav = br.navigationIsVisible();
264
- } catch (error) {
265
- hasNav = false;
266
- }
267
-
268
- if (!hasNav) {
269
- return;
270
- }
271
-
272
- const menuToggleEventRegister = function menuToggleEventRegister(e) {
273
- registerClickHandlers(br);
274
- };
275
-
276
- const setupDOMandHandlers = function setupDOMandHandlers(e) {
277
- setupNavForToggle(br);
278
- };
279
-
280
- const persistNav = function persistNav(e) {
281
- alwaysShowNav(br);
282
- };
283
-
284
- const whenToToggleNav = [
285
- 'BookReader:1PageViewSelected',
286
- 'BookReader:2PageViewSelected',
287
- 'BookReader:zoomIn',
288
- 'BookReader:zoomOut',
289
- 'BookReader:resize'
290
- ];
291
-
292
- const whenTolwaysShowNavWhen = [
293
- 'BookReader:3PageViewSelected'
294
- ];
295
-
296
- $(document).on(whenTolwaysShowNavWhen.join(' '), persistNav);
297
- $(document).on(whenToToggleNav.join(' '), menuToggleEventRegister);
298
- $(window).on('orientationchange', menuToggleEventRegister);
299
- $(document).on('BookReader:fullscreenToggled', setupDOMandHandlers);
300
- $(window).on('DOMContentLoaded', setupDOMandHandlers);
301
- setupDOMandHandlers();
302
- };
303
-
304
- /**
305
- * Add to BookReader
306
- */
307
- BookReader.prototype.setup = (function(super_) {
308
- return function(options) {
309
- super_.call(this, options);
310
- };
311
- })(BookReader.prototype.setup);
312
-
313
- /**
314
- * Initialize plugin
315
- */
316
- BookReader.prototype.init = (function(super_) {
317
- return function() {
318
- super_.call(this);
319
- if (this.options.enableMenuToggle) {
320
- installMenuToggle(this);
321
- }
322
- };
323
- })(BookReader.prototype.init);
324
- })();