@internetarchive/bookreader 5.0.0-7-multiple-files → 5.0.0-70

Sign up to get free protection for your applications and to get access to all the features.
Files changed (319) hide show
  1. package/.eslintrc.js +17 -15
  2. package/.github/workflows/node.js.yml +78 -6
  3. package/.github/workflows/npm-publish.yml +6 -20
  4. package/.testcaferc.js +10 -0
  5. package/BookReader/BookReader.css +416 -1365
  6. package/BookReader/BookReader.js +2 -21564
  7. package/BookReader/BookReader.js.LICENSE.txt +20 -20
  8. package/BookReader/BookReader.js.map +1 -1
  9. package/BookReader/ia-bookreader-bundle.js +1509 -0
  10. package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
  11. package/BookReader/ia-bookreader-bundle.js.map +1 -0
  12. package/BookReader/icons/1up.svg +1 -12
  13. package/BookReader/icons/2up.svg +1 -15
  14. package/BookReader/icons/advance.svg +3 -26
  15. package/BookReader/icons/chevron-right.svg +1 -1
  16. package/BookReader/icons/close-circle-dark.svg +1 -0
  17. package/BookReader/icons/close-circle.svg +1 -1
  18. package/BookReader/icons/fullscreen.svg +1 -17
  19. package/BookReader/icons/fullscreen_exit.svg +1 -17
  20. package/BookReader/icons/hamburger.svg +1 -15
  21. package/BookReader/icons/left-arrow.svg +1 -12
  22. package/BookReader/icons/magnify-minus.svg +1 -16
  23. package/BookReader/icons/magnify-plus.svg +1 -17
  24. package/BookReader/icons/magnify.svg +1 -15
  25. package/BookReader/icons/pause.svg +1 -23
  26. package/BookReader/icons/play.svg +1 -22
  27. package/BookReader/icons/playback-speed.svg +1 -34
  28. package/BookReader/icons/read-aloud.svg +1 -22
  29. package/BookReader/icons/review.svg +3 -22
  30. package/BookReader/icons/thumbnails.svg +1 -17
  31. package/BookReader/icons/voice.svg +1 -0
  32. package/BookReader/icons/volume-full.svg +1 -22
  33. package/BookReader/images/BRicons.svg +5 -94
  34. package/BookReader/images/books_graphic.svg +1 -177
  35. package/BookReader/images/icon_book.svg +1 -12
  36. package/BookReader/images/icon_bookmark.svg +1 -12
  37. package/BookReader/images/icon_gear.svg +1 -14
  38. package/BookReader/images/icon_hamburger.svg +1 -20
  39. package/BookReader/images/icon_home.svg +1 -21
  40. package/BookReader/images/icon_info.svg +1 -11
  41. package/BookReader/images/icon_one_page.svg +1 -8
  42. package/BookReader/images/icon_pause.svg +1 -1
  43. package/BookReader/images/icon_play.svg +1 -1
  44. package/BookReader/images/icon_playback-rate.svg +1 -15
  45. package/BookReader/images/icon_search_button.svg +1 -8
  46. package/BookReader/images/icon_share.svg +1 -9
  47. package/BookReader/images/icon_skip-ahead.svg +1 -6
  48. package/BookReader/images/icon_skip-back.svg +2 -13
  49. package/BookReader/images/icon_speaker.svg +1 -18
  50. package/BookReader/images/icon_speaker_open.svg +1 -10
  51. package/BookReader/images/icon_thumbnails.svg +1 -12
  52. package/BookReader/images/icon_toc.svg +1 -5
  53. package/BookReader/images/icon_two_pages.svg +1 -9
  54. package/BookReader/images/marker_chap-off.svg +1 -11
  55. package/BookReader/images/marker_chap-on.svg +1 -11
  56. package/BookReader/images/marker_srch-on.svg +1 -11
  57. package/BookReader/jquery-3.js +2 -0
  58. package/BookReader/jquery-3.js.LICENSE.txt +24 -0
  59. package/BookReader/plugins/plugin.archive_analytics.js +1 -172
  60. package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
  61. package/BookReader/plugins/plugin.autoplay.js +1 -165
  62. package/BookReader/plugins/plugin.autoplay.js.map +1 -1
  63. package/BookReader/plugins/plugin.chapters.js +22 -301
  64. package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
  65. package/BookReader/plugins/plugin.chapters.js.map +1 -1
  66. package/BookReader/plugins/plugin.iframe.js +1 -74
  67. package/BookReader/plugins/plugin.iframe.js.map +1 -1
  68. package/BookReader/plugins/plugin.resume.js +1 -368
  69. package/BookReader/plugins/plugin.resume.js.map +1 -1
  70. package/BookReader/plugins/plugin.search.js +2 -1420
  71. package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
  72. package/BookReader/plugins/plugin.search.js.map +1 -1
  73. package/BookReader/plugins/plugin.text_selection.js +2 -1080
  74. package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
  75. package/BookReader/plugins/plugin.text_selection.js.map +1 -1
  76. package/BookReader/plugins/plugin.tts.js +2 -9193
  77. package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
  78. package/BookReader/plugins/plugin.tts.js.map +1 -1
  79. package/BookReader/plugins/plugin.url.js +1 -269
  80. package/BookReader/plugins/plugin.url.js.map +1 -1
  81. package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
  82. package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
  83. package/BookReader/webcomponents-bundle.js +3 -0
  84. package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
  85. package/BookReader/webcomponents-bundle.js.map +1 -0
  86. package/BookReaderDemo/BookReaderDemo.css +16 -19
  87. package/BookReaderDemo/BookReaderJSAdvanced.js +0 -3
  88. package/BookReaderDemo/BookReaderJSAutoplay.js +4 -1
  89. package/BookReaderDemo/BookReaderJSSimple.js +1 -0
  90. package/BookReaderDemo/IADemoBr.js +147 -0
  91. package/BookReaderDemo/demo-advanced.html +2 -2
  92. package/BookReaderDemo/demo-autoplay.html +2 -3
  93. package/BookReaderDemo/demo-embed-iframe-src.html +2 -1
  94. package/BookReaderDemo/demo-fullscreen-mobile.html +3 -5
  95. package/BookReaderDemo/demo-fullscreen.html +2 -4
  96. package/BookReaderDemo/demo-iiif.html +2 -1
  97. package/BookReaderDemo/demo-iiif.js +0 -1
  98. package/BookReaderDemo/demo-internetarchive.html +213 -17
  99. package/BookReaderDemo/demo-multiple.html +2 -1
  100. package/BookReaderDemo/demo-preview-pages.html +2 -1
  101. package/BookReaderDemo/demo-simple.html +2 -1
  102. package/BookReaderDemo/demo-vendor-fullscreen.html +2 -4
  103. package/BookReaderDemo/ia-multiple-volumes-manifest.js +170 -0
  104. package/BookReaderDemo/immersion-1up.html +2 -2
  105. package/BookReaderDemo/immersion-mode.html +2 -4
  106. package/BookReaderDemo/toggle_controls.html +3 -2
  107. package/BookReaderDemo/view_mode.html +2 -1
  108. package/BookReaderDemo/viewmode-cycle.html +2 -3
  109. package/CHANGELOG.md +289 -0
  110. package/README.md +14 -1
  111. package/babel.config.js +20 -0
  112. package/codecov.yml +6 -0
  113. package/index.html +4 -1
  114. package/jsconfig.json +19 -0
  115. package/netlify.toml +9 -0
  116. package/package.json +71 -60
  117. package/renovate.json +52 -0
  118. package/scripts/preversion.js +4 -1
  119. package/src/BookNavigator/assets/bookmark-colors.js +1 -1
  120. package/src/BookNavigator/assets/button-base.js +9 -2
  121. package/src/BookNavigator/assets/ia-logo.js +17 -0
  122. package/src/BookNavigator/assets/icon_checkmark.js +1 -1
  123. package/src/BookNavigator/assets/icon_close.js +1 -1
  124. package/src/BookNavigator/assets/icon_sort_asc.js +5 -0
  125. package/src/BookNavigator/assets/{icon_sort_ascending.js → icon_sort_desc.js} +2 -2
  126. package/src/BookNavigator/assets/icon_sort_neutral.js +5 -0
  127. package/src/BookNavigator/assets/icon_volumes.js +11 -0
  128. package/src/BookNavigator/book-navigator.js +586 -0
  129. package/src/BookNavigator/bookmarks/bookmark-button.js +3 -2
  130. package/src/BookNavigator/bookmarks/bookmark-edit.js +3 -4
  131. package/src/BookNavigator/bookmarks/bookmarks-list.js +2 -3
  132. package/src/BookNavigator/bookmarks/bookmarks-loginCTA.js +3 -8
  133. package/src/BookNavigator/bookmarks/bookmarks-provider.js +27 -17
  134. package/src/BookNavigator/bookmarks/ia-bookmarks.js +116 -67
  135. package/src/BookNavigator/delete-modal-actions.js +1 -1
  136. package/src/BookNavigator/downloads/downloads-provider.js +36 -21
  137. package/src/BookNavigator/downloads/downloads.js +41 -25
  138. package/src/BookNavigator/search/search-provider.js +80 -28
  139. package/src/BookNavigator/search/search-results.js +28 -25
  140. package/src/BookNavigator/sharing.js +27 -0
  141. package/src/BookNavigator/visual-adjustments/visual-adjustments-provider.js +11 -10
  142. package/src/BookNavigator/visual-adjustments/visual-adjustments.js +3 -3
  143. package/src/BookNavigator/volumes/volumes-provider.js +88 -53
  144. package/src/BookNavigator/volumes/volumes.js +41 -14
  145. package/src/BookReader/BookModel.js +64 -34
  146. package/src/BookReader/DragScrollable.js +233 -0
  147. package/src/BookReader/Mode1Up.js +56 -351
  148. package/src/BookReader/Mode1UpLit.js +388 -0
  149. package/src/BookReader/Mode2Up.js +73 -1318
  150. package/src/BookReader/Mode2UpLit.js +776 -0
  151. package/src/BookReader/ModeCoordinateSpace.js +29 -0
  152. package/src/BookReader/ModeSmoothZoom.js +312 -0
  153. package/src/BookReader/ModeThumb.js +18 -12
  154. package/src/BookReader/Navbar/Navbar.js +12 -38
  155. package/src/BookReader/PageContainer.js +81 -6
  156. package/src/BookReader/ReduceSet.js +1 -1
  157. package/src/BookReader/Toolbar/Toolbar.js +10 -37
  158. package/src/BookReader/events.js +2 -3
  159. package/src/BookReader/options.js +24 -2
  160. package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
  161. package/src/BookReader/utils/ScrollClassAdder.js +31 -0
  162. package/src/BookReader/utils/SelectionObserver.js +43 -0
  163. package/src/BookReader/utils.js +118 -13
  164. package/src/BookReader.js +446 -1062
  165. package/src/assets/icons/close-circle-dark.svg +1 -0
  166. package/src/assets/icons/magnify-minus.svg +3 -7
  167. package/src/assets/icons/magnify-plus.svg +3 -7
  168. package/src/assets/icons/voice.svg +1 -0
  169. package/src/css/BookReader.scss +1 -17
  170. package/src/css/_BRBookmarks.scss +1 -1
  171. package/src/css/_BRComponent.scss +1 -1
  172. package/src/css/_BRmain.scss +33 -24
  173. package/src/css/_BRnav.scss +11 -38
  174. package/src/css/_BRpages.scss +149 -40
  175. package/src/css/_BRsearch.scss +67 -226
  176. package/src/css/_TextSelection.scss +87 -27
  177. package/src/css/_colorbox.scss +2 -2
  178. package/src/css/_controls.scss +20 -7
  179. package/src/css/_icons.scss +7 -1
  180. package/src/ia-bookreader/ia-bookreader.js +224 -0
  181. package/src/plugins/plugin.archive_analytics.js +3 -3
  182. package/src/plugins/plugin.autoplay.js +5 -11
  183. package/src/plugins/plugin.chapters.js +211 -186
  184. package/src/plugins/plugin.resume.js +3 -3
  185. package/src/plugins/plugin.text_selection.js +464 -134
  186. package/src/plugins/plugin.vendor-fullscreen.js +4 -4
  187. package/src/plugins/search/plugin.search.js +175 -120
  188. package/src/plugins/search/utils.js +43 -0
  189. package/src/plugins/search/view.js +64 -202
  190. package/src/plugins/tts/AbstractTTSEngine.js +68 -40
  191. package/src/plugins/tts/FestivalTTSEngine.js +13 -14
  192. package/src/plugins/tts/PageChunk.js +15 -21
  193. package/src/plugins/tts/PageChunkIterator.js +8 -12
  194. package/src/plugins/tts/WebTTSEngine.js +87 -71
  195. package/src/plugins/tts/plugin.tts.js +95 -126
  196. package/src/plugins/tts/utils.js +0 -25
  197. package/src/plugins/url/UrlPlugin.js +191 -0
  198. package/src/plugins/{plugin.url.js → url/plugin.url.js} +45 -16
  199. package/src/util/browserSniffing.js +22 -0
  200. package/src/util/docCookies.js +21 -2
  201. package/tests/e2e/README.md +37 -0
  202. package/tests/e2e/autoplay.test.js +2 -2
  203. package/tests/e2e/base.test.js +8 -16
  204. package/tests/e2e/helpers/base.js +53 -48
  205. package/tests/e2e/helpers/debug.js +1 -1
  206. package/tests/e2e/helpers/params.js +17 -0
  207. package/tests/e2e/helpers/rightToLeft.js +8 -14
  208. package/tests/e2e/helpers/search.js +73 -0
  209. package/tests/e2e/models/Navigation.js +20 -37
  210. package/tests/e2e/rightToLeft.test.js +4 -5
  211. package/tests/e2e/viewmode.test.js +40 -33
  212. package/tests/jest/BookNavigator/book-navigator.test.js +658 -0
  213. package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +43 -0
  214. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmark-edit.test.js +25 -26
  215. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmarks-list.test.js +41 -42
  216. package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +45 -0
  217. package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +67 -0
  218. package/tests/jest/BookNavigator/downloads/downloads.test.js +53 -0
  219. package/tests/jest/BookNavigator/search/search-provider.test.js +167 -0
  220. package/tests/{karma/BookNavigator → jest/BookNavigator/search}/search-results.test.js +109 -60
  221. package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +49 -0
  222. package/tests/jest/BookNavigator/visual-adjustments.test.js +200 -0
  223. package/tests/jest/BookNavigator/volumes/volumes-provider.test.js +184 -0
  224. package/tests/jest/BookNavigator/volumes/volumes.test.js +97 -0
  225. package/tests/{BookReader → jest/BookReader}/BookModel.test.js +74 -14
  226. package/tests/jest/BookReader/BookReaderPublicFunctions.test.js +193 -0
  227. package/tests/{BookReader → jest/BookReader}/ImageCache.test.js +4 -4
  228. package/tests/jest/BookReader/Mode1UpLit.test.js +73 -0
  229. package/tests/jest/BookReader/Mode2Up.test.js +98 -0
  230. package/tests/jest/BookReader/Mode2UpLit.test.js +190 -0
  231. package/tests/jest/BookReader/ModeCoordinateSpace.test.js +16 -0
  232. package/tests/jest/BookReader/ModeSmoothZoom.test.js +218 -0
  233. package/tests/jest/BookReader/ModeThumb.test.js +71 -0
  234. package/tests/{BookReader → jest/BookReader}/Navbar/Navbar.test.js +10 -10
  235. package/tests/{BookReader → jest/BookReader}/PageContainer.test.js +88 -6
  236. package/tests/{BookReader → jest/BookReader}/ReduceSet.test.js +1 -1
  237. package/tests/{BookReader → jest/BookReader}/Toolbar/Toolbar.test.js +2 -2
  238. package/tests/jest/BookReader/utils/HTMLDimensionsCacher.test.js +59 -0
  239. package/tests/jest/BookReader/utils/ScrollClassAdder.test.js +49 -0
  240. package/tests/jest/BookReader/utils/SelectionObserver.test.js +43 -0
  241. package/tests/{BookReader → jest/BookReader}/utils/classes.test.js +1 -1
  242. package/tests/jest/BookReader/utils.test.js +229 -0
  243. package/tests/jest/BookReader.keyboard.test.js +190 -0
  244. package/tests/{BookReader.options.test.js → jest/BookReader.options.test.js} +9 -1
  245. package/tests/{BookReader.test.js → jest/BookReader.test.js} +26 -37
  246. package/tests/{plugins → jest/plugins}/plugin.archive_analytics.test.js +2 -2
  247. package/tests/{plugins → jest/plugins}/plugin.autoplay.test.js +4 -4
  248. package/tests/jest/plugins/plugin.chapters.test.js +145 -0
  249. package/tests/{plugins → jest/plugins}/plugin.iframe.test.js +2 -2
  250. package/tests/{plugins → jest/plugins}/plugin.resume.test.js +3 -3
  251. package/tests/jest/plugins/plugin.text_selection.test.js +317 -0
  252. package/tests/{plugins → jest/plugins}/plugin.vendor-fullscreen.test.js +2 -2
  253. package/tests/{plugins → jest/plugins}/search/plugin.search.test.js +26 -47
  254. package/tests/{plugins → jest/plugins}/search/plugin.search.view.test.js +39 -6
  255. package/tests/jest/plugins/search/utils.js +25 -0
  256. package/tests/jest/plugins/search/utils.test.js +29 -0
  257. package/tests/{plugins → jest/plugins}/tts/AbstractTTSEngine.test.js +29 -9
  258. package/tests/{plugins → jest/plugins}/tts/FestivalTTSEngine.test.js +4 -4
  259. package/tests/{plugins → jest/plugins}/tts/PageChunk.test.js +1 -1
  260. package/tests/{plugins → jest/plugins}/tts/PageChunkIterator.test.js +3 -3
  261. package/tests/{plugins → jest/plugins}/tts/WebTTSEngine.test.js +47 -1
  262. package/tests/{plugins → jest/plugins}/tts/utils.test.js +1 -60
  263. package/tests/jest/plugins/url/UrlPlugin.test.js +198 -0
  264. package/tests/{plugins → jest/plugins/url}/plugin.url.test.js +53 -14
  265. package/tests/jest/setup.js +3 -0
  266. package/tests/{util → jest/util}/browserSniffing.test.js +1 -1
  267. package/tests/jest/util/docCookies.test.js +24 -0
  268. package/tests/{util → jest/util}/strings.test.js +1 -1
  269. package/tests/{utils.js → jest/utils.js} +38 -0
  270. package/webpack.config.js +11 -6
  271. package/.babelrc +0 -12
  272. package/.dependabot/config.yml +0 -6
  273. package/.testcaferc.json +0 -5
  274. package/BookReader/bookreader-component-bundle.js +0 -14311
  275. package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
  276. package/BookReader/bookreader-component-bundle.js.map +0 -1
  277. package/BookReader/icons/sort-ascending.svg +0 -1
  278. package/BookReader/icons/sort-descending.svg +0 -1
  279. package/BookReader/jquery-1.10.1.js +0 -108
  280. package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
  281. package/BookReader/plugins/plugin.menu_toggle.js +0 -369
  282. package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
  283. package/BookReader/plugins/plugin.mobile_nav.js +0 -335
  284. package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
  285. package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
  286. package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
  287. package/karma.conf.js +0 -23
  288. package/src/BookNavigator/BookModel.js +0 -14
  289. package/src/BookNavigator/BookNavigator.js +0 -452
  290. package/src/BookNavigator/assets/book-loader.js +0 -27
  291. package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
  292. package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
  293. package/src/BookNavigator/search/a-search-result.js +0 -55
  294. package/src/BookReader/DebugConsole.js +0 -54
  295. package/src/BookReaderComponent/BookReaderComponent.js +0 -112
  296. package/src/ItemNavigator/ItemNavigator.js +0 -372
  297. package/src/ItemNavigator/providers/sharing.js +0 -29
  298. package/src/assets/icons/sort-ascending.svg +0 -1
  299. package/src/assets/icons/sort-descending.svg +0 -1
  300. package/src/css/_MobileNav.scss +0 -194
  301. package/src/dragscrollable-br.js +0 -261
  302. package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
  303. package/src/plugins/plugin.mobile_nav.js +0 -287
  304. package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
  305. package/tests/BookReader/DebugConsole.test.js +0 -25
  306. package/tests/BookReader/Mode1Up.test.js +0 -164
  307. package/tests/BookReader/Mode2Up.test.js +0 -247
  308. package/tests/BookReader/utils.test.js +0 -109
  309. package/tests/e2e/helpers/desktopSearch.js +0 -72
  310. package/tests/e2e/helpers/mobileSearch.js +0 -85
  311. package/tests/e2e/ia-production/ia-prod-base.js +0 -17
  312. package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
  313. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
  314. package/tests/karma/BookNavigator/volumes.test.js +0 -101
  315. package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
  316. package/tests/plugins/plugin.chapters.test.js +0 -130
  317. package/tests/plugins/plugin.mobile_nav.test.js +0 -66
  318. package/tests/plugins/plugin.text_selection.test.js +0 -203
  319. package/tests/util/docCookies.test.js +0 -15
@@ -1,270 +1,2 @@
1
- (self["webpackChunk_internetarchive_bookreader"] = self["webpackChunk_internetarchive_bookreader"] || []).push([["plugins/plugin.url.js"],{
2
-
3
- /***/ "./src/plugins/plugin.url.js":
4
- /*!***********************************!*\
5
- !*** ./src/plugins/plugin.url.js ***!
6
- \***********************************/
7
- /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8
-
9
- "use strict";
10
- __webpack_require__.r(__webpack_exports__);
11
- /* harmony import */ var core_js_modules_es_array_reduce_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.reduce.js */ "./node_modules/core-js/modules/es.array.reduce.js");
12
- /* harmony import */ var core_js_modules_es_array_reduce_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reduce_js__WEBPACK_IMPORTED_MODULE_0__);
13
- /* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ "./node_modules/core-js/modules/es.regexp.exec.js");
14
- /* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_1__);
15
- /* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.js");
16
- /* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_2__);
17
- /* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.array.concat.js */ "./node_modules/core-js/modules/es.array.concat.js");
18
- /* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_3__);
19
- /* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.array.iterator.js */ "./node_modules/core-js/modules/es.array.iterator.js");
20
- /* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__);
21
- /* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js");
22
- /* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5__);
23
- /* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.iterator.js */ "./node_modules/core-js/modules/es.string.iterator.js");
24
- /* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_6__);
25
- /* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ "./node_modules/core-js/modules/web.dom-collections.iterator.js");
26
- /* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_7__);
27
- /* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/web.url.js */ "./node_modules/core-js/modules/web.url.js");
28
- /* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_8__);
29
- /* provided dependency */ var jQuery = __webpack_require__(/*! jquery */ "jquery");
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
- /* global BookReader */
41
-
42
- /**
43
- * Plugin for URL management in BookReader
44
- * Note read more about the url "fragment" here:
45
- * https://openlibrary.org/dev/docs/bookurls
46
- */
47
- jQuery.extend(BookReader.defaultOptions, {
48
- enableUrlPlugin: true,
49
- bookId: '',
50
-
51
- /** @type {string} Defaults can be a urlFragment string */
52
- defaults: null,
53
- updateWindowTitle: false,
54
-
55
- /** @type {'history' | 'hash'} */
56
- urlMode: 'hash',
57
-
58
- /**
59
- * When using 'history' mode, this part of the URL is kept constant
60
- * @example /details/plato/
61
- */
62
- urlHistoryBasePath: '/',
63
-
64
- /** Only these params will be reflected onto the URL */
65
- urlTrackedParams: ['page', 'search', 'mode', 'region', 'highlight'],
66
-
67
- /** If true, don't update the URL when `page == n0 (eg "/page/n0")` */
68
- urlTrackIndex0: false
69
- });
70
- /** @override */
71
-
72
- BookReader.prototype.setup = function (super_) {
73
- return function (options) {
74
- super_.call(this, options);
75
- this.bookId = options.bookId;
76
- this.defaults = options.defaults;
77
- this.locationPollId = null;
78
- this.oldLocationHash = null;
79
- this.oldUserHash = null;
80
- };
81
- }(BookReader.prototype.setup);
82
- /** @override */
83
-
84
-
85
- BookReader.prototype.init = function (super_) {
86
- return function () {
87
- var _this = this;
88
-
89
- if (this.options.enableUrlPlugin) {
90
- this.bind(BookReader.eventNames.PostInit, function () {
91
- var _this$options = _this.options,
92
- updateWindowTitle = _this$options.updateWindowTitle,
93
- urlMode = _this$options.urlMode;
94
-
95
- if (updateWindowTitle) {
96
- document.title = _this.shortTitle(50);
97
- }
98
-
99
- if (urlMode === 'hash') {
100
- _this.urlStartLocationPolling();
101
- }
102
- });
103
- this.bind(BookReader.eventNames.fragmentChange, this.urlUpdateFragment.bind(this));
104
- }
105
-
106
- super_.call(this);
107
- };
108
- }(BookReader.prototype.init);
109
- /**
110
- * Returns a shortened version of the title with the maximum number of characters
111
- * @param {number} maximumCharacters
112
- * @return {string}
113
- */
114
-
115
-
116
- BookReader.prototype.shortTitle = function (maximumCharacters) {
117
- if (this.bookTitle.length < maximumCharacters) {
118
- return this.bookTitle;
119
- }
120
-
121
- var title = "".concat(this.bookTitle.substr(0, maximumCharacters - 3), "...");
122
- return title;
123
- };
124
- /**
125
- * Starts polling of window.location to see hash fragment changes
126
- */
127
-
128
-
129
- BookReader.prototype.urlStartLocationPolling = function () {
130
- var _this2 = this;
131
-
132
- this.oldLocationHash = this.urlReadFragment();
133
-
134
- if (this.locationPollId) {
135
- clearInterval(this.locationPollID);
136
- this.locationPollId = null;
137
- }
138
-
139
- var updateHash = function updateHash() {
140
- var newFragment = _this2.urlReadFragment();
141
-
142
- var hasFragmentChange = newFragment != _this2.oldLocationHash && newFragment != _this2.oldUserHash;
143
-
144
- if (!hasFragmentChange) {
145
- return;
146
- }
147
-
148
- var params = _this2.paramsFromFragment(newFragment);
149
-
150
- var updateParams = function updateParams() {
151
- return _this2.updateFromParams(params);
152
- };
153
-
154
- _this2.trigger(BookReader.eventNames.stop);
155
-
156
- if (_this2.animating) {
157
- // Queue change if animating
158
- if (_this2.autoStop) _this2.autoStop();
159
- _this2.animationFinishedCallback = updateParams;
160
- } else {
161
- // update immediately
162
- updateParams();
163
- }
164
-
165
- _this2.oldUserHash = newFragment;
166
- };
167
-
168
- this.locationPollId = setInterval(updateHash, 500);
169
- };
170
- /**
171
- * Update URL from the current parameters.
172
- * Call this instead of manually using window.location.replace
173
- */
174
-
175
-
176
- BookReader.prototype.urlUpdateFragment = function () {
177
- var allParams = this.paramsFromCurrent();
178
- var _this$options2 = this.options,
179
- urlMode = _this$options2.urlMode,
180
- urlTrackIndex0 = _this$options2.urlTrackIndex0,
181
- urlTrackedParams = _this$options2.urlTrackedParams;
182
-
183
- if (!urlTrackIndex0 && typeof allParams.index !== 'undefined' && allParams.index === 0) {
184
- delete allParams.index;
185
- delete allParams.page;
186
- }
187
-
188
- var params = urlTrackedParams.reduce(function (validParams, paramName) {
189
- if (paramName in allParams) {
190
- validParams[paramName] = allParams[paramName];
191
- }
192
-
193
- return validParams;
194
- }, {});
195
- var newFragment = this.fragmentFromParams(params, urlMode);
196
- var currFragment = this.urlReadFragment();
197
- var currQueryString = this.getLocationSearch();
198
- var newQueryString = this.queryStringFromParams(params, currQueryString, urlMode);
199
-
200
- if (currFragment === newFragment && currQueryString === newQueryString) {
201
- return;
202
- }
203
-
204
- if (urlMode === 'history') {
205
- if (window.history && window.history.replaceState) {
206
- var baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\/+$/, '');
207
- var newFragmentWithSlash = newFragment === '' ? '' : "/".concat(newFragment);
208
- var newUrlPath = "".concat(baseWithoutSlash).concat(newFragmentWithSlash).concat(newQueryString);
209
- window.history.replaceState({}, null, newUrlPath);
210
- this.oldLocationHash = newFragment + newQueryString;
211
- }
212
- } else {
213
- var newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());
214
- window.location.replace('#' + newFragment + newQueryStringSearch);
215
- this.oldLocationHash = newFragment + newQueryStringSearch;
216
- }
217
- };
218
- /**
219
- * @private
220
- * Filtering query parameters to select only book search param (?q=foo)
221
- This needs to be updated/URL system modified if future query params are to be added
222
- * @param {string} url
223
- * @return {string}
224
- * */
225
-
226
-
227
- BookReader.prototype.urlParamsFiltersOnlySearch = function (url) {
228
- var params = new URLSearchParams(url);
229
- return params.has('q') ? "?".concat(new URLSearchParams({
230
- q: params.get('q')
231
- })) : '';
232
- };
233
- /**
234
- * Will read either the hash or URL and return the bookreader fragment
235
- * @return {string}
236
- */
237
-
238
-
239
- BookReader.prototype.urlReadFragment = function () {
240
- var _this$options3 = this.options,
241
- urlMode = _this$options3.urlMode,
242
- urlHistoryBasePath = _this$options3.urlHistoryBasePath;
243
-
244
- if (urlMode === 'history') {
245
- return window.location.pathname.substr(urlHistoryBasePath.length);
246
- } else {
247
- return window.location.hash.substr(1);
248
- }
249
- };
250
- /**
251
- * Will read the hash return the bookreader fragment
252
- * @return {string}
253
- */
254
-
255
-
256
- BookReader.prototype.urlReadHashFragment = function () {
257
- return window.location.hash.substr(1);
258
- };
259
-
260
- /***/ })
261
-
262
- },
263
- /******/ function(__webpack_require__) { // webpackRuntimeModules
264
- /******/ "use strict";
265
- /******/
266
- /******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
267
- /******/ var __webpack_exports__ = (__webpack_exec__("./src/plugins/plugin.url.js"));
268
- /******/ }
269
- ]);
1
+ (self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[336],{1226:function(t,e,r){"use strict";function n(t){return n="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},n(t)}function o(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 i(t,e){for(var r=0;r<e.length;r++){var o=e[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,(void 0,i=function(t,e){if("object"!==n(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,"string");if("object"!==n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(o.key),"symbol"===n(i)?i:String(i)),o)}var i}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(6649),r(6078),r(2526),r(1817),r(9653),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(9720),r(3210),r(4765),r(7042),r(1038);var a,s=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(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 i,a,s,u,l=e.urlSchema.find((function(t){return t.name===o}));null!==(i=l)&&void 0!==i&&i.deprecated_for&&(l=e.urlSchema.find((function(t){return t.name===l.deprecated_for}))),"path"==(null===(a=l)||void 0===a?void 0:a.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(encodeURIComponent(n[t.name])):""})).join("/"),i="".concat(o.replace(/\/+/g,"/").replace(/\/+$/,"")),a="".concat(i,"?").concat(r.toString());return r.toString()?a:"".concat(i)}},{key:"urlStringToUrlState",value:function(t){var e={},r=new URL(t,"http://example.com"),n=Object.fromEntries(r.searchParams.entries()),i=r.pathname.match(/[^\\/]+\/[^\\/]+/g),a=i?Object.fromEntries(i.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(a,t.name),n=s(t,"deprecated_for")&&r;if(r||n){var o=n?t.deprecated_for:t.name;e[o]=decodeURIComponent(a[t.name])}})),Object.entries(n).forEach((function(t){var r,n,i=(n=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,i,a,s=[],u=!0,l=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=i.call(r)).done)&&(s.push(n.value),s.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(l)throw o}}return s}}(r,n)||function(t,e){if(t){if("string"==typeof t)return o(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)?o(t,e):void 0}}(r,n)||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.")}()),a=i[0],s=i[1];e[a]=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,"/");try{window.history.replaceState({},null,r)}catch(t){this.urlMode="hash"}}else this.options.urlMode="hash";"hash"==this.urlMode&&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)}}],r&&i(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},u(t)}function l(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,(void 0,o=function(t,e){if("object"!==u(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!==u(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(n.key),"symbol"===u(o)?o:String(o)),n)}var o}function c(){return c="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=f(t)););return t}(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(arguments.length<3?t:r):o.value}},c.apply(this,arguments)}function h(t,e){return h=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},h(t,e)}function f(t){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},f(t)}r(5311).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=(a=BookReader.prototype.setup,function(t){a.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.urlTrackIndex0,n=e.urlTrackedParams;r||void 0===t.index||0!==t.index||(delete t.index,delete t.page);var o=n.reduce((function(e,r){return r in t&&(e[r]=t[r]),e}),{}),i=this.fragmentFromParams(o,this.options.urlMode),a=this.urlReadFragment(),s=this.getLocationSearch(),u=this.queryStringFromParams(o,s,this.options.urlMode);if(a!==i||s!==u){if("history"===this.options.urlMode)if(window.history&&window.history.replaceState){var l=this.options.urlHistoryBasePath.replace(/\/+$/,""),c=""===i?"":"/".concat(i),h="".concat(l).concat(c).concat(u);try{window.history.replaceState({},null,h),this.oldLocationHash=i+u}catch(t){this.options.urlMode="hash"}}else this.options.urlMode="hash";if("hash"===this.options.urlMode){var f=this.urlParamsFiltersOnlySearch(this.readQueryString());window.location.replace("#"+i+f),this.oldLocationHash=i+f}}},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 p=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&&h(t,e)}(a,BookReader);var e,r,n,o,i=(n=a,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=f(n);if(o){var r=f(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return function(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)}(this,t)});function a(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,a),i.apply(this,arguments)}return e=a,(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()}))),c(f(a.prototype),"init",this).call(this)}}])&&l(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),a}();window.BookReader=p},7045:function(t,e,r){var n=r(6339),o=r(3070);t.exports=function(t,e,r){return r.get&&n(r.get,e,{getter:!0}),r.set&&n(r.set,e,{setter:!0}),o.f(t,e,r)}},3197:function(t,e,r){"use strict";var n=r(1702),o=2147483647,i=/[^\0-\u007E]/,a=/[.\u3002\uFF0E\uFF61]/g,s="Overflow: input needs wider integers to process",u=RangeError,l=n(a.exec),c=Math.floor,h=String.fromCharCode,f=n("".charCodeAt),p=n([].join),d=n([].push),m=n("".replace),g=n("".split),v=n("".toLowerCase),y=function(t){return t+22+75*(t<26)},b=function(t,e,r){var n=0;for(t=r?c(t/700):t>>1,t+=c(t/e);t>455;)t=c(t/35),n+=36;return c(n+36*t/(t+38))},w=function(t){var e=[];t=function(t){for(var e=[],r=0,n=t.length;r<n;){var o=f(t,r++);if(o>=55296&&o<=56319&&r<n){var i=f(t,r++);56320==(64512&i)?d(e,((1023&o)<<10)+(1023&i)+65536):(d(e,o),r--)}else d(e,o)}return e}(t);var r,n,i=t.length,a=128,l=0,m=72;for(r=0;r<t.length;r++)(n=t[r])<128&&d(e,h(n));var g=e.length,v=g;for(g&&d(e,"-");v<i;){var w=o;for(r=0;r<t.length;r++)(n=t[r])>=a&&n<w&&(w=n);var P=v+1;if(w-a>c((o-l)/P))throw u(s);for(l+=(w-a)*P,a=w,r=0;r<t.length;r++){if((n=t[r])<a&&++l>o)throw u(s);if(n==a){for(var S=l,k=36;;){var R=k<=m?1:k>=m+26?26:k-m;if(S<R)break;var U=S-R,B=36-R;d(e,h(y(R+U%B))),S=c(U/B),k+=36}d(e,h(y(S))),m=b(l,P,v==g),l=0,v++}}l++,a++}return p(e,"")};t.exports=function(t){var e,r,n=[],o=g(m(v(t),a,"."),".");for(e=0;e<o.length;e++)r=o[e],d(n,l(i,r)?"xn--"+w(r):r);return p(n,".")}},6091:function(t,e,r){var n=r(6530).PROPER,o=r(7293),i=r(1361);t.exports=function(t){return o((function(){return!!i[t]()||"​…᠎"!=="​…᠎"[t]()||n&&i[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),i=r(6135);n({target:"Object",stat:!0},{fromEntries:function(t){var e={};return o(t,(function(t,r){i(e,t,r)}),{AS_ENTRIES:!0}),e}})},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)}})},8789:function(t,e,r){"use strict";r(8783);var n,o=r(2109),i=r(9781),a=r(5143),s=r(7854),u=r(9974),l=r(1702),c=r(8052),h=r(7045),f=r(5787),p=r(2597),d=r(1574),m=r(8457),g=r(1589),v=r(8710).codeAt,y=r(3197),b=r(1340),w=r(8003),P=r(8053),S=r(5556),k=r(9909),R=k.set,U=k.getterFor("URL"),B=S.URLSearchParams,H=S.getState,O=s.URL,L=s.TypeError,j=s.parseInt,q=Math.floor,I=Math.pow,T=l("".charAt),A=l(/./.exec),F=l([].join),C=l(1..toString),_=l([].pop),E=l([].push),M=l("".replace),x=l([].shift),z=l("".split),$=l("".slice),N=l("".toLowerCase),D=l([].unshift),W="Invalid scheme",J="Invalid host",Q="Invalid port",G=/[a-z]/i,K=/[\d+-.a-z]/i,V=/\d/,X=/^0x/i,Y=/^[0-7]+$/,Z=/^\d+$/,tt=/^[\da-f]+$/i,et=/[\0\t\n\r #%/:<>?@[\\\]^|]/,rt=/[\0\t\n\r #/:<>?@[\\\]^|]/,nt=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,ot=/[\t\n\r]/g,it=function(t){var e,r,n,o;if("number"==typeof t){for(e=[],r=0;r<4;r++)D(e,t%256),t=q(t/256);return F(e,".")}if("object"==typeof t){for(e="",n=function(t){for(var e=null,r=1,n=null,o=0,i=0;i<8;i++)0!==t[i]?(o>r&&(e=n,r=o),n=null,o=0):(null===n&&(n=i),++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+=C(t[r],16),r<7&&(e+=":")));return"["+e+"]"}return t},at={},st=d({},at,{" ":1,'"':1,"<":1,">":1,"`":1}),ut=d({},st,{"#":1,"?":1,"{":1,"}":1}),lt=d({},ut,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),ct=function(t,e){var r=v(t,0);return r>32&&r<127&&!p(e,t)?t:encodeURIComponent(t)},ht={ftp:21,file:null,http:80,https:443,ws:80,wss:443},ft=function(t,e){var r;return 2==t.length&&A(G,T(t,0))&&(":"==(r=T(t,1))||!e&&"|"==r)},pt=function(t){var e;return t.length>1&&ft($(t,0,2))&&(2==t.length||"/"===(e=T(t,2))||"\\"===e||"?"===e||"#"===e)},dt=function(t){return"."===t||"%2e"===N(t)},mt={},gt={},vt={},yt={},bt={},wt={},Pt={},St={},kt={},Rt={},Ut={},Bt={},Ht={},Ot={},Lt={},jt={},qt={},It={},Tt={},At={},Ft={},Ct=function(t,e,r){var n,o,i,a=b(t);if(e){if(o=this.parse(a))throw L(o);this.searchParams=null}else{if(void 0!==r&&(n=new Ct(r,!0)),o=this.parse(a,null,n))throw L(o);(i=H(new B)).bindURL(this),this.searchParams=i}};Ct.prototype={type:"URL",parse:function(t,e,r){var o,i,a,s,u,l=this,c=e||mt,h=0,f="",d=!1,v=!1,y=!1;for(t=b(t),e||(l.scheme="",l.username="",l.password="",l.host=null,l.port=null,l.path=[],l.query=null,l.fragment=null,l.cannotBeABaseURL=!1,t=M(t,nt,"")),t=M(t,ot,""),o=m(t);h<=o.length;){switch(i=o[h],c){case mt:if(!i||!A(G,i)){if(e)return W;c=vt;continue}f+=N(i),c=gt;break;case gt:if(i&&(A(K,i)||"+"==i||"-"==i||"."==i))f+=N(i);else{if(":"!=i){if(e)return W;f="",c=vt,h=0;continue}if(e&&(l.isSpecial()!=p(ht,f)||"file"==f&&(l.includesCredentials()||null!==l.port)||"file"==l.scheme&&!l.host))return;if(l.scheme=f,e)return void(l.isSpecial()&&ht[l.scheme]==l.port&&(l.port=null));f="","file"==l.scheme?c=Ot:l.isSpecial()&&r&&r.scheme==l.scheme?c=yt:l.isSpecial()?c=St:"/"==o[h+1]?(c=bt,h++):(l.cannotBeABaseURL=!0,E(l.path,""),c=Tt)}break;case vt:if(!r||r.cannotBeABaseURL&&"#"!=i)return W;if(r.cannotBeABaseURL&&"#"==i){l.scheme=r.scheme,l.path=g(r.path),l.query=r.query,l.fragment="",l.cannotBeABaseURL=!0,c=Ft;break}c="file"==r.scheme?Ot:wt;continue;case yt:if("/"!=i||"/"!=o[h+1]){c=wt;continue}c=kt,h++;break;case bt:if("/"==i){c=Rt;break}c=It;continue;case wt:if(l.scheme=r.scheme,i==n)l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=g(r.path),l.query=r.query;else if("/"==i||"\\"==i&&l.isSpecial())c=Pt;else if("?"==i)l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=g(r.path),l.query="",c=At;else{if("#"!=i){l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=g(r.path),l.path.length--,c=It;continue}l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=g(r.path),l.query=r.query,l.fragment="",c=Ft}break;case Pt:if(!l.isSpecial()||"/"!=i&&"\\"!=i){if("/"!=i){l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,c=It;continue}c=Rt}else c=kt;break;case St:if(c=kt,"/"!=i||"/"!=T(f,h+1))continue;h++;break;case kt:if("/"!=i&&"\\"!=i){c=Rt;continue}break;case Rt:if("@"==i){d&&(f="%40"+f),d=!0,a=m(f);for(var w=0;w<a.length;w++){var P=a[w];if(":"!=P||y){var S=ct(P,lt);y?l.password+=S:l.username+=S}else y=!0}f=""}else if(i==n||"/"==i||"?"==i||"#"==i||"\\"==i&&l.isSpecial()){if(d&&""==f)return"Invalid authority";h-=m(f).length+1,f="",c=Ut}else f+=i;break;case Ut:case Bt:if(e&&"file"==l.scheme){c=jt;continue}if(":"!=i||v){if(i==n||"/"==i||"?"==i||"#"==i||"\\"==i&&l.isSpecial()){if(l.isSpecial()&&""==f)return J;if(e&&""==f&&(l.includesCredentials()||null!==l.port))return;if(s=l.parseHost(f))return s;if(f="",c=qt,e)return;continue}"["==i?v=!0:"]"==i&&(v=!1),f+=i}else{if(""==f)return J;if(s=l.parseHost(f))return s;if(f="",c=Ht,e==Bt)return}break;case Ht:if(!A(V,i)){if(i==n||"/"==i||"?"==i||"#"==i||"\\"==i&&l.isSpecial()||e){if(""!=f){var k=j(f,10);if(k>65535)return Q;l.port=l.isSpecial()&&k===ht[l.scheme]?null:k,f=""}if(e)return;c=qt;continue}return Q}f+=i;break;case Ot:if(l.scheme="file","/"==i||"\\"==i)c=Lt;else{if(!r||"file"!=r.scheme){c=It;continue}if(i==n)l.host=r.host,l.path=g(r.path),l.query=r.query;else if("?"==i)l.host=r.host,l.path=g(r.path),l.query="",c=At;else{if("#"!=i){pt(F(g(o,h),""))||(l.host=r.host,l.path=g(r.path),l.shortenPath()),c=It;continue}l.host=r.host,l.path=g(r.path),l.query=r.query,l.fragment="",c=Ft}}break;case Lt:if("/"==i||"\\"==i){c=jt;break}r&&"file"==r.scheme&&!pt(F(g(o,h),""))&&(ft(r.path[0],!0)?E(l.path,r.path[0]):l.host=r.host),c=It;continue;case jt:if(i==n||"/"==i||"\\"==i||"?"==i||"#"==i){if(!e&&ft(f))c=It;else if(""==f){if(l.host="",e)return;c=qt}else{if(s=l.parseHost(f))return s;if("localhost"==l.host&&(l.host=""),e)return;f="",c=qt}continue}f+=i;break;case qt:if(l.isSpecial()){if(c=It,"/"!=i&&"\\"!=i)continue}else if(e||"?"!=i)if(e||"#"!=i){if(i!=n&&(c=It,"/"!=i))continue}else l.fragment="",c=Ft;else l.query="",c=At;break;case It:if(i==n||"/"==i||"\\"==i&&l.isSpecial()||!e&&("?"==i||"#"==i)){if(".."===(u=N(u=f))||"%2e."===u||".%2e"===u||"%2e%2e"===u?(l.shortenPath(),"/"==i||"\\"==i&&l.isSpecial()||E(l.path,"")):dt(f)?"/"==i||"\\"==i&&l.isSpecial()||E(l.path,""):("file"==l.scheme&&!l.path.length&&ft(f)&&(l.host&&(l.host=""),f=T(f,0)+":"),E(l.path,f)),f="","file"==l.scheme&&(i==n||"?"==i||"#"==i))for(;l.path.length>1&&""===l.path[0];)x(l.path);"?"==i?(l.query="",c=At):"#"==i&&(l.fragment="",c=Ft)}else f+=ct(i,ut);break;case Tt:"?"==i?(l.query="",c=At):"#"==i?(l.fragment="",c=Ft):i!=n&&(l.path[0]+=ct(i,at));break;case At:e||"#"!=i?i!=n&&("'"==i&&l.isSpecial()?l.query+="%27":l.query+="#"==i?"%23":ct(i,at)):(l.fragment="",c=Ft);break;case Ft:i!=n&&(l.fragment+=ct(i,st))}h++}},parseHost:function(t){var e,r,n;if("["==T(t,0)){if("]"!=T(t,t.length-1))return J;if(e=function(t){var e,r,n,o,i,a,s,u=[0,0,0,0,0,0,0,0],l=0,c=null,h=0,f=function(){return T(t,h)};if(":"==f()){if(":"!=T(t,1))return;h+=2,c=++l}for(;f();){if(8==l)return;if(":"!=f()){for(e=r=0;r<4&&A(tt,f());)e=16*e+j(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(!A(V,f()))return;for(;A(V,f());){if(i=j(f(),10),null===o)o=i;else{if(0==o)return;o=10*o+i}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(a=l-c,l=7;0!=l&&a>0;)s=u[l],u[l--]=u[c+a-1],u[c+--a]=s;else if(8!=l)return;return u}($(t,1,-1)),!e)return J;this.host=e}else if(this.isSpecial()){if(t=y(t),A(et,t))return J;if(e=function(t){var e,r,n,o,i,a,s,u=z(t,".");if(u.length&&""==u[u.length-1]&&u.length--,(e=u.length)>4)return t;for(r=[],n=0;n<e;n++){if(""==(o=u[n]))return t;if(i=10,o.length>1&&"0"==T(o,0)&&(i=A(X,o)?16:8,o=$(o,8==i?1:2)),""===o)a=0;else{if(!A(10==i?Z:8==i?Y:tt,o))return t;a=j(o,i)}E(r,a)}for(n=0;n<e;n++)if(a=r[n],n==e-1){if(a>=I(256,5-e))return null}else if(a>255)return null;for(s=_(r),n=0;n<r.length;n++)s+=r[n]*I(256,3-n);return s}(t),null===e)return J;this.host=e}else{if(A(rt,t))return J;for(e="",r=m(t),n=0;n<r.length;n++)e+=ct(r[n],at);this.host=e}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return p(ht,this.scheme)},shortenPath:function(){var t=this.path,e=t.length;!e||"file"==this.scheme&&1==e&&ft(t[0],!0)||t.length--},serialize:function(){var t=this,e=t.scheme,r=t.username,n=t.password,o=t.host,i=t.port,a=t.path,s=t.query,u=t.fragment,l=e+":";return null!==o?(l+="//",t.includesCredentials()&&(l+=r+(n?":"+n:"")+"@"),l+=it(o),null!==i&&(l+=":"+i)):"file"==e&&(l+="//"),l+=t.cannotBeABaseURL?a[0]:a.length?"/"+F(a,"/"):"",null!==s&&(l+="?"+s),null!==u&&(l+="#"+u),l},setHref:function(t){var e=this.parse(t);if(e)throw L(e);this.searchParams.update()},getOrigin:function(){var t=this.scheme,e=this.port;if("blob"==t)try{return new _t(t.path[0]).origin}catch(t){return"null"}return"file"!=t&&this.isSpecial()?t+"://"+it(this.host)+(null!==e?":"+e:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(t){this.parse(b(t)+":",mt)},getUsername:function(){return this.username},setUsername:function(t){var e=m(b(t));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var r=0;r<e.length;r++)this.username+=ct(e[r],lt)}},getPassword:function(){return this.password},setPassword:function(t){var e=m(b(t));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var r=0;r<e.length;r++)this.password+=ct(e[r],lt)}},getHost:function(){var t=this.host,e=this.port;return null===t?"":null===e?it(t):it(t)+":"+e},setHost:function(t){this.cannotBeABaseURL||this.parse(t,Ut)},getHostname:function(){var t=this.host;return null===t?"":it(t)},setHostname:function(t){this.cannotBeABaseURL||this.parse(t,Bt)},getPort:function(){var t=this.port;return null===t?"":b(t)},setPort:function(t){this.cannotHaveUsernamePasswordPort()||(""==(t=b(t))?this.port=null:this.parse(t,Ht))},getPathname:function(){var t=this.path;return this.cannotBeABaseURL?t[0]:t.length?"/"+F(t,"/"):""},setPathname:function(t){this.cannotBeABaseURL||(this.path=[],this.parse(t,qt))},getSearch:function(){var t=this.query;return t?"?"+t:""},setSearch:function(t){""==(t=b(t))?this.query=null:("?"==T(t,0)&&(t=$(t,1)),this.query="",this.parse(t,At)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var t=this.fragment;return t?"#"+t:""},setHash:function(t){""!=(t=b(t))?("#"==T(t,0)&&(t=$(t,1)),this.fragment="",this.parse(t,Ft)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var _t=function(t){var e=f(this,Et),r=P(arguments.length,1)>1?arguments[1]:void 0,n=R(e,new Ct(t,!1,r));i||(e.href=n.serialize(),e.origin=n.getOrigin(),e.protocol=n.getProtocol(),e.username=n.getUsername(),e.password=n.getPassword(),e.host=n.getHost(),e.hostname=n.getHostname(),e.port=n.getPort(),e.pathname=n.getPathname(),e.search=n.getSearch(),e.searchParams=n.getSearchParams(),e.hash=n.getHash())},Et=_t.prototype,Mt=function(t,e){return{get:function(){return U(this)[t]()},set:e&&function(t){return U(this)[e](t)},configurable:!0,enumerable:!0}};if(i&&(h(Et,"href",Mt("serialize","setHref")),h(Et,"origin",Mt("getOrigin")),h(Et,"protocol",Mt("getProtocol","setProtocol")),h(Et,"username",Mt("getUsername","setUsername")),h(Et,"password",Mt("getPassword","setPassword")),h(Et,"host",Mt("getHost","setHost")),h(Et,"hostname",Mt("getHostname","setHostname")),h(Et,"port",Mt("getPort","setPort")),h(Et,"pathname",Mt("getPathname","setPathname")),h(Et,"search",Mt("getSearch","setSearch")),h(Et,"searchParams",Mt("getSearchParams")),h(Et,"hash",Mt("getHash","setHash"))),c(Et,"toJSON",(function(){return U(this).serialize()}),{enumerable:!0}),c(Et,"toString",(function(){return U(this).serialize()}),{enumerable:!0}),O){var xt=O.createObjectURL,zt=O.revokeObjectURL;xt&&c(_t,"createObjectURL",u(xt,O)),zt&&c(_t,"revokeObjectURL",u(zt,O))}w(_t,"URL"),o({global:!0,constructor:!0,forced:!a,sham:!i},{URL:_t})},285:function(t,e,r){r(8789)}},function(t){t(t.s=1226)}]);
270
2
  //# sourceMappingURL=plugin.url.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://@internetarchive/bookreader/./src/plugins/plugin.url.js"],"names":["jQuery","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlMode","urlHistoryBasePath","urlTrackedParams","urlTrackIndex0","prototype","setup","super_","options","call","locationPollId","oldLocationHash","oldUserHash","init","bind","eventNames","PostInit","document","title","shortTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","bookTitle","length","substr","urlReadFragment","clearInterval","locationPollID","updateHash","newFragment","hasFragmentChange","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","setInterval","allParams","paramsFromCurrent","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","window","history","replaceState","baseWithoutSlash","replace","newFragmentWithSlash","newUrlPath","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","location","url","URLSearchParams","has","q","get","pathname","hash","urlReadHashFragment"],"mappings":"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","file":"plugins/plugin.url.js","sourcesContent":["/* global BookReader */\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'],\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(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};\n"],"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/define-built-in-accessor.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.trim.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.constructor.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}/${encodeURIComponent(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 // Not in the URL\n if (!hasPropertyKey && !hasDeprecatedKey) {\n return;\n }\n\n const urlStateParam = hasDeprecatedKey ? schema.deprecated_for : schema.name;\n urlState[urlStateParam] = decodeURIComponent(urlStrSplitSlashObj[schema.name]);\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 this.options.urlMode = 'hash';\n } else {\n const newUrlPath = `${this.urlHistoryBasePath}${concatenatedPath}`.trim().replace(/(\\/+)/g, '/');\n try {\n window.history.replaceState({}, null, newUrlPath);\n } catch (e) {\n // DOMException on Chrome when in sandboxed iframe\n this.urlMode = 'hash';\n }\n }\n }\n\n if (this.urlMode == 'hash') {\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 { 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, this.options.urlMode);\n const currFragment = this.urlReadFragment();\n const currQueryString = this.getLocationSearch();\n const newQueryString = this.queryStringFromParams(params, currQueryString, this.options.urlMode);\n if (currFragment === newFragment && currQueryString === newQueryString) {\n return;\n }\n\n if (this.options.urlMode === 'history') {\n if (!window.history || !window.history.replaceState) {\n this.options.urlMode = 'hash';\n } else {\n const baseWithoutSlash = this.options.urlHistoryBasePath.replace(/\\/+$/, '');\n const newFragmentWithSlash = newFragment === '' ? '' : `/${newFragment}`;\n\n const newUrlPath = `${baseWithoutSlash}${newFragmentWithSlash}${newQueryString}`;\n try {\n window.history.replaceState({}, null, newUrlPath);\n this.oldLocationHash = newFragment + newQueryString;\n } catch (e) {\n // DOMException on Chrome when in sandboxed iframe\n this.options.urlMode = 'hash';\n }\n }\n }\n\n if (this.options.urlMode === 'hash') {\n const newQueryStringSearch = this.urlParamsFiltersOnlySearch(this.readQueryString());\n window.location.replace('#' + newFragment + newQueryStringSearch);\n this.oldLocationHash = newFragment + newQueryStringSearch;\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 makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar uncurryThis = require('../internals/function-uncurry-this');\n\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;\n\nvar $RangeError = RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\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 = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((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 push(output, value);\n counter--;\n }\n } else {\n push(output, 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 while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\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 */\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 push(output, fromCharCode(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 push(output, 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 var k = base;\n while (true) {\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 push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar 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]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && 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 $ = 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/url-constructor-detection');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\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 validateArgumentsLength = require('../internals/validate-arguments-length');\nvar URLSearchParamsModule = require('../modules/web.url-search-params.constructor');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\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-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- 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 regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\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 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, 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 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\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 chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 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 (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) 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\n// https://url.spec.whatwg.org/#host-serializing\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 unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\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 += numberToString(host[index], 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 (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\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\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\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, chr, bufferCodePoints, failure;\n\n input = $toString(input);\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 = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\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 (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\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 push(url.path, '');\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 && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\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 (chr == '/' && 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 (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\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 = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\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 (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\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 chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && 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 (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\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 = url.parseHost(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 += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, 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 this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = 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 (url.includesCredentials()) {\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 ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.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' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\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, URLPrototype);\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\ndefineBuiltIn(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\ndefineBuiltIn(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\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 if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url.constructor');\n"],"names":["super_","UrlPlugin","options","arguments","length","undefined","_classCallCheck","this","bookReaderOptions","urlSchema","name","position","default","deprecated_for","urlState","urlMode","urlHistoryBasePath","urlLocationPollId","oldLocationHash","oldUserHash","key","value","_this","searchParams","URLSearchParams","pathParams","Object","keys","forEach","_schema","_schema2","_schema3","_schema4","schema","find","schemaKey","append","strPathParams","filter","s","map","concat","encodeURIComponent","join","strStrippedTrailingSlash","replace","concatenatedPath","toString","urlString","urlPath","URL","urlSearchParamsObj","fromEntries","entries","splitUrlMatches","pathname","match","urlStrSplitSlashObj","x","split","doesKeyExists","_object","_key","some","hasPropertyKey","hasDeprecatedKey","urlStateParam","decodeURIComponent","_ref","_ref2","pushToAddressBar","urlStrPath","urlStateToUrlString","window","history","replaceState","newUrlPath","trim","e","location","_this2","hash","substr","clearInterval","setInterval","newFragment","urlStringToUrlState","path","search","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlTrackedParams","urlTrackIndex0","prototype","setup","call","locationPollId","init","bind","eventNames","PostInit","_this$options","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","urlReadFragment","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","autoStop","animationFinishedCallback","allParams","paramsFromCurrent","_this$options2","index","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","baseWithoutSlash","newFragmentWithSlash","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","url","has","q","get","_this$options3","urlReadHashFragment","BookreaderUrlPlugin","_BookReader","_inherits","_super","apply","_this3","urlPlugin","listenForHashChanges","_get","_getPrototypeOf","makeBuiltIn","defineProperty","module","exports","target","descriptor","getter","set","setter","f","uncurryThis","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","$RangeError","RangeError","exec","floor","Math","fromCharCode","String","charCodeAt","push","toLowerCase","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","baseMinusTMin","base","encode","input","output","string","counter","extra","ucs2decode","i","currentValue","inputLength","n","bias","basicLength","handledCPCount","m","handledCPCountPlusOne","t","qMinusT","baseMinusT","label","encoded","labels","PROPER_FUNCTION_NAME","fails","whitespaces","METHOD_NAME","$","$entries","stat","O","iterate","createProperty","iterable","obj","v","AS_ENTRIES","$trim","proto","forced","forcedStringTrimMethod","EOF","DESCRIPTORS","USE_NATIVE_URL","global","defineBuiltIn","defineBuiltInAccessor","anInstance","hasOwn","assign","arrayFrom","arraySlice","codeAt","toASCII","$toString","setToStringTag","validateArgumentsLength","URLSearchParamsModule","InternalStateModule","setInternalState","getInternalURLState","getterFor","getInternalSearchParamsState","getState","NativeURL","TypeError","parseInt","pow","charAt","numberToString","pop","shift","stringSlice","slice","unshift","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","serializeHost","host","result","compress","ignore0","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","chr","code","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","normalized","second","startsWithWindowsDriveLetter","third","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","URLState","isBase","baseState","failure","parse","bindURL","type","stateOverride","codePoints","bufferCodePoints","state","pointer","buffer","seenAt","seenBracket","seenPasswordToken","scheme","username","password","port","query","fragment","cannotBeABaseURL","isSpecial","includesCredentials","codePoint","encodedCodePoints","parseHost","shortenPath","numbersSeen","ipv4Piece","number","swaps","swap","address","pieceIndex","parseIPv6","partsLength","numbers","part","radix","ipv4","parts","parseIPv4","cannotHaveUsernamePasswordPort","pathSize","serialize","setHref","href","update","getOrigin","URLConstructor","origin","error","getProtocol","setProtocol","protocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","hostname","getPort","setPort","getPathname","setPathname","getSearch","setSearch","getSearchParams","facade","getHash","setHash","that","URLPrototype","accessorDescriptor","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","constructor","sham"],"sourceRoot":""}