@internetarchive/bookreader 5.0.0-88-alpha.10 → 5.0.0-88

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 (215) hide show
  1. package/BookReader/BookReader.css +3 -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.search.js +1 -1
  9. package/BookReader/plugins/plugin.search.js.map +1 -1
  10. package/BookReader/plugins/plugin.text_selection.js +1 -1
  11. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  12. package/BookReader/plugins/plugin.tts.js +1 -1
  13. package/BookReader/plugins/plugin.tts.js.map +1 -1
  14. package/BookReader/plugins/plugin.url.js +1 -1
  15. package/BookReader/plugins/plugin.url.js.map +1 -1
  16. package/CHANGELOG.md +4 -0
  17. package/babel.config.js +12 -30
  18. package/jsconfig.json +1 -3
  19. package/package.json +14 -16
  20. package/src/BookNavigator/search/search-results.js +1 -1
  21. package/src/BookReader/Mode1UpLit.js +56 -86
  22. package/src/BookReader/Mode2UpLit.js +2 -3
  23. package/src/BookReader/Navbar/Navbar.js +53 -11
  24. package/src/BookReader/options.js +3 -0
  25. package/src/BookReader.js +49 -1
  26. package/src/BookReaderPlugin.js +28 -0
  27. package/src/css/_BRnav.scss +0 -3
  28. package/src/css/_controls.scss +4 -0
  29. package/src/plugins/plugin.archive_analytics.js +84 -78
  30. package/src/plugins/plugin.chapters.js +17 -22
  31. package/src/plugins/plugin.text_selection.js +1 -1
  32. package/src/plugins/tts/plugin.tts.js +2 -2
  33. package/tests/jest/BookReader/Navbar/Navbar.test.js +16 -3
  34. package/tests/jest/plugins/plugin.archive_analytics.test.js +8 -11
  35. package/dist/esm/BookNavigator/assets/bookmark-colors.js +0 -4
  36. package/dist/esm/BookNavigator/assets/button-base.js +0 -4
  37. package/dist/esm/BookNavigator/assets/ia-logo.js +0 -4
  38. package/dist/esm/BookNavigator/assets/icon_checkmark.js +0 -8
  39. package/dist/esm/BookNavigator/assets/icon_close.js +0 -4
  40. package/dist/esm/BookNavigator/book-navigator.js +0 -612
  41. package/dist/esm/BookNavigator/bookmarks/bookmark-button.js +0 -35
  42. package/dist/esm/BookNavigator/bookmarks/bookmark-edit.js +0 -78
  43. package/dist/esm/BookNavigator/bookmarks/bookmarks-list.js +0 -160
  44. package/dist/esm/BookNavigator/bookmarks/bookmarks-loginCTA.js +0 -24
  45. package/dist/esm/BookNavigator/bookmarks/bookmarks-provider.js +0 -55
  46. package/dist/esm/BookNavigator/bookmarks/ia-bookmarks.js +0 -521
  47. package/dist/esm/BookNavigator/delete-modal-actions.js +0 -29
  48. package/dist/esm/BookNavigator/downloads/downloads-provider.js +0 -84
  49. package/dist/esm/BookNavigator/downloads/downloads.js +0 -69
  50. package/dist/esm/BookNavigator/search/search-provider.js +0 -238
  51. package/dist/esm/BookNavigator/search/search-results.js +0 -161
  52. package/dist/esm/BookNavigator/sharing.js +0 -26
  53. package/dist/esm/BookNavigator/viewable-files.js +0 -94
  54. package/dist/esm/BookNavigator/visual-adjustments/visual-adjustments-provider.js +0 -83
  55. package/dist/esm/BookNavigator/visual-adjustments/visual-adjustments.js +0 -131
  56. package/dist/esm/BookReader/BookModel.js +0 -575
  57. package/dist/esm/BookReader/DragScrollable.js +0 -224
  58. package/dist/esm/BookReader/ImageCache.js +0 -122
  59. package/dist/esm/BookReader/Mode1Up.js +0 -114
  60. package/dist/esm/BookReader/Mode1UpLit.js +0 -579
  61. package/dist/esm/BookReader/Mode2Up.js +0 -106
  62. package/dist/esm/BookReader/Mode2UpLit.js +0 -1020
  63. package/dist/esm/BookReader/ModeCoordinateSpace.js +0 -28
  64. package/dist/esm/BookReader/ModeSmoothZoom.js +0 -318
  65. package/dist/esm/BookReader/ModeThumb.js +0 -366
  66. package/dist/esm/BookReader/Navbar/Navbar.js +0 -253
  67. package/dist/esm/BookReader/PageContainer.js +0 -165
  68. package/dist/esm/BookReader/ReduceSet.js +0 -27
  69. package/dist/esm/BookReader/Toolbar/Toolbar.js +0 -242
  70. package/dist/esm/BookReader/events.js +0 -20
  71. package/dist/esm/BookReader/options.js +0 -331
  72. package/dist/esm/BookReader/utils/HTMLDimensionsCacher.js +0 -48
  73. package/dist/esm/BookReader/utils/ScrollClassAdder.js +0 -31
  74. package/dist/esm/BookReader/utils/SelectionObserver.js +0 -42
  75. package/dist/esm/BookReader/utils/classes.js +0 -37
  76. package/dist/esm/BookReader/utils.js +0 -315
  77. package/dist/esm/BookReader.js +0 -1827
  78. package/dist/esm/assets/icons/1up.svg +0 -12
  79. package/dist/esm/assets/icons/2up.svg +0 -15
  80. package/dist/esm/assets/icons/advance.svg +0 -26
  81. package/dist/esm/assets/icons/chevron-right.svg +0 -1
  82. package/dist/esm/assets/icons/close-circle-dark.svg +0 -1
  83. package/dist/esm/assets/icons/close-circle.svg +0 -1
  84. package/dist/esm/assets/icons/fullscreen.svg +0 -17
  85. package/dist/esm/assets/icons/fullscreen_exit.svg +0 -17
  86. package/dist/esm/assets/icons/hamburger.svg +0 -15
  87. package/dist/esm/assets/icons/left-arrow.svg +0 -12
  88. package/dist/esm/assets/icons/magnify-minus.svg +0 -12
  89. package/dist/esm/assets/icons/magnify-plus.svg +0 -13
  90. package/dist/esm/assets/icons/magnify.svg +0 -15
  91. package/dist/esm/assets/icons/pause.svg +0 -23
  92. package/dist/esm/assets/icons/play.svg +0 -22
  93. package/dist/esm/assets/icons/playback-speed.svg +0 -34
  94. package/dist/esm/assets/icons/read-aloud.svg +0 -22
  95. package/dist/esm/assets/icons/review.svg +0 -22
  96. package/dist/esm/assets/icons/thumbnails.svg +0 -17
  97. package/dist/esm/assets/icons/voice.svg +0 -1
  98. package/dist/esm/assets/icons/volume-full.svg +0 -22
  99. package/dist/esm/assets/images/BRicons.png +0 -0
  100. package/dist/esm/assets/images/BRicons.svg +0 -94
  101. package/dist/esm/assets/images/BRicons_ia.png +0 -0
  102. package/dist/esm/assets/images/back_pages.png +0 -0
  103. package/dist/esm/assets/images/book_bottom_icon.png +0 -0
  104. package/dist/esm/assets/images/book_down_icon.png +0 -0
  105. package/dist/esm/assets/images/book_left_icon.png +0 -0
  106. package/dist/esm/assets/images/book_leftmost_icon.png +0 -0
  107. package/dist/esm/assets/images/book_right_icon.png +0 -0
  108. package/dist/esm/assets/images/book_rightmost_icon.png +0 -0
  109. package/dist/esm/assets/images/book_top_icon.png +0 -0
  110. package/dist/esm/assets/images/book_up_icon.png +0 -0
  111. package/dist/esm/assets/images/books_graphic.svg +0 -177
  112. package/dist/esm/assets/images/booksplit.png +0 -0
  113. package/dist/esm/assets/images/control_pause_icon.png +0 -0
  114. package/dist/esm/assets/images/control_play_icon.png +0 -0
  115. package/dist/esm/assets/images/embed_icon.png +0 -0
  116. package/dist/esm/assets/images/icon-home-ia.png +0 -0
  117. package/dist/esm/assets/images/icon_OL-logo-xs.png +0 -0
  118. package/dist/esm/assets/images/icon_alert-xs.png +0 -0
  119. package/dist/esm/assets/images/icon_book.svg +0 -12
  120. package/dist/esm/assets/images/icon_bookmark.svg +0 -12
  121. package/dist/esm/assets/images/icon_close-pop.png +0 -0
  122. package/dist/esm/assets/images/icon_download.png +0 -0
  123. package/dist/esm/assets/images/icon_gear.svg +0 -14
  124. package/dist/esm/assets/images/icon_hamburger.svg +0 -20
  125. package/dist/esm/assets/images/icon_home.png +0 -0
  126. package/dist/esm/assets/images/icon_home.svg +0 -21
  127. package/dist/esm/assets/images/icon_home_ia.png +0 -0
  128. package/dist/esm/assets/images/icon_indicator.png +0 -0
  129. package/dist/esm/assets/images/icon_info.svg +0 -11
  130. package/dist/esm/assets/images/icon_one_page.svg +0 -8
  131. package/dist/esm/assets/images/icon_pause.svg +0 -1
  132. package/dist/esm/assets/images/icon_play.svg +0 -1
  133. package/dist/esm/assets/images/icon_playback-rate.svg +0 -15
  134. package/dist/esm/assets/images/icon_return.png +0 -0
  135. package/dist/esm/assets/images/icon_search_button.svg +0 -8
  136. package/dist/esm/assets/images/icon_share.svg +0 -9
  137. package/dist/esm/assets/images/icon_skip-ahead.svg +0 -6
  138. package/dist/esm/assets/images/icon_skip-back.svg +0 -13
  139. package/dist/esm/assets/images/icon_speaker.svg +0 -18
  140. package/dist/esm/assets/images/icon_speaker_open.svg +0 -10
  141. package/dist/esm/assets/images/icon_thumbnails.svg +0 -12
  142. package/dist/esm/assets/images/icon_toc.svg +0 -5
  143. package/dist/esm/assets/images/icon_two_pages.svg +0 -9
  144. package/dist/esm/assets/images/icon_zoomer.png +0 -0
  145. package/dist/esm/assets/images/loading.gif +0 -0
  146. package/dist/esm/assets/images/logo_icon.png +0 -0
  147. package/dist/esm/assets/images/marker_chap-off.png +0 -0
  148. package/dist/esm/assets/images/marker_chap-off.svg +0 -11
  149. package/dist/esm/assets/images/marker_chap-off_ia.png +0 -0
  150. package/dist/esm/assets/images/marker_chap-on.png +0 -0
  151. package/dist/esm/assets/images/marker_chap-on.svg +0 -11
  152. package/dist/esm/assets/images/marker_srch-on.svg +0 -11
  153. package/dist/esm/assets/images/marker_srchchap-off.png +0 -0
  154. package/dist/esm/assets/images/marker_srchchap-on.png +0 -0
  155. package/dist/esm/assets/images/nav_control-dn.png +0 -0
  156. package/dist/esm/assets/images/nav_control-dn_ia.png +0 -0
  157. package/dist/esm/assets/images/nav_control-up.png +0 -0
  158. package/dist/esm/assets/images/nav_control-up_ia.png +0 -0
  159. package/dist/esm/assets/images/nav_control.png +0 -0
  160. package/dist/esm/assets/images/one_page_mode_icon.png +0 -0
  161. package/dist/esm/assets/images/paper-badge.png +0 -0
  162. package/dist/esm/assets/images/print_icon.png +0 -0
  163. package/dist/esm/assets/images/progressbar.gif +0 -0
  164. package/dist/esm/assets/images/right_edges.png +0 -0
  165. package/dist/esm/assets/images/slider.png +0 -0
  166. package/dist/esm/assets/images/slider_ia.png +0 -0
  167. package/dist/esm/assets/images/thumbnail_mode_icon.png +0 -0
  168. package/dist/esm/assets/images/transparent.png +0 -0
  169. package/dist/esm/assets/images/two_page_mode_icon.png +0 -0
  170. package/dist/esm/assets/images/unviewable_page.png +0 -0
  171. package/dist/esm/assets/images/zoom_in_icon.png +0 -0
  172. package/dist/esm/assets/images/zoom_out_icon.png +0 -0
  173. package/dist/esm/css/BookReader.scss +0 -85
  174. package/dist/esm/css/_BRBookmarks.scss +0 -29
  175. package/dist/esm/css/_BRComponent.scss +0 -13
  176. package/dist/esm/css/_BRfloat.scss +0 -197
  177. package/dist/esm/css/_BRicon.scss +0 -54
  178. package/dist/esm/css/_BRmain.scss +0 -262
  179. package/dist/esm/css/_BRnav.scss +0 -354
  180. package/dist/esm/css/_BRpages.scss +0 -213
  181. package/dist/esm/css/_BRsearch.scss +0 -268
  182. package/dist/esm/css/_BRtoolbar.scss +0 -84
  183. package/dist/esm/css/_BRvendor.scss +0 -5
  184. package/dist/esm/css/_TextSelection.scss +0 -108
  185. package/dist/esm/css/_colorbox.scss +0 -52
  186. package/dist/esm/css/_controls.scss +0 -257
  187. package/dist/esm/css/_icons.scss +0 -121
  188. package/dist/esm/ia-bookreader/ia-bookreader.js +0 -141
  189. package/dist/esm/jquery-wrapper.js +0 -3
  190. package/dist/esm/plugins/plugin.archive_analytics.js +0 -72
  191. package/dist/esm/plugins/plugin.autoplay.js +0 -119
  192. package/dist/esm/plugins/plugin.chapters.js +0 -288
  193. package/dist/esm/plugins/plugin.iframe.js +0 -44
  194. package/dist/esm/plugins/plugin.iiif.js +0 -146
  195. package/dist/esm/plugins/plugin.resume.js +0 -66
  196. package/dist/esm/plugins/plugin.text_selection.js +0 -621
  197. package/dist/esm/plugins/plugin.vendor-fullscreen.js +0 -227
  198. package/dist/esm/plugins/search/plugin.search.js +0 -499
  199. package/dist/esm/plugins/search/utils.js +0 -42
  200. package/dist/esm/plugins/search/view.js +0 -360
  201. package/dist/esm/plugins/tts/AbstractTTSEngine.js +0 -282
  202. package/dist/esm/plugins/tts/FestivalTTSEngine.js +0 -192
  203. package/dist/esm/plugins/tts/PageChunk.js +0 -105
  204. package/dist/esm/plugins/tts/PageChunkIterator.js +0 -155
  205. package/dist/esm/plugins/tts/WebTTSEngine.js +0 -364
  206. package/dist/esm/plugins/tts/plugin.tts.js +0 -315
  207. package/dist/esm/plugins/tts/tooltip_dict.js +0 -14
  208. package/dist/esm/plugins/tts/utils.js +0 -79
  209. package/dist/esm/plugins/url/UrlPlugin.js +0 -197
  210. package/dist/esm/plugins/url/plugin.url.js +0 -212
  211. package/dist/esm/util/browserSniffing.js +0 -56
  212. package/dist/esm/util/debouncer.js +0 -25
  213. package/dist/esm/util/docCookies.js +0 -75
  214. package/dist/esm/util/strings.js +0 -34
  215. package/index.js +0 -2
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[623],{9372:function(e,n,a){var i;a(7495),a(1761),a(1669).extend(BookReader.defaultOptions,{enableArchiveAnalytics:!0,debugArchiveAnaltyics:!1}),BookReader.prototype.init=(i=BookReader.prototype.init,function(){var e=this;i.call(this),this.options.enableArchiveAnalytics&&this.bind(BookReader.eventNames.fragmentChange,(function(){return e.archiveAnalyticsSendFragmentChange()}))}),BookReader.prototype.archiveAnalyticsSendFragmentChange=function(){if(window.archive_analytics){var e=this.archiveAnalyticsSendFragmentChange.prevFragment,n=this.paramsFromCurrent(),a=this.fragmentFromParams(n);if(e!=a){var i={bookreader:"user_changed_view",itemid:this.bookId,cache_bust:Math.random(),offsite:1,details:0};try{i.offsite=window.top.location.hostname.match(/\.archive.org$/)?0:1,i.details=!i.offsite&&window.top.location.pathname.match(/^\/details\//)?1:0}catch(e){}window.archive_analytics.send_ping(i,null,"augment_for_ao_site");var t=this.options.lendingInfo&&this.options.lendingInfo.loanId?{loanId:this.options.lendingInfo.loanId}:{};window.archive_analytics.send_event("BookReader","UserChangedView",window.location.pathname,t),this.archiveAnalyticsSendFragmentChange.prevFragment=a}}},BookReader.prototype.archiveAnalyticsSendEvent=function(e,n,a,i){this.options.enableArchiveAnalytics&&(this.options.debugArchiveAnaltyics&&console.log("archiveAnalyticsSendEvent",arguments,window.archive_analytics),window.archive_analytics&&(i=i||{},"number"==typeof a&&(i.ev=a),window.archive_analytics.send_event(e,n,null,i)))}}},function(e){e(e.s=9372)}]);
1
+ "use strict";(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[623],{9476:function(t,e,n){function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,i(r.key),r)}}function i(t){var e=function(t,e){if("object"!=r(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,"string");if("object"!=r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==r(e)?e:e+""}n(2675),n(9463),n(2259),n(5700),n(8706),n(3792),n(9572),n(8130),n(875),n(6099),n(825),n(7495),n(7764),n(1761),n(2953),n(9085);var a=function(){return t=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.br=e,this.options},(e=[{key:"setup",value:function(t){this.options=Object.assign({},this.options,t)}},{key:"init",value:function(){}}])&&o(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}();function c(t){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c(t)}function u(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,y(r.key),r)}}function f(t,e,n){return e=s(e),function(t,e){if(e&&("object"==c(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,l()?Reflect.construct(e,n||[],s(t).constructor):e.apply(t,n))}function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(l=function(){return!!t})()}function s(t){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},s(t)}function p(t,e){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},p(t,e)}function b(t,e,n){return(e=y(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function y(t){var e=function(t,e){if("object"!=c(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=c(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==c(e)?e:e+""}var v=window.BookReader,h=function(t){function e(){var t;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return b(t=f(this,e,[].concat(r)),"options",{enabled:!0,debug:!1}),b(t,"_prevFragment",null),t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&p(t,e)}(e,t),n=e,r=[{key:"init",value:function(){var t=this;this.options.enabled&&this.br.bind(v.eventNames.fragmentChange,(function(){return t.sendFragmentChange()}))}},{key:"sendFragmentChange",value:function(){if(window.archive_analytics){var t=this._prevFragment,e=this.br.paramsFromCurrent(),n=this.br.fragmentFromParams(e);if(t!=n){var r,o={bookreader:"user_changed_view",itemid:this.br.bookId,cache_bust:Math.random(),offsite:1,details:0};try{o.offsite=window.top.location.hostname.match(/\.archive.org$/)?0:1,o.details=!o.offsite&&window.top.location.pathname.match(/^\/details\//)?1:0}catch(t){}window.archive_analytics.send_ping(o,null,"augment_for_ao_site");var i=null!==(r=this.br.options.lendingInfo)&&void 0!==r&&r.loanId?{loanId:this.br.options.lendingInfo.loanId}:{};window.archive_analytics.send_event("BookReader","UserChangedView",window.location.pathname,i),this._prevFragment=n}}}},{key:"sendEvent",value:function(t,e,n,r){this.options.enabled&&(this.options.debug&&console.log("archiveAnalyticsSendEvent",arguments,window.archive_analytics),window.archive_analytics&&(r=r||{},"number"==typeof n&&(r.ev=n),window.archive_analytics.send_event(t,e,null,r)))}}],r&&u(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(a);null==v||v.registerPlugin("archiveAnalytics",h)}},function(t){t(t.s=9476)}]);
2
2
  //# sourceMappingURL=plugin.archive_analytics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.archive_analytics.js","mappings":"mJAUsCA,E,wBAN/BC,OAAOC,WAAWC,eAAgB,CACvCC,wBAAwB,EAExBC,uBAAuB,IAGzBH,WAAWI,UAAUC,MAAiBP,EAQnCE,WAAWI,UAAUC,KAPf,WAAW,IAAAC,EAAA,KAChBR,EAAOS,KAAKC,MAERA,KAAKC,QAAQP,wBACfM,KAAKE,KAAKV,WAAWW,WAAWC,gBAAgB,kBAAMN,EAAKO,oCAAoC,GAEnG,GAIFb,WAAWI,UAAUS,mCAAqC,WACxD,GAAKC,OAAOC,kBAAZ,CAIA,IAAMC,EAAeR,KAAKK,mCAAmCG,aAEvDC,EAAST,KAAKU,oBACdC,EAAcX,KAAKY,mBAAmBH,GAE5C,GAAID,GAAgBG,EAAa,CAC/B,IAAME,EAAS,CACbC,WAAY,oBACZC,OAAQf,KAAKgB,OACbC,WAAYC,KAAKC,SAGnBN,QAAiB,EACjBA,QAAiB,GACjB,IACEA,EAAOO,QAAUd,OAAOe,IAAIC,SAASC,SAASC,MAAM,kBAChD,EACA,EACJX,EAAOY,SACJZ,EAAOO,SAAWd,OAAOe,IAAIC,SAASI,SAASF,MAAM,gBAClD,EACA,CACR,CAAE,MAAOG,GAAI,CAIbrB,OAAOC,kBAAkBqB,UAAUf,EAAQ,KAAM,uBAGjD,IAAMgB,EAAwB7B,KAAKC,QAAQ6B,aAAe9B,KAAKC,QAAQ6B,YAAYC,OAC/E,CAAEA,OAAQ/B,KAAKC,QAAQ6B,YAAYC,QACnC,CAAC,EACLzB,OAAOC,kBAAkByB,WAAW,aAAc,kBAAmB1B,OAAOgB,SAASI,SAAUG,GAE/F7B,KAAKK,mCAAmCG,aAAeG,CACzD,CArCA,CAsCF,EASAnB,WAAWI,UAAUqC,0BAA4B,SAASC,EAAUC,EAAQC,EAAOP,GAC5E7B,KAAKC,QAAQP,yBAEdM,KAAKC,QAAQN,uBACf0C,QAAQC,IAAI,4BAA6BC,UAAWjC,OAAOC,mBAGxDD,OAAOC,oBAEZsB,EAAwBA,GAAyB,CAAC,EAC7B,iBAAVO,IACTP,EAAsBW,GAAKJ,GAE7B9B,OAAOC,kBAAkByB,WAAWE,EAAUC,EAAQ,KAAMN,IAC9D,C","sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.archive_analytics.js"],"sourcesContent":["/* global BookReader */\n/**\n * Plugin for Archive.org analytics\n */\njQuery.extend(BookReader.defaultOptions, {\n enableArchiveAnalytics: true,\n /** Provide a means of debugging, cause otherwise it's impossible to test locally */\n debugArchiveAnaltyics: false,\n});\n\nBookReader.prototype.init = (function(super_) {\n return function() {\n super_.call(this);\n\n if (this.options.enableArchiveAnalytics) {\n this.bind(BookReader.eventNames.fragmentChange, () => this.archiveAnalyticsSendFragmentChange());\n }\n };\n})(BookReader.prototype.init);\n\n/** @private */\nBookReader.prototype.archiveAnalyticsSendFragmentChange = function() {\n if (!window.archive_analytics) {\n return;\n }\n\n const prevFragment = this.archiveAnalyticsSendFragmentChange.prevFragment;\n\n const params = this.paramsFromCurrent();\n const newFragment = this.fragmentFromParams(params);\n\n if (prevFragment != newFragment) {\n const values = {\n bookreader: \"user_changed_view\",\n itemid: this.bookId,\n cache_bust: Math.random(),\n };\n // EEK! offsite embedding and /details/ page books look the same in analytics, otherwise!\n values.offsite = 1;\n values.details = 0;\n try {\n values.offsite = window.top.location.hostname.match(/\\.archive.org$/)\n ? 0\n : 1;\n values.details =\n !values.offsite && window.top.location.pathname.match(/^\\/details\\//)\n ? 1\n : 0;\n } catch (e) {}\n // avoids embed cross site exceptions -- but on (+) side, means it is and keeps marked offite!\n\n // Send bookreader ping\n window.archive_analytics.send_ping(values, null, \"augment_for_ao_site\");\n\n // Also send tracking event ping\n const additionalEventParams = this.options.lendingInfo && this.options.lendingInfo.loanId\n ? { loanId: this.options.lendingInfo.loanId }\n : {};\n window.archive_analytics.send_event('BookReader', 'UserChangedView', window.location.pathname, additionalEventParams);\n\n this.archiveAnalyticsSendFragmentChange.prevFragment = newFragment;\n }\n};\n\n/**\n * Sends a tracking \"Event\". See https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#events\n * @param {string} category\n * @param {string} action\n * @param {number} [value] (must be an int)\n * @param {Object} [additionalEventParams]\n */\nBookReader.prototype.archiveAnalyticsSendEvent = function(category, action, value, additionalEventParams) {\n if (!this.options.enableArchiveAnalytics) return;\n\n if (this.options.debugArchiveAnaltyics) {\n console.log(\"archiveAnalyticsSendEvent\", arguments, window.archive_analytics);\n }\n\n if (!window.archive_analytics) return;\n\n additionalEventParams = additionalEventParams || {};\n if (typeof(value) == 'number') {\n additionalEventParams.ev = value;\n }\n window.archive_analytics.send_event(category, action, null, additionalEventParams);\n};\n"],"names":["super_","extend","BookReader","defaultOptions","enableArchiveAnalytics","debugArchiveAnaltyics","prototype","init","_this","call","this","options","bind","eventNames","fragmentChange","archiveAnalyticsSendFragmentChange","window","archive_analytics","prevFragment","params","paramsFromCurrent","newFragment","fragmentFromParams","values","bookreader","itemid","bookId","cache_bust","Math","random","offsite","top","location","hostname","match","details","pathname","e","send_ping","additionalEventParams","lendingInfo","loanId","send_event","archiveAnalyticsSendEvent","category","action","value","console","log","arguments","ev"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.archive_analytics.js","mappings":"i7BAMO,IAAMA,EAAgB,WAW3B,O,EAPA,SAAAA,EAAYC,I,4FAAIC,CAAA,KAAAF,GAEdG,KAAKF,GAAKA,EAEVE,KAAKC,OACP,G,EAEA,EAAAC,IAAA,QAAAC,MAIA,SAAMF,GACJD,KAAKC,QAAUG,OAAOC,OAAO,CAAC,EAAGL,KAAKC,QAASA,EACjD,GAEA,CAAAC,IAAA,OAAAC,MACA,WAAQ,M,6EAAC,CApBkB,G,2jDCH7B,IAAMG,EAAmEC,OAAOD,WAGnEE,EAAsB,SAAAC,GAAA,SAAAD,IAAA,IAAAE,G,4FAAAX,CAAA,KAAAS,GAAA,QAAAG,EAAAC,UAAAC,OAAAC,EAAA,IAAAC,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAQb,OARaC,EAAAP,EAAAQ,EAAA,KAAAV,EAAA,GAAAW,OAAAL,IAAA,UACvB,CACRM,SAAS,EAETC,OAAO,IAGTJ,EAAAP,EAAA,gBACgB,MAAIA,CAAA,Q,qRAAAY,CAAAd,EAAAC,G,EAAAD,E,EAAA,EAAAN,IAAA,OAAAC,MAGpB,WAAO,IAAAoB,EAAA,KACDvB,KAAKC,QAAQmB,SACfpB,KAAKF,GAAG0B,KAAKlB,EAAWmB,WAAWC,gBAAgB,kBAAMH,EAAKI,oBAAoB,GAEtF,GAEA,CAAAzB,IAAA,qBAAAC,MACA,WACE,GAAKI,OAAOqB,kBAAZ,CAIA,IAAMC,EAAe7B,KAAK8B,cAEpBC,EAAS/B,KAAKF,GAAGkC,oBACjBC,EAAcjC,KAAKF,GAAGoC,mBAAmBH,GAE/C,GAAIF,GAAgBI,EAAa,KAAAE,EACzBC,EAAS,CACbC,WAAY,oBACZC,OAAQtC,KAAKF,GAAGyC,OAChBC,WAAYC,KAAKC,SAGnBN,QAAiB,EACjBA,QAAiB,GACjB,IACEA,EAAOO,QAAUpC,OAAOqC,IAAIC,SAASC,SAASC,MAAM,kBAChD,EACA,EACJX,EAAOY,SACJZ,EAAOO,SAAWpC,OAAOqC,IAAIC,SAASI,SAASF,MAAM,gBAClD,EACA,CACR,CAAE,MAAOG,GAAK,CAId3C,OAAOqB,kBAAkBuB,UAAUf,EAAQ,KAAM,uBAGjD,IAAMgB,EAAmD,QAA3BjB,EAAAnC,KAAKF,GAAGG,QAAQoD,mBAAW,IAAAlB,GAA3BA,EAA6BmB,OACvD,CAAEA,OAAQtD,KAAKF,GAAGG,QAAQoD,YAAYC,QACtC,CAAC,EACL/C,OAAOqB,kBAAkB2B,WAAW,aAAc,kBAAmBhD,OAAOsC,SAASI,SAAUG,GAE/FpD,KAAK8B,cAAgBG,CACvB,CArCA,CAsCF,GAEA,CAAA/B,IAAA,YAAAC,MAOA,SAAUqD,EAAUC,EAAQtD,EAAOiD,GAC5BpD,KAAKC,QAAQmB,UAEdpB,KAAKC,QAAQoB,OACfqC,QAAQC,IAAI,4BAA6B/C,UAAWL,OAAOqB,mBAGxDrB,OAAOqB,oBAEZwB,EAAwBA,GAAyB,CAAC,EAC5B,iBAAVjD,IACViD,EAAsBQ,GAAKzD,GAE7BI,OAAOqB,kBAAkB2B,WAAWC,EAAUC,EAAQ,KAAML,IAC9D,I,gFAAC,CAlFgC,CAASvD,GAqF5CS,SAAAA,EAAYuD,eAAe,mBAAoBrD,E","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.archive_analytics.js"],"sourcesContent":["// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n}\n","// @ts-check\nimport { BookReaderPlugin } from \"../BookReaderPlugin.js\";\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n\nexport class ArchiveAnalyticsPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** Provide a means of debugging, cause otherwise it's impossible to test locally */\n debug: false,\n }\n\n /** @type {string} */\n _prevFragment = null;\n\n /** @override */\n init() {\n if (this.options.enabled) {\n this.br.bind(BookReader.eventNames.fragmentChange, () => this.sendFragmentChange());\n }\n }\n\n /** @private */\n sendFragmentChange() {\n if (!window.archive_analytics) {\n return;\n }\n\n const prevFragment = this._prevFragment;\n\n const params = this.br.paramsFromCurrent();\n const newFragment = this.br.fragmentFromParams(params);\n\n if (prevFragment != newFragment) {\n const values = {\n bookreader: \"user_changed_view\",\n itemid: this.br.bookId,\n cache_bust: Math.random(),\n };\n // EEK! offsite embedding and /details/ page books look the same in analytics, otherwise!\n values.offsite = 1;\n values.details = 0;\n try {\n values.offsite = window.top.location.hostname.match(/\\.archive.org$/)\n ? 0\n : 1;\n values.details =\n !values.offsite && window.top.location.pathname.match(/^\\/details\\//)\n ? 1\n : 0;\n } catch (e) { }\n // avoids embed cross site exceptions -- but on (+) side, means it is and keeps marked offite!\n\n // Send bookreader ping\n window.archive_analytics.send_ping(values, null, \"augment_for_ao_site\");\n\n // Also send tracking event ping\n const additionalEventParams = this.br.options.lendingInfo?.loanId\n ? { loanId: this.br.options.lendingInfo.loanId }\n : {};\n window.archive_analytics.send_event('BookReader', 'UserChangedView', window.location.pathname, additionalEventParams);\n\n this._prevFragment = newFragment;\n }\n }\n\n /**\n * Sends a tracking \"Event\". See https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#events\n * @param {string} category\n * @param {string} action\n * @param {number} [value] (must be an int)\n * @param {Object} [additionalEventParams]\n */\n sendEvent(category, action, value, additionalEventParams) {\n if (!this.options.enabled) return;\n\n if (this.options.debug) {\n console.log(\"archiveAnalyticsSendEvent\", arguments, window.archive_analytics);\n }\n\n if (!window.archive_analytics) return;\n\n additionalEventParams = additionalEventParams || {};\n if (typeof (value) == 'number') {\n additionalEventParams.ev = value;\n }\n window.archive_analytics.send_event(category, action, null, additionalEventParams);\n }\n}\n\nBookReader?.registerPlugin('archiveAnalytics', ArchiveAnalyticsPlugin);\n"],"names":["BookReaderPlugin","br","_classCallCheck","this","options","key","value","Object","assign","BookReader","window","ArchiveAnalyticsPlugin","_BookReaderPlugin","_this","_len","arguments","length","args","Array","_key","_defineProperty","_callSuper","concat","enabled","debug","_inherits","_this2","bind","eventNames","fragmentChange","sendFragmentChange","archive_analytics","prevFragment","_prevFragment","params","paramsFromCurrent","newFragment","fragmentFromParams","_this$br$options$lend","values","bookreader","itemid","bookId","cache_bust","Math","random","offsite","top","location","hostname","match","details","pathname","e","send_ping","additionalEventParams","lendingInfo","loanId","send_event","category","action","console","log","ev","registerPlugin"],"sourceRoot":""}
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see plugin.search.js.LICENSE.txt */
2
- "use strict";(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[924],{9007:function(e,t,r){r(2675),r(9463),r(6412),r(2259),r(8125),r(8706),r(113),r(3418),r(3792),r(2062),r(4490),r(4782),r(2010),r(4731),r(479),r(9085),r(5506),r(875),r(6099),r(8459),r(3362),r(7495),r(8781),r(7764),r(5440),r(5746),r(3500),r(2953),r(8408);var n=r(6257),a=r(1774),o=(r(5700),r(9572),r(8130),r(8940),r(1669));function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=i(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}var h=function(){return e=function e(t){var r=t.br,n=t.searchCancelledCallback,a=void 0===n?function(){}:n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.br=r,this.matches=[],this.cacheDOMElements(),this.cancelSearch=a},t=[{key:"init",value:function(){this.bindEvents()}},{key:"cacheDOMElements",value:function(){this.dom={},this.dom.toolbarSearch=this.buildToolbarSearch()}},{key:"setQuery",value:function(e){this.br.$('[name="query"]').val(e)}},{key:"emptyMatches",value:function(){this.matches=[]}},{key:"removeResultPins",value:function(){this.br.$(".BRnavpos .BRsearch").remove()}},{key:"clearSearchFieldAndResults",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.br.removeSearchResults(),this.removeResultPins(),this.emptyMatches(),this.setQuery(""),this.teardownSearchNavigation(),e&&this.br.trigger("SearchResultsCleared")}},{key:"toggleSidebar",value:function(){this.br.trigger("ToggleSearchMenu")}},{key:"renderSearchNavigation",value:function(){var e="BRsearch-navigation";o(".BRnav").before('\n <div class="'.concat(e,'">\n <button class="toggle-sidebar">\n <h4>\n <span class="icon icon-search"></span> Results\n </h4>\n </button>\n <div class="pagination">\n <button class="prev" title="Previous result"><span class="icon icon-chevron hflip"></span></button>\n <span data-id="resultsCount">').concat(this.resultsPosition(),'</span>\n <button class="next" title="Next result"><span class="icon icon-chevron"></button>\n </div>\n <button class="clear" title="Clear search results">\n <span class="icon icon-close"></span>\n </button>\n </div>\n ')),this.dom.searchNavigation=o(".".concat(e))}},{key:"resultsPosition",value:function(){var e="".concat(this.matches.length," result").concat(1===this.matches.length?"":"s");return~this.currentMatchIndex&&(e="".concat(this.currentMatchIndex+1," / ").concat(this.matches.length)),e}},{key:"bindSearchNavigationEvents",value:function(){if(this.dom.searchNavigation){var e="searchNavigation";this.dom.searchNavigation.on("click.".concat(e),".clear",this.clearSearchFieldAndResults.bind(this)).on("click.".concat(e),".prev",this.showPrevResult.bind(this)).on("click.".concat(e),".next",this.showNextResult.bind(this)).on("click.".concat(e),".toggle-sidebar",this.toggleSidebar.bind(this)).on("click.".concat(e),!1)}}},{key:"showPrevResult",value:function(){0!==this.currentMatchIndex&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((function(e,t,r){return t[0]>r}))+1),this.br.$(".BRnavline .BRsearch").eq(--this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}},{key:"showNextResult",value:function(){this.currentMatchIndex+1!==this.matches.length&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((function(e,t,r){return e[e.length-1]>r}))-1),this.br.$(".BRnavline .BRsearch").eq(++this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}},{key:"getClosestMatchIndex",value:function(e){var t=this.matches.map((function(e){return e.par[0].page})),r=this.br.currentIndex()+1,n=function(t,r){if(1===t.length)return t[0];var a=t.slice(0,t.length/2),o=t.slice(t.length/2);return n(e(a,o,r)?a:o,r)},a=n(t,r);return this.matches.indexOf(this.matches.find((function(e){return e.par[0].page===a})))}},{key:"updateResultsPosition",value:function(){this.dom.searchNavigation&&this.dom.searchNavigation.find("[data-id=resultsCount]").text(this.resultsPosition())}},{key:"updateSearchNavigationButtons",value:function(){this.dom.searchNavigation&&(this.dom.searchNavigation.find(".prev").attr("disabled",!this.currentMatchIndex),this.dom.searchNavigation.find(".next").attr("disabled",this.currentMatchIndex+1===this.matches.length))}},{key:"teardownSearchNavigation",value:function(){this.dom.searchNavigation||(this.dom.searchNavigation=o(".BRsearch-navigation")),this.dom.searchNavigation.length&&(this.dom.searchNavigation.off(".searchNavigation").remove(),this.dom.searchNavigation=null,this.br.resize())}},{key:"setCurrentMatchIndex",value:function(){var e;this.br.mode!==this.br.constModeThumb?(e=this.br.mode===this.br.constMode2up?this.find2upMatchingSearchResult():this.find1upMatchingSearchResult(),this.currentMatchIndex=this.matches.indexOf(e)):this.currentMatchIndex=-1}},{key:"find1upMatchingSearchResult",value:function(){var e=this;return this.matches.find((function(t){return e.br.currentIndex()===t.par[0].page-1}))}},{key:"find2upMatchingSearchResult",value:function(){var e=this;return this.matches.find((function(t){return e.br._isIndexDisplayed(t.par[0].page-1)}))}},{key:"updateSearchNavigation",value:function(){this.matches.length&&(this.setCurrentMatchIndex(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}},{key:"togglePinsFor",value:function(e){var t=e?"visible":"hidden";this.br.refs.$BRfooter.find(".BRsearch").css({visibility:t})}},{key:"buildToolbarSearch",value:function(){var e=document.createElement("span");return e.classList.add("BRtoolbarSection","BRtoolbarSectionSearch"),e.innerHTML='\n <form class="BRbooksearch desktop">\n <input type="search" name="query" class="BRsearchInput" value="" placeholder="Search inside"/>\n <button type="submit" class="BRsearchSubmit">\n <img src="'.concat(this.br.imagesBaseURL,'icon_search_button.svg" />\n </button>\n </form>\n '),e}},{key:"renderPins",value:function(e){var t=this;e.forEach((function(e){var r=t.br.book.leafNumToIndex(e.par[0].page),n=t.br.constructor.util.cssPercentage(r,t.br.book.getNumLeafs()-1),a=e.html;if(a.length>200){var i=Math.max(0,a.indexOf("<mark>")-100);0!=i&&(a="…"+e.html.substring(i).replace(/^\S+/,""))}o("<div>").addClass("BRsearch").css({left:n}).attr("title","Search result").append('\n <div class="BRquery">\n <main>'.concat(a,"</main>\n <footer>Page ").concat(e.displayPageNumber,"</footer>\n </div>\n ")).appendTo(t.br.$(".BRnavline")).on("mouseenter",(function(e){var t=e.currentTarget,r=t.querySelector(".BRquery"),n=r.getBoundingClientRect(),a=t.getBoundingClientRect(),i=2*parseInt(getComputedStyle(r).paddingLeft);n.x-i<0&&r.style.setProperty("transform","translateX(-".concat(a.left-i,"px)")),o(".BRsearch,.BRchapter").removeClass("front"),o(e.target).addClass("front")})).on("mouseleave",(function(e){return o(e.target).removeClass("front")})).on("click",(function(){t.br._searchPluginGoToResult(e.matchIndex)}))}))}},{key:"toggleSearchPending",value:function(e){var t=this;e?this.br.showProgressPopup("Search results will appear below...",(function(){return t.progressPopupClosed()})):this.br.removeProgressPopup()}},{key:"progressPopupClosed",value:function(){this.toggleSearchPending(),this.cancelSearch()}},{key:"renderErrorModal",value:function(){var e="".concat(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?"":"The text may still be processing. ","Please try again.");this.renderModalMessage("\n Sorry, there was an error with your search.\n <br />\n ".concat(e,"\n ")),this.delayModalRemovalFor(4e3)}},{key:"renderBookNotIndexedModal",value:function(){this.renderModalMessage("\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n "),this.delayModalRemovalFor(5e3)}},{key:"renderResultsEmptyModal",value:function(){this.renderModalMessage("No matches were found."),this.delayModalRemovalFor(2e3)}},{key:"renderModalMessage",value:function(e){var t=document.createElement("div");t.classList.add("BRprogresspopup","search_modal"),t.innerHTML=e,document.querySelector(this.br.el).append(t)}},{key:"delayModalRemovalFor",value:function(e){setTimeout(this.br.removeProgressPopup.bind(this.br),e)}},{key:"submitHandler",value:function(e){e.preventDefault();var t=e.target.querySelector('[name="query"]').value;return!!t.length&&(this.br.search(t),this.emptyMatches(),this.toggleSearchPending(!0),!1)}},{key:"handleSearchCallback",value:function(e,t){var r=this,n=t.results,a=t.options;this.matches=n.matches,this.setCurrentMatchIndex(),this.teardownSearchNavigation(),this.renderSearchNavigation(),this.bindSearchNavigationEvents(),this.renderPins(n.matches),this.toggleSearchPending(!1),a.goToFirstResult?o(document).one("BookReader:pageChanged",(function(){r.br.resize()})):this.br.resize()}},{key:"handleSearchStarted",value:function(){this.emptyMatches(),this.br.removeSearchHilites(),this.removeResultPins(),this.toggleSearchPending(!0),this.teardownSearchNavigation(),this.setQuery(this.br.searchTerm)}},{key:"handleSearchCallbackError",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.toggleSearchPending(!1);var r=null==t||null===(e=t.detail)||void 0===e||null===(e=e.props)||void 0===e||null===(e=e.results)||void 0===e?void 0:e.indexed;this.renderErrorModal(r)}},{key:"handleSearchCallbackBookNotIndexed",value:function(){this.toggleSearchPending(!1),this.renderBookNotIndexedModal()}},{key:"handleSearchCallbackEmpty",value:function(){this.toggleSearchPending(!1),this.renderResultsEmptyModal()}},{key:"bindEvents",value:function(){var e="BookReader:";window.addEventListener("".concat(e,"SearchCallbackError"),this.handleSearchCallbackError.bind(this)),o(document).on("".concat(e,"SearchCallback"),this.handleSearchCallback.bind(this)).on("".concat(e,"SearchStarted"),this.handleSearchStarted.bind(this)).on("".concat(e,"SearchCallbackBookNotIndexed"),this.handleSearchCallbackBookNotIndexed.bind(this)).on("".concat(e,"SearchCallbackEmpty"),this.handleSearchCallbackEmpty.bind(this)).on("".concat(e,"pageChanged"),this.updateSearchNavigation.bind(this)),this.dom.toolbarSearch.querySelector("form").addEventListener("submit",this.submitHandler.bind(this))}}],t&&s(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}(),l=h;function u(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,i=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){s=!0,o=e},f:function(){try{i||null==r.return||r.return()}finally{if(s)throw o}}}}function d(e,t){if(e){if("string"==typeof e)return f(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function p(e,t,r){var a=(0,n.escapeRegExp)((0,n.escapeHTML)(t)),o=(0,n.escapeRegExp)((0,n.escapeHTML)(r)),i=new RegExp("".concat(a,"([^]+?)").concat(o),"g");return(0,n.escapeHTML)(e).replace(i,"<mark>$1</mark>").replace(/(\b)- /g,"$1")}r(4864);var v,g=r(1669),m=r(1669);function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function b(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=k(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,i=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){s=!0,o=e},f:function(){try{i||null==r.return||r.return()}finally{if(s)throw o}}}}function k(e,t){if(e){if("string"==typeof e)return S(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,t):void 0}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function x(){x=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function h(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{h({},"")}catch(e){h=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof m?t:m,i=Object.create(o.prototype),s=new N(n||[]);return a(i,"_invoke",{value:C(e,r,s)}),i}function u(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var d="suspendedStart",f="suspendedYield",p="executing",v="completed",g={};function m(){}function b(){}function k(){}var S={};h(S,i,(function(){return this}));var R=Object.getPrototypeOf,w=R&&R(R(L([])));w&&w!==r&&n.call(w,i)&&(S=w);var P=k.prototype=m.prototype=Object.create(S);function I(e){["next","throw","return"].forEach((function(t){h(e,t,(function(e){return this._invoke(t,e)}))}))}function B(e,t){function r(a,o,i,s){var c=u(e[a],e,o);if("throw"!==c.type){var h=c.arg,l=h.value;return l&&"object"==y(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){h.value=e,i(h)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function C(t,r,n){var a=d;return function(o,i){if(a===p)throw Error("Generator is already running");if(a===v){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=M(s,n);if(c){if(c===g)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===d)throw a=v,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=p;var h=u(t,r,n);if("normal"===h.type){if(a=n.done?v:f,h.arg===g)continue;return{value:h.arg,done:n.done}}"throw"===h.type&&(a=v,n.method="throw",n.arg=h.arg)}}}function M(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,M(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),g;var o=u(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,g;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,g):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function T(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(T,this),this.reset(!0)}function L(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}throw new TypeError(y(t)+" is not iterable")}return b.prototype=k,a(P,"constructor",{value:k,configurable:!0}),a(k,"constructor",{value:b,configurable:!0}),b.displayName=h(k,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===b||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,h(e,c,"GeneratorFunction")),e.prototype=Object.create(P),e},t.awrap=function(e){return{__await:e}},I(B.prototype),h(B.prototype,s,(function(){return this})),t.AsyncIterator=B,t.async=function(e,r,n,a,o){void 0===o&&(o=Promise);var i=new B(l(e,r,n,a),o);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},I(P),h(P,c,"Generator"),h(P,i,(function(){return this})),h(P,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=L,N.prototype={constructor:N,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(E),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return s.type="throw",s.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),h=n.call(i,"finallyLoc");if(c&&h){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!h)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,g):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),g},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),E(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;E(r)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:L(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},t}function R(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function w(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function i(e){R(o,n,a,i,s,"next",e)}function s(e){R(o,n,a,i,s,"throw",e)}i(void 0)}))}}g.extend(BookReader.defaultOptions,{server:"ia600609.us.archive.org",bookId:"",subPrefix:"",bookPath:"",enableSearch:!0,searchInsideProtocol:"https",searchInsideUrl:"/fulltext/inside.php",searchInsidePreTag:"{{{",searchInsidePostTag:"}}}",initialSearchTerm:null}),BookReader.prototype.setup=(v=BookReader.prototype.setup,function(e){var t=this;v.call(this,e),this.searchTerm="",this.searchResults=null,this.searchInsideUrl=e.searchInsideUrl,this.enableSearch=e.enableSearch,this.bookId=e.bookId,this.server=e.server,this.subPrefix=e.subPrefix,this.bookPath=e.bookPath,this.searchXHR=null,this._cancelSearch.bind(this),this.cancelSearchRequest.bind(this),this._searchBoxesByIndex={},this.enableSearch?this.searchView=new l({br:this,searchCancelledCallback:function(){t._cancelSearch(),t.trigger("SearchCanceled",{term:t.searchTerm,instance:t})}}):this.searchView=null}),BookReader.prototype.init=function(e){return function(){e.call(this),this.enableSearch&&(this.searchView.init(),this.options.initialSearchTerm&&this.search(this.options.initialSearchTerm,{goToFirstResult:this.options.goToFirstResult,suppressFragmentChange:!1}))}}(BookReader.prototype.init),BookReader.prototype.buildToolbarElement=function(e){return function(){var t=e.call(this);if(this.enableSearch)return this.searchView.dom.toolbarSearch&&t.find(".BRtoolbarSectionInfo").after(this.searchView.dom.toolbarSearch),t}}(BookReader.prototype.buildToolbarElement),BookReader.prototype._createPageContainer=function(e){return function(t){var r=e.call(this,t);if(this.enableSearch&&r.page&&t in this._searchBoxesByIndex){var n=r.page.index,o=this._searchBoxesByIndex[n];(0,a.KL)("searchHiliteLayer",o,r.page,r.$container[0],o.map((function(e){return"match-index-".concat(e.matchIndex)})))}return r}}(BookReader.prototype._createPageContainer),BookReader.prototype.search=w(x().mark((function e(){var t,r,n,a,o,i,s,c,h,l,u,d,f=this,p=arguments;return x().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=p.length>0&&void 0!==p[0]?p[0]:"",r=p.length>1&&void 0!==p[1]?p[1]:{},n={goToFirstResult:!1,disablePopup:!1,suppressFragmentChange:!1,error:null,success:null},a=g.extend({},n,r),this.suppressFragmentChange=a.suppressFragmentChange,this.searchCancelled=!1,this.searchTerm=t.replace(/\//g," "),a.suppressFragmentChange||this.trigger(BookReader.eventNames.fragmentChange),o=this.server.replace(/:.+/,""),i="".concat(this.options.searchInsideProtocol,"://").concat(o).concat(this.searchInsideUrl,"?"),s=this.bookPath,c="/".concat(this.subPrefix),this.bookPath.length-this.bookPath.lastIndexOf(c)==c.length&&(s=this.bookPath.substr(0,this.bookPath.length-c.length)),h={item_id:this.bookId,doc:this.subPrefix,path:s,q:t,pre_tag:this.options.searchInsidePreTag,post_tag:this.options.searchInsidePostTag},l=m.param(h).replace(/%2F/g,"/"),u="".concat(i).concat(l),d=function(e){if(!f.searchCancelled){var t=e.error||!e.matches.length,r="function"==typeof a.error,n="function"==typeof a.success;t?(console.error("Search Inside Response Error",e.error||"matches.length == 0"),r?a.error.call(f,e,a):f.BRSearchCallbackError(e,a)):n?a.success.call(f,e,a):f.BRSearchCallback(e,a)}},this.trigger("SearchStarted",{term:this.searchTerm,instance:this}),e.t0=d,e.next=21,m.ajax({url:u,cache:!0,xhrFields:{withCredentials:this.protected},beforeSend:function(e){f.searchXHR=e}});case 21:e.t1=e.sent,(0,e.t0)(e.t1);case 23:case"end":return e.stop()}}),e,this)}))),BookReader.prototype._cancelSearch=function(){var e;null===(e=this.searchXHR)||void 0===e||e.abort(),this.searchView.clearSearchFieldAndResults(!1),this.searchTerm="",this.searchXHR=null,this.searchCancelled=!0,this.searchResults=[]},BookReader.prototype.cancelSearchRequest=function(){this.searchCancelled=!0,null!==this.searchXHR&&(this._cancelSearch(),this.searchView.toggleSearchPending(),this.trigger("SearchCanceled",{term:this.searchTerm,instance:this}))},BookReader.prototype.BRSearchCallback=function(e,t){var r=this;!function(e,t,n,a){var o,i,s,c,h=u(e.matches.entries());try{for(h.s();!(o=h.n()).done;){var l=(s=o.value,c=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,s=[],c=!0,h=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){h=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(h)throw a}}return s}}(s,c)||d(s,c)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),f=l[0],v=l[1];v.matchIndex=f,v.displayPageNumber=(i=v.par[0].page,r.book.getPageNum(r.book.leafNumToIndex(i))),v.html=p(v.text,n,a);var g,m=u(v.par);try{for(m.s();!(g=m.n()).done;){var y,b=u(g.value.boxes);try{for(b.s();!(y=b.n()).done;)y.value.matchIndex=f}catch(e){b.e(e)}finally{b.f()}}}catch(e){m.e(e)}finally{m.f()}}}catch(e){h.e(e)}finally{h.f()}}(e,0,this.options.searchInsidePreTag,this.options.searchInsidePostTag),this.searchResults=e||[],this.updateSearchHilites(),this.removeProgressPopup(),t.goToFirstResult&&this._searchPluginGoToResult(0),this.trigger("SearchCallback",{results:e,options:t,instance:this})},BookReader.prototype.BRSearchCallbackError=function(e){this._BRSearchCallbackError(e)},BookReader.prototype._BRSearchCallbackError=function(e){this.searchResults=e;var t={term:this.searchTerm,instance:this};if(e.error){var r=Object.assign({},t,{results:e});this.trigger("SearchCallbackError",r)}else if(0==e.matches.length){if(!1===e.indexed)return void this.trigger("SearchCallbackBookNotIndexed",t);this.trigger("SearchCallbackEmpty",t)}},BookReader.prototype.updateSearchHilites=function(){var e,t=(null===(e=this.searchResults)||void 0===e?void 0:e.matches)||[],r={};this.removeSearchHilites();var n,o,i,s=b(t);try{for(s.s();!(n=s.n()).done;){var c,h=b(n.value.par[0].boxes);try{for(h.s();!(c=h.n()).done;){var l=c.value,u=this.book.leafNumToIndex(l.page);(r[u]||(r[u]=[])).push(l)}}catch(e){h.e(e)}finally{h.f()}}}catch(e){s.e(e)}finally{s.f()}for(var d=0,f=Object.entries(r);d<f.length;d++){var p,v=(o=f[d],i=2,function(e){if(Array.isArray(e))return e}(o)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,s=[],c=!0,h=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){h=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(h)throw a}}return s}}(o,i)||k(o,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=v[0],m=v[1],y=parseFloat(g),S=this.book.getPage(y),x=b(this.getActivePageContainerElementsForIndex(y));try{for(x.s();!(p=x.n()).done;){var R=p.value;(0,a.KL)("searchHiliteLayer",m,S,R,m.map((function(e){return"match-index-".concat(e.matchIndex)})))}}catch(e){x.e(e)}finally{x.f()}}this._searchBoxesByIndex=r},BookReader.prototype.removeSearchHilites=function(){m(this.getActivePageContainerElements()).find(".searchHiliteLayer").remove()},BookReader.prototype._searchPluginGoToResult=function(){var e=w(x().mark((function e(t){var r,a,o,i,s,c,h,l,u,d,f,p;return x().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=null===(r=this.searchResults)||void 0===r?void 0:r.matches[t],o=this.book,i=o.leafNumToIndex(a.par[0].page),s=o.getPage(i),c=Math.abs(this.currentIndex()-i)<3,h=!1,s.isViewable){e.next=17;break}return e.next=9,fetch("/services/bookreader/request_page?"+new URLSearchParams({id:this.options.bookId,subprefix:this.options.subPrefix,leafNum:s.leafNum})).then((function(e){return e.json()}));case 9:l=e.sent,u=b(l.value);try{for(u.s();!(d=u.n()).done;)f=d.value,o.getPage(o.leafNumToIndex(f)).makeViewable()}catch(e){u.e(e)}finally{u.f()}if(l.value.length||(o.getPage(i).makeViewable(),h=!0),this._modes.mode1Up.mode1UpLit.updatePages(),this.activeMode!=this._modes.mode1Up){e.next=17;break}return e.next=17,this._modes.mode1Up.mode1UpLit.updateComplete;case 17:return this._isIndexDisplayed(i)||(this.suppressFragmentChange=!1,this.jumpToIndex(i)),h&&o.getPage(i).makeViewable(!1),e.next=21,(0,n.poll)((function(){return m("rect.match-index-".concat(a.matchIndex))}),{until:function(e){return e.length>0}});case 21:if(!(p=e.sent).length){e.next=28;break}return p.css("animation","none"),p[0].scrollIntoView({block:this.constMode1up==this.mode||this.isFullscreenActive?"center":"nearest",inline:"center",behavior:c?"smooth":"auto"}),e.next=27,new Promise((function(e){return setTimeout(e,100)}));case 27:p.removeAttr("style");case 28:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),BookReader.prototype.removeSearchResults=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.removeSearchHilites(),this.searchTerm=null,this.searchResults=null,e||this.trigger(BookReader.eventNames.fragmentChange)},BookReader.prototype.searchHighlightVisible=function(){var e=this,t=this.searchResults,r=[];if(null==t)return!1;if(this.constMode2up==this.mode)r=[this.twoPage.currentIndexL,this.twoPage.currentIndexR];else{if(this.constMode1up!=this.mode)return!1;r=[this.currentIndex()]}return t.matches.some((function(t){return t.par[0].boxes.some((function(t){var n=e.book.leafNumToIndex(t.page);if(g.inArray(n,r)>=0)return!0}))})),!1}},5506:function(e,t,r){var n=r(6518),a=r(2357).entries;n({target:"Object",stat:!0},{entries:function(e){return a(e)}})}},function(e){e(e.s=9007)}]);
2
+ "use strict";(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[924],{9007:function(e,t,r){r(2675),r(9463),r(6412),r(2259),r(8125),r(8706),r(113),r(3418),r(3792),r(2062),r(4490),r(4782),r(2010),r(4731),r(479),r(9085),r(5506),r(875),r(6099),r(8459),r(3362),r(7495),r(8781),r(7764),r(5440),r(5746),r(3500),r(2953),r(8408);var n=r(6257),a=r(1774),o=(r(5700),r(9572),r(8130),r(8940),r(1669));function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function s(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function c(e){var t=function(e,t){if("object"!=i(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!=i(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}var h=function(){return e=function e(t){var r=t.br,n=t.searchCancelledCallback,a=void 0===n?function(){}:n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.br=r,this.matches=[],this.cacheDOMElements(),this.cancelSearch=a},t=[{key:"init",value:function(){this.bindEvents()}},{key:"cacheDOMElements",value:function(){this.dom={},this.dom.toolbarSearch=this.buildToolbarSearch()}},{key:"setQuery",value:function(e){this.br.$('[name="query"]').val(e)}},{key:"emptyMatches",value:function(){this.matches=[]}},{key:"removeResultPins",value:function(){this.br.$(".BRnavpos .BRsearch").remove()}},{key:"clearSearchFieldAndResults",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.br.removeSearchResults(),this.removeResultPins(),this.emptyMatches(),this.setQuery(""),this.teardownSearchNavigation(),e&&this.br.trigger("SearchResultsCleared")}},{key:"toggleSidebar",value:function(){this.br.trigger("ToggleSearchMenu")}},{key:"renderSearchNavigation",value:function(){var e="BRsearch-navigation";o(".BRnav").before('\n <div class="'.concat(e,'">\n <button class="toggle-sidebar">\n <h4>\n <span class="icon icon-search"></span> Results\n </h4>\n </button>\n <div class="pagination">\n <button class="prev" title="Previous result"><span class="icon icon-chevron hflip"></span></button>\n <span data-id="resultsCount">').concat(this.resultsPosition(),'</span>\n <button class="next" title="Next result"><span class="icon icon-chevron"></button>\n </div>\n <button class="clear" title="Clear search results">\n <span class="icon icon-close"></span>\n </button>\n </div>\n ')),this.dom.searchNavigation=o(".".concat(e))}},{key:"resultsPosition",value:function(){var e="".concat(this.matches.length," result").concat(1===this.matches.length?"":"s");return~this.currentMatchIndex&&(e="".concat(this.currentMatchIndex+1," / ").concat(this.matches.length)),e}},{key:"bindSearchNavigationEvents",value:function(){if(this.dom.searchNavigation){var e="searchNavigation";this.dom.searchNavigation.on("click.".concat(e),".clear",this.clearSearchFieldAndResults.bind(this)).on("click.".concat(e),".prev",this.showPrevResult.bind(this)).on("click.".concat(e),".next",this.showNextResult.bind(this)).on("click.".concat(e),".toggle-sidebar",this.toggleSidebar.bind(this)).on("click.".concat(e),!1)}}},{key:"showPrevResult",value:function(){0!==this.currentMatchIndex&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((function(e,t,r){return t[0]>r}))+1),this.br.$(".BRnavline .BRsearch").eq(--this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}},{key:"showNextResult",value:function(){this.currentMatchIndex+1!==this.matches.length&&(this.br.mode===this.br.constModeThumb&&this.br.switchMode(this.br.constMode1up),~this.currentMatchIndex||(this.currentMatchIndex=this.getClosestMatchIndex((function(e,t,r){return e[e.length-1]>r}))-1),this.br.$(".BRnavline .BRsearch").eq(++this.currentMatchIndex).click(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}},{key:"getClosestMatchIndex",value:function(e){var t=this.matches.map((function(e){return e.par[0].page})),r=this.br.currentIndex()+1,n=function(t,r){if(1===t.length)return t[0];var a=t.slice(0,t.length/2),o=t.slice(t.length/2);return n(e(a,o,r)?a:o,r)},a=n(t,r);return this.matches.indexOf(this.matches.find((function(e){return e.par[0].page===a})))}},{key:"updateResultsPosition",value:function(){this.dom.searchNavigation&&this.dom.searchNavigation.find("[data-id=resultsCount]").text(this.resultsPosition())}},{key:"updateSearchNavigationButtons",value:function(){this.dom.searchNavigation&&(this.dom.searchNavigation.find(".prev").attr("disabled",!this.currentMatchIndex),this.dom.searchNavigation.find(".next").attr("disabled",this.currentMatchIndex+1===this.matches.length))}},{key:"teardownSearchNavigation",value:function(){this.dom.searchNavigation||(this.dom.searchNavigation=o(".BRsearch-navigation")),this.dom.searchNavigation.length&&(this.dom.searchNavigation.off(".searchNavigation").remove(),this.dom.searchNavigation=null,this.br.resize())}},{key:"setCurrentMatchIndex",value:function(){var e;this.br.mode!==this.br.constModeThumb?(e=this.br.mode===this.br.constMode2up?this.find2upMatchingSearchResult():this.find1upMatchingSearchResult(),this.currentMatchIndex=this.matches.indexOf(e)):this.currentMatchIndex=-1}},{key:"find1upMatchingSearchResult",value:function(){var e=this;return this.matches.find((function(t){return e.br.currentIndex()===t.par[0].page-1}))}},{key:"find2upMatchingSearchResult",value:function(){var e=this;return this.matches.find((function(t){return e.br._isIndexDisplayed(t.par[0].page-1)}))}},{key:"updateSearchNavigation",value:function(){this.matches.length&&(this.setCurrentMatchIndex(),this.updateResultsPosition(),this.updateSearchNavigationButtons())}},{key:"togglePinsFor",value:function(e){var t=e?"visible":"hidden";this.br.refs.$BRfooter.find(".BRsearch").css({visibility:t})}},{key:"buildToolbarSearch",value:function(){var e=document.createElement("span");return e.classList.add("BRtoolbarSection","BRtoolbarSectionSearch"),e.innerHTML='\n <form class="BRbooksearch desktop">\n <input type="search" name="query" class="BRsearchInput" value="" placeholder="Search inside"/>\n <button type="submit" class="BRsearchSubmit">\n <img src="'.concat(this.br.imagesBaseURL,'icon_search_button.svg" />\n </button>\n </form>\n '),e}},{key:"renderPins",value:function(e){var t=this;e.forEach((function(e){var r=t.br.book.leafNumToIndex(e.par[0].page),n=t.br.constructor.util.cssPercentage(r,t.br.book.getNumLeafs()-1),a=e.html;if(a.length>200){var i=Math.max(0,a.indexOf("<mark>")-100);0!=i&&(a="…"+e.html.substring(i).replace(/^\S+/,""))}o("<div>").addClass("BRsearch").css({left:n}).attr("title","Search result").append('\n <div class="BRquery">\n <main>'.concat(a,"</main>\n <footer>Page ").concat(e.displayPageNumber,"</footer>\n </div>\n ")).appendTo(t.br.$(".BRnavline")).on("mouseenter",(function(e){var t=e.currentTarget,r=t.querySelector(".BRquery"),n=r.getBoundingClientRect(),a=t.getBoundingClientRect(),i=2*parseInt(getComputedStyle(r).paddingLeft);n.x-i<0&&r.style.setProperty("transform","translateX(-".concat(a.left-i,"px)")),o(".BRsearch,.BRchapter").removeClass("front"),o(e.target).addClass("front")})).on("mouseleave",(function(e){return o(e.target).removeClass("front")})).on("click",(function(){t.br._searchPluginGoToResult(e.matchIndex)}))}))}},{key:"toggleSearchPending",value:function(e){var t=this;e?this.br.showProgressPopup("Search results will appear below...",(function(){return t.progressPopupClosed()})):this.br.removeProgressPopup()}},{key:"progressPopupClosed",value:function(){this.toggleSearchPending(),this.cancelSearch()}},{key:"renderErrorModal",value:function(){var e="".concat(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?"":"The text may still be processing. ","Please try again.");this.renderModalMessage("\n Sorry, there was an error with your search.\n <br />\n ".concat(e,"\n ")),this.delayModalRemovalFor(4e3)}},{key:"renderBookNotIndexedModal",value:function(){this.renderModalMessage("\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n "),this.delayModalRemovalFor(5e3)}},{key:"renderResultsEmptyModal",value:function(){this.renderModalMessage("No matches were found."),this.delayModalRemovalFor(2e3)}},{key:"renderModalMessage",value:function(e){var t=document.createElement("div");t.classList.add("BRprogresspopup","search_modal"),t.innerHTML=e,document.querySelector(this.br.el).append(t)}},{key:"delayModalRemovalFor",value:function(e){setTimeout(this.br.removeProgressPopup.bind(this.br),e)}},{key:"submitHandler",value:function(e){e.preventDefault();var t=e.target.querySelector('[name="query"]').value;return!!t.length&&(this.br.search(t),this.emptyMatches(),this.toggleSearchPending(!0),!1)}},{key:"handleSearchCallback",value:function(e,t){var r=this,n=t.results,a=t.options;this.matches=n.matches,this.setCurrentMatchIndex(),this.teardownSearchNavigation(),this.renderSearchNavigation(),this.bindSearchNavigationEvents(),this.renderPins(n.matches),this.toggleSearchPending(!1),a.goToFirstResult?o(document).one("BookReader:pageChanged",(function(){r.br.resize()})):this.br.resize()}},{key:"handleSearchStarted",value:function(){this.emptyMatches(),this.br.removeSearchHilites(),this.removeResultPins(),this.toggleSearchPending(!0),this.teardownSearchNavigation(),this.setQuery(this.br.searchTerm)}},{key:"handleSearchCallbackError",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.toggleSearchPending(!1);var r=null==t||null===(e=t.detail)||void 0===e||null===(e=e.props)||void 0===e||null===(e=e.results)||void 0===e?void 0:e.indexed;this.renderErrorModal(r)}},{key:"handleSearchCallbackBookNotIndexed",value:function(){this.toggleSearchPending(!1),this.renderBookNotIndexedModal()}},{key:"handleSearchCallbackEmpty",value:function(){this.toggleSearchPending(!1),this.renderResultsEmptyModal()}},{key:"bindEvents",value:function(){var e="BookReader:";window.addEventListener("".concat(e,"SearchCallbackError"),this.handleSearchCallbackError.bind(this)),o(document).on("".concat(e,"SearchCallback"),this.handleSearchCallback.bind(this)).on("".concat(e,"SearchStarted"),this.handleSearchStarted.bind(this)).on("".concat(e,"SearchCallbackBookNotIndexed"),this.handleSearchCallbackBookNotIndexed.bind(this)).on("".concat(e,"SearchCallbackEmpty"),this.handleSearchCallbackEmpty.bind(this)).on("".concat(e,"pageChanged"),this.updateSearchNavigation.bind(this)),this.dom.toolbarSearch.querySelector("form").addEventListener("submit",this.submitHandler.bind(this))}}],t&&s(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}(),l=h;function u(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=d(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,i=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){s=!0,o=e},f:function(){try{i||null==r.return||r.return()}finally{if(s)throw o}}}}function d(e,t){if(e){if("string"==typeof e)return f(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?f(e,t):void 0}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function p(e,t,r){var a=(0,n.escapeRegExp)((0,n.escapeHTML)(t)),o=(0,n.escapeRegExp)((0,n.escapeHTML)(r)),i=new RegExp("".concat(a,"([^]+?)").concat(o),"g");return(0,n.escapeHTML)(e).replace(i,"<mark>$1</mark>").replace(/(\b)- /g,"$1")}r(4864);var v,g=r(1669),m=r(1669);function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function b(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=k(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,i=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){s=!0,o=e},f:function(){try{i||null==r.return||r.return()}finally{if(s)throw o}}}}function k(e,t){if(e){if("string"==typeof e)return S(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,t):void 0}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function x(){x=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function h(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{h({},"")}catch(e){h=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof m?t:m,i=Object.create(o.prototype),s=new N(n||[]);return a(i,"_invoke",{value:C(e,r,s)}),i}function u(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var d="suspendedStart",f="suspendedYield",p="executing",v="completed",g={};function m(){}function b(){}function k(){}var S={};h(S,i,(function(){return this}));var R=Object.getPrototypeOf,w=R&&R(R(L([])));w&&w!==r&&n.call(w,i)&&(S=w);var P=k.prototype=m.prototype=Object.create(S);function I(e){["next","throw","return"].forEach((function(t){h(e,t,(function(e){return this._invoke(t,e)}))}))}function B(e,t){function r(a,o,i,s){var c=u(e[a],e,o);if("throw"!==c.type){var h=c.arg,l=h.value;return l&&"object"==y(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){h.value=e,i(h)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function C(t,r,n){var a=d;return function(o,i){if(a===p)throw Error("Generator is already running");if(a===v){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=M(s,n);if(c){if(c===g)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===d)throw a=v,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=p;var h=u(t,r,n);if("normal"===h.type){if(a=n.done?v:f,h.arg===g)continue;return{value:h.arg,done:n.done}}"throw"===h.type&&(a=v,n.method="throw",n.arg=h.arg)}}}function M(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,M(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),g;var o=u(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,g;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,g):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,g)}function T(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(T,this),this.reset(!0)}function L(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}throw new TypeError(y(t)+" is not iterable")}return b.prototype=k,a(P,"constructor",{value:k,configurable:!0}),a(k,"constructor",{value:b,configurable:!0}),b.displayName=h(k,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===b||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,h(e,c,"GeneratorFunction")),e.prototype=Object.create(P),e},t.awrap=function(e){return{__await:e}},I(B.prototype),h(B.prototype,s,(function(){return this})),t.AsyncIterator=B,t.async=function(e,r,n,a,o){void 0===o&&(o=Promise);var i=new B(l(e,r,n,a),o);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},I(P),h(P,c,"Generator"),h(P,i,(function(){return this})),h(P,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=L,N.prototype={constructor:N,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(E),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return s.type="throw",s.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),h=n.call(i,"finallyLoc");if(c&&h){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!h)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,g):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),g},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),E(r),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;E(r)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:L(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),g}},t}function R(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function w(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function i(e){R(o,n,a,i,s,"next",e)}function s(e){R(o,n,a,i,s,"throw",e)}i(void 0)}))}}g.extend(BookReader.defaultOptions,{server:"ia600609.us.archive.org",bookId:"",subPrefix:"",bookPath:"",enableSearch:!0,searchInsideProtocol:"https",searchInsideUrl:"/fulltext/inside.php",searchInsidePreTag:"{{{",searchInsidePostTag:"}}}",initialSearchTerm:null}),BookReader.prototype.setup=(v=BookReader.prototype.setup,function(e){var t=this;v.call(this,e),this.searchTerm="",this.searchResults=null,this.searchInsideUrl=e.searchInsideUrl,this.enableSearch=e.enableSearch,this.bookId=e.bookId,this.server=e.server,this.subPrefix=e.subPrefix,this.bookPath=e.bookPath,this.searchXHR=null,this._cancelSearch.bind(this),this.cancelSearchRequest.bind(this),this._searchBoxesByIndex={},this.enableSearch?this.searchView=new l({br:this,searchCancelledCallback:function(){t._cancelSearch(),t.trigger("SearchCanceled",{term:t.searchTerm,instance:t})}}):this.searchView=null}),BookReader.prototype.init=function(e){return function(){e.call(this),this.enableSearch&&(this.searchView.init(),this.options.initialSearchTerm&&this.search(this.options.initialSearchTerm,{goToFirstResult:this.options.goToFirstResult,suppressFragmentChange:!1}))}}(BookReader.prototype.init),BookReader.prototype.buildToolbarElement=function(e){return function(){var t=e.call(this);if(this.enableSearch)return this.searchView.dom.toolbarSearch&&t.find(".BRtoolbarSectionInfo").after(this.searchView.dom.toolbarSearch),t}}(BookReader.prototype.buildToolbarElement),BookReader.prototype._createPageContainer=function(e){return function(t){var r=e.call(this,t);if(this.enableSearch&&r.page&&t in this._searchBoxesByIndex){var n=r.page.index,o=this._searchBoxesByIndex[n];(0,a.KL)("searchHiliteLayer",o,r.page,r.$container[0],o.map((function(e){return"match-index-".concat(e.matchIndex)})))}return r}}(BookReader.prototype._createPageContainer),BookReader.prototype.search=w(x().mark((function e(){var t,r,n,a,o,i,s,c,h,l,u,d,f=this,p=arguments;return x().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=p.length>0&&void 0!==p[0]?p[0]:"",r=p.length>1&&void 0!==p[1]?p[1]:{},n={goToFirstResult:!1,disablePopup:!1,suppressFragmentChange:!1,error:null,success:null},a=g.extend({},n,r),this.suppressFragmentChange=a.suppressFragmentChange,this.searchCancelled=!1,this.searchTerm=t.replace(/\//g," "),a.suppressFragmentChange||this.trigger(BookReader.eventNames.fragmentChange),o=this.server.replace(/:.+/,""),i="".concat(this.options.searchInsideProtocol,"://").concat(o).concat(this.searchInsideUrl,"?"),s=this.bookPath,c="/".concat(this.subPrefix),this.bookPath.length-this.bookPath.lastIndexOf(c)==c.length&&(s=this.bookPath.substr(0,this.bookPath.length-c.length)),h={item_id:this.bookId,doc:this.subPrefix,path:s,q:t,pre_tag:this.options.searchInsidePreTag,post_tag:this.options.searchInsidePostTag},l=m.param(h).replace(/%2F/g,"/"),u="".concat(i).concat(l),d=function(e){if(!f.searchCancelled){var t=e.error||!e.matches.length,r="function"==typeof a.error,n="function"==typeof a.success;t?(console.error("Search Inside Response Error",e.error||"matches.length == 0"),r?a.error.call(f,e,a):f.BRSearchCallbackError(e,a)):n?a.success.call(f,e,a):f.BRSearchCallback(e,a)}},this.trigger("SearchStarted",{term:this.searchTerm,instance:this}),e.t0=d,e.next=21,m.ajax({url:u,cache:!0,xhrFields:{withCredentials:this.protected},beforeSend:function(e){f.searchXHR=e}});case 21:e.t1=e.sent,(0,e.t0)(e.t1);case 23:case"end":return e.stop()}}),e,this)}))),BookReader.prototype._cancelSearch=function(){var e;null===(e=this.searchXHR)||void 0===e||e.abort(),this.searchView.clearSearchFieldAndResults(!1),this.searchTerm="",this.searchXHR=null,this.searchCancelled=!0,this.searchResults=[]},BookReader.prototype.cancelSearchRequest=function(){this.searchCancelled=!0,null!==this.searchXHR&&(this._cancelSearch(),this.searchView.toggleSearchPending(),this.trigger("SearchCanceled",{term:this.searchTerm,instance:this}))},BookReader.prototype.BRSearchCallback=function(e,t){var r=this;!function(e,t,n,a){var o,i,s,c,h=u(e.matches.entries());try{for(h.s();!(o=h.n()).done;){var l=(s=o.value,c=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,s=[],c=!0,h=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){h=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(h)throw a}}return s}}(s,c)||d(s,c)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),f=l[0],v=l[1];v.matchIndex=f,v.displayPageNumber=(i=v.par[0].page,r.book.getPageNum(r.book.leafNumToIndex(i))),v.html=p(v.text,n,a);var g,m=u(v.par);try{for(m.s();!(g=m.n()).done;){var y,b=u(g.value.boxes);try{for(b.s();!(y=b.n()).done;)y.value.matchIndex=f}catch(e){b.e(e)}finally{b.f()}}}catch(e){m.e(e)}finally{m.f()}}}catch(e){h.e(e)}finally{h.f()}}(e,0,this.options.searchInsidePreTag,this.options.searchInsidePostTag),this.searchResults=e||[],this.updateSearchHilites(),this.removeProgressPopup(),t.goToFirstResult&&this._searchPluginGoToResult(0),this.trigger("SearchCallback",{results:e,options:t,instance:this})},BookReader.prototype.BRSearchCallbackError=function(e){this._BRSearchCallbackError(e)},BookReader.prototype._BRSearchCallbackError=function(e){this.searchResults=e;var t={term:this.searchTerm,instance:this};if(e.error){var r=Object.assign({},t,{results:e});this.trigger("SearchCallbackError",r)}else if(0==e.matches.length){if(!1===e.indexed)return void this.trigger("SearchCallbackBookNotIndexed",t);this.trigger("SearchCallbackEmpty",t)}},BookReader.prototype.updateSearchHilites=function(){var e,t=(null===(e=this.searchResults)||void 0===e?void 0:e.matches)||[],r={};this.removeSearchHilites();var n,o,i,s=b(t);try{for(s.s();!(n=s.n()).done;){var c,h=b(n.value.par[0].boxes);try{for(h.s();!(c=h.n()).done;){var l=c.value,u=this.book.leafNumToIndex(l.page);(r[u]||(r[u]=[])).push(l)}}catch(e){h.e(e)}finally{h.f()}}}catch(e){s.e(e)}finally{s.f()}for(var d=0,f=Object.entries(r);d<f.length;d++){var p,v=(o=f[d],i=2,function(e){if(Array.isArray(e))return e}(o)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,s=[],c=!0,h=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){h=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(h)throw a}}return s}}(o,i)||k(o,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=v[0],m=v[1],y=parseFloat(g),S=this.book.getPage(y),x=b(this.getActivePageContainerElementsForIndex(y));try{for(x.s();!(p=x.n()).done;){var R=p.value;(0,a.KL)("searchHiliteLayer",m,S,R,m.map((function(e){return"match-index-".concat(e.matchIndex)})))}}catch(e){x.e(e)}finally{x.f()}}this._searchBoxesByIndex=r},BookReader.prototype.removeSearchHilites=function(){m(this.getActivePageContainerElements()).find(".searchHiliteLayer").remove()},BookReader.prototype._searchPluginGoToResult=function(){var e=w(x().mark((function e(t){var r,a,o,i,s,c,h,l,u,d,f,p;return x().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=null===(r=this.searchResults)||void 0===r?void 0:r.matches[t],o=this.book,i=o.leafNumToIndex(a.par[0].page),s=o.getPage(i),c=Math.abs(this.currentIndex()-i)<3,h=!1,s.isViewable){e.next=17;break}return e.next=9,fetch("/services/bookreader/request_page?"+new URLSearchParams({id:this.options.bookId,subprefix:this.options.subPrefix,leafNum:s.leafNum})).then((function(e){return e.json()}));case 9:l=e.sent,u=b(l.value);try{for(u.s();!(d=u.n()).done;)f=d.value,o.getPage(o.leafNumToIndex(f)).makeViewable()}catch(e){u.e(e)}finally{u.f()}if(l.value.length||(o.getPage(i).makeViewable(),h=!0),this._modes.mode1Up.mode1UpLit.updatePages(),this.activeMode!=this._modes.mode1Up){e.next=17;break}return e.next=17,this._modes.mode1Up.mode1UpLit.updateComplete;case 17:return this._isIndexDisplayed(i)||(this.suppressFragmentChange=!1,this.jumpToIndex(i)),h&&o.getPage(i).makeViewable(!1),e.next=21,(0,n.poll)((function(){return m("rect.match-index-".concat(a.matchIndex))}),{until:function(e){return e.length>0}});case 21:if(!(p=e.sent).length){e.next=28;break}return p.css("animation","none"),p[0].scrollIntoView({block:this.constMode1up==this.mode||this.isFullscreenActive?"center":"nearest",inline:"center",behavior:c?"smooth":"auto"}),e.next=27,new Promise((function(e){return setTimeout(e,100)}));case 27:p.removeAttr("style");case 28:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),BookReader.prototype.removeSearchResults=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.removeSearchHilites(),this.searchTerm=null,this.searchResults=null,e||this.trigger(BookReader.eventNames.fragmentChange)},BookReader.prototype.searchHighlightVisible=function(){var e=this,t=this.searchResults,r=[];if(null==t)return!1;if(this.constMode2up==this.mode)r=[this.twoPage.currentIndexL,this.twoPage.currentIndexR];else{if(this.constMode1up!=this.mode)return!1;r=[this.currentIndex()]}return t.matches.some((function(t){return t.par[0].boxes.some((function(t){var n=e.book.leafNumToIndex(t.page);if(g.inArray(n,r)>=0)return!0}))})),!1}}},function(e){e(e.s=9007)}]);
3
3
  //# sourceMappingURL=plugin.search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.search.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/search/view.js","webpack://@internetarchive/bookreader/./src/plugins/search/utils.js","webpack://@internetarchive/bookreader/./src/plugins/search/plugin.search.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js"],"sourcesContent":["class SearchView {\n /**\n * @param {object} params\n * @param {object} params.br The BookReader instance\n * @param {function} params.cancelSearch callback when a user wants to cancel search\n *\n * @event BookReader:SearchResultsCleared - when the search results nav gets cleared\n * @event BookReader:ToggleSearchMenu - when search results menu should toggle\n */\n constructor({ br, searchCancelledCallback = () => {} }) {\n this.br = br;\n this.matches = [];\n this.cacheDOMElements();\n this.cancelSearch = searchCancelledCallback;\n }\n\n init() {\n this.bindEvents();\n }\n\n cacheDOMElements() {\n this.dom = {};\n // Search input within the top toolbar. Will be removed once the mobile menu is replaced.\n this.dom.toolbarSearch = this.buildToolbarSearch();\n }\n\n /**\n * @param {string} query\n */\n setQuery(query) {\n this.br.$('[name=\"query\"]').val(query);\n }\n\n emptyMatches() {\n this.matches = [];\n }\n\n removeResultPins() {\n this.br.$('.BRnavpos .BRsearch').remove();\n }\n\n clearSearchFieldAndResults(dispatchEventWhenComplete = true) {\n this.br.removeSearchResults();\n this.removeResultPins();\n this.emptyMatches();\n this.setQuery('');\n this.teardownSearchNavigation();\n if (dispatchEventWhenComplete) {\n this.br.trigger('SearchResultsCleared');\n }\n }\n\n toggleSidebar() {\n this.br.trigger('ToggleSearchMenu');\n }\n\n renderSearchNavigation() {\n const selector = 'BRsearch-navigation';\n $('.BRnav').before(`\n <div class=\"${selector}\">\n <button class=\"toggle-sidebar\">\n <h4>\n <span class=\"icon icon-search\"></span> Results\n </h4>\n </button>\n <div class=\"pagination\">\n <button class=\"prev\" title=\"Previous result\"><span class=\"icon icon-chevron hflip\"></span></button>\n <span data-id=\"resultsCount\">${this.resultsPosition()}</span>\n <button class=\"next\" title=\"Next result\"><span class=\"icon icon-chevron\"></button>\n </div>\n <button class=\"clear\" title=\"Clear search results\">\n <span class=\"icon icon-close\"></span>\n </button>\n </div>\n `);\n this.dom.searchNavigation = $(`.${selector}`);\n }\n\n resultsPosition() {\n let positionMessage = `${this.matches.length} result${this.matches.length === 1 ? '' : 's'}`;\n if (~this.currentMatchIndex) {\n positionMessage = `${this.currentMatchIndex + 1} / ${this.matches.length}`;\n }\n return positionMessage;\n }\n\n bindSearchNavigationEvents() {\n if (!this.dom.searchNavigation) { return; }\n const namespace = 'searchNavigation';\n\n this.dom.searchNavigation\n .on(`click.${namespace}`, '.clear', this.clearSearchFieldAndResults.bind(this))\n .on(`click.${namespace}`, '.prev', this.showPrevResult.bind(this))\n .on(`click.${namespace}`, '.next', this.showNextResult.bind(this))\n .on(`click.${namespace}`, '.toggle-sidebar', this.toggleSidebar.bind(this))\n .on(`click.${namespace}`, false);\n }\n\n showPrevResult() {\n if (this.currentMatchIndex === 0) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => end[0] > comparator) + 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(--this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n showNextResult() {\n if (this.currentMatchIndex + 1 === this.matches.length) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => start[start.length - 1] > comparator) - 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(++this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * Obtains closest match based on the logical comparison function passed in.\n * When the comparison function returns true, the starting (left) half of the\n * matches array is used in the binary split, else the ending (right) half is\n * used. A recursive call is made to perform the same split and comparison\n * on the winning half of the matches. This is traditionally known as binary\n * search (https://en.wikipedia.org/wiki/Binary_search_algorithm), and in\n * most cases (medium to large search result arrays) should outperform\n * traversing the array from start to finish. In the case of small arrays,\n * the speed difference is negligible.\n *\n * @param {function} comparisonFn\n * @return {number} matchIndex\n */\n getClosestMatchIndex(comparisonFn) {\n const matchPages = this.matches.map((m) => m.par[0].page);\n const currentPage = this.br.currentIndex() + 1;\n const closestTo = (pool, comparator) => {\n if (pool.length === 1) { return pool[0]; }\n const start = pool.slice(0, pool.length / 2);\n const end = pool.slice(pool.length / 2);\n return closestTo((comparisonFn(start, end, comparator) ? start : end), comparator);\n };\n\n const closestPage = closestTo(matchPages, currentPage);\n return this.matches.indexOf(this.matches.find((m) => m.par[0].page === closestPage));\n }\n\n updateResultsPosition() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('[data-id=resultsCount]').text(this.resultsPosition());\n }\n\n updateSearchNavigationButtons() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('.prev').attr('disabled', !this.currentMatchIndex);\n this.dom.searchNavigation.find('.next').attr('disabled', this.currentMatchIndex + 1 === this.matches.length);\n }\n\n teardownSearchNavigation() {\n if (!this.dom.searchNavigation) {\n this.dom.searchNavigation = $('.BRsearch-navigation');\n }\n if (!this.dom.searchNavigation.length) { return; }\n\n this.dom.searchNavigation.off('.searchNavigation').remove();\n this.dom.searchNavigation = null;\n this.br.resize();\n }\n\n setCurrentMatchIndex() {\n let matchingSearchResult;\n if (this.br.mode === this.br.constModeThumb) {\n this.currentMatchIndex = -1;\n return;\n }\n if (this.br.mode === this.br.constMode2up) {\n matchingSearchResult = this.find2upMatchingSearchResult();\n }\n else {\n matchingSearchResult = this.find1upMatchingSearchResult();\n }\n this.currentMatchIndex = this.matches.indexOf(matchingSearchResult);\n }\n\n find1upMatchingSearchResult() {\n return this.matches.find((m) => this.br.currentIndex() === m.par[0].page - 1);\n }\n\n find2upMatchingSearchResult() {\n return this.matches.find((m) => this.br._isIndexDisplayed(m.par[0].page - 1));\n }\n\n updateSearchNavigation() {\n if (!this.matches.length) { return; }\n\n this.setCurrentMatchIndex();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * @param {boolean} bool\n */\n togglePinsFor(bool) {\n const pinsVisibleState = bool ? 'visible' : 'hidden';\n this.br.refs.$BRfooter.find('.BRsearch').css({ visibility: pinsVisibleState });\n }\n\n buildToolbarSearch() {\n const toolbarSearch = document.createElement('span');\n toolbarSearch.classList.add('BRtoolbarSection', 'BRtoolbarSectionSearch');\n toolbarSearch.innerHTML = `\n <form class=\"BRbooksearch desktop\">\n <input type=\"search\" name=\"query\" class=\"BRsearchInput\" value=\"\" placeholder=\"Search inside\"/>\n <button type=\"submit\" class=\"BRsearchSubmit\">\n <img src=\"${this.br.imagesBaseURL}icon_search_button.svg\" />\n </button>\n </form>\n `;\n return toolbarSearch;\n }\n\n /**\n * @param {array} matches\n */\n renderPins(matches) {\n matches.forEach((match) => {\n const pageIndex = this.br.book.leafNumToIndex(match.par[0].page);\n const uiStringSearch = \"Search result\"; // i18n\n const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.book.getNumLeafs() - 1);\n\n let html = match.html;\n if (html.length > 200) {\n const start = Math.max(0, html.indexOf('<mark>') - 100);\n if (start != 0) {\n html = '…' + match.html\n .substring(start)\n // Make sure at word boundary though\n .replace(/^\\S+/, '');\n }\n }\n // draw marker\n $('<div>')\n .addClass('BRsearch')\n .css({\n left: percentThrough,\n })\n .attr('title', uiStringSearch)\n .append(`\n <div class=\"BRquery\">\n <main>${html}</main>\n <footer>Page ${match.displayPageNumber}</footer>\n </div>\n `)\n .appendTo(this.br.$('.BRnavline'))\n .on(\"mouseenter\", (event) => {\n // remove from other markers then turn on just for this\n // XXX should be done when nav slider moves\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('.BRquery');\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 $('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n })\n .on(\"mouseleave\", (event) => $(event.target).removeClass('front'))\n .on(\"click\", () => { this.br._searchPluginGoToResult(match.matchIndex); });\n });\n }\n\n /**\n * @param {boolean} bool\n */\n toggleSearchPending(bool) {\n if (bool) {\n this.br.showProgressPopup(\"Search results will appear below...\", () => this.progressPopupClosed());\n }\n else {\n this.br.removeProgressPopup();\n }\n }\n\n /**\n * Primary callback when user cancels search popup\n */\n progressPopupClosed() {\n this.toggleSearchPending();\n this.cancelSearch();\n }\n\n renderErrorModal(textIsProcessing = false) {\n const errorDetails = `${!textIsProcessing ? 'The text may still be processing. ' : ''}Please try again.`;\n this.renderModalMessage(`\n Sorry, there was an error with your search.\n <br />\n ${errorDetails}\n `);\n this.delayModalRemovalFor(4000);\n }\n\n renderBookNotIndexedModal() {\n this.renderModalMessage(`\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n `);\n this.delayModalRemovalFor(5000);\n }\n\n renderResultsEmptyModal() {\n this.renderModalMessage('No matches were found.');\n this.delayModalRemovalFor(2000);\n }\n\n /**\n * @param {string} messageHTML The innerHTML string used to popupate the modal contents\n */\n renderModalMessage(messageHTML) {\n const modal = document.createElement('div');\n modal.classList.add('BRprogresspopup', 'search_modal');\n modal.innerHTML = messageHTML;\n document.querySelector(this.br.el).append(modal);\n }\n\n /**\n * @param {number} timeoutMS\n */\n delayModalRemovalFor(timeoutMS) {\n setTimeout(this.br.removeProgressPopup.bind(this.br), timeoutMS);\n }\n\n /**\n * @param {Event} e\n */\n submitHandler(e) {\n e.preventDefault();\n const query = e.target.querySelector('[name=\"query\"]').value;\n if (!query.length) { return false; }\n this.br.search(query);\n this.emptyMatches();\n this.toggleSearchPending(true);\n return false;\n }\n\n /**\n * @param {Event} e\n * @param {object} properties\n * @param {object} properties.results\n * @param {object} properties.options\n */\n handleSearchCallback(e, { results, options }) {\n this.matches = results.matches;\n this.setCurrentMatchIndex();\n this.teardownSearchNavigation();\n this.renderSearchNavigation();\n this.bindSearchNavigationEvents();\n this.renderPins(results.matches);\n this.toggleSearchPending(false);\n if (options.goToFirstResult) {\n $(document).one('BookReader:pageChanged', () => {\n this.br.resize();\n });\n } else {\n this.br.resize();\n }\n }\n\n handleSearchStarted() {\n this.emptyMatches();\n this.br.removeSearchHilites();\n this.removeResultPins();\n this.toggleSearchPending(true);\n this.teardownSearchNavigation();\n this.setQuery(this.br.searchTerm);\n }\n\n /**\n * Event listener for: `BookReader:SearchCallbackError`\n * @param {CustomEvent} event\n */\n handleSearchCallbackError(event = {}) {\n this.toggleSearchPending(false);\n const isIndexed = event?.detail?.props?.results?.indexed;\n this.renderErrorModal(isIndexed);\n }\n\n handleSearchCallbackBookNotIndexed() {\n this.toggleSearchPending(false);\n this.renderBookNotIndexedModal();\n }\n\n handleSearchCallbackEmpty() {\n this.toggleSearchPending(false);\n this.renderResultsEmptyModal();\n }\n\n bindEvents() {\n const namespace = 'BookReader:';\n\n window.addEventListener(`${namespace}SearchCallbackError`, this.handleSearchCallbackError.bind(this));\n $(document).on(`${namespace}SearchCallback`, this.handleSearchCallback.bind(this))\n .on(`${namespace}SearchStarted`, this.handleSearchStarted.bind(this))\n .on(`${namespace}SearchCallbackBookNotIndexed`, this.handleSearchCallbackBookNotIndexed.bind(this))\n .on(`${namespace}SearchCallbackEmpty`, this.handleSearchCallbackEmpty.bind(this))\n .on(`${namespace}pageChanged`, this.updateSearchNavigation.bind(this));\n\n this.dom.toolbarSearch.querySelector('form').addEventListener('submit', this.submitHandler.bind(this));\n }\n}\n\nexport default SearchView;\n","import { escapeHTML, escapeRegExp } from '../../BookReader/utils.js';\n\n/**\n * @param {string} match\n * @param {string} preTag\n * @param {string} postTag\n * @returns {string}\n */\nexport function renderMatch(match, preTag, postTag) {\n // Search results are returned as a text blob with the hits wrapped in\n // triple mustaches. Hits occasionally include text beyond the search\n // term, so everything within the staches is captured and wrapped.\n const preTagRe = escapeRegExp(escapeHTML(preTag));\n const postTagRe = escapeRegExp(escapeHTML(postTag));\n // [^] matches any character, including line breaks\n const regex = new RegExp(`${preTagRe}([^]+?)${postTagRe}`, 'g');\n return escapeHTML(match)\n .replace(regex, '<mark>$1</mark>')\n // Fix trailing hyphens. This over-corrects but is net useful.\n .replace(/(\\b)- /g, '$1');\n}\n\n/**\n * Attach some fields to search inside results\n * @param {SearchInsideResults} results\n * @param {(pageNum: LeafNum) => PageNumString} displayPageNumberFn\n * @param {string} preTag\n * @param {string} postTag\n */\nexport function marshallSearchResults(results, displayPageNumberFn, preTag, postTag) {\n // Attach matchIndex to a few things to make it easier to identify\n // an active/selected match\n for (const [index, match] of results.matches.entries()) {\n match.matchIndex = index;\n match.displayPageNumber = displayPageNumberFn(match.par[0].page);\n match.html = renderMatch(match.text, preTag, postTag);\n for (const par of match.par) {\n for (const box of par.boxes) {\n box.matchIndex = index;\n }\n }\n }\n}\n","// @ts-check\n/* global BookReader */\n/**\n * Plugin for Archive.org book search\n * Events fired at various points throughout search processing are published\n * on the document DOM element. These can be subscribed to using jQuery's event\n * binding method `$.fn.on`. All of the events are prefixed with a BookReader\n * namespace. The events are:\n *\n * @event BookReader:SearchStarted - When a search form is submitted, immediately\n * before an AJAX call is made to request search results\n * @event BookReader:SearchCallback - When the search AJAX call is returned and at\n * least one result is returned. The event callback receives an object\n * with the `results`, plugin `options`, and the BookReader `instance`\n * @event BookReader:SearchCallbackError - When the AJAX request returns an error.\n * Receives the `results` and `instance`\n * @event BookReader:SearchCallbackNotIndexed - When a message is received that\n * the book has not had OCR text indexed yet. Receives `instance`\n * @event BookReader:SearchCallbackEmpty - When no results found. Receives\n * `instance`\n * @event BookReader:SearchCanceled - When no results found. Receives\n * `instance`\n */\nimport { poll } from '../../BookReader/utils.js';\nimport { renderBoxesInPageContainerLayer } from '../../BookReader/PageContainer.js';\nimport SearchView from './view.js';\nimport { marshallSearchResults } from './utils.js';\n/** @typedef {import('../../BookReader/PageContainer').PageContainer} PageContainer */\n/** @typedef {import('../../BookReader/BookModel').PageIndex} PageIndex */\n/** @typedef {import('../../BookReader/BookModel').LeafNum} LeafNum */\n/** @typedef {import('../../BookReader/BookModel').PageNumString} PageNumString */\n\njQuery.extend(BookReader.defaultOptions, {\n server: 'ia600609.us.archive.org',\n bookId: '',\n subPrefix: '',\n bookPath: '',\n enableSearch: true,\n searchInsideProtocol: 'https',\n searchInsideUrl: '/fulltext/inside.php',\n searchInsidePreTag: '{{{',\n searchInsidePostTag: '}}}',\n initialSearchTerm: null,\n});\n\n/** @override */\nBookReader.prototype.setup = (function (super_) {\n return function (options) {\n super_.call(this, options);\n\n this.searchTerm = '';\n this.searchResults = null;\n this.searchInsideUrl = options.searchInsideUrl;\n this.enableSearch = options.enableSearch;\n\n // Base server used by some api calls\n this.bookId = options.bookId;\n this.server = options.server;\n this.subPrefix = options.subPrefix;\n this.bookPath = options.bookPath;\n\n this.searchXHR = null;\n this._cancelSearch.bind(this);\n this.cancelSearchRequest.bind(this);\n\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n this._searchBoxesByIndex = {};\n\n if (this.enableSearch) {\n this.searchView = new SearchView({\n br: this,\n searchCancelledCallback: () => {\n this._cancelSearch();\n this.trigger('SearchCanceled', { term: this.searchTerm, instance: this });\n },\n });\n } else {\n this.searchView = null;\n }\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function (super_) {\n return function () {\n super_.call(this);\n if (!this.enableSearch) return;\n\n this.searchView.init();\n if (this.options.initialSearchTerm) {\n /**\n * this.search() take two parameter\n * 1. this.options.initialSearchTerm - search term\n * 2. {\n * goToFirstResult: this.options.goToFirstResult,\n * suppressFragmentChange: false // always want to change fragment in URL\n * }\n */\n this.search(\n this.options.initialSearchTerm,\n { goToFirstResult: this.options.goToFirstResult, suppressFragmentChange: false },\n );\n }\n };\n})(BookReader.prototype.init);\n\n/** @override */\nBookReader.prototype.buildToolbarElement = (function (super_) {\n return function () {\n const $el = super_.call(this);\n if (!this.enableSearch) { return; }\n if (this.searchView.dom.toolbarSearch) {\n $el.find('.BRtoolbarSectionInfo').after(this.searchView.dom.toolbarSearch);\n }\n return $el;\n };\n})(BookReader.prototype.buildToolbarElement);\n\n/** @override */\nBookReader.prototype._createPageContainer = (function (super_) {\n return function (index) {\n const pageContainer = super_.call(this, index);\n if (this.enableSearch && pageContainer.page && index in this._searchBoxesByIndex) {\n const pageIndex = pageContainer.page.index;\n const boxes = this._searchBoxesByIndex[pageIndex];\n renderBoxesInPageContainerLayer(\n 'searchHiliteLayer',\n boxes,\n pageContainer.page,\n pageContainer.$container[0],\n boxes.map(b => `match-index-${b.matchIndex}`),\n );\n }\n return pageContainer;\n };\n})(BookReader.prototype._createPageContainer);\n\n/**\n * @typedef {object} SearchOptions\n * @property {boolean} goToFirstResult\n * @property {boolean} disablePopup\n * @property {(null|function)} error - @deprecated at v.5.0\n * @property {(null|function)} success - @deprecated at v.5.0\n */\n\n/**\n * Submits search request\n *\n * @param {string} term\n * @param {SearchOptions} overrides\n */\nBookReader.prototype.search = async function(term = '', overrides = {}) {\n /** @type {SearchOptions} */\n const defaultOptions = {\n goToFirstResult: false, /* jump to the first result (default=false) */\n disablePopup: false, /* don't show the modal progress (default=false) */\n suppressFragmentChange: false, /* don't change the URL on initial load */\n error: null, /* optional error handler (default=null) */\n success: null, /* optional success handler (default=null) */\n\n };\n const options = jQuery.extend({}, defaultOptions, overrides);\n this.suppressFragmentChange = options.suppressFragmentChange;\n this.searchCancelled = false;\n\n // strip slashes, since this goes in the url\n this.searchTerm = term.replace(/\\//g, ' ');\n\n if (!options.suppressFragmentChange) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n\n // Add quotes to the term. This is to compenstate for the backends default OR query\n // term = term.replace(/['\"]+/g, '');\n // term = '\"' + term + '\"';\n\n // Remove the port and userdir\n const serverPath = this.server.replace(/:.+/, '');\n const baseUrl = `${this.options.searchInsideProtocol}://${serverPath}${this.searchInsideUrl}?`;\n\n // Remove subPrefix from end of path\n let path = this.bookPath;\n const subPrefixWithSlash = `/${this.subPrefix}`;\n if (this.bookPath.length - this.bookPath.lastIndexOf(subPrefixWithSlash) == subPrefixWithSlash.length) {\n path = this.bookPath.substr(0, this.bookPath.length - subPrefixWithSlash.length);\n }\n\n const urlParams = {\n item_id: this.bookId,\n doc: this.subPrefix,\n path,\n q: term,\n pre_tag: this.options.searchInsidePreTag,\n post_tag: this.options.searchInsidePostTag,\n };\n\n // NOTE that the API does not expect / (slashes) to be encoded. (%2F) won't work\n const paramStr = $.param(urlParams).replace(/%2F/g, '/');\n\n const url = `${baseUrl}${paramStr}`;\n\n const callSearchResultsCallback = (searchInsideResults) => {\n if (this.searchCancelled) {\n return;\n }\n const responseHasError = searchInsideResults.error || !searchInsideResults.matches.length;\n const hasCustomError = typeof options.error === 'function';\n const hasCustomSuccess = typeof options.success === 'function';\n\n if (responseHasError) {\n console.error('Search Inside Response Error', searchInsideResults.error || 'matches.length == 0');\n hasCustomError\n ? options.error.call(this, searchInsideResults, options)\n : this.BRSearchCallbackError(searchInsideResults, options);\n } else {\n hasCustomSuccess\n ? options.success.call(this, searchInsideResults, options)\n : this.BRSearchCallback(searchInsideResults, options);\n }\n };\n\n this.trigger('SearchStarted', { term: this.searchTerm, instance: this });\n callSearchResultsCallback(await $.ajax({\n url: url,\n cache: true,\n xhrFields: {\n withCredentials: this.protected,\n },\n beforeSend: xhr => { this.searchXHR = xhr; },\n }));\n};\n\n/**\n * cancels AJAX Call\n * emits custom event\n */\nBookReader.prototype._cancelSearch = function () {\n this.searchXHR?.abort();\n this.searchView.clearSearchFieldAndResults(false);\n this.searchTerm = '';\n this.searchXHR = null;\n this.searchCancelled = true;\n this.searchResults = [];\n};\n\n/**\n * External function to cancel search\n * checks for term & xhr in flight before running\n */\nBookReader.prototype.cancelSearchRequest = function () {\n this.searchCancelled = true;\n if (this.searchXHR !== null) {\n this._cancelSearch();\n this.searchView.toggleSearchPending();\n this.trigger('SearchCanceled', { term: this.searchTerm, instance: this });\n }\n};\n\n/**\n * @typedef {object} SearchInsideMatchBox\n * @property {number} page\n * @property {number} r\n * @property {number} l\n * @property {number} b\n * @property {number} t\n * @property {HTMLDivElement} [div]\n * @property {number} matchIndex This is a fake field! not part of the API response. The index of the match that contains this box in total search results matches.\n */\n\n/**\n * @typedef {object} SearchInsideMatch\n * @property {number} matchIndex This is a fake field! Not part of the API response. It is added by the JS.\n * @property {string} displayPageNumber (fake field) The page number as it should be displayed in the UI.\n * @property {string} html (computed field) The html-escaped raw html to display in the UI.\n * @property {string} text\n * @property {Array<{ page: number, boxes: SearchInsideMatchBox[] }>} par\n */\n\n/**\n * @typedef {object} SearchInsideResults\n * @property {string} error\n * @property {SearchInsideMatch[]} matches\n * @property {boolean} indexed\n */\n\n/**\n * Search Results return handler\n * @param {SearchInsideResults} results\n * @param {object} options\n * @param {boolean} options.goToFirstResult\n */\nBookReader.prototype.BRSearchCallback = function(results, options) {\n marshallSearchResults(\n results,\n pageNum => this.book.getPageNum(this.book.leafNumToIndex(pageNum)),\n this.options.searchInsidePreTag,\n this.options.searchInsidePostTag,\n );\n this.searchResults = results || [];\n\n this.updateSearchHilites();\n this.removeProgressPopup();\n if (options.goToFirstResult) {\n this._searchPluginGoToResult(0);\n }\n this.trigger('SearchCallback', { results, options, instance: this });\n};\n\n/**\n * Main search results error handler\n * @callback\n * @param {SearchInsideResults} results\n */\nBookReader.prototype.BRSearchCallbackError = function(results) {\n this._BRSearchCallbackError(results);\n};\n\n/**\n * @private draws search results error\n * @callback\n * @param {SearchInsideResults} results\n * @param {jQuery} $el\n * @param {boolean} fade\n */\nBookReader.prototype._BRSearchCallbackError = function(results) {\n this.searchResults = results;\n const basePayload = {\n term: this.searchTerm,\n instance: this,\n };\n if (results.error) {\n const payload = Object.assign({}, basePayload, { results });\n this.trigger('SearchCallbackError', payload);\n } else if (0 == results.matches.length) {\n if (false === results.indexed) {\n this.trigger('SearchCallbackBookNotIndexed', basePayload);\n return;\n }\n this.trigger('SearchCallbackEmpty', basePayload);\n }\n};\n\n/**\n * updates search on-page highlights controller\n */\nBookReader.prototype.updateSearchHilites = function() {\n /** @type {SearchInsideMatch[]} */\n const matches = this.searchResults?.matches || [];\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n const boxesByIndex = {};\n\n // Clear any existing svg layers\n this.removeSearchHilites();\n\n // Group by pageIndex\n for (const match of matches) {\n for (const box of match.par[0].boxes) {\n const pageIndex = this.book.leafNumToIndex(box.page);\n const pageBoxes = boxesByIndex[pageIndex] || (boxesByIndex[pageIndex] = []);\n pageBoxes.push(box);\n }\n }\n\n // update any already created pages\n for (const [pageIndexString, boxes] of Object.entries(boxesByIndex)) {\n const pageIndex = parseFloat(pageIndexString);\n const page = this.book.getPage(pageIndex);\n const pageContainers = this.getActivePageContainerElementsForIndex(pageIndex);\n for (const container of pageContainers) {\n renderBoxesInPageContainerLayer('searchHiliteLayer', boxes, page, container, boxes.map(b => `match-index-${b.matchIndex}`));\n }\n }\n\n this._searchBoxesByIndex = boxesByIndex;\n};\n\n/**\n * remove search highlights\n */\nBookReader.prototype.removeSearchHilites = function() {\n $(this.getActivePageContainerElements()).find('.searchHiliteLayer').remove();\n};\n\n/**\n * @private\n * Goes to the page specified. If the page is not viewable, tries to load the page\n * FIXME Most of this logic is IA specific, and should be less integrated into here\n * or at least more configurable.\n * @param {number} matchIndex\n */\nBookReader.prototype._searchPluginGoToResult = async function (matchIndex) {\n const match = this.searchResults?.matches[matchIndex];\n const book = this.book;\n const pageIndex = book.leafNumToIndex(match.par[0].page);\n const page = book.getPage(pageIndex);\n const onNearbyPage = Math.abs(this.currentIndex() - pageIndex) < 3;\n let makeUnviewableAtEnd = false;\n if (!page.isViewable) {\n const resp = await fetch('/services/bookreader/request_page?' + new URLSearchParams({\n id: this.options.bookId,\n subprefix: this.options.subPrefix,\n leafNum: page.leafNum,\n })).then(r => r.json());\n\n for (const leafNum of resp.value) {\n book.getPage(book.leafNumToIndex(leafNum)).makeViewable();\n }\n\n // not able to show page; make the page viewable anyways so that it can\n // actually open. On IA, it has a fallback to a special error page.\n if (!resp.value.length) {\n book.getPage(pageIndex).makeViewable();\n makeUnviewableAtEnd = true;\n }\n\n // Trigger an update of book\n this._modes.mode1Up.mode1UpLit.updatePages();\n if (this.activeMode == this._modes.mode1Up) {\n await this._modes.mode1Up.mode1UpLit.updateComplete;\n }\n }\n /* this updates the URL */\n if (!this._isIndexDisplayed(pageIndex)) {\n this.suppressFragmentChange = false;\n this.jumpToIndex(pageIndex);\n }\n\n // Reset it to unviewable if it wasn't resolved\n if (makeUnviewableAtEnd) {\n book.getPage(pageIndex).makeViewable(false);\n }\n\n // Scroll/flash in the ui\n const $boxes = await poll(() => $(`rect.match-index-${match.matchIndex}`), { until: result => result.length > 0 });\n if ($boxes.length) {\n $boxes.css('animation', 'none');\n $boxes[0].scrollIntoView({\n // Only vertically center the highlight if we're in 1up or in full screen. In\n // 2up, if we're not fullscreen, the whole body gets scrolled around to try to\n // center the highlight 🙄 See:\n // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move/11041376\n // Note: nearest doesn't quite work great, because the ReadAloud toolbar is now\n // full-width, and covers up the last line of the highlight.\n block: this.constMode1up == this.mode || this.isFullscreenActive ? 'center' : 'nearest',\n inline: 'center',\n behavior: onNearbyPage ? 'smooth' : 'auto',\n });\n // wait for animation to start\n await new Promise(resolve => setTimeout(resolve, 100));\n $boxes.removeAttr(\"style\");\n }\n};\n\n/**\n * Removes all search pins\n */\nBookReader.prototype.removeSearchResults = function(suppressFragmentChange = false) {\n this.removeSearchHilites(); //be sure to set all box.divs to null\n this.searchTerm = null;\n this.searchResults = null;\n if (!suppressFragmentChange) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n};\n\n/**\n * Returns true if a search highlight is currently being displayed\n * @returns {boolean}\n */\nBookReader.prototype.searchHighlightVisible = function() {\n const results = this.searchResults;\n let visiblePages = [];\n if (null == results) return false;\n\n if (this.constMode2up == this.mode) {\n visiblePages = [this.twoPage.currentIndexL, this.twoPage.currentIndexR];\n } else if (this.constMode1up == this.mode) {\n visiblePages = [this.currentIndex()];\n } else {\n return false;\n }\n\n results.matches.some(match => {\n return match.par[0].boxes.some(box => {\n const pageIndex = this.book.leafNumToIndex(box.page);\n if (jQuery.inArray(pageIndex, visiblePages) >= 0) {\n return true;\n }\n });\n });\n\n return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n"],"names":["SearchView","_ref","br","_ref$searchCancelledC","searchCancelledCallback","_classCallCheck","this","matches","cacheDOMElements","cancelSearch","key","value","bindEvents","dom","toolbarSearch","buildToolbarSearch","query","$","val","remove","dispatchEventWhenComplete","arguments","length","undefined","removeSearchResults","removeResultPins","emptyMatches","setQuery","teardownSearchNavigation","trigger","selector","before","concat","resultsPosition","searchNavigation","positionMessage","currentMatchIndex","namespace","on","clearSearchFieldAndResults","bind","showPrevResult","showNextResult","toggleSidebar","mode","constModeThumb","switchMode","constMode1up","getClosestMatchIndex","start","end","comparator","eq","click","updateResultsPosition","updateSearchNavigationButtons","comparisonFn","matchPages","map","m","par","page","currentPage","currentIndex","closestTo","pool","slice","closestPage","indexOf","find","text","attr","off","resize","matchingSearchResult","constMode2up","find2upMatchingSearchResult","find1upMatchingSearchResult","_this","_this2","_isIndexDisplayed","setCurrentMatchIndex","bool","pinsVisibleState","refs","$BRfooter","css","visibility","document","createElement","classList","add","innerHTML","imagesBaseURL","_this3","forEach","match","pageIndex","book","leafNumToIndex","percentThrough","constructor","util","cssPercentage","getNumLeafs","html","Math","max","substring","replace","addClass","left","append","displayPageNumber","appendTo","event","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","x","style","setProperty","removeClass","target","_searchPluginGoToResult","matchIndex","_this4","showProgressPopup","progressPopupClosed","removeProgressPopup","toggleSearchPending","errorDetails","renderModalMessage","delayModalRemovalFor","messageHTML","modal","el","timeoutMS","setTimeout","e","preventDefault","search","_ref2","_this5","results","options","renderSearchNavigation","bindSearchNavigationEvents","renderPins","goToFirstResult","one","removeSearchHilites","searchTerm","_event$detail","isIndexed","detail","props","indexed","renderErrorModal","renderBookNotIndexedModal","renderResultsEmptyModal","window","addEventListener","handleSearchCallbackError","handleSearchCallback","handleSearchStarted","handleSearchCallbackBookNotIndexed","handleSearchCallbackEmpty","updateSearchNavigation","submitHandler","renderMatch","preTag","postTag","preTagRe","escapeRegExp","escapeHTML","postTagRe","regex","RegExp","super_","_regeneratorRuntime","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","apply","_next","_throw","jQuery","extend","BookReader","defaultOptions","server","bookId","subPrefix","bookPath","enableSearch","searchInsideProtocol","searchInsideUrl","searchInsidePreTag","searchInsidePostTag","initialSearchTerm","setup","searchResults","searchXHR","_cancelSearch","cancelSearchRequest","_searchBoxesByIndex","searchView","term","instance","init","suppressFragmentChange","buildToolbarElement","$el","after","_createPageContainer","index","pageContainer","boxes","renderBoxesInPageContainerLayer","$container","b","_callee","overrides","serverPath","baseUrl","path","subPrefixWithSlash","urlParams","paramStr","url","callSearchResultsCallback","_args","_context","disablePopup","error","success","searchCancelled","eventNames","fragmentChange","lastIndexOf","substr","item_id","doc","q","pre_tag","post_tag","param","searchInsideResults","responseHasError","hasCustomError","hasCustomSuccess","console","BRSearchCallbackError","BRSearchCallback","t0","ajax","cache","xhrFields","withCredentials","protected","beforeSend","xhr","t1","_this$searchXHR","abort","displayPageNumberFn","_step","pageNum","_iterator","_createForOfIteratorHelper","entries","_step$value","getPageNum","_step2","_iterator2","_step3","_iterator3","err","marshallSearchResults","updateSearchHilites","_BRSearchCallbackError","basePayload","payload","assign","_this$searchResults","boxesByIndex","box","_i","_Object$entries","_Object$entries$_i","pageIndexString","parseFloat","getPage","getActivePageContainerElementsForIndex","container","getActivePageContainerElements","_callee2","_this$searchResults2","onNearbyPage","makeUnviewableAtEnd","resp","_iterator4","_step4","leafNum","$boxes","_context2","abs","isViewable","fetch","URLSearchParams","id","subprefix","json","makeViewable","_modes","mode1Up","mode1UpLit","updatePages","activeMode","updateComplete","jumpToIndex","poll","until","result","scrollIntoView","block","isFullscreenActive","inline","behavior","removeAttr","_x","searchHighlightVisible","visiblePages","twoPage","currentIndexL","currentIndexR","some","inArray","$entries","stat","O"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.search.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/search/view.js","webpack://@internetarchive/bookreader/./src/plugins/search/utils.js","webpack://@internetarchive/bookreader/./src/plugins/search/plugin.search.js"],"sourcesContent":["class SearchView {\n /**\n * @param {object} params\n * @param {object} params.br The BookReader instance\n * @param {function} params.cancelSearch callback when a user wants to cancel search\n *\n * @event BookReader:SearchResultsCleared - when the search results nav gets cleared\n * @event BookReader:ToggleSearchMenu - when search results menu should toggle\n */\n constructor({ br, searchCancelledCallback = () => {} }) {\n this.br = br;\n this.matches = [];\n this.cacheDOMElements();\n this.cancelSearch = searchCancelledCallback;\n }\n\n init() {\n this.bindEvents();\n }\n\n cacheDOMElements() {\n this.dom = {};\n // Search input within the top toolbar. Will be removed once the mobile menu is replaced.\n this.dom.toolbarSearch = this.buildToolbarSearch();\n }\n\n /**\n * @param {string} query\n */\n setQuery(query) {\n this.br.$('[name=\"query\"]').val(query);\n }\n\n emptyMatches() {\n this.matches = [];\n }\n\n removeResultPins() {\n this.br.$('.BRnavpos .BRsearch').remove();\n }\n\n clearSearchFieldAndResults(dispatchEventWhenComplete = true) {\n this.br.removeSearchResults();\n this.removeResultPins();\n this.emptyMatches();\n this.setQuery('');\n this.teardownSearchNavigation();\n if (dispatchEventWhenComplete) {\n this.br.trigger('SearchResultsCleared');\n }\n }\n\n toggleSidebar() {\n this.br.trigger('ToggleSearchMenu');\n }\n\n renderSearchNavigation() {\n const selector = 'BRsearch-navigation';\n $('.BRnav').before(`\n <div class=\"${selector}\">\n <button class=\"toggle-sidebar\">\n <h4>\n <span class=\"icon icon-search\"></span> Results\n </h4>\n </button>\n <div class=\"pagination\">\n <button class=\"prev\" title=\"Previous result\"><span class=\"icon icon-chevron hflip\"></span></button>\n <span data-id=\"resultsCount\">${this.resultsPosition()}</span>\n <button class=\"next\" title=\"Next result\"><span class=\"icon icon-chevron\"></button>\n </div>\n <button class=\"clear\" title=\"Clear search results\">\n <span class=\"icon icon-close\"></span>\n </button>\n </div>\n `);\n this.dom.searchNavigation = $(`.${selector}`);\n }\n\n resultsPosition() {\n let positionMessage = `${this.matches.length} result${this.matches.length === 1 ? '' : 's'}`;\n if (~this.currentMatchIndex) {\n positionMessage = `${this.currentMatchIndex + 1} / ${this.matches.length}`;\n }\n return positionMessage;\n }\n\n bindSearchNavigationEvents() {\n if (!this.dom.searchNavigation) { return; }\n const namespace = 'searchNavigation';\n\n this.dom.searchNavigation\n .on(`click.${namespace}`, '.clear', this.clearSearchFieldAndResults.bind(this))\n .on(`click.${namespace}`, '.prev', this.showPrevResult.bind(this))\n .on(`click.${namespace}`, '.next', this.showNextResult.bind(this))\n .on(`click.${namespace}`, '.toggle-sidebar', this.toggleSidebar.bind(this))\n .on(`click.${namespace}`, false);\n }\n\n showPrevResult() {\n if (this.currentMatchIndex === 0) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => end[0] > comparator) + 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(--this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n showNextResult() {\n if (this.currentMatchIndex + 1 === this.matches.length) { return; }\n if (this.br.mode === this.br.constModeThumb) { this.br.switchMode(this.br.constMode1up); }\n if (!~this.currentMatchIndex) {\n this.currentMatchIndex = this.getClosestMatchIndex((start, end, comparator) => start[start.length - 1] > comparator) - 1;\n }\n this.br.$('.BRnavline .BRsearch').eq(++this.currentMatchIndex).click();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * Obtains closest match based on the logical comparison function passed in.\n * When the comparison function returns true, the starting (left) half of the\n * matches array is used in the binary split, else the ending (right) half is\n * used. A recursive call is made to perform the same split and comparison\n * on the winning half of the matches. This is traditionally known as binary\n * search (https://en.wikipedia.org/wiki/Binary_search_algorithm), and in\n * most cases (medium to large search result arrays) should outperform\n * traversing the array from start to finish. In the case of small arrays,\n * the speed difference is negligible.\n *\n * @param {function} comparisonFn\n * @return {number} matchIndex\n */\n getClosestMatchIndex(comparisonFn) {\n const matchPages = this.matches.map((m) => m.par[0].page);\n const currentPage = this.br.currentIndex() + 1;\n const closestTo = (pool, comparator) => {\n if (pool.length === 1) { return pool[0]; }\n const start = pool.slice(0, pool.length / 2);\n const end = pool.slice(pool.length / 2);\n return closestTo((comparisonFn(start, end, comparator) ? start : end), comparator);\n };\n\n const closestPage = closestTo(matchPages, currentPage);\n return this.matches.indexOf(this.matches.find((m) => m.par[0].page === closestPage));\n }\n\n updateResultsPosition() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('[data-id=resultsCount]').text(this.resultsPosition());\n }\n\n updateSearchNavigationButtons() {\n if (!this.dom.searchNavigation) return;\n this.dom.searchNavigation.find('.prev').attr('disabled', !this.currentMatchIndex);\n this.dom.searchNavigation.find('.next').attr('disabled', this.currentMatchIndex + 1 === this.matches.length);\n }\n\n teardownSearchNavigation() {\n if (!this.dom.searchNavigation) {\n this.dom.searchNavigation = $('.BRsearch-navigation');\n }\n if (!this.dom.searchNavigation.length) { return; }\n\n this.dom.searchNavigation.off('.searchNavigation').remove();\n this.dom.searchNavigation = null;\n this.br.resize();\n }\n\n setCurrentMatchIndex() {\n let matchingSearchResult;\n if (this.br.mode === this.br.constModeThumb) {\n this.currentMatchIndex = -1;\n return;\n }\n if (this.br.mode === this.br.constMode2up) {\n matchingSearchResult = this.find2upMatchingSearchResult();\n }\n else {\n matchingSearchResult = this.find1upMatchingSearchResult();\n }\n this.currentMatchIndex = this.matches.indexOf(matchingSearchResult);\n }\n\n find1upMatchingSearchResult() {\n return this.matches.find((m) => this.br.currentIndex() === m.par[0].page - 1);\n }\n\n find2upMatchingSearchResult() {\n return this.matches.find((m) => this.br._isIndexDisplayed(m.par[0].page - 1));\n }\n\n updateSearchNavigation() {\n if (!this.matches.length) { return; }\n\n this.setCurrentMatchIndex();\n this.updateResultsPosition();\n this.updateSearchNavigationButtons();\n }\n\n /**\n * @param {boolean} bool\n */\n togglePinsFor(bool) {\n const pinsVisibleState = bool ? 'visible' : 'hidden';\n this.br.refs.$BRfooter.find('.BRsearch').css({ visibility: pinsVisibleState });\n }\n\n buildToolbarSearch() {\n const toolbarSearch = document.createElement('span');\n toolbarSearch.classList.add('BRtoolbarSection', 'BRtoolbarSectionSearch');\n toolbarSearch.innerHTML = `\n <form class=\"BRbooksearch desktop\">\n <input type=\"search\" name=\"query\" class=\"BRsearchInput\" value=\"\" placeholder=\"Search inside\"/>\n <button type=\"submit\" class=\"BRsearchSubmit\">\n <img src=\"${this.br.imagesBaseURL}icon_search_button.svg\" />\n </button>\n </form>\n `;\n return toolbarSearch;\n }\n\n /**\n * @param {array} matches\n */\n renderPins(matches) {\n matches.forEach((match) => {\n const pageIndex = this.br.book.leafNumToIndex(match.par[0].page);\n const uiStringSearch = \"Search result\"; // i18n\n const percentThrough = this.br.constructor.util.cssPercentage(pageIndex, this.br.book.getNumLeafs() - 1);\n\n let html = match.html;\n if (html.length > 200) {\n const start = Math.max(0, html.indexOf('<mark>') - 100);\n if (start != 0) {\n html = '…' + match.html\n .substring(start)\n // Make sure at word boundary though\n .replace(/^\\S+/, '');\n }\n }\n // draw marker\n $('<div>')\n .addClass('BRsearch')\n .css({\n left: percentThrough,\n })\n .attr('title', uiStringSearch)\n .append(`\n <div class=\"BRquery\">\n <main>${html}</main>\n <footer>Page ${match.displayPageNumber}</footer>\n </div>\n `)\n .appendTo(this.br.$('.BRnavline'))\n .on(\"mouseenter\", (event) => {\n // remove from other markers then turn on just for this\n // XXX should be done when nav slider moves\n const marker = event.currentTarget;\n const tooltip = marker.querySelector('.BRquery');\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 $('.BRsearch,.BRchapter').removeClass('front');\n $(event.target).addClass('front');\n })\n .on(\"mouseleave\", (event) => $(event.target).removeClass('front'))\n .on(\"click\", () => { this.br._searchPluginGoToResult(match.matchIndex); });\n });\n }\n\n /**\n * @param {boolean} bool\n */\n toggleSearchPending(bool) {\n if (bool) {\n this.br.showProgressPopup(\"Search results will appear below...\", () => this.progressPopupClosed());\n }\n else {\n this.br.removeProgressPopup();\n }\n }\n\n /**\n * Primary callback when user cancels search popup\n */\n progressPopupClosed() {\n this.toggleSearchPending();\n this.cancelSearch();\n }\n\n renderErrorModal(textIsProcessing = false) {\n const errorDetails = `${!textIsProcessing ? 'The text may still be processing. ' : ''}Please try again.`;\n this.renderModalMessage(`\n Sorry, there was an error with your search.\n <br />\n ${errorDetails}\n `);\n this.delayModalRemovalFor(4000);\n }\n\n renderBookNotIndexedModal() {\n this.renderModalMessage(`\n <p>\n This book hasn't been indexed for searching yet.\n We've just started indexing it, so search should be available soon.\n <br />\n Please try again later. Thanks!\n </p>\n `);\n this.delayModalRemovalFor(5000);\n }\n\n renderResultsEmptyModal() {\n this.renderModalMessage('No matches were found.');\n this.delayModalRemovalFor(2000);\n }\n\n /**\n * @param {string} messageHTML The innerHTML string used to popupate the modal contents\n */\n renderModalMessage(messageHTML) {\n const modal = document.createElement('div');\n modal.classList.add('BRprogresspopup', 'search_modal');\n modal.innerHTML = messageHTML;\n document.querySelector(this.br.el).append(modal);\n }\n\n /**\n * @param {number} timeoutMS\n */\n delayModalRemovalFor(timeoutMS) {\n setTimeout(this.br.removeProgressPopup.bind(this.br), timeoutMS);\n }\n\n /**\n * @param {Event} e\n */\n submitHandler(e) {\n e.preventDefault();\n const query = e.target.querySelector('[name=\"query\"]').value;\n if (!query.length) { return false; }\n this.br.search(query);\n this.emptyMatches();\n this.toggleSearchPending(true);\n return false;\n }\n\n /**\n * @param {Event} e\n * @param {object} properties\n * @param {object} properties.results\n * @param {object} properties.options\n */\n handleSearchCallback(e, { results, options }) {\n this.matches = results.matches;\n this.setCurrentMatchIndex();\n this.teardownSearchNavigation();\n this.renderSearchNavigation();\n this.bindSearchNavigationEvents();\n this.renderPins(results.matches);\n this.toggleSearchPending(false);\n if (options.goToFirstResult) {\n $(document).one('BookReader:pageChanged', () => {\n this.br.resize();\n });\n } else {\n this.br.resize();\n }\n }\n\n handleSearchStarted() {\n this.emptyMatches();\n this.br.removeSearchHilites();\n this.removeResultPins();\n this.toggleSearchPending(true);\n this.teardownSearchNavigation();\n this.setQuery(this.br.searchTerm);\n }\n\n /**\n * Event listener for: `BookReader:SearchCallbackError`\n * @param {CustomEvent} event\n */\n handleSearchCallbackError(event = {}) {\n this.toggleSearchPending(false);\n const isIndexed = event?.detail?.props?.results?.indexed;\n this.renderErrorModal(isIndexed);\n }\n\n handleSearchCallbackBookNotIndexed() {\n this.toggleSearchPending(false);\n this.renderBookNotIndexedModal();\n }\n\n handleSearchCallbackEmpty() {\n this.toggleSearchPending(false);\n this.renderResultsEmptyModal();\n }\n\n bindEvents() {\n const namespace = 'BookReader:';\n\n window.addEventListener(`${namespace}SearchCallbackError`, this.handleSearchCallbackError.bind(this));\n $(document).on(`${namespace}SearchCallback`, this.handleSearchCallback.bind(this))\n .on(`${namespace}SearchStarted`, this.handleSearchStarted.bind(this))\n .on(`${namespace}SearchCallbackBookNotIndexed`, this.handleSearchCallbackBookNotIndexed.bind(this))\n .on(`${namespace}SearchCallbackEmpty`, this.handleSearchCallbackEmpty.bind(this))\n .on(`${namespace}pageChanged`, this.updateSearchNavigation.bind(this));\n\n this.dom.toolbarSearch.querySelector('form').addEventListener('submit', this.submitHandler.bind(this));\n }\n}\n\nexport default SearchView;\n","import { escapeHTML, escapeRegExp } from '../../BookReader/utils.js';\n\n/**\n * @param {string} match\n * @param {string} preTag\n * @param {string} postTag\n * @returns {string}\n */\nexport function renderMatch(match, preTag, postTag) {\n // Search results are returned as a text blob with the hits wrapped in\n // triple mustaches. Hits occasionally include text beyond the search\n // term, so everything within the staches is captured and wrapped.\n const preTagRe = escapeRegExp(escapeHTML(preTag));\n const postTagRe = escapeRegExp(escapeHTML(postTag));\n // [^] matches any character, including line breaks\n const regex = new RegExp(`${preTagRe}([^]+?)${postTagRe}`, 'g');\n return escapeHTML(match)\n .replace(regex, '<mark>$1</mark>')\n // Fix trailing hyphens. This over-corrects but is net useful.\n .replace(/(\\b)- /g, '$1');\n}\n\n/**\n * Attach some fields to search inside results\n * @param {SearchInsideResults} results\n * @param {(pageNum: LeafNum) => PageNumString} displayPageNumberFn\n * @param {string} preTag\n * @param {string} postTag\n */\nexport function marshallSearchResults(results, displayPageNumberFn, preTag, postTag) {\n // Attach matchIndex to a few things to make it easier to identify\n // an active/selected match\n for (const [index, match] of results.matches.entries()) {\n match.matchIndex = index;\n match.displayPageNumber = displayPageNumberFn(match.par[0].page);\n match.html = renderMatch(match.text, preTag, postTag);\n for (const par of match.par) {\n for (const box of par.boxes) {\n box.matchIndex = index;\n }\n }\n }\n}\n","// @ts-check\n/* global BookReader */\n/**\n * Plugin for Archive.org book search\n * Events fired at various points throughout search processing are published\n * on the document DOM element. These can be subscribed to using jQuery's event\n * binding method `$.fn.on`. All of the events are prefixed with a BookReader\n * namespace. The events are:\n *\n * @event BookReader:SearchStarted - When a search form is submitted, immediately\n * before an AJAX call is made to request search results\n * @event BookReader:SearchCallback - When the search AJAX call is returned and at\n * least one result is returned. The event callback receives an object\n * with the `results`, plugin `options`, and the BookReader `instance`\n * @event BookReader:SearchCallbackError - When the AJAX request returns an error.\n * Receives the `results` and `instance`\n * @event BookReader:SearchCallbackNotIndexed - When a message is received that\n * the book has not had OCR text indexed yet. Receives `instance`\n * @event BookReader:SearchCallbackEmpty - When no results found. Receives\n * `instance`\n * @event BookReader:SearchCanceled - When no results found. Receives\n * `instance`\n */\nimport { poll } from '../../BookReader/utils.js';\nimport { renderBoxesInPageContainerLayer } from '../../BookReader/PageContainer.js';\nimport SearchView from './view.js';\nimport { marshallSearchResults } from './utils.js';\n/** @typedef {import('../../BookReader/PageContainer').PageContainer} PageContainer */\n/** @typedef {import('../../BookReader/BookModel').PageIndex} PageIndex */\n/** @typedef {import('../../BookReader/BookModel').LeafNum} LeafNum */\n/** @typedef {import('../../BookReader/BookModel').PageNumString} PageNumString */\n\njQuery.extend(BookReader.defaultOptions, {\n server: 'ia600609.us.archive.org',\n bookId: '',\n subPrefix: '',\n bookPath: '',\n enableSearch: true,\n searchInsideProtocol: 'https',\n searchInsideUrl: '/fulltext/inside.php',\n searchInsidePreTag: '{{{',\n searchInsidePostTag: '}}}',\n initialSearchTerm: null,\n});\n\n/** @override */\nBookReader.prototype.setup = (function (super_) {\n return function (options) {\n super_.call(this, options);\n\n this.searchTerm = '';\n this.searchResults = null;\n this.searchInsideUrl = options.searchInsideUrl;\n this.enableSearch = options.enableSearch;\n\n // Base server used by some api calls\n this.bookId = options.bookId;\n this.server = options.server;\n this.subPrefix = options.subPrefix;\n this.bookPath = options.bookPath;\n\n this.searchXHR = null;\n this._cancelSearch.bind(this);\n this.cancelSearchRequest.bind(this);\n\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n this._searchBoxesByIndex = {};\n\n if (this.enableSearch) {\n this.searchView = new SearchView({\n br: this,\n searchCancelledCallback: () => {\n this._cancelSearch();\n this.trigger('SearchCanceled', { term: this.searchTerm, instance: this });\n },\n });\n } else {\n this.searchView = null;\n }\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function (super_) {\n return function () {\n super_.call(this);\n if (!this.enableSearch) return;\n\n this.searchView.init();\n if (this.options.initialSearchTerm) {\n /**\n * this.search() take two parameter\n * 1. this.options.initialSearchTerm - search term\n * 2. {\n * goToFirstResult: this.options.goToFirstResult,\n * suppressFragmentChange: false // always want to change fragment in URL\n * }\n */\n this.search(\n this.options.initialSearchTerm,\n { goToFirstResult: this.options.goToFirstResult, suppressFragmentChange: false },\n );\n }\n };\n})(BookReader.prototype.init);\n\n/** @override */\nBookReader.prototype.buildToolbarElement = (function (super_) {\n return function () {\n const $el = super_.call(this);\n if (!this.enableSearch) { return; }\n if (this.searchView.dom.toolbarSearch) {\n $el.find('.BRtoolbarSectionInfo').after(this.searchView.dom.toolbarSearch);\n }\n return $el;\n };\n})(BookReader.prototype.buildToolbarElement);\n\n/** @override */\nBookReader.prototype._createPageContainer = (function (super_) {\n return function (index) {\n const pageContainer = super_.call(this, index);\n if (this.enableSearch && pageContainer.page && index in this._searchBoxesByIndex) {\n const pageIndex = pageContainer.page.index;\n const boxes = this._searchBoxesByIndex[pageIndex];\n renderBoxesInPageContainerLayer(\n 'searchHiliteLayer',\n boxes,\n pageContainer.page,\n pageContainer.$container[0],\n boxes.map(b => `match-index-${b.matchIndex}`),\n );\n }\n return pageContainer;\n };\n})(BookReader.prototype._createPageContainer);\n\n/**\n * @typedef {object} SearchOptions\n * @property {boolean} goToFirstResult\n * @property {boolean} disablePopup\n * @property {(null|function)} error - @deprecated at v.5.0\n * @property {(null|function)} success - @deprecated at v.5.0\n */\n\n/**\n * Submits search request\n *\n * @param {string} term\n * @param {SearchOptions} overrides\n */\nBookReader.prototype.search = async function(term = '', overrides = {}) {\n /** @type {SearchOptions} */\n const defaultOptions = {\n goToFirstResult: false, /* jump to the first result (default=false) */\n disablePopup: false, /* don't show the modal progress (default=false) */\n suppressFragmentChange: false, /* don't change the URL on initial load */\n error: null, /* optional error handler (default=null) */\n success: null, /* optional success handler (default=null) */\n\n };\n const options = jQuery.extend({}, defaultOptions, overrides);\n this.suppressFragmentChange = options.suppressFragmentChange;\n this.searchCancelled = false;\n\n // strip slashes, since this goes in the url\n this.searchTerm = term.replace(/\\//g, ' ');\n\n if (!options.suppressFragmentChange) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n\n // Add quotes to the term. This is to compenstate for the backends default OR query\n // term = term.replace(/['\"]+/g, '');\n // term = '\"' + term + '\"';\n\n // Remove the port and userdir\n const serverPath = this.server.replace(/:.+/, '');\n const baseUrl = `${this.options.searchInsideProtocol}://${serverPath}${this.searchInsideUrl}?`;\n\n // Remove subPrefix from end of path\n let path = this.bookPath;\n const subPrefixWithSlash = `/${this.subPrefix}`;\n if (this.bookPath.length - this.bookPath.lastIndexOf(subPrefixWithSlash) == subPrefixWithSlash.length) {\n path = this.bookPath.substr(0, this.bookPath.length - subPrefixWithSlash.length);\n }\n\n const urlParams = {\n item_id: this.bookId,\n doc: this.subPrefix,\n path,\n q: term,\n pre_tag: this.options.searchInsidePreTag,\n post_tag: this.options.searchInsidePostTag,\n };\n\n // NOTE that the API does not expect / (slashes) to be encoded. (%2F) won't work\n const paramStr = $.param(urlParams).replace(/%2F/g, '/');\n\n const url = `${baseUrl}${paramStr}`;\n\n const callSearchResultsCallback = (searchInsideResults) => {\n if (this.searchCancelled) {\n return;\n }\n const responseHasError = searchInsideResults.error || !searchInsideResults.matches.length;\n const hasCustomError = typeof options.error === 'function';\n const hasCustomSuccess = typeof options.success === 'function';\n\n if (responseHasError) {\n console.error('Search Inside Response Error', searchInsideResults.error || 'matches.length == 0');\n hasCustomError\n ? options.error.call(this, searchInsideResults, options)\n : this.BRSearchCallbackError(searchInsideResults, options);\n } else {\n hasCustomSuccess\n ? options.success.call(this, searchInsideResults, options)\n : this.BRSearchCallback(searchInsideResults, options);\n }\n };\n\n this.trigger('SearchStarted', { term: this.searchTerm, instance: this });\n callSearchResultsCallback(await $.ajax({\n url: url,\n cache: true,\n xhrFields: {\n withCredentials: this.protected,\n },\n beforeSend: xhr => { this.searchXHR = xhr; },\n }));\n};\n\n/**\n * cancels AJAX Call\n * emits custom event\n */\nBookReader.prototype._cancelSearch = function () {\n this.searchXHR?.abort();\n this.searchView.clearSearchFieldAndResults(false);\n this.searchTerm = '';\n this.searchXHR = null;\n this.searchCancelled = true;\n this.searchResults = [];\n};\n\n/**\n * External function to cancel search\n * checks for term & xhr in flight before running\n */\nBookReader.prototype.cancelSearchRequest = function () {\n this.searchCancelled = true;\n if (this.searchXHR !== null) {\n this._cancelSearch();\n this.searchView.toggleSearchPending();\n this.trigger('SearchCanceled', { term: this.searchTerm, instance: this });\n }\n};\n\n/**\n * @typedef {object} SearchInsideMatchBox\n * @property {number} page\n * @property {number} r\n * @property {number} l\n * @property {number} b\n * @property {number} t\n * @property {HTMLDivElement} [div]\n * @property {number} matchIndex This is a fake field! not part of the API response. The index of the match that contains this box in total search results matches.\n */\n\n/**\n * @typedef {object} SearchInsideMatch\n * @property {number} matchIndex This is a fake field! Not part of the API response. It is added by the JS.\n * @property {string} displayPageNumber (fake field) The page number as it should be displayed in the UI.\n * @property {string} html (computed field) The html-escaped raw html to display in the UI.\n * @property {string} text\n * @property {Array<{ page: number, boxes: SearchInsideMatchBox[] }>} par\n */\n\n/**\n * @typedef {object} SearchInsideResults\n * @property {string} error\n * @property {SearchInsideMatch[]} matches\n * @property {boolean} indexed\n */\n\n/**\n * Search Results return handler\n * @param {SearchInsideResults} results\n * @param {object} options\n * @param {boolean} options.goToFirstResult\n */\nBookReader.prototype.BRSearchCallback = function(results, options) {\n marshallSearchResults(\n results,\n pageNum => this.book.getPageNum(this.book.leafNumToIndex(pageNum)),\n this.options.searchInsidePreTag,\n this.options.searchInsidePostTag,\n );\n this.searchResults = results || [];\n\n this.updateSearchHilites();\n this.removeProgressPopup();\n if (options.goToFirstResult) {\n this._searchPluginGoToResult(0);\n }\n this.trigger('SearchCallback', { results, options, instance: this });\n};\n\n/**\n * Main search results error handler\n * @callback\n * @param {SearchInsideResults} results\n */\nBookReader.prototype.BRSearchCallbackError = function(results) {\n this._BRSearchCallbackError(results);\n};\n\n/**\n * @private draws search results error\n * @callback\n * @param {SearchInsideResults} results\n * @param {jQuery} $el\n * @param {boolean} fade\n */\nBookReader.prototype._BRSearchCallbackError = function(results) {\n this.searchResults = results;\n const basePayload = {\n term: this.searchTerm,\n instance: this,\n };\n if (results.error) {\n const payload = Object.assign({}, basePayload, { results });\n this.trigger('SearchCallbackError', payload);\n } else if (0 == results.matches.length) {\n if (false === results.indexed) {\n this.trigger('SearchCallbackBookNotIndexed', basePayload);\n return;\n }\n this.trigger('SearchCallbackEmpty', basePayload);\n }\n};\n\n/**\n * updates search on-page highlights controller\n */\nBookReader.prototype.updateSearchHilites = function() {\n /** @type {SearchInsideMatch[]} */\n const matches = this.searchResults?.matches || [];\n /** @type { {[pageIndex: number]: SearchInsideMatchBox[]} } */\n const boxesByIndex = {};\n\n // Clear any existing svg layers\n this.removeSearchHilites();\n\n // Group by pageIndex\n for (const match of matches) {\n for (const box of match.par[0].boxes) {\n const pageIndex = this.book.leafNumToIndex(box.page);\n const pageBoxes = boxesByIndex[pageIndex] || (boxesByIndex[pageIndex] = []);\n pageBoxes.push(box);\n }\n }\n\n // update any already created pages\n for (const [pageIndexString, boxes] of Object.entries(boxesByIndex)) {\n const pageIndex = parseFloat(pageIndexString);\n const page = this.book.getPage(pageIndex);\n const pageContainers = this.getActivePageContainerElementsForIndex(pageIndex);\n for (const container of pageContainers) {\n renderBoxesInPageContainerLayer('searchHiliteLayer', boxes, page, container, boxes.map(b => `match-index-${b.matchIndex}`));\n }\n }\n\n this._searchBoxesByIndex = boxesByIndex;\n};\n\n/**\n * remove search highlights\n */\nBookReader.prototype.removeSearchHilites = function() {\n $(this.getActivePageContainerElements()).find('.searchHiliteLayer').remove();\n};\n\n/**\n * @private\n * Goes to the page specified. If the page is not viewable, tries to load the page\n * FIXME Most of this logic is IA specific, and should be less integrated into here\n * or at least more configurable.\n * @param {number} matchIndex\n */\nBookReader.prototype._searchPluginGoToResult = async function (matchIndex) {\n const match = this.searchResults?.matches[matchIndex];\n const book = this.book;\n const pageIndex = book.leafNumToIndex(match.par[0].page);\n const page = book.getPage(pageIndex);\n const onNearbyPage = Math.abs(this.currentIndex() - pageIndex) < 3;\n let makeUnviewableAtEnd = false;\n if (!page.isViewable) {\n const resp = await fetch('/services/bookreader/request_page?' + new URLSearchParams({\n id: this.options.bookId,\n subprefix: this.options.subPrefix,\n leafNum: page.leafNum,\n })).then(r => r.json());\n\n for (const leafNum of resp.value) {\n book.getPage(book.leafNumToIndex(leafNum)).makeViewable();\n }\n\n // not able to show page; make the page viewable anyways so that it can\n // actually open. On IA, it has a fallback to a special error page.\n if (!resp.value.length) {\n book.getPage(pageIndex).makeViewable();\n makeUnviewableAtEnd = true;\n }\n\n // Trigger an update of book\n this._modes.mode1Up.mode1UpLit.updatePages();\n if (this.activeMode == this._modes.mode1Up) {\n await this._modes.mode1Up.mode1UpLit.updateComplete;\n }\n }\n /* this updates the URL */\n if (!this._isIndexDisplayed(pageIndex)) {\n this.suppressFragmentChange = false;\n this.jumpToIndex(pageIndex);\n }\n\n // Reset it to unviewable if it wasn't resolved\n if (makeUnviewableAtEnd) {\n book.getPage(pageIndex).makeViewable(false);\n }\n\n // Scroll/flash in the ui\n const $boxes = await poll(() => $(`rect.match-index-${match.matchIndex}`), { until: result => result.length > 0 });\n if ($boxes.length) {\n $boxes.css('animation', 'none');\n $boxes[0].scrollIntoView({\n // Only vertically center the highlight if we're in 1up or in full screen. In\n // 2up, if we're not fullscreen, the whole body gets scrolled around to try to\n // center the highlight 🙄 See:\n // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move/11041376\n // Note: nearest doesn't quite work great, because the ReadAloud toolbar is now\n // full-width, and covers up the last line of the highlight.\n block: this.constMode1up == this.mode || this.isFullscreenActive ? 'center' : 'nearest',\n inline: 'center',\n behavior: onNearbyPage ? 'smooth' : 'auto',\n });\n // wait for animation to start\n await new Promise(resolve => setTimeout(resolve, 100));\n $boxes.removeAttr(\"style\");\n }\n};\n\n/**\n * Removes all search pins\n */\nBookReader.prototype.removeSearchResults = function(suppressFragmentChange = false) {\n this.removeSearchHilites(); //be sure to set all box.divs to null\n this.searchTerm = null;\n this.searchResults = null;\n if (!suppressFragmentChange) {\n this.trigger(BookReader.eventNames.fragmentChange);\n }\n};\n\n/**\n * Returns true if a search highlight is currently being displayed\n * @returns {boolean}\n */\nBookReader.prototype.searchHighlightVisible = function() {\n const results = this.searchResults;\n let visiblePages = [];\n if (null == results) return false;\n\n if (this.constMode2up == this.mode) {\n visiblePages = [this.twoPage.currentIndexL, this.twoPage.currentIndexR];\n } else if (this.constMode1up == this.mode) {\n visiblePages = [this.currentIndex()];\n } else {\n return false;\n }\n\n results.matches.some(match => {\n return match.par[0].boxes.some(box => {\n const pageIndex = this.book.leafNumToIndex(box.page);\n if (jQuery.inArray(pageIndex, visiblePages) >= 0) {\n return true;\n }\n });\n });\n\n return false;\n};\n"],"names":["SearchView","_ref","br","_ref$searchCancelledC","searchCancelledCallback","_classCallCheck","this","matches","cacheDOMElements","cancelSearch","key","value","bindEvents","dom","toolbarSearch","buildToolbarSearch","query","$","val","remove","dispatchEventWhenComplete","arguments","length","undefined","removeSearchResults","removeResultPins","emptyMatches","setQuery","teardownSearchNavigation","trigger","selector","before","concat","resultsPosition","searchNavigation","positionMessage","currentMatchIndex","namespace","on","clearSearchFieldAndResults","bind","showPrevResult","showNextResult","toggleSidebar","mode","constModeThumb","switchMode","constMode1up","getClosestMatchIndex","start","end","comparator","eq","click","updateResultsPosition","updateSearchNavigationButtons","comparisonFn","matchPages","map","m","par","page","currentPage","currentIndex","closestTo","pool","slice","closestPage","indexOf","find","text","attr","off","resize","matchingSearchResult","constMode2up","find2upMatchingSearchResult","find1upMatchingSearchResult","_this","_this2","_isIndexDisplayed","setCurrentMatchIndex","bool","pinsVisibleState","refs","$BRfooter","css","visibility","document","createElement","classList","add","innerHTML","imagesBaseURL","_this3","forEach","match","pageIndex","book","leafNumToIndex","percentThrough","constructor","util","cssPercentage","getNumLeafs","html","Math","max","substring","replace","addClass","left","append","displayPageNumber","appendTo","event","marker","currentTarget","tooltip","querySelector","tooltipOffset","getBoundingClientRect","targetOffset","boxSizeAdjust","parseInt","getComputedStyle","paddingLeft","x","style","setProperty","removeClass","target","_searchPluginGoToResult","matchIndex","_this4","showProgressPopup","progressPopupClosed","removeProgressPopup","toggleSearchPending","errorDetails","renderModalMessage","delayModalRemovalFor","messageHTML","modal","el","timeoutMS","setTimeout","e","preventDefault","search","_ref2","_this5","results","options","renderSearchNavigation","bindSearchNavigationEvents","renderPins","goToFirstResult","one","removeSearchHilites","searchTerm","_event$detail","isIndexed","detail","props","indexed","renderErrorModal","renderBookNotIndexedModal","renderResultsEmptyModal","window","addEventListener","handleSearchCallbackError","handleSearchCallback","handleSearchStarted","handleSearchCallbackBookNotIndexed","handleSearchCallbackEmpty","updateSearchNavigation","submitHandler","renderMatch","preTag","postTag","preTagRe","escapeRegExp","escapeHTML","postTagRe","regex","RegExp","super_","_regeneratorRuntime","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","apply","_next","_throw","jQuery","extend","BookReader","defaultOptions","server","bookId","subPrefix","bookPath","enableSearch","searchInsideProtocol","searchInsideUrl","searchInsidePreTag","searchInsidePostTag","initialSearchTerm","setup","searchResults","searchXHR","_cancelSearch","cancelSearchRequest","_searchBoxesByIndex","searchView","term","instance","init","suppressFragmentChange","buildToolbarElement","$el","after","_createPageContainer","index","pageContainer","boxes","renderBoxesInPageContainerLayer","$container","b","_callee","overrides","serverPath","baseUrl","path","subPrefixWithSlash","urlParams","paramStr","url","callSearchResultsCallback","_args","_context","disablePopup","error","success","searchCancelled","eventNames","fragmentChange","lastIndexOf","substr","item_id","doc","q","pre_tag","post_tag","param","searchInsideResults","responseHasError","hasCustomError","hasCustomSuccess","console","BRSearchCallbackError","BRSearchCallback","t0","ajax","cache","xhrFields","withCredentials","protected","beforeSend","xhr","t1","_this$searchXHR","abort","displayPageNumberFn","_step","pageNum","_iterator","_createForOfIteratorHelper","entries","_step$value","getPageNum","_step2","_iterator2","_step3","_iterator3","err","marshallSearchResults","updateSearchHilites","_BRSearchCallbackError","basePayload","payload","assign","_this$searchResults","boxesByIndex","box","_i","_Object$entries","_Object$entries$_i","pageIndexString","parseFloat","getPage","getActivePageContainerElementsForIndex","container","getActivePageContainerElements","_callee2","_this$searchResults2","onNearbyPage","makeUnviewableAtEnd","resp","_iterator4","_step4","leafNum","$boxes","_context2","abs","isViewable","fetch","URLSearchParams","id","subprefix","json","makeViewable","_modes","mode1Up","mode1UpLit","updatePages","activeMode","updateComplete","jumpToIndex","poll","until","result","scrollIntoView","block","isFullscreenActive","inline","behavior","removeAttr","_x","searchHighlightVisible","visiblePages","twoPage","currentIndexL","currentIndexR","some","inArray"],"sourceRoot":""}