@internetarchive/bookreader 5.0.0-38 → 5.0.0-39

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 (222) hide show
  1. package/BookReader/BookReader.css +8 -0
  2. package/BookReader/BookReader.js +1 -1
  3. package/BookReader/BookReader.js.map +1 -1
  4. package/BookReader/ia-bookreader-bundle.js +99 -75
  5. package/BookReader/ia-bookreader-bundle.js.map +1 -1
  6. package/BookReader/icons/magnify-minus.svg +1 -1
  7. package/BookReader/icons/magnify-plus.svg +1 -1
  8. package/BookReader/plugins/plugin.autoplay.js +1 -1
  9. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  10. package/BookReader/plugins/plugin.chapters.js +1 -1
  11. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  12. package/BookReader/plugins/plugin.mobile_nav.js +1 -1
  13. package/BookReader/plugins/plugin.mobile_nav.js.map +1 -1
  14. package/BookReader/plugins/plugin.resume.js +1 -1
  15. package/BookReader/plugins/plugin.resume.js.map +1 -1
  16. package/BookReader/plugins/plugin.search.js +1 -1
  17. package/BookReader/plugins/plugin.search.js.map +1 -1
  18. package/BookReader/plugins/plugin.text_selection.js +1 -1
  19. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  20. package/BookReader/plugins/plugin.tts.js +1 -1
  21. package/BookReader/plugins/plugin.tts.js.map +1 -1
  22. package/BookReader/plugins/plugin.url.js +1 -1
  23. package/BookReader/plugins/plugin.url.js.map +1 -1
  24. package/CHANGELOG.md +5 -0
  25. package/README.md +13 -0
  26. package/package.json +14 -14
  27. package/renovate.json +1 -1
  28. package/src/BookReader/Mode1UpLit.js +7 -1
  29. package/src/BookReader/Mode2Up.js +11 -0
  30. package/src/BookReader/ModeSmoothZoom.js +2 -0
  31. package/src/BookReader/PageContainer.js +10 -4
  32. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  33. package/src/assets/icons/magnify-minus.svg +3 -7
  34. package/src/assets/icons/magnify-plus.svg +3 -7
  35. package/src/css/_TextSelection.scss +13 -0
  36. package/tests/jest/BookReader/PageContainer.test.js +5 -4
  37. package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +49 -0
  38. package/.husky/_/husky.sh +0 -30
  39. package/stat/BookNavigator/BookModel.js +0 -14
  40. package/stat/BookNavigator/BookNavigator.js +0 -524
  41. package/stat/BookNavigator/assets/bookmark-colors.js +0 -15
  42. package/stat/BookNavigator/assets/button-base.js +0 -61
  43. package/stat/BookNavigator/assets/ia-logo.js +0 -17
  44. package/stat/BookNavigator/assets/icon_checkmark.js +0 -6
  45. package/stat/BookNavigator/assets/icon_close.js +0 -3
  46. package/stat/BookNavigator/assets/icon_sort_asc.js +0 -5
  47. package/stat/BookNavigator/assets/icon_sort_desc.js +0 -5
  48. package/stat/BookNavigator/assets/icon_sort_neutral.js +0 -5
  49. package/stat/BookNavigator/assets/icon_volumes.js +0 -11
  50. package/stat/BookNavigator/bookmarks/bookmark-button.js +0 -64
  51. package/stat/BookNavigator/bookmarks/bookmark-edit.js +0 -215
  52. package/stat/BookNavigator/bookmarks/bookmarks-list.js +0 -285
  53. package/stat/BookNavigator/bookmarks/bookmarks-loginCTA.js +0 -28
  54. package/stat/BookNavigator/bookmarks/bookmarks-provider.js +0 -56
  55. package/stat/BookNavigator/bookmarks/ia-bookmarks.js +0 -523
  56. package/stat/BookNavigator/br-fullscreen-mgr.js +0 -82
  57. package/stat/BookNavigator/delete-modal-actions.js +0 -49
  58. package/stat/BookNavigator/downloads/downloads-provider.js +0 -72
  59. package/stat/BookNavigator/downloads/downloads.js +0 -139
  60. package/stat/BookNavigator/provider-config.js +0 -0
  61. package/stat/BookNavigator/search/a-search-result.js +0 -55
  62. package/stat/BookNavigator/search/search-provider.js +0 -180
  63. package/stat/BookNavigator/search/search-results.js +0 -360
  64. package/stat/BookNavigator/sharing.js +0 -31
  65. package/stat/BookNavigator/visual-adjustments/visual-adjustments-provider.js +0 -94
  66. package/stat/BookNavigator/visual-adjustments/visual-adjustments.js +0 -280
  67. package/stat/BookNavigator/volumes/volumes-provider.js +0 -83
  68. package/stat/BookNavigator/volumes/volumes.js +0 -178
  69. package/stat/BookReader/BookModel.js +0 -518
  70. package/stat/BookReader/DebugConsole.js +0 -54
  71. package/stat/BookReader/DragScrollable.js +0 -233
  72. package/stat/BookReader/ImageCache.js +0 -116
  73. package/stat/BookReader/Mode1Up.js +0 -102
  74. package/stat/BookReader/Mode1UpLit.js +0 -434
  75. package/stat/BookReader/Mode2Up.js +0 -1372
  76. package/stat/BookReader/ModeSmoothZoom.js +0 -177
  77. package/stat/BookReader/ModeThumb.js +0 -344
  78. package/stat/BookReader/Navbar/Navbar.js +0 -310
  79. package/stat/BookReader/PageContainer.js +0 -120
  80. package/stat/BookReader/ReduceSet.js +0 -26
  81. package/stat/BookReader/Toolbar/Toolbar.js +0 -384
  82. package/stat/BookReader/events.js +0 -20
  83. package/stat/BookReader/options.js +0 -324
  84. package/stat/BookReader/utils/HTMLDimensionsCacher.js +0 -44
  85. package/stat/BookReader/utils/classes.js +0 -36
  86. package/stat/BookReader/utils.js +0 -240
  87. package/stat/BookReader.js +0 -2550
  88. package/stat/BookReaderComponent/BookReaderComponent.js +0 -117
  89. package/stat/assets/icons/1up.svg +0 -12
  90. package/stat/assets/icons/2up.svg +0 -15
  91. package/stat/assets/icons/advance.svg +0 -26
  92. package/stat/assets/icons/chevron-right.svg +0 -1
  93. package/stat/assets/icons/close-circle-dark.svg +0 -1
  94. package/stat/assets/icons/close-circle.svg +0 -1
  95. package/stat/assets/icons/fullscreen.svg +0 -17
  96. package/stat/assets/icons/fullscreen_exit.svg +0 -17
  97. package/stat/assets/icons/hamburger.svg +0 -15
  98. package/stat/assets/icons/left-arrow.svg +0 -12
  99. package/stat/assets/icons/magnify-minus.svg +0 -16
  100. package/stat/assets/icons/magnify-plus.svg +0 -17
  101. package/stat/assets/icons/magnify.svg +0 -15
  102. package/stat/assets/icons/pause.svg +0 -23
  103. package/stat/assets/icons/play.svg +0 -22
  104. package/stat/assets/icons/playback-speed.svg +0 -34
  105. package/stat/assets/icons/read-aloud.svg +0 -22
  106. package/stat/assets/icons/review.svg +0 -22
  107. package/stat/assets/icons/thumbnails.svg +0 -17
  108. package/stat/assets/icons/voice.svg +0 -1
  109. package/stat/assets/icons/volume-full.svg +0 -22
  110. package/stat/assets/images/BRicons.png +0 -0
  111. package/stat/assets/images/BRicons.svg +0 -94
  112. package/stat/assets/images/BRicons_ia.png +0 -0
  113. package/stat/assets/images/back_pages.png +0 -0
  114. package/stat/assets/images/book_bottom_icon.png +0 -0
  115. package/stat/assets/images/book_down_icon.png +0 -0
  116. package/stat/assets/images/book_left_icon.png +0 -0
  117. package/stat/assets/images/book_leftmost_icon.png +0 -0
  118. package/stat/assets/images/book_right_icon.png +0 -0
  119. package/stat/assets/images/book_rightmost_icon.png +0 -0
  120. package/stat/assets/images/book_top_icon.png +0 -0
  121. package/stat/assets/images/book_up_icon.png +0 -0
  122. package/stat/assets/images/books_graphic.svg +0 -177
  123. package/stat/assets/images/booksplit.png +0 -0
  124. package/stat/assets/images/control_pause_icon.png +0 -0
  125. package/stat/assets/images/control_play_icon.png +0 -0
  126. package/stat/assets/images/embed_icon.png +0 -0
  127. package/stat/assets/images/icon-home-ia.png +0 -0
  128. package/stat/assets/images/icon_OL-logo-xs.png +0 -0
  129. package/stat/assets/images/icon_alert-xs.png +0 -0
  130. package/stat/assets/images/icon_book.svg +0 -12
  131. package/stat/assets/images/icon_bookmark.svg +0 -12
  132. package/stat/assets/images/icon_close-pop.png +0 -0
  133. package/stat/assets/images/icon_download.png +0 -0
  134. package/stat/assets/images/icon_gear.svg +0 -14
  135. package/stat/assets/images/icon_hamburger.svg +0 -20
  136. package/stat/assets/images/icon_home.png +0 -0
  137. package/stat/assets/images/icon_home.svg +0 -21
  138. package/stat/assets/images/icon_home_ia.png +0 -0
  139. package/stat/assets/images/icon_indicator.png +0 -0
  140. package/stat/assets/images/icon_info.svg +0 -11
  141. package/stat/assets/images/icon_one_page.svg +0 -8
  142. package/stat/assets/images/icon_pause.svg +0 -1
  143. package/stat/assets/images/icon_play.svg +0 -1
  144. package/stat/assets/images/icon_playback-rate.svg +0 -15
  145. package/stat/assets/images/icon_return.png +0 -0
  146. package/stat/assets/images/icon_search_button.svg +0 -8
  147. package/stat/assets/images/icon_share.svg +0 -9
  148. package/stat/assets/images/icon_skip-ahead.svg +0 -6
  149. package/stat/assets/images/icon_skip-back.svg +0 -13
  150. package/stat/assets/images/icon_speaker.svg +0 -18
  151. package/stat/assets/images/icon_speaker_open.svg +0 -10
  152. package/stat/assets/images/icon_thumbnails.svg +0 -12
  153. package/stat/assets/images/icon_toc.svg +0 -5
  154. package/stat/assets/images/icon_two_pages.svg +0 -9
  155. package/stat/assets/images/icon_zoomer.png +0 -0
  156. package/stat/assets/images/loading.gif +0 -0
  157. package/stat/assets/images/logo_icon.png +0 -0
  158. package/stat/assets/images/marker_chap-off.png +0 -0
  159. package/stat/assets/images/marker_chap-off.svg +0 -11
  160. package/stat/assets/images/marker_chap-off_ia.png +0 -0
  161. package/stat/assets/images/marker_chap-on.png +0 -0
  162. package/stat/assets/images/marker_chap-on.svg +0 -11
  163. package/stat/assets/images/marker_srch-on.svg +0 -11
  164. package/stat/assets/images/marker_srchchap-off.png +0 -0
  165. package/stat/assets/images/marker_srchchap-on.png +0 -0
  166. package/stat/assets/images/nav_control-dn.png +0 -0
  167. package/stat/assets/images/nav_control-dn_ia.png +0 -0
  168. package/stat/assets/images/nav_control-up.png +0 -0
  169. package/stat/assets/images/nav_control-up_ia.png +0 -0
  170. package/stat/assets/images/nav_control.png +0 -0
  171. package/stat/assets/images/one_page_mode_icon.png +0 -0
  172. package/stat/assets/images/paper-badge.png +0 -0
  173. package/stat/assets/images/print_icon.png +0 -0
  174. package/stat/assets/images/progressbar.gif +0 -0
  175. package/stat/assets/images/right_edges.png +0 -0
  176. package/stat/assets/images/slider.png +0 -0
  177. package/stat/assets/images/slider_ia.png +0 -0
  178. package/stat/assets/images/thumbnail_mode_icon.png +0 -0
  179. package/stat/assets/images/transparent.png +0 -0
  180. package/stat/assets/images/two_page_mode_icon.png +0 -0
  181. package/stat/assets/images/zoom_in_icon.png +0 -0
  182. package/stat/assets/images/zoom_out_icon.png +0 -0
  183. package/stat/css/BookReader.scss +0 -89
  184. package/stat/css/_BRBookmarks.scss +0 -29
  185. package/stat/css/_BRComponent.scss +0 -13
  186. package/stat/css/_BRfloat.scss +0 -197
  187. package/stat/css/_BRicon.scss +0 -48
  188. package/stat/css/_BRmain.scss +0 -251
  189. package/stat/css/_BRnav.scss +0 -359
  190. package/stat/css/_BRpages.scss +0 -139
  191. package/stat/css/_BRsearch.scss +0 -226
  192. package/stat/css/_BRtoolbar.scss +0 -84
  193. package/stat/css/_BRvendor.scss +0 -5
  194. package/stat/css/_MobileNav.scss +0 -194
  195. package/stat/css/_TextSelection.scss +0 -32
  196. package/stat/css/_colorbox.scss +0 -52
  197. package/stat/css/_controls.scss +0 -253
  198. package/stat/css/_icons.scss +0 -121
  199. package/stat/jquery-wrapper.js +0 -4
  200. package/stat/plugins/plugin.archive_analytics.js +0 -86
  201. package/stat/plugins/plugin.autoplay.js +0 -129
  202. package/stat/plugins/plugin.chapters.js +0 -248
  203. package/stat/plugins/plugin.iframe.js +0 -48
  204. package/stat/plugins/plugin.mobile_nav.js +0 -288
  205. package/stat/plugins/plugin.resume.js +0 -68
  206. package/stat/plugins/plugin.text_selection.js +0 -291
  207. package/stat/plugins/plugin.url.js +0 -198
  208. package/stat/plugins/plugin.vendor-fullscreen.js +0 -247
  209. package/stat/plugins/search/plugin.search.js +0 -439
  210. package/stat/plugins/search/view.js +0 -439
  211. package/stat/plugins/tts/AbstractTTSEngine.js +0 -249
  212. package/stat/plugins/tts/FestivalTTSEngine.js +0 -169
  213. package/stat/plugins/tts/PageChunk.js +0 -107
  214. package/stat/plugins/tts/PageChunkIterator.js +0 -163
  215. package/stat/plugins/tts/WebTTSEngine.js +0 -357
  216. package/stat/plugins/tts/plugin.tts.js +0 -357
  217. package/stat/plugins/tts/tooltip_dict.js +0 -15
  218. package/stat/plugins/tts/utils.js +0 -91
  219. package/stat/util/browserSniffing.js +0 -30
  220. package/stat/util/debouncer.js +0 -26
  221. package/stat/util/docCookies.js +0 -67
  222. package/stat/util/strings.js +0 -34
@@ -1,2 +1,2 @@
1
- (self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[336],{1226:function(t,e,r){"use strict";function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}r(5827),r(4916),r(5306),r(2222),r(6992),r(1539),r(8783),r(3948),r(285),r(489),r(2419),r(4819),r(5003),r(2526),r(1817),r(2165),r(4747),r(7941),r(9826),r(8309),r(9600),r(1249),r(7327),r(9714),r(8559),r(4723),r(3123),r(9720),r(3210),r(4765),r(7042),r(1038);var i,l=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o(this,t),this.bookReaderOptions=e,this.urlSchema=[{name:"page",position:"path",default:"n0"},{name:"mode",position:"path",default:"2up"},{name:"search",position:"path",deprecated_for:"q"},{name:"q",position:"query_param"},{name:"sort",position:"query_param"},{name:"view",position:"query_param"},{name:"admin",position:"query_param"}],this.urlState={},this.urlMode=this.bookReaderOptions.urlMode||"hash",this.urlHistoryBasePath=this.bookReaderOptions.urlHistoryBasePath||"/",this.urlLocationPollId=null,this.oldLocationHash=null,this.oldUserHash=null}var e,r;return e=t,(r=[{key:"urlStateToUrlString",value:function(t){var e=this,r=new URLSearchParams,n={};Object.keys(t).forEach((function(o){var a,i,l,u,s=e.urlSchema.find((function(t){return t.name===o}));null!==(a=s)&&void 0!==a&&a.deprecated_for&&(s=e.urlSchema.find((function(t){return t.name===s.deprecated_for}))),"path"==(null===(i=s)||void 0===i?void 0:i.position)?n[null===(l=s)||void 0===l?void 0:l.name]=t[o]:r.append((null===(u=s)||void 0===u?void 0:u.name)||o,t[o])}));var o=this.urlSchema.filter((function(t){return"path"==t.position})).map((function(t){return n[t.name]?"".concat(t.name,"/").concat(n[t.name]):""})).join("/"),a="".concat(o.replace(/\/+/g,"/").replace(/\/+$/,"")),i="".concat(a,"?").concat(r.toString());return r.toString()?i:"".concat(a)}},{key:"urlStringToUrlState",value:function(t){var e={},r=new URL(t,"http://example.com"),o=Object.fromEntries(r.searchParams.entries()),a=r.pathname.match(/[^\\/]+\/[^\\/]+/g),i=a?Object.fromEntries(a.map((function(t){return t.split("/")}))):{},l=function(t,e){return Object.keys(t).some((function(t){return t==e}))};return this.urlSchema.filter((function(t){return"path"==t.position})).forEach((function(t){var r=l(i,t.name);l(t,"deprecated_for")&&r?e[t.deprecated_for]=i[t.name]:r&&(e[t.name]=i[t.name])})),Object.entries(o).forEach((function(t){var r,o,a=(o=2,function(t){if(Array.isArray(t))return t}(r=t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,a=[],i=!0,l=!1;try{for(r=r.call(t);!(i=(n=r.next()).done)&&(a.push(n.value),!e||a.length!==e);i=!0);}catch(t){l=!0,o=t}finally{try{i||null==r.return||r.return()}finally{if(l)throw o}}return a}}(r,o)||function(t,e){if(t){if("string"==typeof t)return n(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}(r,o)||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.")}()),i=a[0],l=a[1];e[i]=l})),e}},{key:"setUrlParam",value:function(t,e){this.urlState[t]=e,this.pushToAddressBar()}},{key:"removeUrlParam",value:function(t){delete this.urlState[t],this.pushToAddressBar()}},{key:"getUrlParam",value:function(t){return this.urlState[t]}},{key:"pushToAddressBar",value:function(){var t=this.urlStateToUrlString(this.urlState),e="/"!==t?t:"";if("history"==this.urlMode){if(window.history&&window.history.replaceState){var r="".concat(this.urlHistoryBasePath).concat(e).trim().replace(/(\/+)/g,"/");window.history.replaceState({},null,r)}}else window.location.replace("#"+e);this.oldLocationHash=t}},{key:"listenForHashChanges",value:function(){var t=this;this.oldLocationHash=window.location.hash.substr(1),this.urlLocationPollId&&(clearInterval(this.urlLocationPollId),this.urlLocationPollId=null),this.urlLocationPollId=setInterval((function(){var e=window.location.hash.substr(1);e!=t.oldLocationHash&&(t.urlState=t.urlStringToUrlState(e))}),500)}},{key:"pullFromAddressBar",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location,e="history"===this.urlMode?t.pathname.substr(this.urlHistoryBasePath.length)+t.search:t.hash.substr(1);this.urlState=this.urlStringToUrlState(e)}}])&&a(e.prototype,r),t}();function u(t){return(u="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})(t)}function s(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function c(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function h(t,e,r){return(h="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,r){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=p(t)););return t}(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(r):o.value}})(t,e,r||t)}function f(t,e){return(f=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function d(t,e){if(e&&("object"===u(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)}function p(t){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(3609).extend(BookReader.defaultOptions,{enableUrlPlugin:!0,bookId:"",defaults:null,updateWindowTitle:!1,urlMode:"hash",urlHistoryBasePath:"/",urlTrackedParams:["page","search","mode","region","highlight","view"],urlTrackIndex0:!1}),BookReader.prototype.setup=(i=BookReader.prototype.setup,function(t){i.call(this,t),this.bookId=t.bookId,this.defaults=t.defaults,this.locationPollId=null,this.oldLocationHash=null,this.oldUserHash=null}),BookReader.prototype.init=function(t){return function(){var e=this;this.options.enableUrlPlugin&&(this.bind(BookReader.eventNames.PostInit,(function(){var t=e.options,r=t.updateWindowTitle,n=t.urlMode;r&&(document.title=e.shortTitle(e.bookTitle,50)),"hash"===n&&e.urlStartLocationPolling()})),this.bind(BookReader.eventNames.fragmentChange,this.urlUpdateFragment.bind(this))),t.call(this)}}(BookReader.prototype.init),BookReader.prototype.shortTitle=function(t){return this.bookTitle.length<t?this.bookTitle:"".concat(this.bookTitle.substr(0,t-3),"...")},BookReader.prototype.urlStartLocationPolling=function(){var t=this;this.oldLocationHash=this.urlReadFragment(),this.locationPollId&&(clearInterval(this.locationPollId),this.locationPollId=null),this.locationPollId=setInterval((function(){var e=t.urlReadFragment();if(e!=t.oldLocationHash&&e!=t.oldUserHash){var r=t.paramsFromFragment(e),n=function(){return t.updateFromParams(r)};t.trigger(BookReader.eventNames.stop),t.animating?(t.autoStop&&t.autoStop(),t.animationFinishedCallback=n):n(),t.oldUserHash=e}}),500)},BookReader.prototype.urlUpdateFragment=function(){var t=this.paramsFromCurrent(),e=this.options,r=e.urlMode,n=e.urlTrackIndex0,o=e.urlTrackedParams;n||void 0===t.index||0!==t.index||(delete t.index,delete t.page);var a=o.reduce((function(e,r){return r in t&&(e[r]=t[r]),e}),{}),i=this.fragmentFromParams(a,r),l=this.urlReadFragment(),u=this.getLocationSearch(),s=this.queryStringFromParams(a,u,r);if(l!==i||u!==s)if("history"===r){if(window.history&&window.history.replaceState){var c=this.options.urlHistoryBasePath.replace(/\/+$/,""),h=""===i?"":"/".concat(i),f="".concat(c).concat(h).concat(s);window.history.replaceState({},null,f),this.oldLocationHash=i+s}}else{var d=this.urlParamsFiltersOnlySearch(this.readQueryString());window.location.replace("#"+i+d),this.oldLocationHash=i+d}},BookReader.prototype.urlParamsFiltersOnlySearch=function(t){var e=new URLSearchParams(t);return e.has("q")?"?".concat(new URLSearchParams({q:e.get("q")})):""},BookReader.prototype.urlReadFragment=function(){var t=this.options,e=t.urlMode,r=t.urlHistoryBasePath;return"history"===e?window.location.pathname.substr(r.length):window.location.hash.substr(1)},BookReader.prototype.urlReadHashFragment=function(){return window.location.hash.substr(1)};var m=function(t){!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}}),e&&f(t,e)}(i,BookReader);var e,r,n,o,a=(n=i,o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=p(n);if(o){var r=p(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return d(this,t)});function i(){return s(this,i),a.apply(this,arguments)}return e=i,(r=[{key:"init",value:function(){var t=this;this.options.enableUrlPlugin&&(this.urlPlugin=new l(this.options),this.bind(BookReader.eventNames.PostInit,(function(){"hash"===t.options.urlMode&&t.urlPlugin.listenForHashChanges()}))),h(p(i.prototype),"init",this).call(this)}}])&&c(e.prototype,r),i}();window.BookReader=m},6091:function(t,e,r){var n=r(7293),o=r(1361);t.exports=function(t){return n((function(){return!!o[t]()||"​…᠎"!="​…᠎"[t]()||o[t].name!==t}))}},9720:function(t,e,r){var n=r(2109),o=r(4699).entries;n({target:"Object",stat:!0},{entries:function(t){return o(t)}})},8559:function(t,e,r){var n=r(2109),o=r(408),a=r(6135);n({target:"Object",stat:!0},{fromEntries:function(t){var e={};return o(t,(function(t,r){a(e,t,r)}),{AS_ENTRIES:!0}),e}})},4723:function(t,e,r){"use strict";var n=r(7007),o=r(9670),a=r(7466),i=r(1340),l=r(4488),u=r(1530),s=r(7651);n("match",(function(t,e,r){return[function(e){var r=l(this),n=null==e?void 0:e[t];return void 0!==n?n.call(e,r):new RegExp(e)[t](i(r))},function(t){var n=o(this),l=i(t),c=r(e,n,l);if(c.done)return c.value;if(!n.global)return s(n,l);var h=n.unicode;n.lastIndex=0;for(var f,d=[],p=0;null!==(f=s(n,l));){var m=i(f[0]);d[p]=m,""===m&&(n.lastIndex=u(l,a(n.lastIndex),h)),p++}return 0===p?null:d}]}))},3210:function(t,e,r){"use strict";var n=r(2109),o=r(3111).trim;n({target:"String",proto:!0,forced:r(6091)("trim")},{trim:function(){return o(this)}})}},function(t){t(t.s=1226)}]);
1
+ (self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[336],{1226:function(t,e,r){"use strict";function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}r(5827),r(1539),r(4916),r(5306),r(2222),r(6992),r(8783),r(3948),r(1637),r(489),r(2419),r(4819),r(5003),r(2526),r(1817),r(2165),r(4747),r(7941),r(9826),r(8309),r(9600),r(1249),r(7327),r(9714),r(285),r(8559),r(4723),r(3123),r(9720),r(3210),r(4765),r(7042),r(1038);var i,s=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o(this,t),this.bookReaderOptions=e,this.urlSchema=[{name:"page",position:"path",default:"n0"},{name:"mode",position:"path",default:"2up"},{name:"search",position:"path",deprecated_for:"q"},{name:"q",position:"query_param"},{name:"sort",position:"query_param"},{name:"view",position:"query_param"},{name:"admin",position:"query_param"}],this.urlState={},this.urlMode=this.bookReaderOptions.urlMode||"hash",this.urlHistoryBasePath=this.bookReaderOptions.urlHistoryBasePath||"/",this.urlLocationPollId=null,this.oldLocationHash=null,this.oldUserHash=null}var e,r;return e=t,(r=[{key:"urlStateToUrlString",value:function(t){var e=this,r=new URLSearchParams,n={};Object.keys(t).forEach((function(o){var a,i,s,u,l=e.urlSchema.find((function(t){return t.name===o}));null!==(a=l)&&void 0!==a&&a.deprecated_for&&(l=e.urlSchema.find((function(t){return t.name===l.deprecated_for}))),"path"==(null===(i=l)||void 0===i?void 0:i.position)?n[null===(s=l)||void 0===s?void 0:s.name]=t[o]:r.append((null===(u=l)||void 0===u?void 0:u.name)||o,t[o])}));var o=this.urlSchema.filter((function(t){return"path"==t.position})).map((function(t){return n[t.name]?"".concat(t.name,"/").concat(n[t.name]):""})).join("/"),a="".concat(o.replace(/\/+/g,"/").replace(/\/+$/,"")),i="".concat(a,"?").concat(r.toString());return r.toString()?i:"".concat(a)}},{key:"urlStringToUrlState",value:function(t){var e={},r=new URL(t,"http://example.com"),o=Object.fromEntries(r.searchParams.entries()),a=r.pathname.match(/[^\\/]+\/[^\\/]+/g),i=a?Object.fromEntries(a.map((function(t){return t.split("/")}))):{},s=function(t,e){return Object.keys(t).some((function(t){return t==e}))};return this.urlSchema.filter((function(t){return"path"==t.position})).forEach((function(t){var r=s(i,t.name);s(t,"deprecated_for")&&r?e[t.deprecated_for]=i[t.name]:r&&(e[t.name]=i[t.name])})),Object.entries(o).forEach((function(t){var r,o,a=(o=2,function(t){if(Array.isArray(t))return t}(r=t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,a=[],i=!0,s=!1;try{for(r=r.call(t);!(i=(n=r.next()).done)&&(a.push(n.value),!e||a.length!==e);i=!0);}catch(t){s=!0,o=t}finally{try{i||null==r.return||r.return()}finally{if(s)throw o}}return a}}(r,o)||function(t,e){if(t){if("string"==typeof t)return n(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}(r,o)||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.")}()),i=a[0],s=a[1];e[i]=s})),e}},{key:"setUrlParam",value:function(t,e){this.urlState[t]=e,this.pushToAddressBar()}},{key:"removeUrlParam",value:function(t){delete this.urlState[t],this.pushToAddressBar()}},{key:"getUrlParam",value:function(t){return this.urlState[t]}},{key:"pushToAddressBar",value:function(){var t=this.urlStateToUrlString(this.urlState),e="/"!==t?t:"";if("history"==this.urlMode){if(window.history&&window.history.replaceState){var r="".concat(this.urlHistoryBasePath).concat(e).trim().replace(/(\/+)/g,"/");window.history.replaceState({},null,r)}}else window.location.replace("#"+e);this.oldLocationHash=t}},{key:"listenForHashChanges",value:function(){var t=this;this.oldLocationHash=window.location.hash.substr(1),this.urlLocationPollId&&(clearInterval(this.urlLocationPollId),this.urlLocationPollId=null),this.urlLocationPollId=setInterval((function(){var e=window.location.hash.substr(1);e!=t.oldLocationHash&&(t.urlState=t.urlStringToUrlState(e))}),500)}},{key:"pullFromAddressBar",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.location,e="history"===this.urlMode?t.pathname.substr(this.urlHistoryBasePath.length)+t.search:t.hash.substr(1);this.urlState=this.urlStringToUrlState(e)}}])&&a(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),t}();function u(t){return(u="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})(t)}function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function c(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function h(){return(h="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,r){var n=f(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(arguments.length<3?t:r):o.value}}).apply(this,arguments)}function f(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=m(t)););return t}function p(t,e){return(p=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function d(t,e){if(e&&("object"===u(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)}function m(t){return(m=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(3609).extend(BookReader.defaultOptions,{enableUrlPlugin:!0,bookId:"",defaults:null,updateWindowTitle:!1,urlMode:"hash",urlHistoryBasePath:"/",urlTrackedParams:["page","search","mode","region","highlight","view"],urlTrackIndex0:!1}),BookReader.prototype.setup=(i=BookReader.prototype.setup,function(t){i.call(this,t),this.bookId=t.bookId,this.defaults=t.defaults,this.locationPollId=null,this.oldLocationHash=null,this.oldUserHash=null}),BookReader.prototype.init=function(t){return function(){var e=this;this.options.enableUrlPlugin&&(this.bind(BookReader.eventNames.PostInit,(function(){var t=e.options,r=t.updateWindowTitle,n=t.urlMode;r&&(document.title=e.shortTitle(e.bookTitle,50)),"hash"===n&&e.urlStartLocationPolling()})),this.bind(BookReader.eventNames.fragmentChange,this.urlUpdateFragment.bind(this))),t.call(this)}}(BookReader.prototype.init),BookReader.prototype.shortTitle=function(t){return this.bookTitle.length<t?this.bookTitle:"".concat(this.bookTitle.substr(0,t-3),"...")},BookReader.prototype.urlStartLocationPolling=function(){var t=this;this.oldLocationHash=this.urlReadFragment(),this.locationPollId&&(clearInterval(this.locationPollId),this.locationPollId=null),this.locationPollId=setInterval((function(){var e=t.urlReadFragment();if(e!=t.oldLocationHash&&e!=t.oldUserHash){var r=t.paramsFromFragment(e),n=function(){return t.updateFromParams(r)};t.trigger(BookReader.eventNames.stop),t.animating?(t.autoStop&&t.autoStop(),t.animationFinishedCallback=n):n(),t.oldUserHash=e}}),500)},BookReader.prototype.urlUpdateFragment=function(){var t=this.paramsFromCurrent(),e=this.options,r=e.urlMode,n=e.urlTrackIndex0,o=e.urlTrackedParams;n||void 0===t.index||0!==t.index||(delete t.index,delete t.page);var a=o.reduce((function(e,r){return r in t&&(e[r]=t[r]),e}),{}),i=this.fragmentFromParams(a,r),s=this.urlReadFragment(),u=this.getLocationSearch(),l=this.queryStringFromParams(a,u,r);if(s!==i||u!==l)if("history"===r){if(window.history&&window.history.replaceState){var c=this.options.urlHistoryBasePath.replace(/\/+$/,""),h=""===i?"":"/".concat(i),f="".concat(c).concat(h).concat(l);window.history.replaceState({},null,f),this.oldLocationHash=i+l}}else{var p=this.urlParamsFiltersOnlySearch(this.readQueryString());window.location.replace("#"+i+p),this.oldLocationHash=i+p}},BookReader.prototype.urlParamsFiltersOnlySearch=function(t){var e=new URLSearchParams(t);return e.has("q")?"?".concat(new URLSearchParams({q:e.get("q")})):""},BookReader.prototype.urlReadFragment=function(){var t=this.options,e=t.urlMode,r=t.urlHistoryBasePath;return"history"===e?window.location.pathname.substr(r.length):window.location.hash.substr(1)},BookReader.prototype.urlReadHashFragment=function(){return window.location.hash.substr(1)};var v=function(t){!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)}(i,BookReader);var e,r,n,o,a=(n=i,o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=m(n);if(o){var r=m(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return d(this,t)});function i(){return l(this,i),a.apply(this,arguments)}return e=i,(r=[{key:"init",value:function(){var t=this;this.options.enableUrlPlugin&&(this.urlPlugin=new s(this.options),this.bind(BookReader.eventNames.PostInit,(function(){"hash"===t.options.urlMode&&t.urlPlugin.listenForHashChanges()}))),h(m(i.prototype),"init",this).call(this)}}])&&c(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),i}();window.BookReader=v},3197:function(t){"use strict";var e=2147483647,r=/[^\0-\u007E]/,n=/[.\u3002\uFF0E\uFF61]/g,o="Overflow: input needs wider integers to process",a=Math.floor,i=String.fromCharCode,s=function(t){return t+22+75*(t<26)},u=function(t,e,r){var n=0;for(t=r?a(t/700):t>>1,t+=a(t/e);t>455;n+=36)t=a(t/35);return a(n+36*t/(t+38))},l=function(t){var r,n,l=[],c=(t=function(t){for(var e=[],r=0,n=t.length;r<n;){var o=t.charCodeAt(r++);if(o>=55296&&o<=56319&&r<n){var a=t.charCodeAt(r++);56320==(64512&a)?e.push(((1023&o)<<10)+(1023&a)+65536):(e.push(o),r--)}else e.push(o)}return e}(t)).length,h=128,f=0,p=72;for(r=0;r<t.length;r++)(n=t[r])<128&&l.push(i(n));var d=l.length,m=d;for(d&&l.push("-");m<c;){var v=e;for(r=0;r<t.length;r++)(n=t[r])>=h&&n<v&&(v=n);var y=m+1;if(v-h>a((e-f)/y))throw RangeError(o);for(f+=(v-h)*y,h=v,r=0;r<t.length;r++){if((n=t[r])<h&&++f>e)throw RangeError(o);if(n==h){for(var g=f,b=36;;b+=36){var w=b<=p?1:b>=p+26?26:b-p;if(g<w)break;var k=g-w,R=36-w;l.push(i(s(w+k%R))),g=a(k/R)}l.push(i(s(g))),p=u(f,y,m==d),f=0,++m}}++f,++h}return l.join("")};t.exports=function(t){var e,o,a=[],i=t.toLowerCase().replace(n,".").split(".");for(e=0;e<i.length;e++)o=i[e],a.push(r.test(o)?"xn--"+l(o):o);return a.join(".")}},6091:function(t,e,r){var n=r(7293),o=r(1361);t.exports=function(t){return n((function(){return!!o[t]()||"​…᠎"!="​…᠎"[t]()||o[t].name!==t}))}},9720:function(t,e,r){var n=r(2109),o=r(4699).entries;n({target:"Object",stat:!0},{entries:function(t){return o(t)}})},8559:function(t,e,r){var n=r(2109),o=r(408),a=r(6135);n({target:"Object",stat:!0},{fromEntries:function(t){var e={};return o(t,(function(t,r){a(e,t,r)}),{AS_ENTRIES:!0}),e}})},4723:function(t,e,r){"use strict";var n=r(7007),o=r(9670),a=r(7466),i=r(1340),s=r(4488),u=r(1530),l=r(7651);n("match",(function(t,e,r){return[function(e){var r=s(this),n=null==e?void 0:e[t];return void 0!==n?n.call(e,r):new RegExp(e)[t](i(r))},function(t){var n=o(this),s=i(t),c=r(e,n,s);if(c.done)return c.value;if(!n.global)return l(n,s);var h=n.unicode;n.lastIndex=0;for(var f,p=[],d=0;null!==(f=l(n,s));){var m=i(f[0]);p[d]=m,""===m&&(n.lastIndex=u(s,a(n.lastIndex),h)),d++}return 0===d?null:p}]}))},3210:function(t,e,r){"use strict";var n=r(2109),o=r(3111).trim;n({target:"String",proto:!0,forced:r(6091)("trim")},{trim:function(){return o(this)}})},285:function(t,e,r){"use strict";r(8783);var n,o=r(2109),a=r(9781),i=r(590),s=r(7854),u=r(6048),l=r(1320),c=r(5787),h=r(6656),f=r(1574),p=r(8457),d=r(8710).codeAt,m=r(3197),v=r(1340),y=r(8003),g=r(1637),b=r(9909),w=s.URL,k=g.URLSearchParams,R=g.getState,S=b.set,P=b.getterFor("URL"),B=Math.floor,L=Math.pow,U="Invalid scheme",A="Invalid host",O="Invalid port",j=/[A-Za-z]/,I=/[\d+-.A-Za-z]/,q=/\d/,T=/^0x/i,F=/^[0-7]+$/,H=/^\d+$/,E=/^[\dA-Fa-f]+$/,_=/[\0\t\n\r #%/:<>?@[\\\]^|]/,C=/[\0\t\n\r #/:<>?@[\\\]^|]/,x=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,M=/[\t\n\r]/g,$=function(t,e){var r,n,o;if("["==e.charAt(0)){if("]"!=e.charAt(e.length-1))return A;if(!(r=z(e.slice(1,-1))))return A;t.host=r}else if(V(t)){if(e=m(e),_.test(e))return A;if(null===(r=N(e)))return A;t.host=r}else{if(C.test(e))return A;for(r="",n=p(e),o=0;o<n.length;o++)r+=G(n[o],W);t.host=r}},N=function(t){var e,r,n,o,a,i,s,u=t.split(".");if(u.length&&""==u[u.length-1]&&u.pop(),(e=u.length)>4)return t;for(r=[],n=0;n<e;n++){if(""==(o=u[n]))return t;if(a=10,o.length>1&&"0"==o.charAt(0)&&(a=T.test(o)?16:8,o=o.slice(8==a?1:2)),""===o)i=0;else{if(!(10==a?H:8==a?F:E).test(o))return t;i=parseInt(o,a)}r.push(i)}for(n=0;n<e;n++)if(i=r[n],n==e-1){if(i>=L(256,5-e))return null}else if(i>255)return null;for(s=r.pop(),n=0;n<r.length;n++)s+=r[n]*L(256,3-n);return s},z=function(t){var e,r,n,o,a,i,s,u=[0,0,0,0,0,0,0,0],l=0,c=null,h=0,f=function(){return t.charAt(h)};if(":"==f()){if(":"!=t.charAt(1))return;h+=2,c=++l}for(;f();){if(8==l)return;if(":"!=f()){for(e=r=0;r<4&&E.test(f());)e=16*e+parseInt(f(),16),h++,r++;if("."==f()){if(0==r)return;if(h-=r,l>6)return;for(n=0;f();){if(o=null,n>0){if(!("."==f()&&n<4))return;h++}if(!q.test(f()))return;for(;q.test(f());){if(a=parseInt(f(),10),null===o)o=a;else{if(0==o)return;o=10*o+a}if(o>255)return;h++}u[l]=256*u[l]+o,2!=++n&&4!=n||l++}if(4!=n)return;break}if(":"==f()){if(h++,!f())return}else if(f())return;u[l++]=e}else{if(null!==c)return;h++,c=++l}}if(null!==c)for(i=l-c,l=7;0!=l&&i>0;)s=u[l],u[l--]=u[c+i-1],u[c+--i]=s;else if(8!=l)return;return u},D=function(t){var e,r,n,o;if("number"==typeof t){for(e=[],r=0;r<4;r++)e.unshift(t%256),t=B(t/256);return e.join(".")}if("object"==typeof t){for(e="",n=function(t){for(var e=null,r=1,n=null,o=0,a=0;a<8;a++)0!==t[a]?(o>r&&(e=n,r=o),n=null,o=0):(null===n&&(n=a),++o);return o>r&&(e=n,r=o),e}(t),r=0;r<8;r++)o&&0===t[r]||(o&&(o=!1),n===r?(e+=r?":":"::",o=!0):(e+=t[r].toString(16),r<7&&(e+=":")));return"["+e+"]"}return t},W={},Z=f({},W,{" ":1,'"':1,"<":1,">":1,"`":1}),J=f({},Z,{"#":1,"?":1,"{":1,"}":1}),Q=f({},J,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),G=function(t,e){var r=d(t,0);return r>32&&r<127&&!h(e,t)?t:encodeURIComponent(t)},K={ftp:21,file:null,http:80,https:443,ws:80,wss:443},V=function(t){return h(K,t.scheme)},X=function(t){return""!=t.username||""!=t.password},Y=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},tt=function(t,e){var r;return 2==t.length&&j.test(t.charAt(0))&&(":"==(r=t.charAt(1))||!e&&"|"==r)},et=function(t){var e;return t.length>1&&tt(t.slice(0,2))&&(2==t.length||"/"===(e=t.charAt(2))||"\\"===e||"?"===e||"#"===e)},rt=function(t){var e=t.path,r=e.length;!r||"file"==t.scheme&&1==r&&tt(e[0],!0)||e.pop()},nt=function(t){return"."===t||"%2e"===t.toLowerCase()},ot={},at={},it={},st={},ut={},lt={},ct={},ht={},ft={},pt={},dt={},mt={},vt={},yt={},gt={},bt={},wt={},kt={},Rt={},St={},Pt={},Bt=function(t,e,r,o){var a,i,s,u,l,c=r||ot,f=0,d="",m=!1,v=!1,y=!1;for(r||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,e=e.replace(x,"")),e=e.replace(M,""),a=p(e);f<=a.length;){switch(i=a[f],c){case ot:if(!i||!j.test(i)){if(r)return U;c=it;continue}d+=i.toLowerCase(),c=at;break;case at:if(i&&(I.test(i)||"+"==i||"-"==i||"."==i))d+=i.toLowerCase();else{if(":"!=i){if(r)return U;d="",c=it,f=0;continue}if(r&&(V(t)!=h(K,d)||"file"==d&&(X(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=d,r)return void(V(t)&&K[t.scheme]==t.port&&(t.port=null));d="","file"==t.scheme?c=yt:V(t)&&o&&o.scheme==t.scheme?c=st:V(t)?c=ht:"/"==a[f+1]?(c=ut,f++):(t.cannotBeABaseURL=!0,t.path.push(""),c=Rt)}break;case it:if(!o||o.cannotBeABaseURL&&"#"!=i)return U;if(o.cannotBeABaseURL&&"#"==i){t.scheme=o.scheme,t.path=o.path.slice(),t.query=o.query,t.fragment="",t.cannotBeABaseURL=!0,c=Pt;break}c="file"==o.scheme?yt:lt;continue;case st:if("/"!=i||"/"!=a[f+1]){c=lt;continue}c=ft,f++;break;case ut:if("/"==i){c=pt;break}c=kt;continue;case lt:if(t.scheme=o.scheme,i==n)t.username=o.username,t.password=o.password,t.host=o.host,t.port=o.port,t.path=o.path.slice(),t.query=o.query;else if("/"==i||"\\"==i&&V(t))c=ct;else if("?"==i)t.username=o.username,t.password=o.password,t.host=o.host,t.port=o.port,t.path=o.path.slice(),t.query="",c=St;else{if("#"!=i){t.username=o.username,t.password=o.password,t.host=o.host,t.port=o.port,t.path=o.path.slice(),t.path.pop(),c=kt;continue}t.username=o.username,t.password=o.password,t.host=o.host,t.port=o.port,t.path=o.path.slice(),t.query=o.query,t.fragment="",c=Pt}break;case ct:if(!V(t)||"/"!=i&&"\\"!=i){if("/"!=i){t.username=o.username,t.password=o.password,t.host=o.host,t.port=o.port,c=kt;continue}c=pt}else c=ft;break;case ht:if(c=ft,"/"!=i||"/"!=d.charAt(f+1))continue;f++;break;case ft:if("/"!=i&&"\\"!=i){c=pt;continue}break;case pt:if("@"==i){m&&(d="%40"+d),m=!0,s=p(d);for(var g=0;g<s.length;g++){var b=s[g];if(":"!=b||y){var w=G(b,Q);y?t.password+=w:t.username+=w}else y=!0}d=""}else if(i==n||"/"==i||"?"==i||"#"==i||"\\"==i&&V(t)){if(m&&""==d)return"Invalid authority";f-=p(d).length+1,d="",c=dt}else d+=i;break;case dt:case mt:if(r&&"file"==t.scheme){c=bt;continue}if(":"!=i||v){if(i==n||"/"==i||"?"==i||"#"==i||"\\"==i&&V(t)){if(V(t)&&""==d)return A;if(r&&""==d&&(X(t)||null!==t.port))return;if(u=$(t,d))return u;if(d="",c=wt,r)return;continue}"["==i?v=!0:"]"==i&&(v=!1),d+=i}else{if(""==d)return A;if(u=$(t,d))return u;if(d="",c=vt,r==mt)return}break;case vt:if(!q.test(i)){if(i==n||"/"==i||"?"==i||"#"==i||"\\"==i&&V(t)||r){if(""!=d){var k=parseInt(d,10);if(k>65535)return O;t.port=V(t)&&k===K[t.scheme]?null:k,d=""}if(r)return;c=wt;continue}return O}d+=i;break;case yt:if(t.scheme="file","/"==i||"\\"==i)c=gt;else{if(!o||"file"!=o.scheme){c=kt;continue}if(i==n)t.host=o.host,t.path=o.path.slice(),t.query=o.query;else if("?"==i)t.host=o.host,t.path=o.path.slice(),t.query="",c=St;else{if("#"!=i){et(a.slice(f).join(""))||(t.host=o.host,t.path=o.path.slice(),rt(t)),c=kt;continue}t.host=o.host,t.path=o.path.slice(),t.query=o.query,t.fragment="",c=Pt}}break;case gt:if("/"==i||"\\"==i){c=bt;break}o&&"file"==o.scheme&&!et(a.slice(f).join(""))&&(tt(o.path[0],!0)?t.path.push(o.path[0]):t.host=o.host),c=kt;continue;case bt:if(i==n||"/"==i||"\\"==i||"?"==i||"#"==i){if(!r&&tt(d))c=kt;else if(""==d){if(t.host="",r)return;c=wt}else{if(u=$(t,d))return u;if("localhost"==t.host&&(t.host=""),r)return;d="",c=wt}continue}d+=i;break;case wt:if(V(t)){if(c=kt,"/"!=i&&"\\"!=i)continue}else if(r||"?"!=i)if(r||"#"!=i){if(i!=n&&(c=kt,"/"!=i))continue}else t.fragment="",c=Pt;else t.query="",c=St;break;case kt:if(i==n||"/"==i||"\\"==i&&V(t)||!r&&("?"==i||"#"==i)){if(".."===(l=(l=d).toLowerCase())||"%2e."===l||".%2e"===l||"%2e%2e"===l?(rt(t),"/"==i||"\\"==i&&V(t)||t.path.push("")):nt(d)?"/"==i||"\\"==i&&V(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&tt(d)&&(t.host&&(t.host=""),d=d.charAt(0)+":"),t.path.push(d)),d="","file"==t.scheme&&(i==n||"?"==i||"#"==i))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==i?(t.query="",c=St):"#"==i&&(t.fragment="",c=Pt)}else d+=G(i,J);break;case Rt:"?"==i?(t.query="",c=St):"#"==i?(t.fragment="",c=Pt):i!=n&&(t.path[0]+=G(i,W));break;case St:r||"#"!=i?i!=n&&("'"==i&&V(t)?t.query+="%27":t.query+="#"==i?"%23":G(i,W)):(t.fragment="",c=Pt);break;case Pt:i!=n&&(t.fragment+=G(i,Z))}f++}},Lt=function(t){var e,r,n=c(this,Lt,"URL"),o=arguments.length>1?arguments[1]:void 0,i=v(t),s=S(n,{type:"URL"});if(void 0!==o)if(o instanceof Lt)e=P(o);else if(r=Bt(e={},v(o)))throw TypeError(r);if(r=Bt(s,i,null,e))throw TypeError(r);var u=s.searchParams=new k,l=R(u);l.updateSearchParams(s.query),l.updateURL=function(){s.query=String(u)||null},a||(n.href=At.call(n),n.origin=Ot.call(n),n.protocol=jt.call(n),n.username=It.call(n),n.password=qt.call(n),n.host=Tt.call(n),n.hostname=Ft.call(n),n.port=Ht.call(n),n.pathname=Et.call(n),n.search=_t.call(n),n.searchParams=Ct.call(n),n.hash=xt.call(n))},Ut=Lt.prototype,At=function(){var t=P(this),e=t.scheme,r=t.username,n=t.password,o=t.host,a=t.port,i=t.path,s=t.query,u=t.fragment,l=e+":";return null!==o?(l+="//",X(t)&&(l+=r+(n?":"+n:"")+"@"),l+=D(o),null!==a&&(l+=":"+a)):"file"==e&&(l+="//"),l+=t.cannotBeABaseURL?i[0]:i.length?"/"+i.join("/"):"",null!==s&&(l+="?"+s),null!==u&&(l+="#"+u),l},Ot=function(){var t=P(this),e=t.scheme,r=t.port;if("blob"==e)try{return new Lt(e.path[0]).origin}catch(t){return"null"}return"file"!=e&&V(t)?e+"://"+D(t.host)+(null!==r?":"+r:""):"null"},jt=function(){return P(this).scheme+":"},It=function(){return P(this).username},qt=function(){return P(this).password},Tt=function(){var t=P(this),e=t.host,r=t.port;return null===e?"":null===r?D(e):D(e)+":"+r},Ft=function(){var t=P(this).host;return null===t?"":D(t)},Ht=function(){var t=P(this).port;return null===t?"":String(t)},Et=function(){var t=P(this),e=t.path;return t.cannotBeABaseURL?e[0]:e.length?"/"+e.join("/"):""},_t=function(){var t=P(this).query;return t?"?"+t:""},Ct=function(){return P(this).searchParams},xt=function(){var t=P(this).fragment;return t?"#"+t:""},Mt=function(t,e){return{get:t,set:e,configurable:!0,enumerable:!0}};if(a&&u(Ut,{href:Mt(At,(function(t){var e=P(this),r=v(t),n=Bt(e,r);if(n)throw TypeError(n);R(e.searchParams).updateSearchParams(e.query)})),origin:Mt(Ot),protocol:Mt(jt,(function(t){var e=P(this);Bt(e,v(t)+":",ot)})),username:Mt(It,(function(t){var e=P(this),r=p(v(t));if(!Y(e)){e.username="";for(var n=0;n<r.length;n++)e.username+=G(r[n],Q)}})),password:Mt(qt,(function(t){var e=P(this),r=p(v(t));if(!Y(e)){e.password="";for(var n=0;n<r.length;n++)e.password+=G(r[n],Q)}})),host:Mt(Tt,(function(t){var e=P(this);e.cannotBeABaseURL||Bt(e,v(t),dt)})),hostname:Mt(Ft,(function(t){var e=P(this);e.cannotBeABaseURL||Bt(e,v(t),mt)})),port:Mt(Ht,(function(t){var e=P(this);Y(e)||(""==(t=v(t))?e.port=null:Bt(e,t,vt))})),pathname:Mt(Et,(function(t){var e=P(this);e.cannotBeABaseURL||(e.path=[],Bt(e,v(t),wt))})),search:Mt(_t,(function(t){var e=P(this);""==(t=v(t))?e.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),e.query="",Bt(e,t,St)),R(e.searchParams).updateSearchParams(e.query)})),searchParams:Mt(Ct),hash:Mt(xt,(function(t){var e=P(this);""!=(t=v(t))?("#"==t.charAt(0)&&(t=t.slice(1)),e.fragment="",Bt(e,t,Pt)):e.fragment=null}))}),l(Ut,"toJSON",(function(){return At.call(this)}),{enumerable:!0}),l(Ut,"toString",(function(){return At.call(this)}),{enumerable:!0}),w){var $t=w.createObjectURL,Nt=w.revokeObjectURL;$t&&l(Lt,"createObjectURL",(function(t){return $t.apply(w,arguments)})),Nt&&l(Lt,"revokeObjectURL",(function(t){return Nt.apply(w,arguments)}))}y(Lt,"URL"),o({global:!0,forced:!i,sham:!a},{URL:Lt})}},function(t){t(t.s=1226)}]);
2
2
  //# sourceMappingURL=plugin.url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.url.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/url/UrlPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/url/plugin.url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js"],"sourcesContent":["export class UrlPlugin {\n constructor(options = {}) {\n this.bookReaderOptions = options;\n\n // the canonical order of elements is important in the path and query string\n this.urlSchema = [\n { name: 'page', position: 'path', default: 'n0' },\n { name: 'mode', position: 'path', default: '2up' },\n { name: 'search', position: 'path', deprecated_for: 'q' },\n { name: 'q', position: 'query_param' },\n { name: 'sort', position: 'query_param' },\n { name: 'view', position: 'query_param' },\n { name: 'admin', position: 'query_param' },\n ];\n\n this.urlState = {};\n this.urlMode = this.bookReaderOptions.urlMode || 'hash';\n this.urlHistoryBasePath = this.bookReaderOptions.urlHistoryBasePath || '/';\n this.urlLocationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n }\n\n /**\n * Parse JSON object URL state to string format\n * Arrange path names in an order that it is positioned on the urlSchema\n * @param {Object} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = this.urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = this.urlSchema.find(schemaKey => schemaKey.name === schema.deprecated_for);\n }\n if (schema?.position == 'path') {\n pathParams[schema?.name] = urlState[key];\n } else {\n searchParams.append(schema?.name || key, urlState[key]);\n }\n });\n\n const strPathParams = this.urlSchema\n .filter(s => s.position == 'path')\n .map(schema => pathParams[schema.name] ? `${schema.name}/${pathParams[schema.name]}` : '')\n .join('/');\n\n // replace consecutive slashes with a single slash + remove trailing slashes\n const strStrippedTrailingSlash = `${strPathParams.replace(/\\/+/g, '/').replace(/\\/+$/, '')}`;\n const concatenatedPath = `${strStrippedTrailingSlash}?${searchParams.toString()}`;\n return searchParams.toString() ? concatenatedPath : `${strStrippedTrailingSlash}`;\n }\n\n /**\n * Parse string URL and add it in the current urlState\n * Example:\n * /page/n7/mode/2up => {page: 'n7', mode: '2up'}\n * /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}\n * @param {string} urlString\n * @returns {object}\n */\n urlStringToUrlState(urlString) {\n const urlState = {};\n\n // Fetch searchParams from given {str}\n // Note: whole URL path is needed for URL parsing\n const urlPath = new URL(urlString, 'http://example.com');\n const urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());\n const splitUrlMatches = urlPath.pathname.match(/[^\\\\/]+\\/[^\\\\/]+/g);\n const urlStrSplitSlashObj = splitUrlMatches ? Object.fromEntries(splitUrlMatches.map(x => x.split('/'))) : {};\n\n const doesKeyExists = (_object, _key) => {\n return Object.keys(_object).some(value => value == _key);\n };\n\n // Add path objects to urlState\n this.urlSchema\n .filter(schema => schema.position == 'path')\n .forEach(schema => {\n const hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);\n const hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;\n\n if (hasDeprecatedKey) {\n urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];\n return;\n }\n\n if (hasPropertyKey) {\n urlState[schema.name] = urlStrSplitSlashObj[schema.name];\n return;\n }\n });\n\n // Add searchParams to urlState\n Object.entries(urlSearchParamsObj).forEach(([key, value]) => {\n urlState[key] = value;\n });\n\n return urlState;\n }\n\n /**\n * Add or update key-value to the urlState\n * @param {string} key\n * @param {string} val\n */\n setUrlParam(key, value) {\n this.urlState[key] = value;\n\n this.pushToAddressBar();\n }\n\n /**\n * Delete key-value to the urlState\n * @param {string} key\n */\n removeUrlParam(key) {\n delete this.urlState[key];\n\n this.pushToAddressBar();\n }\n\n /**\n * Get key-value from the urlState\n * @param {string} key\n * @return {string}\n */\n getUrlParam(key) {\n return this.urlState[key];\n }\n\n /**\n * Push URL params to addressbar\n */\n pushToAddressBar() {\n const urlStrPath = this.urlStateToUrlString(this.urlState);\n const concatenatedPath = urlStrPath !== '/' ? urlStrPath : '';\n if (this.urlMode == 'history') {\n if (window.history && window.history.replaceState) {\n const newUrlPath = `${this.urlHistoryBasePath}${concatenatedPath}`.trim().replace(/(\\/+)/g, '/');\n window.history.replaceState({}, null, newUrlPath);\n }\n } else {\n window.location.replace('#' + concatenatedPath);\n }\n this.oldLocationHash = urlStrPath;\n }\n\n /**\n * Get the url and check if it has changed\n * If it was changeed, update the urlState\n */\n listenForHashChanges() {\n this.oldLocationHash = window.location.hash.substr(1);\n if (this.urlLocationPollId) {\n clearInterval(this.urlLocationPollId);\n this.urlLocationPollId = null;\n }\n\n // check if the URL changes\n const updateHash = () => {\n const newFragment = window.location.hash.substr(1);\n const hasFragmentChange = newFragment != this.oldLocationHash;\n\n if (!hasFragmentChange) { return; }\n\n this.urlState = this.urlStringToUrlState(newFragment);\n };\n this.urlLocationPollId = setInterval(updateHash, 500);\n }\n\n /**\n * Will read either the hash or URL and return the bookreader fragment\n */\n pullFromAddressBar (location = window.location) {\n const path = this.urlMode === 'history'\n ? (location.pathname.substr(this.urlHistoryBasePath.length) + location.search)\n : location.hash.substr(1);\n this.urlState = this.urlStringToUrlState(path);\n }\n}\n","/* global BookReader */\n\nimport { UrlPlugin } from \"./UrlPlugin\";\n\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(this.bookTitle, 50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollId);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlMode, urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (urlMode === 'history') {\n if (window.history && window.history.replaceState) {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n\n }\n } else {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\nexport class BookreaderUrlPlugin extends BookReader {\n init() {\n if (this.options.enableUrlPlugin) {\n this.urlPlugin = new UrlPlugin(this.options);\n this.bind(BookReader.eventNames.PostInit, () => {\n const { urlMode } = this.options;\n\n if (urlMode === 'hash') {\n this.urlPlugin.listenForHashChanges();\n }\n });\n }\n\n super.init();\n }\n}\n\nwindow.BookReader = BookreaderUrlPlugin;\nexport default BookreaderUrlPlugin;\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","var $ = 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","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n"],"names":["super_","UrlPlugin","options","this","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlMode","urlHistoryBasePath","urlLocationPollId","oldLocationHash","oldUserHash","searchParams","URLSearchParams","pathParams","Object","keys","forEach","key","schema","find","schemaKey","append","strPathParams","filter","s","map","join","strStrippedTrailingSlash","replace","concatenatedPath","toString","urlString","urlPath","URL","urlSearchParamsObj","fromEntries","entries","splitUrlMatches","pathname","match","urlStrSplitSlashObj","x","split","doesKeyExists","_object","_key","some","value","hasPropertyKey","pushToAddressBar","urlStrPath","urlStateToUrlString","window","history","replaceState","newUrlPath","trim","location","hash","substr","clearInterval","setInterval","newFragment","urlStringToUrlState","path","length","search","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlTrackedParams","urlTrackIndex0","prototype","setup","call","locationPollId","init","bind","eventNames","PostInit","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","urlReadFragment","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","allParams","paramsFromCurrent","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","baseWithoutSlash","newFragmentWithSlash","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","url","has","q","get","urlReadHashFragment","BookreaderUrlPlugin","urlPlugin","listenForHashChanges","fails","whitespaces","module","exports","METHOD_NAME","$","$entries","target","stat","O","iterate","createProperty","iterable","obj","k","v","AS_ENTRIES","fixRegExpWellKnownSymbolLogic","anObject","toLength","requireObjectCoercible","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","matcher","undefined","RegExp","string","rx","S","res","done","global","fullUnicode","unicode","lastIndex","result","A","n","matchStr","$trim","proto","forced","forcedStringTrimMethod"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.url.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/plugins/url/UrlPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/url/plugin.url.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.object.from-entries.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.match.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.js"],"sourcesContent":["export class UrlPlugin {\n constructor(options = {}) {\n this.bookReaderOptions = options;\n\n // the canonical order of elements is important in the path and query string\n this.urlSchema = [\n { name: 'page', position: 'path', default: 'n0' },\n { name: 'mode', position: 'path', default: '2up' },\n { name: 'search', position: 'path', deprecated_for: 'q' },\n { name: 'q', position: 'query_param' },\n { name: 'sort', position: 'query_param' },\n { name: 'view', position: 'query_param' },\n { name: 'admin', position: 'query_param' },\n ];\n\n this.urlState = {};\n this.urlMode = this.bookReaderOptions.urlMode || 'hash';\n this.urlHistoryBasePath = this.bookReaderOptions.urlHistoryBasePath || '/';\n this.urlLocationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n }\n\n /**\n * Parse JSON object URL state to string format\n * Arrange path names in an order that it is positioned on the urlSchema\n * @param {Object} urlState\n * @returns {string}\n */\n urlStateToUrlString(urlState) {\n const searchParams = new URLSearchParams();\n const pathParams = {};\n\n Object.keys(urlState).forEach(key => {\n let schema = this.urlSchema.find(schema => schema.name === key);\n if (schema?.deprecated_for) {\n schema = this.urlSchema.find(schemaKey => schemaKey.name === schema.deprecated_for);\n }\n if (schema?.position == 'path') {\n pathParams[schema?.name] = urlState[key];\n } else {\n searchParams.append(schema?.name || key, urlState[key]);\n }\n });\n\n const strPathParams = this.urlSchema\n .filter(s => s.position == 'path')\n .map(schema => pathParams[schema.name] ? `${schema.name}/${pathParams[schema.name]}` : '')\n .join('/');\n\n // replace consecutive slashes with a single slash + remove trailing slashes\n const strStrippedTrailingSlash = `${strPathParams.replace(/\\/+/g, '/').replace(/\\/+$/, '')}`;\n const concatenatedPath = `${strStrippedTrailingSlash}?${searchParams.toString()}`;\n return searchParams.toString() ? concatenatedPath : `${strStrippedTrailingSlash}`;\n }\n\n /**\n * Parse string URL and add it in the current urlState\n * Example:\n * /page/n7/mode/2up => {page: 'n7', mode: '2up'}\n * /page/n7/mode/2up/search/hello => {page: 'n7', mode: '2up', q: 'hello'}\n * @param {string} urlString\n * @returns {object}\n */\n urlStringToUrlState(urlString) {\n const urlState = {};\n\n // Fetch searchParams from given {str}\n // Note: whole URL path is needed for URL parsing\n const urlPath = new URL(urlString, 'http://example.com');\n const urlSearchParamsObj = Object.fromEntries(urlPath.searchParams.entries());\n const splitUrlMatches = urlPath.pathname.match(/[^\\\\/]+\\/[^\\\\/]+/g);\n const urlStrSplitSlashObj = splitUrlMatches ? Object.fromEntries(splitUrlMatches.map(x => x.split('/'))) : {};\n\n const doesKeyExists = (_object, _key) => {\n return Object.keys(_object).some(value => value == _key);\n };\n\n // Add path objects to urlState\n this.urlSchema\n .filter(schema => schema.position == 'path')\n .forEach(schema => {\n const hasPropertyKey = doesKeyExists(urlStrSplitSlashObj, schema.name);\n const hasDeprecatedKey = doesKeyExists(schema, 'deprecated_for') && hasPropertyKey;\n\n if (hasDeprecatedKey) {\n urlState[schema.deprecated_for] = urlStrSplitSlashObj[schema.name];\n return;\n }\n\n if (hasPropertyKey) {\n urlState[schema.name] = urlStrSplitSlashObj[schema.name];\n return;\n }\n });\n\n // Add searchParams to urlState\n Object.entries(urlSearchParamsObj).forEach(([key, value]) => {\n urlState[key] = value;\n });\n\n return urlState;\n }\n\n /**\n * Add or update key-value to the urlState\n * @param {string} key\n * @param {string} val\n */\n setUrlParam(key, value) {\n this.urlState[key] = value;\n\n this.pushToAddressBar();\n }\n\n /**\n * Delete key-value to the urlState\n * @param {string} key\n */\n removeUrlParam(key) {\n delete this.urlState[key];\n\n this.pushToAddressBar();\n }\n\n /**\n * Get key-value from the urlState\n * @param {string} key\n * @return {string}\n */\n getUrlParam(key) {\n return this.urlState[key];\n }\n\n /**\n * Push URL params to addressbar\n */\n pushToAddressBar() {\n const urlStrPath = this.urlStateToUrlString(this.urlState);\n const concatenatedPath = urlStrPath !== '/' ? urlStrPath : '';\n if (this.urlMode == 'history') {\n if (window.history && window.history.replaceState) {\n const newUrlPath = `${this.urlHistoryBasePath}${concatenatedPath}`.trim().replace(/(\\/+)/g, '/');\n window.history.replaceState({}, null, newUrlPath);\n }\n } else {\n window.location.replace('#' + concatenatedPath);\n }\n this.oldLocationHash = urlStrPath;\n }\n\n /**\n * Get the url and check if it has changed\n * If it was changeed, update the urlState\n */\n listenForHashChanges() {\n this.oldLocationHash = window.location.hash.substr(1);\n if (this.urlLocationPollId) {\n clearInterval(this.urlLocationPollId);\n this.urlLocationPollId = null;\n }\n\n // check if the URL changes\n const updateHash = () => {\n const newFragment = window.location.hash.substr(1);\n const hasFragmentChange = newFragment != this.oldLocationHash;\n\n if (!hasFragmentChange) { return; }\n\n this.urlState = this.urlStringToUrlState(newFragment);\n };\n this.urlLocationPollId = setInterval(updateHash, 500);\n }\n\n /**\n * Will read either the hash or URL and return the bookreader fragment\n */\n pullFromAddressBar (location = window.location) {\n const path = this.urlMode === 'history'\n ? (location.pathname.substr(this.urlHistoryBasePath.length) + location.search)\n : location.hash.substr(1);\n this.urlState = this.urlStringToUrlState(path);\n }\n}\n","/* global BookReader */\n\nimport { UrlPlugin } from \"./UrlPlugin\";\n\n/**\n * Plugin for URL management in BookReader\n * Note read more about the url \"fragment\" here:\n * https://openlibrary.org/dev/docs/bookurls\n */\n\njQuery.extend(BookReader.defaultOptions, {\n enableUrlPlugin: true,\n bookId: '',\n /** @type {string} Defaults can be a urlFragment string */\n defaults: null,\n updateWindowTitle: false,\n\n /** @type {'history' | 'hash'} */\n urlMode: 'hash',\n\n /**\n * When using 'history' mode, this part of the URL is kept constant\n * @example /details/plato/\n */\n urlHistoryBasePath: '/',\n\n /** Only these params will be reflected onto the URL */\n urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight', 'view'],\n\n /** If true, don't update the URL when `page == n0 (eg \"/page/n0\")` */\n urlTrackIndex0: false,\n});\n\n/** @override */\nBookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.bookId = options.bookId;\n this.defaults = options.defaults;\n\n this.locationPollId = null;\n this.oldLocationHash = null;\n this.oldUserHash = null;\n };\n})(BookReader.prototype.setup);\n\n/** @override */\nBookReader.prototype.init = (function(super_) {\n return function() {\n\n if (this.options.enableUrlPlugin) {\n this.bind(BookReader.eventNames.PostInit, () => {\n const { updateWindowTitle, urlMode } = this.options;\n if (updateWindowTitle) {\n document.title = this.shortTitle(this.bookTitle, 50);\n }\n if (urlMode === 'hash') {\n this.urlStartLocationPolling();\n }\n });\n\n this.bind(BookReader.eventNames.fragmentChange,\n this.urlUpdateFragment.bind(this)\n );\n }\n super_.call(this);\n };\n})(BookReader.prototype.init);\n\n/**\n * Returns a shortened version of the title with the maximum number of characters\n * @param {number} maximumCharacters\n * @return {string}\n */\nBookReader.prototype.shortTitle = function(maximumCharacters) {\n if (this.bookTitle.length < maximumCharacters) {\n return this.bookTitle;\n }\n\n const title = `${this.bookTitle.substr(0, maximumCharacters - 3)}...`;\n return title;\n};\n\n/**\n * Starts polling of window.location to see hash fragment changes\n */\nBookReader.prototype.urlStartLocationPolling = function() {\n this.oldLocationHash = this.urlReadFragment();\n\n if (this.locationPollId) {\n clearInterval(this.locationPollId);\n this.locationPollId = null;\n }\n\n const updateHash = () => {\n const newFragment = this.urlReadFragment();\n const hasFragmentChange = (newFragment != this.oldLocationHash) && (newFragment != this.oldUserHash);\n\n if (!hasFragmentChange) { return; }\n\n const params = this.paramsFromFragment(newFragment);\n\n const updateParams = () => this.updateFromParams(params);\n\n this.trigger(BookReader.eventNames.stop);\n if (this.animating) {\n // Queue change if animating\n if (this.autoStop) this.autoStop();\n this.animationFinishedCallback = updateParams;\n } else {\n // update immediately\n updateParams();\n }\n this.oldUserHash = newFragment;\n };\n\n this.locationPollId = setInterval(updateHash, 500);\n};\n\n/**\n * Update URL from the current parameters.\n * Call this instead of manually using window.location.replace\n */\nBookReader.prototype.urlUpdateFragment = function() {\n const allParams = this.paramsFromCurrent();\n const { urlMode, urlTrackIndex0, urlTrackedParams } = this.options;\n\n if (!urlTrackIndex0\n && (typeof(allParams.index) !== 'undefined')\n && allParams.index === 0) {\n delete allParams.index;\n delete allParams.page;\n }\n\n const params = urlTrackedParams.reduce((validParams, paramName) => {\n if (paramName in allParams) {\n validParams[paramName] = allParams[paramName];\n }\n return validParams;\n }, {});\n\n const newFragment = this.fragmentFromParams(params, urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (urlMode === 'history') {\n if (window.history && window.history.replaceState) {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n\n }\n } else {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\n\n }\n};\n\n/**\n * @private\n * Filtering query parameters to select only book search param (?q=foo)\n This needs to be updated/URL system modified if future query params are to be added\n * @param {string} url\n * @return {string}\n * */\nBookReader.prototype.urlParamsFiltersOnlySearch = function(url) {\n const params = new URLSearchParams(url);\n return params.has('q') ? `?${new URLSearchParams({ q: params.get('q') })}` : '';\n};\n\n\n/**\n * Will read either the hash or URL and return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadFragment = function() {\n const { urlMode, urlHistoryBasePath } = this.options;\n if (urlMode === 'history') {\n return window.location.pathname.substr(urlHistoryBasePath.length);\n } else {\n return window.location.hash.substr(1);\n }\n};\n\n/**\n * Will read the hash return the bookreader fragment\n * @return {string}\n */\nBookReader.prototype.urlReadHashFragment = function() {\n return window.location.hash.substr(1);\n};\nexport class BookreaderUrlPlugin extends BookReader {\n init() {\n if (this.options.enableUrlPlugin) {\n this.urlPlugin = new UrlPlugin(this.options);\n this.bind(BookReader.eventNames.PostInit, () => {\n const { urlMode } = this.options;\n\n if (urlMode === 'hash') {\n this.urlPlugin.listenForHashChanges();\n }\n });\n }\n\n super.init();\n }\n}\n\nwindow.BookReader = BookreaderUrlPlugin;\nexport default BookreaderUrlPlugin;\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements -- TODO\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n for (var k = base; /* no condition */; k += base) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join('');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n }\n return encoded.join('.');\n};\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","var $ = 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","var $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar has = require('../internals/has');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n/* eslint-disable no-control-regex -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable no-control-regex -- safe */\nvar EOF;\n\nvar parseHost = function (url, input) {\n var result, codePoints, index;\n if (input.charAt(0) == '[') {\n if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(input.slice(1, -1));\n if (!result) return INVALID_HOST;\n url.host = result;\n // opaque host\n } else if (!isSpecial(url)) {\n if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n url.host = result;\n } else {\n input = toASCII(input);\n if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n url.host = result;\n }\n};\n\nvar parseIPv4 = function (input) {\n var parts = input.split('.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.pop();\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && part.charAt(0) == '0') {\n radix = HEX_START.test(part) ? 16 : 8;\n part = part.slice(radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n number = parseInt(part, radix);\n }\n numbers.push(number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = numbers.pop();\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var char = function () {\n return input.charAt(pointer);\n };\n\n if (char() == ':') {\n if (input.charAt(1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (char()) {\n if (pieceIndex == 8) return;\n if (char() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && HEX.test(char())) {\n value = value * 16 + parseInt(char(), 16);\n pointer++;\n length++;\n }\n if (char() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (char()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (char() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!DIGIT.test(char())) return;\n while (DIGIT.test(char())) {\n number = parseInt(char(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (char() == ':') {\n pointer++;\n if (!char()) return;\n } else if (char()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n result.unshift(host % 256);\n host = floor(host / 256);\n } return result.join('.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += host[index].toString(16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n var code = codeAt(char, 0);\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\nvar isSpecial = function (url) {\n return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && ALPHA.test(string.charAt(0))\n && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n string.length == 2 ||\n ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\nvar shortenURLsPath = function (url) {\n var path = url.path;\n var pathSize = path.length;\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.pop();\n }\n};\n\nvar isSingleDot = function (segment) {\n return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n segment = segment.toLowerCase();\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseURL = function (url, input, stateOverride, base) {\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, char, bufferCodePoints, failure;\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = input.replace(TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n char = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (char && ALPHA.test(char)) {\n buffer += char.toLowerCase();\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n buffer += char.toLowerCase();\n } else if (char == ':') {\n if (stateOverride && (\n (isSpecial(url) != has(specialSchemes, buffer)) ||\n (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (isSpecial(url)) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n url.path.push('');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && char == '#') {\n url.scheme = base.scheme;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (char == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (char == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (char == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n state = RELATIVE_SLASH;\n } else if (char == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.path.pop();\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (char == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (char != '/' && char != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (char == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += char;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (char == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (isSpecial(url) && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (char == '[') seenBracket = true;\n else if (char == ']') seenBracket = false;\n buffer += char;\n } break;\n\n case PORT:\n if (DIGIT.test(char)) {\n buffer += char;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url)) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (char == '/' || char == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (char == EOF) {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '?') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n url.host = base.host;\n url.path = base.path.slice();\n shortenURLsPath(url);\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (char == '/' || char == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = parseHost(url, buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += char;\n break;\n\n case PATH_START:\n if (isSpecial(url)) {\n state = PATH;\n if (char != '/' && char != '\\\\') continue;\n } else if (!stateOverride && char == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n state = PATH;\n if (char != '/') continue;\n } break;\n\n case PATH:\n if (\n char == EOF || char == '/' ||\n (char == '\\\\' && isSpecial(url)) ||\n (!stateOverride && (char == '?' || char == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n shortenURLsPath(url);\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else if (isSingleDot(buffer)) {\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n }\n url.path.push(buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n url.path.shift();\n }\n }\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(char, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n if (char == \"'\" && isSpecial(url)) url.query += '%27';\n else if (char == '#') url.query += '%23';\n else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLConstructor, 'URL');\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var urlString = $toString(url);\n var state = setInternalState(that, { type: 'URL' });\n var baseState, failure;\n if (base !== undefined) {\n if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n else {\n failure = parseURL(baseState = {}, $toString(base));\n if (failure) throw TypeError(failure);\n }\n }\n failure = parseURL(state, urlString, null, baseState);\n if (failure) throw TypeError(failure);\n var searchParams = state.searchParams = new URLSearchParams();\n var searchParamsState = getInternalSearchParamsState(searchParams);\n searchParamsState.updateSearchParams(state.query);\n searchParamsState.updateURL = function () {\n state.query = String(searchParams) || null;\n };\n if (!DESCRIPTORS) {\n that.href = serializeURL.call(that);\n that.origin = getOrigin.call(that);\n that.protocol = getProtocol.call(that);\n that.username = getUsername.call(that);\n that.password = getPassword.call(that);\n that.host = getHost.call(that);\n that.hostname = getHostname.call(that);\n that.port = getPort.call(that);\n that.pathname = getPathname.call(that);\n that.search = getSearch.call(that);\n that.searchParams = getSearchParams.call(that);\n that.hash = getHash.call(that);\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (includesCredentials(url)) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n};\n\nvar getOrigin = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var port = url.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !isSpecial(url)) return 'null';\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n var url = getInternalURLState(this);\n var host = url.host;\n var port = url.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n var host = getInternalURLState(this).host;\n return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n var port = getInternalURLState(this).port;\n return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n var url = getInternalURLState(this);\n var path = url.path;\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n var query = getInternalURLState(this).query;\n return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n var fragment = getInternalURLState(this).fragment;\n return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor(serializeURL, function (href) {\n var url = getInternalURLState(this);\n var urlString = $toString(href);\n var failure = parseURL(url, urlString);\n if (failure) throw TypeError(failure);\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor(getOrigin),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor(getProtocol, function (protocol) {\n var url = getInternalURLState(this);\n parseURL(url, $toString(protocol) + ':', SCHEME_START);\n }),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor(getUsername, function (username) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom($toString(username));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor(getPassword, function (password) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom($toString(password));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor(getHost, function (host) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, $toString(host), HOST);\n }),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor(getHostname, function (hostname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, $toString(hostname), HOSTNAME);\n }),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor(getPort, function (port) {\n var url = getInternalURLState(this);\n if (cannotHaveUsernamePasswordPort(url)) return;\n port = $toString(port);\n if (port == '') url.port = null;\n else parseURL(url, port, PORT);\n }),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor(getPathname, function (pathname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n url.path = [];\n parseURL(url, $toString(pathname), PATH_START);\n }),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor(getSearch, function (search) {\n var url = getInternalURLState(this);\n search = $toString(search);\n if (search == '') {\n url.query = null;\n } else {\n if ('?' == search.charAt(0)) search = search.slice(1);\n url.query = '';\n parseURL(url, search, QUERY);\n }\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor(getSearchParams),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor(getHash, function (hash) {\n var url = getInternalURLState(this);\n hash = $toString(hash);\n if (hash == '') {\n url.fragment = null;\n return;\n }\n if ('#' == hash.charAt(0)) hash = hash.slice(1);\n url.fragment = '';\n parseURL(url, hash, FRAGMENT);\n })\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n return nativeCreateObjectURL.apply(NativeURL, arguments);\n });\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n return nativeRevokeObjectURL.apply(NativeURL, arguments);\n });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n"],"names":["super_","UrlPlugin","options","this","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlMode","urlHistoryBasePath","urlLocationPollId","oldLocationHash","oldUserHash","searchParams","URLSearchParams","pathParams","Object","keys","forEach","key","schema","find","schemaKey","append","strPathParams","filter","s","map","join","strStrippedTrailingSlash","replace","concatenatedPath","toString","urlString","urlPath","URL","urlSearchParamsObj","fromEntries","entries","splitUrlMatches","pathname","match","urlStrSplitSlashObj","x","split","doesKeyExists","_object","_key","some","value","hasPropertyKey","pushToAddressBar","urlStrPath","urlStateToUrlString","window","history","replaceState","newUrlPath","trim","location","hash","substr","clearInterval","setInterval","newFragment","urlStringToUrlState","path","length","search","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlTrackedParams","urlTrackIndex0","prototype","setup","call","locationPollId","init","bind","eventNames","PostInit","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","urlReadFragment","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","allParams","paramsFromCurrent","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","baseWithoutSlash","newFragmentWithSlash","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","url","has","q","get","urlReadHashFragment","BookreaderUrlPlugin","urlPlugin","listenForHashChanges","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","floor","Math","stringFromCharCode","String","fromCharCode","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","baseMinusTMin","base","encode","input","i","currentValue","output","inputLength","string","counter","charCodeAt","extra","push","ucs2decode","n","bias","basicLength","handledCPCount","m","handledCPCountPlusOne","RangeError","t","qMinusT","baseMinusT","module","exports","label","encoded","labels","toLowerCase","test","fails","whitespaces","METHOD_NAME","$","$entries","target","stat","O","iterate","createProperty","iterable","obj","v","AS_ENTRIES","fixRegExpWellKnownSymbolLogic","anObject","toLength","requireObjectCoercible","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","matcher","undefined","RegExp","rx","S","res","done","global","fullUnicode","unicode","lastIndex","result","A","matchStr","$trim","proto","forced","forcedStringTrimMethod","EOF","DESCRIPTORS","USE_NATIVE_URL","defineProperties","redefine","anInstance","assign","arrayFrom","codeAt","toASCII","$toString","setToStringTag","URLSearchParamsModule","InternalStateModule","NativeURL","getInternalSearchParamsState","getState","setInternalState","set","getInternalURLState","getterFor","pow","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseHost","codePoints","charAt","parseIPv6","slice","host","isSpecial","parseIPv4","percentEncode","C0ControlPercentEncodeSet","partsLength","numbers","part","radix","number","ipv4","parts","pop","parseInt","numbersSeen","ipv4Piece","swaps","swap","address","pieceIndex","compress","pointer","char","serializeHost","ignore0","unshift","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","code","encodeURIComponent","specialSchemes","ftp","file","http","https","ws","wss","scheme","includesCredentials","username","password","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","normalized","second","startsWithWindowsDriveLetter","third","shortenURLsPath","pathSize","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","bufferCodePoints","failure","state","buffer","seenAt","seenBracket","seenPasswordToken","port","query","fragment","codePoint","encodedCodePoints","shift","URLConstructor","baseState","that","arguments","type","TypeError","searchParamsState","updateSearchParams","updateURL","href","serializeURL","origin","getOrigin","protocol","getProtocol","getUsername","getPassword","getHost","hostname","getHostname","getPort","getPathname","getSearch","getSearchParams","getHash","URLPrototype","error","accessorDescriptor","getter","setter","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","blob","apply","sham"],"sourceRoot":""}
package/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 5.0.0-39
2
+ Fix: Performance improvements to scroll/zooming when text layer is larger @cdrini
3
+ Fix: Update zoom in/out icons to match iconochive glyphs @pezvi
4
+ Dev: update dependencies @renovate
5
+
1
6
  # 5.0.0-38
2
7
  Dev: Add Renovate Bot @cdrini
3
8
  Dev: Update node-fetch @cdrini
package/README.md CHANGED
@@ -149,6 +149,19 @@ The source JavaScript is written in ES6 (located in the `src/js` directory) and
149
149
 
150
150
  Until the next major version bump, we have to store the build files inside the repo to maintain backwards compatibility. Please _DO NOT_ include these files in your PR. Anything in the `BookReader/` directory should not be committed.
151
151
 
152
+ ### Developing icons
153
+ To see local icon package changes in bookreader, you'll need to install core-js into the icon package and link into bookreader.
154
+
155
+ Let's use `icon-share` as an example.
156
+ 1. Confirm your icon package is working properly in the iaux-icons demo
157
+ 2. Navigate to your icon package (`iaux-icons/packages/icon-share`) and run command: `npm install core-js`
158
+ - You shouldn't need to commit any of these core-js changes
159
+ 3. From within your icon package directory run command: `npm link`
160
+ - You can use the command `npm ls -g` to confirm your local package now appears in the registry
161
+ 4. Navigate to `/bookreader` and run command: `npm link @internetarchive/icon-share`
162
+ - You can use the command `npm ls |grep icon-share` to confirm icon-share is now a link to your local directory
163
+ 5. You may now start a local server to see your changes by running command: `npm run serve-dev`
164
+
152
165
  ## Releases
153
166
 
154
167
  To version bump the repo and prepare a release, run `npm version major|minor|patch` (following [semver](https://semver.org/)), then (something like) `git push origin HEAD --tags`. It'll automatically update the version number where it appears, build the files, and ask you to update the CHANGELOG.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetarchive/bookreader",
3
- "version": "5.0.0-38",
3
+ "version": "5.0.0-39",
4
4
  "description": "The Internet Archive BookReader.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,16 +28,16 @@
28
28
  "@internetarchive/ia-activity-indicator": "^0.0.1",
29
29
  "@internetarchive/ia-item-navigator": "^1.0.0",
30
30
  "@internetarchive/ia-sharing-options": "^1.0.1",
31
- "@internetarchive/icon-bookmark": "^1.1.3",
32
- "@internetarchive/icon-dl": "^1.1.3",
31
+ "@internetarchive/icon-bookmark": "^1.3.2",
32
+ "@internetarchive/icon-dl": "^1.3.3",
33
33
  "@internetarchive/icon-edit-pencil": "1.3.2",
34
- "@internetarchive/icon-magnify-minus": "^1.2.3",
35
- "@internetarchive/icon-magnify-plus": "^1.2.3",
36
- "@internetarchive/icon-search": "^1.2.3",
37
- "@internetarchive/icon-share": "^1.1.3",
38
- "@internetarchive/icon-visual-adjustment": "^1.1.3",
34
+ "@internetarchive/icon-magnify-minus": "^1.3.3",
35
+ "@internetarchive/icon-magnify-plus": "^1.3.3",
36
+ "@internetarchive/icon-search": "^1.3.3",
37
+ "@internetarchive/icon-share": "^1.3.3",
38
+ "@internetarchive/icon-visual-adjustment": "^1.3.2",
39
39
  "@internetarchive/modal-manager": "^0.1.0",
40
- "@internetarchive/shared-resize-observer": "^0.0.1",
40
+ "@internetarchive/shared-resize-observer": "^0.2.0",
41
41
  "lit": "^2.1.3"
42
42
  },
43
43
  "devDependencies": {
@@ -46,22 +46,22 @@
46
46
  "@babel/plugin-proposal-class-properties": "7.16.7",
47
47
  "@babel/plugin-proposal-decorators": "7.17.2",
48
48
  "@babel/preset-env": "7.16.11",
49
- "@open-wc/testing": "^3.0.4",
49
+ "@open-wc/testing": "^3.1.2",
50
50
  "@open-wc/testing-karma": "^4.0.9",
51
- "@types/jest": "^27.4.0",
51
+ "@types/jest": "^27.4.1",
52
52
  "@webcomponents/webcomponentsjs": "^2.6.0",
53
53
  "babel-loader": "8.2.3",
54
54
  "codecov": "^3.8.3",
55
55
  "concurrently": "7.0.0",
56
56
  "core-js": "3.16.2",
57
- "cpx2": "3.0.0",
57
+ "cpx2": "4.2.0",
58
58
  "eslint": "^7.32.0",
59
59
  "eslint-plugin-no-jquery": "^2.7.0",
60
60
  "eslint-plugin-testcafe": "^0.2.1",
61
61
  "hammerjs": "^2.0.8",
62
62
  "http-server": "14.1.0",
63
63
  "iso-language-codes": "1.1.0",
64
- "jest": "^27.4.7",
64
+ "jest": "^27.5.1",
65
65
  "jquery": "1.11.3",
66
66
  "jquery-colorbox": "1.6.4",
67
67
  "jquery-ui": "1.12.1",
@@ -76,7 +76,7 @@
76
76
  "sinon": "^12.0.1",
77
77
  "soundmanager2": "2.97.20170602",
78
78
  "svgo": "2.4.0",
79
- "testcafe": "^1.18.3",
79
+ "testcafe": "^1.18.4",
80
80
  "testcafe-browser-provider-browserstack": "^1.13.2-alpha.1",
81
81
  "webpack": "5.51.1",
82
82
  "webpack-cli": "4.8.0"
package/renovate.json CHANGED
@@ -36,7 +36,7 @@
36
36
  "rangeStrategy": "bump"
37
37
  },
38
38
  {
39
- "matchPackagePatterns": ["^@internetarchive"],
39
+ "matchPackagePatterns": ["*"],
40
40
  "rangeStrategy": "bump"
41
41
  }
42
42
  ]
@@ -5,6 +5,7 @@ import { styleMap } from 'lit/directives/style-map.js';
5
5
  import { ModeSmoothZoom } from './ModeSmoothZoom';
6
6
  import { arrChanged, calcScreenDPI, genToArray, sum, throttle } from './utils';
7
7
  import { HTMLDimensionsCacher } from "./utils/HTMLDimensionsCacher";
8
+ import { ScrollClassAdder } from './utils/ScrollClassAdder';
8
9
  /** @typedef {import('./BookModel').BookModel} BookModel */
9
10
  /** @typedef {import('./BookModel').PageIndex} PageIndex */
10
11
  /** @typedef {import('./BookModel').PageModel} PageModel */
@@ -115,6 +116,8 @@ export class Mode1UpLit extends LitElement {
115
116
 
116
117
  smoothZoomer = new ModeSmoothZoom(this);
117
118
 
119
+ scrollClassAdder = new ScrollClassAdder(this, 'BRscrolling-active');
120
+
118
121
  /************** CONSTANT PROPERTIES **************/
119
122
 
120
123
  /** Vertical space between/around the pages in inches */
@@ -302,6 +305,7 @@ export class Mode1UpLit extends LitElement {
302
305
  }).$container[0];
303
306
 
304
307
  pageContainerEl.style.transform = transform;
308
+ pageContainerEl.classList.toggle('BRpage-visible', this.visiblePages.includes(page));
305
309
  return pageContainerEl;
306
310
  }
307
311
 
@@ -426,10 +430,12 @@ export class Mode1UpLit extends LitElement {
426
430
  /************** INPUT HANDLERS **************/
427
431
 
428
432
  attachScrollListeners = () => {
429
- this.addEventListener("scroll", this.updateVisibleRegion, { passive: true });
433
+ this.addEventListener("scroll", this.updateVisibleRegion);
434
+ this.scrollClassAdder.attach();
430
435
  }
431
436
 
432
437
  detachScrollListeners = () => {
433
438
  this.removeEventListener("scroll", this.updateVisibleRegion);
439
+ this.scrollClassAdder.detach();
434
440
  }
435
441
  }
@@ -6,6 +6,7 @@ import { EVENTS } from './events.js';
6
6
  import { ModeSmoothZoom } from "./ModeSmoothZoom.js";
7
7
  import { HTMLDimensionsCacher } from './utils/HTMLDimensionsCacher.js';
8
8
  import { DragScrollable } from './DragScrollable.js';
9
+ import { ScrollClassAdder } from './utils/ScrollClassAdder.js';
9
10
 
10
11
  /** @typedef {import('../BookReader.js').default} BookReader */
11
12
  /** @typedef {import('./BookModel.js').BookModel} BookModel */
@@ -36,6 +37,9 @@ export class Mode2Up {
36
37
  this.smoothZoomer = null;
37
38
  this._scale = 1;
38
39
  this.scaleCenter = { x: 0.5, y: 0.5 };
40
+
41
+ /** @type {ScrollClassAdder} */
42
+ this.scrollClassAdder = null;
39
43
  }
40
44
 
41
45
  get $container() {
@@ -242,6 +246,12 @@ export class Mode2Up {
242
246
 
243
247
  this.smoothZoomer = this.smoothZoomer || new ModeSmoothZoom(this);
244
248
  this.smoothZoomer.attach();
249
+ if (!this.scrollClassAdder) {
250
+ this.scrollClassAdder = new ScrollClassAdder(this.$container, 'BRscrolling-active');
251
+ }
252
+ this.scrollClassAdder.detach();
253
+ this.scrollClassAdder.element = this.$container;
254
+ this.scrollClassAdder.attach();
245
255
 
246
256
  this.htmlDimensionsCacher = this.htmlDimensionsCacher || new HTMLDimensionsCacher(this.$container);
247
257
  }
@@ -250,6 +260,7 @@ export class Mode2Up {
250
260
  // Mode2Up attaches these listeners to the main BR container, so we need to
251
261
  // detach these or it will cause issues for the other modes.
252
262
  this.smoothZoomer.detach();
263
+ this.scrollClassAdder.detach();
253
264
  }
254
265
 
255
266
  /**
@@ -89,6 +89,7 @@ export class ModeSmoothZoom {
89
89
  _pinchStart = () => {
90
90
  // Do this in case the pinchend hasn't fired yet.
91
91
  this.oldScale = 1;
92
+ this.mode.$visibleWorld.classList.add("BRsmooth-zooming");
92
93
  this.mode.$visibleWorld.style.willChange = "transform";
93
94
  this.detachCtrlZoom();
94
95
  this.mode.detachScrollListeners?.();
@@ -124,6 +125,7 @@ export class ModeSmoothZoom {
124
125
  await this.pinchMoveFramePromise;
125
126
  this.mode.scaleCenter = { x: 0.5, y: 0.5 };
126
127
  this.oldScale = 1;
128
+ this.mode.$visibleWorld.classList.remove("BRsmooth-zooming");
127
129
  this.mode.$visibleWorld.style.willChange = "auto";
128
130
  this.attachCtrlZoom();
129
131
  this.mode.attachScrollListeners?.();