@internetarchive/bookreader 5.0.0-24 → 5.0.0-24-sortingstate-3

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 (79) hide show
  1. package/.nvmrc +1 -0
  2. package/BookReader/BookReader.js +32145 -2
  3. package/BookReader/BookReader.js.map +1 -1
  4. package/BookReader/bookreader-component-bundle.js +10911 -941
  5. package/BookReader/bookreader-component-bundle.js.map +1 -1
  6. package/BookReader/icons/1up.svg +12 -1
  7. package/BookReader/icons/2up.svg +15 -1
  8. package/BookReader/icons/advance.svg +26 -3
  9. package/BookReader/icons/chevron-right.svg +1 -1
  10. package/BookReader/icons/close-circle-dark.svg +1 -1
  11. package/BookReader/icons/close-circle.svg +1 -1
  12. package/BookReader/icons/fullscreen.svg +17 -1
  13. package/BookReader/icons/fullscreen_exit.svg +17 -1
  14. package/BookReader/icons/hamburger.svg +15 -1
  15. package/BookReader/icons/left-arrow.svg +12 -1
  16. package/BookReader/icons/magnify-minus.svg +16 -1
  17. package/BookReader/icons/magnify-plus.svg +17 -1
  18. package/BookReader/icons/magnify.svg +15 -1
  19. package/BookReader/icons/pause.svg +23 -1
  20. package/BookReader/icons/play.svg +22 -1
  21. package/BookReader/icons/playback-speed.svg +34 -1
  22. package/BookReader/icons/read-aloud.svg +22 -1
  23. package/BookReader/icons/review.svg +22 -3
  24. package/BookReader/icons/thumbnails.svg +17 -1
  25. package/BookReader/icons/voice.svg +1 -1
  26. package/BookReader/icons/volume-full.svg +22 -1
  27. package/BookReader/images/BRicons.svg +94 -5
  28. package/BookReader/images/books_graphic.svg +177 -1
  29. package/BookReader/images/icon_book.svg +12 -1
  30. package/BookReader/images/icon_bookmark.svg +12 -1
  31. package/BookReader/images/icon_gear.svg +14 -1
  32. package/BookReader/images/icon_hamburger.svg +20 -1
  33. package/BookReader/images/icon_home.svg +21 -1
  34. package/BookReader/images/icon_info.svg +11 -1
  35. package/BookReader/images/icon_one_page.svg +8 -1
  36. package/BookReader/images/icon_pause.svg +1 -1
  37. package/BookReader/images/icon_play.svg +1 -1
  38. package/BookReader/images/icon_playback-rate.svg +15 -1
  39. package/BookReader/images/icon_search_button.svg +8 -1
  40. package/BookReader/images/icon_share.svg +9 -1
  41. package/BookReader/images/icon_skip-ahead.svg +6 -1
  42. package/BookReader/images/icon_skip-back.svg +13 -2
  43. package/BookReader/images/icon_speaker.svg +18 -1
  44. package/BookReader/images/icon_speaker_open.svg +10 -1
  45. package/BookReader/images/icon_thumbnails.svg +12 -1
  46. package/BookReader/images/icon_toc.svg +5 -1
  47. package/BookReader/images/icon_two_pages.svg +9 -1
  48. package/BookReader/images/marker_chap-off.svg +11 -1
  49. package/BookReader/images/marker_chap-on.svg +11 -1
  50. package/BookReader/images/marker_srch-on.svg +11 -1
  51. package/BookReader/jquery-1.10.1.js +108 -2
  52. package/BookReader/plugins/plugin.archive_analytics.js +170 -1
  53. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  54. package/BookReader/plugins/plugin.autoplay.js +163 -1
  55. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  56. package/BookReader/plugins/plugin.chapters.js +333 -1
  57. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  58. package/BookReader/plugins/plugin.iframe.js +72 -1
  59. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  60. package/BookReader/plugins/plugin.mobile_nav.js +332 -1
  61. package/BookReader/plugins/plugin.mobile_nav.js.map +1 -1
  62. package/BookReader/plugins/plugin.resume.js +241 -1
  63. package/BookReader/plugins/plugin.resume.js.map +1 -1
  64. package/BookReader/plugins/plugin.search.js +1263 -1
  65. package/BookReader/plugins/plugin.search.js.map +1 -1
  66. package/BookReader/plugins/plugin.text_selection.js +839 -1
  67. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  68. package/BookReader/plugins/plugin.tts.js +9114 -2
  69. package/BookReader/plugins/plugin.tts.js.map +1 -1
  70. package/BookReader/plugins/plugin.url.js +764 -1
  71. package/BookReader/plugins/plugin.url.js.map +1 -1
  72. package/BookReader/plugins/plugin.vendor-fullscreen.js +326 -1
  73. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  74. package/BookReader/webcomponents-bundle.js +411 -2
  75. package/BookReader/webcomponents-bundle.js.map +1 -1
  76. package/package.json +1 -1
  77. package/src/BookNavigator/volumes/volumes-provider.js +40 -9
  78. package/src/plugins/plugin.url.js +214 -2
  79. package/tests/jest/plugins/plugin.url.test.js +151 -1
@@ -1,2 +1,334 @@
1
- "use strict";(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[529],{8586:function(e,t,n){n(9600),n(7327),n(2222),n(9826),n(5069),n(4553);var a,o=n(3609),r=n(3609);o.extend(BookReader.defaultOptions,{olHost:"https://openlibrary.org",enableChaptersPlugin:!0,bookId:""}),BookReader.prototype.setup=(a=BookReader.prototype.setup,function(e){a.call(this,e),this.olHost=e.olHost,this.enableChaptersPlugin=e.enableChaptersPlugin,this.bookId=e.bookId}),BookReader.prototype.init=function(e){return function(){var t=this;e.call(this),this.enableChaptersPlugin&&"embed"!==this.ui&&this.getOpenLibraryRecord(),this.enableMobileNav&&(this.bind(BookReader.eventNames.mobileNavOpen,(function(){t.updateTOCState(t.firstIndex,t._tocEntries),r("table-contents-list").parent().hasClass("mm-opened")&&t.updateTOCState(t.firstIndex,t._tocEntries)})),r(".BRmobileMenu__tableContents").on("click",(function(){t.updateTOCState(t.firstIndex,t._tocEntries)})))}}(BookReader.prototype.init),BookReader.prototype.addChapter=function(e,t,n){var a=this,o=BookReader.util.cssPercentage(n,this.getNumLeafs()-1),s=function(e){a.jumpToIndex(r(e.delegateTarget).data("pageIndex")),r(".current-chapter").removeClass("current-chapter"),r(e.delegateTarget).addClass("current-chapter")},i="".concat(e," | "),l="".concat("Page"," ").concat(t),c=r("<li></li>").append(r("<span class='BRTOCElementTitle'></span>").text(i)).append(r("<span class='BRTOCElementPage'></span>").text(l));c.addClass("BRtable-contents-el").appendTo(this.$(".table-contents-list")).data({pageIndex:n}),null!=n&&(r("<div></div>").append(r("<div />").text(i+l)).addClass("BRchapter").css({left:o}).appendTo(this.$(".BRnavline")).data({pageIndex:n}).on("mouseenter",(function(e){var t=e.currentTarget,n=t.querySelector("div"),o=n.getBoundingClientRect(),s=t.getBoundingClientRect(),i=2*parseInt(getComputedStyle(n).paddingLeft);o.x-i<0&&n.style.setProperty("transform","translateX(-".concat(s.left-i,"px)")),a.$(".BRsearch,.BRchapter").removeClass("front"),r(e.target).addClass("front")})).on("mouseleave",(function(e){return r(e.target).removeClass("front")})).on("click",s),c.bind("click",s).addClass("chapter-clickable").attr("data-event-click-tracking","BRTOCPanel|GoToChapter"))},BookReader.prototype.removeChapters=function(){this.$(".BRnavpos .BRchapter").remove()},BookReader.prototype.updateTOC=function(e){this.removeChapters(),this.enableMobileNav&&e.length>0&&this.$(".BRmobileMenu__tableContents").show();for(var t=0;t<e.length;t++)this.addChapterFromEntry(e[t]);this._tocEntries=e,r(".table-contents-list").children().each((function(t,n){e[t].mobileHTML=n}))},BookReader.prototype.addChapterFromEntry=function(e){e.pageIndex=this.getPageIndex(e.pagenum);var t=[e.label,e.title].filter((function(e){return e})).join(" ");this.addChapter(t,e.pagenum,e.pageIndex),this.$(".BRchapter, .BRsearch").each((function(e,t){var n=r(t);n.on("mouseenter",(function(){return n.addClass("front")})).on("mouseleave",(function(){return n.removeClass("front")}))}))},BookReader.prototype.getOpenLibraryRecord=function(){var e=this,t="".concat(this.olHost,"/query.json?type=/type/edition&*="),n="".concat(t,"&ocaid=").concat(this.bookId);r.ajax({url:n,dataType:"jsonp"}).then((function(n){return n&&n.length>0?n:r.ajax({url:"".concat(t,"&source_records=ia:").concat(e.bookId),dataType:"jsonp"})})).then((function(t){var n;t&&t.length>0&&(n=t[0])&&n.table_of_contents&&e.updateTOC(n.table_of_contents)}))},BookReader.prototype.buildMobileDrawerElement=function(e){return function(){var t=e.call(this);return this.enableMobileNav&&this.options.enableChaptersPlugin&&t.find(".BRmobileMenu__moreInfoRow").after(r('\n <li class="BRmobileMenu__tableContents" data-event-click-tracking="BRSidebar|TOCPanel">\n <span>\n <span class="DrawerIconWrapper">\n <img class="DrawerIcon" src="'.concat(this.imagesBaseURL,'icon_toc.svg" alt="toc-icon"/>\n </span>\n Table of Contents\n </span>\n <div>\n <ol class="table-contents-list">\n </ol>\n </div>\n </li>')).hide()),t}}(BookReader.prototype.buildMobileDrawerElement),BookReader.prototype.updateTOCState=function(e,t){if(t){r(".current-chapter").removeClass("current-chapter");var n=t.filter((function(e){return null!=e.pageIndex})).reverse(),a=n[n.findIndex((function(t){return t.pageIndex<=e}))];null!=a&&r(a.mobileHTML).addClass("current-chapter")}}},5069:function(e,t,n){var a=n(2109),o=n(3157),r=[].reverse,s=[1,2];a({target:"Array",proto:!0,forced:String(s)===String(s.reverse())},{reverse:function(){return o(this)&&(this.length=this.length),r.call(this)}})}},function(e){e(e.s=8586)}]);
1
+ "use strict";
2
+ (self["webpackChunk_internetarchive_bookreader"] = self["webpackChunk_internetarchive_bookreader"] || []).push([["plugins/plugin.chapters.js"],{
3
+
4
+ /***/ "./src/plugins/plugin.chapters.js":
5
+ /*!****************************************!*\
6
+ !*** ./src/plugins/plugin.chapters.js ***!
7
+ \****************************************/
8
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
9
+
10
+ __webpack_require__.r(__webpack_exports__);
11
+ /* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ "./node_modules/core-js/modules/es.array.join.js");
12
+ /* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__);
13
+ /* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js");
14
+ /* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_1__);
15
+ /* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.array.concat.js */ "./node_modules/core-js/modules/es.array.concat.js");
16
+ /* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_2__);
17
+ /* harmony import */ var core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.array.find.js */ "./node_modules/core-js/modules/es.array.find.js");
18
+ /* harmony import */ var core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_js__WEBPACK_IMPORTED_MODULE_3__);
19
+ /* harmony import */ var core_js_modules_es_array_reverse_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.array.reverse.js */ "./node_modules/core-js/modules/es.array.reverse.js");
20
+ /* harmony import */ var core_js_modules_es_array_reverse_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reverse_js__WEBPACK_IMPORTED_MODULE_4__);
21
+ /* harmony import */ var core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.find-index.js */ "./node_modules/core-js/modules/es.array.find-index.js");
22
+ /* harmony import */ var core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_5__);
23
+ /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery");
24
+ /* provided dependency */ var $ = __webpack_require__(/*! jquery */ "jquery");
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+ /* global BookReader */
33
+
34
+ /**
35
+ * Plugin for chapter markers in BookReader. Fetches from openlibrary.org
36
+ * Could be forked, or extended to alter behavior
37
+ */
38
+ jQuery.extend(BookReader.defaultOptions, {
39
+ olHost: 'https://openlibrary.org',
40
+ enableChaptersPlugin: true,
41
+ bookId: ''
42
+ });
43
+ /** @override Extend the constructor to add search properties */
44
+
45
+ BookReader.prototype.setup = function (super_) {
46
+ return function (options) {
47
+ super_.call(this, options);
48
+ this.olHost = options.olHost;
49
+ this.enableChaptersPlugin = options.enableChaptersPlugin;
50
+ this.bookId = options.bookId;
51
+ };
52
+ }(BookReader.prototype.setup);
53
+ /** @override Extend to call Open Library for TOC */
54
+
55
+
56
+ BookReader.prototype.init = function (super_) {
57
+ return function () {
58
+ var _this = this;
59
+
60
+ super_.call(this);
61
+
62
+ if (this.enableChaptersPlugin && this.ui !== 'embed') {
63
+ this.getOpenLibraryRecord();
64
+ }
65
+
66
+ if (this.enableMobileNav) {
67
+ this.bind(BookReader.eventNames.mobileNavOpen, function () {
68
+ _this.updateTOCState(_this.firstIndex, _this._tocEntries);
69
+
70
+ if ($('table-contents-list').parent().hasClass('mm-opened')) {
71
+ _this.updateTOCState(_this.firstIndex, _this._tocEntries);
72
+ }
73
+ });
74
+ $(".BRmobileMenu__tableContents").on("click", function () {
75
+ _this.updateTOCState(_this.firstIndex, _this._tocEntries);
76
+ });
77
+ }
78
+ };
79
+ }(BookReader.prototype.init);
80
+ /**
81
+ * Adds chapter marker to navigation scrubber
82
+ *
83
+ * @param {string} chapterTitle
84
+ * @param {string} pageNumber
85
+ * @param {number} pageIndex
86
+ */
87
+
88
+
89
+ BookReader.prototype.addChapter = function (chapterTitle, pageNumber, pageIndex) {
90
+ var _this2 = this;
91
+
92
+ var uiStringPage = 'Page'; // i18n
93
+
94
+ var percentThrough = BookReader.util.cssPercentage(pageIndex, this.getNumLeafs() - 1);
95
+
96
+ var jumpToChapter = function jumpToChapter(event) {
97
+ _this2.jumpToIndex($(event.delegateTarget).data('pageIndex'));
98
+
99
+ $('.current-chapter').removeClass('current-chapter');
100
+ $(event.delegateTarget).addClass('current-chapter');
101
+ };
102
+
103
+ var title = "".concat(chapterTitle, " | ");
104
+ var pageStr = "".concat(uiStringPage, " ").concat(pageNumber); //adding items to mobile table of contents
105
+
106
+ var mobileChapter = $("<li></li>").append($("<span class='BRTOCElementTitle'></span>").text(title)).append($("<span class='BRTOCElementPage'></span>").text(pageStr));
107
+ mobileChapter.addClass('BRtable-contents-el').appendTo(this.$('.table-contents-list')).data({
108
+ pageIndex: pageIndex
109
+ }); //adds .BRchapters to the slider only if pageIndex exists
110
+
111
+ if (pageIndex != undefined) {
112
+ $("<div></div>").append($('<div />').text(title + pageStr)).addClass('BRchapter').css({
113
+ left: percentThrough
114
+ }).appendTo(this.$('.BRnavline')).data({
115
+ pageIndex: pageIndex
116
+ }).on("mouseenter", function (event) {
117
+ // remove hover effect from other markers then turn on just for this
118
+ var marker = event.currentTarget;
119
+ var tooltip = marker.querySelector('div');
120
+ var tooltipOffset = tooltip.getBoundingClientRect();
121
+ var targetOffset = marker.getBoundingClientRect();
122
+ var boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;
123
+
124
+ if (tooltipOffset.x - boxSizeAdjust < 0) {
125
+ tooltip.style.setProperty('transform', "translateX(-".concat(targetOffset.left - boxSizeAdjust, "px)"));
126
+ }
127
+
128
+ _this2.$('.BRsearch,.BRchapter').removeClass('front');
129
+
130
+ $(event.target).addClass('front');
131
+ }).on("mouseleave", function (event) {
132
+ return $(event.target).removeClass('front');
133
+ }).on('click', jumpToChapter); //adding clickable properties to mobile chapters
134
+
135
+ mobileChapter.bind('click', jumpToChapter).addClass('chapter-clickable').attr("data-event-click-tracking", "BRTOCPanel|GoToChapter");
136
+ }
137
+ };
138
+ /*
139
+ * Remove all chapters.
140
+ */
141
+
142
+
143
+ BookReader.prototype.removeChapters = function () {
144
+ this.$('.BRnavpos .BRchapter').remove();
145
+ };
146
+ /**
147
+ * Update the table of contents based on array of TOC entries.
148
+ * @param {TocEntry[]} tocEntries
149
+ */
150
+
151
+
152
+ BookReader.prototype.updateTOC = function (tocEntries) {
153
+ this.removeChapters();
154
+
155
+ if (this.enableMobileNav && tocEntries.length > 0) {
156
+ this.$(".BRmobileMenu__tableContents").show();
157
+ }
158
+
159
+ for (var i = 0; i < tocEntries.length; i++) {
160
+ this.addChapterFromEntry(tocEntries[i]);
161
+ }
162
+
163
+ this._tocEntries = tocEntries;
164
+ $('.table-contents-list').children().each(function (i, el) {
165
+ tocEntries[i].mobileHTML = el;
166
+ });
167
+ };
168
+ /**
169
+ * @typedef {Object} TocEntry
170
+ * Table of contents entry as defined -- format is defined by Open Library
171
+ * @property {string} pagenum
172
+ * @property {number} level
173
+ * @property {string} label
174
+ * @property {{type: '/type/toc_item'}} type
175
+ * @property {string} title
176
+ * @property {HTMLElement} mobileHTML
177
+ * @property {number} pageIndex
178
+
179
+ *
180
+ * @example {
181
+ * "pagenum": "17",
182
+ * "level": 1,
183
+ * "label": "CHAPTER I",
184
+ * "type": {"key": "/type/toc_item"},
185
+ * "title": "THE COUNTRY AND THE MISSION"
186
+ * }
187
+ */
188
+
189
+ /**
190
+ * @param {TocEntry} tocEntryObject
191
+ */
192
+
193
+
194
+ BookReader.prototype.addChapterFromEntry = function (tocEntryObject) {
195
+ tocEntryObject.pageIndex = this.getPageIndex(tocEntryObject['pagenum']); //creates a string with non-void tocEntryObject.label and tocEntryObject.title
196
+
197
+ var chapterStr = [tocEntryObject.label, tocEntryObject.title].filter(function (x) {
198
+ return x;
199
+ }).join(' ');
200
+ this.addChapter(chapterStr, tocEntryObject['pagenum'], tocEntryObject.pageIndex);
201
+ this.$('.BRchapter, .BRsearch').each(function (i, el) {
202
+ var $el = $(el);
203
+ $el.on("mouseenter", function () {
204
+ return $el.addClass('front');
205
+ }).on("mouseleave", function () {
206
+ return $el.removeClass('front');
207
+ });
208
+ });
209
+ };
210
+ /**
211
+ * getOpenLibraryRecord
212
+ *
213
+ * The bookreader is designed to call openlibrary API and constructs the
214
+ * "Return book" button using the response.
215
+ *
216
+ * This makes a call to OL API and calls the given callback function with the
217
+ * response from the API.
218
+ */
219
+
220
+
221
+ BookReader.prototype.getOpenLibraryRecord = function () {
222
+ var _this3 = this;
223
+
224
+ // Try looking up by ocaid first, then by source_record
225
+ var baseURL = "".concat(this.olHost, "/query.json?type=/type/edition&*=");
226
+ var fetchUrlByBookId = "".concat(baseURL, "&ocaid=").concat(this.bookId);
227
+ /*
228
+ * Update Chapter markers based on received record from Open Library.
229
+ * Notes that Open Library record is used for extra metadata, and also for lending
230
+ */
231
+
232
+ var setUpChapterMarkers = function setUpChapterMarkers(olObject) {
233
+ if (olObject && olObject.table_of_contents) {
234
+ // XXX check here that TOC is valid
235
+ _this3.updateTOC(olObject.table_of_contents);
236
+ }
237
+ };
238
+
239
+ $.ajax({
240
+ url: fetchUrlByBookId,
241
+ dataType: 'jsonp'
242
+ }).then(function (data) {
243
+ if (data && data.length > 0) {
244
+ return data;
245
+ } else {
246
+ // try sourceid
247
+ return $.ajax({
248
+ url: "".concat(baseURL, "&source_records=ia:").concat(_this3.bookId),
249
+ dataType: 'jsonp'
250
+ });
251
+ }
252
+ }).then(function (data) {
253
+ if (data && data.length > 0) {
254
+ setUpChapterMarkers(data[0]);
255
+ }
256
+ });
257
+ }; // Extend buildMobileDrawerElement with table of contents list
258
+
259
+
260
+ BookReader.prototype.buildMobileDrawerElement = function (super_) {
261
+ return function () {
262
+ var $el = super_.call(this);
263
+
264
+ if (this.enableMobileNav && this.options.enableChaptersPlugin) {
265
+ $el.find('.BRmobileMenu__moreInfoRow').after($("\n <li class=\"BRmobileMenu__tableContents\" data-event-click-tracking=\"BRSidebar|TOCPanel\">\n <span>\n <span class=\"DrawerIconWrapper\">\n <img class=\"DrawerIcon\" src=\"".concat(this.imagesBaseURL, "icon_toc.svg\" alt=\"toc-icon\"/>\n </span>\n Table of Contents\n </span>\n <div>\n <ol class=\"table-contents-list\">\n </ol>\n </div>\n </li>")).hide());
266
+ }
267
+
268
+ return $el;
269
+ };
270
+ }(BookReader.prototype.buildMobileDrawerElement);
271
+ /**
272
+ * highlights the current chapter based on current page
273
+ * @private
274
+ * @param {TocEntry[]} tocEntries
275
+ * @param {number} tocEntries
276
+ */
277
+
278
+
279
+ BookReader.prototype.updateTOCState = function (currIndex, tocEntries) {
280
+ //this function won't have any effects if called before OpenLibrary request is finished
281
+ if (!tocEntries) {
282
+ return;
283
+ }
284
+
285
+ $('.current-chapter').removeClass('current-chapter');
286
+ var tocEntriesIndexed = tocEntries.filter(function (el) {
287
+ return el.pageIndex != undefined;
288
+ }).reverse();
289
+ var currChapter = tocEntriesIndexed[tocEntriesIndexed.findIndex(function (el) {
290
+ return el.pageIndex <= currIndex;
291
+ })];
292
+
293
+ if (currChapter != undefined) {
294
+ $(currChapter.mobileHTML).addClass('current-chapter');
295
+ }
296
+ };
297
+
298
+ /***/ }),
299
+
300
+ /***/ "./node_modules/core-js/modules/es.array.reverse.js":
301
+ /*!**********************************************************!*\
302
+ !*** ./node_modules/core-js/modules/es.array.reverse.js ***!
303
+ \**********************************************************/
304
+ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
305
+
306
+
307
+ var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
308
+ var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js/internals/is-array.js");
309
+
310
+ var nativeReverse = [].reverse;
311
+ var test = [1, 2];
312
+
313
+ // `Array.prototype.reverse` method
314
+ // https://tc39.es/ecma262/#sec-array.prototype.reverse
315
+ // fix for Safari 12.0 bug
316
+ // https://bugs.webkit.org/show_bug.cgi?id=188794
317
+ $({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {
318
+ reverse: function reverse() {
319
+ // eslint-disable-next-line no-self-assign -- dirty hack
320
+ if (isArray(this)) this.length = this.length;
321
+ return nativeReverse.call(this);
322
+ }
323
+ });
324
+
325
+
326
+ /***/ })
327
+
328
+ },
329
+ /******/ function(__webpack_require__) { // webpackRuntimeModules
330
+ /******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
331
+ /******/ var __webpack_exports__ = (__webpack_exec__("./src/plugins/plugin.chapters.js"));
332
+ /******/ }
333
+ ]);
2
334
  //# sourceMappingURL=plugin.chapters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.chapters.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.chapters.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.reverse.js"],"sourcesContent":["/* global BookReader */\n/**\n * Plugin for chapter markers in BookReader. Fetches from openlibrary.org\n * Could be forked, or extended to alter behavior\n */\n\njQuery.extend(BookReader.defaultOptions, {\n olHost: 'https://openlibrary.org',\n enableChaptersPlugin: true,\n bookId: '',\n});\n\n/** @override Extend the constructor to add search properties */\nBookReader.prototype.setup = (function (super_) {\n return function (options) {\n super_.call(this, options);\n\n this.olHost = options.olHost;\n this.enableChaptersPlugin = options.enableChaptersPlugin;\n this.bookId = options.bookId;\n };\n})(BookReader.prototype.setup);\n\n/** @override Extend to call Open Library for TOC */\nBookReader.prototype.init = (function(super_) {\n return function() {\n super_.call(this);\n if (this.enableChaptersPlugin && this.ui !== 'embed') {\n this.getOpenLibraryRecord();\n }\n if (this.enableMobileNav) {\n this.bind(BookReader.eventNames.mobileNavOpen,\n () => {\n this.updateTOCState(this.firstIndex, this._tocEntries);\n if ($('table-contents-list').parent().hasClass('mm-opened')) {\n this.updateTOCState(this.firstIndex, this._tocEntries);\n }\n }\n );\n $(\".BRmobileMenu__tableContents\").on(\"click\", () => {\n this.updateTOCState(this.firstIndex, this._tocEntries);\n });\n }\n };\n})(BookReader.prototype.init);\n\n/**\n * Adds chapter marker to navigation scrubber\n *\n * @param {string} chapterTitle\n * @param {string} pageNumber\n * @param {number} pageIndex\n */\nBookReader.prototype.addChapter = function(chapterTitle, pageNumber, pageIndex) {\n const uiStringPage = 'Page'; // i18n\n const percentThrough = BookReader.util.cssPercentage(pageIndex, this.getNumLeafs() - 1);\n const jumpToChapter = (event) => {\n this.jumpToIndex($(event.delegateTarget).data('pageIndex'));\n $('.current-chapter').removeClass('current-chapter');\n $(event.delegateTarget).addClass('current-chapter');\n };\n const title = `${chapterTitle} | `;\n const pageStr = `${uiStringPage} ${pageNumber}`;\n\n //adding items to mobile table of contents\n const mobileChapter = $(`<li></li>`).append($(`<span class='BRTOCElementTitle'></span>`).text(title))\n .append($(`<span class='BRTOCElementPage'></span>`).text(pageStr));\n mobileChapter.addClass('BRtable-contents-el')\n .appendTo(this.$('.table-contents-list'))\n .data({ pageIndex });\n\n //adds .BRchapters to the slider only if pageIndex exists\n if (pageIndex != undefined) {\n $(`<div></div>`)\n .append($('<div />').text(title + pageStr))\n .addClass('BRchapter')\n .css({ left: percentThrough })\n .appendTo(this.$('.BRnavline'))\n .data({ pageIndex })\n .on(\"mouseenter\", event => {\n // remove hover effect from other markers then turn on just for this\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('div');\n const tooltipOffset = tooltip.getBoundingClientRect();\n const targetOffset = marker.getBoundingClientRect();\n const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;\n if (tooltipOffset.x - boxSizeAdjust < 0) {\n tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);\n }\n this.$('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n })\n .on(\"mouseleave\", event => $(event.target).removeClass('front'))\n .on('click', jumpToChapter);\n\n //adding clickable properties to mobile chapters\n mobileChapter.bind('click', jumpToChapter)\n .addClass('chapter-clickable')\n .attr(\"data-event-click-tracking\",\"BRTOCPanel|GoToChapter\");\n }\n\n};\n\n/*\n * Remove all chapters.\n */\nBookReader.prototype.removeChapters = function() {\n this.$('.BRnavpos .BRchapter').remove();\n};\n\n/**\n * Update the table of contents based on array of TOC entries.\n * @param {TocEntry[]} tocEntries\n */\nBookReader.prototype.updateTOC = function(tocEntries) {\n this.removeChapters();\n if (this.enableMobileNav && tocEntries.length > 0) {\n this.$(\".BRmobileMenu__tableContents\").show();\n }\n for (let i = 0; i < tocEntries.length; i++) {\n this.addChapterFromEntry(tocEntries[i]);\n }\n this._tocEntries = tocEntries;\n $('.table-contents-list').children().each((i, el) => {\n tocEntries[i].mobileHTML = el;\n });\n};\n\n/**\n * @typedef {Object} TocEntry\n * Table of contents entry as defined -- format is defined by Open Library\n * @property {string} pagenum\n * @property {number} level\n * @property {string} label\n * @property {{type: '/type/toc_item'}} type\n * @property {string} title\n * @property {HTMLElement} mobileHTML\n * @property {number} pageIndex\n\n *\n * @example {\n * \"pagenum\": \"17\",\n * \"level\": 1,\n * \"label\": \"CHAPTER I\",\n * \"type\": {\"key\": \"/type/toc_item\"},\n * \"title\": \"THE COUNTRY AND THE MISSION\"\n * }\n */\n\n/**\n * @param {TocEntry} tocEntryObject\n */\nBookReader.prototype.addChapterFromEntry = function(tocEntryObject) {\n tocEntryObject.pageIndex = this.getPageIndex(tocEntryObject['pagenum']);\n //creates a string with non-void tocEntryObject.label and tocEntryObject.title\n const chapterStr = [tocEntryObject.label, tocEntryObject.title]\n .filter(x => x)\n .join(' ');\n this.addChapter(chapterStr, tocEntryObject['pagenum'], tocEntryObject.pageIndex);\n this.$('.BRchapter, .BRsearch').each((i, el) => {\n const $el = $(el);\n $el\n .on(\"mouseenter\", () => $el.addClass('front'))\n .on(\"mouseleave\", () => $el.removeClass('front'));\n });\n};\n\n/**\n * getOpenLibraryRecord\n *\n * The bookreader is designed to call openlibrary API and constructs the\n * \"Return book\" button using the response.\n *\n * This makes a call to OL API and calls the given callback function with the\n * response from the API.\n */\nBookReader.prototype.getOpenLibraryRecord = function () {\n // Try looking up by ocaid first, then by source_record\n const baseURL = `${this.olHost}/query.json?type=/type/edition&*=`;\n const fetchUrlByBookId = `${baseURL}&ocaid=${this.bookId}`;\n\n /*\n * Update Chapter markers based on received record from Open Library.\n * Notes that Open Library record is used for extra metadata, and also for lending\n */\n const setUpChapterMarkers = (olObject) => {\n if (olObject && olObject.table_of_contents) {\n // XXX check here that TOC is valid\n this.updateTOC(olObject.table_of_contents);\n }\n };\n\n $.ajax({ url: fetchUrlByBookId, dataType: 'jsonp' })\n .then(data => {\n if (data && data.length > 0) {\n return data;\n } else {\n // try sourceid\n return $.ajax({ url: `${baseURL}&source_records=ia:${this.bookId}`, dataType: 'jsonp' });\n }\n })\n .then(data => {\n if (data && data.length > 0) {\n setUpChapterMarkers(data[0]);\n }\n });\n};\n\n// Extend buildMobileDrawerElement with table of contents list\nBookReader.prototype.buildMobileDrawerElement = (function (super_) {\n return function () {\n const $el = super_.call(this);\n if (this.enableMobileNav && this.options.enableChaptersPlugin) {\n $el.find('.BRmobileMenu__moreInfoRow').after($(`\n <li class=\"BRmobileMenu__tableContents\" data-event-click-tracking=\"BRSidebar|TOCPanel\">\n <span>\n <span class=\"DrawerIconWrapper\">\n <img class=\"DrawerIcon\" src=\"${this.imagesBaseURL}icon_toc.svg\" alt=\"toc-icon\"/>\n </span>\n Table of Contents\n </span>\n <div>\n <ol class=\"table-contents-list\">\n </ol>\n </div>\n </li>`).hide());\n }\n return $el;\n };\n})(BookReader.prototype.buildMobileDrawerElement);\n\n/**\n * highlights the current chapter based on current page\n * @private\n * @param {TocEntry[]} tocEntries\n * @param {number} tocEntries\n */\nBookReader.prototype.updateTOCState = function(currIndex, tocEntries) {\n //this function won't have any effects if called before OpenLibrary request is finished\n if (!tocEntries) {return;}\n $('.current-chapter').removeClass('current-chapter');\n const tocEntriesIndexed = tocEntries.filter((el) => el.pageIndex != undefined).reverse();\n const currChapter = tocEntriesIndexed[tocEntriesIndexed.findIndex(\n (el) => el.pageIndex <= currIndex)];\n if (currChapter != undefined) {\n $(currChapter.mobileHTML).addClass('current-chapter');\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = [].reverse;\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign -- dirty hack\n if (isArray(this)) this.length = this.length;\n return nativeReverse.call(this);\n }\n});\n"],"names":["super_","jQuery","extend","BookReader","defaultOptions","olHost","enableChaptersPlugin","bookId","prototype","setup","options","call","this","init","ui","getOpenLibraryRecord","enableMobileNav","bind","eventNames","mobileNavOpen","updateTOCState","firstIndex","_tocEntries","$","parent","hasClass","on","addChapter","chapterTitle","pageNumber","pageIndex","percentThrough","util","cssPercentage","getNumLeafs","jumpToChapter","event","jumpToIndex","delegateTarget","data","removeClass","addClass","title","pageStr","mobileChapter","append","text","appendTo","undefined","css","left","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","x","style","setProperty","target","attr","removeChapters","remove","updateTOC","tocEntries","length","show","i","addChapterFromEntry","children","each","el","mobileHTML","tocEntryObject","getPageIndex","chapterStr","label","filter","join","$el","baseURL","fetchUrlByBookId","ajax","url","dataType","then","olObject","table_of_contents","buildMobileDrawerElement","find","after","imagesBaseURL","hide","currIndex","tocEntriesIndexed","reverse","currChapter","findIndex","isArray","nativeReverse","test","proto","forced","String"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.chapters.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.chapters.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.array.reverse.js"],"sourcesContent":["/* global BookReader */\n/**\n * Plugin for chapter markers in BookReader. Fetches from openlibrary.org\n * Could be forked, or extended to alter behavior\n */\n\njQuery.extend(BookReader.defaultOptions, {\n olHost: 'https://openlibrary.org',\n enableChaptersPlugin: true,\n bookId: '',\n});\n\n/** @override Extend the constructor to add search properties */\nBookReader.prototype.setup = (function (super_) {\n return function (options) {\n super_.call(this, options);\n\n this.olHost = options.olHost;\n this.enableChaptersPlugin = options.enableChaptersPlugin;\n this.bookId = options.bookId;\n };\n})(BookReader.prototype.setup);\n\n/** @override Extend to call Open Library for TOC */\nBookReader.prototype.init = (function(super_) {\n return function() {\n super_.call(this);\n if (this.enableChaptersPlugin && this.ui !== 'embed') {\n this.getOpenLibraryRecord();\n }\n if (this.enableMobileNav) {\n this.bind(BookReader.eventNames.mobileNavOpen,\n () => {\n this.updateTOCState(this.firstIndex, this._tocEntries);\n if ($('table-contents-list').parent().hasClass('mm-opened')) {\n this.updateTOCState(this.firstIndex, this._tocEntries);\n }\n }\n );\n $(\".BRmobileMenu__tableContents\").on(\"click\", () => {\n this.updateTOCState(this.firstIndex, this._tocEntries);\n });\n }\n };\n})(BookReader.prototype.init);\n\n/**\n * Adds chapter marker to navigation scrubber\n *\n * @param {string} chapterTitle\n * @param {string} pageNumber\n * @param {number} pageIndex\n */\nBookReader.prototype.addChapter = function(chapterTitle, pageNumber, pageIndex) {\n const uiStringPage = 'Page'; // i18n\n const percentThrough = BookReader.util.cssPercentage(pageIndex, this.getNumLeafs() - 1);\n const jumpToChapter = (event) => {\n this.jumpToIndex($(event.delegateTarget).data('pageIndex'));\n $('.current-chapter').removeClass('current-chapter');\n $(event.delegateTarget).addClass('current-chapter');\n };\n const title = `${chapterTitle} | `;\n const pageStr = `${uiStringPage} ${pageNumber}`;\n\n //adding items to mobile table of contents\n const mobileChapter = $(`<li></li>`).append($(`<span class='BRTOCElementTitle'></span>`).text(title))\n .append($(`<span class='BRTOCElementPage'></span>`).text(pageStr));\n mobileChapter.addClass('BRtable-contents-el')\n .appendTo(this.$('.table-contents-list'))\n .data({ pageIndex });\n\n //adds .BRchapters to the slider only if pageIndex exists\n if (pageIndex != undefined) {\n $(`<div></div>`)\n .append($('<div />').text(title + pageStr))\n .addClass('BRchapter')\n .css({ left: percentThrough })\n .appendTo(this.$('.BRnavline'))\n .data({ pageIndex })\n .on(\"mouseenter\", event => {\n // remove hover effect from other markers then turn on just for this\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('div');\n const tooltipOffset = tooltip.getBoundingClientRect();\n const targetOffset = marker.getBoundingClientRect();\n const boxSizeAdjust = parseInt(getComputedStyle(tooltip).paddingLeft) * 2;\n if (tooltipOffset.x - boxSizeAdjust < 0) {\n tooltip.style.setProperty('transform', `translateX(-${targetOffset.left - boxSizeAdjust}px)`);\n }\n this.$('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n })\n .on(\"mouseleave\", event => $(event.target).removeClass('front'))\n .on('click', jumpToChapter);\n\n //adding clickable properties to mobile chapters\n mobileChapter.bind('click', jumpToChapter)\n .addClass('chapter-clickable')\n .attr(\"data-event-click-tracking\",\"BRTOCPanel|GoToChapter\");\n }\n\n};\n\n/*\n * Remove all chapters.\n */\nBookReader.prototype.removeChapters = function() {\n this.$('.BRnavpos .BRchapter').remove();\n};\n\n/**\n * Update the table of contents based on array of TOC entries.\n * @param {TocEntry[]} tocEntries\n */\nBookReader.prototype.updateTOC = function(tocEntries) {\n this.removeChapters();\n if (this.enableMobileNav && tocEntries.length > 0) {\n this.$(\".BRmobileMenu__tableContents\").show();\n }\n for (let i = 0; i < tocEntries.length; i++) {\n this.addChapterFromEntry(tocEntries[i]);\n }\n this._tocEntries = tocEntries;\n $('.table-contents-list').children().each((i, el) => {\n tocEntries[i].mobileHTML = el;\n });\n};\n\n/**\n * @typedef {Object} TocEntry\n * Table of contents entry as defined -- format is defined by Open Library\n * @property {string} pagenum\n * @property {number} level\n * @property {string} label\n * @property {{type: '/type/toc_item'}} type\n * @property {string} title\n * @property {HTMLElement} mobileHTML\n * @property {number} pageIndex\n\n *\n * @example {\n * \"pagenum\": \"17\",\n * \"level\": 1,\n * \"label\": \"CHAPTER I\",\n * \"type\": {\"key\": \"/type/toc_item\"},\n * \"title\": \"THE COUNTRY AND THE MISSION\"\n * }\n */\n\n/**\n * @param {TocEntry} tocEntryObject\n */\nBookReader.prototype.addChapterFromEntry = function(tocEntryObject) {\n tocEntryObject.pageIndex = this.getPageIndex(tocEntryObject['pagenum']);\n //creates a string with non-void tocEntryObject.label and tocEntryObject.title\n const chapterStr = [tocEntryObject.label, tocEntryObject.title]\n .filter(x => x)\n .join(' ');\n this.addChapter(chapterStr, tocEntryObject['pagenum'], tocEntryObject.pageIndex);\n this.$('.BRchapter, .BRsearch').each((i, el) => {\n const $el = $(el);\n $el\n .on(\"mouseenter\", () => $el.addClass('front'))\n .on(\"mouseleave\", () => $el.removeClass('front'));\n });\n};\n\n/**\n * getOpenLibraryRecord\n *\n * The bookreader is designed to call openlibrary API and constructs the\n * \"Return book\" button using the response.\n *\n * This makes a call to OL API and calls the given callback function with the\n * response from the API.\n */\nBookReader.prototype.getOpenLibraryRecord = function () {\n // Try looking up by ocaid first, then by source_record\n const baseURL = `${this.olHost}/query.json?type=/type/edition&*=`;\n const fetchUrlByBookId = `${baseURL}&ocaid=${this.bookId}`;\n\n /*\n * Update Chapter markers based on received record from Open Library.\n * Notes that Open Library record is used for extra metadata, and also for lending\n */\n const setUpChapterMarkers = (olObject) => {\n if (olObject && olObject.table_of_contents) {\n // XXX check here that TOC is valid\n this.updateTOC(olObject.table_of_contents);\n }\n };\n\n $.ajax({ url: fetchUrlByBookId, dataType: 'jsonp' })\n .then(data => {\n if (data && data.length > 0) {\n return data;\n } else {\n // try sourceid\n return $.ajax({ url: `${baseURL}&source_records=ia:${this.bookId}`, dataType: 'jsonp' });\n }\n })\n .then(data => {\n if (data && data.length > 0) {\n setUpChapterMarkers(data[0]);\n }\n });\n};\n\n// Extend buildMobileDrawerElement with table of contents list\nBookReader.prototype.buildMobileDrawerElement = (function (super_) {\n return function () {\n const $el = super_.call(this);\n if (this.enableMobileNav && this.options.enableChaptersPlugin) {\n $el.find('.BRmobileMenu__moreInfoRow').after($(`\n <li class=\"BRmobileMenu__tableContents\" data-event-click-tracking=\"BRSidebar|TOCPanel\">\n <span>\n <span class=\"DrawerIconWrapper\">\n <img class=\"DrawerIcon\" src=\"${this.imagesBaseURL}icon_toc.svg\" alt=\"toc-icon\"/>\n </span>\n Table of Contents\n </span>\n <div>\n <ol class=\"table-contents-list\">\n </ol>\n </div>\n </li>`).hide());\n }\n return $el;\n };\n})(BookReader.prototype.buildMobileDrawerElement);\n\n/**\n * highlights the current chapter based on current page\n * @private\n * @param {TocEntry[]} tocEntries\n * @param {number} tocEntries\n */\nBookReader.prototype.updateTOCState = function(currIndex, tocEntries) {\n //this function won't have any effects if called before OpenLibrary request is finished\n if (!tocEntries) {return;}\n $('.current-chapter').removeClass('current-chapter');\n const tocEntriesIndexed = tocEntries.filter((el) => el.pageIndex != undefined).reverse();\n const currChapter = tocEntriesIndexed[tocEntriesIndexed.findIndex(\n (el) => el.pageIndex <= currIndex)];\n if (currChapter != undefined) {\n $(currChapter.mobileHTML).addClass('current-chapter');\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = [].reverse;\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign -- dirty hack\n if (isArray(this)) this.length = this.length;\n return nativeReverse.call(this);\n }\n});\n"],"names":["jQuery","extend","BookReader","defaultOptions","olHost","enableChaptersPlugin","bookId","prototype","setup","super_","options","call","init","ui","getOpenLibraryRecord","enableMobileNav","bind","eventNames","mobileNavOpen","updateTOCState","firstIndex","_tocEntries","$","parent","hasClass","on","addChapter","chapterTitle","pageNumber","pageIndex","uiStringPage","percentThrough","util","cssPercentage","getNumLeafs","jumpToChapter","event","jumpToIndex","delegateTarget","data","removeClass","addClass","title","pageStr","mobileChapter","append","text","appendTo","undefined","css","left","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","x","style","setProperty","target","attr","removeChapters","remove","updateTOC","tocEntries","length","show","i","addChapterFromEntry","children","each","el","mobileHTML","tocEntryObject","getPageIndex","chapterStr","label","filter","join","$el","baseURL","fetchUrlByBookId","setUpChapterMarkers","olObject","table_of_contents","ajax","url","dataType","then","buildMobileDrawerElement","find","after","imagesBaseURL","hide","currIndex","tocEntriesIndexed","reverse","currChapter","findIndex"],"sourceRoot":""}
@@ -1,2 +1,73 @@
1
- "use strict";(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[697],{5206:function(e,a,t){var n,r="bookReaderFragmentChange";BookReader.prototype.init=(n=BookReader.prototype.init,function(){n.call(this),function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.parent;a&&(e.bind(BookReader.eventNames.fragmentChange,(function(){var t=e.fragmentFromParams(e.paramsFromCurrent());a.postMessage({type:r,fragment:t},"*")})),window.addEventListener("message",(function(a){a.data&&a.data.type===r&&e.updateFromParams(e.paramsFromFragment(a.data.fragment))})))}(this)})}},function(e){e(e.s=5206)}]);
1
+ "use strict";
2
+ (self["webpackChunk_internetarchive_bookreader"] = self["webpackChunk_internetarchive_bookreader"] || []).push([["plugins/plugin.iframe.js"],{
3
+
4
+ /***/ "./src/plugins/plugin.iframe.js":
5
+ /*!**************************************!*\
6
+ !*** ./src/plugins/plugin.iframe.js ***!
7
+ \**************************************/
8
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
9
+
10
+ __webpack_require__.r(__webpack_exports__);
11
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12
+ /* harmony export */ "_attachEventListeners": function() { return /* binding */ _attachEventListeners; }
13
+ /* harmony export */ });
14
+ /* global BookReader */
15
+
16
+ /**
17
+ * Plugin for two-way communication between a BookReader in an IFrame and the
18
+ * parent web page
19
+ */
20
+ var MESSAGE_TYPE_FRAGMENT_CHANGE = 'bookReaderFragmentChange';
21
+
22
+ BookReader.prototype.init = function (super_) {
23
+ return function () {
24
+ super_.call(this);
25
+
26
+ _attachEventListeners(this);
27
+ };
28
+ }(BookReader.prototype.init);
29
+ /**
30
+ * @private
31
+ * Using window.postMessage() and event listeners, the plugin notifies the
32
+ * parent window when pages change, and the parent window can also
33
+ * explicitly request a page change by sending its own message.
34
+ *
35
+ * @param {BookReader} br
36
+ * @param {Window?} [parent]
37
+ */
38
+
39
+
40
+ function _attachEventListeners(br) {
41
+ var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.parent;
42
+
43
+ // Not embedded, abort
44
+ if (!parent) {
45
+ return;
46
+ }
47
+
48
+ br.bind(BookReader.eventNames.fragmentChange, function () {
49
+ var fragment = br.fragmentFromParams(br.paramsFromCurrent());
50
+ parent.postMessage({
51
+ type: MESSAGE_TYPE_FRAGMENT_CHANGE,
52
+ fragment: fragment
53
+ }, '*');
54
+ });
55
+ window.addEventListener('message', function (event) {
56
+ // Not a recognized message type, abort
57
+ if (!event.data || event.data.type !== MESSAGE_TYPE_FRAGMENT_CHANGE) {
58
+ return;
59
+ }
60
+
61
+ br.updateFromParams(br.paramsFromFragment(event.data.fragment));
62
+ });
63
+ }
64
+
65
+ /***/ })
66
+
67
+ },
68
+ /******/ function(__webpack_require__) { // webpackRuntimeModules
69
+ /******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
70
+ /******/ var __webpack_exports__ = (__webpack_exec__("./src/plugins/plugin.iframe.js"));
71
+ /******/ }
72
+ ]);
2
73
  //# sourceMappingURL=plugin.iframe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.iframe.js","mappings":"+IAMA,IAEuCA,EAFjCC,EAA+B,2BAErCC,WAAWC,UAAUC,MAAkBJ,EAKpCE,WAAWC,UAAUC,KAJf,WACLJ,EAAOK,KAAKC,MAcT,SAA+BC,GAA4B,IAAxBC,EAAwB,uDAAfC,OAAOD,OAEnDA,IAILD,EAAGG,KAAKR,WAAWS,WAAWC,gBAAgB,WAC5C,IAAMC,EAAWN,EAAGO,mBAAmBP,EAAGQ,qBAE1CP,EAAOQ,YACL,CAAEC,KAAMhB,EAA8BY,SAAAA,GACtC,QAIJJ,OAAOS,iBAAiB,WAAW,SAAAC,GAE5BA,EAAMC,MAAQD,EAAMC,KAAKH,OAAShB,GAIvCM,EAAGc,iBAAiBd,EAAGe,mBAAmBH,EAAMC,KAAKP,eAlCrDU,CAAsBjB,U","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.iframe.js"],"sourcesContent":["/* global BookReader */\n/**\n * Plugin for two-way communication between a BookReader in an IFrame and the\n * parent web page\n */\n\nconst MESSAGE_TYPE_FRAGMENT_CHANGE = 'bookReaderFragmentChange';\n\nBookReader.prototype.init = (function (super_) {\n return function () {\n super_.call(this);\n _attachEventListeners(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * @private\n * Using window.postMessage() and event listeners, the plugin notifies the\n * parent window when pages change, and the parent window can also\n * explicitly request a page change by sending its own message.\n *\n * @param {BookReader} br\n * @param {Window?} [parent]\n */\nexport function _attachEventListeners(br, parent = window.parent) {\n // Not embedded, abort\n if (!parent) {\n return;\n }\n\n br.bind(BookReader.eventNames.fragmentChange, () => {\n const fragment = br.fragmentFromParams(br.paramsFromCurrent());\n\n parent.postMessage(\n { type: MESSAGE_TYPE_FRAGMENT_CHANGE, fragment },\n '*'\n );\n });\n\n window.addEventListener('message', event => {\n // Not a recognized message type, abort\n if (!event.data || event.data.type !== MESSAGE_TYPE_FRAGMENT_CHANGE) {\n return;\n }\n\n br.updateFromParams(br.paramsFromFragment(event.data.fragment));\n });\n}\n"],"names":["super_","MESSAGE_TYPE_FRAGMENT_CHANGE","BookReader","prototype","init","call","this","br","parent","window","bind","eventNames","fragmentChange","fragment","fragmentFromParams","paramsFromCurrent","postMessage","type","addEventListener","event","data","updateFromParams","paramsFromFragment","_attachEventListeners"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.iframe.js","mappings":";;;;;;;;;;;;;AAAA;;AACA;AACA;AACA;AACA;AAEA,IAAMA,4BAA4B,GAAG,0BAArC;;AAEAC,UAAU,CAACC,SAAX,CAAqBC,IAArB,GAA6B,UAAUC,MAAV,EAAkB;AAC7C,SAAO,YAAY;AACjBA,IAAAA,MAAM,CAACC,IAAP,CAAY,IAAZ;;AACAC,IAAAA,qBAAqB,CAAC,IAAD,CAArB;AACD,GAHD;AAID,CAL2B,CAKzBL,UAAU,CAACC,SAAX,CAAqBC,IALI,CAA5B;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASG,qBAAT,CAA+BC,EAA/B,EAA2D;AAAA,MAAxBC,MAAwB,uEAAfC,MAAM,CAACD,MAAQ;;AAChE;AACA,MAAI,CAACA,MAAL,EAAa;AACX;AACD;;AAEDD,EAAAA,EAAE,CAACG,IAAH,CAAQT,UAAU,CAACU,UAAX,CAAsBC,cAA9B,EAA8C,YAAM;AAClD,QAAMC,QAAQ,GAAGN,EAAE,CAACO,kBAAH,CAAsBP,EAAE,CAACQ,iBAAH,EAAtB,CAAjB;AAEAP,IAAAA,MAAM,CAACQ,WAAP,CACE;AAAEC,MAAAA,IAAI,EAAEjB,4BAAR;AAAsCa,MAAAA,QAAQ,EAARA;AAAtC,KADF,EAEE,GAFF;AAID,GAPD;AASAJ,EAAAA,MAAM,CAACS,gBAAP,CAAwB,SAAxB,EAAmC,UAAAC,KAAK,EAAI;AAC1C;AACA,QAAI,CAACA,KAAK,CAACC,IAAP,IAAeD,KAAK,CAACC,IAAN,CAAWH,IAAX,KAAoBjB,4BAAvC,EAAqE;AACnE;AACD;;AAEDO,IAAAA,EAAE,CAACc,gBAAH,CAAoBd,EAAE,CAACe,kBAAH,CAAsBH,KAAK,CAACC,IAAN,CAAWP,QAAjC,CAApB;AACD,GAPD;AAQD","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.iframe.js"],"sourcesContent":["/* global BookReader */\n/**\n * Plugin for two-way communication between a BookReader in an IFrame and the\n * parent web page\n */\n\nconst MESSAGE_TYPE_FRAGMENT_CHANGE = 'bookReaderFragmentChange';\n\nBookReader.prototype.init = (function (super_) {\n return function () {\n super_.call(this);\n _attachEventListeners(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * @private\n * Using window.postMessage() and event listeners, the plugin notifies the\n * parent window when pages change, and the parent window can also\n * explicitly request a page change by sending its own message.\n *\n * @param {BookReader} br\n * @param {Window?} [parent]\n */\nexport function _attachEventListeners(br, parent = window.parent) {\n // Not embedded, abort\n if (!parent) {\n return;\n }\n\n br.bind(BookReader.eventNames.fragmentChange, () => {\n const fragment = br.fragmentFromParams(br.paramsFromCurrent());\n\n parent.postMessage(\n { type: MESSAGE_TYPE_FRAGMENT_CHANGE, fragment },\n '*'\n );\n });\n\n window.addEventListener('message', event => {\n // Not a recognized message type, abort\n if (!event.data || event.data.type !== MESSAGE_TYPE_FRAGMENT_CHANGE) {\n return;\n }\n\n br.updateFromParams(br.paramsFromFragment(event.data.fragment));\n });\n}\n"],"names":["MESSAGE_TYPE_FRAGMENT_CHANGE","BookReader","prototype","init","super_","call","_attachEventListeners","br","parent","window","bind","eventNames","fragmentChange","fragment","fragmentFromParams","paramsFromCurrent","postMessage","type","addEventListener","event","data","updateFromParams","paramsFromFragment"],"sourceRoot":""}