@internetarchive/bookreader 5.0.0-88-alpha.11 → 5.0.0-89

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 (243) hide show
  1. package/BookReader/BookReader.css +17 -3
  2. package/BookReader/BookReader.js +1 -1
  3. package/BookReader/BookReader.js.map +1 -1
  4. package/BookReader/ia-bookreader-bundle.js +87 -108
  5. package/BookReader/ia-bookreader-bundle.js.map +1 -1
  6. package/BookReader/plugins/plugin.archive_analytics.js +1 -1
  7. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  8. package/BookReader/plugins/plugin.autoplay.js +1 -1
  9. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  10. package/BookReader/plugins/plugin.iiif.js +1 -1
  11. package/BookReader/plugins/plugin.iiif.js.map +1 -1
  12. package/BookReader/plugins/plugin.resume.js +1 -1
  13. package/BookReader/plugins/plugin.resume.js.map +1 -1
  14. package/BookReader/plugins/plugin.search.js +1 -1
  15. package/BookReader/plugins/plugin.search.js.map +1 -1
  16. package/BookReader/plugins/plugin.text_selection.js +1 -1
  17. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  18. package/BookReader/plugins/plugin.tts.js +1 -1
  19. package/BookReader/plugins/plugin.tts.js.map +1 -1
  20. package/BookReader/plugins/plugin.url.js +1 -1
  21. package/BookReader/plugins/plugin.url.js.map +1 -1
  22. package/CHANGELOG.md +14 -0
  23. package/babel.config.js +12 -30
  24. package/codecov.yml +1 -1
  25. package/jsconfig.json +1 -3
  26. package/package.json +14 -16
  27. package/src/BookNavigator/search/search-results.js +1 -1
  28. package/src/BookReader/ImageCache.js +48 -15
  29. package/src/BookReader/Mode1UpLit.js +56 -86
  30. package/src/BookReader/Mode2UpLit.js +5 -5
  31. package/src/BookReader/Navbar/Navbar.js +53 -11
  32. package/src/BookReader/PageContainer.js +41 -22
  33. package/src/BookReader/options.js +27 -3
  34. package/src/BookReader/utils.js +10 -0
  35. package/src/BookReader.js +120 -21
  36. package/src/BookReaderPlugin.js +44 -0
  37. package/src/css/_BRnav.scss +0 -3
  38. package/src/css/_BRpages.scss +21 -2
  39. package/src/css/_controls.scss +4 -0
  40. package/src/plugins/plugin.archive_analytics.js +84 -78
  41. package/src/plugins/plugin.autoplay.js +98 -102
  42. package/src/plugins/plugin.chapters.js +17 -22
  43. package/src/plugins/plugin.iiif.js +16 -30
  44. package/src/plugins/plugin.resume.js +54 -51
  45. package/src/plugins/plugin.text_selection.js +68 -76
  46. package/src/plugins/tts/AbstractTTSEngine.js +2 -4
  47. package/src/plugins/tts/PageChunk.js +5 -9
  48. package/src/plugins/tts/PageChunkIterator.js +3 -5
  49. package/src/plugins/tts/plugin.tts.js +309 -329
  50. package/src/plugins/url/plugin.url.js +1 -1
  51. package/src/util/strings.js +1 -0
  52. package/tests/e2e/autoplay.test.js +8 -5
  53. package/tests/e2e/helpers/base.js +2 -2
  54. package/tests/e2e/helpers/mockSearch.js +6 -9
  55. package/tests/jest/BookReader/Navbar/Navbar.test.js +16 -3
  56. package/tests/jest/BookReader/PageContainer.test.js +96 -55
  57. package/tests/jest/BookReader/utils.test.js +21 -0
  58. package/tests/jest/BookReader.test.js +13 -12
  59. package/tests/jest/plugins/plugin.archive_analytics.test.js +8 -11
  60. package/tests/jest/plugins/plugin.autoplay.test.js +9 -22
  61. package/tests/jest/plugins/plugin.resume.test.js +19 -32
  62. package/tests/jest/plugins/plugin.text_selection.test.js +23 -24
  63. package/dist/esm/BookNavigator/assets/bookmark-colors.js +0 -4
  64. package/dist/esm/BookNavigator/assets/button-base.js +0 -4
  65. package/dist/esm/BookNavigator/assets/ia-logo.js +0 -4
  66. package/dist/esm/BookNavigator/assets/icon_checkmark.js +0 -8
  67. package/dist/esm/BookNavigator/assets/icon_close.js +0 -4
  68. package/dist/esm/BookNavigator/book-navigator.js +0 -612
  69. package/dist/esm/BookNavigator/bookmarks/bookmark-button.js +0 -35
  70. package/dist/esm/BookNavigator/bookmarks/bookmark-edit.js +0 -78
  71. package/dist/esm/BookNavigator/bookmarks/bookmarks-list.js +0 -160
  72. package/dist/esm/BookNavigator/bookmarks/bookmarks-loginCTA.js +0 -24
  73. package/dist/esm/BookNavigator/bookmarks/bookmarks-provider.js +0 -55
  74. package/dist/esm/BookNavigator/bookmarks/ia-bookmarks.js +0 -521
  75. package/dist/esm/BookNavigator/delete-modal-actions.js +0 -29
  76. package/dist/esm/BookNavigator/downloads/downloads-provider.js +0 -84
  77. package/dist/esm/BookNavigator/downloads/downloads.js +0 -69
  78. package/dist/esm/BookNavigator/search/search-provider.js +0 -238
  79. package/dist/esm/BookNavigator/search/search-results.js +0 -161
  80. package/dist/esm/BookNavigator/sharing.js +0 -26
  81. package/dist/esm/BookNavigator/viewable-files.js +0 -94
  82. package/dist/esm/BookNavigator/visual-adjustments/visual-adjustments-provider.js +0 -83
  83. package/dist/esm/BookNavigator/visual-adjustments/visual-adjustments.js +0 -131
  84. package/dist/esm/BookReader/BookModel.js +0 -575
  85. package/dist/esm/BookReader/DragScrollable.js +0 -224
  86. package/dist/esm/BookReader/ImageCache.js +0 -122
  87. package/dist/esm/BookReader/Mode1Up.js +0 -114
  88. package/dist/esm/BookReader/Mode1UpLit.js +0 -579
  89. package/dist/esm/BookReader/Mode2Up.js +0 -106
  90. package/dist/esm/BookReader/Mode2UpLit.js +0 -1020
  91. package/dist/esm/BookReader/ModeCoordinateSpace.js +0 -28
  92. package/dist/esm/BookReader/ModeSmoothZoom.js +0 -318
  93. package/dist/esm/BookReader/ModeThumb.js +0 -366
  94. package/dist/esm/BookReader/Navbar/Navbar.js +0 -253
  95. package/dist/esm/BookReader/PageContainer.js +0 -165
  96. package/dist/esm/BookReader/ReduceSet.js +0 -27
  97. package/dist/esm/BookReader/Toolbar/Toolbar.js +0 -242
  98. package/dist/esm/BookReader/events.js +0 -20
  99. package/dist/esm/BookReader/options.js +0 -331
  100. package/dist/esm/BookReader/utils/HTMLDimensionsCacher.js +0 -48
  101. package/dist/esm/BookReader/utils/ScrollClassAdder.js +0 -31
  102. package/dist/esm/BookReader/utils/SelectionObserver.js +0 -42
  103. package/dist/esm/BookReader/utils/classes.js +0 -37
  104. package/dist/esm/BookReader/utils.js +0 -315
  105. package/dist/esm/BookReader.js +0 -1828
  106. package/dist/esm/assets/icons/1up.svg +0 -12
  107. package/dist/esm/assets/icons/2up.svg +0 -15
  108. package/dist/esm/assets/icons/advance.svg +0 -26
  109. package/dist/esm/assets/icons/chevron-right.svg +0 -1
  110. package/dist/esm/assets/icons/close-circle-dark.svg +0 -1
  111. package/dist/esm/assets/icons/close-circle.svg +0 -1
  112. package/dist/esm/assets/icons/fullscreen.svg +0 -17
  113. package/dist/esm/assets/icons/fullscreen_exit.svg +0 -17
  114. package/dist/esm/assets/icons/hamburger.svg +0 -15
  115. package/dist/esm/assets/icons/left-arrow.svg +0 -12
  116. package/dist/esm/assets/icons/magnify-minus.svg +0 -12
  117. package/dist/esm/assets/icons/magnify-plus.svg +0 -13
  118. package/dist/esm/assets/icons/magnify.svg +0 -15
  119. package/dist/esm/assets/icons/pause.svg +0 -23
  120. package/dist/esm/assets/icons/play.svg +0 -22
  121. package/dist/esm/assets/icons/playback-speed.svg +0 -34
  122. package/dist/esm/assets/icons/read-aloud.svg +0 -22
  123. package/dist/esm/assets/icons/review.svg +0 -22
  124. package/dist/esm/assets/icons/thumbnails.svg +0 -17
  125. package/dist/esm/assets/icons/voice.svg +0 -1
  126. package/dist/esm/assets/icons/volume-full.svg +0 -22
  127. package/dist/esm/assets/images/BRicons.png +0 -0
  128. package/dist/esm/assets/images/BRicons.svg +0 -94
  129. package/dist/esm/assets/images/BRicons_ia.png +0 -0
  130. package/dist/esm/assets/images/back_pages.png +0 -0
  131. package/dist/esm/assets/images/book_bottom_icon.png +0 -0
  132. package/dist/esm/assets/images/book_down_icon.png +0 -0
  133. package/dist/esm/assets/images/book_left_icon.png +0 -0
  134. package/dist/esm/assets/images/book_leftmost_icon.png +0 -0
  135. package/dist/esm/assets/images/book_right_icon.png +0 -0
  136. package/dist/esm/assets/images/book_rightmost_icon.png +0 -0
  137. package/dist/esm/assets/images/book_top_icon.png +0 -0
  138. package/dist/esm/assets/images/book_up_icon.png +0 -0
  139. package/dist/esm/assets/images/books_graphic.svg +0 -177
  140. package/dist/esm/assets/images/booksplit.png +0 -0
  141. package/dist/esm/assets/images/control_pause_icon.png +0 -0
  142. package/dist/esm/assets/images/control_play_icon.png +0 -0
  143. package/dist/esm/assets/images/embed_icon.png +0 -0
  144. package/dist/esm/assets/images/icon-home-ia.png +0 -0
  145. package/dist/esm/assets/images/icon_OL-logo-xs.png +0 -0
  146. package/dist/esm/assets/images/icon_alert-xs.png +0 -0
  147. package/dist/esm/assets/images/icon_book.svg +0 -12
  148. package/dist/esm/assets/images/icon_bookmark.svg +0 -12
  149. package/dist/esm/assets/images/icon_close-pop.png +0 -0
  150. package/dist/esm/assets/images/icon_download.png +0 -0
  151. package/dist/esm/assets/images/icon_gear.svg +0 -14
  152. package/dist/esm/assets/images/icon_hamburger.svg +0 -20
  153. package/dist/esm/assets/images/icon_home.png +0 -0
  154. package/dist/esm/assets/images/icon_home.svg +0 -21
  155. package/dist/esm/assets/images/icon_home_ia.png +0 -0
  156. package/dist/esm/assets/images/icon_indicator.png +0 -0
  157. package/dist/esm/assets/images/icon_info.svg +0 -11
  158. package/dist/esm/assets/images/icon_one_page.svg +0 -8
  159. package/dist/esm/assets/images/icon_pause.svg +0 -1
  160. package/dist/esm/assets/images/icon_play.svg +0 -1
  161. package/dist/esm/assets/images/icon_playback-rate.svg +0 -15
  162. package/dist/esm/assets/images/icon_return.png +0 -0
  163. package/dist/esm/assets/images/icon_search_button.svg +0 -8
  164. package/dist/esm/assets/images/icon_share.svg +0 -9
  165. package/dist/esm/assets/images/icon_skip-ahead.svg +0 -6
  166. package/dist/esm/assets/images/icon_skip-back.svg +0 -13
  167. package/dist/esm/assets/images/icon_speaker.svg +0 -18
  168. package/dist/esm/assets/images/icon_speaker_open.svg +0 -10
  169. package/dist/esm/assets/images/icon_thumbnails.svg +0 -12
  170. package/dist/esm/assets/images/icon_toc.svg +0 -5
  171. package/dist/esm/assets/images/icon_two_pages.svg +0 -9
  172. package/dist/esm/assets/images/icon_zoomer.png +0 -0
  173. package/dist/esm/assets/images/loading.gif +0 -0
  174. package/dist/esm/assets/images/logo_icon.png +0 -0
  175. package/dist/esm/assets/images/marker_chap-off.png +0 -0
  176. package/dist/esm/assets/images/marker_chap-off.svg +0 -11
  177. package/dist/esm/assets/images/marker_chap-off_ia.png +0 -0
  178. package/dist/esm/assets/images/marker_chap-on.png +0 -0
  179. package/dist/esm/assets/images/marker_chap-on.svg +0 -11
  180. package/dist/esm/assets/images/marker_srch-on.svg +0 -11
  181. package/dist/esm/assets/images/marker_srchchap-off.png +0 -0
  182. package/dist/esm/assets/images/marker_srchchap-on.png +0 -0
  183. package/dist/esm/assets/images/nav_control-dn.png +0 -0
  184. package/dist/esm/assets/images/nav_control-dn_ia.png +0 -0
  185. package/dist/esm/assets/images/nav_control-up.png +0 -0
  186. package/dist/esm/assets/images/nav_control-up_ia.png +0 -0
  187. package/dist/esm/assets/images/nav_control.png +0 -0
  188. package/dist/esm/assets/images/one_page_mode_icon.png +0 -0
  189. package/dist/esm/assets/images/paper-badge.png +0 -0
  190. package/dist/esm/assets/images/print_icon.png +0 -0
  191. package/dist/esm/assets/images/progressbar.gif +0 -0
  192. package/dist/esm/assets/images/right_edges.png +0 -0
  193. package/dist/esm/assets/images/slider.png +0 -0
  194. package/dist/esm/assets/images/slider_ia.png +0 -0
  195. package/dist/esm/assets/images/thumbnail_mode_icon.png +0 -0
  196. package/dist/esm/assets/images/transparent.png +0 -0
  197. package/dist/esm/assets/images/two_page_mode_icon.png +0 -0
  198. package/dist/esm/assets/images/unviewable_page.png +0 -0
  199. package/dist/esm/assets/images/zoom_in_icon.png +0 -0
  200. package/dist/esm/assets/images/zoom_out_icon.png +0 -0
  201. package/dist/esm/css/BookReader.scss +0 -85
  202. package/dist/esm/css/_BRBookmarks.scss +0 -29
  203. package/dist/esm/css/_BRComponent.scss +0 -13
  204. package/dist/esm/css/_BRfloat.scss +0 -197
  205. package/dist/esm/css/_BRicon.scss +0 -54
  206. package/dist/esm/css/_BRmain.scss +0 -262
  207. package/dist/esm/css/_BRnav.scss +0 -354
  208. package/dist/esm/css/_BRpages.scss +0 -213
  209. package/dist/esm/css/_BRsearch.scss +0 -268
  210. package/dist/esm/css/_BRtoolbar.scss +0 -84
  211. package/dist/esm/css/_BRvendor.scss +0 -5
  212. package/dist/esm/css/_TextSelection.scss +0 -108
  213. package/dist/esm/css/_colorbox.scss +0 -52
  214. package/dist/esm/css/_controls.scss +0 -257
  215. package/dist/esm/css/_icons.scss +0 -121
  216. package/dist/esm/ia-bookreader/ia-bookreader.js +0 -141
  217. package/dist/esm/jquery-wrapper.js +0 -3
  218. package/dist/esm/plugins/plugin.archive_analytics.js +0 -72
  219. package/dist/esm/plugins/plugin.autoplay.js +0 -119
  220. package/dist/esm/plugins/plugin.chapters.js +0 -288
  221. package/dist/esm/plugins/plugin.iframe.js +0 -44
  222. package/dist/esm/plugins/plugin.iiif.js +0 -146
  223. package/dist/esm/plugins/plugin.resume.js +0 -66
  224. package/dist/esm/plugins/plugin.text_selection.js +0 -621
  225. package/dist/esm/plugins/plugin.vendor-fullscreen.js +0 -227
  226. package/dist/esm/plugins/search/plugin.search.js +0 -499
  227. package/dist/esm/plugins/search/utils.js +0 -42
  228. package/dist/esm/plugins/search/view.js +0 -360
  229. package/dist/esm/plugins/tts/AbstractTTSEngine.js +0 -282
  230. package/dist/esm/plugins/tts/FestivalTTSEngine.js +0 -192
  231. package/dist/esm/plugins/tts/PageChunk.js +0 -105
  232. package/dist/esm/plugins/tts/PageChunkIterator.js +0 -155
  233. package/dist/esm/plugins/tts/WebTTSEngine.js +0 -364
  234. package/dist/esm/plugins/tts/plugin.tts.js +0 -315
  235. package/dist/esm/plugins/tts/tooltip_dict.js +0 -14
  236. package/dist/esm/plugins/tts/utils.js +0 -79
  237. package/dist/esm/plugins/url/UrlPlugin.js +0 -197
  238. package/dist/esm/plugins/url/plugin.url.js +0 -212
  239. package/dist/esm/util/browserSniffing.js +0 -56
  240. package/dist/esm/util/debouncer.js +0 -25
  241. package/dist/esm/util/docCookies.js +0 -75
  242. package/dist/esm/util/strings.js +0 -34
  243. package/index.js +0 -2
@@ -1,521 +0,0 @@
1
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
2
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
6
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
- function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
8
- function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
9
- function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
10
- import { LitElement, html, css, render } from 'lit';
11
- // eslint-disable-next-line no-unused-vars
12
- import { ModalConfig, ModalManager } from '@internetarchive/modal-manager';
13
- import buttonStyles from '../assets/button-base.js';
14
- import './bookmarks-loginCTA.js';
15
- var api = {
16
- endpoint: '/services/bookmarks.php',
17
- headers: {
18
- 'Content-Type': 'application/json'
19
- },
20
- delete(page) {
21
- return fetch("".concat(this.endpoint, "?identifier=").concat(this.identifier, "&page_num=").concat(page), {
22
- credentials: 'same-origin',
23
- method: 'DELETE',
24
- headers: this.headers
25
- });
26
- },
27
- get(page) {
28
- return fetch("".concat(this.endpoint, "?identifier=").concat(this.identifier, "&page_num=").concat(page), {
29
- credentials: 'same-origin',
30
- method: 'GET',
31
- headers: this.headers
32
- });
33
- },
34
- getAll() {
35
- return fetch("".concat(this.endpoint, "?identifier=").concat(this.identifier), {
36
- credentials: 'same-origin',
37
- method: 'GET',
38
- headers: this.headers
39
- });
40
- },
41
- post(bookmark) {
42
- return this.sendBookmarkData(bookmark, 'POST');
43
- },
44
- put(bookmark) {
45
- return this.sendBookmarkData(bookmark, 'POST');
46
- },
47
- sendBookmarkData(bookmark, method) {
48
- var notes = {
49
- note: bookmark.note,
50
- color: bookmark.color
51
- };
52
- return fetch("".concat(this.endpoint, "?identifier=").concat(this.identifier, "&page_num=").concat(bookmark.id), {
53
- credentials: 'same-origin',
54
- method,
55
- headers: this.headers,
56
- body: JSON.stringify({
57
- notes
58
- })
59
- });
60
- }
61
- };
62
- class IABookmarks extends LitElement {
63
- static get properties() {
64
- return {
65
- activeBookmarkID: {
66
- type: String
67
- },
68
- bookmarks: {
69
- type: Array
70
- },
71
- bookreader: {
72
- type: Object
73
- },
74
- displayMode: {
75
- type: String
76
- },
77
- editedBookmark: {
78
- type: Object
79
- },
80
- deleteModalConfig: {
81
- type: Object
82
- },
83
- modal: {
84
- attribute: false
85
- },
86
- loginOptions: {
87
- type: Object,
88
- attribute: false
89
- }
90
- };
91
- }
92
- static get styles() {
93
- var mainCss = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .bookmarks {\n height: 100%;\n overflow: hidden;\n padding-bottom: 20px;\n }\n\n .list ia-bookmark-edit {\n display: none;\n }\n\n .edit ia-bookmarks-list {\n display: none;\n }\n "])));
94
- return [buttonStyles, mainCss];
95
- }
96
- static formatPage(page) {
97
- return isNaN(+page) ? "(".concat(page.replace(/\D/g, ''), ")") : page;
98
- }
99
- constructor() {
100
- super();
101
- this.bookmarks = [];
102
- this.bookreader = {};
103
- this.editedBookmark = {};
104
- /** @type {ModalManager} */
105
- this.modal = undefined;
106
- this.loginOptions = {
107
- loginClicked: () => {},
108
- loginUrl: ''
109
- };
110
- /**
111
- * Toggles display to either bookmarks or login cta
112
- * @param {('bookmarks'|'login')} displayMode
113
- */
114
- this.displayMode = 'bookmarks';
115
- this.bookmarkColors = [{
116
- id: 0,
117
- className: 'red'
118
- }, {
119
- id: 1,
120
- className: 'blue'
121
- }, {
122
- id: 2,
123
- className: 'green'
124
- }];
125
-
126
- // eslint-disable-next-line
127
- this.defaultColor = this.bookmarkColors[0];
128
- this.api = api;
129
- this.deleteModalConfig = new ModalConfig({
130
- title: 'Delete Bookmark',
131
- headline: 'This bookmark contains a note. Deleting it will permanently delete the note. Are you sure?',
132
- headerColor: '#194880'
133
- });
134
- }
135
- updated(changed) {
136
- if (changed.has('displayMode')) {
137
- this.updateDisplay();
138
- }
139
- this.emitBookmarksChanged();
140
- }
141
- setup() {
142
- this.api.identifier = this.getIdentifier();
143
- if (this.displayMode === 'login') {
144
- return;
145
- }
146
- this.fetchUserBookmarks();
147
- this.setBREventListeners();
148
- }
149
-
150
- /**
151
- * get identifier for current book including sub-files
152
- *
153
- * @returns Identifer
154
- */
155
- getIdentifier() {
156
- if (this.bookreader.bookId !== this.bookreader.subPrefix) {
157
- return "".concat(this.bookreader.bookId, "/").concat(this.bookreader.subPrefix);
158
- }
159
- return this.bookreader.bookId;
160
- }
161
- updateDisplay() {
162
- if (this.displayMode === 'bookmarks') {
163
- this.fetchUserBookmarks();
164
- }
165
- }
166
- fetchUserBookmarks() {
167
- var _this = this;
168
- return _asyncToGenerator(function* () {
169
- if (!_this.api.identifier) {
170
- return;
171
- }
172
- yield _this.fetchBookmarks();
173
- _this.initializeBookmarks();
174
- })();
175
- }
176
- setBREventListeners() {
177
- ['3PageViewSelected'].forEach(event => {
178
- window.addEventListener("BookReader:".concat(event), e => {
179
- setTimeout(() => {
180
- // wait a lil bit so bookreader can draw its DOM to attach onto
181
- this.renderBookmarkButtons();
182
- }, 100);
183
- });
184
- });
185
- ['pageChanged', '1PageViewSelected', '2PageViewSelected'].forEach(event => {
186
- window.addEventListener("BookReader:".concat(event), e => {
187
- setTimeout(() => {
188
- // wait a lil bit so bookreader can draw its DOM to attach onto
189
- this.renderBookmarkButtons();
190
- this.markActiveBookmark();
191
- }, 100);
192
- });
193
- });
194
- ['zoomOut', 'zoomIn', 'resize'].forEach(event => {
195
- window.addEventListener("BookReader:".concat(event), () => {
196
- this.renderBookmarkButtons();
197
- });
198
- });
199
- }
200
- initializeBookmarks() {
201
- this.renderBookmarkButtons();
202
- this.markActiveBookmark(true);
203
- this.emitBookmarksChanged();
204
- }
205
-
206
- /**
207
- * @typedef {object} Bookmark
208
- * @property {number} id - bookreader page index, becomes key store
209
- * @property {number} color - color number
210
- * @property {string} page - bookmark's page label to display
211
- * @property {string} note - optional, note that one can add
212
- * @property {string} thumbnail - optional, image url
213
- */
214
- /**
215
- * Formats bookmark view model
216
- * @param {Object} bookmarkAttrs
217
- * @param {number} bookmarkAttrs.leafNum
218
- * @param {string} bookmarkAttrs.notes
219
- *
220
- * @returns Bookmark
221
- */
222
- formatBookmark(_ref) {
223
- var {
224
- leafNum = '',
225
- notes = {}
226
- } = _ref;
227
- var {
228
- note = '',
229
- color
230
- } = notes;
231
- var nomalizedParams = {
232
- note,
233
- color: this.getBookmarkColor(color) ? color : this.defaultColor.id
234
- };
235
- var page = IABookmarks.formatPage(this.bookreader.book.getPageNum(leafNum));
236
- var thumbnail = this.bookreader.book.getPageURI("".concat(leafNum).replace(/\D/g, ''), 32); // Request thumbnail 1/32 the size of original image
237
- var bookmark = _objectSpread(_objectSpread({}, nomalizedParams), {}, {
238
- id: leafNum,
239
- leafNum,
240
- page,
241
- thumbnail
242
- });
243
- return bookmark;
244
- }
245
- fetchBookmarks() {
246
- var _this2 = this;
247
- return _asyncToGenerator(function* () {
248
- var resText = yield _this2.api.getAll().then(r => r.text());
249
- var parsedResponse;
250
- try {
251
- parsedResponse = JSON.parse(resText);
252
- } catch (e) {
253
- parsedResponse = {
254
- error: e.message
255
- };
256
- }
257
- var {
258
- success,
259
- error = 'Something happened while fetching bookmarks.',
260
- value: bkmrks = []
261
- } = parsedResponse;
262
- if (!success) {
263
- var _console;
264
- (_console = console) === null || _console === void 0 || _console.warn('Error fetching bookmarks', error);
265
- }
266
- var bookmarks = {};
267
- Object.keys(bkmrks).forEach(leafNum => {
268
- var bookmark = bkmrks[leafNum];
269
- var formattedLeafNum = parseInt(leafNum, 10);
270
- var formattedBookmark = _this2.formatBookmark(_objectSpread(_objectSpread({}, bookmark), {}, {
271
- leafNum: formattedLeafNum
272
- }));
273
- bookmarks[leafNum] = formattedBookmark;
274
- });
275
- _this2.bookmarks = bookmarks;
276
- return bookmarks;
277
- })();
278
- }
279
- emitBookmarksChanged() {
280
- this.dispatchEvent(new CustomEvent('bookmarksChanged', {
281
- bubbles: true,
282
- composed: true,
283
- detail: {
284
- bookmarks: this.bookmarks
285
- }
286
- }));
287
- }
288
- emitBookmarkButtonClicked() {
289
- this.dispatchEvent(new CustomEvent('bookmarkButtonClicked', {
290
- bubbles: true,
291
- composed: true,
292
- detail: {
293
- editedBookmark: this.editedBookmark
294
- }
295
- }));
296
- }
297
- bookmarkButtonClicked(pageID) {
298
- if (this.getBookmark(pageID)) {
299
- this.confirmDeletion(pageID);
300
- } else {
301
- this.createBookmark(pageID);
302
- }
303
- }
304
- renderBookmarkButtons() {
305
- var pages = this.bookreader.$('.BRpagecontainer').not('.BRemptypage').get();
306
- pages.forEach(pageEl => {
307
- var existingButton = pageEl.querySelector('.bookmark-button');
308
- if (existingButton) {
309
- existingButton.remove();
310
- }
311
- var pageID = +pageEl.classList.value.match(/pagediv\d+/)[0].replace(/\D/g, '');
312
- var pageBookmark = this.getBookmark(pageID);
313
- var bookmarkState = pageBookmark ? 'filled' : 'hollow';
314
- // eslint-disable-next-line
315
- var pageData = this.bookreader.book.getPage(pageID);
316
- var {
317
- isViewable
318
- } = pageData;
319
- if (!isViewable) {
320
- return;
321
- }
322
- var bookmarkButton = document.createElement('div');
323
- ['mousedown', 'mouseup'].forEach(event => {
324
- bookmarkButton.addEventListener(event, e => e.stopPropagation());
325
- });
326
- bookmarkButton.classList.add('bookmark-button', bookmarkState);
327
- if (pageBookmark) {
328
- bookmarkButton.classList.add(this.getBookmarkColor(pageBookmark.color));
329
- }
330
- var pageSide = pageEl.getAttribute('data-side') === 'L' && this.bookreader.mode === this.bookreader.constMode2up ? 'left' : 'right';
331
- render(html(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n <bookmark-button\n @bookmarkButtonClicked=", "\n state=", "\n side=", "\n ></bookmark-button>"])), () => this.bookmarkButtonClicked(pageID), bookmarkState, pageSide), bookmarkButton);
332
- pageEl.appendChild(bookmarkButton);
333
- });
334
- }
335
-
336
- /**
337
- * Notes which bookmark is active
338
- *
339
- * @param {boolean} atSetup - denotes the first time this is fired
340
- */
341
- markActiveBookmark() {
342
- var atSetup = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
343
- var {
344
- mode,
345
- constMode2up,
346
- constModeThumb
347
- } = this.bookreader;
348
- var currentIndex = this.bookreader.currentIndex();
349
- if (mode === constModeThumb) {
350
- // keep active bookmark the same
351
- // no syncing until we can verify when a bookmark is "in view"
352
- var requestedPageHasBookmark = this.bookmarks[currentIndex];
353
- if (atSetup && requestedPageHasBookmark) {
354
- this.activeBookmarkID = currentIndex;
355
- }
356
- return;
357
- }
358
- // In 2up, we prefer the right side of the page to bookmark
359
- // so let's make sure we light that one up.
360
- if (mode === constMode2up) {
361
- var pagesInView = this.bookreader.displayedIndices;
362
- var pagesHaveActiveBookmark = pagesInView.includes(+this.activeBookmarkID);
363
- if (pagesHaveActiveBookmark) {
364
- return;
365
- }
366
- }
367
-
368
- // If a bookmark exists with the current index, set it as active
369
- if (this.bookmarks[currentIndex]) {
370
- this.activeBookmarkID = currentIndex;
371
- return;
372
- }
373
-
374
- // No bookmark for this page
375
- this.activeBookmarkID = '';
376
- }
377
- bookmarkEdited(_ref2) {
378
- var {
379
- detail
380
- } = _ref2;
381
- var closeEdit = detail.bookmark.id === this.editedBookmark.id;
382
- this.editedBookmark = closeEdit ? {} : detail.bookmark;
383
- }
384
-
385
- /**
386
- * Gets bookmark by pageindex
387
- * @param {number} id
388
- */
389
- getBookmark(id) {
390
- return this.bookmarks[id];
391
- }
392
- getBookmarkColor(id) {
393
- var _this$bookmarkColors$;
394
- return (_this$bookmarkColors$ = this.bookmarkColors.find(m => m.id === id)) === null || _this$bookmarkColors$ === void 0 ? void 0 : _this$bookmarkColors$.className;
395
- }
396
-
397
- /**
398
- * Adds bookmark for current page
399
- */
400
- addBookmark() {
401
- var pageID = this.bookreader.currentIndex();
402
- if (this.bookreader.mode === this.bookreader.constMode2up) {
403
- var pagesInView = this.bookreader.displayedIndices;
404
-
405
- // add bookmark to right hand page
406
- pageID = pagesInView[pagesInView.length - 1];
407
- }
408
- this.createBookmark(pageID);
409
- }
410
-
411
- /**
412
- * Creates bookmark for a given page
413
- * @param {number} pageID
414
- */
415
- createBookmark(pageID) {
416
- var existingBookmark = this.getBookmark(pageID);
417
- if (existingBookmark) {
418
- this.bookmarkEdited({
419
- detail: {
420
- bookmark: existingBookmark
421
- }
422
- });
423
- this.emitBookmarkButtonClicked();
424
- return;
425
- }
426
- this.editedBookmark = this.formatBookmark({
427
- leafNum: pageID
428
- });
429
- this.api.post(this.editedBookmark);
430
- this.bookmarks[pageID] = this.editedBookmark;
431
- this.activeBookmarkID = pageID;
432
- this.disableAddBookmarkButton = true;
433
- this.renderBookmarkButtons();
434
- this.emitBookmarkButtonClicked();
435
- }
436
- bookmarkSelected(_ref3) {
437
- var {
438
- detail
439
- } = _ref3;
440
- var {
441
- leafNum
442
- } = detail.bookmark;
443
- this.bookreader.jumpToPage("".concat(this.bookreader.book.getPageNum("".concat(leafNum).replace(/\D/g, ''))));
444
- this.activeBookmarkID = leafNum;
445
- }
446
- saveBookmark(_ref4) {
447
- var {
448
- detail
449
- } = _ref4;
450
- var existingBookmark = this.bookmarks[detail.bookmark.id];
451
- Object.assign(existingBookmark, detail.bookmark);
452
- this.api.put(existingBookmark);
453
- this.editedBookmark = {};
454
- this.renderBookmarkButtons();
455
- }
456
- confirmDeletion(pageID) {
457
- var existingBookmark = this.getBookmark(pageID);
458
- if (existingBookmark.note) {
459
- this.displayDeletionModal(pageID);
460
- return;
461
- }
462
- this.deleteBookmark({
463
- detail: {
464
- id: "".concat(pageID)
465
- }
466
- });
467
- }
468
- displayDeletionModal(pageID) {
469
- var customModalContent = html(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n <delete-modal-actions\n .deleteAction=", "\n .cancelAction=", "\n .pageID=", "\n ></delete-modal-actions>\n "])), () => this.deleteBookmark({
470
- detail: {
471
- id: "".concat(pageID)
472
- }
473
- }), () => this.modal.closeModal(), pageID);
474
- this.modal.showModal({
475
- config: this.deleteModalConfig,
476
- customModalContent
477
- });
478
- }
479
- deleteBookmark(_ref5) {
480
- var {
481
- detail
482
- } = _ref5;
483
- var {
484
- id
485
- } = detail;
486
- var currBookmarks = this.bookmarks;
487
- delete currBookmarks[id];
488
- this.bookmarks = _objectSpread({}, currBookmarks);
489
- this.api.delete(detail.id);
490
- this.editedBookmark = {};
491
- this.modal.closeModal();
492
- this.renderBookmarkButtons();
493
- }
494
-
495
- /**
496
- * Tells us if we should allow user to add bookmark via menu panel
497
- * returns { Boolean }
498
- */
499
- get shouldEnableAddBookmarkButton() {
500
- var pageToCheck = this.bookreader.mode === this.bookreader.constMode2up ? this.bookreader.displayedIndices[this.bookreader.displayedIndices.length - 1] : this.bookreader.currentIndex();
501
- var pageHasBookmark = this.getBookmark(pageToCheck);
502
- return !!pageHasBookmark;
503
- }
504
- get allowAddingBookmark() {
505
- return this.bookreader.mode !== this.bookreader.constModeThumb;
506
- }
507
- get addBookmarkButton() {
508
- return html(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n <button\n class=\"ia-button primary\"\n tabindex=\"-1\"\n ?disabled=", "\n @click=", ">\n Add bookmark\n </button>\n "])), this.shouldEnableAddBookmarkButton, this.addBookmark);
509
- }
510
- get bookmarksList() {
511
- return html(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n <ia-bookmarks-list\n @bookmarkEdited=", "\n @bookmarkSelected=", "\n @saveBookmark=", "\n @deleteBookmark=", "\n .editedBookmark=", "\n .bookmarks=", "\n .activeBookmarkID=", "\n .bookmarkColors=", "\n .defaultBookmarkColor=", ">\n </ia-bookmarks-list>\n "])), this.bookmarkEdited, this.bookmarkSelected, this.saveBookmark, this.deleteBookmark, this.editedBookmark, _objectSpread({}, this.bookmarks), this.activeBookmarkID, this.bookmarkColors, this.defaultColor);
512
- }
513
- get bookmarkHelperMessage() {
514
- return html(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["<p>Please use 1up or 2up view modes to add bookmark.</p>"])));
515
- }
516
- render() {
517
- var bookmarks = html(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n ", "\n ", "\n "])), this.bookmarksList, this.allowAddingBookmark ? this.addBookmarkButton : this.bookmarkHelperMessage);
518
- return html(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n <section class=\"bookmarks\">\n ", "\n </section>\n "])), this.displayMode === 'login' ? html(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["<bookmarks-login\n @click=", "\n .url=", "></bookmarks-login>"])), () => this.loginOptions.loginClicked(), this.loginOptions.loginUrl) : bookmarks);
519
- }
520
- }
521
- customElements.define('ia-bookmarks', IABookmarks);
@@ -1,29 +0,0 @@
1
- var _templateObject, _templateObject2;
2
- function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
3
- import { LitElement, html, css } from 'lit';
4
- export default class DeleteModalActions extends LitElement {
5
- static get styles() {
6
- return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n div {\n display: flex;\n justify-content: center;\n padding-top: 2rem;\n }\n\n button {\n appearance: none;\n padding: 0.5rem 1rem;\n margin: 0 .5rem;\n box-sizing: border-box;\n font: 1.3rem \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n color: var(--primaryTextColor);\n border: none;\n border-radius: 4px;\n cursor: pointer;\n background: var(--primaryCTAFill);\n }\n\n .delete {\n background: var(--primaryErrorCTAFill);\n }\n "])));
7
- }
8
- static get properties() {
9
- return {
10
- cancelAction: {
11
- type: Function
12
- },
13
- deleteAction: {
14
- type: Function
15
- },
16
- pageID: {
17
- type: String
18
- }
19
- };
20
- }
21
- render() {
22
- return html(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n <div>\n <button class=\"delete\" @click=", ">Delete</button>\n <button @click=", ">Cancel</button>\n </div>\n "])), () => this.deleteAction({
23
- detail: {
24
- id: "".concat(this.pageID)
25
- }
26
- }), () => this.cancelAction());
27
- }
28
- }
29
- customElements.define('delete-modal-actions', DeleteModalActions);
@@ -1,84 +0,0 @@
1
- var _templateObject, _templateObject2;
2
- function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
3
- import { html } from 'lit';
4
- import '@internetarchive/icon-dl/icon-dl';
5
- import './downloads';
6
- var menuBase = {
7
- pdf: {
8
- type: 'Encrypted Adobe PDF',
9
- url: '#',
10
- note: 'PDF files contain high quality images of pages.'
11
- },
12
- lcppdf: {
13
- type: 'Get LCP PDF',
14
- url: '#',
15
- note: 'PDF files contain high quality images of pages.'
16
- },
17
- lcpepub: {
18
- type: 'Get LCP ePub',
19
- url: '#',
20
- note: 'ePub files are smaller in size, but may contain errors.'
21
- },
22
- epub: {
23
- type: 'Encrypted Adobe ePub',
24
- url: '#',
25
- note: 'ePub files are smaller in size, but may contain errors.'
26
- }
27
- };
28
- var publicMenuBase = {
29
- pdf: "PDF",
30
- epub: "ePub",
31
- lcppdf: "LCP PDF",
32
- lcpepub: "LCP ePub"
33
- };
34
- export default class DownloadsProvider {
35
- constructor(_ref) {
36
- var _bookreader$options;
37
- var {
38
- bookreader
39
- } = _ref;
40
- this.icon = html(_templateObject || (_templateObject = _taggedTemplateLiteral(["<ia-icon-dl style=\"width: var(--iconWidth); height: var(--iconHeight);\"></ia-icon-dl>"])));
41
- this.label = 'Downloadable files';
42
- this.menuDetails = '';
43
- this.downloads = [];
44
- this.id = 'downloads';
45
- this.component = '';
46
- this.isBookProtected = (bookreader === null || bookreader === void 0 || (_bookreader$options = bookreader.options) === null || _bookreader$options === void 0 ? void 0 : _bookreader$options.isProtected) || false;
47
- }
48
- update(downloadTypes) {
49
- this.computeAvailableTypes(downloadTypes);
50
- this.component = this.menu;
51
- this.component.isBookProtected = this.isBookProtected;
52
- var ending = this.downloads.length === 1 ? '' : 's';
53
- this.menuDetails = "(".concat(this.downloads.length, " format").concat(ending, ")");
54
- }
55
-
56
- /**
57
- * Generates Download Menu Info for available types
58
- * sets global `downloads`
59
- * @param availableTypes
60
- */
61
- computeAvailableTypes() {
62
- var _this = this;
63
- var availableTypes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
64
- var menuData = availableTypes.reduce(function (found) {
65
- var incoming = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
66
- var [type = '', link = ''] = incoming;
67
- var formattedType = type.toLowerCase();
68
- var downloadOption = menuBase[formattedType] || null;
69
- if (downloadOption) {
70
- var menuButtonText = _this.isBookProtected ? menuBase[formattedType].type : publicMenuBase[formattedType];
71
- var menuInfo = Object.assign({}, downloadOption, {
72
- url: link,
73
- type: menuButtonText
74
- });
75
- found.push(menuInfo);
76
- }
77
- return found;
78
- }, []);
79
- this.downloads = menuData;
80
- }
81
- get menu() {
82
- return html(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["<ia-book-downloads .downloads=", "></ia-book-downloads>"])), this.downloads);
83
- }
84
- }