@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,165 +0,0 @@
1
- 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); }
2
- 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); }); }; }
3
- // @ts-check
4
- /** @typedef {import('./BookModel.js').PageModel} PageModel */
5
- /** @typedef {import('./ImageCache.js').ImageCache} ImageCache */
6
-
7
- export class PageContainer {
8
- /**
9
- * @param {PageModel} page
10
- * @param {object} opts
11
- * @param {boolean} opts.isProtected Whether we're in a protected book
12
- * @param {ImageCache} opts.imageCache
13
- * @param {string} opts.loadingImage
14
- */
15
- constructor(page, _ref) {
16
- var {
17
- isProtected,
18
- imageCache,
19
- loadingImage
20
- } = _ref;
21
- this.page = page;
22
- this.imageCache = imageCache;
23
- this.loadingImage = loadingImage;
24
- this.$container = $('<div />', {
25
- 'class': "BRpagecontainer ".concat(page ? "pagediv".concat(page.index) : 'BRemptypage'),
26
- css: {
27
- position: 'absolute'
28
- }
29
- }).attr('data-side', page === null || page === void 0 ? void 0 : page.pageSide);
30
- if (isProtected) {
31
- this.$container.append($('<div class="BRscreen" />'));
32
- this.$container.addClass('protected');
33
- }
34
-
35
- /** @type {JQuery<HTMLImageElement>} The main book page image */
36
- this.$img = null;
37
- }
38
-
39
- /**
40
- * @param {object} param0
41
- * @param {{ width: number, height: number, top: number, left: number }} [param0.dimensions]
42
- * @param {number} param0.reduce
43
- */
44
- update(_ref2) {
45
- var _this$$img, _this$$img2;
46
- var {
47
- dimensions = null,
48
- reduce = null
49
- } = _ref2;
50
- if (dimensions) {
51
- this.$container.css(dimensions);
52
- }
53
- if (reduce == null || !this.page) {
54
- return;
55
- }
56
- var alreadyLoaded = this.imageCache.imageLoaded(this.page.index, reduce);
57
- var nextBestLoadedReduce = !alreadyLoaded && this.imageCache.getBestLoadedReduce(this.page.index, reduce);
58
-
59
- // Create high res image
60
- var $newImg = this.imageCache.image(this.page.index, reduce);
61
-
62
- // Avoid removing/re-adding the image if it's already there
63
- // This can be called quite a bit, so we need to be fast
64
- if (((_this$$img = this.$img) === null || _this$$img === void 0 ? void 0 : _this$$img[0].src) == $newImg[0].src) {
65
- return this;
66
- }
67
- (_this$$img2 = this.$img) === null || _this$$img2 === void 0 || _this$$img2.remove();
68
- this.$img = $newImg.prependTo(this.$container);
69
- var backgroundLayers = [];
70
- if (!alreadyLoaded) {
71
- this.$container.addClass('BRpageloading');
72
- backgroundLayers.push("url(\"".concat(this.loadingImage, "\") center/20px no-repeat"));
73
- }
74
- if (nextBestLoadedReduce) {
75
- backgroundLayers.push("url(\"".concat(this.page.getURI(nextBestLoadedReduce, 0), "\") center/100% 100% no-repeat"));
76
- }
77
- if (!alreadyLoaded) {
78
- this.$img.css('background', backgroundLayers.join(',')).one('loadend', /*#__PURE__*/function () {
79
- var _ref3 = _asyncToGenerator(function* (ev) {
80
- $(ev.target).css({
81
- 'background': ''
82
- });
83
- $(ev.target).parent().removeClass('BRpageloading');
84
- });
85
- return function (_x) {
86
- return _ref3.apply(this, arguments);
87
- };
88
- }());
89
- }
90
- return this;
91
- }
92
- }
93
-
94
- /**
95
- * @param {PageModel} page
96
- * @param {string} className
97
- */
98
- export function createSVGPageLayer(page, className) {
99
- var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
100
- svg.setAttribute("xmlns", "http://www.w3.org/2000/svg");
101
- svg.setAttribute("viewBox", "0 0 ".concat(page.width, " ").concat(page.height));
102
- svg.setAttribute('class', "BRPageLayer ".concat(className));
103
- svg.setAttribute('preserveAspectRatio', 'none');
104
- return svg;
105
- }
106
-
107
- /**
108
- * @param {PageModel} page
109
- * @param {string} className
110
- */
111
- export function createDIVPageLayer(page, className) {
112
- var div = document.createElement("div");
113
- div.style.width = "".concat(page.width, "px");
114
- div.style.height = "".concat(page.height, "px");
115
- div.setAttribute('class', "BRPageLayer ".concat(className));
116
- return div;
117
- }
118
-
119
- /**
120
- * @param {{ l: number, r: number, b: number, t: number }} box
121
- */
122
- export function boxToSVGRect(_ref4) {
123
- var {
124
- l: left,
125
- r: right,
126
- b: bottom,
127
- t: top
128
- } = _ref4;
129
- var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
130
- rect.setAttribute("x", left.toString());
131
- rect.setAttribute("y", top.toString());
132
- rect.setAttribute("width", (right - left).toString());
133
- rect.setAttribute("height", (bottom - top).toString());
134
-
135
- // Some style; corner radius 4px. Can't set this in CSS yet
136
- rect.setAttribute("rx", "4");
137
- rect.setAttribute("ry", "4");
138
- return rect;
139
- }
140
-
141
- /**
142
- * @param {string} layerClass
143
- * @param {Array<{ l: number, r: number, b: number, t: number }>} boxes
144
- * @param {PageModel} page
145
- * @param {HTMLElement} containerEl
146
- * @param {string[]} [rectClasses] CSS classes to add to the rects
147
- */
148
- export function renderBoxesInPageContainerLayer(layerClass, boxes, page, containerEl) {
149
- var rectClasses = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
150
- var mountedSvg = containerEl.querySelector(".".concat(layerClass));
151
- // Create the layer if it's not there
152
- var svg = mountedSvg || createSVGPageLayer(page, layerClass);
153
- if (!mountedSvg) {
154
- // Insert after the image if the image is already loaded.
155
- var imgEl = containerEl.querySelector('.BRpageimage');
156
- if (imgEl) $(svg).insertAfter(imgEl);else $(svg).prependTo(containerEl);
157
- }
158
- for (var [i, box] of boxes.entries()) {
159
- var rect = boxToSVGRect(box);
160
- if (rectClasses) {
161
- rect.setAttribute('class', rectClasses[i]);
162
- }
163
- svg.appendChild(rect);
164
- }
165
- }
@@ -1,27 +0,0 @@
1
- /**
2
- * @typedef {object} ReduceSet Set of valid numbers for a reduce variable.
3
- * @property {(n: number) => number} floor
4
- * @property {(n: number) => number} decr Return the predecessor of the given element
5
- */
6
-
7
- /** @type {ReduceSet} */
8
- export var IntegerReduceSet = {
9
- floor: Math.floor,
10
- decr(n) {
11
- return n - 1;
12
- }
13
- };
14
-
15
- /** @type {ReduceSet} */
16
- export var Pow2ReduceSet = {
17
- floor(n) {
18
- return 2 ** Math.floor(Math.log2(Math.max(1, n)));
19
- },
20
- decr(n) {
21
- return 2 ** (Math.log2(n) - 1);
22
- }
23
- };
24
- export var NAMED_REDUCE_SETS = {
25
- pow2: Pow2ReduceSet,
26
- integer: IntegerReduceSet
27
- };
@@ -1,242 +0,0 @@
1
- import 'jquery-colorbox';
2
- import { escapeHTML } from '../utils.js';
3
- import { EVENTS } from '../events.js';
4
- /** @typedef {import("../../BookReader.js").default} BookReader */
5
-
6
- export class Toolbar {
7
- /**
8
- * @param {BookReader} br
9
- */
10
- constructor(br) {
11
- this.br = br;
12
- }
13
-
14
- /**
15
- * This method builds the html for the toolbar. It can be decorated to extend
16
- * the toolbar.
17
- * @return {JQuery}
18
- */
19
- buildToolbarElement() {
20
- var {
21
- br
22
- } = this;
23
- var logoHtml = !br.showLogo ? '' : "\n <span class=\"BRtoolbarSection BRtoolbarSectionLogo\">\n <a class=\"logo\" href=\"".concat(br.logoURL, "\"></a>\n </span>");
24
-
25
- // Add large screen navigation
26
- br.refs.$BRtoolbar = $("\n <div class=\"BRtoolbar header\">\n <div class=\"BRtoolbarbuttons\">\n <div class=\"BRtoolbarLeft\">\n ".concat(logoHtml, "\n <span class=\"BRtoolbarSection BRtoolbarSectionTitle\"></span>\n </div>\n <div class=\"BRtoolbarRight\">\n <span class=\"BRtoolbarSection BRtoolbarSectionInfo\">\n <button class=\"BRpill info js-tooltip\">Info</button>\n <button class=\"BRpill share js-tooltip\">Share</button>\n </span>\n </div>\n </div>\n </div>"));
27
- // TODO actual hamburger menu
28
- // <span class="BRtoolbarSection BRtoolbarSectionMenu">
29
- // <button class="BRpill BRtoolbarHamburger">
30
- // <img src="${br.imagesBaseURL}icon_hamburger.svg" />
31
- // <div class="BRhamburgerDrawer"><ul><li>hi</li></ul></div>
32
- // </button>
33
- // </span>
34
-
35
- var $titleSectionEl = br.refs.$BRtoolbar.find('.BRtoolbarSectionTitle');
36
- if (br.bookUrl && br.options.enableBookTitleLink) {
37
- $titleSectionEl.append($('<a>').attr({
38
- href: br.bookUrl,
39
- title: br.bookUrlTitle
40
- }).addClass('BRreturn').html(br.bookUrlText || br.bookTitle));
41
- } else if (br.bookTitle) {
42
- $titleSectionEl.append(br.bookUrlText || br.bookTitle);
43
- }
44
-
45
- // const $hamburger = br.refs.$BRtoolbar.find('BRtoolbarHamburger');
46
- return br.refs.$BRtoolbar;
47
- }
48
-
49
- /**
50
- * Initializes the toolbar (top)
51
- * @param {string} mode
52
- * @param {string} ui
53
- */
54
- initToolbar(mode, ui) {
55
- var {
56
- br
57
- } = this;
58
- br.refs.$br.append(this.buildToolbarElement());
59
- br.$('.BRnavCntl').addClass('BRup');
60
- br.$('.pause').hide();
61
-
62
- // We build in mode 2
63
- br.refs.$BRtoolbar.append();
64
-
65
- // Hide mode buttons and autoplay if 2up is not available
66
- // $$$ if we end up with more than two modes we should show the applicable buttons
67
- if (!br.canSwitchToMode(br.constMode2up)) {
68
- br.$('.two_page_mode, .play, .pause').hide();
69
- }
70
- if (!br.canSwitchToMode(br.constModeThumb)) {
71
- br.$('.thumbnail_mode').hide();
72
- }
73
-
74
- // Hide one page button if it is the only mode available
75
- if (!(br.canSwitchToMode(br.constMode2up) || br.canSwitchToMode(br.constModeThumb))) {
76
- br.$('.one_page_mode').hide();
77
- }
78
- $('<div style="display: none;"></div>').append(blankShareDiv()).append(blankInfoDiv()).appendTo(br.refs.$br);
79
- br.$('.BRinfo .BRfloatTitle a').attr({
80
- href: br.bookUrl
81
- }).text(br.bookTitle).addClass('title');
82
-
83
- // These functions can be overridden
84
- this.buildInfoDiv(br.$('.BRinfo'));
85
- this.buildShareDiv(br.$('.BRshare'));
86
- br.$('.share').colorbox({
87
- inline: true,
88
- opacity: "0.5",
89
- href: br.$('.BRshare'),
90
- onLoad: () => {
91
- br.trigger(EVENTS.stop);
92
- br.$('.BRpageviewValue').val(window.location.href);
93
- }
94
- });
95
- br.$('.info').colorbox({
96
- inline: true,
97
- opacity: "0.5",
98
- href: br.$('.BRinfo'),
99
- onLoad: () => {
100
- br.trigger(EVENTS.stop);
101
- }
102
- });
103
- }
104
-
105
- /**
106
- * @param {JQuery} $shareDiv
107
- */
108
- buildShareDiv($shareDiv) {
109
- var {
110
- br
111
- } = this;
112
- var pageView = document.location + '';
113
- var bookView = (pageView + '').replace(/#.*/, '');
114
- var embedHtml = !br.getEmbedCode ? '' : "\n <div class=\"share-embed\">\n <p class=\"share-embed-prompt\">Copy and paste one of these options to share this book elsewhere.</p>\n <form method=\"post\" action=\"\">\n <fieldset class=\"fieldset-share-pageview\">\n <label for=\"pageview\">Link to this page view</label>\n <input type=\"text\" name=\"pageview\" class=\"BRpageviewValue\" value=\"".concat(pageView, "\"/>\n </fieldset>\n <fieldset class=\"fieldset-share-book-link\">\n <label for=\"booklink\">Link to the book</label>\n <input type=\"text\" name=\"booklink\" class=\"booklink\" value=\"").concat(bookView, "\"/>\n </fieldset>\n <fieldset class=\"fieldset-embed\">\n <label for=\"iframe\">Embed a mini Book Reader</label>\n <fieldset class=\"sub\">\n <label class=\"sub\">\n <input type=\"radio\" name=\"pages\" value=\"").concat(br.constMode1up, "\" checked=\"checked\"/>\n 1 page\n </label>\n <label class=\"sub\">\n <input type=\"radio\" name=\"pages\" value=\"").concat(br.constMode2up, "\"/>\n 2 pages\n </label>\n <label class=\"sub\">\n <input type=\"checkbox\" name=\"thispage\" value=\"thispage\"/>\n Open to this page?\n </label>\n </fieldset>\n <textarea cols=\"30\" rows=\"4\" name=\"iframe\" class=\"BRframeEmbed\"></textarea>\n </fieldset>\n </form>\n </div>");
115
- var $form = $("\n <div class=\"share-title\">Share this book</div>\n <div class=\"share-social\">\n <label class=\"sub open-to-this-page\">\n <input class=\"thispage-social\" type=\"checkbox\" />\n Open to this page?\n </label>\n <div><button class=\"BRaction share facebook-share-button\"><i class=\"BRicon fb\" /> Facebook</button></div>\n <div><button class=\"BRaction share twitter-share-button\"><i class=\"BRicon twitter\" /> Twitter</button></div>\n <div><button class=\"BRaction share email-share-button\"><i class=\"BRicon email\" /> Email</button></div>\n </div>\n ".concat(embedHtml, "\n <div class=\"BRfloatFoot\">\n <button class=\"share-finished\" type=\"button\" onclick=\"$.fn.colorbox.close();\">Finished</button>\n </div>"));
116
- $form.appendTo($shareDiv);
117
- $form.find('.fieldset-embed input').on('change', event => {
118
- var form = $(event.target).parents('form').first();
119
- var params = {};
120
- params.mode = $(form.find('.fieldset-embed input[name=pages]:checked')).val();
121
- if (form.find('.fieldset-embed input[name=thispage]').prop('checked')) {
122
- params.page = br.book.getPageNum(br.currentIndex());
123
- }
124
- if (br.getEmbedCode) {
125
- // $$$ changeable width/height to be added to share UI
126
- var frameWidth = "480px";
127
- var frameHeight = "430px";
128
- form.find('.BRframeEmbed').val(br.getEmbedCode(frameWidth, frameHeight, params));
129
- }
130
- });
131
- $form.find('input, textarea').on('focus', event => event.target.select());
132
-
133
- // Bind share buttons
134
-
135
- // Use url without hashes
136
- $form.find('.facebook-share-button').on("click", () => {
137
- var params = $.param({
138
- u: this._getSocialShareUrl()
139
- });
140
- var url = 'https://www.facebook.com/sharer.php?' + params;
141
- createPopup(url, 600, 400, 'Share');
142
- });
143
- $form.find('.twitter-share-button').on("click", () => {
144
- var params = $.param({
145
- url: this._getSocialShareUrl(),
146
- text: br.bookTitle
147
- });
148
- var url = 'https://twitter.com/intent/tweet?' + params;
149
- createPopup(url, 600, 400, 'Share');
150
- });
151
- $form.find('.email-share-button').on("click", () => {
152
- var body = "".concat(br.bookTitle, "\n\n").concat(this._getSocialShareUrl());
153
- window.location.href = "mailto:?subject=".concat(encodeURI(br.bookTitle), "&body=").concat(encodeURI(body));
154
- });
155
- $form.find('input[name=thispage]').trigger('change');
156
- $form.appendTo($shareDiv);
157
- }
158
- _getSocialShareUrl() {
159
- var {
160
- br
161
- } = this;
162
- var shareThisPage = br.$('.thispage-social').prop('checked');
163
- if (shareThisPage) {
164
- return window.location.href;
165
- } else {
166
- return "".concat(document.location.protocol, "//").concat(window.location.hostname).concat(window.location.pathname);
167
- }
168
- }
169
-
170
- /**
171
- * @param {JQuery} $infoDiv DOM element. Appends info to this element
172
- * Can be overridden or extended
173
- */
174
- buildInfoDiv($infoDiv) {
175
- var {
176
- br
177
- } = this;
178
- // Remove these legacy elements
179
- $infoDiv.find('.BRfloatBody, .BRfloatCover, .BRfloatFoot').remove();
180
- var $leftCol = $("<div class=\"BRinfoLeftCol\"></div>");
181
- if (br.thumbnail) {
182
- $leftCol.append($("\n <div class=\"BRimageW\">\n <img src=\"".concat(br.thumbnail, "\" alt=\"").concat(escapeHTML(br.bookTitle), "\" />\n </div>")));
183
- }
184
- var $rightCol = $("<div class=\"BRinfoRightCol\">");
185
-
186
- // A loop to build fields
187
- for (var {
188
- extraValueClass = '',
189
- label,
190
- value
191
- } of br.metadata) {
192
- var escapedValue = label === 'Title' ? escapeHTML(value) : value;
193
- $rightCol.append($("\n <div class=\"BRinfoValueWrapper\">\n <div class=\"BRinfoLabel\">".concat(label, "</div>\n <div class=\"BRinfoValue ").concat(extraValueClass, "\">").concat(escapedValue, "</div>\n </div>")));
194
- }
195
- var moreInfoText = br.bookUrlMoreInfo ? br.bookUrlMoreInfo : br.bookTitle;
196
- if (moreInfoText && br.bookUrl) {
197
- $rightCol.append($("\n <div class=\"BRinfoValueWrapper\">\n <div class=\"BRinfoMoreInfoWrapper\">\n <a class=\"BRinfoMoreInfo\" href=\"".concat(br.bookUrl, "\">\n ").concat(escapeHTML(moreInfoText), "\n </a>\n </div>\n </div>")));
198
- }
199
- var $footer = $("<div class=\"BRfloatFoot BRinfoFooter\"></div>");
200
- var $children = $('<div class="BRinfoW mv20-lg">').append([$leftCol, $rightCol, $('<br style="clear:both"/>')]);
201
- $infoDiv.append($children, $footer).addClass('wide');
202
- }
203
-
204
- /**
205
- * @return {number} (in pixels) of the toolbar height. 0 if no toolbar.
206
- */
207
- getToolBarHeight() {
208
- var {
209
- $BRtoolbar
210
- } = this.br.refs;
211
- if ($BRtoolbar && $BRtoolbar.css('display') === 'block') {
212
- return $BRtoolbar.outerHeight() + parseInt($BRtoolbar.css('top'));
213
- } else {
214
- return 0;
215
- }
216
- }
217
- }
218
- function blankInfoDiv() {
219
- return $("\n <div class=\"BRfloat BRinfo\">\n <div class=\"BRfloatHead\">About this book\n <button class=\"floatShut\" href=\"javascript:;\" onclick=\"$.fn.colorbox.close();\"><span class=\"br-colorbox-shift\">Close</span></button>\n </div>\n <div class=\"BRfloatBody\">\n <div class=\"BRfloatCover\"></div>\n <div class=\"BRfloatMeta\">\n <div class=\"BRfloatTitle\">\n <h2><a /></h2>\n </div>\n </div>\n </div>\n <div class=\"BRfloatFoot\">\n <a href=\"https://openlibrary.org/dev/docs/bookreader\">About the BookReader</a>\n </div>\n </div>");
220
- }
221
- function blankShareDiv() {
222
- return $("\n <div class=\"BRfloat BRshare\">\n <div class=\"BRfloatHead\">\n Share\n <button class=\"floatShut\" href=\"javascript:;\" onclick=\"$.fn.colorbox.close();\"><span class=\"br-colorbox-shift\">Close</span></button>\n </div>\n </div>");
223
- }
224
-
225
- /**
226
- * Helper opens a popup window. On mobile it only opens a new tab. Used for share.
227
- * @param {string} href
228
- * @param {number} width
229
- * @param {number} height
230
- * @param {string} name
231
- */
232
- export function createPopup(href, width, height, name) {
233
- // Fixes dual-screen position
234
- var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
235
- var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;
236
- var win_w = window.innerWidth || document.documentElement.clientWidth || screen.width;
237
- var win_h = window.innerHeight || document.documentElement.clientHeight || screen.height;
238
- var left = win_w / 2 - width / 2 + dualScreenLeft;
239
- var top = win_h / 2 - height / 2 + dualScreenTop;
240
- var opts = "status=1,width=".concat(width, ",height=").concat(height, ",top=").concat(top, ",left=").concat(left);
241
- window.open(href, name, opts);
242
- }
@@ -1,20 +0,0 @@
1
- /** @enum {string} */
2
- export var EVENTS = {
3
- /** Indicates that the fragment (a serialization of the reader
4
- * state) has changed. */
5
- fragmentChange: 'fragmentChange',
6
- pageChanged: 'pageChanged',
7
- PostInit: 'PostInit',
8
- stop: 'stop',
9
- resize: 'resize',
10
- userAction: 'userAction',
11
- // event to know if user is actively reading
12
- // menu click events
13
- fullscreenToggled: 'fullscreenToggled',
14
- zoomOut: 'zoomOut',
15
- zoomIn: 'zoomIn',
16
- '1PageViewSelected': '1PageViewSelected',
17
- '2PageViewSelected': '2PageViewSelected',
18
- /* currently 3 represents thumbnail view */
19
- '3PageViewSelected': '3PageViewSelected'
20
- };