@internetarchive/bookreader 5.0.0-36 → 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 (280) hide show
  1. package/.github/workflows/node.js.yml +69 -7
  2. package/.github/workflows/npm-publish.yml +2 -16
  3. package/BookReader/BookReader.css +8 -0
  4. package/BookReader/BookReader.js +1 -1
  5. package/BookReader/BookReader.js.LICENSE.txt +8 -29
  6. package/BookReader/BookReader.js.map +1 -1
  7. package/BookReader/ia-bookreader-bundle.js +144 -119
  8. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +15 -12
  9. package/BookReader/ia-bookreader-bundle.js.map +1 -1
  10. package/BookReader/icons/magnify-minus.svg +1 -1
  11. package/BookReader/icons/magnify-plus.svg +1 -1
  12. package/BookReader/plugins/plugin.autoplay.js +1 -1
  13. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  14. package/BookReader/plugins/plugin.chapters.js +1 -1
  15. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  16. package/BookReader/plugins/plugin.mobile_nav.js +1 -1
  17. package/BookReader/plugins/plugin.mobile_nav.js.map +1 -1
  18. package/BookReader/plugins/plugin.resume.js +1 -1
  19. package/BookReader/plugins/plugin.resume.js.map +1 -1
  20. package/BookReader/plugins/plugin.search.js +1 -1
  21. package/BookReader/plugins/plugin.search.js.map +1 -1
  22. package/BookReader/plugins/plugin.text_selection.js +1 -1
  23. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  24. package/BookReader/plugins/plugin.tts.js +1 -1
  25. package/BookReader/plugins/plugin.tts.js.map +1 -1
  26. package/BookReader/plugins/plugin.url.js +1 -1
  27. package/BookReader/plugins/plugin.url.js.map +1 -1
  28. package/CHANGELOG.md +26 -0
  29. package/README.md +14 -1
  30. package/codecov.yml +6 -0
  31. package/package.json +30 -33
  32. package/renovate.json +43 -0
  33. package/src/BookNavigator/assets/bookmark-colors.js +1 -1
  34. package/src/BookNavigator/assets/button-base.js +1 -1
  35. package/src/BookNavigator/assets/ia-logo.js +1 -1
  36. package/src/BookNavigator/assets/icon_checkmark.js +1 -1
  37. package/src/BookNavigator/assets/icon_close.js +1 -1
  38. package/src/BookNavigator/assets/icon_sort_asc.js +1 -1
  39. package/src/BookNavigator/assets/icon_sort_desc.js +1 -1
  40. package/src/BookNavigator/assets/icon_sort_neutral.js +1 -1
  41. package/src/BookNavigator/assets/icon_volumes.js +1 -1
  42. package/src/BookNavigator/book-navigator.js +1 -2
  43. package/src/BookNavigator/bookmarks/bookmark-button.js +1 -1
  44. package/src/BookNavigator/bookmarks/bookmark-edit.js +2 -3
  45. package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
  46. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +1 -1
  47. package/src/BookNavigator/bookmarks/bookmarks-provider.js +1 -1
  48. package/src/BookNavigator/bookmarks/ia-bookmarks.js +4 -7
  49. package/src/BookNavigator/delete-modal-actions.js +1 -1
  50. package/src/BookNavigator/downloads/downloads-provider.js +1 -1
  51. package/src/BookNavigator/downloads/downloads.js +1 -2
  52. package/src/BookNavigator/search/a-search-result.js +2 -3
  53. package/src/BookNavigator/search/search-provider.js +1 -2
  54. package/src/BookNavigator/search/search-results.js +1 -2
  55. package/src/BookNavigator/sharing.js +1 -1
  56. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +1 -1
  57. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +3 -3
  58. package/src/BookNavigator/volumes/volumes-provider.js +1 -1
  59. package/src/BookNavigator/volumes/volumes.js +2 -3
  60. package/src/BookReader/Mode1Up.js +2 -1
  61. package/src/BookReader/Mode1UpLit.js +10 -3
  62. package/src/BookReader/Mode2Up.js +11 -0
  63. package/src/BookReader/ModeSmoothZoom.js +2 -0
  64. package/src/BookReader/PageContainer.js +10 -4
  65. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  66. package/src/BookReader.js +4 -2
  67. package/src/assets/icons/magnify-minus.svg +3 -7
  68. package/src/assets/icons/magnify-plus.svg +3 -7
  69. package/src/css/_TextSelection.scss +13 -0
  70. package/src/ia-bookreader/ia-bookreader.js +1 -1
  71. package/src/plugins/plugin.chapters.js +11 -15
  72. package/src/plugins/plugin.text_selection.js +9 -10
  73. package/src/plugins/search/plugin.search.js +8 -18
  74. package/src/plugins/search/view.js +2 -0
  75. package/src/plugins/tts/AbstractTTSEngine.js +9 -4
  76. package/src/plugins/tts/FestivalTTSEngine.js +10 -11
  77. package/src/plugins/tts/PageChunk.js +11 -20
  78. package/src/plugins/tts/WebTTSEngine.js +22 -26
  79. package/tests/e2e/base.test.js +4 -5
  80. package/tests/e2e/helpers/desktopSearch.js +13 -12
  81. package/tests/e2e/models/Navigation.js +12 -3
  82. package/tests/e2e/rightToLeft.test.js +1 -1
  83. package/tests/e2e/viewmode.test.js +37 -31
  84. package/tests/jest/BookReader/Mode1UpLit.test.js +2 -1
  85. package/tests/jest/BookReader/PageContainer.test.js +5 -4
  86. package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +49 -0
  87. package/tests/jest/plugins/plugin.text_selection.test.js +25 -23
  88. package/tests/jest/plugins/search/plugin.search.test.js +12 -20
  89. package/tests/jest/plugins/tts/AbstractTTSEngine.test.js +3 -3
  90. package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +2 -2
  91. package/tests/karma/BookNavigator/downloads/downloads.test.js +1 -1
  92. package/tests/karma/BookNavigator/volumes/volumes-provider.test.js +3 -3
  93. package/webpack.config.js +1 -1
  94. package/.github/dependabot.yml +0 -8
  95. package/.husky/_/husky.sh +0 -30
  96. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  97. package/stat/BookNavigator/BookModel.js +0 -14
  98. package/stat/BookNavigator/BookNavigator.js +0 -482
  99. package/stat/BookNavigator/assets/bookmark-colors.js +0 -15
  100. package/stat/BookNavigator/assets/button-base.js +0 -61
  101. package/stat/BookNavigator/assets/ia-logo.js +0 -17
  102. package/stat/BookNavigator/assets/icon_checkmark.js +0 -6
  103. package/stat/BookNavigator/assets/icon_close.js +0 -3
  104. package/stat/BookNavigator/assets/icon_sort_asc.js +0 -5
  105. package/stat/BookNavigator/assets/icon_sort_desc.js +0 -5
  106. package/stat/BookNavigator/assets/icon_sort_neutral.js +0 -5
  107. package/stat/BookNavigator/assets/icon_volumes.js +0 -11
  108. package/stat/BookNavigator/bookmarks/bookmark-button.js +0 -64
  109. package/stat/BookNavigator/bookmarks/bookmark-edit.js +0 -215
  110. package/stat/BookNavigator/bookmarks/bookmarks-list.js +0 -285
  111. package/stat/BookNavigator/bookmarks/bookmarks-loginCTA.js +0 -28
  112. package/stat/BookNavigator/bookmarks/bookmarks-provider.js +0 -56
  113. package/stat/BookNavigator/bookmarks/ia-bookmarks.js +0 -523
  114. package/stat/BookNavigator/br-fullscreen-mgr.js +0 -82
  115. package/stat/BookNavigator/delete-modal-actions.js +0 -49
  116. package/stat/BookNavigator/downloads/downloads-provider.js +0 -72
  117. package/stat/BookNavigator/downloads/downloads.js +0 -139
  118. package/stat/BookNavigator/provider-config.js +0 -0
  119. package/stat/BookNavigator/search/a-search-result.js +0 -55
  120. package/stat/BookNavigator/search/search-provider.js +0 -180
  121. package/stat/BookNavigator/search/search-results.js +0 -360
  122. package/stat/BookNavigator/sharing.js +0 -31
  123. package/stat/BookNavigator/visual-adjustments/visual-adjustments-provider.js +0 -94
  124. package/stat/BookNavigator/visual-adjustments/visual-adjustments.js +0 -280
  125. package/stat/BookNavigator/volumes/volumes-provider.js +0 -83
  126. package/stat/BookNavigator/volumes/volumes.js +0 -178
  127. package/stat/BookReader/BookModel.js +0 -518
  128. package/stat/BookReader/DebugConsole.js +0 -54
  129. package/stat/BookReader/DragScrollable.js +0 -233
  130. package/stat/BookReader/ImageCache.js +0 -116
  131. package/stat/BookReader/Mode1Up.js +0 -102
  132. package/stat/BookReader/Mode1UpLit.js +0 -434
  133. package/stat/BookReader/Mode2Up.js +0 -1372
  134. package/stat/BookReader/ModeSmoothZoom.js +0 -177
  135. package/stat/BookReader/ModeThumb.js +0 -344
  136. package/stat/BookReader/Navbar/Navbar.js +0 -310
  137. package/stat/BookReader/PageContainer.js +0 -120
  138. package/stat/BookReader/ReduceSet.js +0 -26
  139. package/stat/BookReader/Toolbar/Toolbar.js +0 -384
  140. package/stat/BookReader/events.js +0 -20
  141. package/stat/BookReader/options.js +0 -324
  142. package/stat/BookReader/utils/HTMLDimensionsCacher.js +0 -44
  143. package/stat/BookReader/utils/classes.js +0 -36
  144. package/stat/BookReader/utils.js +0 -240
  145. package/stat/BookReader.js +0 -2550
  146. package/stat/BookReaderComponent/BookReaderComponent.js +0 -117
  147. package/stat/assets/icons/1up.svg +0 -12
  148. package/stat/assets/icons/2up.svg +0 -15
  149. package/stat/assets/icons/advance.svg +0 -26
  150. package/stat/assets/icons/chevron-right.svg +0 -1
  151. package/stat/assets/icons/close-circle-dark.svg +0 -1
  152. package/stat/assets/icons/close-circle.svg +0 -1
  153. package/stat/assets/icons/fullscreen.svg +0 -17
  154. package/stat/assets/icons/fullscreen_exit.svg +0 -17
  155. package/stat/assets/icons/hamburger.svg +0 -15
  156. package/stat/assets/icons/left-arrow.svg +0 -12
  157. package/stat/assets/icons/magnify-minus.svg +0 -16
  158. package/stat/assets/icons/magnify-plus.svg +0 -17
  159. package/stat/assets/icons/magnify.svg +0 -15
  160. package/stat/assets/icons/pause.svg +0 -23
  161. package/stat/assets/icons/play.svg +0 -22
  162. package/stat/assets/icons/playback-speed.svg +0 -34
  163. package/stat/assets/icons/read-aloud.svg +0 -22
  164. package/stat/assets/icons/review.svg +0 -22
  165. package/stat/assets/icons/thumbnails.svg +0 -17
  166. package/stat/assets/icons/voice.svg +0 -1
  167. package/stat/assets/icons/volume-full.svg +0 -22
  168. package/stat/assets/images/BRicons.png +0 -0
  169. package/stat/assets/images/BRicons.svg +0 -94
  170. package/stat/assets/images/BRicons_ia.png +0 -0
  171. package/stat/assets/images/back_pages.png +0 -0
  172. package/stat/assets/images/book_bottom_icon.png +0 -0
  173. package/stat/assets/images/book_down_icon.png +0 -0
  174. package/stat/assets/images/book_left_icon.png +0 -0
  175. package/stat/assets/images/book_leftmost_icon.png +0 -0
  176. package/stat/assets/images/book_right_icon.png +0 -0
  177. package/stat/assets/images/book_rightmost_icon.png +0 -0
  178. package/stat/assets/images/book_top_icon.png +0 -0
  179. package/stat/assets/images/book_up_icon.png +0 -0
  180. package/stat/assets/images/books_graphic.svg +0 -177
  181. package/stat/assets/images/booksplit.png +0 -0
  182. package/stat/assets/images/control_pause_icon.png +0 -0
  183. package/stat/assets/images/control_play_icon.png +0 -0
  184. package/stat/assets/images/embed_icon.png +0 -0
  185. package/stat/assets/images/icon-home-ia.png +0 -0
  186. package/stat/assets/images/icon_OL-logo-xs.png +0 -0
  187. package/stat/assets/images/icon_alert-xs.png +0 -0
  188. package/stat/assets/images/icon_book.svg +0 -12
  189. package/stat/assets/images/icon_bookmark.svg +0 -12
  190. package/stat/assets/images/icon_close-pop.png +0 -0
  191. package/stat/assets/images/icon_download.png +0 -0
  192. package/stat/assets/images/icon_gear.svg +0 -14
  193. package/stat/assets/images/icon_hamburger.svg +0 -20
  194. package/stat/assets/images/icon_home.png +0 -0
  195. package/stat/assets/images/icon_home.svg +0 -21
  196. package/stat/assets/images/icon_home_ia.png +0 -0
  197. package/stat/assets/images/icon_indicator.png +0 -0
  198. package/stat/assets/images/icon_info.svg +0 -11
  199. package/stat/assets/images/icon_one_page.svg +0 -8
  200. package/stat/assets/images/icon_pause.svg +0 -1
  201. package/stat/assets/images/icon_play.svg +0 -1
  202. package/stat/assets/images/icon_playback-rate.svg +0 -15
  203. package/stat/assets/images/icon_return.png +0 -0
  204. package/stat/assets/images/icon_search_button.svg +0 -8
  205. package/stat/assets/images/icon_share.svg +0 -9
  206. package/stat/assets/images/icon_skip-ahead.svg +0 -6
  207. package/stat/assets/images/icon_skip-back.svg +0 -13
  208. package/stat/assets/images/icon_speaker.svg +0 -18
  209. package/stat/assets/images/icon_speaker_open.svg +0 -10
  210. package/stat/assets/images/icon_thumbnails.svg +0 -12
  211. package/stat/assets/images/icon_toc.svg +0 -5
  212. package/stat/assets/images/icon_two_pages.svg +0 -9
  213. package/stat/assets/images/icon_zoomer.png +0 -0
  214. package/stat/assets/images/loading.gif +0 -0
  215. package/stat/assets/images/logo_icon.png +0 -0
  216. package/stat/assets/images/marker_chap-off.png +0 -0
  217. package/stat/assets/images/marker_chap-off.svg +0 -11
  218. package/stat/assets/images/marker_chap-off_ia.png +0 -0
  219. package/stat/assets/images/marker_chap-on.png +0 -0
  220. package/stat/assets/images/marker_chap-on.svg +0 -11
  221. package/stat/assets/images/marker_srch-on.svg +0 -11
  222. package/stat/assets/images/marker_srchchap-off.png +0 -0
  223. package/stat/assets/images/marker_srchchap-on.png +0 -0
  224. package/stat/assets/images/nav_control-dn.png +0 -0
  225. package/stat/assets/images/nav_control-dn_ia.png +0 -0
  226. package/stat/assets/images/nav_control-up.png +0 -0
  227. package/stat/assets/images/nav_control-up_ia.png +0 -0
  228. package/stat/assets/images/nav_control.png +0 -0
  229. package/stat/assets/images/one_page_mode_icon.png +0 -0
  230. package/stat/assets/images/paper-badge.png +0 -0
  231. package/stat/assets/images/print_icon.png +0 -0
  232. package/stat/assets/images/progressbar.gif +0 -0
  233. package/stat/assets/images/right_edges.png +0 -0
  234. package/stat/assets/images/slider.png +0 -0
  235. package/stat/assets/images/slider_ia.png +0 -0
  236. package/stat/assets/images/thumbnail_mode_icon.png +0 -0
  237. package/stat/assets/images/transparent.png +0 -0
  238. package/stat/assets/images/two_page_mode_icon.png +0 -0
  239. package/stat/assets/images/zoom_in_icon.png +0 -0
  240. package/stat/assets/images/zoom_out_icon.png +0 -0
  241. package/stat/css/BookReader.scss +0 -89
  242. package/stat/css/_BRBookmarks.scss +0 -29
  243. package/stat/css/_BRComponent.scss +0 -13
  244. package/stat/css/_BRfloat.scss +0 -197
  245. package/stat/css/_BRicon.scss +0 -48
  246. package/stat/css/_BRmain.scss +0 -251
  247. package/stat/css/_BRnav.scss +0 -359
  248. package/stat/css/_BRpages.scss +0 -139
  249. package/stat/css/_BRsearch.scss +0 -226
  250. package/stat/css/_BRtoolbar.scss +0 -84
  251. package/stat/css/_BRvendor.scss +0 -5
  252. package/stat/css/_MobileNav.scss +0 -194
  253. package/stat/css/_TextSelection.scss +0 -32
  254. package/stat/css/_colorbox.scss +0 -52
  255. package/stat/css/_controls.scss +0 -253
  256. package/stat/css/_icons.scss +0 -121
  257. package/stat/jquery-wrapper.js +0 -4
  258. package/stat/plugins/plugin.archive_analytics.js +0 -86
  259. package/stat/plugins/plugin.autoplay.js +0 -129
  260. package/stat/plugins/plugin.chapters.js +0 -248
  261. package/stat/plugins/plugin.iframe.js +0 -48
  262. package/stat/plugins/plugin.mobile_nav.js +0 -288
  263. package/stat/plugins/plugin.resume.js +0 -68
  264. package/stat/plugins/plugin.text_selection.js +0 -291
  265. package/stat/plugins/plugin.url.js +0 -198
  266. package/stat/plugins/plugin.vendor-fullscreen.js +0 -247
  267. package/stat/plugins/search/plugin.search.js +0 -439
  268. package/stat/plugins/search/view.js +0 -439
  269. package/stat/plugins/tts/AbstractTTSEngine.js +0 -249
  270. package/stat/plugins/tts/FestivalTTSEngine.js +0 -169
  271. package/stat/plugins/tts/PageChunk.js +0 -107
  272. package/stat/plugins/tts/PageChunkIterator.js +0 -163
  273. package/stat/plugins/tts/WebTTSEngine.js +0 -357
  274. package/stat/plugins/tts/plugin.tts.js +0 -357
  275. package/stat/plugins/tts/tooltip_dict.js +0 -15
  276. package/stat/plugins/tts/utils.js +0 -91
  277. package/stat/util/browserSniffing.js +0 -30
  278. package/stat/util/debouncer.js +0 -26
  279. package/stat/util/docCookies.js +0 -67
  280. 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":"2vBAAO,ICkCgCA,EDlC1BC,EAAb,WACE,aAA0B,IAAdC,EAAc,uDAAJ,GAAI,UACxBC,KAAKC,kBAAoBF,EAGzBC,KAAKE,UAAY,CACf,CAAEC,KAAM,OAAQC,SAAU,OAAQC,QAAS,MAC3C,CAAEF,KAAM,OAAQC,SAAU,OAAQC,QAAS,OAC3C,CAAEF,KAAM,SAAUC,SAAU,OAAQE,eAAgB,KACpD,CAAEH,KAAM,IAAKC,SAAU,eACvB,CAAED,KAAM,OAAQC,SAAU,eAC1B,CAAED,KAAM,OAAQC,SAAU,eAC1B,CAAED,KAAM,QAASC,SAAU,gBAG7BJ,KAAKO,SAAW,GAChBP,KAAKQ,QAAUR,KAAKC,kBAAkBO,SAAW,OACjDR,KAAKS,mBAAqBT,KAAKC,kBAAkBQ,oBAAuB,IACxET,KAAKU,kBAAoB,KACzBV,KAAKW,gBAAkB,KACvBX,KAAKY,YAAc,K,QApBvB,O,EAAA,G,EAAA,kCA6BE,SAAoBL,GAAU,WACtBM,EAAe,IAAIC,gBACnBC,EAAa,GAEnBC,OAAOC,KAAKV,GAAUW,SAAQ,SAAAC,GAAO,QAKH,EAEzB,EANHC,EAAS,EAAKlB,UAAUmB,MAAK,SAAAD,GAAM,OAAIA,EAAOjB,OAASgB,KAC3D,UAAIC,SAAJ,OAAI,EAAQd,iBACVc,EAAS,EAAKlB,UAAUmB,MAAK,SAAAC,GAAS,OAAIA,EAAUnB,OAASiB,EAAOd,mBAE9C,SAAd,QAAN,EAAAc,SAAA,eAAQhB,UACVW,EAAU,UAACK,SAAD,aAAC,EAAQjB,MAAQI,EAASY,GAEpCN,EAAaU,QAAa,QAAN,EAAAH,SAAA,eAAQjB,OAAQgB,EAAKZ,EAASY,OAItD,IAAMK,EAAgBxB,KAAKE,UACxBuB,QAAO,SAAAC,GAAC,MAAkB,QAAdA,EAAEtB,YACduB,KAAI,SAAAP,GAAM,OAAIL,EAAWK,EAAOjB,MAAlB,UAA6BiB,EAAOjB,KAApC,YAA4CY,EAAWK,EAAOjB,OAAU,MACtFyB,KAAK,KAGFC,EAA2B,GAAH,OAAML,EAAcM,QAAQ,OAAQ,KAAKA,QAAQ,OAAQ,KACjFC,EAAmB,GAAH,OAAMF,EAAN,YAAkChB,EAAamB,YACrE,OAAOnB,EAAamB,WAAaD,EAA1B,UAAgDF,KArD3D,iCAgEE,SAAoBI,GAClB,IAAM1B,EAAW,GAIX2B,EAAU,IAAIC,IAAIF,EAAW,sBAC7BG,EAAqBpB,OAAOqB,YAAYH,EAAQrB,aAAayB,WAC7DC,EAAkBL,EAAQM,SAASC,MAAM,qBACzCC,EAAsBH,EAAkBvB,OAAOqB,YAAYE,EAAgBZ,KAAI,SAAAgB,GAAC,OAAIA,EAAEC,MAAM,SAAS,GAErGC,EAAgB,SAACC,EAASC,GAC9B,OAAO/B,OAAOC,KAAK6B,GAASE,MAAK,SAAAC,GAAK,OAAIA,GAASF,MA0BrD,OAtBA/C,KAAKE,UACFuB,QAAO,SAAAL,GAAM,MAAuB,QAAnBA,EAAOhB,YACxBc,SAAQ,SAAAE,GACP,IAAM8B,EAAiBL,EAAcH,EAAqBtB,EAAOjB,MACxC0C,EAAczB,EAAQ,mBAAqB8B,EAGlE3C,EAASa,EAAOd,gBAAkBoC,EAAoBtB,EAAOjB,MAI3D+C,IACF3C,EAASa,EAAOjB,MAAQuC,EAAoBtB,EAAOjB,UAMzDa,OAAOsB,QAAQF,GAAoBlB,SAAQ,YAAkB,I,IAAA,G,EAAA,E,4CAAA,I,gxBAAhBC,EAAgB,KAAX8B,EAAW,KAC3D1C,EAASY,GAAO8B,KAGX1C,IArGX,yBA6GE,SAAYY,EAAK8B,GACfjD,KAAKO,SAASY,GAAO8B,EAErBjD,KAAKmD,qBAhHT,4BAuHE,SAAehC,UACNnB,KAAKO,SAASY,GAErBnB,KAAKmD,qBA1HT,yBAkIE,SAAYhC,GACV,OAAOnB,KAAKO,SAASY,KAnIzB,8BAyIE,WACE,IAAMiC,EAAapD,KAAKqD,oBAAoBrD,KAAKO,UAC3CwB,EAAkC,MAAfqB,EAAqBA,EAAa,GAC3D,GAAoB,WAAhBpD,KAAKQ,SACP,GAAI8C,OAAOC,SAAWD,OAAOC,QAAQC,aAAc,CACjD,IAAMC,EAAa,UAAGzD,KAAKS,oBAAR,OAA6BsB,GAAmB2B,OAAO5B,QAAQ,SAAU,KAC5FwB,OAAOC,QAAQC,aAAa,GAAI,KAAMC,SAGxCH,OAAOK,SAAS7B,QAAQ,IAAMC,GAEhC/B,KAAKW,gBAAkByC,IApJ3B,kCA2JE,WAAuB,WACrBpD,KAAKW,gBAAkB2C,OAAOK,SAASC,KAAKC,OAAO,GAC/C7D,KAAKU,oBACPoD,cAAc9D,KAAKU,mBACnBV,KAAKU,kBAAoB,MAY3BV,KAAKU,kBAAoBqD,aARN,WACjB,IAAMC,EAAcV,OAAOK,SAASC,KAAKC,OAAO,GACtBG,GAAe,EAAKrD,kBAI9C,EAAKJ,SAAW,EAAK0D,oBAAoBD,MAEM,OA3KrD,gCAiLE,WAAgD,IAA5BL,EAA4B,uDAAjBL,OAAOK,SAC9BO,EAAwB,YAAjBlE,KAAKQ,QACbmD,EAASnB,SAASqB,OAAO7D,KAAKS,mBAAmB0D,QAAUR,EAASS,OACrET,EAASC,KAAKC,OAAO,GACzB7D,KAAKO,SAAWP,KAAKiE,oBAAoBC,Q,iBArL7C,K,8xCCUOG,OAAOC,WAAWC,eAAgB,CACvCC,iBAAiB,EACjBC,OAAQ,GAERC,SAAU,KACVC,mBAAmB,EAGnBnE,QAAS,OAMTC,mBAAoB,IAGpBmE,iBAAkB,CAAC,OAAQ,SAAU,OAAQ,SAAU,YAAa,QAGpEC,gBAAgB,IAIlBP,WAAWQ,UAAUC,OAAkBlF,EAWpCyE,WAAWQ,UAAUC,MAVf,SAAShF,GACdF,EAAOmF,KAAKhF,KAAMD,GAElBC,KAAKyE,OAAS1E,EAAQ0E,OACtBzE,KAAK0E,SAAW3E,EAAQ2E,SAExB1E,KAAKiF,eAAiB,KACtBjF,KAAKW,gBAAkB,KACvBX,KAAKY,YAAc,OAKvB0D,WAAWQ,UAAUI,KAAQ,SAASrF,GACpC,OAAO,WAAW,WAEZG,KAAKD,QAAQyE,kBACfxE,KAAKmF,KAAKb,WAAWc,WAAWC,UAAU,WACxC,MAAuC,EAAKtF,QAApC4E,EAAR,EAAQA,kBAAmBnE,EAA3B,EAA2BA,QACvBmE,IACFW,SAASC,MAAQ,EAAKC,WAAW,EAAKC,UAAW,KAEnC,SAAZjF,GACF,EAAKkF,6BAIT1F,KAAKmF,KAAKb,WAAWc,WAAWO,eAC9B3F,KAAK4F,kBAAkBT,KAAKnF,QAGhCH,EAAOmF,KAAKhF,OAlBa,CAoB1BsE,WAAWQ,UAAUI,MAOxBZ,WAAWQ,UAAUU,WAAa,SAASK,GACzC,OAAI7F,KAAKyF,UAAUtB,OAAS0B,EACnB7F,KAAKyF,UAGA,GAAH,OAAMzF,KAAKyF,UAAU5B,OAAO,EAAGgC,EAAoB,GAAnD,QAObvB,WAAWQ,UAAUY,wBAA0B,WAAW,WACxD1F,KAAKW,gBAAkBX,KAAK8F,kBAExB9F,KAAKiF,iBACPnB,cAAc9D,KAAKiF,gBACnBjF,KAAKiF,eAAiB,MAyBxBjF,KAAKiF,eAAiBlB,aAtBH,WACjB,IAAMC,EAAc,EAAK8B,kBAGzB,GAF2B9B,GAAe,EAAKrD,iBAAqBqD,GAAe,EAAKpD,YAExF,CAEA,IAAMmF,EAAS,EAAKC,mBAAmBhC,GAEjCiC,EAAe,kBAAM,EAAKC,iBAAiBH,IAEjD,EAAKI,QAAQ7B,WAAWc,WAAWgB,MAC/B,EAAKC,WAEH,EAAKC,UAAU,EAAKA,WACxB,EAAKC,0BAA4BN,GAGjCA,IAEF,EAAKrF,YAAcoD,KAGyB,MAOhDM,WAAWQ,UAAUc,kBAAoB,WACvC,IAAMY,EAAYxG,KAAKyG,oBACvB,EAAsDzG,KAAKD,QAAnDS,EAAR,EAAQA,QAASqE,EAAjB,EAAiBA,eAAgBD,EAAjC,EAAiCA,iBAE5BC,QAC+B,IAArB2B,EAAUE,OACE,IAApBF,EAAUE,eACRF,EAAUE,aACVF,EAAUG,MAGnB,IAAMZ,EAASnB,EAAiBgC,QAAO,SAACC,EAAaC,GAInD,OAHIA,KAAaN,IACfK,EAAYC,GAAaN,EAAUM,IAE9BD,IACN,IAEG7C,EAAchE,KAAK+G,mBAAmBhB,EAAQvF,GAC9CwG,EAAehH,KAAK8F,kBACpBmB,EAAkBjH,KAAKkH,oBACvBC,EAAiBnH,KAAKoH,sBAAsBrB,EAAQkB,EAAiBzG,GAC3E,GAAIwG,IAAiBhD,GAAeiD,IAAoBE,EAIxD,GAAgB,YAAZ3G,GACF,GAAI8C,OAAOC,SAAWD,OAAOC,QAAQC,aAAc,CACjD,IAAM6D,EAAmBrH,KAAKD,QAAQU,mBAAmBqB,QAAQ,OAAQ,IACnEwF,EAAuC,KAAhBtD,EAAqB,GAArB,WAA8BA,GAErDP,EAAa,GAAH,OAAM4D,GAAN,OAAyBC,GAAzB,OAAgDH,GAChE7D,OAAOC,QAAQC,aAAa,GAAI,KAAMC,GACtCzD,KAAKW,gBAAkBqD,EAAcmD,OAGlC,CACL,IAAMI,EAAuBvH,KAAKwH,2BAA2BxH,KAAKyH,mBAClEnE,OAAOK,SAAS7B,QAAQ,IAAMkC,EAAcuD,GAC5CvH,KAAKW,gBAAkBqD,EAAcuD,IAYzCjD,WAAWQ,UAAU0C,2BAA6B,SAASE,GACzD,IAAM3B,EAAS,IAAIjF,gBAAgB4G,GACnC,OAAO3B,EAAO4B,IAAI,KAAX,WAAsB,IAAI7G,gBAAgB,CAAE8G,EAAG7B,EAAO8B,IAAI,QAAY,IAQ/EvD,WAAWQ,UAAUgB,gBAAkB,WACrC,MAAwC9F,KAAKD,QAArCS,EAAR,EAAQA,QAASC,EAAjB,EAAiBA,mBACjB,MAAgB,YAAZD,EACK8C,OAAOK,SAASnB,SAASqB,OAAOpD,EAAmB0D,QAEnDb,OAAOK,SAASC,KAAKC,OAAO,IAQvCS,WAAWQ,UAAUgD,oBAAsB,WACzC,OAAOxE,OAAOK,SAASC,KAAKC,OAAO,IAE9B,IAAMkE,EAAb,a,kOAAA,GAAyCzD,YAAzC,I,QAAA,G,EAAA,E,+YAAA,6D,EAAA,G,EAAA,mBACE,WAAO,WACDtE,KAAKD,QAAQyE,kBACfxE,KAAKgI,UAAY,IAAIlI,EAAUE,KAAKD,SACpCC,KAAKmF,KAAKb,WAAWc,WAAWC,UAAU,WAGxB,SAFI,EAAKtF,QAAjBS,SAGN,EAAKwH,UAAUC,2BAKrB,8C,iBAbJ,KAiBA3E,OAAOgB,WAAayD,G,qBC1NpB,IAAIG,EAAQ,EAAQ,MAChBC,EAAc,EAAQ,MAM1BC,EAAOC,QAAU,SAAUC,GACzB,OAAOJ,GAAM,WACX,QAASC,EAAYG,MANf,aAMqCA,MAAyBH,EAAYG,GAAanI,OAASmI,O,qBCT1G,IAAIC,EAAI,EAAQ,MACZC,EAAW,gBAIfD,EAAE,CAAEE,OAAQ,SAAUC,MAAM,GAAQ,CAClCpG,QAAS,SAAiBqG,GACxB,OAAOH,EAASG,O,qBCPpB,IAAIJ,EAAI,EAAQ,MACZK,EAAU,EAAQ,KAClBC,EAAiB,EAAQ,MAI7BN,EAAE,CAAEE,OAAQ,SAAUC,MAAM,GAAQ,CAClCrG,YAAa,SAAqByG,GAChC,IAAIC,EAAM,GAIV,OAHAH,EAAQE,GAAU,SAAUE,EAAGC,GAC7BJ,EAAeE,EAAKC,EAAGC,KACtB,CAAEC,YAAY,IACVH,M,kCCXX,IAAII,EAAgC,EAAQ,MACxCC,EAAW,EAAQ,MACnBC,EAAW,EAAQ,MACnBrH,EAAW,EAAQ,MACnBsH,EAAyB,EAAQ,MACjCC,EAAqB,EAAQ,MAC7BC,EAAa,EAAQ,MAGzBL,EAA8B,SAAS,SAAUM,EAAOC,EAAaC,GACnE,MAAO,CAGL,SAAeC,GACb,IAAIjB,EAAIW,EAAuBtJ,MAC3B6J,EAAoBC,MAAVF,OAAsBE,EAAYF,EAAOH,GACvD,YAAmBK,IAAZD,EAAwBA,EAAQ7E,KAAK4E,EAAQjB,GAAK,IAAIoB,OAAOH,GAAQH,GAAOzH,EAAS2G,KAI9F,SAAUqB,GACR,IAAIC,EAAKb,EAASpJ,MACdkK,EAAIlI,EAASgI,GACbG,EAAMR,EAAgBD,EAAaO,EAAIC,GAE3C,GAAIC,EAAIC,KAAM,OAAOD,EAAIlH,MAEzB,IAAKgH,EAAGI,OAAQ,OAAOb,EAAWS,EAAIC,GAEtC,IAAII,EAAcL,EAAGM,QACrBN,EAAGO,UAAY,EAIf,IAHA,IAEIC,EAFAC,EAAI,GACJC,EAAI,EAEgC,QAAhCF,EAASjB,EAAWS,EAAIC,KAAc,CAC5C,IAAIU,EAAW5I,EAASyI,EAAO,IAC/BC,EAAEC,GAAKC,EACU,KAAbA,IAAiBX,EAAGO,UAAYjB,EAAmBW,EAAGb,EAASY,EAAGO,WAAYF,IAClFK,IAEF,OAAa,IAANA,EAAU,KAAOD,Q,kCCxC9B,IAAInC,EAAI,EAAQ,MACZsC,EAAQ,aAKZtC,EAAE,CAAEE,OAAQ,SAAUqC,OAAO,EAAMC,OAJN,EAAQ,KAIMC,CAAuB,SAAW,CAC3EtH,KAAM,WACJ,OAAOmH,EAAM7K,W","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,29 @@
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
+
6
+ # 5.0.0-38
7
+ Dev: Add Renovate Bot @cdrini
8
+ Dev: Update node-fetch @cdrini
9
+ Fix: Search request promise err & fix tests @cdrini
10
+ Dev: Split node workflow into different jobs @cdrini
11
+ Dev: Give cache steps better names in GHA @cdrini
12
+ Dev: Update concurrently + Small speedup to build & test @cdrini
13
+ Dev: Renovate - Auto-update dev dependencies for minor/patch @cdrini
14
+ Fix: Better MS Edge voice selection @cdrini
15
+ Dev: Allow small drops in codecov coverage (< 0.5%) @cdrini
16
+ Dev: Renovate - add `^@internetarchive/icon-` @cdrini
17
+
18
+ # 5.0.0-37
19
+ Fix: Update all `.then()` to async/await @sancodes
20
+ Fix: Upgrade to Lit 2 @Aadilhassan
21
+ Dev: Update to Node v16.x @duggiefresh
22
+ Dev: Remove unused demo bundle @cdrini
23
+ Dev: Fix README broken link for plugin directory @duggiefresh
24
+ Dev: Update sharing options menu to lit2 @iisa
25
+ Dev: Remove package publishing from GHA @cdrini
26
+
1
27
  # 5.0.0-36
2
28
  Fix: Readaloud scrolls along with dext @cdrini
3
29
  Dev: ES6 var to let/const updates @sancodes
package/README.md CHANGED
@@ -123,7 +123,7 @@ A peek in how to use/extend core functionality:
123
123
  - plugin.url.js - automatically updates the browser url
124
124
  - plugin.resume.js - uses cookies to remember the current page
125
125
  - plugin.vendor-fullscreen.js - replaces fullscreen mode with vendor native fullscreen
126
- - see plugin directory for current plugin files ()[https://github.com/internetarchive/bookreader/tree/master/src/plugins]
126
+ - see [plugin directory for current plugin files](https://github.com/internetarchive/bookreader/tree/master/src/plugins)
127
127
 
128
128
  ### Embedding BookReader in an iFrame
129
129
 
@@ -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/codecov.yml CHANGED
@@ -1,6 +1,12 @@
1
1
  codecov:
2
2
  notify:
3
3
  require_ci_to_pass: yes
4
+ status:
5
+ project:
6
+ default:
7
+ # Allow small drops in coverage
8
+ threshold: 0.005 # .5 %
9
+ if_not_found: failure
4
10
 
5
11
  coverage:
6
12
  precision: 2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@internetarchive/bookreader",
3
- "version": "5.0.0-36",
3
+ "version": "5.0.0-39",
4
4
  "description": "The Internet Archive BookReader.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,45 +26,42 @@
26
26
  "private": false,
27
27
  "dependencies": {
28
28
  "@internetarchive/ia-activity-indicator": "^0.0.1",
29
- "@internetarchive/ia-item-navigator": "0.0.5",
30
- "@internetarchive/ia-menu-slider": "^1.1.1",
31
- "@internetarchive/ia-sharing-options": "^0.1.4",
32
- "@internetarchive/icon-bookmark": "^1.1.3",
33
- "@internetarchive/icon-collapse-sidebar": "^1.1.0",
34
- "@internetarchive/icon-dl": "^1.1.3",
35
- "@internetarchive/icon-edit-pencil": "1.1.5",
36
- "@internetarchive/icon-magnify-minus": "^1.2.3",
37
- "@internetarchive/icon-magnify-plus": "^1.2.3",
38
- "@internetarchive/icon-search": "^1.2.3",
39
- "@internetarchive/icon-share": "^1.1.3",
40
- "@internetarchive/icon-visual-adjustment": "^1.1.3",
29
+ "@internetarchive/ia-item-navigator": "^1.0.0",
30
+ "@internetarchive/ia-sharing-options": "^1.0.1",
31
+ "@internetarchive/icon-bookmark": "^1.3.2",
32
+ "@internetarchive/icon-dl": "^1.3.3",
33
+ "@internetarchive/icon-edit-pencil": "1.3.2",
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",
41
39
  "@internetarchive/modal-manager": "^0.1.0",
42
- "@internetarchive/shared-resize-observer": "^0.0.1",
43
- "lit-element": "^2.4.0",
44
- "lit-html": "^1.3.0"
40
+ "@internetarchive/shared-resize-observer": "^0.2.0",
41
+ "lit": "^2.1.3"
45
42
  },
46
43
  "devDependencies": {
47
- "@babel/core": "7.15.0",
48
- "@babel/eslint-parser": "^7.16.5",
49
- "@babel/plugin-proposal-class-properties": "^7.14.5",
50
- "@babel/plugin-proposal-decorators": "^7.14.5",
51
- "@babel/preset-env": "7.15.0",
52
- "@open-wc/testing": "^2.5.33",
44
+ "@babel/core": "7.17.5",
45
+ "@babel/eslint-parser": "7.17.0",
46
+ "@babel/plugin-proposal-class-properties": "7.16.7",
47
+ "@babel/plugin-proposal-decorators": "7.17.2",
48
+ "@babel/preset-env": "7.16.11",
49
+ "@open-wc/testing": "^3.1.2",
53
50
  "@open-wc/testing-karma": "^4.0.9",
54
- "@types/jest": "^27.4.0",
51
+ "@types/jest": "^27.4.1",
55
52
  "@webcomponents/webcomponentsjs": "^2.6.0",
56
- "babel-loader": "8.2.2",
53
+ "babel-loader": "8.2.3",
57
54
  "codecov": "^3.8.3",
58
- "concurrently": "6.0.2",
55
+ "concurrently": "7.0.0",
59
56
  "core-js": "3.16.2",
60
- "cpx2": "3.0.0",
57
+ "cpx2": "4.2.0",
61
58
  "eslint": "^7.32.0",
62
59
  "eslint-plugin-no-jquery": "^2.7.0",
63
60
  "eslint-plugin-testcafe": "^0.2.1",
64
61
  "hammerjs": "^2.0.8",
65
- "http-server": "0.12.3",
62
+ "http-server": "14.1.0",
66
63
  "iso-language-codes": "1.1.0",
67
- "jest": "^27.4.7",
64
+ "jest": "^27.5.1",
68
65
  "jquery": "1.11.3",
69
66
  "jquery-colorbox": "1.6.4",
70
67
  "jquery-ui": "1.12.1",
@@ -73,13 +70,13 @@
73
70
  "jquery.mmenu": "5.6.5",
74
71
  "karma-coverage": "^2.1.0",
75
72
  "live-server": "1.2.1",
76
- "node-fetch": "2.6.1",
73
+ "node-fetch": "2.6.7",
77
74
  "regenerator-runtime": "0.13.9",
78
75
  "sass": "1.38.2",
79
76
  "sinon": "^12.0.1",
80
77
  "soundmanager2": "2.97.20170602",
81
78
  "svgo": "2.4.0",
82
- "testcafe": "^1.18.3",
79
+ "testcafe": "^1.18.4",
83
80
  "testcafe-browser-provider-browserstack": "^1.13.2-alpha.1",
84
81
  "webpack": "5.51.1",
85
82
  "webpack-cli": "4.8.0"
@@ -87,7 +84,7 @@
87
84
  "jest": {
88
85
  "testEnvironment": "jsdom",
89
86
  "transformIgnorePatterns": [
90
- "node_modules/(?!(lit-html|lit-element|lit)/)"
87
+ "node_modules/(?!(lit-html|lit-element|lit|@lit|@internetarchive)/)"
91
88
  ],
92
89
  "moduleNameMapper": {
93
90
  "^@/(.*)$": "<rootDir>/$1"
@@ -105,7 +102,7 @@
105
102
  "preversion": "npm run test && node scripts/preversion.js",
106
103
  "version": "node scripts/version.js",
107
104
  "postversion": "node scripts/postversion.js",
108
- "build": "npm run clean && npm run build-js && npm run build-css && npm run build-assets",
105
+ "build": "npm run clean && npx concurrently --group npm:build-js npm:build-css npm:build-assets",
109
106
  "build-assets": "npx cpx \"src/assets/**/*\" BookReader && npx svgo -f BookReader/icons && npx svgo -f BookReader/images",
110
107
  "build-assets:watch": "npx cpx --watch --verbose \"src/assets/**/*\" BookReader",
111
108
  "build-js": "npx webpack",
@@ -118,7 +115,7 @@
118
115
  "serve": "npx http-server . --port 8000",
119
116
  "serve-live": "npx live-server . --port 8000 --watch=index.html,BookReader,BookReaderDemo",
120
117
  "serve-dev": "npm run build-css && npx concurrently --kill-others npm:serve-live npm:build-*:watch",
121
- "test": "npm run test-jest && npm run test-karma",
118
+ "test": "npx concurrently --group npm:test-jest npm:test-karma",
122
119
  "test:e2e": "npm run build && npx testcafe",
123
120
  "test:e2e:dev": "npx testcafe --live --dev",
124
121
  "test-jest:watch": "npx jest --watch",