@foxycape/core 1.1.6 → 1.1.7
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/README.MD +0 -2
- package/README.zh.md +0 -2
- package/dist/ReaderHub.cjs +1 -0
- package/dist/ReaderHub.d.ts +20 -0
- package/dist/ReaderHub.mjs +59 -0
- package/dist/kernal/Context.cjs +1 -1
- package/dist/kernal/Context.mjs +13 -8
- package/dist/kernal/EventNames.cjs +1 -1
- package/dist/kernal/EventNames.d.ts +2 -0
- package/dist/kernal/EventNames.mjs +6 -0
- package/dist/kernal/FileLoader.cjs +1 -1
- package/dist/kernal/FileLoader.d.ts +3 -11
- package/dist/kernal/FileLoader.mjs +27 -22
- package/dist/kernal/JsonConvert.cjs +1 -1
- package/dist/kernal/JsonConvert.d.ts +0 -1
- package/dist/kernal/JsonConvert.mjs +17 -25
- package/dist/kernal/LifecycleHooks.d.ts +2 -1
- package/dist/kernal/Metadata.cjs +1 -1
- package/dist/kernal/Metadata.d.ts +34 -0
- package/dist/kernal/Metadata.mjs +47 -2
- package/dist/kernal/OpenOptions.d.ts +1 -0
- package/dist/kernal/Options.cjs +1 -1
- package/dist/kernal/Options.d.ts +2 -12
- package/dist/kernal/Options.mjs +1 -13
- package/dist/kernal/OptionsProvider.cjs +1 -1
- package/dist/kernal/OptionsProvider.d.ts +0 -2
- package/dist/kernal/OptionsProvider.mjs +6 -14
- package/dist/kernal/Reader.cjs +1 -1
- package/dist/kernal/Reader.d.ts +13 -12
- package/dist/kernal/Reader.mjs +119 -89
- package/dist/kernal/Theme.cjs +1 -1
- package/dist/kernal/Theme.mjs +1 -1
- package/dist/kernal/common/url.cjs +1 -1
- package/dist/kernal/common/url.d.ts +2 -0
- package/dist/kernal/common/url.mjs +2 -2
- package/dist/kernal/common/uuid.cjs +1 -1
- package/dist/kernal/common/uuid.mjs +7 -7
- package/dist/kernal/common/xxh64.cjs +1 -0
- package/dist/kernal/common/xxh64.d.ts +1 -0
- package/dist/kernal/common/xxh64.mjs +30 -0
- package/dist/kernal/crypto/MD5.cjs +1 -1
- package/dist/kernal/crypto/MD5.d.ts +0 -1
- package/dist/kernal/crypto/MD5.mjs +8 -9
- package/dist/kernal/crypto/WebCrypto.cjs +1 -1
- package/dist/kernal/crypto/WebCrypto.mjs +38 -35
- package/dist/kernal/deepClone/buffer.cjs +1 -1
- package/dist/kernal/deepClone/buffer.d.ts +8 -2
- package/dist/kernal/deepClone/buffer.mjs +1 -5
- package/dist/kernal/device/IDevice.d.ts +8 -2
- package/dist/kernal/device/WebBrowser.cjs +1 -1
- package/dist/kernal/device/WebBrowser.d.ts +12 -6
- package/dist/kernal/device/WebBrowser.mjs +70 -6
- package/dist/kernal/hostViewport.cjs +1 -0
- package/dist/kernal/hostViewport.d.ts +16 -0
- package/dist/kernal/hostViewport.mjs +44 -0
- package/dist/kernal/html/events.cjs +1 -1
- package/dist/kernal/html/events.mjs +35 -34
- package/dist/kernal/html/finder.cjs +1 -1
- package/dist/kernal/html/finder.d.ts +6 -2
- package/dist/kernal/html/finder.mjs +62 -51
- package/dist/kernal/html/geometry.cjs +1 -1
- package/dist/kernal/html/geometry.d.ts +26 -1
- package/dist/kernal/html/geometry.mjs +182 -121
- package/dist/kernal/html/manipulator.cjs +1 -1
- package/dist/kernal/html/manipulator.d.ts +1 -3
- package/dist/kernal/html/manipulator.mjs +34 -59
- package/dist/kernal/html/parser.cjs +1 -1
- package/dist/kernal/html/parser.mjs +3 -3
- package/dist/kernal/html/position.cjs +1 -1
- package/dist/kernal/html/position.d.ts +0 -18
- package/dist/kernal/html/position.mjs +2 -141
- package/dist/kernal/html/realm.cjs +1 -0
- package/dist/kernal/html/realm.d.ts +7 -0
- package/dist/kernal/html/realm.mjs +8 -0
- package/dist/kernal/html/selection.cjs +1 -1
- package/dist/kernal/html/selection.d.ts +1 -0
- package/dist/kernal/html/selection.mjs +33 -12
- package/dist/kernal/html/text.cjs +1 -1
- package/dist/kernal/html/text.d.ts +4 -3
- package/dist/kernal/html/text.mjs +24 -21
- package/dist/kernal/html/translationAnchor.cjs +1 -0
- package/dist/kernal/html/translationAnchor.d.ts +3 -0
- package/dist/kernal/html/translationAnchor.mjs +71 -0
- package/dist/kernal/i18n/DefaultLocale.cjs +1 -1
- package/dist/kernal/i18n/DefaultLocale.d.ts +2 -2
- package/dist/kernal/i18n/DefaultLocale.mjs +7 -12
- package/dist/kernal/i18n/ILocale.d.ts +0 -1
- package/dist/kernal/i18n/applyNamed.cjs +1 -0
- package/dist/kernal/i18n/applyNamed.d.ts +1 -0
- package/dist/kernal/i18n/applyNamed.mjs +9 -0
- package/dist/kernal/i18n/textDirection.cjs +1 -0
- package/dist/kernal/i18n/textDirection.d.ts +6 -0
- package/dist/kernal/i18n/textDirection.mjs +7 -0
- package/dist/kernal/index.cjs +1 -1
- package/dist/kernal/index.d.ts +6 -5
- package/dist/kernal/index.mjs +50 -45
- package/dist/kernal/mark/IHighlighter.cjs +1 -0
- package/dist/kernal/mark/IHighlighter.d.ts +43 -0
- package/dist/kernal/mark/IHighlighter.mjs +13 -0
- package/dist/kernal/mark/Mark.cjs +1 -1
- package/dist/kernal/mark/Mark.d.ts +33 -4
- package/dist/kernal/mark/Mark.mjs +43 -6
- package/dist/kernal/mark/index.cjs +1 -1
- package/dist/kernal/mark/index.d.ts +2 -0
- package/dist/kernal/mark/index.mjs +6 -3
- package/dist/kernal/mark/overlay.cjs +1 -0
- package/dist/kernal/mark/overlay.d.ts +31 -0
- package/dist/kernal/mark/overlay.mjs +102 -0
- package/dist/kernal/mark/types.cjs +1 -0
- package/dist/kernal/mark/types.d.ts +11 -2
- package/dist/kernal/mark/types.mjs +4 -0
- package/dist/kernal/navigator/INavigator.d.ts +3 -2
- package/dist/kernal/network/HttpClient.cjs +1 -1
- package/dist/kernal/network/HttpClient.mjs +80 -56
- package/dist/kernal/pipelines/FileLoadPipeline.cjs +1 -1
- package/dist/kernal/pipelines/FileLoadPipeline.mjs +55 -56
- package/dist/kernal/pipelines/InputFormatter.cjs +1 -1
- package/dist/kernal/pipelines/InputFormatter.mjs +43 -41
- package/dist/kernal/pipelines/metadata.cjs +1 -1
- package/dist/kernal/pipelines/metadata.d.ts +2 -1
- package/dist/kernal/pipelines/metadata.mjs +21 -30
- package/dist/kernal/plugins/keyboard/KeyboardPageTurning.cjs +1 -1
- package/dist/kernal/plugins/keyboard/KeyboardPageTurning.mjs +7 -6
- package/dist/kernal/plugins/mouse/WheelPageTurning.cjs +1 -1
- package/dist/kernal/plugins/mouse/WheelPageTurning.mjs +12 -11
- package/dist/kernal/progress/Progress.cjs +1 -1
- package/dist/kernal/progress/Progress.d.ts +5 -3
- package/dist/kernal/progress/Progress.mjs +2 -2
- package/dist/kernal/progress/userChangedProgress.cjs +1 -0
- package/dist/kernal/progress/userChangedProgress.d.ts +9 -0
- package/dist/kernal/progress/userChangedProgress.mjs +11 -0
- package/dist/kernal/screen/BrowserFullscreen.cjs +1 -0
- package/dist/kernal/screen/BrowserFullscreen.d.ts +9 -0
- package/dist/kernal/screen/BrowserFullscreen.mjs +47 -0
- package/dist/kernal/screen/IFullscreen.d.ts +6 -0
- package/dist/kernal/services/ServiceCollection.cjs +1 -1
- package/dist/kernal/services/ServiceCollection.d.ts +4 -6
- package/dist/kernal/services/ServiceCollection.mjs +18 -9
- package/dist/kernal/services/docLoadLayer/HtmlLoadLayer.cjs +2 -2
- package/dist/kernal/services/docLoadLayer/HtmlLoadLayer.d.ts +4 -2
- package/dist/kernal/services/docLoadLayer/HtmlLoadLayer.mjs +31 -23
- package/dist/kernal/services/fileUrlParser/DefaultFileUrlParser.cjs +1 -1
- package/dist/kernal/services/fileUrlParser/DefaultFileUrlParser.mjs +52 -51
- package/dist/kernal/services/fileUrlParser/IFileUrlParser.d.ts +0 -1
- package/dist/kernal/services/font/IFontProvider.cjs +1 -1
- package/dist/kernal/services/font/IFontProvider.d.ts +3 -0
- package/dist/kernal/services/font/IFontProvider.mjs +1 -1
- package/dist/kernal/services/internalUrlBuilder/DefaultInternalUrlBuilder.cjs +1 -1
- package/dist/kernal/services/internalUrlBuilder/DefaultInternalUrlBuilder.mjs +8 -8
- package/dist/kernal/services/loading/DefaultLoading.cjs +1 -1
- package/dist/kernal/services/loading/DefaultLoading.d.ts +4 -0
- package/dist/kernal/services/loading/DefaultLoading.mjs +23 -24
- package/dist/kernal/services/text/splitter.cjs +1 -1
- package/dist/kernal/services/text/splitter.mjs +3 -3
- package/dist/kernal/types.d.ts +0 -5
- package/dist/kernal/web/BrowserCapabilities.cjs +1 -1
- package/dist/kernal/web/BrowserCapabilities.d.ts +0 -9
- package/dist/kernal/web/BrowserCapabilities.mjs +0 -49
- package/dist/kernal/{Debounce.mjs → web/debounce.mjs} +1 -1
- package/dist/kernal/web/scheduler.cjs +1 -0
- package/dist/kernal/web/scheduler.d.ts +3 -0
- package/dist/kernal/web/scheduler.mjs +7 -0
- package/dist/mediaTypes/base/fileParser/BaseFileParser.cjs +1 -1
- package/dist/mediaTypes/base/fileParser/BaseFileParser.mjs +59 -59
- package/dist/mediaTypes/html/DefaultHtmlSymbolMeasure.cjs +1 -0
- package/dist/mediaTypes/html/DefaultHtmlSymbolMeasure.d.ts +13 -0
- package/dist/mediaTypes/html/DefaultHtmlSymbolMeasure.mjs +109 -0
- package/dist/mediaTypes/html/HtmlOptions.cjs +1 -1
- package/dist/mediaTypes/html/HtmlOptions.d.ts +6 -12
- package/dist/mediaTypes/html/HtmlOptions.mjs +3 -14
- package/dist/mediaTypes/html/HtmlSettings.cjs +1 -1
- package/dist/mediaTypes/html/HtmlSettings.d.ts +16 -1
- package/dist/mediaTypes/html/HtmlSettings.mjs +46 -1
- package/dist/mediaTypes/html/IHtmlContentNormalizer.cjs +1 -0
- package/dist/mediaTypes/html/IHtmlContentNormalizer.d.ts +4 -0
- package/dist/mediaTypes/html/IHtmlContentNormalizer.mjs +4 -0
- package/dist/mediaTypes/html/IHtmlSymbolMeasure.d.ts +11 -0
- package/dist/mediaTypes/html/NoopHtmlContentNormalizer.cjs +1 -0
- package/dist/mediaTypes/html/NoopHtmlContentNormalizer.d.ts +5 -0
- package/dist/mediaTypes/html/NoopHtmlContentNormalizer.mjs +8 -0
- package/dist/mediaTypes/html/fileParser/HtmlFileParser.cjs +1 -1
- package/dist/mediaTypes/html/fileParser/HtmlFileParser.d.ts +5 -1
- package/dist/mediaTypes/html/fileParser/HtmlFileParser.mjs +15 -18
- package/dist/mediaTypes/html/fileParser/HtmlTextDocument.cjs +1 -1
- package/dist/mediaTypes/html/fileParser/HtmlTextDocument.mjs +25 -25
- package/dist/mediaTypes/html/fileParser/IHtmlFileParser.cjs +1 -0
- package/dist/mediaTypes/html/fileParser/IHtmlFileParser.d.ts +7 -3
- package/dist/mediaTypes/html/fileParser/IHtmlFileParser.mjs +4 -0
- package/dist/mediaTypes/html/renderer/HtmlRenderer.cjs +1 -1
- package/dist/mediaTypes/html/renderer/HtmlRenderer.d.ts +7 -1
- package/dist/mediaTypes/html/renderer/HtmlRenderer.mjs +65 -41
- package/dist/mediaTypes/html/renderer/IHtmlDocument.d.ts +6 -2
- package/dist/mediaTypes/html/renderer/IHtmlDocumentsProvider.d.ts +5 -0
- package/dist/mediaTypes/html/renderer/IHtmlRenderer.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/document/HtmlDocument.cjs +1 -1
- package/dist/mediaTypes/html/renderer/document/HtmlDocument.d.ts +29 -6
- package/dist/mediaTypes/html/renderer/document/HtmlDocument.mjs +233 -86
- package/dist/mediaTypes/html/renderer/document/HtmlDocumentResizeObserver.cjs +1 -1
- package/dist/mediaTypes/html/renderer/document/HtmlDocumentResizeObserver.d.ts +8 -0
- package/dist/mediaTypes/html/renderer/document/HtmlDocumentResizeObserver.mjs +41 -5
- package/dist/mediaTypes/html/renderer/document/HtmlPageCalculator.cjs +1 -1
- package/dist/mediaTypes/html/renderer/document/HtmlPageCalculator.d.ts +2 -4
- package/dist/mediaTypes/html/renderer/document/HtmlPageCalculator.mjs +22 -59
- package/dist/mediaTypes/html/renderer/document/HtmlSymbolCalclator.cjs +1 -1
- package/dist/mediaTypes/html/renderer/document/HtmlSymbolCalclator.d.ts +3 -5
- package/dist/mediaTypes/html/renderer/document/HtmlSymbolCalclator.mjs +7 -25
- package/dist/mediaTypes/html/renderer/documents/HtmlContainerBuilder.cjs +1 -1
- package/dist/mediaTypes/html/renderer/documents/HtmlContainerBuilder.d.ts +0 -2
- package/dist/mediaTypes/html/renderer/documents/HtmlContainerBuilder.mjs +18 -42
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsIntersectionObserver.cjs +1 -1
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsIntersectionObserver.d.ts +2 -0
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsIntersectionObserver.mjs +17 -4
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsPreloader.cjs +1 -1
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsPreloader.d.ts +16 -1
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsPreloader.mjs +128 -54
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.cjs +1 -1
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.d.ts +26 -3
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.mjs +227 -101
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsResizeObserver.cjs +1 -1
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsResizeObserver.d.ts +2 -0
- package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsResizeObserver.mjs +45 -25
- package/dist/mediaTypes/html/renderer/documents/documentHiddenState.cjs +1 -0
- package/dist/mediaTypes/html/renderer/documents/documentHiddenState.d.ts +6 -0
- package/dist/mediaTypes/html/renderer/documents/documentHiddenState.mjs +6 -0
- package/dist/mediaTypes/html/renderer/documents/preloadNeighbors.cjs +1 -0
- package/dist/mediaTypes/html/renderer/documents/preloadNeighbors.d.ts +2 -0
- package/dist/mediaTypes/html/renderer/documents/preloadNeighbors.mjs +13 -0
- package/dist/mediaTypes/html/renderer/documents/wrapperVisibility.cjs +1 -0
- package/dist/mediaTypes/html/renderer/documents/wrapperVisibility.d.ts +11 -0
- package/dist/mediaTypes/html/renderer/documents/wrapperVisibility.mjs +8 -0
- package/dist/mediaTypes/html/renderer/html/HtmlContentProcessor.cjs +1 -1
- package/dist/mediaTypes/html/renderer/html/HtmlContentProcessor.mjs +62 -62
- package/dist/mediaTypes/html/renderer/html/template.cjs +1 -1
- package/dist/mediaTypes/html/renderer/html/template.d.ts +3 -1
- package/dist/mediaTypes/html/renderer/html/template.mjs +9 -9
- package/dist/mediaTypes/html/renderer/image/HtmlImageLoader.cjs +1 -1
- package/dist/mediaTypes/html/renderer/image/HtmlImageLoader.d.ts +22 -12
- package/dist/mediaTypes/html/renderer/image/HtmlImageLoader.mjs +380 -270
- package/dist/mediaTypes/html/renderer/image/HtmlImageObserver.cjs +1 -1
- package/dist/mediaTypes/html/renderer/image/HtmlImageObserver.mjs +27 -27
- package/dist/mediaTypes/html/renderer/image/IHtmlImageLoader.d.ts +8 -0
- package/dist/mediaTypes/html/renderer/image/error-image.cjs +1 -1
- package/dist/mediaTypes/html/renderer/image/error-image.mjs +1 -1
- package/dist/mediaTypes/html/renderer/image/htmlImageFitStyles.cjs +1 -0
- package/dist/mediaTypes/html/renderer/image/htmlImageFitStyles.d.ts +10 -0
- package/dist/mediaTypes/html/renderer/image/htmlImageFitStyles.mjs +15 -0
- package/dist/mediaTypes/html/renderer/image/htmlImagePlaceholderUrl.cjs +1 -0
- package/dist/mediaTypes/html/renderer/image/htmlImagePlaceholderUrl.d.ts +2 -0
- package/dist/mediaTypes/html/renderer/image/htmlImagePlaceholderUrl.mjs +12 -0
- package/dist/mediaTypes/html/renderer/layout/HtmlRendererLayout.cjs +1 -1
- package/dist/mediaTypes/html/renderer/layout/HtmlRendererLayout.d.ts +6 -10
- package/dist/mediaTypes/html/renderer/layout/HtmlRendererLayout.mjs +71 -62
- package/dist/mediaTypes/html/renderer/layout/HtmlRendererViewport.cjs +1 -1
- package/dist/mediaTypes/html/renderer/layout/HtmlRendererViewport.d.ts +4 -1
- package/dist/mediaTypes/html/renderer/layout/HtmlRendererViewport.mjs +113 -68
- package/dist/mediaTypes/html/renderer/layout/IHtmlRendererLayout.d.ts +8 -3
- package/dist/mediaTypes/html/renderer/layout/ViewportCssVariableNames.cjs +1 -1
- package/dist/mediaTypes/html/renderer/layout/ViewportCssVariableNames.d.ts +5 -1
- package/dist/mediaTypes/html/renderer/layout/ViewportCssVariableNames.mjs +15 -3
- package/dist/mediaTypes/html/renderer/layout/applyLayoutClasses.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/applyLayoutClasses.d.ts +8 -0
- package/dist/mediaTypes/html/renderer/layout/applyLayoutClasses.mjs +28 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-horizontal-tb-ltr.cjs +30 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-horizontal-tb-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-horizontal-tb-rtl.cjs +31 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-horizontal-tb-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-vertical-lr-ltr.cjs +30 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-vertical-lr-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-vertical-lr-rtl.cjs +30 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-vertical-lr-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-vertical-rl-ltr.cjs +30 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-vertical-rl-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-vertical-rl-rtl.cjs +30 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-page-vertical-rl-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-horizontal-tb-rtl.cjs +6 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-horizontal-tb-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-vertical-lr-ltr.cjs +10 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-vertical-lr-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-vertical-lr-rtl.cjs +10 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-vertical-lr-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-vertical-rl-ltr.cjs +10 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-vertical-rl-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-vertical-rl-rtl.cjs +10 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-content-scroll-vertical-rl-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-default.cjs +19 -0
- package/dist/mediaTypes/html/renderer/layout/css/document-default.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/hostLayoutCss.cjs +3 -0
- package/dist/mediaTypes/html/renderer/layout/css/hostLayoutCss.d.ts +2 -0
- package/dist/mediaTypes/html/renderer/layout/css/hostLayoutCss.mjs +56 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-default.cjs +64 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-default.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-horizontal-tb-ltr.cjs +33 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-horizontal-tb-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-horizontal-tb-rtl.cjs +33 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-horizontal-tb-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-vertical-lr-ltr.cjs +47 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-vertical-lr-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-vertical-lr-rtl.cjs +47 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-vertical-lr-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-vertical-rl-ltr.cjs +46 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-vertical-rl-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-vertical-rl-rtl.cjs +46 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-page-vertical-rl-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-horizontal-tb-rtl.cjs +7 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-horizontal-tb-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-vertical-lr-ltr.cjs +28 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-vertical-lr-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-vertical-lr-rtl.cjs +28 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-vertical-lr-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-vertical-rl-ltr.cjs +28 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-vertical-rl-ltr.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-vertical-rl-rtl.cjs +28 -0
- package/dist/mediaTypes/html/renderer/layout/css/renderer-layout-scroll-vertical-rl-rtl.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/css/root-direction.cjs +8 -0
- package/dist/mediaTypes/html/renderer/layout/css/root-direction.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/ILayoutGeometry.d.ts +128 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/formatTranslate3d.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/formatTranslate3d.d.ts +4 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/formatTranslate3d.mjs +7 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/getLayoutOffsetLeft.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/getLayoutOffsetLeft.d.ts +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/getLayoutOffsetLeft.mjs +13 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/index.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/index.d.ts +18 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/index.mjs +30 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageHorizontalTbLtr.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageHorizontalTbLtr.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageHorizontalTbLtr.mjs +71 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageHorizontalTbRtl.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageHorizontalTbRtl.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageHorizontalTbRtl.mjs +74 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalLrLtr.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalLrLtr.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalLrLtr.mjs +71 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalLrRtl.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalLrRtl.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalLrRtl.mjs +71 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalRlLtr.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalRlLtr.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalRlLtr.mjs +71 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalRlRtl.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalRlRtl.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/pageVerticalRlRtl.mjs +71 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/restoreLayoutState.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/restoreLayoutState.d.ts +41 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/restoreLayoutState.mjs +53 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollHorizontalTbLtr.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollHorizontalTbLtr.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollHorizontalTbLtr.mjs +71 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollHorizontalTbRtl.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollHorizontalTbRtl.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollHorizontalTbRtl.mjs +74 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalLrLtr.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalLrLtr.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalLrLtr.mjs +71 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalLrRtl.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalLrRtl.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalLrRtl.mjs +71 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalRlLtr.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalRlLtr.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalRlLtr.mjs +74 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalRlRtl.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalRlRtl.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/layout/geometry/scrollVerticalRlRtl.mjs +74 -0
- package/dist/mediaTypes/html/renderer/layout/layoutRouteIds.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/layoutRouteIds.d.ts +10 -0
- package/dist/mediaTypes/html/renderer/layout/layoutRouteIds.mjs +17 -0
- package/dist/mediaTypes/html/renderer/layout/pageStripRouteChange.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/pageStripRouteChange.d.ts +6 -0
- package/dist/mediaTypes/html/renderer/layout/pageStripRouteChange.mjs +24 -0
- package/dist/mediaTypes/html/renderer/layout/resolveContentWrapperMinWidth.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/resolveContentWrapperMinWidth.d.ts +9 -0
- package/dist/mediaTypes/html/renderer/layout/resolveContentWrapperMinWidth.mjs +4 -0
- package/dist/mediaTypes/html/renderer/layout/resolveLayoutRoute.cjs +1 -0
- package/dist/mediaTypes/html/renderer/layout/resolveLayoutRoute.d.ts +11 -0
- package/dist/mediaTypes/html/renderer/layout/resolveLayoutRoute.mjs +9 -0
- package/dist/mediaTypes/html/renderer/location/HtmlElementLocator.cjs +1 -1
- package/dist/mediaTypes/html/renderer/location/HtmlElementLocator.mjs +32 -34
- package/dist/mediaTypes/html/renderer/location/HtmlLayoutStatePreserver.cjs +1 -0
- package/dist/mediaTypes/html/renderer/location/HtmlLayoutStatePreserver.d.ts +23 -0
- package/dist/mediaTypes/html/renderer/location/HtmlLayoutStatePreserver.mjs +164 -0
- package/dist/mediaTypes/html/renderer/location/remapStoredPageNumber.cjs +1 -0
- package/dist/mediaTypes/html/renderer/location/remapStoredPageNumber.d.ts +4 -0
- package/dist/mediaTypes/html/renderer/location/remapStoredPageNumber.mjs +13 -0
- package/dist/mediaTypes/html/renderer/location/scrollActivity.cjs +1 -0
- package/dist/mediaTypes/html/renderer/location/scrollActivity.d.ts +14 -0
- package/dist/mediaTypes/html/renderer/location/scrollActivity.mjs +18 -0
- package/dist/mediaTypes/html/renderer/navigator/HtmlCoreNavigator.cjs +1 -1
- package/dist/mediaTypes/html/renderer/navigator/HtmlCoreNavigator.mjs +2 -2
- package/dist/mediaTypes/html/renderer/navigator/HtmlNavPointNavigator.cjs +1 -1
- package/dist/mediaTypes/html/renderer/navigator/HtmlNavPointNavigator.mjs +3 -3
- package/dist/mediaTypes/html/renderer/navigator/HtmlNavPointProvider.cjs +1 -1
- package/dist/mediaTypes/html/renderer/navigator/HtmlNavPointProvider.mjs +55 -59
- package/dist/mediaTypes/html/renderer/navigator/HtmlPagingNavigator.cjs +1 -1
- package/dist/mediaTypes/html/renderer/navigator/HtmlPagingNavigator.d.ts +1 -0
- package/dist/mediaTypes/html/renderer/navigator/HtmlPagingNavigator.mjs +40 -39
- package/dist/mediaTypes/html/renderer/progress/HtmlProgressTracker.cjs +1 -1
- package/dist/mediaTypes/html/renderer/progress/HtmlProgressTracker.d.ts +2 -1
- package/dist/mediaTypes/html/renderer/progress/HtmlProgressTracker.mjs +36 -24
- package/dist/mediaTypes/html/renderer/style/ContentCssVariables.cjs +1 -1
- package/dist/mediaTypes/html/renderer/style/ContentCssVariables.d.ts +4 -0
- package/dist/mediaTypes/html/renderer/style/ContentCssVariables.mjs +19 -1
- package/dist/mediaTypes/html/renderer/style/ContentLayoutCssVariableNames.cjs +1 -1
- package/dist/mediaTypes/html/renderer/style/ContentLayoutCssVariableNames.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/style/ContentLayoutCssVariableNames.mjs +9 -0
- package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.cjs +1 -1
- package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.d.ts +3 -0
- package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.mjs +28 -16
- package/dist/mediaTypes/html/renderer/style/HtmlThemeApplier.cjs +1 -1
- package/dist/mediaTypes/html/renderer/style/HtmlThemeApplier.d.ts +2 -0
- package/dist/mediaTypes/html/renderer/style/HtmlThemeApplier.mjs +39 -34
- package/dist/mediaTypes/html/renderer/style/ILanguageHighlighter.cjs +0 -0
- package/dist/mediaTypes/html/renderer/style/ILanguageHighlighter.d.ts +6 -0
- package/dist/mediaTypes/html/renderer/style/ILanguageHighlighter.mjs +0 -0
- package/dist/mediaTypes/html/renderer/style/LanguageHighlighter.cjs +1 -0
- package/dist/mediaTypes/html/renderer/style/LanguageHighlighter.d.ts +18 -0
- package/dist/mediaTypes/html/renderer/style/LanguageHighlighter.mjs +52 -0
- package/dist/mediaTypes/html/renderer/style/html-content.cjs +38 -7
- package/dist/mediaTypes/html/renderer/style/html-content.mjs +1 -1
- package/dist/mediaTypes/pdf/ensurePdfWebWorker.cjs +1 -1
- package/dist/mediaTypes/pdf/ensurePdfWebWorker.mjs +6 -13
- package/dist/mediaTypes/pdf/fileParser/PdfFileParser.cjs +1 -1
- package/dist/mediaTypes/pdf/fileParser/PdfFileParser.d.ts +5 -4
- package/dist/mediaTypes/pdf/fileParser/PdfFileParser.mjs +7 -3
- package/dist/mediaTypes/pdf/fileParser/PdfPasswordProvider.cjs +1 -1
- package/dist/mediaTypes/pdf/fileParser/PdfPasswordProvider.d.ts +4 -4
- package/dist/mediaTypes/pdf/fileParser/PdfPasswordProvider.mjs +24 -14
- package/dist/mediaTypes/pdf/highlighter/PdfHighlightConstants.cjs +1 -0
- package/dist/mediaTypes/pdf/highlighter/PdfHighlightConstants.d.ts +6 -0
- package/dist/mediaTypes/pdf/highlighter/PdfHighlightConstants.mjs +4 -0
- package/dist/mediaTypes/pdf/highlighter/pdfHighlightStyles.cjs +1 -0
- package/dist/mediaTypes/pdf/highlighter/pdfHighlightStyles.d.ts +10 -0
- package/dist/mediaTypes/pdf/highlighter/pdfHighlightStyles.mjs +33 -0
- package/dist/mediaTypes/pdf/loadPdfDocument.cjs +1 -1
- package/dist/mediaTypes/pdf/loadPdfDocument.mjs +18 -19
- package/dist/mediaTypes/pdf/renderer/IPdfRenderer.d.ts +2 -0
- package/dist/mediaTypes/pdf/renderer/MultiPdfViewer.mjs +1 -1
- package/dist/mediaTypes/pdf/renderer/PdfCoreNavigator.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/PdfCoreNavigator.mjs +2 -2
- package/dist/mediaTypes/pdf/renderer/PdfCssVariableNames.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/PdfCssVariableNames.d.ts +0 -1
- package/dist/mediaTypes/pdf/renderer/PdfCssVariableNames.mjs +0 -3
- package/dist/mediaTypes/pdf/renderer/PdfDocument.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/PdfDocument.mjs +3 -3
- package/dist/mediaTypes/pdf/renderer/PdfNavPointNavigator.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/PdfNavPointNavigator.mjs +3 -3
- package/dist/mediaTypes/pdf/renderer/PdfPagingNavigator.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/PdfPagingNavigator.d.ts +3 -3
- package/dist/mediaTypes/pdf/renderer/PdfPagingNavigator.mjs +20 -19
- package/dist/mediaTypes/pdf/renderer/PdfRenderer.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/PdfRenderer.d.ts +1 -0
- package/dist/mediaTypes/pdf/renderer/PdfRenderer.mjs +20 -20
- package/dist/mediaTypes/pdf/renderer/PdfSvgBuilder.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/PdfSvgBuilder.mjs +51 -50
- package/dist/mediaTypes/pdf/renderer/documents/PdfDocumentsProvider.cjs +2 -2
- package/dist/mediaTypes/pdf/renderer/documents/PdfDocumentsProvider.mjs +55 -56
- package/dist/mediaTypes/pdf/renderer/documents/resolvePdfLocationPageNumber.cjs +1 -0
- package/dist/mediaTypes/pdf/renderer/documents/resolvePdfLocationPageNumber.d.ts +3 -0
- package/dist/mediaTypes/pdf/renderer/documents/resolvePdfLocationPageNumber.mjs +12 -0
- package/dist/mediaTypes/pdf/renderer/input/PdfViewerEvents.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/input/PdfViewerEvents.d.ts +4 -0
- package/dist/mediaTypes/pdf/renderer/input/PdfViewerEvents.mjs +24 -5
- package/dist/mediaTypes/pdf/renderer/layout/PdfRendererViewport.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/layout/PdfRendererViewport.mjs +32 -32
- package/dist/mediaTypes/pdf/renderer/progress/PdfProgressTracker.cjs +1 -1
- package/dist/mediaTypes/pdf/renderer/progress/PdfProgressTracker.mjs +1 -1
- package/dist/mediaTypes/pdf/renderer/style/PdfThemeApplier.cjs +4 -4
- package/dist/mediaTypes/pdf/renderer/style/PdfThemeApplier.mjs +5 -5
- package/dist/mediaTypes/pdf/shared/text/pageText.cjs +2 -2
- package/dist/mediaTypes/pdf/shared/text/pageText.d.ts +14 -0
- package/dist/mediaTypes/pdf/shared/text/pageText.mjs +139 -47
- package/dist/node_modules/highlight.js/styles/github-dark.cjs +118 -0
- package/dist/node_modules/highlight.js/styles/github-dark.mjs +4 -0
- package/dist/node_modules/highlight.js/styles/github.cjs +118 -0
- package/dist/node_modules/highlight.js/styles/github.mjs +4 -0
- package/dist/pdfjs/package.json +1 -0
- package/package.json +11 -5
- package/dist/kernal/device/IEnvironment.d.ts +0 -5
- package/dist/kernal/device/IPlatform.d.ts +0 -7
- package/dist/kernal/device/WebEnvironment.cjs +0 -1
- package/dist/kernal/device/WebEnvironment.d.ts +0 -7
- package/dist/kernal/device/WebEnvironment.mjs +0 -22
- package/dist/kernal/device/WebPlatform.cjs +0 -1
- package/dist/kernal/device/WebPlatform.d.ts +0 -12
- package/dist/kernal/device/WebPlatform.mjs +0 -49
- package/dist/kernal/progress/IReadingProgressStore.d.ts +0 -7
- package/dist/kernal/progress/ReadingProgressStore.cjs +0 -1
- package/dist/kernal/progress/ReadingProgressStore.d.ts +0 -12
- package/dist/kernal/progress/ReadingProgressStore.mjs +0 -17
- package/dist/kernal/storage/IStorage.cjs +0 -1
- package/dist/kernal/storage/IStorage.d.ts +0 -21
- package/dist/kernal/storage/IStorage.mjs +0 -4
- package/dist/kernal/storage/WebStorage.cjs +0 -1
- package/dist/kernal/storage/WebStorage.d.ts +0 -31
- package/dist/kernal/storage/WebStorage.mjs +0 -165
- package/dist/mediaTypes/adjacent.cjs +0 -1
- package/dist/mediaTypes/adjacent.d.ts +0 -5
- package/dist/mediaTypes/adjacent.mjs +0 -42
- package/dist/mediaTypes/html/renderer/image/placeholder.cjs +0 -1
- package/dist/mediaTypes/html/renderer/image/placeholder.mjs +0 -4
- /package/dist/kernal/{device/IEnvironment.cjs → screen/IFullscreen.cjs} +0 -0
- /package/dist/kernal/{device/IEnvironment.mjs → screen/IFullscreen.mjs} +0 -0
- /package/dist/kernal/{Debounce.cjs → web/debounce.cjs} +0 -0
- /package/dist/kernal/{Debounce.d.ts → web/debounce.d.ts} +0 -0
- /package/dist/{kernal/device/IPlatform.cjs → mediaTypes/html/IHtmlSymbolMeasure.cjs} +0 -0
- /package/dist/{kernal/device/IPlatform.mjs → mediaTypes/html/IHtmlSymbolMeasure.mjs} +0 -0
- /package/dist/{kernal/progress/IReadingProgressStore.cjs → mediaTypes/html/renderer/layout/geometry/ILayoutGeometry.cjs} +0 -0
- /package/dist/{kernal/progress/IReadingProgressStore.mjs → mediaTypes/html/renderer/layout/geometry/ILayoutGeometry.mjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/common/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/common/encoding.cjs"),t=require("../../../../kernal/common/uuid.cjs"),n=require("../../../../kernal/common/text.cjs"),r=require("../../../../kernal/common/url.cjs"),i=require("../../../../kernal/common/path.cjs"),a=require("../../../../kernal/common/buffer.cjs"),o=require("../../../../kernal/Constants.cjs"),s=require("../../../../kernal/html/finder.cjs"),c=require("../../../../kernal/html/injector.cjs"),l=require("../../../../kernal/html/style.cjs"),u=require("../../HtmlSettings.cjs");var d=class{constructor(e){this.fileParser=e,this.childrenUrls=new Map,this.errorLinks=[],this.docBlobUrls=new Map,this.opaqueDocumentBaseUrls=[]}async preprocess(e){let t=(await e.getVirtualContentContainer())?.ownerDocument;t&&(this.format(t),this.injectBaseUrl(t,e.url),await this.resetCssHref(t,e),await this.resetScriptSrc(t,e))}format(e){let t=e.getElementsByTagName(`*`),n=!1;for(let e=t.length-1;e>=0;e--){let r=t[e];if(r.textContent.trim()||r.classList.add(`lhx-text-empty`),r.style&&(r.style.fontSize||r.style.textIndent)){let e=r.getAttribute(`style`);r.style.fontSize&&(e=l.replaceFontSize(e)),r.style.textIndent&&(e=l.removeTextIndent(e)),r.setAttribute(`style`,e)}s.compareTagName(r.tagName,`TABLE`)&&(r.style.width=`100%`,r.style.height=`auto`),n||(s.compareTagName(r.tagName,`SVG`)||r.children.length==0&&!s.compareTagName(r.parentElement.tagName,`SVG`))&&(n=!0,r.setAttribute(o.LastElementAttributeName,`true`)),r.getAttribute(`epub:type`)==`footnote`&&r.style.setProperty(`display`,`none`)}}async resetCssHref(e,r){let i=e.getElementsByTagName(`link`);for(let a=i.length-1;a>=0;a--){let o=i[a].getAttribute(`href`);if(!i[a].rel||i[a].rel.toLowerCase()!=`stylesheet`||n.isNullOrWhiteSpace(o))continue;let{href:s,cssContent:l,isHref:d}=await this.getActualCssLink(o,r);if(d&&o)i[a].href=s,i[a].setAttribute(u.HtmlSettings.LinkOriginHrefPropertyName,o);else if(l){let n=t.getRandomId(!0);c.injectCssContent(e,l,!1,n),i[a].parentElement?.removeChild(i[a])}}}async getActualCssLink(t,o){if(n.isNullOrWhiteSpace(t)||r.checkIsAbsoluteUrl(t))return{href:t,cssContent:``,isHref:!0};try{let s=await this.fileParser.getFile(t,o.url,`blob`),c=e.convertArrayBufferToString(await s.arrayBuffer()),u=c.matchAll(/url\(["']?(.*?)["']?\)/gi);for(let e of u){let a=e[1];if(this.childrenUrls.get(a))continue;let s=i.getExtension(a);if(s&&s.toLowerCase()==`.css`){if(n.isNullOrWhiteSpace(a)||r.checkIsAbsoluteUrl(a))continue;let{href:e}=await this.getActualCssLink(a,o);this.childrenUrls.set(a,e)}else{let e=r.getFullUrl(a,t);if(!n.startsWithAny(e.toString(),!0,`http://`,`https://`))continue;let i=(e.pathname+e.search).substring(1);if(this.errorLinks.indexOf(i)>=0)continue;try{let e=await this.fileParser.getFile(i,``,`blob`),t=URL.createObjectURL(e);this.childrenUrls.set(a,t)}catch(t){this.errorLinks.indexOf(i)<0&&this.errorLinks.push(i),this.logger.error(t),this.childrenUrls.set(a,e.toString())}}}let d=c.replace(/url\(["']?(.*?)["']?\)/gi,(e,t)=>r.checkIsAbsoluteUrl(t)?e:``);d=l.replaceFontSize(d),d=l.removeTextIndent(d),d=l.appendZeroTextIndentForCenterRightAlign(d);let f=e.convertStringToUint8Array(d),p=a.toBlob(f,{type:`text/css`}),m=URL.createObjectURL(p);return this.childrenUrls.set(t,m),{href:m,cssContent:d,isHref:!1}}catch(e){return this.logger.error(e),{href:t,cssContent:``,isHref:!0}}}async dispose(){this.childrenUrls.clear(),this.errorLinks&&this.errorLinks.splice(0),this.docBlobUrls.clear();for(let e of this.opaqueDocumentBaseUrls)try{URL.revokeObjectURL(e)}catch{}this.opaqueDocumentBaseUrls=[]}async resetScriptSrc(e,t){let n=t.getRoot();n||=``;let i=e.getElementsByTagName(`script`);for(let e=0;e<i.length;e++){let a=i[e].getAttribute(`src`);if(!(!a||a.startsWith(`/`))){if(!r.checkIsAbsoluteUrl(a)){let e=r.getFullUrl(a,n);r.checkIsAbsoluteUrl(n)?a=e.toString():(a=e.pathname+e.search,a=a.substring(1))}if(!r.checkIsAbsoluteUrl(a)){let o=r.getFullUrl(a,n),s=o.pathname+o.search;s=s.substring(1);let c=await this.fileParser.getFile(a,t.url,`blob`),l=URL.createObjectURL(c);i[e].src=l,i[e].setAttribute(u.HtmlSettings.LinkOriginHrefPropertyName,a)}}}}injectBaseUrl(e,t){let i=e.getElementsByTagName(`base`);for(let e=0;e<i.length;e++)if(!n.isNullOrWhiteSpace(i[e].href))return;let a=t;!n.isNullOrWhiteSpace(a)&&r.checkIsAbsoluteUrl(a)||(a=this.createOpaqueDocumentBaseUrl());let o=c.createElement(e,`base`,null,{href:a}),l=s.getDocumentHead(e);l.insertBefore(o,l.firstChild)}createOpaqueDocumentBaseUrl(){let e=URL.createObjectURL(new Blob([`<!doctype html><title></title>`],{type:`text/html`}));return this.opaqueDocumentBaseUrls.push(e),e}};exports.HtmlContentProcessor=d;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
1
|
+
import { convertArrayBufferToString as e, convertStringToUint8Array as t } from "../../../../kernal/common/encoding.mjs";
|
|
2
|
+
import { getRandomId as n } from "../../../../kernal/common/uuid.mjs";
|
|
3
|
+
import { isNullOrWhiteSpace as r, startsWithAny as i } from "../../../../kernal/common/text.mjs";
|
|
4
|
+
import { checkIsAbsoluteUrl as a, getFullUrl as o } from "../../../../kernal/common/url.mjs";
|
|
5
|
+
import { getExtension as s } from "../../../../kernal/common/path.mjs";
|
|
6
|
+
import { toBlob as c } from "../../../../kernal/common/buffer.mjs";
|
|
7
|
+
import { LastElementAttributeName as l } from "../../../../kernal/Constants.mjs";
|
|
8
|
+
import { compareTagName as u, getDocumentHead as d } from "../../../../kernal/html/finder.mjs";
|
|
9
|
+
import { createElement as f, injectCssContent as p } from "../../../../kernal/html/injector.mjs";
|
|
10
|
+
import { appendZeroTextIndentForCenterRightAlign as m, removeTextIndent as h, replaceFontSize as g } from "../../../../kernal/html/style.mjs";
|
|
11
11
|
import { HtmlSettings as _ } from "../../HtmlSettings.mjs";
|
|
12
12
|
//#region mediaTypes/html/renderer/html/HtmlContentProcessor.ts
|
|
13
13
|
var v = class {
|
|
@@ -24,64 +24,64 @@ var v = class {
|
|
|
24
24
|
let r = t[e];
|
|
25
25
|
if (r.textContent.trim() || r.classList.add("lhx-text-empty"), r.style && (r.style.fontSize || r.style.textIndent)) {
|
|
26
26
|
let e = r.getAttribute("style");
|
|
27
|
-
r.style.fontSize && (e =
|
|
27
|
+
r.style.fontSize && (e = g(e)), r.style.textIndent && (e = h(e)), r.setAttribute("style", e);
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
u(r.tagName, "TABLE") && (r.style.width = "100%", r.style.height = "auto"), n || (u(r.tagName, "SVG") || r.children.length == 0 && !u(r.parentElement.tagName, "SVG")) && (n = !0, r.setAttribute(l, "true")), r.getAttribute("epub:type") == "footnote" && r.style.setProperty("display", "none");
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
async resetCssHref(
|
|
33
|
-
let i =
|
|
32
|
+
async resetCssHref(e, t) {
|
|
33
|
+
let i = e.getElementsByTagName("link");
|
|
34
34
|
for (let a = i.length - 1; a >= 0; a--) {
|
|
35
35
|
let o = i[a].getAttribute("href");
|
|
36
|
-
if (!i[a].rel || i[a].rel.toLowerCase() != "stylesheet" ||
|
|
37
|
-
let { href: s, cssContent: c, isHref: l } = await this.getActualCssLink(o,
|
|
36
|
+
if (!i[a].rel || i[a].rel.toLowerCase() != "stylesheet" || r(o)) continue;
|
|
37
|
+
let { href: s, cssContent: c, isHref: l } = await this.getActualCssLink(o, t);
|
|
38
38
|
if (l && o) i[a].href = s, i[a].setAttribute(_.LinkOriginHrefPropertyName, o);
|
|
39
39
|
else if (c) {
|
|
40
|
-
let t =
|
|
41
|
-
|
|
40
|
+
let t = n(!0);
|
|
41
|
+
p(e, c, !1, t), i[a].parentElement?.removeChild(i[a]);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
async getActualCssLink(
|
|
46
|
-
if (
|
|
47
|
-
href:
|
|
45
|
+
async getActualCssLink(n, l) {
|
|
46
|
+
if (r(n) || a(n)) return {
|
|
47
|
+
href: n,
|
|
48
48
|
cssContent: "",
|
|
49
49
|
isHref: !0
|
|
50
50
|
};
|
|
51
51
|
try {
|
|
52
|
-
let
|
|
53
|
-
for (let
|
|
54
|
-
let
|
|
55
|
-
if (this.childrenUrls.get(
|
|
56
|
-
let
|
|
57
|
-
if (
|
|
58
|
-
if (t
|
|
59
|
-
let { href: e } = await this.getActualCssLink(
|
|
60
|
-
this.childrenUrls.set(
|
|
52
|
+
let u = await this.fileParser.getFile(n, l.url, "blob"), d = e(await u.arrayBuffer()), f = d.matchAll(/url\(["']?(.*?)["']?\)/gi);
|
|
53
|
+
for (let e of f) {
|
|
54
|
+
let t = e[1];
|
|
55
|
+
if (this.childrenUrls.get(t)) continue;
|
|
56
|
+
let c = s(t);
|
|
57
|
+
if (c && c.toLowerCase() == ".css") {
|
|
58
|
+
if (r(t) || a(t)) continue;
|
|
59
|
+
let { href: e } = await this.getActualCssLink(t, l);
|
|
60
|
+
this.childrenUrls.set(t, e);
|
|
61
61
|
} else {
|
|
62
|
-
let
|
|
63
|
-
if (!
|
|
64
|
-
let r = (
|
|
62
|
+
let e = o(t, n);
|
|
63
|
+
if (!i(e.toString(), !0, "http://", "https://")) continue;
|
|
64
|
+
let r = (e.pathname + e.search).substring(1);
|
|
65
65
|
if (this.errorLinks.indexOf(r) >= 0) continue;
|
|
66
66
|
try {
|
|
67
|
-
let e = await this.fileParser.getFile(r, "", "blob"),
|
|
68
|
-
this.childrenUrls.set(
|
|
69
|
-
} catch (
|
|
70
|
-
this.errorLinks.indexOf(r) < 0 && this.errorLinks.push(r), this.logger.error(
|
|
67
|
+
let e = await this.fileParser.getFile(r, "", "blob"), n = URL.createObjectURL(e);
|
|
68
|
+
this.childrenUrls.set(t, n);
|
|
69
|
+
} catch (n) {
|
|
70
|
+
this.errorLinks.indexOf(r) < 0 && this.errorLinks.push(r), this.logger.error(n), this.childrenUrls.set(t, e.toString());
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
let
|
|
75
|
-
|
|
76
|
-
let _ =
|
|
77
|
-
return this.childrenUrls.set(
|
|
74
|
+
let p = d.replace(/url\(["']?(.*?)["']?\)/gi, (e, t) => a(t) ? e : "");
|
|
75
|
+
p = g(p), p = h(p), p = m(p);
|
|
76
|
+
let _ = t(p), v = c(_, { type: "text/css" }), y = URL.createObjectURL(v);
|
|
77
|
+
return this.childrenUrls.set(n, y), {
|
|
78
78
|
href: y,
|
|
79
|
-
cssContent:
|
|
79
|
+
cssContent: p,
|
|
80
80
|
isHref: !1
|
|
81
81
|
};
|
|
82
|
-
} catch (
|
|
83
|
-
return this.logger.error(
|
|
84
|
-
href:
|
|
82
|
+
} catch (e) {
|
|
83
|
+
return this.logger.error(e), {
|
|
84
|
+
href: n,
|
|
85
85
|
cssContent: "",
|
|
86
86
|
isHref: !0
|
|
87
87
|
};
|
|
@@ -97,29 +97,29 @@ var v = class {
|
|
|
97
97
|
async resetScriptSrc(e, t) {
|
|
98
98
|
let n = t.getRoot();
|
|
99
99
|
n ||= "";
|
|
100
|
-
let
|
|
101
|
-
for (let e = 0; e <
|
|
102
|
-
let
|
|
103
|
-
if (!(!
|
|
104
|
-
if (!
|
|
105
|
-
let e = i
|
|
106
|
-
|
|
100
|
+
let r = e.getElementsByTagName("script");
|
|
101
|
+
for (let e = 0; e < r.length; e++) {
|
|
102
|
+
let i = r[e].getAttribute("src");
|
|
103
|
+
if (!(!i || i.startsWith("/"))) {
|
|
104
|
+
if (!a(i)) {
|
|
105
|
+
let e = o(i, n);
|
|
106
|
+
a(n) ? i = e.toString() : (i = e.pathname + e.search, i = i.substring(1));
|
|
107
107
|
}
|
|
108
|
-
if (!
|
|
109
|
-
let
|
|
108
|
+
if (!a(i)) {
|
|
109
|
+
let a = o(i, n), s = a.pathname + a.search;
|
|
110
110
|
s = s.substring(1);
|
|
111
|
-
let c = await this.fileParser.getFile(
|
|
112
|
-
|
|
111
|
+
let c = await this.fileParser.getFile(i, t.url, "blob"), l = URL.createObjectURL(c);
|
|
112
|
+
r[e].src = l, r[e].setAttribute(_.LinkOriginHrefPropertyName, i);
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
injectBaseUrl(e,
|
|
118
|
-
let
|
|
119
|
-
for (let e = 0; e <
|
|
120
|
-
let
|
|
121
|
-
!
|
|
122
|
-
let o =
|
|
117
|
+
injectBaseUrl(e, t) {
|
|
118
|
+
let n = e.getElementsByTagName("base");
|
|
119
|
+
for (let e = 0; e < n.length; e++) if (!r(n[e].href)) return;
|
|
120
|
+
let i = t;
|
|
121
|
+
!r(i) && a(i) || (i = this.createOpaqueDocumentBaseUrl());
|
|
122
|
+
let o = f(e, "base", null, { href: i }), s = d(e);
|
|
123
123
|
s.insertBefore(o, s.firstChild);
|
|
124
124
|
}
|
|
125
125
|
createOpaqueDocumentBaseUrl() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/common/data.cjs"),t=require("../../../../kernal/web/BrowserCapabilities.cjs"),n=require("../../../../kernal/html/injector.cjs"),r=require("../layout/ViewportCssVariableNames.cjs");var i=`<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head><body>{custom-htmls}</body></html>`,a=e=>i.replace(`{custom-htmls}`,e),o=t=>{let n=`<div style="min-height:50px;display:flex;justify-content:center;align-items:center;">The document is too big(`+e.formatFileSize(t)+`), can't be loaded.</div>`;return i.replace(`{custom-htmls}`,n)},s=(e,i,a,o)=>{let s=n.createElement(e,`iframe`,i);return t.BrowserCapabilities.isFirefox()?s.setAttribute(`src`,`javascript:`):s.setAttribute(`src`,`about:blank`),s.setAttribute(`data-role`,`content`),s.setAttribute(`frameborder`,`0`),s.setAttribute(`border`,`0`),s.setAttribute(`width`,`100%`),s.setAttribute(`height`,`100%`),s.setAttribute(`style`,`display:block`),o?.iframeGrow==`width`?(s.style.setProperty(`width`,`var(`+r.ViewportCssVariableNames.ContentContainerWidth+`)`),s.style.setProperty(`height`,`var(`+r.ViewportCssVariableNames.ContentContainerHeight+`)`)):o?.iframeGrow==`height`?(s.style.setProperty(`width`,`var(`+r.ViewportCssVariableNames.ContentContainerWidth+`)`),s.style.setProperty(`height`,`auto`)):a?(s.style.setProperty(`width`,`100%`),s.style.setProperty(`height`,`var(`+r.ViewportCssVariableNames.ContentContainerHeight+`)`)):(s.style.setProperty(`width`,`var(`+r.ViewportCssVariableNames.ContentContainerWidth+`)`),s.style.setProperty(`height`,`var(`+r.ViewportCssVariableNames.ContentContainerHeight+`)`)),s};exports.createIframe=s,exports.getHtmlTemplate=a,exports.getTooBigHtmlTemplate=o,exports.htmlTemplate=i;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { ILayoutGeometry } from '../layout/geometry/ILayoutGeometry';
|
|
2
|
+
|
|
1
3
|
export declare const htmlTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title></title></head><body>{custom-htmls}</body></html>";
|
|
2
4
|
export declare const getHtmlTemplate: (customHtmls: string) => string;
|
|
3
5
|
export declare const getTooBigHtmlTemplate: (contentLength: number) => string;
|
|
4
|
-
export declare const createIframe: (ownerDocument: Document, iframeId: string, forceScroll: boolean) => HTMLIFrameElement;
|
|
6
|
+
export declare const createIframe: (ownerDocument: Document, iframeId: string, forceScroll: boolean, geometry?: ILayoutGeometry) => HTMLIFrameElement;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { formatFileSize as e } from "../../../../kernal/common/data.mjs";
|
|
2
|
+
import { BrowserCapabilities as t } from "../../../../kernal/web/BrowserCapabilities.mjs";
|
|
3
|
+
import { createElement as n } from "../../../../kernal/html/injector.mjs";
|
|
4
4
|
import { ViewportCssVariableNames as r } from "../layout/ViewportCssVariableNames.mjs";
|
|
5
5
|
//#region mediaTypes/html/renderer/html/template.ts
|
|
6
|
-
var i = "<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title></title></head><body>{custom-htmls}</body></html>", a = (e) => i.replace("{custom-htmls}", e), o = (
|
|
7
|
-
let
|
|
8
|
-
return i.replace("{custom-htmls}",
|
|
9
|
-
}, s = (
|
|
10
|
-
let
|
|
11
|
-
return
|
|
6
|
+
var i = "<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title></title></head><body>{custom-htmls}</body></html>", a = (e) => i.replace("{custom-htmls}", e), o = (t) => {
|
|
7
|
+
let n = "<div style=\"min-height:50px;display:flex;justify-content:center;align-items:center;\">The document is too big(" + e(t) + "), can't be loaded.</div>";
|
|
8
|
+
return i.replace("{custom-htmls}", n);
|
|
9
|
+
}, s = (e, i, a, o) => {
|
|
10
|
+
let s = n(e, "iframe", i);
|
|
11
|
+
return t.isFirefox() ? s.setAttribute("src", "javascript:") : s.setAttribute("src", "about:blank"), s.setAttribute("data-role", "content"), s.setAttribute("frameborder", "0"), s.setAttribute("border", "0"), s.setAttribute("width", "100%"), s.setAttribute("height", "100%"), s.setAttribute("style", "display:block"), o?.iframeGrow == "width" ? (s.style.setProperty("width", "var(" + r.ContentContainerWidth + ")"), s.style.setProperty("height", "var(" + r.ContentContainerHeight + ")")) : o?.iframeGrow == "height" ? (s.style.setProperty("width", "var(" + r.ContentContainerWidth + ")"), s.style.setProperty("height", "auto")) : a ? (s.style.setProperty("width", "100%"), s.style.setProperty("height", "var(" + r.ContentContainerHeight + ")")) : (s.style.setProperty("width", "var(" + r.ContentContainerWidth + ")"), s.style.setProperty("height", "var(" + r.ContentContainerHeight + ")")), s;
|
|
12
12
|
};
|
|
13
13
|
//#endregion
|
|
14
14
|
export { s as createIframe, a as getHtmlTemplate, o as getTooBigHtmlTemplate, i as htmlTemplate };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/web/BrowserCapabilities.cjs"),t=require("../../../../kernal/EventNames.cjs"),n=require("../../../../kernal/common/text.cjs"),r=require("../../../../kernal/common/url.cjs"),i=require("../../../../kernal/Constants.cjs"),a=require("../../../../kernal/common/number.cjs"),o=require("../../../../kernal/html/finder.cjs"),s=require("../../../../kernal/html/injector.cjs"),c=require("../../../../kernal/html/parser.cjs"),l=require("../../../../kernal/html/image.cjs"),u=require("../../../../kernal/common/encoding.cjs"),d=require("../../HtmlSettings.cjs"),f=require("../style/ContentLayoutCssVariableNames.cjs"),p=require("./error-image.cjs");let m=require("perfect-debounce");var h=`lhx-svg`,g=`imageSizes-`,_=5,v=class{constructor(n,r,i){this.documentsProvider=n,this.rendererViewport=r,this.htmlOptions=i,this.documentImageSizesSummaries=new Map,this.blobUrls=new Map,this.isDisposed=!1,this.resetImageSizeTasks=[],this.onDocumentDisposing=e=>{this.revokeDocumentBlobUrls(e)},this.onImageElementsVisible=async e=>{for(let[t,n]of e.entries())await this.loadImages(t,n)},this.delayLoadOnImageElementsVisible=(0,m.debounce)(this.onImageElementsVisible,100),this.onLayoutChange=async()=>{await this.delayResetAllImageSize()},this.resetAllImageSize=async()=>{for(let e of this.documentsProvider.getLoadedDocuments())await this.resetImageSize(e)},this.delayResetAllImageSize=(0,m.debounce)(this.resetAllImageSize,100),this.prepareImageSize=async(n,r)=>{s.injectCssContent(r,`.${h} {width: 100% !important; height: auto !important; }`,!1,`lhx-svg-style`);let i=[...r.getElementsByTagName(`img`),...r.getElementsByTagName(`image`)],a=this.getImageSizesSummary(r);a.total=i.length;let c=this.documentsProvider.getDocuments().indexOf(n),l=this.getResourceId(),u=await this.getStorage(),d=null;c>=0&&u&&l&&(d=await u.get(g+l,c.toString()));let f=i.length>100;for(let r=0;r<i.length;r++){if(this.isDisposed)return;try{let a=i[r];a.parentElement&&o.compareTagName(a.parentElement.tagName,`SVG`)&&a.parentElement.classList.add(h);let s=this.getImageUrl(a),c=d?.find(e=>e.url==s);c||=await this.prefetchImageSize(n,a,!0),c&&(this.resetImageStyles(a,c.width,c.height),this.resetInlineImageSize(a)),f&&r%10==0&&(this.events.emit(t.EventNames.ProcessedImageCount,{doc:n,totalImageCount:i.length,processedImageCount:r}),await e.BrowserCapabilities.yieldToMain())}catch(e){this.logger.error(e)}}c>=0&&u&&l&&await this.persistImageSizes(u,l,c.toString(),d,a)},this.getImageUrl=e=>{let t=e.getAttribute(`data-preset-preview-url`)==`true`;return o.compareTagName(e.tagName,`IMAGE`)?t?e.getAttribute(`data-src`)??e.getAttribute(`xlink:href`)??e.getAttribute(`href`):e.getAttribute(`xlink:href`)??e.getAttribute(`href`):t?e.getAttribute(`data-src`):e.getAttribute(`src`)},this.resetImageStyles=(t,n,r)=>{if(n<=0||r<=0||!e.BrowserCapabilities.supportCssAspectRatio())return;this.setWidthAndHeight(t,n,r);let i=t;if(o.compareTagName(t.tagName,`IMAGE`)&&(i=t.parentElement),!i)return;i.setAttribute(`width`,`${n}`),i.setAttribute(`height`,`${r}`);let a=n/r,{columnWidth:s,columnHeight:c}=this.getColumnMetrics(),l=r;s>0&&n>s&&(l=s/n*r);let u=c>0?`min(${l}px,${c}px)`:`${l}px`,d=`calc(100% * var(${f.ContentLayoutCssVariableNames.MaxImageWidthRatio}))`;i.getAttribute(`style`)?(i.style.width=d,i.style.height=`auto`,i.style.maxWidth=d,i.style.maxHeight=u,i.style.aspectRatio=`${a}`):i.setAttribute(`style`,`max-width:${d};height:auto;max-height:${u};aspect-ratio:${a};width:${d}`)},this.resetImageWidthHeight=e=>{e.image.style?(e.image.style.setProperty(`width`,`auto`,`important`),e.image.style.setProperty(`max-width`,`100%`,`important`),e.image.style.setProperty(`max-height`,`100%`,`important`)):e.image.setAttribute(`style`,`width:auto !important;max-width:100% !important;max-height:100% !important`),this.resetImageHeight(e.image,e.columnWidth,e.columnHeight,this.htmlOptions.maxImageHeightRatio)},this.flushResetImageSizeTasks=async()=>{if(e.BrowserCapabilities.supportCssAspectRatio()){this.resetImageSizeTasks=[];return}for(;this.resetImageSizeTasks.length>0;){if(this.isDisposed){this.resetImageSizeTasks=[];return}let t=this.resetImageSizeTasks.shift();if(!t)break;this.resetImageWidthHeight(t),await e.BrowserCapabilities.yieldToMain()}},this.resetImageSize=async e=>{let t=e.getContentContainer()?.ownerDocument;if(!t||!o.getDocumentBody(t))return;let{columnWidth:n,columnHeight:r}=this.getColumnMetrics(),i=[...t.getElementsByTagName(`img`),...t.getElementsByTagName(`image`)];if(this.checkIsOnlyOneImageInDocument(t)){let t=i[0];this.handleOnlyOneImageInDocument(n,r,t),await this.loadSingleImage(e,t);return}for(let e of i)this.resetImageSizeTasks.push({image:e,columnWidth:n,columnHeight:r});await this.flushResetImageSizeTasks();for(let t=0;t<Math.min(_,i.length);t++)await this.loadSingleImage(e,i[t])},this.events=this.documentsProvider.owner.events,this.logger=this.documentsProvider.owner.loggerFactory.getLogger(this.constructor.name),this.bindEvents()}bindEvents(){this.events.on(t.EventNames.LayoutChange,this.onLayoutChange),this.events.on(t.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.on(t.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}unbindEvents(){this.events.off(t.EventNames.LayoutChange,this.onLayoutChange),this.events.off(t.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.off(t.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}addBlobUrl(e,t){if(!r.checkIsBlobUrl(t))return;let n=this.blobUrls.get(e);n?n.push(t):this.blobUrls.set(e,[t])}revokeDocumentBlobUrls(e){let t=this.blobUrls.get(e);if(t){for(let e of t)this.revokeObjectURL(e);this.blobUrls.delete(e)}}async preprocessImages(e){let t=e,n=(await t.getVirtualContentContainer())?.ownerDocument;n&&(await this.prepareImageSize(t,n),await this.setImagePreviewUrl(n))}async setImagePreviewUrl(e){let{default:t}=await Promise.resolve().then(()=>require("./placeholder.cjs")),n=e.getElementsByTagName(`img`),r=e.getElementsByTagName(`image`);for(let e=0;e<n.length;e++)this.applyPreviewUrl(n[e],n[e].getAttribute(`src`),t,!1);for(let e=0;e<r.length;e++){let n=r[e],i=n.getAttribute(`xlink:href`)??n.getAttribute(`href`);this.applyPreviewUrl(n,i,t,!0)}}applyPreviewUrl(e,t,r,i){let a=e.getAttribute(`data-preview-src`);n.isNullOrWhiteSpace(a)&&(a=r,e.setAttribute(`data-preview-src`,r)),t==r?e.removeAttribute(`data-loaded`):e.getAttribute(`data-src`)!=r&&e.setAttribute(`data-src`,t??``),i?e.setAttribute(`xlink:href`,a):e.src=a,e.setAttribute(`data-preset-preview-url`,`true`),this.setImageStyle(e)}setImageStyle(t){let r=t.parentElement;r&&r.children.length==1&&n.isNullOrWhiteSpace(r.innerText)&&(e.BrowserCapabilities.supportCssHas()||r.classList.add(d.HtmlSettings.BreakInsideAvoid),r.style.removeProperty(`width`),r.style.removeProperty(`height`))}async persistImageSizes(e,t,n,r,i){let a=Array.from(i.descriptors.values()).filter(e=>e.width>0);if(a.length==0)return;let o=g+t;if(r&&r.length>0){let t=new Set(r.map(e=>e.url)),i=a.filter(e=>!t.has(e.url));i.length>0&&(r.push(...i),await e.set(o,n,r))}else await e.set(o,n,a)}getResourceId(){let e=this.documentsProvider.owner.context;return n.isNullOrWhiteSpace(e.simpleId)?e.id:e.simpleId}async getStorage(){return await this.documentsProvider.owner.services.get(`storage`)}getImageSizesSummary(e){let t=this.documentImageSizesSummaries.get(e);return t||(t={total:0,checkedCount:0,descriptors:new Map},this.documentImageSizesSummaries.set(e,t)),t}async prefetchImageSize(e,t,n){let i=this.getImageUrl(t),o=t.getAttribute(`data-width`);if(o!=null){let e=a.parseNumber(t.getAttribute(`data-height`),0);return this.addImageDescriptor(t,i,a.parseNumber(o,0),e,!0)}if(!n)return this.addImageDescriptor(t,i,0,0,!1);let s=this.getImageSizesSummary(t.ownerDocument).descriptors.get(i);if(s)return s;let c=0,u=0;try{if(r.checkIsAbsoluteUrl(i)){let e=await l.getImageSize(i);c=e.width,u=e.height}else{let t=await e.fileParser.getFile(i,e.url,`blob`),n=t&&t.size>0?t:p.default;try{let e=await l.getImageSize(n);c=e.width,u=e.height}catch{}}}catch(e){this.logger.error(e)}return this.addImageDescriptor(t,i,c,u,c<=0)}revokeObjectURL(e){if(!(!e||!n.startsWith(e,`blob:`,!0)))try{URL.revokeObjectURL(e)}catch{}}addImageDescriptor(e,t,n,r,i){let a=this.getImageSizesSummary(e.ownerDocument),o=a.descriptors.get(t);return o?(!o.checked&&i&&(a.checkedCount+=1),o.width=n,o.height=r,o.url=t,o.checked=i,o):(o={url:t,width:n,height:r,checked:i},i&&(a.checkedCount+=1),a.descriptors.set(t,o),o)}setWidthAndHeight(e,t,n){t>0&&n>0&&a.parseNumber(e.getAttribute(`data-width`),0,`parseInt`)<=0&&(e.setAttribute(`data-width`,`${t}`),e.setAttribute(`data-height`,`${n}`))}getColumnMetrics(){let e=this.rendererViewport.getLayoutMetrics();return{columnWidth:e.columnWidth,columnHeight:e.columnHeight}}resetInlineImageSize(e){let t=a.parseNumber(e.getAttribute(`data-width`),0),n=a.parseNumber(e.getAttribute(`data-height`),0);if(t<=0||n<=0)return;let r=!1;(n<=200||e.previousSibling?.nodeType==Node.TEXT_NODE&&e.previousSibling.textContent?.trim()?.length>0||e.nextSibling?.nodeType==Node.TEXT_NODE&&e.nextSibling.textContent?.trim()?.length>0)&&(r=this.checkIsInlineImage(e,t,n).foundInlineImage);let i=o.compareTagName(e.tagName,`IMG`)?e:e.parentElement;!r||!i||(e.getAttribute(`style`)?(e.style.setProperty(`width`,`auto`,`important`),e.style.setProperty(`max-width`,`100%`,`important`),e.style.setProperty(`height`,`1em`,`important`),e.style.setProperty(`margin-block-start`,`0`,`important`),e.style.setProperty(`margin-block-end`,`0`,`important`)):e.setAttribute(`style`,`width:auto !important;max-width:100% !important;height:1em !important;margin-block-start:0 !important;margin-block-end:0 !important;`),i.style.setProperty(`vertical-align`,`-0.2em`,`important`),i.setAttribute(`data-inline-image`,`true`))}handleOnlyOneImageInDocument(e,t,r){let i=r.ownerDocument,a=o.getDocumentBody(i);if(!n.isNullOrWhiteSpace(a.getAttribute(`data-handled-one-image`)))return;a.setAttribute(`data-handled-one-image`,`true`),a.style.setProperty(`display`,`flex`,`important`),a.style.setProperty(`height`,`100%`,`important`),a.style.setProperty(`justify-content`,`center`,`important`),a.style.setProperty(`align-items`,`center`,`important`);let s=r;o.compareTagName(r.parentElement?.tagName,`SVG`)&&(s=r.parentElement,r.style.setProperty(`width`,`auto`,`important`),r.style.setProperty(`max-width`,`100%`,`important`),r.style.setProperty(`max-height`,t+`px`,`important`),r.style.setProperty(`display`,`block`,`important`)),s.style.setProperty(`width`,`auto`,`important`),s.style.setProperty(`max-width`,`100%`,`important`),s.style.setProperty(`display`,`block`,`important`),s.parentElement&&(s.parentElement.style.textAlign=`center`),this.resetImageHeight(r,e,t,.95,!0)}resetImageHeight(e,t,n,r,i){let s=o.compareTagName(e.tagName,`IMAGE`)?e.parentElement:e;if(!s)return;let c=a.parseNumber(e.getAttribute(`data-width`),0),l=a.parseNumber(e.getAttribute(`data-height`),0);c<=0||l<=0||this.forceSetImageHeight(s,t,n,c,l,r,i)}forceSetImageHeight(t,n,r,i,a,o,s){if(e.BrowserCapabilities.supportCssMinMaxFunction()){let e;e=o&&s?`min(calc(${a}px * ${o}),calc(var(${f.ContentLayoutCssVariableNames.ColumnHeight}) * ${o}),calc(var(${f.ContentLayoutCssVariableNames.ColumnWidth}) / ${i} * ${a} * ${o}))`:`min(calc(${a}px * var(${f.ContentLayoutCssVariableNames.MaxImageHeightRatio})),calc(var(${f.ContentLayoutCssVariableNames.ColumnHeight}) * var(${f.ContentLayoutCssVariableNames.MaxImageHeightRatio})),calc(var(${f.ContentLayoutCssVariableNames.ColumnWidth}) / ${i} * ${a} * var(${f.ContentLayoutCssVariableNames.MaxImageHeightRatio})))`,t.style.setProperty(`height`,e,`important`)}else{let e=this.calcImageHeight(n,r,i,a)*o;t.style.setProperty(`height`,e+`px`,`important`)}}calcImageHeight(e,t,n,r){return t>=r&&e>=n?r:e/t<=n/r?e/n*r:t}checkIsOnlyOneImageInDocument(e){let t=o.getDocumentBody(e);return!t||t.textContent.trim()?!1:t.getElementsByTagName(`img`).length==1||t.getElementsByTagName(`image`).length==1}checkIsInlineTag(e){let t=e.nodeName;return!n.isNullOrWhiteSpace(t)&&this.htmlOptions.htmlInlineTags.indexOf(t.toLowerCase())>=0}checkIsInlineImage(e,t,n){let{foundInlineImage:r,imageHeight:i}=this.getInlineImageProperties(e,n);if(r)return{foundInlineImage:r,imageHeight:i};let a=e.parentElement,s=e;for(;a&&!o.compareTagName(a.tagName,`BODY`);){if(a.children.length>1||a.children.length==1&&a.textContent.trim().length>0)return this.getInlineImageProperties(s,n);s=a,a=a.parentElement}return{foundInlineImage:r,imageHeight:i}}findSiblingNodes(e){let t=e.previousSibling,r=e.nextSibling;for(;t!=null&&!(!n.isNullOrWhiteSpace(t.textContent)||t.nodeType==Node.ELEMENT_NODE);)t=t.previousSibling;for(;r!=null&&!(!n.isNullOrWhiteSpace(r.textContent)||r.nodeType==Node.ELEMENT_NODE);)r=r.nextSibling;return{previousSiblingNode:t,nextSiblingNode:r}}getInlineImageProperties(e,t){let{previousSiblingNode:r,nextSiblingNode:i}=this.findSiblingNodes(e),a=!1,s;if(!r&&!i)return{foundInlineImage:a,imageHeight:s};let c=r?.ownerDocument?.defaultView??i?.ownerDocument?.defaultView,l;if(r?.nodeType==Node.TEXT_NODE&&!n.isNullOrWhiteSpace(r.nodeValue)?l=r.parentElement:i?.nodeType==Node.TEXT_NODE&&!n.isNullOrWhiteSpace(i.nodeValue)?l=i.parentElement:r&&this.checkIsInlineTag(r)?l=r:i&&this.checkIsInlineTag(i)&&(l=i),!l)return{foundInlineImage:a,imageHeight:s};let u=1.25,d=c?.getComputedStyle(l),f,p,m;d?(f=parseFloat(d.fontSize),p=parseFloat(d.lineHeight),m=parseFloat(d.height)):(f=20,p=f*u,m=p);let h=p>f*u?f*u:p;return s=this.checkElementIsFootnote(e)||o.compareTagName(e.parentElement?.tagName,`A`)&&(o.compareTagName(e.parentElement?.parentElement?.tagName,`SUB`)||o.compareTagName(e.parentElement?.parentElement?.tagName,`SUP`))?f:m&&m<=h?m:h,t&&t<s&&(s=t),a=!0,{foundInlineImage:a,imageHeight:s}}checkElementIsFootnote(e){return e.getAttribute(`class`)?.indexOf(`footnote`)>=0||e.getAttribute(`epub:type`)==`noteref`||o.compareTagName(e.tagName,`SUB`)||o.compareTagName(e.tagName,`SUP`)?!0:e.children.length>0&&this.checkElementIsFootnote(e.children[0])}async loadImages(e,t){let n=e;if(!(!n||!t?.length))for(let r of t){if(this.isDisposed||!r)return;let t=r.ownerDocument.defaultView;if(t){if(r instanceof t.HTMLImageElement||r instanceof t.SVGImageElement){let e=r.getAttribute(i.ElementInitialNumberName),t=r.ownerDocument.querySelector(`[${i.ElementInitialNumberName}='${e}']`);t&&await this.loadSingleImage(n,t)}else{let t=r.getElementsByTagName(`img`);for(let e=0;e<t.length;e++)await this.loadSingleImage(n,t[e]);let a=r.getAttribute(i.ElementInitialNumberName),o=e.getContentContainer()?.querySelector(`[${i.ElementInitialNumberName}='${a}']`),s=o&&o!=r?o.getElementsByTagName(`image`):r.getElementsByTagName(`image`);for(let e=0;e<s.length;e++)await this.loadSingleImage(n,s[e])}}}}async loadSingleImage(t,i){if(!i||!t)return;let a=i.getAttribute(`data-load-state`);if(a==`loaded`||a==`loading`||a==`fail`)return;i.setAttribute(`data-load-state`,`loading`),i.onload=()=>{i.setAttribute(`data-load-state`,`loaded`)},i.onerror=()=>{i.setAttribute(`data-load-state`,`fail`)};let s=i.getAttribute(`src`)??``,d=i.getAttribute(`data-src`)??``;n.isNullOrWhiteSpace(d)||(s=d);let f=s;if(!r.checkIsAbsoluteUrl(f)){let e=await t.fileParser.getFile(f,t.url,`blob`);if(e&&e.size>0){if(e.type?.toLowerCase()==`image/svg+xml`){let t=u.convertArrayBufferToString(await e.arrayBuffer()),n=c.getFormatDocument(t).querySelector(`image`);if(n){f=n.getAttribute(`xlink:href`)??n.getAttribute(`href`);try{let e=await l.getImageSize(f),t=e.width,n=e.height;i.setAttribute(`data-width`,t.toString()),i.setAttribute(`data-height`,n.toString());let{columnWidth:r,columnHeight:a}=this.getColumnMetrics();this.forceSetImageHeight(i,r,a,t,n,this.htmlOptions.maxImageHeightRatio)}catch(e){this.logger.error(e)}}else f=`data:image/svg+xml,`+encodeURIComponent(t)}else f=URL.createObjectURL(e),this.addBlobUrl(t,f)}else f=p.default}if(o.compareTagName(i.tagName,`IMG`)){let e=i;if(e.src=f,e.decode)try{await e.decode()}catch(n){this.logger.error(`image decode failed`,`imageUrl`,f,n),this.revokeObjectURL(f),setTimeout(async()=>{try{let n=await t.fileParser.getFile(s,t.url,`blob`);if(n&&n.size>0){let r=URL.createObjectURL(n);this.addBlobUrl(t,r),e.src=r}else e.src=p.default}catch(t){this.logger.error(t),e.src=p.default}},500)}}else e.BrowserCapabilities.isSafari()?i.href.baseVal=f:i.setAttribute(`xlink:href`,f)}async dispose(){this.isDisposed=!0,this.unbindEvents(),this.documentImageSizesSummaries.clear(),this.resetImageSizeTasks=[];for(let e of[...this.blobUrls.keys()])this.revokeDocumentBlobUrls(e);this.blobUrls.clear()}};exports.HtmlImageLoader=v;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/EventNames.cjs"),t=require("../../../../kernal/common/encoding.cjs"),n=require("../../../../kernal/web/BrowserCapabilities.cjs"),r=require("../../../../kernal/common/text.cjs"),i=require("../../../../kernal/common/url.cjs"),a=require("../../../../kernal/Constants.cjs"),o=require("../../../../kernal/common/number.cjs"),s=require("../../../../kernal/html/finder.cjs"),c=require("../../../../kernal/html/injector.cjs"),l=require("../../../../kernal/web/scheduler.cjs"),u=require("../../../../kernal/html/parser.cjs"),d=require("../../../../kernal/html/image.cjs"),f=require("../../HtmlSettings.cjs"),p=require("../style/ContentLayoutCssVariableNames.cjs"),m=require("./error-image.cjs"),h=require("./htmlImagePlaceholderUrl.cjs"),g=require("./htmlImageFitStyles.cjs");let _=require("perfect-debounce");var v=`lhx-svg`,y=5,b=`.${v} {max-width: var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth}) !important; width: auto !important; height: auto !important; }`,x=`*,p,div{text-align:center;margin-block:0 !important;margin-inline:auto !important;text-indent:0 !important;padding:0 !important;line-height:0 !important}`,S=e=>r.isNullOrWhiteSpace(e)?!0:h.isHtmlPlaceholderImageUrl(e),C=e=>{let t=e.querySelectorAll(`img, image`);return t.length>0?[...t]:[...e.getElementsByTagName(`img`),...e.getElementsByTagName(`image`)]},w=e=>s.compareTagName(e.tagName,`IMAGE`),T=(e,t,n=!1)=>{let r=e.style;if(!r){let r=Object.entries(t).map(([e,t])=>n?`${e}:${t} !important`:`${e}:${t}`).join(`;`);e.setAttribute(`style`,r);return}for(let[e,i]of Object.entries(t))r.setProperty(e,i,n?`important`:``)},E=class{constructor(e,t,n){this.documentsProvider=e,this.rendererViewport=t,this.htmlOptions=n,this.documentImageSizeMaps=new Map,this.blobUrls=new Map,this.isDisposed=!1,this.onDocumentDisposing=e=>{this.revokeDocumentBlobUrls(e),this.documentImageSizeMaps.delete(e)},this.onImageElementsVisible=async e=>{if(!this.isDisposed)for(let[t,n]of e.entries()){if(this.isDisposed)return;await this.loadImages(t,n)}},this.delayLoadOnImageElementsVisible=(0,_.debounce)(this.onImageElementsVisible,100),this.onLayoutChange=async()=>{await this.delayResetAllImageSize()},this.onDocumentLoad=async e=>{this.isDisposed||await this.resetImageSize(e)},this.resetAllImageSize=async()=>{if(!this.isDisposed)for(let e of this.documentsProvider.getLoadedDocuments()){if(this.isDisposed)return;await this.resetImageSize(e)}},this.delayResetAllImageSize=(0,_.debounce)(this.resetAllImageSize,100),this.events=this.documentsProvider.owner.events,this.logger=this.documentsProvider.owner.loggerFactory.getLogger(this.constructor.name),this.bindEvents()}bindEvents(){this.events.on(e.EventNames.LayoutChange,this.onLayoutChange),this.events.on(e.EventNames.DocumentLoad,this.onDocumentLoad),this.events.on(e.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.on(e.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}unbindEvents(){this.events.off(e.EventNames.LayoutChange,this.onLayoutChange),this.events.off(e.EventNames.DocumentLoad,this.onDocumentLoad),this.events.off(e.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.off(e.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}addBlobUrl(e,t){if(!i.checkIsBlobUrl(t))return;let n=this.blobUrls.get(e);if(!n){this.blobUrls.set(e,[t]);return}n.indexOf(t)<0&&n.push(t)}revokeDocumentBlobUrls(e){let t=this.blobUrls.get(e);if(t){for(let e of t)this.revokeObjectURL(e);this.blobUrls.delete(e)}}removeTrackedBlobUrl(e,t){let n=this.blobUrls.get(e);if(!n)return;let r=n.filter(e=>e!=t);if(r.length==0){this.blobUrls.delete(e);return}this.blobUrls.set(e,r)}async preprocessImages(e){let t=e,n=(await t.getVirtualContentContainer())?.ownerDocument;n&&(await this.prepareImageSize(t,n),this.setImagePreviewUrl(n),this.applyOnlyOneImageStyles(n))}setImagePreviewUrl(e){let t=C(e);for(let e of t)this.applyPreviewUrl(e,this.getImageUrl(e))}applyPreviewUrl(e,t){let n=o.parseNumber(e.getAttribute(`data-width`),0),i=o.parseNumber(e.getAttribute(`data-height`),0),a=h.createHtmlPlaceholderImageUrl(n,i),s=e.getAttribute(`data-preview-src`);if(S(s)&&(s=a,e.setAttribute(`data-preview-src`,a)),!r.isNullOrWhiteSpace(t)&&!S(t)){let n=e.getAttribute(`data-src`);(r.isNullOrWhiteSpace(n)||!S(n))&&e.setAttribute(`data-src`,t)}this.setImageSource(e,s),e.setAttribute(`data-preset-preview-url`,`true`),this.setImageStyle(e)}setImageSource(e,t){if(s.compareTagName(e.tagName,`IMG`)){e.src=t;return}if(n.BrowserCapabilities.isSafari()){e.href.baseVal=t;return}e.setAttribute(`xlink:href`,t)}setImageStyle(e){let t=e.parentElement;t&&t.children.length==1&&r.isNullOrWhiteSpace(t.innerText)&&(n.BrowserCapabilities.supportCssHas()||t.classList.add(f.HtmlSettings.BreakInsideAvoid),t.style.removeProperty(`width`),t.style.removeProperty(`height`))}async prepareImageSize(t,n){c.injectCssContent(n,b,!1,`lhx-svg-style`),this.checkIsOnlyOneImageInDocument(n)&&c.injectCssContent(n,x,!1,`only-one-image`);let i=C(n),a=this.getImageSizeMap(t),o=await this.loadImageSizes(t);if(o)for(let e of o)!r.isNullOrWhiteSpace(e.url)&&e.width>0&&a.set(e.url,e);let u=i.length>100;for(let n=0;n<i.length;n++){if(this.isDisposed)return;try{let r=i[n];r.parentElement&&s.compareTagName(r.parentElement.tagName,`SVG`)&&r.parentElement.classList.add(v);let o=this.getImageUrl(r),c=o?a.get(o):void 0;c||=await this.prefetchImageSize(t,r),c&&(this.resetImageStyles(r,c.width,c.height),this.resetInlineImageSize(r)),u&&(n%10==0||n===i.length-1)&&(this.events.emit(e.EventNames.ProcessedImageCount,{doc:t,totalImageCount:i.length,processedImageCount:n===i.length-1?i.length:n}),await l.yieldToMain())}catch(e){this.logger.error(e)}}let d=Array.from(a.values()).filter(e=>e.width>0&&!r.isNullOrWhiteSpace(e.url));if(d.length>0){if(o&&o.length>0){let e=new Set(o.map(e=>e.url)),n=d.filter(t=>!e.has(t.url));n.length>0&&await this.persistImageSizes(t,n);return}await this.persistImageSizes(t,d)}}async loadImageSizes(e){return[]}async persistImageSizes(e,t){}getImageSizeMap(e){let t=this.documentImageSizeMaps.get(e);return t||(t=new Map,this.documentImageSizeMaps.set(e,t)),t}getImageUrl(e){let t=e.getAttribute(`data-preset-preview-url`)==`true`;return w(e)?t?e.getAttribute(`data-src`)??e.getAttribute(`xlink:href`)??e.getAttribute(`href`)??``:e.getAttribute(`xlink:href`)??e.getAttribute(`href`)??``:t?e.getAttribute(`data-src`)??``:e.getAttribute(`src`)??``}async prefetchImageSize(e,t){let n=this.getImageUrl(t);if(r.isNullOrWhiteSpace(n))return;let a=t.getAttribute(`data-width`);if(a!=null){let r=o.parseNumber(a,0),i=o.parseNumber(t.getAttribute(`data-height`),0);return this.addImageDescriptor(e,n,r,i)}let s=this.getImageSizeMap(e).get(n);if(s)return s;let c=0,l=0;try{if(i.checkIsAbsoluteUrl(n)){let e=await d.getImageSize(n);c=e.width,l=e.height}else{let t=await e.fileParser.getFile(n,e.url,`blob`),r=t&&t.size>0?t:m.default;try{let e=await d.getImageSize(r);c=e.width,l=e.height}catch{}}}catch(e){this.logger.error(e)}return this.addImageDescriptor(e,n,c,l)}revokeObjectURL(e,t){if(i.checkIsBlobUrl(e)){try{URL.revokeObjectURL(e)}catch{}t&&this.removeTrackedBlobUrl(t,e)}}addImageDescriptor(e,t,n,r){let i=this.getImageSizeMap(e),a=i.get(t)??{url:t,width:n,height:r};return a.url=t,a.width=n,a.height=r,i.set(t,a),a}setWidthAndHeight(e,t,n){t>0&&n>0&&o.parseNumber(e.getAttribute(`data-width`),0,`parseInt`)<=0&&(e.setAttribute(`data-width`,`${t}`),e.setAttribute(`data-height`,`${n}`))}getColumnMetrics(){let e=this.rendererViewport.getLayoutMetrics();return{columnWidth:e.columnWidth,columnHeight:e.columnHeight}}resetImageStyles(e,t,r){if(t<=0||r<=0||!n.BrowserCapabilities.supportCssAspectRatio())return;this.setWidthAndHeight(e,t,r);let i=w(e)?e.parentElement:e;i&&(i.setAttribute(`width`,`${t}`),i.setAttribute(`height`,`${r}`),T(i,g.getImageFitStyles(t,r)))}resetImageWidthHeight(e,t,n){T(e,{width:`auto`,"max-width":`var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth})`,"max-height":`var(${p.ContentLayoutCssVariableNames.ColumnBoxHeight})`},!0),this.resetImageHeight(e,t,n,this.htmlOptions.maxImageHeightRatio)}async resetImageSize(e){let t=e.getContentContainer()?.ownerDocument;if(!t||!s.getDocumentBody(t))return;let{columnWidth:r,columnHeight:i}=this.getColumnMetrics(),a=this.getOnlyImageInDocument(t);if(a){this.handleOnlyOneImageInDocument(r,i,a),await this.loadSingleImage(e,a);return}let o=C(t);if(!n.BrowserCapabilities.supportCssAspectRatio())for(let e of o){if(this.isDisposed)return;this.resetImageWidthHeight(e,r,i),await l.yieldToMain()}for(let t=0;t<Math.min(y,o.length);t++){if(this.isDisposed)return;await this.loadSingleImage(e,o[t])}}resetInlineImageSize(e){let t=o.parseNumber(e.getAttribute(`data-width`),0),n=o.parseNumber(e.getAttribute(`data-height`),0);if(t<=0||n<=0||n>200&&!(e.previousSibling?.nodeType==Node.TEXT_NODE&&(e.previousSibling.textContent?.trim()?.length??0)>0||e.nextSibling?.nodeType==Node.TEXT_NODE&&(e.nextSibling.textContent?.trim()?.length??0)>0)||!this.isInlineImage(e))return;let r=s.compareTagName(e.tagName,`IMG`)?e:e.parentElement;r&&(T(e,{width:`auto`,"max-width":`100%`,height:`1em`,"margin-block-start":`0`,"margin-block-end":`0`},!0),r.style.setProperty(`vertical-align`,`-0.2em`,`important`),r.setAttribute(`data-inline-image`,`true`))}applyOnlyOneImageStyles(e){let t=this.getOnlyImageInDocument(e);if(!t)return;let{columnWidth:n,columnHeight:r}=this.getColumnMetrics();this.handleOnlyOneImageInDocument(n,r,t)}handleOnlyOneImageInDocument(e,t,n){let r=n.ownerDocument,i=s.getDocumentBody(r);if(!i)return;c.injectCssContent(r,x,!1,`only-one-image`),i.setAttribute(`data-handled-one-image`,`true`),T(i,{display:`flex`,height:`100%`,"justify-content":`center`,"align-items":`center`},!0),this.clearPercentageSizeAttributes(n);let a=n;s.compareTagName(n.parentElement?.tagName,`SVG`)&&(a=n.parentElement,this.clearPercentageSizeAttributes(a),T(n,{width:`auto`,"max-width":`var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth})`,"max-height":t+`px`,display:`block`},!0)),T(a,{width:`auto`,"max-width":`var(${p.ContentLayoutCssVariableNames.ColumnBoxWidth})`,display:`block`},!0),a.parentElement&&(a.parentElement.style.textAlign=`center`),this.resetImageHeight(n,e,t,.95,!0)}clearPercentageSizeAttributes(e){for(let t of[`width`,`height`]){let n=e.getAttribute(t);n&&n.includes(`%`)&&e.removeAttribute(t)}}resetImageHeight(e,t,n,r,i){let a=w(e)?e.parentElement:e;if(!a)return;let{width:o,height:s}=this.getImageIntrinsicSize(e);o<=0||s<=0||(this.setWidthAndHeight(e,o,s),this.forceSetImageHeight(a,t,n,o,s,r,i))}forceSetImageHeight(e,t,r,i,a,o,s){if(n.BrowserCapabilities.supportCssMinMaxFunction()){let t=g.getImageHeightRatioExpr(o,s);e.style.setProperty(`height`,g.getImageForcedHeightCss(i,a,t),`important`);return}let c=this.calcImageHeight(t,r,i,a)*o;e.style.setProperty(`height`,c+`px`,`important`)}calcImageHeight(e,t,n,r){return t>=r&&e>=n?r:e/t<=n/r?e/n*r:t}getImageIntrinsicSize(e){let t=o.parseNumber(e.getAttribute(`data-width`),0),n=o.parseNumber(e.getAttribute(`data-height`),0);if(t>0&&n>0)return{width:t,height:n};if(!w(e)){let t=e;if(t.naturalWidth>0&&t.naturalHeight>0)return{width:t.naturalWidth,height:t.naturalHeight}}return{width:0,height:0}}hasNonImageText(e){let t=e.ownerDocument;if(!t)return!!e.textContent?.trim();let n=t.createTreeWalker(e,NodeFilter.SHOW_TEXT),r=n.nextNode();for(;r;){if(r.textContent?.trim())return!0;r=n.nextNode()}return!1}getOnlyImageInDocument(e){let t=s.getDocumentBody(e);if(!t)return;let n=C(t);if(n.length==1&&!(!t.classList.contains(`lhx-text-empty`)&&this.hasNonImageText(t)))return n[0]}checkIsOnlyOneImageInDocument(e){return!!this.getOnlyImageInDocument(e)}checkIsInlineTag(e){let t=e.nodeName;if(r.isNullOrWhiteSpace(t))return!1;let n=t.toLowerCase();return n==`img`||n==`image`||this.htmlOptions.htmlInlineTags.indexOf(n)>=0}isInlineImage(e){if(this.hasInlineSiblings(e))return!0;let t=e.parentElement,n=e;for(;t&&!s.compareTagName(t.tagName,`BODY`);){if(t.children.length>1||t.children.length==1&&t.textContent.trim().length>0)return this.hasInlineSiblings(n);n=t,t=t.parentElement}return!1}findSiblingNodes(e){let t=e.previousSibling,n=e.nextSibling;for(;t!=null&&!(!r.isNullOrWhiteSpace(t.textContent)||t.nodeType==Node.ELEMENT_NODE);)t=t.previousSibling;for(;n!=null&&!(!r.isNullOrWhiteSpace(n.textContent)||n.nodeType==Node.ELEMENT_NODE);)n=n.nextSibling;return{previousSiblingNode:t,nextSiblingNode:n}}hasInlineSiblings(e){let{previousSiblingNode:t,nextSiblingNode:n}=this.findSiblingNodes(e);return!t&&!n?!1:t?.nodeType==Node.TEXT_NODE&&!r.isNullOrWhiteSpace(t.nodeValue)||n?.nodeType==Node.TEXT_NODE&&!r.isNullOrWhiteSpace(n.nodeValue)||t&&this.checkIsInlineTag(t)||n&&this.checkIsInlineTag(n)}async loadImages(e,t){let n=e;if(!(!n||!t?.length))for(let r of t){if(this.isDisposed||!r)return;let t=r.ownerDocument.defaultView;if(!t)continue;if(r instanceof t.window.HTMLImageElement||r instanceof t.window.SVGImageElement){let e=this.queryOriginElement(r.ownerDocument,r);e&&await this.loadSingleImage(n,e);continue}let i=r.getElementsByTagName(`img`);for(let e=0;e<i.length;e++)await this.loadSingleImage(n,i[e]);let a=this.queryOriginElement(e.getContentContainer(),r)??r,o=a==r?r.getElementsByTagName(`image`):a.getElementsByTagName(`image`);for(let e=0;e<o.length;e++)await this.loadSingleImage(n,o[e])}}queryOriginElement(e,t){let n=t.getAttribute(a.ElementInitialNumberName);return!e||r.isNullOrWhiteSpace(n)?t:e.querySelector(`[data-initial-index='${n}']`)??t}async loadSingleImage(e,t){if(!t||!e||this.isDisposed)return;let n=t.getAttribute(`data-load-state`);if(n==`loaded`||n==`loading`||n==`fail`)return;let i=this.getImageUrl(t);if(r.isNullOrWhiteSpace(i)){t.setAttribute(`data-load-state`,`fail`);return}t.setAttribute(`data-load-state`,`loading`),t.onload=()=>{t.setAttribute(`data-load-state`,`loaded`),this.applyOnlyOneImageStyles(t.ownerDocument)},t.onerror=()=>{t.setAttribute(`data-load-state`,`fail`)};let a=await this.resolveLoadUrl(e,i,t);if(this.isDisposed){this.revokeObjectURL(a,e);return}if(s.compareTagName(t.tagName,`IMG`)){let n=t;if(n.src=a,!await this.waitForImageReady(n)){this.revokeObjectURL(a,e),this.retryLoadAfterDecodeFailure(e,n,i);return}this.applyOnlyOneImageStyles(t.ownerDocument);return}this.setImageSource(t,a),this.applyOnlyOneImageStyles(t.ownerDocument)}waitForImageReady(e){return e.complete?Promise.resolve(this.isImageUsable(e)):new Promise(t=>{let n=!1,r=r=>{n||(n=!0,e.removeEventListener(`load`,i),e.removeEventListener(`error`,a),t(r))},i=()=>r(!0),a=()=>r(this.isImageUsable(e));e.addEventListener(`load`,i),e.addEventListener(`error`,a),typeof e.decode==`function`&&e.decode().then(()=>r(!0)).catch(()=>{this.isImageUsable(e)&&r(!0)})})}isImageUsable(e){return e.complete&&e.naturalWidth>0}retryLoadAfterDecodeFailure(e,t,n){setTimeout(async()=>{if(!this.isDisposed)try{let r=await e.fileParser.getFile(n,e.url,`blob`);if(this.isDisposed)return;if(r&&r.size>0){let n=URL.createObjectURL(r);this.addBlobUrl(e,n),t.src=n}else t.src=m.default}catch(e){this.logger.error(e),this.isDisposed||(t.src=m.default)}},500)}async resolveLoadUrl(e,t,n){if(i.checkIsAbsoluteUrl(t))return t;let r=await e.fileParser.getFile(t,e.url,`blob`);if(!r||r.size<=0)return m.default;if(r.type?.toLowerCase()==`image/svg+xml`)return await this.resolveSvgBlobUrl(e,r,n);let a=URL.createObjectURL(r);return this.addBlobUrl(e,a),a}async resolveSvgBlobUrl(e,n,a){let o=t.convertArrayBufferToString(await n.arrayBuffer()),s=u.getFormatDocument(o).querySelector(`image`);if(!s)return`data:image/svg+xml,`+encodeURIComponent(o);let c=s.getAttribute(`xlink:href`)??s.getAttribute(`href`)??``;if(r.isNullOrWhiteSpace(c))return`data:image/svg+xml,`+encodeURIComponent(o);let l=c,f=c;if(!i.checkIsAbsoluteUrl(c)){let t=await e.fileParser.getFile(c,e.url,`blob`);if(!t||t.size<=0)return m.default;f=URL.createObjectURL(t),this.addBlobUrl(e,f),l=t}try{let e=await d.getImageSize(l);a.setAttribute(`data-width`,e.width.toString()),a.setAttribute(`data-height`,e.height.toString());let{columnWidth:t,columnHeight:n}=this.getColumnMetrics();this.forceSetImageHeight(a,t,n,e.width,e.height,this.htmlOptions.maxImageHeightRatio)}catch(e){this.logger.error(e)}return f}async dispose(){this.isDisposed=!0,this.delayLoadOnImageElementsVisible.cancel(),this.delayResetAllImageSize.cancel(),this.unbindEvents(),this.documentImageSizeMaps.clear();for(let e of[...this.blobUrls.keys()])this.revokeDocumentBlobUrls(e);this.blobUrls.clear()}};exports.HtmlImageLoader=E;
|
|
@@ -3,38 +3,39 @@ import { HtmlOptions } from '../../HtmlOptions';
|
|
|
3
3
|
import { IHtmlDocument } from '../IHtmlDocument';
|
|
4
4
|
import { HtmlLayoutMetrics } from '../layout/HtmlLayoutMetrics';
|
|
5
5
|
import { IRendererViewport } from '../../../../kernal/IRendererViewport';
|
|
6
|
-
import { IHtmlImageLoader } from './IHtmlImageLoader';
|
|
6
|
+
import { IHtmlImageLoader, ImageSizeDescriptor } from './IHtmlImageLoader';
|
|
7
7
|
|
|
8
8
|
export declare class HtmlImageLoader implements IHtmlImageLoader {
|
|
9
9
|
private readonly documentsProvider;
|
|
10
10
|
private readonly rendererViewport;
|
|
11
11
|
private readonly htmlOptions;
|
|
12
|
-
private readonly
|
|
12
|
+
private readonly documentImageSizeMaps;
|
|
13
13
|
private readonly blobUrls;
|
|
14
14
|
private readonly events;
|
|
15
15
|
private readonly logger;
|
|
16
16
|
private isDisposed;
|
|
17
|
-
private resetImageSizeTasks;
|
|
18
17
|
constructor(documentsProvider: IDocumentsProvider<IHtmlDocument>, rendererViewport: IRendererViewport<HtmlLayoutMetrics>, htmlOptions: HtmlOptions);
|
|
19
18
|
private bindEvents;
|
|
20
19
|
private unbindEvents;
|
|
21
20
|
private onDocumentDisposing;
|
|
22
21
|
private addBlobUrl;
|
|
23
22
|
private revokeDocumentBlobUrls;
|
|
23
|
+
private removeTrackedBlobUrl;
|
|
24
24
|
private onImageElementsVisible;
|
|
25
25
|
private delayLoadOnImageElementsVisible;
|
|
26
26
|
private onLayoutChange;
|
|
27
|
+
private onDocumentLoad;
|
|
27
28
|
private resetAllImageSize;
|
|
28
29
|
private delayResetAllImageSize;
|
|
29
30
|
preprocessImages(doc: IDocument): Promise<void>;
|
|
30
31
|
private setImagePreviewUrl;
|
|
31
32
|
private applyPreviewUrl;
|
|
33
|
+
private setImageSource;
|
|
32
34
|
private setImageStyle;
|
|
33
35
|
private prepareImageSize;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
private
|
|
37
|
-
private getImageSizesSummary;
|
|
36
|
+
loadImageSizes(doc: IDocument): Promise<ImageSizeDescriptor[]>;
|
|
37
|
+
persistImageSizes(doc: IDocument, sizes: ImageSizeDescriptor[]): Promise<void>;
|
|
38
|
+
private getImageSizeMap;
|
|
38
39
|
private getImageUrl;
|
|
39
40
|
private prefetchImageSize;
|
|
40
41
|
private revokeObjectURL;
|
|
@@ -43,20 +44,29 @@ export declare class HtmlImageLoader implements IHtmlImageLoader {
|
|
|
43
44
|
private getColumnMetrics;
|
|
44
45
|
private resetImageStyles;
|
|
45
46
|
private resetImageWidthHeight;
|
|
46
|
-
private
|
|
47
|
-
resetImageSize: (doc: IDocument) => Promise<void>;
|
|
47
|
+
private resetImageSize;
|
|
48
48
|
private resetInlineImageSize;
|
|
49
|
+
private applyOnlyOneImageStyles;
|
|
49
50
|
private handleOnlyOneImageInDocument;
|
|
51
|
+
private clearPercentageSizeAttributes;
|
|
50
52
|
private resetImageHeight;
|
|
51
53
|
private forceSetImageHeight;
|
|
52
54
|
private calcImageHeight;
|
|
55
|
+
private getImageIntrinsicSize;
|
|
56
|
+
private hasNonImageText;
|
|
57
|
+
private getOnlyImageInDocument;
|
|
53
58
|
private checkIsOnlyOneImageInDocument;
|
|
54
59
|
private checkIsInlineTag;
|
|
55
|
-
private
|
|
60
|
+
private isInlineImage;
|
|
56
61
|
private findSiblingNodes;
|
|
57
|
-
private
|
|
58
|
-
private checkElementIsFootnote;
|
|
62
|
+
private hasInlineSiblings;
|
|
59
63
|
loadImages(doc: IDocument, visibleElements: Element[]): Promise<void>;
|
|
64
|
+
private queryOriginElement;
|
|
60
65
|
private loadSingleImage;
|
|
66
|
+
private waitForImageReady;
|
|
67
|
+
private isImageUsable;
|
|
68
|
+
private retryLoadAfterDecodeFailure;
|
|
69
|
+
private resolveLoadUrl;
|
|
70
|
+
private resolveSvgBlobUrl;
|
|
61
71
|
dispose(): Promise<void>;
|
|
62
72
|
}
|