@internetarchive/bookreader 5.0.0-11-multiple-files → 5.0.0-110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BookReader/474.js +2 -0
- package/BookReader/474.js.map +1 -0
- package/BookReader/BookReader.css +616 -1467
- package/BookReader/BookReader.js +2 -21564
- package/BookReader/BookReader.js.LICENSE.txt +20 -20
- package/BookReader/BookReader.js.map +1 -1
- package/BookReader/bergamot-translator-worker.js +2966 -0
- package/BookReader/bergamot-translator-worker.wasm +0 -0
- package/BookReader/hypothesis/LICENSE +50 -0
- package/BookReader/hypothesis/README.md +55 -0
- package/BookReader/hypothesis/build/boot.js +1 -0
- package/BookReader/hypothesis/build/manifest.json +20 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js +184 -0
- package/BookReader/hypothesis/build/scripts/annotator.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js +798 -0
- package/BookReader/hypothesis/build/scripts/sidebar.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js +711 -0
- package/BookReader/hypothesis/build/scripts/ui-playground.bundle.js.map +1 -0
- package/BookReader/hypothesis/build/styles/annotator.css +2235 -0
- package/BookReader/hypothesis/build/styles/annotator.css.map +1 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/BookReader/hypothesis/build/styles/highlights.css +2 -0
- package/BookReader/hypothesis/build/styles/highlights.css.map +1 -0
- package/BookReader/hypothesis/build/styles/katex.min.css +2 -0
- package/BookReader/hypothesis/build/styles/katex.min.css.map +1 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css +2 -0
- package/BookReader/hypothesis/build/styles/pdfjs-overrides.css.map +1 -0
- package/BookReader/hypothesis/build/styles/sidebar.css +2731 -0
- package/BookReader/hypothesis/build/styles/sidebar.css.map +1 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css +2659 -0
- package/BookReader/hypothesis/build/styles/ui-playground.css.map +1 -0
- package/BookReader/hypothesis/package.json +126 -0
- package/BookReader/ia-bookreader-bundle.js +1907 -0
- package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +19 -0
- package/BookReader/ia-bookreader-bundle.js.map +1 -0
- package/BookReader/icons/1up.svg +1 -12
- package/BookReader/icons/2up.svg +1 -15
- package/BookReader/icons/advance.svg +3 -26
- package/BookReader/icons/chevron-right.svg +1 -1
- package/BookReader/icons/close-circle-dark.svg +1 -0
- package/BookReader/icons/close-circle.svg +1 -1
- package/BookReader/icons/fullscreen.svg +1 -17
- package/BookReader/icons/fullscreen_exit.svg +1 -17
- package/BookReader/icons/hamburger.svg +1 -15
- package/BookReader/icons/left-arrow.svg +1 -12
- package/BookReader/icons/magnify-minus.svg +1 -16
- package/BookReader/icons/magnify-plus.svg +1 -17
- package/BookReader/icons/magnify.svg +1 -15
- package/BookReader/icons/pause.svg +1 -23
- package/BookReader/icons/play.svg +1 -22
- package/BookReader/icons/playback-speed.svg +1 -34
- package/BookReader/icons/read-aloud.svg +1 -22
- package/BookReader/icons/review.svg +3 -22
- package/BookReader/icons/slider-toggle.svg +1 -0
- package/BookReader/icons/thumbnails.svg +1 -17
- package/BookReader/icons/voice.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -22
- package/BookReader/images/BRicons.svg +5 -94
- package/BookReader/images/books_graphic.svg +1 -177
- package/BookReader/images/hypothesis.ico +0 -0
- package/BookReader/images/icon_book.svg +1 -12
- package/BookReader/images/icon_bookmark.svg +1 -12
- package/BookReader/images/icon_experiment.svg +1 -0
- package/BookReader/images/icon_gear.svg +1 -14
- package/BookReader/images/icon_hamburger.svg +1 -20
- package/BookReader/images/icon_home.svg +1 -21
- package/BookReader/images/icon_info.svg +1 -11
- package/BookReader/images/icon_one_page.svg +1 -8
- package/BookReader/images/icon_pause.svg +1 -1
- package/BookReader/images/icon_play.svg +1 -1
- package/BookReader/images/icon_playback-rate.svg +1 -15
- package/BookReader/images/icon_search_button.svg +1 -8
- package/BookReader/images/icon_share.svg +1 -9
- package/BookReader/images/icon_skip-ahead.svg +1 -6
- package/BookReader/images/icon_skip-back.svg +2 -13
- package/BookReader/images/icon_speaker.svg +1 -18
- package/BookReader/images/icon_speaker_open.svg +1 -10
- package/BookReader/images/icon_thumbnails.svg +1 -12
- package/BookReader/images/icon_toc.svg +1 -5
- package/BookReader/images/icon_two_pages.svg +1 -9
- package/BookReader/images/marker_chap-off.svg +1 -11
- package/BookReader/images/marker_chap-on.svg +1 -11
- package/BookReader/images/marker_srch-on.svg +1 -11
- package/BookReader/images/translate.svg +1 -0
- package/BookReader/images/unviewable_page.png +0 -0
- package/BookReader/jquery-3.js +2 -0
- package/BookReader/jquery-3.js.LICENSE.txt +24 -0
- package/BookReader/plugins/plugin.archive_analytics.js +1 -172
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -1
- package/BookReader/plugins/plugin.autoplay.js +1 -165
- package/BookReader/plugins/plugin.autoplay.js.map +1 -1
- package/BookReader/plugins/plugin.chapters.js +19 -301
- package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.chapters.js.map +1 -1
- package/BookReader/plugins/plugin.experiments.js +3 -0
- package/BookReader/plugins/plugin.experiments.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.experiments.js.map +1 -0
- package/BookReader/plugins/plugin.iframe.js +1 -74
- package/BookReader/plugins/plugin.iframe.js.map +1 -1
- package/BookReader/plugins/plugin.iiif.js +2 -0
- package/BookReader/plugins/plugin.iiif.js.map +1 -0
- package/BookReader/plugins/plugin.resume.js +1 -368
- package/BookReader/plugins/plugin.resume.js.map +1 -1
- package/BookReader/plugins/plugin.search.js +2 -1420
- package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.search.js.map +1 -1
- package/BookReader/plugins/plugin.text_selection.js +2 -1080
- package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.text_selection.js.map +1 -1
- package/BookReader/plugins/plugin.translate.js +137 -0
- package/BookReader/plugins/plugin.translate.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.translate.js.map +1 -0
- package/BookReader/plugins/plugin.tts.js +2 -9193
- package/BookReader/plugins/plugin.tts.js.LICENSE.txt +2 -0
- package/BookReader/plugins/plugin.tts.js.map +1 -1
- package/BookReader/plugins/plugin.url.js +1 -269
- package/BookReader/plugins/plugin.url.js.map +1 -1
- package/BookReader/plugins/plugin.vendor-fullscreen.js +1 -379
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -1
- package/BookReader/plugins/translator-worker.js +2 -0
- package/BookReader/plugins/translator-worker.js.map +1 -0
- package/BookReader/silence.mp3 +0 -0
- package/BookReader/translator-worker.js +475 -0
- package/BookReader/webcomponents-bundle.js +3 -0
- package/BookReader/webcomponents-bundle.js.LICENSE.txt +9 -0
- package/BookReader/webcomponents-bundle.js.map +1 -0
- package/README.md +14 -3
- package/jsconfig.json +19 -0
- package/package.json +92 -70
- package/src/BookReader/BookModel.js +92 -46
- package/src/BookReader/DragScrollable.js +233 -0
- package/src/BookReader/ImageCache.js +49 -16
- package/src/BookReader/Mode1Up.js +66 -356
- package/src/BookReader/Mode1UpLit.js +392 -0
- package/src/BookReader/Mode2Up.js +87 -1315
- package/src/BookReader/Mode2UpLit.js +788 -0
- package/src/BookReader/ModeAbstract.js +43 -0
- package/src/BookReader/ModeCoordinateSpace.js +29 -0
- package/src/BookReader/ModeSmoothZoom.js +312 -0
- package/src/BookReader/ModeThumb.js +30 -16
- package/src/BookReader/Navbar/Navbar.js +201 -76
- package/src/BookReader/PageContainer.js +120 -23
- package/src/BookReader/ReduceSet.js +3 -3
- package/src/BookReader/Toolbar/Toolbar.js +19 -41
- package/src/BookReader/events.js +3 -3
- package/src/BookReader/options.js +94 -17
- package/src/BookReader/utils/HTMLDimensionsCacher.js +44 -0
- package/src/BookReader/utils/ScrollClassAdder.js +31 -0
- package/src/BookReader/utils/SelectionObserver.js +45 -0
- package/src/BookReader/utils/classes.js +1 -1
- package/src/BookReader/utils.js +141 -13
- package/src/BookReader.js +711 -1241
- package/src/BookReaderPlugin.js +52 -0
- package/src/assets/icons/close-circle-dark.svg +1 -0
- package/src/assets/icons/magnify-minus.svg +3 -7
- package/src/assets/icons/magnify-plus.svg +3 -7
- package/src/assets/icons/slider-toggle.svg +1 -0
- package/src/assets/icons/voice.svg +1 -0
- package/src/assets/images/hypothesis.ico +0 -0
- package/src/assets/images/icon_experiment.svg +1 -0
- package/src/assets/images/translate.svg +1 -0
- package/src/assets/images/unviewable_page.png +0 -0
- package/src/assets/silence.mp3 +0 -0
- package/src/css/BookReader.scss +1 -17
- package/src/css/_BRBookmarks.scss +1 -1
- package/src/css/_BRComponent.scss +1 -1
- package/src/css/_BRicon.scss +8 -2
- package/src/css/_BRmain.scss +33 -27
- package/src/css/_BRnav.scss +74 -70
- package/src/css/_BRpages.scss +171 -42
- package/src/css/_BRsearch.scss +69 -235
- package/src/css/_BRtoolbar.scss +5 -5
- package/src/css/_TextSelection.scss +129 -24
- package/src/css/_colorbox.scss +2 -2
- package/src/css/_controls.scss +24 -7
- package/src/css/_icons.scss +14 -1
- package/src/{BookNavigator/assets → css}/button-base.js +10 -3
- package/src/css/icon_checkmark.js +9 -0
- package/src/css/sharedStyles.js +15 -0
- package/src/ia-bookreader/downloads/downloads-provider.js +81 -0
- package/src/{BookNavigator → ia-bookreader}/downloads/downloads.js +29 -25
- package/src/ia-bookreader/ia-bookreader.js +666 -0
- package/src/ia-bookreader/sharing.js +27 -0
- package/src/ia-bookreader/viewable-files.js +98 -0
- package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments-provider.js +17 -17
- package/src/{BookNavigator → ia-bookreader}/visual-adjustments/visual-adjustments.js +75 -67
- package/src/{BookNavigator → plugins}/bookmarks/bookmark-button.js +4 -3
- package/src/{BookNavigator/assets → plugins/bookmarks}/bookmark-colors.js +1 -1
- package/src/{BookNavigator → plugins}/bookmarks/bookmark-edit.js +44 -32
- package/src/{BookNavigator → plugins}/bookmarks/bookmarks-list.js +48 -49
- package/src/{BookNavigator → plugins}/bookmarks/bookmarks-loginCTA.js +5 -10
- package/src/plugins/bookmarks/bookmarks-provider.js +63 -0
- package/src/{BookNavigator → plugins/bookmarks}/delete-modal-actions.js +1 -1
- package/src/{BookNavigator → plugins}/bookmarks/ia-bookmarks.js +117 -68
- package/src/plugins/plugin.archive_analytics.js +84 -78
- package/src/plugins/plugin.autoplay.js +99 -104
- package/src/plugins/plugin.chapters.js +310 -201
- package/src/plugins/plugin.experiments.js +321 -0
- package/src/plugins/plugin.iframe.js +1 -1
- package/src/plugins/plugin.iiif.js +141 -0
- package/src/plugins/plugin.resume.js +53 -50
- package/src/plugins/plugin.text_selection.js +522 -219
- package/src/plugins/plugin.vendor-fullscreen.js +7 -7
- package/src/plugins/search/plugin.search.js +380 -360
- package/src/{BookNavigator → plugins}/search/search-provider.js +94 -32
- package/src/{BookNavigator → plugins}/search/search-results.js +108 -90
- package/src/plugins/search/utils.js +50 -0
- package/src/plugins/search/view.js +79 -210
- package/src/plugins/translate/TranslationManager.js +164 -0
- package/src/plugins/translate/plugin.translate.js +512 -0
- package/src/plugins/tts/AbstractTTSEngine.js +78 -49
- package/src/plugins/tts/FestivalTTSEngine.js +21 -31
- package/src/plugins/tts/PageChunk.js +33 -21
- package/src/plugins/tts/PageChunkIterator.js +11 -17
- package/src/plugins/tts/WebTTSEngine.js +131 -91
- package/src/plugins/tts/plugin.tts.js +345 -350
- package/src/plugins/tts/utils.js +77 -49
- package/src/plugins/url/UrlPlugin.js +191 -0
- package/src/plugins/{plugin.url.js → url/plugin.url.js} +47 -18
- package/src/util/TextSelectionManager.js +282 -0
- package/src/util/browserSniffing.js +33 -1
- package/src/util/cache.js +20 -0
- package/src/util/docCookies.js +21 -2
- package/src/util/lit.js +15 -0
- package/src/util/strings.js +1 -0
- package/.babelrc +0 -12
- package/.dependabot/config.yml +0 -6
- package/.eslintrc.js +0 -49
- package/.gitattributes +0 -2
- package/.github/ISSUE_TEMPLATE/bug.md +0 -32
- package/.github/ISSUE_TEMPLATE/feature-request.md +0 -30
- package/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -15
- package/.github/workflows/node.js.yml +0 -28
- package/.github/workflows/npm-publish.yml +0 -47
- package/.testcaferc.json +0 -5
- package/BookReader/bookreader-component-bundle.js +0 -14330
- package/BookReader/bookreader-component-bundle.js.LICENSE.txt +0 -38
- package/BookReader/bookreader-component-bundle.js.map +0 -1
- package/BookReader/icons/sort-ascending.svg +0 -1
- package/BookReader/icons/sort-descending.svg +0 -1
- package/BookReader/jquery-1.10.1.js +0 -108
- package/BookReader/jquery-1.10.1.js.LICENSE.txt +0 -24
- package/BookReader/plugins/plugin.menu_toggle.js +0 -369
- package/BookReader/plugins/plugin.menu_toggle.js.map +0 -1
- package/BookReader/plugins/plugin.mobile_nav.js +0 -335
- package/BookReader/plugins/plugin.mobile_nav.js.map +0 -1
- package/BookReaderDemo/BookReaderDemo.css +0 -41
- package/BookReaderDemo/BookReaderJSAdvanced.js +0 -115
- package/BookReaderDemo/BookReaderJSAutoplay.js +0 -56
- package/BookReaderDemo/BookReaderJSSimple.js +0 -55
- package/BookReaderDemo/IIIFBookReader.js +0 -207
- package/BookReaderDemo/assets/v5/Bookreader-logo-cool-grad.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-flat.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-cool-grad.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-hex-flat.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.png +0 -0
- package/BookReaderDemo/assets/v5/Bookreader-logo-lines.svg +0 -1
- package/BookReaderDemo/assets/v5/Bookreader-logo-warm.svg +0 -1
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@1x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-logo-renders@2x.png +0 -0
- package/BookReaderDemo/assets/v5/bookreader-v5-screenshot.png +0 -0
- package/BookReaderDemo/bookreader-template-bundle.js +0 -7178
- package/BookReaderDemo/demo-advanced.html +0 -33
- package/BookReaderDemo/demo-autoplay.html +0 -38
- package/BookReaderDemo/demo-embed-iframe-src.html +0 -84
- package/BookReaderDemo/demo-embed.html +0 -26
- package/BookReaderDemo/demo-fullscreen-mobile.html +0 -36
- package/BookReaderDemo/demo-fullscreen.html +0 -33
- package/BookReaderDemo/demo-iiif.html +0 -34
- package/BookReaderDemo/demo-iiif.js +0 -26
- package/BookReaderDemo/demo-internetarchive.html +0 -74
- package/BookReaderDemo/demo-multiple.html +0 -43
- package/BookReaderDemo/demo-plugin-menu-toggle.html +0 -34
- package/BookReaderDemo/demo-preview-pages.html +0 -1092
- package/BookReaderDemo/demo-simple.html +0 -34
- package/BookReaderDemo/demo-vendor-fullscreen.html +0 -36
- package/BookReaderDemo/immersion-1up.html +0 -64
- package/BookReaderDemo/immersion-mode.html +0 -35
- package/BookReaderDemo/toggle_controls.html +0 -53
- package/BookReaderDemo/view_mode.html +0 -39
- package/BookReaderDemo/viewmode-cycle.html +0 -41
- package/CHANGELOG.md +0 -476
- package/CONTRIBUTING.md +0 -7
- package/codecov.yml +0 -17
- package/index.html +0 -31
- package/karma.conf.js +0 -23
- package/screenshot.png +0 -0
- package/scripts/postversion.js +0 -10
- package/scripts/preversion.js +0 -14
- package/scripts/version.js +0 -26
- package/src/BookNavigator/BookModel.js +0 -14
- package/src/BookNavigator/BookNavigator.js +0 -451
- package/src/BookNavigator/assets/book-loader.js +0 -27
- package/src/BookNavigator/assets/icon_checkmark.js +0 -6
- package/src/BookNavigator/assets/icon_close.js +0 -3
- package/src/BookNavigator/assets/icon_sort_ascending.js +0 -5
- package/src/BookNavigator/assets/icon_sort_descending.js +0 -5
- package/src/BookNavigator/bookmarks/bookmarks-provider.js +0 -53
- package/src/BookNavigator/br-fullscreen-mgr.js +0 -83
- package/src/BookNavigator/downloads/downloads-provider.js +0 -66
- package/src/BookNavigator/search/a-search-result.js +0 -55
- package/src/BookNavigator/volumes/volumes-provider.js +0 -75
- package/src/BookNavigator/volumes/volumes.js +0 -161
- package/src/BookReader/DebugConsole.js +0 -54
- package/src/BookReaderComponent/BookReaderComponent.js +0 -112
- package/src/ItemNavigator/ItemNavigator.js +0 -372
- package/src/ItemNavigator/providers/sharing.js +0 -29
- package/src/assets/icons/sort-ascending.svg +0 -1
- package/src/assets/icons/sort-descending.svg +0 -1
- package/src/css/_MobileNav.scss +0 -194
- package/src/dragscrollable-br.js +0 -261
- package/src/plugins/menu_toggle/plugin.menu_toggle.js +0 -324
- package/src/plugins/plugin.mobile_nav.js +0 -287
- package/tests/BookReader/BookModel.test.js +0 -312
- package/tests/BookReader/BookReaderPublicFunctions.test.js +0 -171
- package/tests/BookReader/DebugConsole.test.js +0 -25
- package/tests/BookReader/ImageCache.test.js +0 -150
- package/tests/BookReader/Mode1Up.test.js +0 -164
- package/tests/BookReader/Mode2Up.test.js +0 -247
- package/tests/BookReader/Navbar/Navbar.test.js +0 -169
- package/tests/BookReader/PageContainer.test.js +0 -115
- package/tests/BookReader/ReduceSet.test.js +0 -38
- package/tests/BookReader/Toolbar/Toolbar.test.js +0 -26
- package/tests/BookReader/utils/classes.test.js +0 -88
- package/tests/BookReader/utils.test.js +0 -109
- package/tests/BookReader.options.test.js +0 -39
- package/tests/BookReader.test.js +0 -301
- package/tests/e2e/README.md +0 -75
- package/tests/e2e/autoplay.test.js +0 -13
- package/tests/e2e/base.test.js +0 -35
- package/tests/e2e/helpers/base.js +0 -258
- package/tests/e2e/helpers/debug.js +0 -13
- package/tests/e2e/helpers/desktopSearch.js +0 -72
- package/tests/e2e/helpers/mobileSearch.js +0 -85
- package/tests/e2e/helpers/mockSearch.js +0 -93
- package/tests/e2e/helpers/rightToLeft.js +0 -29
- package/tests/e2e/ia-production/ia-prod-base.js +0 -17
- package/tests/e2e/models/BookReader.js +0 -11
- package/tests/e2e/models/Navigation.js +0 -56
- package/tests/e2e/rightToLeft.test.js +0 -20
- package/tests/e2e/viewmode.test.js +0 -37
- package/tests/karma/BookNavigator/book-navigator.test.js +0 -132
- package/tests/karma/BookNavigator/bookmarks/bookmark-edit.test.js +0 -133
- package/tests/karma/BookNavigator/bookmarks/bookmarks-list.test.js +0 -222
- package/tests/karma/BookNavigator/search-results.test.js +0 -240
- package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
- package/tests/karma/BookNavigator/volumes.test.js +0 -133
- package/tests/plugins/menu_toggle/plugin.menu_toggle.test.js +0 -68
- package/tests/plugins/plugin.archive_analytics.test.js +0 -23
- package/tests/plugins/plugin.autoplay.test.js +0 -52
- package/tests/plugins/plugin.chapters.test.js +0 -130
- package/tests/plugins/plugin.iframe.test.js +0 -42
- package/tests/plugins/plugin.mobile_nav.test.js +0 -66
- package/tests/plugins/plugin.resume.test.js +0 -98
- package/tests/plugins/plugin.text_selection.test.js +0 -203
- package/tests/plugins/plugin.url.test.js +0 -129
- package/tests/plugins/plugin.vendor-fullscreen.test.js +0 -65
- package/tests/plugins/search/plugin.search.test.js +0 -166
- package/tests/plugins/search/plugin.search.view.test.js +0 -106
- package/tests/plugins/tts/AbstractTTSEngine.test.js +0 -153
- package/tests/plugins/tts/FestivalTTSEngine.test.js +0 -59
- package/tests/plugins/tts/PageChunk.test.js +0 -57
- package/tests/plugins/tts/PageChunkIterator.test.js +0 -179
- package/tests/plugins/tts/WebTTSEngine.test.js +0 -126
- package/tests/plugins/tts/utils.test.js +0 -133
- package/tests/util/browserSniffing.test.js +0 -56
- package/tests/util/docCookies.test.js +0 -15
- package/tests/util/strings.test.js +0 -63
- package/tests/utils.js +0 -42
- package/webpack.config.js +0 -86
|
@@ -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
|
+
"use strict";(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[479],{6098:function(t,e,r){var n=r(9504),o=2147483647,i=/[^\0-\u007E]/,a=/[.\u3002\uFF0E\uFF61]/g,s="Overflow: input needs wider integers to process",u=RangeError,l=n(a.exec),h=Math.floor,c=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?h(t/700):t>>1,t+=h(t/e);t>455;)t=h(t/35),n+=36;return h(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,c(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>h((o-l)/P))throw new u(s);for(l+=(w-a)*P,a=w,r=0;r<t.length;r++){if((n=t[r])<a&&++l>o)throw new 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,c(y(R+U%B))),S=h(U/B),k+=36}d(e,c(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,".")}},706:function(t,e,r){var n=r(350).PROPER,o=r(9039),i=r(7452);t.exports=function(t){return o(function(){return!!i[t]()||"
"!=="
"[t]()||n&&i[t].name!==t})}},3921:function(t,e,r){var n=r(6518),o=r(2652),i=r(4659);n({target:"Object",stat:!0},{fromEntries:function(t){var e={};return o(t,function(t,r){i(e,t,r)},{AS_ENTRIES:!0}),e}})},2762:function(t,e,r){var n=r(6518),o=r(3802).trim;n({target:"String",proto:!0,forced:r(706)("trim")},{trim:function(){return o(this)}})},5806:function(t,e,r){r(7764);var n,o=r(6518),i=r(3724),a=r(7416),s=r(4576),u=r(6080),l=r(9504),h=r(6840),c=r(2106),f=r(679),p=r(9297),d=r(4213),m=r(7916),g=r(7680),v=r(8183).codeAt,y=r(6098),b=r(655),w=r(687),P=r(2812),S=r(8406),k=r(1181),R=k.set,U=k.getterFor("URL"),B=S.URLSearchParams,H=S.getState,L=s.URL,O=s.TypeError,j=s.encodeURIComponent,I=s.parseInt,q=Math.floor,T=Math.pow,A=l("".charAt),F=l(/./.exec),C=l([].join),_=l(1.1.toString),E=l([].pop),M=l([].push),x=l("".replace),z=l([].shift),$=l("".split),N=l("".slice),D=l("".toLowerCase),J=l([].unshift),W="Invalid scheme",Q="Invalid host",G="Invalid port",K=/[a-z]/i,V=/[\d+\-.a-z]/i,X=/\d/,Y=/^0x/i,Z=/^[0-7]+$/,tt=/^\d+$/,et=/^[\da-f]+$/i,rt=/[\0\t\n\r #%/:<>?@[\\\]^|]/,nt=/[\0\t\n\r #/:<>?@[\\\]^|]/,ot=/^[\u0000-\u0020]+/,it=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,at=/[\t\n\r]/g,st=function(t){var e,r,n,o;if("number"==typeof t){for(e=[],r=0;r<4;r++)J(e,t%256),t=q(t/256);return C(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?n:e}(t),r=0;r<8;r++)o&&0===t[r]||(o&&(o=!1),n===r?(e+=r?":":"::",o=!0):(e+=_(t[r],16),r<7&&(e+=":")));return"["+e+"]"}return t},ut={},lt=d({},ut,{" ":1,'"':1,"#":1,"<":1,">":1}),ht=d({},lt,{"'":1}),ct=d({},ut,{" ":1,'"':1,"<":1,">":1,"`":1}),ft=d({},ct,{"#":1,"?":1,"{":1,"}":1,"^":1}),pt=d({},ft,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),dt=function(t,e){var r=v(t,0);return r>=32&&r<127&&!p(e,t)?t:"'"===t&&p(e,t)?"%27":j(t)},mt={ftp:21,file:null,http:80,https:443,ws:80,wss:443},gt=function(t,e){var r;return 2===t.length&&F(K,A(t,0))&&(":"===(r=A(t,1))||!e&&"|"===r)},vt=function(t){var e;return t.length>1&>(N(t,0,2))&&(2===t.length||"/"===(e=A(t,2))||"\\"===e||"?"===e||"#"===e)},yt=function(t){return"."===t||"%2e"===D(t)},bt=function(t){return".."===(t=D(t))||"%2e."===t||".%2e"===t||"%2e%2e"===t},wt={},Pt={},St={},kt={},Rt={},Ut={},Bt={},Ht={},Lt={},Ot={},jt={},It={},qt={},Tt={},At={},Ft={},Ct={},_t={},Et={},Mt={},xt={},zt=function(t,e,r){var n,o,i,a=b(t);if(e){if(o=this.parse(a))throw new O(o);this.searchParams=null}else{if(void 0!==r&&(n=new zt(r,!0)),o=this.parse(a,null,n))throw new O(o);(i=H(new B)).bindURL(this),this.searchParams=i}};zt.prototype={type:"URL",parse:function(t,e,r){var o,i,a,s,u=this,l=e||wt,h=0,c="",f=!1,d=!1,v=!1;for(t=b(t),e||(u.scheme="",u.username="",u.password="",u.host=null,u.port=null,u.path=[],u.query=null,u.fragment=null,u.cannotBeABaseURL=!1,t=x(t,ot,""),t=x(t,it,"$1")),t=x(t,at,""),o=m(t);h<=o.length;){switch(i=o[h],l){case wt:if(!i||!F(K,i)){if(e)return W;l=St;continue}c+=D(i),l=Pt;break;case Pt:if(i&&F(V,i))c+=D(i);else{if(":"!==i){if(e)return W;c="",l=St,h=0;continue}if(e&&(u.isSpecial()!==p(mt,c)||"file"===c&&(u.includesCredentials()||null!==u.port)||"file"===u.scheme&&""===u.host))return;if(u.scheme=c,e)return void(u.isSpecial()&&mt[u.scheme]===u.port&&(u.port=null));c="","file"===u.scheme?l=Tt:u.isSpecial()&&r&&r.scheme===u.scheme?l=kt:u.isSpecial()?l=Ht:"/"===o[h+1]?(l=Rt,h++):(u.cannotBeABaseURL=!0,M(u.path,""),l=Et)}break;case St:if(!r||r.cannotBeABaseURL&&"#"!==i)return W;if(r.cannotBeABaseURL&&"#"===i){u.scheme=r.scheme,u.path=g(r.path),u.query=r.query,u.fragment="",u.cannotBeABaseURL=!0,l=xt;break}l="file"===r.scheme?Tt:Ut;continue;case kt:if("/"!==i||"/"!==o[h+1]){l=Ut;continue}l=Lt,h++;break;case Rt:if("/"===i){l=Ot;break}l=_t;continue;case Ut:if(u.scheme=r.scheme,i===n)u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,u.path=g(r.path),u.query=r.query;else if("/"===i||"\\"===i&&u.isSpecial())l=Bt;else if("?"===i)u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,u.path=g(r.path),u.query="",l=Mt;else{if("#"!==i){u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,u.path=g(r.path),u.path.length&&u.path.length--,l=_t;continue}u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,u.path=g(r.path),u.query=r.query,u.fragment="",l=xt}break;case Bt:if(!u.isSpecial()||"/"!==i&&"\\"!==i){if("/"!==i){u.username=r.username,u.password=r.password,u.host=r.host,u.port=r.port,l=_t;continue}l=Ot}else l=Lt;break;case Ht:if(l=Lt,"/"!==i||"/"!==o[h+1])continue;h++;break;case Lt:if("/"!==i&&"\\"!==i){l=Ot;continue}break;case Ot:if("@"===i){f&&(c="%40"+c),f=!0,a=m(c);for(var y=0;y<a.length;y++){var w=a[y];if(":"!==w||v){var P=dt(w,pt);v?u.password+=P:u.username+=P}else v=!0}c=""}else if(i===n||"/"===i||"?"===i||"#"===i||"\\"===i&&u.isSpecial()){if(f&&""===c)return"Invalid authority";h-=m(c).length+1,c="",l=jt}else c+=i;break;case jt:case It:if(e&&"file"===u.scheme){l=Ft;continue}if(":"!==i||d){if(i===n||"/"===i||"?"===i||"#"===i||"\\"===i&&u.isSpecial()){if(u.isSpecial()&&""===c)return Q;if(e&&""===c&&(u.includesCredentials()||null!==u.port))return;if(s=u.parseHost(c))return s;if(c="",l=Ct,e)return;continue}"["===i?d=!0:"]"===i&&(d=!1),c+=i}else{if(""===c)return Q;if(e===It)return;if(s=u.parseHost(c))return s;c="",l=qt}break;case qt:if(!F(X,i)){if(i===n||"/"===i||"?"===i||"#"===i||"\\"===i&&u.isSpecial()||e){if(""!==c){var S=I(c,10);if(S>65535)return G;u.port=u.isSpecial()&&S===mt[u.scheme]?null:S,c=""}if(e)return;l=Ct;continue}return G}c+=i;break;case Tt:if(u.scheme="file",u.host="","/"===i||"\\"===i)l=At;else{if(!r||"file"!==r.scheme){l=_t;continue}switch(i){case n:u.host=r.host,u.path=g(r.path),u.query=r.query;break;case"?":u.host=r.host,u.path=g(r.path),u.query="",l=Mt;break;case"#":u.host=r.host,u.path=g(r.path),u.query=r.query,u.fragment="",l=xt;break;default:u.host=r.host,vt(C(g(o,h),""))||(u.path=g(r.path),u.shortenPath()),l=_t;continue}}break;case At:if("/"===i||"\\"===i){l=Ft;break}r&&"file"===r.scheme&&(u.host=r.host,!vt(C(g(o,h),""))&>(r.path[0],!0)&&M(u.path,r.path[0])),l=_t;continue;case Ft:if(i===n||"/"===i||"\\"===i||"?"===i||"#"===i){if(!e&>(c))l=_t;else if(""===c){if(u.host="",e)return;l=Ct}else{if(s=u.parseHost(c))return s;if("localhost"===u.host&&(u.host=""),e)return;c="",l=Ct}continue}c+=i;break;case Ct:if(u.isSpecial()){if(l=_t,"/"!==i&&"\\"!==i)continue}else if(e||"?"!==i)if(e||"#"!==i){if(i!==n&&(l=_t,"/"!==i))continue}else u.fragment="",l=xt;else u.query="",l=Mt;break;case _t:if(i===n||"/"===i||"\\"===i&&u.isSpecial()||!e&&("?"===i||"#"===i)){if(bt(c)?(u.shortenPath(),"/"===i||"\\"===i&&u.isSpecial()||M(u.path,"")):yt(c)?"/"===i||"\\"===i&&u.isSpecial()||M(u.path,""):("file"===u.scheme&&!u.path.length&>(c)&&(null!==u.host&&""!==u.host&&(u.host=""),c=A(c,0)+":"),M(u.path,c)),c="","file"===u.scheme&&(i===n||"?"===i||"#"===i))for(;u.path.length>1&&""===u.path[0];)z(u.path);"?"===i?(u.query="",l=Mt):"#"===i&&(u.fragment="",l=xt)}else c+=dt(i,ft);break;case Et:"?"===i?(u.query="",l=Mt):"#"===i?(u.fragment="",l=xt):i!==n&&(u.path[0]+=dt(i,ut));break;case Mt:e||"#"!==i?i!==n&&(u.query+=dt(i,u.isSpecial()?ht:lt)):(u.fragment="",l=xt);break;case xt:i!==n&&(u.fragment+=dt(i,ct))}h++}},parseHost:function(t){var e,r,n;if("["===A(t,0)){if("]"!==A(t,t.length-1))return Q;if(e=function(t){var e,r,n,o,i,a,s,u=[0,0,0,0,0,0,0,0],l=0,h=null,c=0,f=function(){return A(t,c)};if(":"===f()){if(":"!==A(t,1))return;c+=2,h=++l}for(;f();){if(8===l)return;if(":"!==f()){for(e=r=0;r<4&&F(et,f());)e=16*e+I(f(),16),c++,r++;if("."===f()){if(0===r)return;if(c-=r,l>6)return;for(n=0;f();){if(o=null,n>0){if(!("."===f()&&n<4))return;c++}if(!F(X,f()))return;for(;F(X,f());){if(i=I(f(),10),null===o)o=i;else{if(0===o)return;o=10*o+i}if(o>255)return;c++}u[l]=256*u[l]+o,2!==++n&&4!==n||l++}if(4!==n)return;break}if(":"===f()){if(c++,!f())return}else if(f())return;u[l++]=e}else{if(null!==h)return;c++,h=++l}}if(null!==h)for(a=l-h,l=7;0!==l&&a>0;)s=u[l],u[l--]=u[h+a-1],u[h+--a]=s;else if(8!==l)return;return u}(N(t,1,-1)),!e)return Q;this.host=e}else if(this.isSpecial()){if(t=y(t),F(rt,t))return Q;if(function(t){var e,r,n=$(t,".");if(""===n[n.length-1]){if(1===n.length)return!1;n.length--}return e=n[n.length-1],!!F(tt,e)||!!F(Y,e)&&(""===(r=N(e,2))||!!F(et,r))}(t)){if(e=function(t){var e,r,n,o,i,a,s,u=$(t,".");if(u.length&&""===u[u.length-1]&&u.length--,(e=u.length)>4)return null;for(r=[],n=0;n<e;n++){if(""===(o=u[n]))return null;if(i=10,o.length>1&&"0"===A(o,0)&&(i=F(Y,o)?16:8,o=N(o,8===i?1:2)),""===o)a=0;else{if(!F(10===i?tt:8===i?Z:et,o))return null;a=I(o,i)}M(r,a)}for(n=0;n<e;n++)if(a=r[n],n===e-1){if(a>=T(256,5-e))return null}else if(a>255)return null;for(s=E(r),n=0;n<r.length;n++)s+=r[n]*T(256,3-n);return s}(t),null===e)return Q;this.host=e}else this.host=t}else{if(F(nt,t))return Q;for(e="",r=m(t),n=0;n<r.length;n++)e+=dt(r[n],ut);this.host=e}},cannotHaveUsernamePasswordPort:function(){return null===this.host||""===this.host||this.cannotBeABaseURL||"file"===this.scheme},includesCredentials:function(){return""!==this.username||""!==this.password},isSpecial:function(){return p(mt,this.scheme)},shortenPath:function(){var t=this.path,e=t.length;!e||"file"===this.scheme&&1===e&>(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+=st(o),null!==i&&(l+=":"+i)):"file"===e&&(l+="//"),null===o&&!t.cannotBeABaseURL&&a.length>1&&""===a[0]&&(l+="/."),l+=t.cannotBeABaseURL?a[0]:a.length?"/"+C(a,"/"):"",null!==s&&(l+="?"+s),null!==u&&(l+="#"+u),l},setHref:function(t){var e=this.parse(t);if(e)throw new O(e);this.searchParams.update()},getOrigin:function(){var t=this.scheme,e=this.port;if("blob"===t)try{return new $t(this.path[0]).origin}catch(t){return"null"}return"file"!==t&&this.isSpecial()?t+"://"+st(this.host)+(null!==e?":"+e:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(t){this.parse(b(t)+":",wt)},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+=dt(e[r],pt)}},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+=dt(e[r],pt)}},getHost:function(){var t=this.host,e=this.port;return null===t?"":null===e?st(t):st(t)+":"+e},setHost:function(t){this.cannotBeABaseURL||this.parse(t,jt)},getHostname:function(){var t=this.host;return null===t?"":st(t)},setHostname:function(t){this.cannotBeABaseURL||this.parse(t,It)},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,qt))},getPathname:function(){var t=this.path;return this.cannotBeABaseURL?t[0]:t.length?"/"+C(t,"/"):""},setPathname:function(t){this.cannotBeABaseURL||(this.path=[],this.parse(t,Ct))},getSearch:function(){var t=this.query;return t?"?"+t:""},setSearch:function(t){""===(t=b(t))?this.query=null:("?"===A(t,0)&&(t=N(t,1)),this.query="",this.parse(t,Mt)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var t=this.fragment;return t?"#"+t:""},setHash:function(t){""!==(t=b(t))?("#"===A(t,0)&&(t=N(t,1)),this.fragment="",this.parse(t,xt)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var $t=function(t){var e=f(this,Nt),r=P(arguments.length,1)>1?arguments[1]:void 0,n=R(e,new zt(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())},Nt=$t.prototype,Dt=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&&(c(Nt,"href",Dt("serialize","setHref")),c(Nt,"origin",Dt("getOrigin")),c(Nt,"protocol",Dt("getProtocol","setProtocol")),c(Nt,"username",Dt("getUsername","setUsername")),c(Nt,"password",Dt("getPassword","setPassword")),c(Nt,"host",Dt("getHost","setHost")),c(Nt,"hostname",Dt("getHostname","setHostname")),c(Nt,"port",Dt("getPort","setPort")),c(Nt,"pathname",Dt("getPathname","setPathname")),c(Nt,"search",Dt("getSearch","setSearch")),c(Nt,"searchParams",Dt("getSearchParams")),c(Nt,"hash",Dt("getHash","setHash"))),h(Nt,"toJSON",function(){return U(this).serialize()},{enumerable:!0}),h(Nt,"toString",function(){return U(this).serialize()},{enumerable:!0}),L){var Jt=L.createObjectURL,Wt=L.revokeObjectURL;Jt&&h($t,"createObjectURL",u(Jt,L)),Wt&&h($t,"revokeObjectURL",u(Wt,L))}w($t,"URL"),o({global:!0,constructor:!0,forced:!a,sham:!i},{URL:$t})},3296:function(t,e,r){r(5806)},7208:function(t,e,r){var n=r(6518),o=r(9565);n({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return o(URL.prototype.toString,this)}})},5857:function(t,e,r){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=Array(e);r<e;r++)n[r]=t[r];return n}function i(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,a(n.key),n)}}function a(t){var e=function(t){if("object"!=n(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==n(e)?e:e+""}r(2675),r(9463),r(2259),r(5700),r(8706),r(3792),r(2712),r(9572),r(8130),r(3851),r(875),r(6099),r(825),r(888),r(7495),r(7764),r(5440),r(2953),r(8408),r(2008),r(113),r(3418),r(8598),r(2062),r(4782),r(2010),r(5506),r(3921),r(9432),r(8781),r(1761),r(5746),r(2762),r(3500),r(3296),r(7208);var s,u=function(){return t=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},e=[{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=function(t,e){return function(t){if(Array.isArray(t))return t}(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}}(t,e)||function(t,e){if(t){if("string"==typeof t)return o(t,e);var r={}.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}}(t,e)||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.")}()}(t,2),n=r[0],i=r[1];e[n]=i}),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)}}],e&&i(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e}();function l(t){return l="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},l(t)}function h(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,c(n.key),n)}}function c(t){var e=function(t){if("object"!=l(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==l(e)?e:e+""}function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(f=function(){return!!t})()}function p(){return p="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=function(t,e){for(;!{}.hasOwnProperty.call(t,e)&&null!==(t=d(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}},p.apply(null,arguments)}function d(t){return d=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},d(t)}function m(t,e){return m=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},m(t,e)}r(1669).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=(s=BookReader.prototype.setup,function(t){s.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,n=t.paramsFromFragment(e),o=function(){return t.updateFromParams(n)};t.trigger(BookReader.eventNames.stop),t.animating?(null===(r=t.plugins.autoplay)||void 0===r||r.stop(),t.animationFinishedCallback=o):o(),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(/\/+$/,""),h=""===i?"":"/".concat(i),c="".concat(l).concat(h).concat(u);try{window.history.replaceState({},null,c),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 g=function(){function t(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),function(t,e,r){return e=d(e),function(t,e){if(e&&("object"==l(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,f()?Reflect.construct(e,r||[],d(t).constructor):e.apply(t,r))}(this,t,arguments)}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&m(t,e)}(t,BookReader),e=t,r=[{key:"init",value:function(){var e,r,n,o=this;this.options.enableUrlPlugin&&(this.urlPlugin=new u(this.options),this.bind(BookReader.eventNames.PostInit,function(){"hash"===o.options.urlMode&&o.urlPlugin.listenForHashChanges()})),(e=t,r=this,"function"==typeof(n=p(d(1&3?e.prototype:e),"init",r))?function(t){return n.apply(r,t)}:n)([])}}],r&&h(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,r}();window.BookReader=g}},function(t){t(t.s=5857)}]);
|
|
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/./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.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","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/web.url.to-json.js","webpack://@internetarchive/bookreader/./src/plugins/url/UrlPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/url/plugin.url.js"],"sourcesContent":["'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 new $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 new $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","'use strict';\nvar 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","'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://tc39.es/ecma262/#sec-object.fromentries\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 globalThis = require('../internals/global-this');\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');\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 = globalThis.URL;\nvar TypeError = globalThis.TypeError;\nvar encodeURIComponent = globalThis.encodeURIComponent;\nvar parseInt = globalThis.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.1.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;\nvar ALPHANUMERIC_PLUS_MINUS_DOT = /[\\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_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+/;\nvar TRAILING_C0_CONTROL_OR_SPACE = /(^|[^\\u0000-\\u0020])[\\u0000-\\u0020]+$/;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\n// eslint-disable-next-line no-unassigned-vars -- expected `undefined` value\nvar EOF;\n\n// https://url.spec.whatwg.org/#ends-in-a-number-checker\nvar endsInNumber = function (input) {\n var parts = split(input, '.');\n var last, hexPart;\n if (parts[parts.length - 1] === '') {\n if (parts.length === 1) return false;\n parts.length--;\n }\n last = parts[parts.length - 1];\n if (exec(DEC, last)) return true;\n if (exec(HEX_START, last)) {\n hexPart = stringSlice(last, 2);\n return hexPart === '' || !!exec(HEX, hexPart);\n }\n return false;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv4-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 null;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part === '') return null;\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 null;\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 return currLength > maxLength ? currStart : maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n\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 }\n return join(result, '.');\n }\n\n // ipv6\n 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 }\n\n return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar queryPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '#': 1, '<': 1, '>': 1\n});\nvar specialQueryPercentEncodeSet = assign({}, queryPercentEncodeSet, {\n \"'\": 1\n});\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 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 // encodeURIComponent does not encode ', which is in the special-query percent-encode set\n return code >= 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : chr === \"'\" && hasOwn(set, chr) ? '%27' : 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 new 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 new 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_C0_CONTROL_OR_SPACE, '');\n input = replace(input, TRAILING_C0_CONTROL_OR_SPACE, '$1');\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_PLUS_MINUS_DOT, 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 if (url.path.length) 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 !== '/' || codePoints[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 if (stateOverride === HOSTNAME) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\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 url.host = '';\n if (chr === '/' || chr === '\\\\') state = FILE_SLASH;\n else if (base && base.scheme === 'file') {\n switch (chr) {\n case EOF:\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n break;\n case '?':\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n break;\n case '#':\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n break;\n default:\n url.host = base.host;\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\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') {\n url.host = base.host;\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))\n && isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\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 !== null && 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 url.query += percentEncode(chr, url.isSpecial() ? specialQueryPercentEncodeSet : queryPercentEncodeSet);\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 if (endsInNumber(input)) {\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n } else {\n this.host = input;\n }\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return this.host === null || 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 if (host === null && !url.cannotBeABaseURL && path.length > 1 && path[0] === '') 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 new 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(this.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","'use strict';\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url.constructor');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n toJSON: function toJSON() {\n return call(URL.prototype.toString, this);\n }\n});\n","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.js\";\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 this.plugins.autoplay?.stop();\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"],"names":["uncurryThis","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","$RangeError","RangeError","exec","floor","Math","fromCharCode","String","charCodeAt","join","push","replace","split","toLowerCase","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","baseMinusTMin","base","encode","input","output","string","counter","length","value","extra","ucs2decode","i","currentValue","inputLength","n","bias","basicLength","handledCPCount","m","handledCPCountPlusOne","q","t","qMinusT","baseMinusT","module","exports","label","encoded","labels","PROPER_FUNCTION_NAME","fails","whitespaces","METHOD_NAME","name","$","iterate","createProperty","target","stat","fromEntries","iterable","obj","v","AS_ENTRIES","$trim","proto","forced","forcedStringTrimMethod","trim","this","EOF","DESCRIPTORS","USE_NATIVE_URL","globalThis","bind","defineBuiltIn","defineBuiltInAccessor","anInstance","hasOwn","assign","arrayFrom","arraySlice","codeAt","toASCII","$toString","setToStringTag","validateArgumentsLength","URLSearchParamsModule","InternalStateModule","setInternalState","set","getInternalURLState","getterFor","URLSearchParams","getInternalSearchParamsState","getState","NativeURL","URL","TypeError","encodeURIComponent","parseInt","pow","charAt","numberToString","toString","pop","shift","stringSlice","slice","unshift","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC_PLUS_MINUS_DOT","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_C0_CONTROL_OR_SPACE","TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","serializeHost","host","result","index","compress","ignore0","ipv6","maxIndex","maxLength","currStart","currLength","findLongestZeroSequence","C0ControlPercentEncodeSet","queryPercentEncodeSet","specialQueryPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","chr","code","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","normalized","second","startsWithWindowsDriveLetter","third","isSingleDot","segment","isDoubleDot","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","url","isBase","baseState","failure","searchParams","urlString","parse","undefined","bindURL","prototype","type","stateOverride","codePoints","bufferCodePoints","state","pointer","buffer","seenAt","seenBracket","seenPasswordToken","scheme","username","password","port","path","query","fragment","cannotBeABaseURL","isSpecial","includesCredentials","codePoint","encodedCodePoints","parseHost","shortenPath","numbersSeen","ipv4Piece","number","swaps","swap","address","pieceIndex","parseIPv6","last","hexPart","parts","endsInNumber","partsLength","numbers","part","radix","ipv4","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","pathname","getSearch","setSearch","search","getSearchParams","facade","getHash","setHash","hash","that","URLPrototype","arguments","accessorDescriptor","getter","setter","get","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","global","constructor","sham","call","toJSON","super_","UrlPlugin","options","_classCallCheck","bookReaderOptions","urlSchema","position","default","deprecated_for","urlState","urlMode","urlHistoryBasePath","urlLocationPollId","oldLocationHash","oldUserHash","key","_this","pathParams","Object","keys","forEach","_schema","_schema2","_schema3","_schema4","schema","find","schemaKey","append","strPathParams","filter","s","map","concat","strStrippedTrailingSlash","concatenatedPath","urlPath","urlSearchParamsObj","entries","splitUrlMatches","match","urlStrSplitSlashObj","x","doesKeyExists","_object","_key","some","hasPropertyKey","hasDeprecatedKey","urlStateParam","decodeURIComponent","_ref","_ref2","_slicedToArray","pushToAddressBar","urlStrPath","urlStateToUrlString","window","history","replaceState","newUrlPath","e","location","_this2","substr","clearInterval","setInterval","newFragment","urlStringToUrlState","extend","BookReader","defaultOptions","enableUrlPlugin","bookId","defaults","updateWindowTitle","urlTrackedParams","urlTrackIndex0","setup","locationPollId","init","eventNames","PostInit","_this$options","document","title","shortTitle","bookTitle","urlStartLocationPolling","fragmentChange","urlUpdateFragment","maximumCharacters","urlReadFragment","_this2$plugins$autopl","params","paramsFromFragment","updateParams","updateFromParams","trigger","stop","animating","plugins","autoplay","animationFinishedCallback","allParams","paramsFromCurrent","_this$options2","page","reduce","validParams","paramName","fragmentFromParams","currFragment","currQueryString","getLocationSearch","newQueryString","queryStringFromParams","baseWithoutSlash","newFragmentWithSlash","newQueryStringSearch","urlParamsFiltersOnlySearch","readQueryString","has","_this$options3","urlReadHashFragment","BookreaderUrlPlugin","_callSuper","_inherits","_this3","urlPlugin","listenForHashChanges"],"sourceRoot":""}
|