@internetarchive/bookreader 5.0.0-95 → 5.0.0-97
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 +2257 -0
- package/BookReader/BookReader.js +3 -0
- package/BookReader/BookReader.js.LICENSE.txt +72 -0
- package/BookReader/BookReader.js.map +1 -0
- 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 +1782 -0
- package/BookReader/ia-bookreader-bundle.js.LICENSE.txt +7 -0
- package/BookReader/ia-bookreader-bundle.js.map +1 -0
- package/BookReader/icons/1up.svg +1 -0
- package/BookReader/icons/2up.svg +1 -0
- package/BookReader/icons/advance.svg +3 -0
- package/BookReader/icons/chevron-right.svg +1 -0
- package/BookReader/icons/close-circle-dark.svg +1 -0
- package/BookReader/icons/close-circle.svg +1 -0
- package/BookReader/icons/fullscreen.svg +1 -0
- package/BookReader/icons/fullscreen_exit.svg +1 -0
- package/BookReader/icons/hamburger.svg +1 -0
- package/BookReader/icons/left-arrow.svg +1 -0
- package/BookReader/icons/magnify-minus.svg +1 -0
- package/BookReader/icons/magnify-plus.svg +1 -0
- package/BookReader/icons/magnify.svg +1 -0
- package/BookReader/icons/pause.svg +1 -0
- package/BookReader/icons/play.svg +1 -0
- package/BookReader/icons/playback-speed.svg +1 -0
- package/BookReader/icons/read-aloud.svg +1 -0
- package/BookReader/icons/review.svg +3 -0
- package/BookReader/icons/thumbnails.svg +1 -0
- package/BookReader/icons/voice.svg +1 -0
- package/BookReader/icons/volume-full.svg +1 -0
- package/BookReader/images/BRicons.png +0 -0
- package/BookReader/images/BRicons.svg +5 -0
- package/BookReader/images/BRicons_ia.png +0 -0
- package/BookReader/images/back_pages.png +0 -0
- package/BookReader/images/book_bottom_icon.png +0 -0
- package/BookReader/images/book_down_icon.png +0 -0
- package/BookReader/images/book_left_icon.png +0 -0
- package/BookReader/images/book_leftmost_icon.png +0 -0
- package/BookReader/images/book_right_icon.png +0 -0
- package/BookReader/images/book_rightmost_icon.png +0 -0
- package/BookReader/images/book_top_icon.png +0 -0
- package/BookReader/images/book_up_icon.png +0 -0
- package/BookReader/images/books_graphic.svg +1 -0
- package/BookReader/images/booksplit.png +0 -0
- package/BookReader/images/control_pause_icon.png +0 -0
- package/BookReader/images/control_play_icon.png +0 -0
- package/BookReader/images/embed_icon.png +0 -0
- package/BookReader/images/hypothesis.ico +0 -0
- package/BookReader/images/icon-home-ia.png +0 -0
- package/BookReader/images/icon_OL-logo-xs.png +0 -0
- package/BookReader/images/icon_alert-xs.png +0 -0
- package/BookReader/images/icon_book.svg +1 -0
- package/BookReader/images/icon_bookmark.svg +1 -0
- package/BookReader/images/icon_close-pop.png +0 -0
- package/BookReader/images/icon_download.png +0 -0
- package/BookReader/images/icon_experiment.svg +1 -0
- package/BookReader/images/icon_gear.svg +1 -0
- package/BookReader/images/icon_hamburger.svg +1 -0
- package/BookReader/images/icon_home.png +0 -0
- package/BookReader/images/icon_home.svg +1 -0
- package/BookReader/images/icon_home_ia.png +0 -0
- package/BookReader/images/icon_indicator.png +0 -0
- package/BookReader/images/icon_info.svg +1 -0
- package/BookReader/images/icon_one_page.svg +1 -0
- package/BookReader/images/icon_pause.svg +1 -0
- package/BookReader/images/icon_play.svg +1 -0
- package/BookReader/images/icon_playback-rate.svg +1 -0
- package/BookReader/images/icon_return.png +0 -0
- package/BookReader/images/icon_search_button.svg +1 -0
- package/BookReader/images/icon_share.svg +1 -0
- package/BookReader/images/icon_skip-ahead.svg +1 -0
- package/BookReader/images/icon_skip-back.svg +2 -0
- package/BookReader/images/icon_speaker.svg +1 -0
- package/BookReader/images/icon_speaker_open.svg +1 -0
- package/BookReader/images/icon_thumbnails.svg +1 -0
- package/BookReader/images/icon_toc.svg +1 -0
- package/BookReader/images/icon_two_pages.svg +1 -0
- package/BookReader/images/icon_zoomer.png +0 -0
- package/BookReader/images/loading.gif +0 -0
- package/BookReader/images/logo_icon.png +0 -0
- package/BookReader/images/marker_chap-off.png +0 -0
- package/BookReader/images/marker_chap-off.svg +1 -0
- package/BookReader/images/marker_chap-off_ia.png +0 -0
- package/BookReader/images/marker_chap-on.png +0 -0
- package/BookReader/images/marker_chap-on.svg +1 -0
- package/BookReader/images/marker_srch-on.svg +1 -0
- package/BookReader/images/marker_srchchap-off.png +0 -0
- package/BookReader/images/marker_srchchap-on.png +0 -0
- package/BookReader/images/nav_control-dn.png +0 -0
- package/BookReader/images/nav_control-dn_ia.png +0 -0
- package/BookReader/images/nav_control-up.png +0 -0
- package/BookReader/images/nav_control-up_ia.png +0 -0
- package/BookReader/images/nav_control.png +0 -0
- package/BookReader/images/one_page_mode_icon.png +0 -0
- package/BookReader/images/paper-badge.png +0 -0
- package/BookReader/images/print_icon.png +0 -0
- package/BookReader/images/progressbar.gif +0 -0
- package/BookReader/images/right_edges.png +0 -0
- package/BookReader/images/slider.png +0 -0
- package/BookReader/images/slider_ia.png +0 -0
- package/BookReader/images/thumbnail_mode_icon.png +0 -0
- package/BookReader/images/translate.svg +1 -0
- package/BookReader/images/transparent.png +0 -0
- package/BookReader/images/two_page_mode_icon.png +0 -0
- package/BookReader/images/unviewable_page.png +0 -0
- package/BookReader/images/zoom_in_icon.png +0 -0
- package/BookReader/images/zoom_out_icon.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 +2 -0
- package/BookReader/plugins/plugin.archive_analytics.js.map +1 -0
- package/BookReader/plugins/plugin.autoplay.js +2 -0
- package/BookReader/plugins/plugin.autoplay.js.map +1 -0
- package/BookReader/plugins/plugin.chapters.js +26 -0
- package/BookReader/plugins/plugin.chapters.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.chapters.js.map +1 -0
- 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 +2 -0
- package/BookReader/plugins/plugin.iframe.js.map +1 -0
- package/BookReader/plugins/plugin.iiif.js +2 -0
- package/BookReader/plugins/plugin.iiif.js.map +1 -0
- package/BookReader/plugins/plugin.resume.js +2 -0
- package/BookReader/plugins/plugin.resume.js.map +1 -0
- package/BookReader/plugins/plugin.search.js +3 -0
- package/BookReader/plugins/plugin.search.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.search.js.map +1 -0
- package/BookReader/plugins/plugin.text_selection.js +3 -0
- package/BookReader/plugins/plugin.text_selection.js.LICENSE.txt +1 -0
- package/BookReader/plugins/plugin.text_selection.js.map +1 -0
- package/BookReader/plugins/plugin.translate.js +3 -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 +3 -0
- package/BookReader/plugins/plugin.tts.js.LICENSE.txt +29 -0
- package/BookReader/plugins/plugin.tts.js.map +1 -0
- package/BookReader/plugins/plugin.url.js +2 -0
- package/BookReader/plugins/plugin.url.js.map +1 -0
- package/BookReader/plugins/plugin.vendor-fullscreen.js +2 -0
- package/BookReader/plugins/plugin.vendor-fullscreen.js.map +1 -0
- package/BookReader/plugins/translator-worker.js +2 -0
- package/BookReader/plugins/translator-worker.js.map +1 -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/package.json +11 -3
- package/src/BookNavigator/book-navigator.js +1 -0
- package/src/BookReader/BookModel.js +564 -0
- package/src/BookReader/DragScrollable.js +233 -0
- package/src/BookReader/ImageCache.js +149 -0
- package/src/BookReader/Mode1Up.js +110 -0
- package/src/BookReader/Mode1UpLit.js +393 -0
- package/src/BookReader/Mode2Up.js +107 -0
- package/src/BookReader/Mode2UpLit.js +787 -0
- package/src/BookReader/ModeCoordinateSpace.js +29 -0
- package/src/BookReader/ModeSmoothZoom.js +312 -0
- package/src/BookReader/ModeThumb.js +344 -0
- package/src/BookReader/Navbar/Navbar.js +416 -0
- package/src/BookReader/PageContainer.js +172 -0
- package/src/BookReader/ReduceSet.js +26 -0
- package/src/BookReader/Toolbar/Toolbar.js +362 -0
- package/src/BookReader/events.js +19 -0
- package/src/BookReader/options.js +387 -0
- 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 +36 -0
- package/src/BookReader/utils.js +313 -0
- package/src/BookReader.js +22 -139
- package/src/assets/images/icon_experiment.svg +1 -0
- package/src/assets/images/translate.svg +1 -0
- package/src/css/_BRnav.scss +0 -24
- package/src/css/_BRsearch.scss +0 -5
- package/src/css/_TextSelection.scss +32 -1
- package/src/plugins/plugin.experiments.js +34 -9
- package/src/plugins/plugin.text_selection.js +8 -20
- package/src/plugins/translate/TranslationManager.js +167 -0
- package/src/plugins/translate/plugin.translate.js +414 -0
- package/src/plugins/tts/utils.js +9 -20
- package/src/util/cache.js +20 -0
- package/.eslintrc.cjs +0 -51
- 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 -102
- package/.github/workflows/npm-publish.yml +0 -23
- package/.testcaferc.cjs +0 -10
- package/BookReaderDemo/BookReaderDemo.css +0 -40
- package/BookReaderDemo/BookReaderJSAdvanced.js +0 -112
- package/BookReaderDemo/BookReaderJSSimple.js +0 -56
- package/BookReaderDemo/IADemoBr.js +0 -149
- 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/demo-advanced.html +0 -33
- package/BookReaderDemo/demo-embed-iframe-src.html +0 -85
- package/BookReaderDemo/demo-embed.html +0 -26
- package/BookReaderDemo/demo-fullscreen-mobile.html +0 -34
- package/BookReaderDemo/demo-fullscreen.html +0 -31
- package/BookReaderDemo/demo-iiif.html +0 -121
- package/BookReaderDemo/demo-internetarchive.html +0 -271
- package/BookReaderDemo/demo-multiple.html +0 -44
- package/BookReaderDemo/demo-preview-pages.html +0 -1093
- package/BookReaderDemo/demo-simple.html +0 -35
- package/BookReaderDemo/demo-vendor-fullscreen.html +0 -34
- package/BookReaderDemo/ia-multiple-volumes-manifest.js +0 -169
- package/BookReaderDemo/immersion-1up.html +0 -64
- package/BookReaderDemo/immersion-mode.html +0 -33
- package/BookReaderDemo/toggle_controls.html +0 -54
- package/BookReaderDemo/view_mode.html +0 -40
- package/BookReaderDemo/viewmode-cycle.html +0 -40
- package/CHANGELOG.md +0 -1087
- package/CONTRIBUTING.md +0 -7
- package/babel.config.cjs +0 -20
- package/codecov.yml +0 -23
- package/index.html +0 -34
- package/netlify.toml +0 -9
- package/renovate.json +0 -52
- package/screenshot.png +0 -0
- package/scripts/postversion.js +0 -11
- package/scripts/preversion.js +0 -15
- package/scripts/version.js +0 -24
- package/tests/e2e/README.md +0 -112
- package/tests/e2e/autoplay.test.js +0 -16
- package/tests/e2e/base.test.js +0 -27
- package/tests/e2e/helpers/base.js +0 -263
- package/tests/e2e/helpers/debug.js +0 -13
- package/tests/e2e/helpers/mockSearch.js +0 -90
- package/tests/e2e/helpers/params.js +0 -17
- package/tests/e2e/helpers/rightToLeft.js +0 -23
- package/tests/e2e/helpers/search.js +0 -73
- package/tests/e2e/models/BookReader.js +0 -11
- package/tests/e2e/models/Navigation.js +0 -39
- package/tests/e2e/rightToLeft.test.js +0 -19
- package/tests/e2e/viewmode.test.js +0 -44
- package/tests/jest/BookNavigator/book-navigator.test.js +0 -653
- package/tests/jest/BookNavigator/bookmarks/bookmark-button.test.js +0 -43
- package/tests/jest/BookNavigator/bookmarks/bookmark-edit.test.js +0 -132
- package/tests/jest/BookNavigator/bookmarks/bookmarks-list.test.js +0 -221
- package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +0 -45
- package/tests/jest/BookNavigator/downloads/downloads-provider.test.js +0 -67
- package/tests/jest/BookNavigator/downloads/downloads.test.js +0 -53
- package/tests/jest/BookNavigator/search/search-provider.test.js +0 -179
- package/tests/jest/BookNavigator/search/search-results.test.js +0 -289
- package/tests/jest/BookNavigator/sharing/sharing-provider.test.js +0 -49
- package/tests/jest/BookNavigator/viewable-files/viewable-files-provider.test.js +0 -80
- package/tests/jest/BookNavigator/visual-adjustments.test.js +0 -200
- package/tests/jest/BookReader.keyboard.test.js +0 -190
- package/tests/jest/BookReader.options.test.js +0 -47
- package/tests/jest/BookReader.test.js +0 -316
- package/tests/jest/plugins/plugin.archive_analytics.test.js +0 -20
- package/tests/jest/plugins/plugin.autoplay.test.js +0 -35
- package/tests/jest/plugins/plugin.chapters.test.js +0 -193
- package/tests/jest/plugins/plugin.iframe.test.js +0 -42
- package/tests/jest/plugins/plugin.resume.test.js +0 -85
- package/tests/jest/plugins/plugin.text_selection.test.js +0 -447
- package/tests/jest/plugins/plugin.vendor-fullscreen.test.js +0 -65
- package/tests/jest/plugins/search/plugin.search.test.js +0 -120
- package/tests/jest/plugins/search/plugin.search.view.test.js +0 -131
- package/tests/jest/plugins/search/utils.js +0 -25
- package/tests/jest/plugins/search/utils.test.js +0 -29
- package/tests/jest/plugins/tts/AbstractTTSEngine.test.js +0 -173
- package/tests/jest/plugins/tts/FestivalTTSEngine.test.js +0 -59
- package/tests/jest/plugins/tts/PageChunk.test.js +0 -57
- package/tests/jest/plugins/tts/PageChunkIterator.test.js +0 -179
- package/tests/jest/plugins/tts/WebTTSEngine.test.js +0 -178
- package/tests/jest/plugins/tts/utils.test.js +0 -74
- package/tests/jest/plugins/url/UrlPlugin.test.js +0 -198
- package/tests/jest/plugins/url/plugin.url.test.js +0 -168
- package/tests/jest/setup.js +0 -3
- package/tests/jest/util/browserSniffing.test.js +0 -62
- package/tests/jest/util/docCookies.test.js +0 -24
- package/tests/jest/util/strings.test.js +0 -63
- package/tests/jest/utils.js +0 -83
- package/webpack.config.js +0 -97
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[479],{6098:function(t,e,r){var n=r(9504),o=2147483647,a=/[^\0-\u007E]/,i=/[.\u3002\uFF0E\uFF61]/g,s="Overflow: input needs wider integers to process",u=RangeError,l=n(i.exec),c=Math.floor,h=String.fromCharCode,f=n("".charCodeAt),p=n([].join),d=n([].push),m=n("".replace),g=n("".split),v=n("".toLowerCase),y=function(t){return t+22+75*(t<26)},b=function(t,e,r){var n=0;for(t=r?c(t/700):t>>1,t+=c(t/e);t>455;)t=c(t/35),n+=36;return c(n+36*t/(t+38))},w=function(t){var e=[];t=function(t){for(var e=[],r=0,n=t.length;r<n;){var o=f(t,r++);if(o>=55296&&o<=56319&&r<n){var a=f(t,r++);56320==(64512&a)?d(e,((1023&o)<<10)+(1023&a)+65536):(d(e,o),r--)}else d(e,o)}return e}(t);var r,n,a=t.length,i=128,l=0,m=72;for(r=0;r<t.length;r++)(n=t[r])<128&&d(e,h(n));var g=e.length,v=g;for(g&&d(e,"-");v<a;){var w=o;for(r=0;r<t.length;r++)(n=t[r])>=i&&n<w&&(w=n);var P=v+1;if(w-i>c((o-l)/P))throw new u(s);for(l+=(w-i)*P,i=w,r=0;r<t.length;r++){if((n=t[r])<i&&++l>o)throw new u(s);if(n===i){for(var S=l,k=36;;){var R=k<=m?1:k>=m+26?26:k-m;if(S<R)break;var U=S-R,B=36-R;d(e,h(y(R+U%B))),S=c(U/B),k+=36}d(e,h(y(S))),m=b(l,P,v===g),l=0,v++}}l++,i++}return p(e,"")};t.exports=function(t){var e,r,n=[],o=g(m(v(t),i,"."),".");for(e=0;e<o.length;e++)r=o[e],d(n,l(a,r)?"xn--"+w(r):r);return p(n,".")}},706:function(t,e,r){var n=r(350).PROPER,o=r(9039),a=r(7452);t.exports=function(t){return o((function(){return!!a[t]()||"
"!=="
"[t]()||n&&a[t].name!==t}))}},3921:function(t,e,r){var n=r(6518),o=r(2652),a=r(4659);n({target:"Object",stat:!0},{fromEntries:function(t){var e={};return o(t,(function(t,r){a(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),a=r(3724),i=r(7416),s=r(4576),u=r(6080),l=r(9504),c=r(6840),h=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.parseInt,q=Math.floor,I=Math.pow,T=l("".charAt),A=l(/./.exec),F=l([].join),C=l(1..toString),_=l([].pop),E=l([].push),M=l("".replace),x=l([].shift),z=l("".split),$=l("".slice),N=l("".toLowerCase),D=l([].unshift),J="Invalid scheme",W="Invalid host",Q="Invalid port",G=/[a-z]/i,K=/[\d+-.a-z]/i,V=/\d/,X=/^0x/i,Y=/^[0-7]+$/,Z=/^\d+$/,tt=/^[\da-f]+$/i,et=/[\0\t\n\r #%/:<>?@[\\\]^|]/,rt=/[\0\t\n\r #/:<>?@[\\\]^|]/,nt=/^[\u0000-\u0020]+/,ot=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,at=/[\t\n\r]/g,it=function(t){var e,r,n,o;if("number"==typeof t){for(e=[],r=0;r<4;r++)D(e,t%256),t=q(t/256);return F(e,".")}if("object"==typeof t){for(e="",n=function(t){for(var e=null,r=1,n=null,o=0,a=0;a<8;a++)0!==t[a]?(o>r&&(e=n,r=o),n=null,o=0):(null===n&&(n=a),++o);return o>r?n:e}(t),r=0;r<8;r++)o&&0===t[r]||(o&&(o=!1),n===r?(e+=r?":":"::",o=!0):(e+=C(t[r],16),r<7&&(e+=":")));return"["+e+"]"}return t},st={},ut=d({},st,{" ":1,'"':1,"<":1,">":1,"`":1}),lt=d({},ut,{"#":1,"?":1,"{":1,"}":1}),ct=d({},lt,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),ht=function(t,e){var r=v(t,0);return r>32&&r<127&&!p(e,t)?t:encodeURIComponent(t)},ft={ftp:21,file:null,http:80,https:443,ws:80,wss:443},pt=function(t,e){var r;return 2===t.length&&A(G,T(t,0))&&(":"===(r=T(t,1))||!e&&"|"===r)},dt=function(t){var e;return t.length>1&&pt($(t,0,2))&&(2===t.length||"/"===(e=T(t,2))||"\\"===e||"?"===e||"#"===e)},mt=function(t){return"."===t||"%2e"===N(t)},gt={},vt={},yt={},bt={},wt={},Pt={},St={},kt={},Rt={},Ut={},Bt={},Ht={},Lt={},Ot={},jt={},qt={},It={},Tt={},At={},Ft={},Ct={},_t=function(t,e,r){var n,o,a,i=b(t);if(e){if(o=this.parse(i))throw new O(o);this.searchParams=null}else{if(void 0!==r&&(n=new _t(r,!0)),o=this.parse(i,null,n))throw new O(o);(a=H(new B)).bindURL(this),this.searchParams=a}};_t.prototype={type:"URL",parse:function(t,e,r){var o,a,i,s,u,l=this,c=e||gt,h=0,f="",d=!1,v=!1,y=!1;for(t=b(t),e||(l.scheme="",l.username="",l.password="",l.host=null,l.port=null,l.path=[],l.query=null,l.fragment=null,l.cannotBeABaseURL=!1,t=M(t,nt,""),t=M(t,ot,"$1")),t=M(t,at,""),o=m(t);h<=o.length;){switch(a=o[h],c){case gt:if(!a||!A(G,a)){if(e)return J;c=yt;continue}f+=N(a),c=vt;break;case vt:if(a&&(A(K,a)||"+"===a||"-"===a||"."===a))f+=N(a);else{if(":"!==a){if(e)return J;f="",c=yt,h=0;continue}if(e&&(l.isSpecial()!==p(ft,f)||"file"===f&&(l.includesCredentials()||null!==l.port)||"file"===l.scheme&&!l.host))return;if(l.scheme=f,e)return void(l.isSpecial()&&ft[l.scheme]===l.port&&(l.port=null));f="","file"===l.scheme?c=Ot:l.isSpecial()&&r&&r.scheme===l.scheme?c=bt:l.isSpecial()?c=kt:"/"===o[h+1]?(c=wt,h++):(l.cannotBeABaseURL=!0,E(l.path,""),c=At)}break;case yt:if(!r||r.cannotBeABaseURL&&"#"!==a)return J;if(r.cannotBeABaseURL&&"#"===a){l.scheme=r.scheme,l.path=g(r.path),l.query=r.query,l.fragment="",l.cannotBeABaseURL=!0,c=Ct;break}c="file"===r.scheme?Ot:Pt;continue;case bt:if("/"!==a||"/"!==o[h+1]){c=Pt;continue}c=Rt,h++;break;case wt:if("/"===a){c=Ut;break}c=Tt;continue;case Pt:if(l.scheme=r.scheme,a===n)l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=g(r.path),l.query=r.query;else if("/"===a||"\\"===a&&l.isSpecial())c=St;else if("?"===a)l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=g(r.path),l.query="",c=Ft;else{if("#"!==a){l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=g(r.path),l.path.length--,c=Tt;continue}l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=g(r.path),l.query=r.query,l.fragment="",c=Ct}break;case St:if(!l.isSpecial()||"/"!==a&&"\\"!==a){if("/"!==a){l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,c=Tt;continue}c=Ut}else c=Rt;break;case kt:if(c=Rt,"/"!==a||"/"!==T(f,h+1))continue;h++;break;case Rt:if("/"!==a&&"\\"!==a){c=Ut;continue}break;case Ut:if("@"===a){d&&(f="%40"+f),d=!0,i=m(f);for(var w=0;w<i.length;w++){var P=i[w];if(":"!==P||y){var S=ht(P,ct);y?l.password+=S:l.username+=S}else y=!0}f=""}else if(a===n||"/"===a||"?"===a||"#"===a||"\\"===a&&l.isSpecial()){if(d&&""===f)return"Invalid authority";h-=m(f).length+1,f="",c=Bt}else f+=a;break;case Bt:case Ht:if(e&&"file"===l.scheme){c=qt;continue}if(":"!==a||v){if(a===n||"/"===a||"?"===a||"#"===a||"\\"===a&&l.isSpecial()){if(l.isSpecial()&&""===f)return W;if(e&&""===f&&(l.includesCredentials()||null!==l.port))return;if(s=l.parseHost(f))return s;if(f="",c=It,e)return;continue}"["===a?v=!0:"]"===a&&(v=!1),f+=a}else{if(""===f)return W;if(s=l.parseHost(f))return s;if(f="",c=Lt,e===Ht)return}break;case Lt:if(!A(V,a)){if(a===n||"/"===a||"?"===a||"#"===a||"\\"===a&&l.isSpecial()||e){if(""!==f){var k=j(f,10);if(k>65535)return Q;l.port=l.isSpecial()&&k===ft[l.scheme]?null:k,f=""}if(e)return;c=It;continue}return Q}f+=a;break;case Ot:if(l.scheme="file","/"===a||"\\"===a)c=jt;else{if(!r||"file"!==r.scheme){c=Tt;continue}switch(a){case n:l.host=r.host,l.path=g(r.path),l.query=r.query;break;case"?":l.host=r.host,l.path=g(r.path),l.query="",c=Ft;break;case"#":l.host=r.host,l.path=g(r.path),l.query=r.query,l.fragment="",c=Ct;break;default:dt(F(g(o,h),""))||(l.host=r.host,l.path=g(r.path),l.shortenPath()),c=Tt;continue}}break;case jt:if("/"===a||"\\"===a){c=qt;break}r&&"file"===r.scheme&&!dt(F(g(o,h),""))&&(pt(r.path[0],!0)?E(l.path,r.path[0]):l.host=r.host),c=Tt;continue;case qt:if(a===n||"/"===a||"\\"===a||"?"===a||"#"===a){if(!e&&pt(f))c=Tt;else if(""===f){if(l.host="",e)return;c=It}else{if(s=l.parseHost(f))return s;if("localhost"===l.host&&(l.host=""),e)return;f="",c=It}continue}f+=a;break;case It:if(l.isSpecial()){if(c=Tt,"/"!==a&&"\\"!==a)continue}else if(e||"?"!==a)if(e||"#"!==a){if(a!==n&&(c=Tt,"/"!==a))continue}else l.fragment="",c=Ct;else l.query="",c=Ft;break;case Tt:if(a===n||"/"===a||"\\"===a&&l.isSpecial()||!e&&("?"===a||"#"===a)){if(".."===(u=N(u=f))||"%2e."===u||".%2e"===u||"%2e%2e"===u?(l.shortenPath(),"/"===a||"\\"===a&&l.isSpecial()||E(l.path,"")):mt(f)?"/"===a||"\\"===a&&l.isSpecial()||E(l.path,""):("file"===l.scheme&&!l.path.length&&pt(f)&&(l.host&&(l.host=""),f=T(f,0)+":"),E(l.path,f)),f="","file"===l.scheme&&(a===n||"?"===a||"#"===a))for(;l.path.length>1&&""===l.path[0];)x(l.path);"?"===a?(l.query="",c=Ft):"#"===a&&(l.fragment="",c=Ct)}else f+=ht(a,lt);break;case At:"?"===a?(l.query="",c=Ft):"#"===a?(l.fragment="",c=Ct):a!==n&&(l.path[0]+=ht(a,st));break;case Ft:e||"#"!==a?a!==n&&("'"===a&&l.isSpecial()?l.query+="%27":l.query+="#"===a?"%23":ht(a,st)):(l.fragment="",c=Ct);break;case Ct:a!==n&&(l.fragment+=ht(a,ut))}h++}},parseHost:function(t){var e,r,n;if("["===T(t,0)){if("]"!==T(t,t.length-1))return W;if(e=function(t){var e,r,n,o,a,i,s,u=[0,0,0,0,0,0,0,0],l=0,c=null,h=0,f=function(){return T(t,h)};if(":"===f()){if(":"!==T(t,1))return;h+=2,c=++l}for(;f();){if(8===l)return;if(":"!==f()){for(e=r=0;r<4&&A(tt,f());)e=16*e+j(f(),16),h++,r++;if("."===f()){if(0===r)return;if(h-=r,l>6)return;for(n=0;f();){if(o=null,n>0){if(!("."===f()&&n<4))return;h++}if(!A(V,f()))return;for(;A(V,f());){if(a=j(f(),10),null===o)o=a;else{if(0===o)return;o=10*o+a}if(o>255)return;h++}u[l]=256*u[l]+o,2!=++n&&4!==n||l++}if(4!==n)return;break}if(":"===f()){if(h++,!f())return}else if(f())return;u[l++]=e}else{if(null!==c)return;h++,c=++l}}if(null!==c)for(i=l-c,l=7;0!==l&&i>0;)s=u[l],u[l--]=u[c+i-1],u[c+--i]=s;else if(8!==l)return;return u}($(t,1,-1)),!e)return W;this.host=e}else if(this.isSpecial()){if(t=y(t),A(et,t))return W;if(e=function(t){var e,r,n,o,a,i,s,u=z(t,".");if(u.length&&""===u[u.length-1]&&u.length--,(e=u.length)>4)return t;for(r=[],n=0;n<e;n++){if(""===(o=u[n]))return t;if(a=10,o.length>1&&"0"===T(o,0)&&(a=A(X,o)?16:8,o=$(o,8===a?1:2)),""===o)i=0;else{if(!A(10===a?Z:8===a?Y:tt,o))return t;i=j(o,a)}E(r,i)}for(n=0;n<e;n++)if(i=r[n],n===e-1){if(i>=I(256,5-e))return null}else if(i>255)return null;for(s=_(r),n=0;n<r.length;n++)s+=r[n]*I(256,3-n);return s}(t),null===e)return W;this.host=e}else{if(A(rt,t))return W;for(e="",r=m(t),n=0;n<r.length;n++)e+=ht(r[n],st);this.host=e}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"===this.scheme},includesCredentials:function(){return""!==this.username||""!==this.password},isSpecial:function(){return p(ft,this.scheme)},shortenPath:function(){var t=this.path,e=t.length;!e||"file"===this.scheme&&1===e&&pt(t[0],!0)||t.length--},serialize:function(){var t=this,e=t.scheme,r=t.username,n=t.password,o=t.host,a=t.port,i=t.path,s=t.query,u=t.fragment,l=e+":";return null!==o?(l+="//",t.includesCredentials()&&(l+=r+(n?":"+n:"")+"@"),l+=it(o),null!==a&&(l+=":"+a)):"file"===e&&(l+="//"),l+=t.cannotBeABaseURL?i[0]:i.length?"/"+F(i,"/"):"",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 Et(t.path[0]).origin}catch(t){return"null"}return"file"!==t&&this.isSpecial()?t+"://"+it(this.host)+(null!==e?":"+e:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(t){this.parse(b(t)+":",gt)},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+=ht(e[r],ct)}},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+=ht(e[r],ct)}},getHost:function(){var t=this.host,e=this.port;return null===t?"":null===e?it(t):it(t)+":"+e},setHost:function(t){this.cannotBeABaseURL||this.parse(t,Bt)},getHostname:function(){var t=this.host;return null===t?"":it(t)},setHostname:function(t){this.cannotBeABaseURL||this.parse(t,Ht)},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,Lt))},getPathname:function(){var t=this.path;return this.cannotBeABaseURL?t[0]:t.length?"/"+F(t,"/"):""},setPathname:function(t){this.cannotBeABaseURL||(this.path=[],this.parse(t,It))},getSearch:function(){var t=this.query;return t?"?"+t:""},setSearch:function(t){""===(t=b(t))?this.query=null:("?"===T(t,0)&&(t=$(t,1)),this.query="",this.parse(t,Ft)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var t=this.fragment;return t?"#"+t:""},setHash:function(t){""!==(t=b(t))?("#"===T(t,0)&&(t=$(t,1)),this.fragment="",this.parse(t,Ct)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var Et=function(t){var e=f(this,Mt),r=P(arguments.length,1)>1?arguments[1]:void 0,n=R(e,new _t(t,!1,r));a||(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())},Mt=Et.prototype,xt=function(t,e){return{get:function(){return U(this)[t]()},set:e&&function(t){return U(this)[e](t)},configurable:!0,enumerable:!0}};if(a&&(h(Mt,"href",xt("serialize","setHref")),h(Mt,"origin",xt("getOrigin")),h(Mt,"protocol",xt("getProtocol","setProtocol")),h(Mt,"username",xt("getUsername","setUsername")),h(Mt,"password",xt("getPassword","setPassword")),h(Mt,"host",xt("getHost","setHost")),h(Mt,"hostname",xt("getHostname","setHostname")),h(Mt,"port",xt("getPort","setPort")),h(Mt,"pathname",xt("getPathname","setPathname")),h(Mt,"search",xt("getSearch","setSearch")),h(Mt,"searchParams",xt("getSearchParams")),h(Mt,"hash",xt("getHash","setHash"))),c(Mt,"toJSON",(function(){return U(this).serialize()}),{enumerable:!0}),c(Mt,"toString",(function(){return U(this).serialize()}),{enumerable:!0}),L){var zt=L.createObjectURL,$t=L.revokeObjectURL;zt&&c(Et,"createObjectURL",u(zt,L)),$t&&c(Et,"revokeObjectURL",u($t,L))}w(Et,"URL"),o({global:!0,constructor:!0,forced:!i,sham:!a},{URL:Et})},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 a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,i(n.key),n)}}function i(t){var e=function(t,e){if("object"!=n(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,"string");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(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 a,i,s,u,l=e.urlSchema.find((function(t){return t.name===o}));null!==(a=l)&&void 0!==a&&a.deprecated_for&&(l=e.urlSchema.find((function(t){return t.name===l.deprecated_for}))),"path"==(null===(i=l)||void 0===i?void 0:i.position)?n[null===(s=l)||void 0===s?void 0:s.name]=t[o]:r.append((null===(u=l)||void 0===u?void 0:u.name)||o,t[o])}));var o=this.urlSchema.filter((function(t){return"path"==t.position})).map((function(t){return n[t.name]?"".concat(t.name,"/").concat(encodeURIComponent(n[t.name])):""})).join("/"),a="".concat(o.replace(/\/+/g,"/").replace(/\/+$/,"")),i="".concat(a,"?").concat(r.toString());return r.toString()?i:"".concat(a)}},{key:"urlStringToUrlState",value:function(t){var e={},r=new URL(t,"http://example.com"),n=Object.fromEntries(r.searchParams.entries()),a=r.pathname.match(/[^\\/]+\/[^\\/]+/g),i=a?Object.fromEntries(a.map((function(t){return t.split("/")}))):{},s=function(t,e){return Object.keys(t).some((function(t){return t==e}))};return this.urlSchema.filter((function(t){return"path"==t.position})).forEach((function(t){var r=s(i,t.name),n=s(t,"deprecated_for")&&r;if(r||n){var o=n?t.deprecated_for:t.name;e[o]=decodeURIComponent(i[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,a,i,s=[],u=!0,l=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.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&&(i=r.return(),Object(i)!==i))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],a=r[1];e[n]=a})),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&&a(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 c(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,h(n.key),n)}}function h(t){var e=function(t,e){if("object"!=l(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!=l(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==l(e)?e:e+""}function f(t,e,r){return e=m(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,p()?Reflect.construct(e,r||[],m(t).constructor):e.apply(t,r))}function p(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(p=function(){return!!t})()}function d(){return d="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=function(t,e){for(;!{}.hasOwnProperty.call(t,e)&&null!==(t=m(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}},d.apply(null,arguments)}function m(t){return m=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},m(t)}function g(t,e){return g=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},g(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}),{}),a=this.fragmentFromParams(o,this.options.urlMode),i=this.urlReadFragment(),s=this.getLocationSearch(),u=this.queryStringFromParams(o,s,this.options.urlMode);if(i!==a||s!==u){if("history"===this.options.urlMode)if(window.history&&window.history.replaceState){var l=this.options.urlHistoryBasePath.replace(/\/+$/,""),c=""===a?"":"/".concat(a),h="".concat(l).concat(c).concat(u);try{window.history.replaceState({},null,h),this.oldLocationHash=a+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("#"+a+f),this.oldLocationHash=a+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 v=function(t){function e(){return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),f(this,e,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&&g(t,e)}(e,BookReader),r=e,n=[{key:"init",value:function(){var t,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()}))),(t=e,r=this,"function"==typeof(n=d(m(1&3?t.prototype:t),"init",r))?function(t){return n.apply(r,t)}:n)([])}}],n&&c(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}();window.BookReader=v}},function(t){t(t.s=5857)}]);
|
|
2
|
+
//# sourceMappingURL=plugin.url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/url-constructor-detection');\nvar 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 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.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_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 */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] === '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part === '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) === '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix === 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix === 10 ? DEC : radix === 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index === partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() === ':') {\n if (charAt(input, 1) !== ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex === 8) return;\n if (chr() === ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() === '.') {\n if (length === 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() === '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece === 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen === 2 || numbersSeen === 4) pieceIndex++;\n }\n if (numbersSeen !== 4) return;\n break;\n } else if (chr() === ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex !== 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex !== 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n 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 fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length === 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) === ':' || (!normalized && second === '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length === 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw 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, chr) || chr === '+' || chr === '-' || chr === '.')) {\n buffer += toLowerCase(chr);\n } else if (chr === ':') {\n if (stateOverride && (\n (url.isSpecial() !== hasOwn(specialSchemes, buffer)) ||\n (buffer === 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme === 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] === url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme === 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme === url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] === '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr !== '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr === '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme === 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr === '/' && codePoints[pointer + 1] === '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr === '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr === EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr === '/' || (chr === '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr === '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr === '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr === '/' || chr === '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr === '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr !== '/' || charAt(buffer, pointer + 1) !== '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr !== '/' && chr !== '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr === '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint === ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr === EOF || chr === '/' || chr === '?' || chr === '#' ||\n (chr === '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer === '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme === 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr === ':' && !seenBracket) {\n if (buffer === '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride === HOSTNAME) return;\n } else if (\n chr === EOF || chr === '/' || chr === '?' || chr === '#' ||\n (chr === '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer === '') return INVALID_HOST;\n if (stateOverride && buffer === '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr === '[') seenBracket = true;\n else if (chr === ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr === EOF || chr === '/' || chr === '?' || chr === '#' ||\n (chr === '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer !== '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr === '/' || chr === '\\\\') state = FILE_SLASH;\n else if (base && base.scheme === 'file') {\n 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 if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr === '/' || chr === '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme === 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr === EOF || chr === '/' || chr === '\\\\' || chr === '?' || chr === '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer === '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host === 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr !== '/' && chr !== '\\\\') continue;\n } else if (!stateOverride && chr === '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr === '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr !== EOF) {\n state = PATH;\n if (chr !== '/') continue;\n } break;\n\n case PATH:\n if (\n chr === EOF || chr === '/' ||\n (chr === '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr === '?' || chr === '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr !== '/' && !(chr === '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr !== '/' && !(chr === '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme === 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme === 'file' && (chr === EOF || chr === '?' || chr === '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr === '?') {\n url.query = '';\n state = QUERY;\n } else if (chr === '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr === '?') {\n url.query = '';\n state = QUERY;\n } else if (chr === '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr !== EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr === '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr !== EOF) {\n if (chr === \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr === '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr !== EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) === '[') {\n if (charAt(input, input.length - 1) !== ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme === 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username !== '' || this.password !== '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme !== 'file' || pathSize !== 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme === 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw 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(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme === 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port === '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search === '') {\n this.query = null;\n } else {\n if (charAt(search, 0) === '?') search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash === '') {\n this.fragment = null;\n return;\n }\n if (charAt(hash, 0) === '#') hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\ndefineBuiltIn(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\ndefineBuiltIn(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","'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","parseInt","pow","charAt","numberToString","toString","pop","shift","stringSlice","slice","unshift","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_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","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","chr","code","encodeURIComponent","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","normalized","second","startsWithWindowsDriveLetter","third","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","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","partsLength","numbers","part","radix","ipv4","parts","parseIPv4","cannotHaveUsernamePasswordPort","pathSize","serialize","setHref","href","update","getOrigin","URLConstructor","origin","error","getProtocol","setProtocol","protocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","hostname","getPort","setPort","getPathname","setPathname","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","_BookReader","_callSuper","_inherits","_this3","urlPlugin","listenForHashChanges"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_internetarchive_bookreader=self.webpackChunk_internetarchive_bookreader||[]).push([[466],{706:function(e,t,n){var o=n(350).PROPER,r=n(9039),i=n(7452);e.exports=function(e){return r((function(){return!!i[e]()||"
"!=="
"[e]()||o&&i[e].name!==e}))}},2762:function(e,t,n){var o=n(6518),r=n(3802).trim;o({target:"String",proto:!0,forced:n(706)("trim")},{trim:function(){return r(this)}})},4976:function(e,t,n){n(8598),n(2762);var o,r=n(1669),i=n(1669);if(!m()){var l=".bookreader_vendor-fullscreen";r.extend(BookReader.defaultOptions,{enableVendorFullscreenPlugin:!0}),BookReader.prototype.setup=(o=BookReader.prototype.setup,function(e){o.call(this,e),this.isVendorFullscreenActive=!1}),BookReader.prototype.getInitialMode=function(e){return function(t){var n=e.call(this,t);return this.isVendorFullscreenActive&&(n=this.constMode1up),n}}(BookReader.prototype.getInitialMode),BookReader.prototype.init=function(e){return function(){e.call(this),d()&&p(this,(function(e){e.data.resize(),e.data.updateBrClasses();var t=i("#cboxOverlay"),n=i("#colorbox");s()?i(u()).append(t).append(n):i(document.body).append(t).append(n)}))}}(BookReader.prototype.init),BookReader.prototype.enterFullWindow=function(){var e=this;this.refs.$brContainer.css("opacity",0),i(window).width()<=this.onePageMinBreakpoint&&this.switchMode(this.constMode1up),this.isVendorFullscreenActive=!0,this.updateBrClasses(),this.resize(),this.jumpToIndex(this.currentIndex()),this.refs.$brContainer.animate({opacity:1},400,"linear"),i(document).on("keyup.".concat(l),(function(t){27===t.keyCode&&e.exitFullScreen()}))},BookReader.prototype.exitFullWindow=function(){this.refs.$brContainer.css("opacity",0),i(document).off("keyup"+l),this.isFullscreenActive=!1,this.updateBrClasses(),this.resize(),this.refs.$brContainer.animate({opacity:1},400,"linear")},BookReader.prototype.isFullscreen=function(){return s()||this.isVendorFullscreenActive},BookReader.prototype.toggleFullscreen=function(){this.isFullscreen()?d()?c():this.exitFullWindow():d()?a(this.refs.$br[0]):this.enterFullWindow()},BookReader.util.isMobile=m,BookReader.util.getFullscreenElement=u,BookReader.util.bindFullscreenChangeListener=p,BookReader.util.fullscreenAllowed=d,BookReader.util.requestFullscreen=a,BookReader.util.exitFullscreen=c,BookReader.util.isFullscreenActive=s}function u(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement}function s(){return null!=u()}function c(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen()}function a(e){e.requestFullscreen?e.requestFullscreen():e.webkitRequestFullscreen?e.webkitRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.msRequestFullscreen&&e.msRequestFullscreen()}function d(){return document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullScreenEnabled}function p(e,t){var n="fullscreenchange ",o=(n+["webkit","moz","ms"].join(n)+n).trim();i(document).on(o,e,t)}function m(){return void 0!==window.orientation||-1!==navigator.userAgent.indexOf("IEMobile")}}},function(e){e(e.s=4976)}]);
|
|
2
|
+
//# sourceMappingURL=plugin.vendor-fullscreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/plugin.vendor-fullscreen.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./node_modules/core-js/internals/string-trim-forced.js","webpack://@internetarchive/bookreader/./node_modules/core-js/modules/es.string.trim.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.vendor-fullscreen.js"],"sourcesContent":["'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 $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","/* global BookReader */\n\n/**\n * Toggles browser's native fullscreen mode if available device is not mobile\n */\nif (!isMobile()) {\n const EVENT_NAMESPACE = '.bookreader_vendor-fullscreen';\n\n jQuery.extend(BookReader.defaultOptions, {\n /** @type {boolean} */\n enableVendorFullscreenPlugin: true,\n });\n\n /** @override */\n BookReader.prototype.setup = (function(super_) {\n return function(options) {\n super_.call(this, options);\n\n this.isVendorFullscreenActive = false;\n };\n })(BookReader.prototype.setup);\n\n /** @override */\n BookReader.prototype.getInitialMode = (function(super_) {\n return function(params) {\n let nextMode = super_.call(this, params);\n if (this.isVendorFullscreenActive) {\n nextMode = this.constMode1up;\n }\n return nextMode;\n };\n })(BookReader.prototype.getInitialMode);\n\n /** @override */\n BookReader.prototype.init = (function(super_) {\n return function() {\n super_.call(this);\n\n if (!fullscreenAllowed()) {\n return;\n }\n // In fullscreen mode the colorbox and overlay need to be inside the fullscreen element to display properly.\n bindFullscreenChangeListener(this, (e) => {\n e.data.resize();\n e.data.updateBrClasses();\n const cboxOverlay = $('#cboxOverlay');\n const cbox = $('#colorbox');\n if (isFullscreenActive()) {\n // In full screen mode, the colorbox and overlay need\n // to be children of the fullscreen element to display properly.\n const $fullscreen = $(getFullscreenElement());\n $fullscreen.append(cboxOverlay).append(cbox);\n } else {\n // In non-fullscreen mode, the colorbox and overlay need\n // to be children of the main document body.\n $(document.body).append(cboxOverlay).append(cbox);\n }\n });\n };\n })(BookReader.prototype.init);\n\n /**\n * Start fullscreen mode\n */\n BookReader.prototype.enterFullWindow = function() {\n this.refs.$brContainer.css('opacity', 0);\n\n const windowWidth = $(window).width();\n if (windowWidth <= this.onePageMinBreakpoint) {\n this.switchMode(this.constMode1up);\n }\n\n this.isVendorFullscreenActive = true;\n this.updateBrClasses();\n\n this.resize();\n this.jumpToIndex(this.currentIndex());\n\n this.refs.$brContainer.animate({ opacity: 1 }, 400, 'linear');\n\n $(document).on(`keyup.${EVENT_NAMESPACE}`, e => {\n if (e.keyCode === 27) this.exitFullScreen();\n });\n };\n\n /**\n * Exit from fullscreen mode\n */\n BookReader.prototype.exitFullWindow = function() {\n this.refs.$brContainer.css('opacity', 0);\n\n $(document).off('keyup' + EVENT_NAMESPACE);\n\n this.isFullscreenActive = false;\n this.updateBrClasses();\n\n this.resize();\n this.refs.$brContainer.animate({ opacity: 1 }, 400, 'linear');\n };\n\n /**\n * Returns true if fullscreen mode is enabled\n *\n * @returns {boolean}\n */\n BookReader.prototype.isFullscreen = function() {\n return isFullscreenActive() || this.isVendorFullscreenActive;\n };\n\n /**\n * Toggle screen\n */\n BookReader.prototype.toggleFullscreen = function() {\n if (this.isFullscreen()) {\n if (fullscreenAllowed()) {\n exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n } else {\n if (fullscreenAllowed()) {\n requestFullscreen(this.refs.$br[0]);\n } else {\n this.enterFullWindow();\n }\n }\n };\n\n /** @deprecated */\n BookReader.util.isMobile = isMobile;\n\n /** @deprecated */\n BookReader.util.getFullscreenElement = getFullscreenElement;\n\n /** @deprecated */\n BookReader.util.bindFullscreenChangeListener = bindFullscreenChangeListener;\n\n /** @deprecated */\n BookReader.util.fullscreenAllowed = fullscreenAllowed;\n\n /** @deprecated */\n BookReader.util.requestFullscreen = requestFullscreen;\n\n /** @deprecated */\n BookReader.util.exitFullscreen = exitFullscreen;\n\n /** @deprecated */\n BookReader.util.isFullscreenActive = isFullscreenActive;\n}\n\n\n/**\n * Returns the DOM element being used for fullscreen.\n *\n * @returns {HTMLElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/fullscreenElement\n */\nexport function getFullscreenElement() {\n return document.fullscreenElement ||\n document.webkitFullscreenElement ||\n document.mozFullScreenElement ||\n document.msFullscreenElement;\n}\n\n/**\n * Returns true if the document is in fullscreen mode.\n *\n * @returns {boolean}\n */\nexport function isFullscreenActive() {\n const fullscreenElement = getFullscreenElement();\n return fullscreenElement !== null && fullscreenElement !== undefined;\n}\n\n/**\n * Exits fullscreen mode.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/exitFullscreen\n */\nexport function exitFullscreen() {\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n }\n}\n\n/**\n * Requests fullscreen mode for the given element\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullscreen\n */\nexport function requestFullscreen(element) {\n if (element.requestFullscreen) {\n element.requestFullscreen();\n } else if (element.webkitRequestFullscreen) {\n element.webkitRequestFullscreen();\n } else if (element.mozRequestFullScreen) {\n element.mozRequestFullScreen();\n } else if (element.msRequestFullscreen) {\n element.msRequestFullscreen();\n }\n}\n\n/**\n * Returns true if fullscreen mode is allowed on this device and document.\n *\n * @returns {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreenEnabled\n */\nexport function fullscreenAllowed() {\n return (document.fullscreenEnabled ||\n document.webkitFullscreenEnabled ||\n document.mozFullScreenEnabled ||\n document.msFullScreenEnabled);\n}\n\n/**\n * jQuery-style binding to a fullscreenchange event.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/fullscreenchange_event\n */\nexport function bindFullscreenChangeListener(\n data, fullscreenchangeListener,\n) {\n const event = 'fullscreenchange ';\n const vendor_prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n const all_events = (event + vendor_prefixes.join(event) + event).trim();\n $(document).on(all_events, data, fullscreenchangeListener);\n}\n\n/**\n * Returns true if current device is mobile\n *\n * @returns {boolean}\n */\nexport function isMobile() {\n return (typeof window.orientation !== 'undefined') || (navigator.userAgent.indexOf('IEMobile') !== -1);\n}\n"],"names":["PROPER_FUNCTION_NAME","fails","whitespaces","module","exports","METHOD_NAME","name","$","$trim","target","proto","forced","forcedStringTrimMethod","trim","this","super_","isMobile","EVENT_NAMESPACE","jQuery","extend","BookReader","defaultOptions","enableVendorFullscreenPlugin","prototype","setup","options","call","isVendorFullscreenActive","getInitialMode","params","nextMode","constMode1up","init","fullscreenAllowed","bindFullscreenChangeListener","e","data","resize","updateBrClasses","cboxOverlay","cbox","isFullscreenActive","getFullscreenElement","append","document","body","enterFullWindow","_this","refs","$brContainer","css","window","width","onePageMinBreakpoint","switchMode","jumpToIndex","currentIndex","animate","opacity","on","concat","keyCode","exitFullScreen","exitFullWindow","off","isFullscreen","toggleFullscreen","exitFullscreen","requestFullscreen","$br","util","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","webkitExitFullscreen","mozCancelFullScreen","msExitFullscreen","element","webkitRequestFullscreen","mozRequestFullScreen","msRequestFullscreen","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullScreenEnabled","fullscreenchangeListener","event","all_events","join","orientation","navigator","userAgent","indexOf"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(){"use strict";var e={};"undefined"==typeof self&&(global.Module=e,global.self=new class{#e;constructor(){const{parentPort:e}=require("node:worker_threads");this.#e=e}addEventListener(e,t){this.#e.on(e,(e=>t({data:e})))}postMessage(e){this.#e.postMessage(e)}importScripts(...e){const{readFileSync:t}=require("node:fs"),{join:n}=require("node:path");for(let r of e){const e=t(n(__dirname,r),{encoding:"utf-8"});eval.call(global,e)}}async fetch(e,t){if("file:"===e.protocol){const{readFile:t}=require("node:fs/promises"),n=await t(e.pathname),r=new Blob([n]);return new Response(r,{status:200,statusText:"OK",headers:{"Content-Type":"application/wasm","Content-Length":r.size.toString()}})}return await fetch(e,t)}get location(){return new URL(`file://${__filename}`)}});class t{static parse(e){const t={};return e.split("\n").reduce(((e,n,r)=>{let s;if(s=n.match(/^\s*-\s+(.+?)$/))Array.isArray(t[e])||(t[e]=t[e].trim()?[t[e]]:[]),t[e].push(s[1].trim());else if(s=n.match(/^\s*([A-Za-z0-9_][A-Za-z0-9_-]*):\s*(.*)$/))e=s[1],t[e]=s[2].trim();else if(n.trim())throw Error(`Could not parse line ${r+1}: "${n}"`);return e}),null),t}static stringify(e){return Object.entries(e).reduce(((e,[t,n])=>{let r="";return r=Array.isArray(n)?n.map((e=>`\n - ${e}`)).join(""):("number"==typeof n||"boolean"==typeof n||n.match(/^\d*(\.\d+)?$/),`${n}`),`${e}${t}: ${r}\n`}),"")}}class n{static GEMM_TO_FALLBACK_FUNCTIONS_MAP={int8_prepare_a:"int8PrepareAFallback",int8_prepare_b:"int8PrepareBFallback",int8_prepare_b_from_transposed:"int8PrepareBFromTransposedFallback",int8_prepare_b_from_quantized_transposed:"int8PrepareBFromQuantizedTransposedFallback",int8_prepare_bias:"int8PrepareBiasFallback",int8_multiply_and_add_bias:"int8MultiplyAndAddBiasFallback",int8_select_columns_of_b:"int8SelectColumnsOfBFallback"};static NATIVE_INT_GEMM="mozIntGemm";constructor(e){}async initialize(e){this.options=e||{},this.models=new Map,this.module=await this.loadModule(),this.service=await this.loadTranslationService()}linkNativeIntGemm(e){if(!WebAssembly.mozIntGemm)return console.warn("Native gemm requested but not available, falling back to embedded gemm"),this.linkFallbackIntGemm(e);const t=new WebAssembly.Instance(WebAssembly.mozIntGemm(),{"":{memory:e.env.memory}});return Array.from(Object.keys(n.GEMM_TO_FALLBACK_FUNCTIONS_MAP)).every((e=>t.exports[e]))?t.exports:(console.warn("Native gemm is missing expected functions, falling back to embedded gemm"),this.linkFallbackIntGemm(e))}linkFallbackIntGemm(t){const r=Object.entries(n.GEMM_TO_FALLBACK_FUNCTIONS_MAP).map((([t,n])=>[t,(...t)=>e.asm[n](...t)]));return Object.fromEntries(r)}loadModule(){return new Promise((async(t,n)=>{try{const r=await self.fetch(new URL("./bergamot-translator-worker.wasm",self.location));Object.assign(e,{instantiateWasm:(e,t)=>{try{WebAssembly.instantiateStreaming(r,{...e,wasm_gemm:this.options.useNativeIntGemm?this.linkNativeIntGemm(e):this.linkFallbackIntGemm(e)}).then((({instance:e})=>t(e))).catch(n)}catch(e){n(e)}return{}},onRuntimeInitialized:()=>{t(e)}}),self.Module=e,self.importScripts("bergamot-translator-worker.js")}catch(e){n(e)}}))}loadTranslationService(){return new this.module.BlockingService({cacheSize:Math.max(this.options.cacheSize||0,0)})}hasTranslationModel({from:e,to:t}){const n=JSON.stringify({from:e,to:t});return this.models.has(n)}loadTranslationModel({from:e,to:n},r){const s=r.vocabs.filter(((e,t,n)=>!n.slice(0,t).includes(e))),[a,i,o,...l]=[this.prepareAlignedMemoryFromBuffer(r.model,256),this.prepareAlignedMemoryFromBuffer(r.shortlist,64),r.qualityModel?this.prepareAlignedMemoryFromBuffer(r.qualityModel,64):null,...s.map((e=>this.prepareAlignedMemoryFromBuffer(e,64)))],m=new this.module.AlignedMemoryList;l.forEach((e=>m.push_back(e)));let c=t.parse("\n beam-size: 1\n normalize: 1.0\n word-penalty: 0\n cpu-threads: 0\n gemm-precision: int8shiftAlphaAll\n skip-cost: true\n ");r.config&&Object.assign(c,r.config),"int8"===c["gemm-precision"]&&(c["gemm-precision"]="int8shiftAll"),Object.assign(c,t.parse("\n alignment: soft\n quiet: true\n quiet-translation: true\n max-length-break: 128\n mini-batch-words: 1024\n workspace: 128\n max-length-factor: 2.0\n "));const d=JSON.stringify({from:e,to:n});this.models.set(d,new this.module.TranslationModel(t.stringify(c),a,i,m,o))}freeTranslationModel({from:e,to:t}){const n=JSON.stringify({from:e,to:t});if(!this.models.has(n))return;const r=this.models.get(n);this.models.delete(n),r.delete()}prepareAlignedMemoryFromBuffer(e,t){const n=new Int8Array(e),r=new this.module.AlignedMemory(n.byteLength,t);return r.getByteArrayView().set(n),r}translate({models:e,texts:t}){let n=new this.module.VectorString;t.forEach((({text:e})=>n.push_back(e)));let r=new this.module.VectorResponseOptions;t.forEach((({html:e,qualityScores:t})=>r.push_back({alignment:!1,html:e,qualityScores:t})));const s=e.map((({from:e,to:t})=>{const n=JSON.stringify({from:e,to:t});return this.models.get(n)})),a=e.length>1?this.service.translateViaPivoting(...s,n,r):this.service.translate(...s,n,r);n.delete(),r.delete();const i=t.map(((e,t)=>({target:{text:a.get(t).getTranslatedText()}})));return a.delete(),i}}function r(e){return{name:e.name,message:e.message,stack:e.stack}}const s=new n;self.addEventListener("message",(async function({data:{id:e,name:t,args:n}}){e||console.error("Received message without id",arguments[0]);try{if("function"!=typeof s[t])throw TypeError(`worker[${t}] is not a function`);const r=await Promise.resolve(Reflect.apply(s[t],s,n));self.postMessage({id:e,result:r})}catch(t){self.postMessage({id:e,error:r(t)})}}))}();
|
|
2
|
+
//# sourceMappingURL=translator-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins/translator-worker.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./node_modules/@internetarchive/bergamot-translator/worker/translator-worker.js"],"sourcesContent":["/**\n * Wrapper around the dirty bits of Bergamot's WASM bindings.\n */\n\n// Global because importScripts is global.\nvar Module = {};\n\n/**\n * node.js compatibility: Fake GlobalWorkerScope that emulates being inside a\n * WebWorker\n */\nif (typeof self === 'undefined') {\n global.Module = Module;\n\n global.self = new class GlobalWorkerScope {\n /** @type {import(\"node:worker_threads\").MessagePort} */\n #port;\n\n constructor() {\n const {parentPort} = require(/* webpackIgnore: true */ 'node:worker_threads');\n this.#port = parentPort;\n }\n\n /**\n * Add event listener to listen for messages posted to the worker.\n * @param {string} eventName\n * @param {(object)} callback\n */\n addEventListener(eventName, callback) {\n this.#port.on(eventName, (data) => callback({data}));\n }\n\n /**\n * Post message outside, to the owner of the Worker.\n * @param {any} message\n */\n postMessage(message) {\n this.#port.postMessage(message);\n }\n\n /**\n * @param {...string} scripts - Paths to scripts to import in that order\n */\n importScripts(...scripts) {\n const {readFileSync} = require(/* webpackIgnore: true */ 'node:fs');\n const {join} = require(/* webpackIgnore: true */ 'node:path');\n for (let pathname of scripts) {\n const script = readFileSync(join(__dirname, pathname), {encoding: 'utf-8'});\n eval.call(global, script);\n }\n }\n\n /**\n * Adds support for local file urls. Assumes anything that doesn't start\n * with \"http\" to be a local path.\n * @param {string} url - path or url\n * @param {object?} options - See `fetch()` options\n * @return {Promise<Response>}\n */\n async fetch(url, options) {\n if (url.protocol === 'file:') {\n const {readFile} = require(/* webpackIgnore: true */ 'node:fs/promises');\n const buffer = await readFile(url.pathname);\n const blob = new Blob([buffer]);\n return new Response(blob, {\n status: 200,\n statusText: 'OK',\n headers: {\n 'Content-Type': 'application/wasm',\n 'Content-Length': blob.size.toString()\n }\n });\n }\n\n return await fetch(url, options);\n }\n\n get location() {\n return new URL(`file://${__filename}`);\n }\n }\n}\n\nclass YAML {\n /**\n * Parses YAML into dictionary. Does not interpret types, all values are a\n * string or a list of strings. No support for objects other than the top\n * level.\n * @param {string} yaml\n * @return {{[string]: string | string[]}}\n */\n static parse(yaml) {\n const out = {};\n\n yaml.split('\\n').reduce((key, line, i) => {\n let match;\n if (match = line.match(/^\\s*-\\s+(.+?)$/)) {\n if (!Array.isArray(out[key]))\n out[key] = out[key].trim() ? [out[key]] : [];\n out[key].push(match[1].trim());\n }\n else if (match = line.match(/^\\s*([A-Za-z0-9_][A-Za-z0-9_-]*):\\s*(.*)$/)) {\n key = match[1];\n out[key] = match[2].trim();\n }\n else if (!line.trim()) {\n // whitespace, ignore\n }\n else {\n throw Error(`Could not parse line ${i+1}: \"${line}\"`);\n }\n return key;\n }, null);\n\n return out;\n }\n\n /**\n * Turns an object into a YAML string. No support for objects, only simple\n * types and lists of simple types.\n * @param {{[string]: string | number | boolean | string[]}} data\n * @return {string}\n */\n static stringify(data) {\n return Object.entries(data).reduce((str, [key, value]) => {\n let valstr = '';\n if (Array.isArray(value))\n valstr = value.map(val => `\\n - ${val}`).join('');\n else if (typeof value === 'number' || typeof value === 'boolean' || value.match(/^\\d*(\\.\\d+)?$/))\n valstr = `${value}`;\n else\n valstr = `${value}`; // Quote?\n\n return `${str}${key}: ${valstr}\\n`;\n }, '');\n }\n}\n\n/**\n * Wrapper around the bergamot-translator exported module that hides the need\n * of working with C++ style data structures and does model management.\n */\nclass BergamotTranslatorWorker {\n /**\n * Map of expected symbol -> name of fallback symbol for functions that can\n * be swizzled for a faster implementation. Firefox Nightly makes use of\n * this.\n */\n static GEMM_TO_FALLBACK_FUNCTIONS_MAP = {\n 'int8_prepare_a': 'int8PrepareAFallback',\n 'int8_prepare_b': 'int8PrepareBFallback',\n 'int8_prepare_b_from_transposed': 'int8PrepareBFromTransposedFallback',\n 'int8_prepare_b_from_quantized_transposed': 'int8PrepareBFromQuantizedTransposedFallback',\n 'int8_prepare_bias': 'int8PrepareBiasFallback',\n 'int8_multiply_and_add_bias': 'int8MultiplyAndAddBiasFallback',\n 'int8_select_columns_of_b': 'int8SelectColumnsOfBFallback'\n };\n\n /**\n * Name of module exported by Firefox Nightly that exports an optimised\n * implementation of the symbols mentioned above.\n */\n static NATIVE_INT_GEMM = 'mozIntGemm';\n\n /**\n * Empty because we can't do async constructors yet. It is the\n * responsibility of whoever owns this WebWorker to call `initialize()`.\n */\n constructor(options) {}\n\n /**\n * Instantiates a new translation worker with optional options object.\n * If this call succeeds, the WASM runtime is loaded and ready.\n * \n * Available options are:\n * useNativeIntGemm: {true | false} defaults to false. If true, it will\n * attempt to link to the intgemm module available in\n * Firefox Nightly which makes translations much faster.\n * cacheSize: {Number} defaults to 0 which disables translation\n * cache entirely. Note that this is a theoretical\n * upper bound. In practice it will use about 1/3th of\n * the cache specified here. 2^14 is not a bad starting\n * value.\n * @param {{useNativeIntGemm: boolean, cacheSize: number}} options\n */\n async initialize(options) {\n this.options = options || {};\n this.models = new Map(); // Map<str,Promise<TranslationModel>>\n this.module = await this.loadModule();\n this.service = await this.loadTranslationService();\n }\n\n /**\n * Tries to load native IntGEMM module for bergamot-translator. If that\n * fails because it or any of the expected functions is not available, it\n * falls back to using the naive implementations that come with the wasm\n * binary itself through `linkFallbackIntGemm()`.\n * @param {{env: {memory: WebAssembly.Memory}}} info\n * @return {{[method:string]: (...any) => any}}\n */\n linkNativeIntGemm(info) {\n if (!WebAssembly['mozIntGemm']) {\n console.warn('Native gemm requested but not available, falling back to embedded gemm');\n return this.linkFallbackIntGemm(info);\n }\n\n const instance = new WebAssembly.Instance(WebAssembly['mozIntGemm'](), {\n '': {memory: info['env']['memory']}\n });\n\n if (!Array.from(Object.keys(BergamotTranslatorWorker.GEMM_TO_FALLBACK_FUNCTIONS_MAP)).every(fun => instance.exports[fun])) {\n console.warn('Native gemm is missing expected functions, falling back to embedded gemm');\n return this.linkFallbackIntGemm(info);\n }\n\n return instance.exports;\n }\n\n /**\n * Links intgemm functions that are already available in the wasm binary,\n * but just exports them under the name that is expected by\n * bergamot-translator.\n * @param {{env: {memory: WebAssembly.Memory}}} info\n * @return {{[method:string]: (...any) => any}}\n */\n linkFallbackIntGemm(info) {\n const mapping = Object.entries(BergamotTranslatorWorker.GEMM_TO_FALLBACK_FUNCTIONS_MAP).map(([key, name]) => {\n return [key, (...args) => Module['asm'][name](...args)]\n });\n\n return Object.fromEntries(mapping);\n }\n\n /**\n * Internal method. Reads and instantiates the WASM binary. Returns a\n * promise for the exported Module object that contains all the classes\n * and functions exported by bergamot-translator.\n * @return {Promise<BergamotTranslator>}\n */\n loadModule() {\n return new Promise(async (resolve, reject) => {\n try {\n const response = await self.fetch(new URL('./bergamot-translator-worker.wasm', self.location));\n\n Object.assign(Module, {\n instantiateWasm: (info, accept) => {\n try {\n WebAssembly.instantiateStreaming(response, {\n ...info,\n 'wasm_gemm': this.options.useNativeIntGemm\n ? this.linkNativeIntGemm(info)\n : this.linkFallbackIntGemm(info)\n }).then(({instance}) => accept(instance)).catch(reject);\n } catch (err) {\n reject(err);\n }\n return {};\n },\n onRuntimeInitialized: () => {\n resolve(Module);\n }\n });\n\n // Emscripten glue code. Webpack et al. should not mangle the `Module` property name!\n self.Module = Module;\n self.importScripts('bergamot-translator-worker.js');\n } catch (err) {\n reject(err);\n }\n });\n }\n\n /**\n * Internal method. Instantiates a BlockingService()\n * @return {BergamotTranslator.BlockingService}\n */\n loadTranslationService() {\n return new this.module.BlockingService({\n cacheSize: Math.max(this.options.cacheSize || 0, 0)\n });\n }\n\n /**\n * Returns whether a model has already been loaded in this worker. Marked\n * async because the message passing interface we use expects async methods.\n * @param {{from:string, to:string}}\n * @return boolean\n */ \n hasTranslationModel({from,to}) {\n const key = JSON.stringify({from,to});\n return this.models.has(key);\n }\n\n /**\n * Loads a translation model from a set of file buffers. After this, the\n * model is available to translate with and `hasTranslationModel()` will\n * return true for this pair.\n * @param {{from:string, to:string}}\n * @param {{\n * model: ArrayBuffer,\n * shortlist: ArrayBuffer,\n * vocabs: ArrayBuffer[],\n * qualityModel: ArrayBuffer?,\n * config?: {\n * [key:string]: string\n * }\n * }} buffers\n */ \n loadTranslationModel({from, to}, buffers) {\n // This because service_bindings.cpp:prepareVocabsSmartMemories :(\n const uniqueVocabs = buffers.vocabs.filter((vocab, index, vocabs) => {\n return !vocabs.slice(0, index).includes(vocab);\n });\n\n const [modelMemory, shortlistMemory, qualityModel, ...vocabMemory] = [\n this.prepareAlignedMemoryFromBuffer(buffers.model, 256),\n this.prepareAlignedMemoryFromBuffer(buffers.shortlist, 64),\n buffers.qualityModel // optional quality model\n ? this.prepareAlignedMemoryFromBuffer(buffers.qualityModel, 64)\n : null,\n ...uniqueVocabs.map(vocab => this.prepareAlignedMemoryFromBuffer(vocab, 64))\n ];\n\n const vocabs = new this.module.AlignedMemoryList();\n vocabMemory.forEach(vocab => vocabs.push_back(vocab));\n\n // Defaults\n let modelConfig = YAML.parse(`\n beam-size: 1\n normalize: 1.0\n word-penalty: 0\n cpu-threads: 0\n gemm-precision: int8shiftAlphaAll\n skip-cost: true\n `);\n\n if (buffers.config)\n Object.assign(modelConfig, buffers.config);\n\n // WASM marian is only compiled with support for shiftedAll.\n if (modelConfig['gemm-precision'] === 'int8')\n modelConfig['gemm-precision'] = 'int8shiftAll';\n\n // Override these\n Object.assign(modelConfig, YAML.parse(`\n alignment: soft\n quiet: true\n quiet-translation: true\n max-length-break: 128\n mini-batch-words: 1024\n workspace: 128\n max-length-factor: 2.0\n `));\n\n const key = JSON.stringify({from,to});\n this.models.set(key, new this.module.TranslationModel(YAML.stringify(modelConfig), modelMemory, shortlistMemory, vocabs, qualityModel));\n }\n\n /**\n * Frees up memory used by old translation model. Does nothing if model is\n * already deleted.\n * @param {{from:string, to:string}}\n */\n freeTranslationModel({from, to}) {\n const key = JSON.stringify({from,to});\n \n if (!this.models.has(key))\n return;\n \n const model = this.models.get(key);\n this.models.delete(key);\n\n model.delete();\n }\n\n /**\n * Internal function. Copies the data from an ArrayBuffer into memory that\n * can be used inside the WASM vm by Marian.\n * @param {{ArrayBuffer}} buffer\n * @param {number} alignmentSize\n * @return {BergamotTranslator.AlignedMemory}\n */\n prepareAlignedMemoryFromBuffer(buffer, alignmentSize) {\n const bytes = new Int8Array(buffer);\n const memory = new this.module.AlignedMemory(bytes.byteLength, alignmentSize);\n memory.getByteArrayView().set(bytes);\n return memory;\n }\n\n /**\n * Public. Does actual translation work. You have to make sure that the\n * models necessary for translating text are already loaded before calling\n * this method. Returns a promise with translation responses.\n * @param {{models: {from:string, to:string}[], texts: {text: string, html: boolean}[]}}\n * @return {Promise<{target: {text: string}}[]>}\n */\n translate({models, texts}) {\n // Convert texts array into a std::vector<std::string>.\n let input = new this.module.VectorString();\n texts.forEach(({text}) => input.push_back(text));\n\n // Extracts the texts[].html options into ResponseOption objects\n let options = new this.module.VectorResponseOptions();\n texts.forEach(({html, qualityScores}) => options.push_back({alignment: false, html, qualityScores}));\n\n // Turn our model names into a list of TranslationModel pointers\n const translationModels = models.map(({from,to}) => {\n const key = JSON.stringify({from,to});\n return this.models.get(key);\n });\n\n // translate the input, which is a vector<String>; the result is a vector<Response>\n const responses = models.length > 1\n ? this.service.translateViaPivoting(...translationModels, input, options)\n : this.service.translate(...translationModels, input, options);\n \n input.delete();\n options.delete();\n\n // Convert the Response WASM wrappers into native JavaScript types we\n // can send over the 'wire' (message passing) in the same format as we\n // use in bergamot-translator.\n const translations = texts.map((_, i) => ({\n target: {\n text: responses.get(i).getTranslatedText()\n }\n }));\n\n responses.delete();\n\n return translations;\n }\n}\n\n/**\n * Because you can't put an Error object in a message. But you can post a\n * generic object!\n * @param {Error} error\n * @return {{\n * name: string?,\n * message: string?,\n * stack: string?\n * }}\n */\nfunction cloneError(error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack\n };\n}\n\n// (Constructor doesn't really do anything, we need to call `initialize()`\n// first before using it. That happens from outside the worker.)\nconst worker = new BergamotTranslatorWorker();\n\nself.addEventListener('message', async function({data: {id, name, args}}) {\n if (!id)\n console.error('Received message without id', arguments[0]);\n\n try {\n if (typeof worker[name] !== 'function')\n throw TypeError(`worker[${name}] is not a function`);\n\n // Using `Promise.resolve` to await any promises that worker[name]\n // possibly returns.\n const result = await Promise.resolve(Reflect.apply(worker[name], worker, args));\n self.postMessage({id, result});\n } catch (error) {\n self.postMessage({\n id,\n error: cloneError(error)\n })\n }\n});\n"],"names":["Module","self","global","constructor","parentPort","require","this","addEventListener","eventName","callback","on","data","postMessage","message","importScripts","scripts","readFileSync","join","pathname","script","__dirname","encoding","eval","call","fetch","url","options","protocol","readFile","buffer","blob","Blob","Response","status","statusText","headers","size","toString","location","URL","__filename","YAML","parse","yaml","out","split","reduce","key","line","i","match","Array","isArray","trim","push","Error","stringify","Object","entries","str","value","valstr","map","val","BergamotTranslatorWorker","static","initialize","models","Map","module","loadModule","service","loadTranslationService","linkNativeIntGemm","info","WebAssembly","console","warn","linkFallbackIntGemm","instance","Instance","memory","from","keys","GEMM_TO_FALLBACK_FUNCTIONS_MAP","every","fun","exports","mapping","name","args","fromEntries","Promise","async","resolve","reject","response","assign","instantiateWasm","accept","instantiateStreaming","useNativeIntGemm","then","catch","err","onRuntimeInitialized","BlockingService","cacheSize","Math","max","hasTranslationModel","to","JSON","has","loadTranslationModel","buffers","uniqueVocabs","vocabs","filter","vocab","index","slice","includes","modelMemory","shortlistMemory","qualityModel","vocabMemory","prepareAlignedMemoryFromBuffer","model","shortlist","AlignedMemoryList","forEach","push_back","modelConfig","config","set","TranslationModel","freeTranslationModel","get","delete","alignmentSize","bytes","Int8Array","AlignedMemory","byteLength","getByteArrayView","translate","texts","input","VectorString","text","VectorResponseOptions","html","qualityScores","alignment","translationModels","responses","length","translateViaPivoting","translations","_","target","getTranslatedText","cloneError","error","stack","worker","id","arguments","TypeError","result","Reflect","apply"],"sourceRoot":""}
|